summaryrefslogtreecommitdiffstats
path: root/sqlglot/executor/python.py
diff options
context:
space:
mode:
Diffstat (limited to 'sqlglot/executor/python.py')
-rw-r--r--sqlglot/executor/python.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/sqlglot/executor/python.py b/sqlglot/executor/python.py
index 9f22c45..29848c6 100644
--- a/sqlglot/executor/python.py
+++ b/sqlglot/executor/python.py
@@ -394,6 +394,18 @@ def _case_sql(self, expression):
return chain
+def _lambda_sql(self, e: exp.Lambda) -> str:
+ names = {e.name.lower() for e in e.expressions}
+
+ e = e.transform(
+ lambda n: exp.Var(this=n.name)
+ if isinstance(n, exp.Identifier) and n.name.lower() in names
+ else n
+ )
+
+ return f"lambda {self.expressions(e, flat=True)}: {self.sql(e, 'this')}"
+
+
class Python(Dialect):
class Tokenizer(tokens.Tokenizer):
ESCAPES = ["\\"]
@@ -414,6 +426,7 @@ class Python(Dialect):
exp.Extract: lambda self, e: f"EXTRACT('{e.name.lower()}', {self.sql(e, 'expression')})",
exp.In: lambda self, e: f"{self.sql(e, 'this')} in ({self.expressions(e, flat=True)})",
exp.Is: lambda self, e: self.binary(e, "is"),
+ exp.Lambda: _lambda_sql,
exp.Not: lambda self, e: f"not {self.sql(e.this)}",
exp.Null: lambda *_: "None",
exp.Or: lambda self, e: self.binary(e, "or"),