summaryrefslogtreecommitdiffstats
path: root/sqlglot/executor/python.py
diff options
context:
space:
mode:
authorDaniel Baumann <mail@daniel-baumann.ch>2023-12-10 10:46:01 +0000
committerDaniel Baumann <mail@daniel-baumann.ch>2023-12-10 10:46:01 +0000
commit8fe30fd23dc37ec3516e530a86d1c4b604e71241 (patch)
tree6e2ebbf565b0351fd0f003f488a8339e771ad90c /sqlglot/executor/python.py
parentReleasing debian version 19.0.1-1. (diff)
downloadsqlglot-8fe30fd23dc37ec3516e530a86d1c4b604e71241.tar.xz
sqlglot-8fe30fd23dc37ec3516e530a86d1c4b604e71241.zip
Merging upstream version 20.1.0.
Signed-off-by: Daniel Baumann <mail@daniel-baumann.ch>
Diffstat (limited to 'sqlglot/executor/python.py')
-rw-r--r--sqlglot/executor/python.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/sqlglot/executor/python.py b/sqlglot/executor/python.py
index d2ae79d..e1e597d 100644
--- a/sqlglot/executor/python.py
+++ b/sqlglot/executor/python.py
@@ -397,6 +397,20 @@ def _lambda_sql(self, e: exp.Lambda) -> str:
return f"lambda {self.expressions(e, flat=True)}: {self.sql(e, 'this')}"
+def _div_sql(self: generator.Generator, e: exp.Div) -> str:
+ denominator = self.sql(e, "expression")
+
+ if e.args.get("safe"):
+ denominator += " or None"
+
+ sql = f"DIV({self.sql(e, 'this')}, {denominator})"
+
+ if e.args.get("typed"):
+ sql = f"int({sql})"
+
+ return sql
+
+
class Python(Dialect):
class Tokenizer(tokens.Tokenizer):
STRING_ESCAPES = ["\\"]
@@ -413,7 +427,11 @@ class Python(Dialect):
exp.Boolean: lambda self, e: "True" if e.this else "False",
exp.Cast: lambda self, e: f"CAST({self.sql(e.this)}, exp.DataType.Type.{e.args['to']})",
exp.Column: lambda self, e: f"scope[{self.sql(e, 'table') or None}][{self.sql(e.this)}]",
+ exp.Concat: lambda self, e: self.func(
+ "SAFECONCAT" if e.args.get("safe") else "CONCAT", *e.expressions
+ ),
exp.Distinct: lambda self, e: f"set({self.sql(e, 'this')})",
+ exp.Div: _div_sql,
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.Interval: lambda self, e: f"INTERVAL({self.sql(e.this)}, '{self.sql(e.unit)}')",