From 42a1548cecf48d18233f56e3385cf9c89abcb9c2 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 3 Mar 2024 15:11:07 +0100 Subject: Merging upstream version 22.2.0. Signed-off-by: Daniel Baumann --- sqlglot/executor/context.py | 2 +- sqlglot/executor/python.py | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) (limited to 'sqlglot/executor') diff --git a/sqlglot/executor/context.py b/sqlglot/executor/context.py index e4c4040..a411c18 100644 --- a/sqlglot/executor/context.py +++ b/sqlglot/executor/context.py @@ -78,7 +78,7 @@ class Context: def sort(self, key) -> None: def sort_key(row: t.Tuple) -> t.Tuple: self.set_row(row) - return self.eval_tuple(key) + return tuple((t is None, t) for t in self.eval_tuple(key)) self.table.rows.sort(key=sort_key) diff --git a/sqlglot/executor/python.py b/sqlglot/executor/python.py index c0becbe..a2b23d4 100644 --- a/sqlglot/executor/python.py +++ b/sqlglot/executor/python.py @@ -142,7 +142,6 @@ class PythonExecutor: context = self.context({alias: table}) yield context types = [] - for row in reader: if not types: for v in row: @@ -150,7 +149,11 @@ class PythonExecutor: types.append(type(ast.literal_eval(v))) except (ValueError, SyntaxError): types.append(str) - context.set_row(tuple(t(v) for t, v in zip(types, row))) + + # We can't cast empty values ('') to non-string types, so we convert them to None instead + context.set_row( + tuple(None if (t is not str and v == "") else t(v) for t, v in zip(types, row)) + ) yield context.table.reader def join(self, step, context): -- cgit v1.2.3