Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions sql_metadata/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -488,10 +488,14 @@ def values_dict(self) -> dict[str, Any] | None:

if is_multi:
self._values_dict = {
col: [row[i] for row in values] for i, col in enumerate(columns)
col: [row[i] if i < len(row) else None for row in values]
for i, col in enumerate(columns)
}
else:
self._values_dict = dict(zip(columns, values))
self._values_dict = {
col: (values[i] if i < len(values) else None)
for i, col in enumerate(columns)
}
return self._values_dict

@property
Expand Down
21 changes: 21 additions & 0 deletions test/test_values.py
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,27 @@ def test_insert_multi_row_values():
assert p.values_dict == {"field1": [1, 3], "field2": [2, 4]}


def test_insert_multi_row_ragged_values_dict():
"""Ragged multi-row VALUES must not IndexError in values_dict."""
p = Parser("INSERT INTO t (a, b) VALUES (1, 2), (3)")
assert p.values == [[1, 2], [3]]
assert p.values_dict == {"a": [1, 3], "b": [2, None]}


def test_insert_multi_row_all_rows_shorter_than_columns():
"""Every VALUES row shorter than the column list still yields all keys."""
p = Parser("INSERT INTO t (a, b) VALUES (1), (2)")
assert p.values == [[1], [2]]
assert p.values_dict == {"a": [1, 2], "b": [None, None]}


def test_insert_single_row_shorter_than_columns():
"""Single-row VALUES shorter than the column list still yields all keys."""
p = Parser("INSERT INTO t (a, b) VALUES (1)")
assert p.values == [1]
assert p.values_dict == {"a": 1, "b": None}


def test_insert_with_expression_value():
"""INSERT with a function call in VALUES uses str(val) fallback."""
p = Parser("INSERT INTO t (a) VALUES (CURRENT_TIMESTAMP)")
Expand Down