Skip to content

fix(versioning): use dolt table import -r for row loading (handle empty strings in typed cols) - #20

Merged
SammyBytes merged 1 commit into
mainfrom
fix/push-csv-with-type-coercion
Aug 31, 2026
Merged

fix(versioning): use dolt table import -r for row loading (handle empty strings in typed cols)#20
SammyBytes merged 1 commit into
mainfrom
fix/push-csv-with-type-coercion

Conversation

@SammyBytes

Copy link
Copy Markdown
Owner

Push crashed the server with 'Incorrect datetime value: ''' when a row had empty string in a typed column (common MySQL sql_mode='' artifact). The server built per-row INSERT INTO...VALUES statements and ran through dolt sql; empty strings reached SQL verbatim. Switched to dolt table import -r against per-table CSV temp files — same command the client uses, with native type coercion. Empty strings in DATETIME/INT now land as NULL. Bonus: O(tables) subprocesses instead of O(rows).

277 unit tests pass; lint clean.

The push-commits endpoint rebuilt the rows into per-row INSERT INTO...
VALUES statements and ran them through dolt sql. Empty strings in
datetime/date/numeric columns (a common artifact of MySQL running with
sql_mode='') reached the SQL verbatim and Dolt rejected them with
'Incorrect datetime value: '''.

Switched to dolt table import -r against a per-table temp CSV file -
the same command the client uses locally. Dolt's CSV parser performs
the type coercion the schema expects (empty string -> NULL for typed
columns) so empty strings in DATETIME/INT columns now land as NULL
instead of crashing the request. Bonus: one subprocess per table
instead of one per row, so pushes with thousands of rows are an order
of magnitude faster.

277 unit tests pass; lint clean.
@SammyBytes
SammyBytes merged commit 81f9a01 into main Aug 31, 2026
2 checks passed
@SammyBytes
SammyBytes deleted the fix/push-csv-with-type-coercion branch August 31, 2026 17:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant