diff --git a/src/pg-core/dialect.ts b/src/pg-core/dialect.ts index 937568aaa..2f453eb81 100644 --- a/src/pg-core/dialect.ts +++ b/src/pg-core/dialect.ts @@ -346,12 +346,11 @@ export class PgDialect { } buildInsertQuery({ table, values, onConflict, returning }: PgInsertConfig): SQL { - const isSingleValue = values.length === 1; const valuesSqlList: ((SQLChunk | SQL)[] | SQL)[] = []; const columns: Record = table[Table.Symbol.Columns]; - const colEntries: [string, PgColumn][] = isSingleValue - ? Object.keys(values[0]!).map((fieldName) => [fieldName, columns[fieldName]!]) - : Object.entries(columns); + + const colEntries: [string, PgColumn][] = Object.entries(columns); + const insertOrder = colEntries.map(([, column]) => sql.identifier(column.name)); for (const [valueIndex, value] of values.entries()) { @@ -364,6 +363,7 @@ export class PgDialect { valueList.push(colValue); } } + valuesSqlList.push(valueList); if (valueIndex < values.length - 1) { valuesSqlList.push(sql`, `); diff --git a/src/sqlite-core/dialect.ts b/src/sqlite-core/dialect.ts index 14173bfc9..9c1c53bf4 100644 --- a/src/sqlite-core/dialect.ts +++ b/src/sqlite-core/dialect.ts @@ -274,12 +274,11 @@ export abstract class SQLiteDialect { } buildInsertQuery({ table, values, onConflict, returning }: SQLiteInsertConfig): SQL { - const isSingleValue = values.length === 1; + // const isSingleValue = values.length === 1; const valuesSqlList: ((SQLChunk | SQL)[] | SQL)[] = []; const columns: Record = table[Table.Symbol.Columns]; - const colEntries: [string, SQLiteColumn][] = isSingleValue - ? Object.keys(values[0]!).map((fieldName) => [fieldName, columns[fieldName]!]) - : Object.entries(columns); + + const colEntries: [string, SQLiteColumn][] = Object.entries(columns); const insertOrder = colEntries.map(([, column]) => sql.identifier(column.name)); for (const [valueIndex, value] of values.entries()) { @@ -312,6 +311,10 @@ export abstract class SQLiteDialect { const onConflictSql = onConflict ? sql` on conflict ${onConflict}` : undefined; + // if (isSingleValue && valuesSqlList.length === 0){ + // return sql`insert into ${table} default values ${onConflictSql}${returningSql}`; + // } + return sql`insert into ${table} ${insertOrder} values ${valuesSql}${onConflictSql}${returningSql}`; } diff --git a/src/sqlite-core/query-builders/insert.ts b/src/sqlite-core/query-builders/insert.ts index 2b440598a..a019116aa 100644 --- a/src/sqlite-core/query-builders/insert.ts +++ b/src/sqlite-core/query-builders/insert.ts @@ -57,6 +57,12 @@ export class SQLiteInsertBuilder< return result; }); + // if (mappedValues.length > 1 && mappedValues.some((t) => Object.keys(t).length === 0)) { + // throw new Error( + // `One of the values you want to insert is empty. In SQLite you can insert only one empty object per statement. For this case Drizzle with use "INSERT INTO ... DEFAULT VALUES" syntax`, + // ); + // } + return new SQLiteInsert(this.table, mappedValues, this.session, this.dialect); } }