From f08286d2a1d03f95efeaab6c9bd233f08242aceb Mon Sep 17 00:00:00 2001 From: "github-actions[bot] (aider)" Date: Tue, 20 May 2025 13:00:30 +0000 Subject: [PATCH] fix: Set empty string for overridden string defaults --- .../display/dbtable/queries/insert.ts | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/frontend/src/lib/components/apps/components/display/dbtable/queries/insert.ts b/frontend/src/lib/components/apps/components/display/dbtable/queries/insert.ts index 0b908504f4..a0d048d621 100644 --- a/frontend/src/lib/components/apps/components/display/dbtable/queries/insert.ts +++ b/frontend/src/lib/components/apps/components/display/dbtable/queries/insert.ts @@ -26,22 +26,44 @@ function formatColumnNames(columns: ColumnDef[]): string { function getUserDefaultValue(column: ColumnDef) { if (column.defaultValueNull) { return 'NULL' - } else if (column.defaultUserValue) { + } else if (column.defaultUserValue !== undefined) { return typeof column.defaultUserValue === 'string' ? `'${column.defaultUserValue}'` : column.defaultUserValue } } +function isStringType(datatype: string): boolean { + if (!datatype) return false + const lowerType = datatype.toLowerCase() + // Covers common SQL string types like VARCHAR, CHAR, TEXT, NVARCHAR, NCHAR + // and also types like 'string' from BigQuery. + return lowerType.includes('char') || lowerType.includes('text') || lowerType.includes('string') +} + function formatDefaultValues(columns: ColumnDef[]): string { const defaultValues = columns .map((c) => { const userDefaultValue = getUserDefaultValue(c) if (c.overrideDefaultValue === true) { - return userDefaultValue + // User wants to override the database default. + if (userDefaultValue !== undefined) { + // User specified an explicit override (e.g., a value, or NULL via defaultValueNull) + return userDefaultValue + } else { + // User specified "override" but didn't provide a value or check "set to NULL". + // For string types, interpret this as "override with empty string". + // For non-string types, interpret as "override with NULL" (by returning undefined). + if (isStringType(c.datatype)) { + return "''" // SQL empty string literal + } + return undefined // Will result in NULL for this column in the INSERT statement + } + } else { + // User does not want to override the database default. + // Use user-specified default if available, otherwise use database default. + return userDefaultValue ?? c.defaultvalue } - - return userDefaultValue ?? c.defaultvalue }) .join(', ')