Updates
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
type Params = {
|
||||
sql: string;
|
||||
table: string;
|
||||
data: any[];
|
||||
};
|
||||
export default function ({ sql: passed_sql, table, data }: Params): Promise<string>;
|
||||
export {};
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
import init from "../functions/init";
|
||||
export default async function ({ sql: passed_sql, table, data }) {
|
||||
let sql = passed_sql;
|
||||
const { dbSchema } = await init();
|
||||
const table_schema = dbSchema.tables.find((t) => t.tableName == table);
|
||||
if (table_schema?.tableName) {
|
||||
const set_sql = Object.keys(data[0])
|
||||
.map((field) => `${field} = excluded.${field}`)
|
||||
.join(", ");
|
||||
const unique_fields = table_schema.fields.filter((f) => f.unique);
|
||||
for (let i = 0; i < unique_fields.length; i++) {
|
||||
const field = unique_fields[i];
|
||||
sql += ` ON CONFLICT(${field?.fieldName}) DO UPDATE SET ${set_sql}`;
|
||||
}
|
||||
if (table_schema.uniqueConstraints?.[0]) {
|
||||
for (let i = 0; i < table_schema.uniqueConstraints.length; i++) {
|
||||
const constraint = table_schema.uniqueConstraints[i];
|
||||
sql += ` ON CONFLICT(${constraint?.constraintTableFields?.map((c) => c.value)?.join(", ")}) DO UPDATE SET ${set_sql}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
return sql;
|
||||
}
|
||||
Vendored
+2
-1
@@ -6,10 +6,11 @@ type Params<Schema extends {
|
||||
}, Table extends string = string> = {
|
||||
table: Table;
|
||||
data: Schema[];
|
||||
update_on_duplicate?: boolean;
|
||||
};
|
||||
export default function DbInsert<Schema extends {
|
||||
[k: string]: any;
|
||||
} = {
|
||||
[k: string]: any;
|
||||
}, Table extends string = string>({ table, data }: Params<Schema, Table>): Promise<APIResponseObject>;
|
||||
}, Table extends string = string>({ table, data, update_on_duplicate, }: Params<Schema, Table>): Promise<APIResponseObject>;
|
||||
export {};
|
||||
|
||||
Vendored
+8
-2
@@ -1,6 +1,7 @@
|
||||
import DbClient from ".";
|
||||
import sqlInsertGenerator from "../../utils/sql-insert-generator";
|
||||
export default async function DbInsert({ table, data }) {
|
||||
import grabDuplicateSafeInsertSql from "../grab-duplicate-safe-insert-sql";
|
||||
export default async function DbInsert({ table, data, update_on_duplicate, }) {
|
||||
let sqlObj = null;
|
||||
try {
|
||||
const finalData = data.map((d) => ({
|
||||
@@ -13,7 +14,12 @@ export default async function DbInsert({ table, data }) {
|
||||
tableName: table,
|
||||
data: finalData,
|
||||
}) || null;
|
||||
const res = DbClient.run(sqlObj?.query || "", sqlObj?.values || []);
|
||||
let sql = sqlObj?.query || "";
|
||||
if (update_on_duplicate && data[0]) {
|
||||
sql = await grabDuplicateSafeInsertSql({ data, table, sql });
|
||||
}
|
||||
(sqlObj || {}).query = sql;
|
||||
const res = DbClient.run(sql, sqlObj?.values || []);
|
||||
return {
|
||||
success: Boolean(Number(res.lastInsertRowid)),
|
||||
postInsertReturn: {
|
||||
|
||||
Vendored
+1
-6
@@ -290,12 +290,7 @@ class SQLiteSchemaManager {
|
||||
const parts = [fieldName];
|
||||
// Data type mapping
|
||||
const dataType = this.mapDataType(field);
|
||||
if (dataType == "BLOB") {
|
||||
parts.push("FLOAT[128]");
|
||||
}
|
||||
else {
|
||||
parts.push(dataType);
|
||||
}
|
||||
parts.push(dataType);
|
||||
// Primary key
|
||||
if (field.primaryKey) {
|
||||
parts.push("PRIMARY KEY");
|
||||
|
||||
Reference in New Issue
Block a user