@type32/tauri-sqlite-orm 0.1.18-5 → 0.1.18-6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +80 -9
- package/dist/index.d.ts +80 -9
- package/dist/index.js +324 -44
- package/dist/index.mjs +309 -42
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -38,6 +38,7 @@ declare class SQLiteColumn<TName extends string = string, TType extends ColumnDa
|
|
|
38
38
|
unique(): SQLiteColumn<TName, TType, TMode, TNotNull, THasDefault, TAutoincrement>;
|
|
39
39
|
references<T extends AnyTable, K extends keyof T["_"]["columns"] & string>(ref: T, column: K): SQLiteColumn<TName, TType, TMode, TNotNull, THasDefault, TAutoincrement>;
|
|
40
40
|
$onUpdateFn(fn: () => ColumnValueTypes<TType, TMode>): SQLiteColumn<TName, TType, TMode, TNotNull, THasDefault, TAutoincrement>;
|
|
41
|
+
as(alias: string): SQLiteColumn<TName, TType, TMode, TNotNull, THasDefault, TAutoincrement>;
|
|
41
42
|
}
|
|
42
43
|
declare const text: <TName extends string>(name: TName) => SQLiteColumn<TName, "TEXT", "default", false, false, false>;
|
|
43
44
|
declare const integer: <TName extends string, TMode extends Mode = "default">(name: TName, config?: {
|
|
@@ -77,6 +78,7 @@ type SQLCondition = {
|
|
|
77
78
|
declare const eq: <T>(column: AnySQLiteColumn, value: T) => SQLCondition;
|
|
78
79
|
declare const and: (...conditions: SQLCondition[]) => SQLCondition;
|
|
79
80
|
declare const or: (...conditions: SQLCondition[]) => SQLCondition;
|
|
81
|
+
declare const not: (condition: SQLCondition) => SQLCondition;
|
|
80
82
|
declare const gt: <T>(column: AnySQLiteColumn, value: T) => SQLCondition;
|
|
81
83
|
declare const gte: <T>(column: AnySQLiteColumn, value: T) => SQLCondition;
|
|
82
84
|
declare const lt: <T>(column: AnySQLiteColumn, value: T) => SQLCondition;
|
|
@@ -85,13 +87,35 @@ declare const like: (column: AnySQLiteColumn, pattern: string) => SQLCondition;
|
|
|
85
87
|
declare const isNull: (column: AnySQLiteColumn) => SQLCondition;
|
|
86
88
|
declare const isNotNull: (column: AnySQLiteColumn) => SQLCondition;
|
|
87
89
|
declare const inArray: <T>(column: AnySQLiteColumn, values: T[]) => SQLCondition;
|
|
90
|
+
declare const asc: (column: AnySQLiteColumn) => {
|
|
91
|
+
sql: string;
|
|
92
|
+
params: never[];
|
|
93
|
+
};
|
|
94
|
+
declare const desc: (column: AnySQLiteColumn) => {
|
|
95
|
+
sql: string;
|
|
96
|
+
params: never[];
|
|
97
|
+
};
|
|
98
|
+
declare const count: (column?: AnySQLiteColumn) => SQLCondition;
|
|
99
|
+
declare const countDistinct: (column: AnySQLiteColumn) => SQLCondition;
|
|
100
|
+
declare const sum: (column: AnySQLiteColumn) => SQLCondition;
|
|
101
|
+
declare const avg: (column: AnySQLiteColumn) => SQLCondition;
|
|
102
|
+
declare const max: (column: AnySQLiteColumn) => SQLCondition;
|
|
103
|
+
declare const min: (column: AnySQLiteColumn) => SQLCondition;
|
|
104
|
+
declare const sql: <T = unknown>(strings: TemplateStringsArray, ...values: any[]) => {
|
|
105
|
+
sql: string;
|
|
106
|
+
params: any[];
|
|
107
|
+
mapWith?: (value: any) => T;
|
|
108
|
+
};
|
|
88
109
|
declare class BaseQueryBuilder {
|
|
89
110
|
protected db: Database;
|
|
90
111
|
protected query: string;
|
|
91
112
|
protected params: any[];
|
|
92
113
|
constructor(db: Database);
|
|
93
114
|
where(condition: SQLCondition): this;
|
|
94
|
-
orderBy(column: AnySQLiteColumn
|
|
115
|
+
orderBy(column: AnySQLiteColumn | {
|
|
116
|
+
sql: string;
|
|
117
|
+
params: any[];
|
|
118
|
+
}, direction?: "ASC" | "DESC"): this;
|
|
95
119
|
limit(count: number): this;
|
|
96
120
|
offset(count: number): this;
|
|
97
121
|
build(): {
|
|
@@ -102,31 +126,69 @@ declare class BaseQueryBuilder {
|
|
|
102
126
|
declare class SelectQueryBuilder<TTable extends AnyTable, TSelectedColumns extends (keyof TTable["_"]["columns"])[] | undefined = undefined> extends BaseQueryBuilder {
|
|
103
127
|
private table;
|
|
104
128
|
private columns?;
|
|
129
|
+
private isDistinct;
|
|
130
|
+
private groupByColumns;
|
|
131
|
+
private havingCondition;
|
|
105
132
|
constructor(db: Database, table: TTable, columns?: TSelectedColumns | undefined);
|
|
133
|
+
distinct(): this;
|
|
134
|
+
groupBy(...columns: AnySQLiteColumn[]): this;
|
|
135
|
+
having(condition: SQLCondition): this;
|
|
106
136
|
execute(): Promise<TSelectedColumns extends (keyof TTable["_"]["columns"])[] ? Pick<InferSelectModel<TTable>, TSelectedColumns[number]>[] : InferSelectModel<TTable>[]>;
|
|
137
|
+
all(): Promise<TSelectedColumns extends (keyof TTable["_"]["columns"])[] ? Pick<InferSelectModel<TTable>, TSelectedColumns[number]>[] : InferSelectModel<TTable>[]>;
|
|
138
|
+
get(): Promise<TSelectedColumns extends (keyof TTable["_"]["columns"])[] ? Pick<InferSelectModel<TTable>, TSelectedColumns[number]> | undefined : InferSelectModel<TTable> | undefined>;
|
|
107
139
|
}
|
|
108
140
|
declare class InsertQueryBuilder<T extends AnyTable> extends BaseQueryBuilder {
|
|
109
141
|
private table;
|
|
110
142
|
private dataSets;
|
|
143
|
+
private returningColumns;
|
|
144
|
+
private onConflictAction;
|
|
145
|
+
private conflictTarget;
|
|
146
|
+
private updateSet;
|
|
111
147
|
constructor(db: Database, table: T);
|
|
112
148
|
values(data: Partial<InferInsertModel<T>> | Partial<InferInsertModel<T>>[]): this;
|
|
113
|
-
|
|
149
|
+
returning(...columns: (keyof T["_"]["columns"])[]): this;
|
|
150
|
+
onConflictDoNothing(target?: AnySQLiteColumn | AnySQLiteColumn[]): this;
|
|
151
|
+
onConflictDoUpdate(config: {
|
|
152
|
+
target: AnySQLiteColumn | AnySQLiteColumn[];
|
|
153
|
+
set: Partial<InferInsertModel<T>>;
|
|
154
|
+
}): this;
|
|
155
|
+
private processDefaultValues;
|
|
156
|
+
private buildConflictClause;
|
|
157
|
+
execute(): Promise<T extends AnyTable ? (InferSelectModel<T> & Record<string, any>)[] : never>;
|
|
158
|
+
returningAll(): Promise<InferSelectModel<T>[]>;
|
|
114
159
|
}
|
|
115
160
|
declare class UpdateQueryBuilder<T extends AnyTable> extends BaseQueryBuilder {
|
|
116
161
|
private table;
|
|
117
162
|
private updateData;
|
|
163
|
+
private returningColumns;
|
|
118
164
|
constructor(db: Database, table: T);
|
|
119
165
|
set(data: Partial<InferInsertModel<T>>): this;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
execute(): Promise<number>;
|
|
166
|
+
returning(...columns: (keyof T["_"]["columns"])[]): this;
|
|
167
|
+
private buildUpdateClause;
|
|
168
|
+
execute(): Promise<T extends AnyTable ? (InferSelectModel<T> & Record<string, any>)[] : never>;
|
|
169
|
+
returningAll(): Promise<InferSelectModel<T>[]>;
|
|
125
170
|
}
|
|
126
171
|
declare class DeleteQueryBuilder<T extends AnyTable> extends BaseQueryBuilder {
|
|
127
172
|
private table;
|
|
173
|
+
private returningColumns;
|
|
128
174
|
constructor(db: Database, table: T);
|
|
129
|
-
|
|
175
|
+
returning(...columns: (keyof T["_"]["columns"])[]): this;
|
|
176
|
+
execute(): Promise<T extends AnyTable ? (InferSelectModel<T> & Record<string, any>)[] : never>;
|
|
177
|
+
returningAll(): Promise<InferSelectModel<T>[]>;
|
|
178
|
+
}
|
|
179
|
+
declare class WithQueryBuilder {
|
|
180
|
+
private db;
|
|
181
|
+
private ctes;
|
|
182
|
+
constructor(db: Database);
|
|
183
|
+
with(alias: string, query: {
|
|
184
|
+
sql: string;
|
|
185
|
+
params: any[];
|
|
186
|
+
}): this;
|
|
187
|
+
select<T extends AnyTable, C extends (keyof T["_"]["columns"])[] | undefined = undefined>(table: T, columns?: C): SelectQueryBuilder<T, C>;
|
|
188
|
+
insert<T extends AnyTable>(table: T): InsertQueryBuilder<T>;
|
|
189
|
+
update<T extends AnyTable>(table: T): UpdateQueryBuilder<T>;
|
|
190
|
+
delete<T extends AnyTable>(table: T): DeleteQueryBuilder<T>;
|
|
191
|
+
private applyWithClause;
|
|
130
192
|
}
|
|
131
193
|
declare class TauriORM {
|
|
132
194
|
private db;
|
|
@@ -138,7 +200,14 @@ declare class TauriORM {
|
|
|
138
200
|
insert<T extends AnyTable>(table: T): InsertQueryBuilder<T>;
|
|
139
201
|
update<T extends AnyTable>(table: T): UpdateQueryBuilder<T>;
|
|
140
202
|
delete<T extends AnyTable>(table: T): DeleteQueryBuilder<T>;
|
|
203
|
+
$with(alias: string): {
|
|
204
|
+
as: (query: {
|
|
205
|
+
sql: string;
|
|
206
|
+
params: any[];
|
|
207
|
+
}) => WithQueryBuilder;
|
|
208
|
+
};
|
|
141
209
|
transaction<T>(callback: (tx: TauriORM) => Promise<T>): Promise<T>;
|
|
210
|
+
rollback(): never;
|
|
142
211
|
private ensureSchemaMeta;
|
|
143
212
|
private getSchemaMeta;
|
|
144
213
|
private setSchemaMeta;
|
|
@@ -156,5 +225,7 @@ declare const relations: <T extends AnyTable, R extends Record<string, any>>(tab
|
|
|
156
225
|
one: any;
|
|
157
226
|
many: any;
|
|
158
227
|
}) => R) => R;
|
|
228
|
+
declare const getTableColumns: <T extends AnyTable>(table: T) => Record<string, AnySQLiteColumn>;
|
|
229
|
+
declare const alias: <T extends AnyTable>(table: T, alias: string) => Table<T["_"]["columns"], T["_"]["name"]>;
|
|
159
230
|
|
|
160
|
-
export { type AnySQLiteColumn, type AnyTable, type ColumnDataType, type ColumnOptions, DeleteQueryBuilder, type InferInsertModel, type InferSelectModel, InsertQueryBuilder, type Mode, type SQLCondition, SQLiteColumn, SelectQueryBuilder, Table, TauriORM, UpdateQueryBuilder, and, blob, boolean, eq, gt, gte, inArray, integer, isNotNull, isNull, like, lt, lte, or, real, relations, sqliteTable, text };
|
|
231
|
+
export { type AnySQLiteColumn, type AnyTable, type ColumnDataType, type ColumnOptions, DeleteQueryBuilder, type InferInsertModel, type InferSelectModel, InsertQueryBuilder, type Mode, type SQLCondition, SQLiteColumn, SelectQueryBuilder, Table, TauriORM, UpdateQueryBuilder, WithQueryBuilder, alias, and, asc, avg, blob, boolean, count, countDistinct, desc, eq, getTableColumns, gt, gte, inArray, integer, isNotNull, isNull, like, lt, lte, max, min, not, or, real, relations, sql, sqliteTable, sum, text };
|
package/dist/index.d.ts
CHANGED
|
@@ -38,6 +38,7 @@ declare class SQLiteColumn<TName extends string = string, TType extends ColumnDa
|
|
|
38
38
|
unique(): SQLiteColumn<TName, TType, TMode, TNotNull, THasDefault, TAutoincrement>;
|
|
39
39
|
references<T extends AnyTable, K extends keyof T["_"]["columns"] & string>(ref: T, column: K): SQLiteColumn<TName, TType, TMode, TNotNull, THasDefault, TAutoincrement>;
|
|
40
40
|
$onUpdateFn(fn: () => ColumnValueTypes<TType, TMode>): SQLiteColumn<TName, TType, TMode, TNotNull, THasDefault, TAutoincrement>;
|
|
41
|
+
as(alias: string): SQLiteColumn<TName, TType, TMode, TNotNull, THasDefault, TAutoincrement>;
|
|
41
42
|
}
|
|
42
43
|
declare const text: <TName extends string>(name: TName) => SQLiteColumn<TName, "TEXT", "default", false, false, false>;
|
|
43
44
|
declare const integer: <TName extends string, TMode extends Mode = "default">(name: TName, config?: {
|
|
@@ -77,6 +78,7 @@ type SQLCondition = {
|
|
|
77
78
|
declare const eq: <T>(column: AnySQLiteColumn, value: T) => SQLCondition;
|
|
78
79
|
declare const and: (...conditions: SQLCondition[]) => SQLCondition;
|
|
79
80
|
declare const or: (...conditions: SQLCondition[]) => SQLCondition;
|
|
81
|
+
declare const not: (condition: SQLCondition) => SQLCondition;
|
|
80
82
|
declare const gt: <T>(column: AnySQLiteColumn, value: T) => SQLCondition;
|
|
81
83
|
declare const gte: <T>(column: AnySQLiteColumn, value: T) => SQLCondition;
|
|
82
84
|
declare const lt: <T>(column: AnySQLiteColumn, value: T) => SQLCondition;
|
|
@@ -85,13 +87,35 @@ declare const like: (column: AnySQLiteColumn, pattern: string) => SQLCondition;
|
|
|
85
87
|
declare const isNull: (column: AnySQLiteColumn) => SQLCondition;
|
|
86
88
|
declare const isNotNull: (column: AnySQLiteColumn) => SQLCondition;
|
|
87
89
|
declare const inArray: <T>(column: AnySQLiteColumn, values: T[]) => SQLCondition;
|
|
90
|
+
declare const asc: (column: AnySQLiteColumn) => {
|
|
91
|
+
sql: string;
|
|
92
|
+
params: never[];
|
|
93
|
+
};
|
|
94
|
+
declare const desc: (column: AnySQLiteColumn) => {
|
|
95
|
+
sql: string;
|
|
96
|
+
params: never[];
|
|
97
|
+
};
|
|
98
|
+
declare const count: (column?: AnySQLiteColumn) => SQLCondition;
|
|
99
|
+
declare const countDistinct: (column: AnySQLiteColumn) => SQLCondition;
|
|
100
|
+
declare const sum: (column: AnySQLiteColumn) => SQLCondition;
|
|
101
|
+
declare const avg: (column: AnySQLiteColumn) => SQLCondition;
|
|
102
|
+
declare const max: (column: AnySQLiteColumn) => SQLCondition;
|
|
103
|
+
declare const min: (column: AnySQLiteColumn) => SQLCondition;
|
|
104
|
+
declare const sql: <T = unknown>(strings: TemplateStringsArray, ...values: any[]) => {
|
|
105
|
+
sql: string;
|
|
106
|
+
params: any[];
|
|
107
|
+
mapWith?: (value: any) => T;
|
|
108
|
+
};
|
|
88
109
|
declare class BaseQueryBuilder {
|
|
89
110
|
protected db: Database;
|
|
90
111
|
protected query: string;
|
|
91
112
|
protected params: any[];
|
|
92
113
|
constructor(db: Database);
|
|
93
114
|
where(condition: SQLCondition): this;
|
|
94
|
-
orderBy(column: AnySQLiteColumn
|
|
115
|
+
orderBy(column: AnySQLiteColumn | {
|
|
116
|
+
sql: string;
|
|
117
|
+
params: any[];
|
|
118
|
+
}, direction?: "ASC" | "DESC"): this;
|
|
95
119
|
limit(count: number): this;
|
|
96
120
|
offset(count: number): this;
|
|
97
121
|
build(): {
|
|
@@ -102,31 +126,69 @@ declare class BaseQueryBuilder {
|
|
|
102
126
|
declare class SelectQueryBuilder<TTable extends AnyTable, TSelectedColumns extends (keyof TTable["_"]["columns"])[] | undefined = undefined> extends BaseQueryBuilder {
|
|
103
127
|
private table;
|
|
104
128
|
private columns?;
|
|
129
|
+
private isDistinct;
|
|
130
|
+
private groupByColumns;
|
|
131
|
+
private havingCondition;
|
|
105
132
|
constructor(db: Database, table: TTable, columns?: TSelectedColumns | undefined);
|
|
133
|
+
distinct(): this;
|
|
134
|
+
groupBy(...columns: AnySQLiteColumn[]): this;
|
|
135
|
+
having(condition: SQLCondition): this;
|
|
106
136
|
execute(): Promise<TSelectedColumns extends (keyof TTable["_"]["columns"])[] ? Pick<InferSelectModel<TTable>, TSelectedColumns[number]>[] : InferSelectModel<TTable>[]>;
|
|
137
|
+
all(): Promise<TSelectedColumns extends (keyof TTable["_"]["columns"])[] ? Pick<InferSelectModel<TTable>, TSelectedColumns[number]>[] : InferSelectModel<TTable>[]>;
|
|
138
|
+
get(): Promise<TSelectedColumns extends (keyof TTable["_"]["columns"])[] ? Pick<InferSelectModel<TTable>, TSelectedColumns[number]> | undefined : InferSelectModel<TTable> | undefined>;
|
|
107
139
|
}
|
|
108
140
|
declare class InsertQueryBuilder<T extends AnyTable> extends BaseQueryBuilder {
|
|
109
141
|
private table;
|
|
110
142
|
private dataSets;
|
|
143
|
+
private returningColumns;
|
|
144
|
+
private onConflictAction;
|
|
145
|
+
private conflictTarget;
|
|
146
|
+
private updateSet;
|
|
111
147
|
constructor(db: Database, table: T);
|
|
112
148
|
values(data: Partial<InferInsertModel<T>> | Partial<InferInsertModel<T>>[]): this;
|
|
113
|
-
|
|
149
|
+
returning(...columns: (keyof T["_"]["columns"])[]): this;
|
|
150
|
+
onConflictDoNothing(target?: AnySQLiteColumn | AnySQLiteColumn[]): this;
|
|
151
|
+
onConflictDoUpdate(config: {
|
|
152
|
+
target: AnySQLiteColumn | AnySQLiteColumn[];
|
|
153
|
+
set: Partial<InferInsertModel<T>>;
|
|
154
|
+
}): this;
|
|
155
|
+
private processDefaultValues;
|
|
156
|
+
private buildConflictClause;
|
|
157
|
+
execute(): Promise<T extends AnyTable ? (InferSelectModel<T> & Record<string, any>)[] : never>;
|
|
158
|
+
returningAll(): Promise<InferSelectModel<T>[]>;
|
|
114
159
|
}
|
|
115
160
|
declare class UpdateQueryBuilder<T extends AnyTable> extends BaseQueryBuilder {
|
|
116
161
|
private table;
|
|
117
162
|
private updateData;
|
|
163
|
+
private returningColumns;
|
|
118
164
|
constructor(db: Database, table: T);
|
|
119
165
|
set(data: Partial<InferInsertModel<T>>): this;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
execute(): Promise<number>;
|
|
166
|
+
returning(...columns: (keyof T["_"]["columns"])[]): this;
|
|
167
|
+
private buildUpdateClause;
|
|
168
|
+
execute(): Promise<T extends AnyTable ? (InferSelectModel<T> & Record<string, any>)[] : never>;
|
|
169
|
+
returningAll(): Promise<InferSelectModel<T>[]>;
|
|
125
170
|
}
|
|
126
171
|
declare class DeleteQueryBuilder<T extends AnyTable> extends BaseQueryBuilder {
|
|
127
172
|
private table;
|
|
173
|
+
private returningColumns;
|
|
128
174
|
constructor(db: Database, table: T);
|
|
129
|
-
|
|
175
|
+
returning(...columns: (keyof T["_"]["columns"])[]): this;
|
|
176
|
+
execute(): Promise<T extends AnyTable ? (InferSelectModel<T> & Record<string, any>)[] : never>;
|
|
177
|
+
returningAll(): Promise<InferSelectModel<T>[]>;
|
|
178
|
+
}
|
|
179
|
+
declare class WithQueryBuilder {
|
|
180
|
+
private db;
|
|
181
|
+
private ctes;
|
|
182
|
+
constructor(db: Database);
|
|
183
|
+
with(alias: string, query: {
|
|
184
|
+
sql: string;
|
|
185
|
+
params: any[];
|
|
186
|
+
}): this;
|
|
187
|
+
select<T extends AnyTable, C extends (keyof T["_"]["columns"])[] | undefined = undefined>(table: T, columns?: C): SelectQueryBuilder<T, C>;
|
|
188
|
+
insert<T extends AnyTable>(table: T): InsertQueryBuilder<T>;
|
|
189
|
+
update<T extends AnyTable>(table: T): UpdateQueryBuilder<T>;
|
|
190
|
+
delete<T extends AnyTable>(table: T): DeleteQueryBuilder<T>;
|
|
191
|
+
private applyWithClause;
|
|
130
192
|
}
|
|
131
193
|
declare class TauriORM {
|
|
132
194
|
private db;
|
|
@@ -138,7 +200,14 @@ declare class TauriORM {
|
|
|
138
200
|
insert<T extends AnyTable>(table: T): InsertQueryBuilder<T>;
|
|
139
201
|
update<T extends AnyTable>(table: T): UpdateQueryBuilder<T>;
|
|
140
202
|
delete<T extends AnyTable>(table: T): DeleteQueryBuilder<T>;
|
|
203
|
+
$with(alias: string): {
|
|
204
|
+
as: (query: {
|
|
205
|
+
sql: string;
|
|
206
|
+
params: any[];
|
|
207
|
+
}) => WithQueryBuilder;
|
|
208
|
+
};
|
|
141
209
|
transaction<T>(callback: (tx: TauriORM) => Promise<T>): Promise<T>;
|
|
210
|
+
rollback(): never;
|
|
142
211
|
private ensureSchemaMeta;
|
|
143
212
|
private getSchemaMeta;
|
|
144
213
|
private setSchemaMeta;
|
|
@@ -156,5 +225,7 @@ declare const relations: <T extends AnyTable, R extends Record<string, any>>(tab
|
|
|
156
225
|
one: any;
|
|
157
226
|
many: any;
|
|
158
227
|
}) => R) => R;
|
|
228
|
+
declare const getTableColumns: <T extends AnyTable>(table: T) => Record<string, AnySQLiteColumn>;
|
|
229
|
+
declare const alias: <T extends AnyTable>(table: T, alias: string) => Table<T["_"]["columns"], T["_"]["name"]>;
|
|
159
230
|
|
|
160
|
-
export { type AnySQLiteColumn, type AnyTable, type ColumnDataType, type ColumnOptions, DeleteQueryBuilder, type InferInsertModel, type InferSelectModel, InsertQueryBuilder, type Mode, type SQLCondition, SQLiteColumn, SelectQueryBuilder, Table, TauriORM, UpdateQueryBuilder, and, blob, boolean, eq, gt, gte, inArray, integer, isNotNull, isNull, like, lt, lte, or, real, relations, sqliteTable, text };
|
|
231
|
+
export { type AnySQLiteColumn, type AnyTable, type ColumnDataType, type ColumnOptions, DeleteQueryBuilder, type InferInsertModel, type InferSelectModel, InsertQueryBuilder, type Mode, type SQLCondition, SQLiteColumn, SelectQueryBuilder, Table, TauriORM, UpdateQueryBuilder, WithQueryBuilder, alias, and, asc, avg, blob, boolean, count, countDistinct, desc, eq, getTableColumns, gt, gte, inArray, integer, isNotNull, isNull, like, lt, lte, max, min, not, or, real, relations, sql, sqliteTable, sum, text };
|
package/dist/index.js
CHANGED
|
@@ -7,11 +7,11 @@ var __export = (target, all) => {
|
|
|
7
7
|
for (var name in all)
|
|
8
8
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
9
|
};
|
|
10
|
-
var __copyProps = (to, from, except,
|
|
10
|
+
var __copyProps = (to, from, except, desc2) => {
|
|
11
11
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
12
|
for (let key of __getOwnPropNames(from))
|
|
13
13
|
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc2 = __getOwnPropDesc(from, key)) || desc2.enumerable });
|
|
15
15
|
}
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
@@ -27,10 +27,18 @@ __export(index_exports, {
|
|
|
27
27
|
Table: () => Table,
|
|
28
28
|
TauriORM: () => TauriORM,
|
|
29
29
|
UpdateQueryBuilder: () => UpdateQueryBuilder,
|
|
30
|
+
WithQueryBuilder: () => WithQueryBuilder,
|
|
31
|
+
alias: () => alias,
|
|
30
32
|
and: () => and,
|
|
33
|
+
asc: () => asc,
|
|
34
|
+
avg: () => avg,
|
|
31
35
|
blob: () => blob,
|
|
32
36
|
boolean: () => boolean,
|
|
37
|
+
count: () => count,
|
|
38
|
+
countDistinct: () => countDistinct,
|
|
39
|
+
desc: () => desc,
|
|
33
40
|
eq: () => eq,
|
|
41
|
+
getTableColumns: () => getTableColumns,
|
|
34
42
|
gt: () => gt,
|
|
35
43
|
gte: () => gte,
|
|
36
44
|
inArray: () => inArray,
|
|
@@ -40,10 +48,15 @@ __export(index_exports, {
|
|
|
40
48
|
like: () => like,
|
|
41
49
|
lt: () => lt,
|
|
42
50
|
lte: () => lte,
|
|
51
|
+
max: () => max,
|
|
52
|
+
min: () => min,
|
|
53
|
+
not: () => not,
|
|
43
54
|
or: () => or,
|
|
44
55
|
real: () => real,
|
|
45
56
|
relations: () => relations,
|
|
57
|
+
sql: () => sql,
|
|
46
58
|
sqliteTable: () => sqliteTable,
|
|
59
|
+
sum: () => sum,
|
|
47
60
|
text: () => text
|
|
48
61
|
});
|
|
49
62
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -133,6 +146,9 @@ var SQLiteColumn = class _SQLiteColumn {
|
|
|
133
146
|
this._.mode
|
|
134
147
|
);
|
|
135
148
|
}
|
|
149
|
+
as(alias2) {
|
|
150
|
+
return this;
|
|
151
|
+
}
|
|
136
152
|
};
|
|
137
153
|
var text = (name) => new SQLiteColumn(name, "TEXT");
|
|
138
154
|
var integer = (name, config) => new SQLiteColumn(name, "INTEGER", {}, config?.mode || "default");
|
|
@@ -163,6 +179,10 @@ var or = (...conditions) => ({
|
|
|
163
179
|
sql: conditions.map((c) => `(${c.sql})`).join(" OR "),
|
|
164
180
|
params: conditions.flatMap((c) => c.params)
|
|
165
181
|
});
|
|
182
|
+
var not = (condition) => ({
|
|
183
|
+
sql: `NOT (${condition.sql})`,
|
|
184
|
+
params: condition.params
|
|
185
|
+
});
|
|
166
186
|
var gt = (column, value) => ({
|
|
167
187
|
sql: `${column._.name} > ?`,
|
|
168
188
|
params: [value]
|
|
@@ -195,6 +215,58 @@ var inArray = (column, values) => ({
|
|
|
195
215
|
sql: `${column._.name} IN (${values.map(() => "?").join(",")})`,
|
|
196
216
|
params: values
|
|
197
217
|
});
|
|
218
|
+
var asc = (column) => ({
|
|
219
|
+
sql: `${column._.name} ASC`,
|
|
220
|
+
params: []
|
|
221
|
+
});
|
|
222
|
+
var desc = (column) => ({
|
|
223
|
+
sql: `${column._.name} DESC`,
|
|
224
|
+
params: []
|
|
225
|
+
});
|
|
226
|
+
var count = (column) => ({
|
|
227
|
+
sql: `COUNT(${column ? column._.name : "*"})`,
|
|
228
|
+
params: []
|
|
229
|
+
});
|
|
230
|
+
var countDistinct = (column) => ({
|
|
231
|
+
sql: `COUNT(DISTINCT ${column._.name})`,
|
|
232
|
+
params: []
|
|
233
|
+
});
|
|
234
|
+
var sum = (column) => ({
|
|
235
|
+
sql: `SUM(${column._.name})`,
|
|
236
|
+
params: []
|
|
237
|
+
});
|
|
238
|
+
var avg = (column) => ({
|
|
239
|
+
sql: `AVG(${column._.name})`,
|
|
240
|
+
params: []
|
|
241
|
+
});
|
|
242
|
+
var max = (column) => ({
|
|
243
|
+
sql: `MAX(${column._.name})`,
|
|
244
|
+
params: []
|
|
245
|
+
});
|
|
246
|
+
var min = (column) => ({
|
|
247
|
+
sql: `MIN(${column._.name})`,
|
|
248
|
+
params: []
|
|
249
|
+
});
|
|
250
|
+
var sql = (strings, ...values) => {
|
|
251
|
+
const queryParts = [];
|
|
252
|
+
const params = [];
|
|
253
|
+
strings.forEach((str, i) => {
|
|
254
|
+
queryParts.push(str);
|
|
255
|
+
if (values[i] !== void 0) {
|
|
256
|
+
if (typeof values[i] === "object" && values[i].sql) {
|
|
257
|
+
queryParts.push(values[i].sql);
|
|
258
|
+
params.push(...values[i].params);
|
|
259
|
+
} else {
|
|
260
|
+
queryParts.push("?");
|
|
261
|
+
params.push(values[i]);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
return {
|
|
266
|
+
sql: queryParts.join(""),
|
|
267
|
+
params
|
|
268
|
+
};
|
|
269
|
+
};
|
|
198
270
|
var BaseQueryBuilder = class {
|
|
199
271
|
constructor(db) {
|
|
200
272
|
this.db = db;
|
|
@@ -207,15 +279,20 @@ var BaseQueryBuilder = class {
|
|
|
207
279
|
return this;
|
|
208
280
|
}
|
|
209
281
|
orderBy(column, direction = "ASC") {
|
|
210
|
-
|
|
282
|
+
if ("sql" in column) {
|
|
283
|
+
this.query += ` ORDER BY ${column.sql} ${direction}`;
|
|
284
|
+
this.params.push(...column.params);
|
|
285
|
+
} else {
|
|
286
|
+
this.query += ` ORDER BY ${column._.name} ${direction}`;
|
|
287
|
+
}
|
|
211
288
|
return this;
|
|
212
289
|
}
|
|
213
|
-
limit(
|
|
214
|
-
this.query += ` LIMIT ${
|
|
290
|
+
limit(count2) {
|
|
291
|
+
this.query += ` LIMIT ${count2}`;
|
|
215
292
|
return this;
|
|
216
293
|
}
|
|
217
|
-
offset(
|
|
218
|
-
this.query += ` OFFSET ${
|
|
294
|
+
offset(count2) {
|
|
295
|
+
this.query += ` OFFSET ${count2}`;
|
|
219
296
|
return this;
|
|
220
297
|
}
|
|
221
298
|
build() {
|
|
@@ -233,9 +310,37 @@ var SelectQueryBuilder = class extends BaseQueryBuilder {
|
|
|
233
310
|
const columnNames = columns ? columns.map((c) => table._.columns[c]._.name) : ["*"];
|
|
234
311
|
this.query = `SELECT ${columnNames.join(", ")} FROM ${table._.name}`;
|
|
235
312
|
}
|
|
313
|
+
isDistinct = false;
|
|
314
|
+
groupByColumns = [];
|
|
315
|
+
havingCondition = null;
|
|
316
|
+
distinct() {
|
|
317
|
+
this.isDistinct = true;
|
|
318
|
+
this.query = this.query.replace("SELECT", "SELECT DISTINCT");
|
|
319
|
+
return this;
|
|
320
|
+
}
|
|
321
|
+
groupBy(...columns) {
|
|
322
|
+
this.groupByColumns.push(...columns);
|
|
323
|
+
const columnNames = columns.map((col) => col._.name).join(", ");
|
|
324
|
+
this.query += ` GROUP BY ${columnNames}`;
|
|
325
|
+
return this;
|
|
326
|
+
}
|
|
327
|
+
having(condition) {
|
|
328
|
+
this.havingCondition = condition;
|
|
329
|
+
this.query += ` HAVING ${condition.sql}`;
|
|
330
|
+
this.params.push(...condition.params);
|
|
331
|
+
return this;
|
|
332
|
+
}
|
|
236
333
|
async execute() {
|
|
237
|
-
const { sql, params } = this.build();
|
|
238
|
-
return this.db.select(
|
|
334
|
+
const { sql: sql2, params } = this.build();
|
|
335
|
+
return this.db.select(sql2, params);
|
|
336
|
+
}
|
|
337
|
+
async all() {
|
|
338
|
+
return this.execute();
|
|
339
|
+
}
|
|
340
|
+
async get() {
|
|
341
|
+
this.limit(1);
|
|
342
|
+
const result = await this.execute();
|
|
343
|
+
return result[0];
|
|
239
344
|
}
|
|
240
345
|
};
|
|
241
346
|
var InsertQueryBuilder = class extends BaseQueryBuilder {
|
|
@@ -245,26 +350,69 @@ var InsertQueryBuilder = class extends BaseQueryBuilder {
|
|
|
245
350
|
this.query = `INSERT INTO ${table._.name}`;
|
|
246
351
|
}
|
|
247
352
|
dataSets = [];
|
|
353
|
+
returningColumns = [];
|
|
354
|
+
onConflictAction = null;
|
|
355
|
+
conflictTarget = [];
|
|
356
|
+
updateSet = {};
|
|
248
357
|
values(data) {
|
|
249
358
|
const dataArray = Array.isArray(data) ? data : [data];
|
|
250
359
|
this.dataSets.push(...dataArray);
|
|
251
360
|
return this;
|
|
252
361
|
}
|
|
362
|
+
returning(...columns) {
|
|
363
|
+
this.returningColumns = columns;
|
|
364
|
+
return this;
|
|
365
|
+
}
|
|
366
|
+
onConflictDoNothing(target) {
|
|
367
|
+
this.onConflictAction = "nothing";
|
|
368
|
+
if (target) {
|
|
369
|
+
this.conflictTarget = Array.isArray(target) ? target : [target];
|
|
370
|
+
}
|
|
371
|
+
return this;
|
|
372
|
+
}
|
|
373
|
+
onConflictDoUpdate(config) {
|
|
374
|
+
this.onConflictAction = "update";
|
|
375
|
+
this.conflictTarget = Array.isArray(config.target) ? config.target : [config.target];
|
|
376
|
+
this.updateSet = config.set;
|
|
377
|
+
return this;
|
|
378
|
+
}
|
|
379
|
+
processDefaultValues(data) {
|
|
380
|
+
const finalData = { ...data };
|
|
381
|
+
for (const [key, column] of Object.entries(this.table._.columns)) {
|
|
382
|
+
const typedKey = key;
|
|
383
|
+
if (finalData[typedKey] === void 0) {
|
|
384
|
+
if (column.options.$defaultFn) {
|
|
385
|
+
finalData[typedKey] = column.options.$defaultFn();
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
return finalData;
|
|
390
|
+
}
|
|
391
|
+
buildConflictClause() {
|
|
392
|
+
if (!this.onConflictAction) return "";
|
|
393
|
+
let clause = " ON CONFLICT";
|
|
394
|
+
if (this.conflictTarget.length > 0) {
|
|
395
|
+
const targetNames = this.conflictTarget.map((col) => col._.name).join(", ");
|
|
396
|
+
clause += ` (${targetNames})`;
|
|
397
|
+
}
|
|
398
|
+
if (this.onConflictAction === "nothing") {
|
|
399
|
+
clause += " DO NOTHING";
|
|
400
|
+
} else if (this.onConflictAction === "update") {
|
|
401
|
+
const setEntries = Object.entries(this.updateSet);
|
|
402
|
+
if (setEntries.length > 0) {
|
|
403
|
+
const setClause = setEntries.map(([key]) => `${key} = ?`).join(", ");
|
|
404
|
+
clause += ` DO UPDATE SET ${setClause}`;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
return clause;
|
|
408
|
+
}
|
|
253
409
|
async execute() {
|
|
254
410
|
if (this.dataSets.length === 0) {
|
|
255
411
|
throw new Error("No data provided for insert");
|
|
256
412
|
}
|
|
257
|
-
const processedDataSets = this.dataSets.map(
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
if (finalData[key] === void 0) {
|
|
261
|
-
if (column.options.$defaultFn) {
|
|
262
|
-
finalData[key] = column.options.$defaultFn();
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
return finalData;
|
|
267
|
-
});
|
|
413
|
+
const processedDataSets = this.dataSets.map(
|
|
414
|
+
(data) => this.processDefaultValues(data)
|
|
415
|
+
);
|
|
268
416
|
const groups = /* @__PURE__ */ new Map();
|
|
269
417
|
for (const dataSet of processedDataSets) {
|
|
270
418
|
const keys = Object.keys(dataSet).sort().join(",");
|
|
@@ -273,7 +421,9 @@ var InsertQueryBuilder = class extends BaseQueryBuilder {
|
|
|
273
421
|
}
|
|
274
422
|
groups.get(keys).push(dataSet);
|
|
275
423
|
}
|
|
276
|
-
let
|
|
424
|
+
let results = [];
|
|
425
|
+
let lastInsertId;
|
|
426
|
+
let rowsAffected = 0;
|
|
277
427
|
for (const [_, dataSets] of groups) {
|
|
278
428
|
const columns = Object.keys(dataSets[0]);
|
|
279
429
|
const columnNames = columns.map(
|
|
@@ -281,16 +431,40 @@ var InsertQueryBuilder = class extends BaseQueryBuilder {
|
|
|
281
431
|
);
|
|
282
432
|
const placeholders = `(${columns.map(() => "?").join(", ")})`;
|
|
283
433
|
const valuesSql = dataSets.map(() => placeholders).join(", ");
|
|
434
|
+
const conflictClause = this.buildConflictClause();
|
|
284
435
|
const finalQuery = `${this.query} (${columnNames.join(
|
|
285
436
|
", "
|
|
286
|
-
)}) VALUES ${valuesSql}`;
|
|
437
|
+
)}) VALUES ${valuesSql}${conflictClause}`;
|
|
287
438
|
const params = dataSets.flatMap(
|
|
288
439
|
(data) => columns.map((col) => data[col] ?? null)
|
|
289
440
|
);
|
|
290
|
-
|
|
291
|
-
|
|
441
|
+
if (this.onConflictAction === "update") {
|
|
442
|
+
const setValues = Object.entries(this.updateSet).map(
|
|
443
|
+
([, value]) => value
|
|
444
|
+
);
|
|
445
|
+
params.push(...setValues);
|
|
446
|
+
}
|
|
447
|
+
if (this.returningColumns.length > 0) {
|
|
448
|
+
const returningNames = this.returningColumns.map((col) => this.table._.columns[col]._.name).join(", ");
|
|
449
|
+
const queryWithReturning = `${finalQuery} RETURNING ${returningNames}`;
|
|
450
|
+
const rows = await this.db.select(queryWithReturning, params);
|
|
451
|
+
results = results.concat(rows);
|
|
452
|
+
} else {
|
|
453
|
+
const result = await this.db.execute(finalQuery, params);
|
|
454
|
+
lastInsertId = result.lastInsertId;
|
|
455
|
+
rowsAffected += result.rowsAffected;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
if (this.returningColumns.length > 0) {
|
|
459
|
+
return results;
|
|
292
460
|
}
|
|
293
|
-
return lastInsertId
|
|
461
|
+
return [{ lastInsertId, rowsAffected }];
|
|
462
|
+
}
|
|
463
|
+
async returningAll() {
|
|
464
|
+
const allColumns = Object.keys(
|
|
465
|
+
this.table._.columns
|
|
466
|
+
);
|
|
467
|
+
return this.returning(...allColumns).execute();
|
|
294
468
|
}
|
|
295
469
|
};
|
|
296
470
|
var UpdateQueryBuilder = class extends BaseQueryBuilder {
|
|
@@ -300,15 +474,21 @@ var UpdateQueryBuilder = class extends BaseQueryBuilder {
|
|
|
300
474
|
this.query = `UPDATE ${table._.name}`;
|
|
301
475
|
}
|
|
302
476
|
updateData = {};
|
|
477
|
+
returningColumns = [];
|
|
303
478
|
set(data) {
|
|
304
479
|
this.updateData = { ...this.updateData, ...data };
|
|
305
480
|
return this;
|
|
306
481
|
}
|
|
307
|
-
|
|
482
|
+
returning(...columns) {
|
|
483
|
+
this.returningColumns = columns;
|
|
484
|
+
return this;
|
|
485
|
+
}
|
|
486
|
+
buildUpdateClause() {
|
|
308
487
|
const finalUpdateData = { ...this.updateData };
|
|
309
488
|
for (const [key, column] of Object.entries(this.table._.columns)) {
|
|
310
|
-
|
|
311
|
-
|
|
489
|
+
const typedKey = key;
|
|
490
|
+
if (finalUpdateData[typedKey] === void 0 && column.options.$onUpdateFn) {
|
|
491
|
+
finalUpdateData[typedKey] = column.options.$onUpdateFn();
|
|
312
492
|
}
|
|
313
493
|
}
|
|
314
494
|
const baseQuery = this.query;
|
|
@@ -334,14 +514,26 @@ var UpdateQueryBuilder = class extends BaseQueryBuilder {
|
|
|
334
514
|
return `${column._.name} = ?`;
|
|
335
515
|
}).join(", ");
|
|
336
516
|
const setParams = entries.map(([, value]) => value);
|
|
337
|
-
const
|
|
517
|
+
const sql2 = `${tablePart} SET ${setClause}${whereClause}`;
|
|
338
518
|
const params = [...setParams, ...whereParams];
|
|
339
|
-
return { sql, params };
|
|
519
|
+
return { sql: sql2, params };
|
|
340
520
|
}
|
|
341
521
|
async execute() {
|
|
342
|
-
const { sql, params } = this.
|
|
343
|
-
|
|
344
|
-
|
|
522
|
+
const { sql: updateSql, params } = this.buildUpdateClause();
|
|
523
|
+
if (this.returningColumns.length > 0) {
|
|
524
|
+
const returningNames = this.returningColumns.map((col) => this.table._.columns[col]._.name).join(", ");
|
|
525
|
+
const sqlWithReturning = `${updateSql} RETURNING ${returningNames}`;
|
|
526
|
+
return this.db.select(sqlWithReturning, params);
|
|
527
|
+
} else {
|
|
528
|
+
const result = await this.db.execute(updateSql, params);
|
|
529
|
+
return [{ rowsAffected: result.rowsAffected }];
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
async returningAll() {
|
|
533
|
+
const allColumns = Object.keys(
|
|
534
|
+
this.table._.columns
|
|
535
|
+
);
|
|
536
|
+
return this.returning(...allColumns).execute();
|
|
345
537
|
}
|
|
346
538
|
};
|
|
347
539
|
var DeleteQueryBuilder = class extends BaseQueryBuilder {
|
|
@@ -350,10 +542,67 @@ var DeleteQueryBuilder = class extends BaseQueryBuilder {
|
|
|
350
542
|
this.table = table;
|
|
351
543
|
this.query = `DELETE FROM ${table._.name}`;
|
|
352
544
|
}
|
|
545
|
+
returningColumns = [];
|
|
546
|
+
returning(...columns) {
|
|
547
|
+
this.returningColumns = columns;
|
|
548
|
+
return this;
|
|
549
|
+
}
|
|
353
550
|
async execute() {
|
|
354
|
-
const { sql, params } = this.build();
|
|
355
|
-
|
|
356
|
-
|
|
551
|
+
const { sql: sql2, params } = this.build();
|
|
552
|
+
if (this.returningColumns.length > 0) {
|
|
553
|
+
const returningNames = this.returningColumns.map((col) => this.table._.columns[col]._.name).join(", ");
|
|
554
|
+
const sqlWithReturning = `${sql2} RETURNING ${returningNames}`;
|
|
555
|
+
return this.db.select(sqlWithReturning, params);
|
|
556
|
+
} else {
|
|
557
|
+
const result = await this.db.execute(sql2, params);
|
|
558
|
+
return [{ rowsAffected: result.rowsAffected }];
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
async returningAll() {
|
|
562
|
+
const allColumns = Object.keys(
|
|
563
|
+
this.table._.columns
|
|
564
|
+
);
|
|
565
|
+
return this.returning(...allColumns).execute();
|
|
566
|
+
}
|
|
567
|
+
};
|
|
568
|
+
var WithQueryBuilder = class {
|
|
569
|
+
constructor(db) {
|
|
570
|
+
this.db = db;
|
|
571
|
+
}
|
|
572
|
+
ctes = [];
|
|
573
|
+
with(alias2, query) {
|
|
574
|
+
this.ctes.push({ alias: alias2, query: query.sql, params: query.params });
|
|
575
|
+
return this;
|
|
576
|
+
}
|
|
577
|
+
select(table, columns) {
|
|
578
|
+
const builder = new SelectQueryBuilder(this.db, table, columns);
|
|
579
|
+
this.applyWithClause(builder);
|
|
580
|
+
return builder;
|
|
581
|
+
}
|
|
582
|
+
insert(table) {
|
|
583
|
+
const builder = new InsertQueryBuilder(this.db, table);
|
|
584
|
+
this.applyWithClause(builder);
|
|
585
|
+
return builder;
|
|
586
|
+
}
|
|
587
|
+
update(table) {
|
|
588
|
+
const builder = new UpdateQueryBuilder(this.db, table);
|
|
589
|
+
this.applyWithClause(builder);
|
|
590
|
+
return builder;
|
|
591
|
+
}
|
|
592
|
+
delete(table) {
|
|
593
|
+
const builder = new DeleteQueryBuilder(this.db, table);
|
|
594
|
+
this.applyWithClause(builder);
|
|
595
|
+
return builder;
|
|
596
|
+
}
|
|
597
|
+
applyWithClause(builder) {
|
|
598
|
+
if (this.ctes.length > 0) {
|
|
599
|
+
const cteSql = this.ctes.map((cte) => `${cte.alias} AS (${cte.query})`).join(", ");
|
|
600
|
+
builder["query"] = `WITH ${cteSql} ${builder["query"]}`;
|
|
601
|
+
builder["params"] = [
|
|
602
|
+
...this.ctes.flatMap((cte) => cte.params),
|
|
603
|
+
...builder["params"]
|
|
604
|
+
];
|
|
605
|
+
}
|
|
357
606
|
}
|
|
358
607
|
};
|
|
359
608
|
var TauriORM = class {
|
|
@@ -367,23 +616,23 @@ var TauriORM = class {
|
|
|
367
616
|
}
|
|
368
617
|
tables = /* @__PURE__ */ new Map();
|
|
369
618
|
buildColumnDefinition(col, forAlterTable = false) {
|
|
370
|
-
let
|
|
619
|
+
let sql2 = `${col._.name} ${col.type}`;
|
|
371
620
|
if (col.options.primaryKey && !forAlterTable) {
|
|
372
|
-
|
|
621
|
+
sql2 += " PRIMARY KEY";
|
|
373
622
|
if (col._.autoincrement) {
|
|
374
|
-
|
|
623
|
+
sql2 += " AUTOINCREMENT";
|
|
375
624
|
}
|
|
376
625
|
}
|
|
377
|
-
if (col._.notNull)
|
|
378
|
-
if (col.options.unique)
|
|
626
|
+
if (col._.notNull) sql2 += " NOT NULL";
|
|
627
|
+
if (col.options.unique) sql2 += " UNIQUE";
|
|
379
628
|
if (col.options.default !== void 0) {
|
|
380
629
|
const value = col.options.default;
|
|
381
|
-
|
|
630
|
+
sql2 += ` DEFAULT ${typeof value === "string" ? `'${value.replace(/'/g, "''")}'` : value}`;
|
|
382
631
|
}
|
|
383
632
|
if (col.options.references) {
|
|
384
|
-
|
|
633
|
+
sql2 += ` REFERENCES ${col.options.references.table._.name}(${col.options.references.column._.name})`;
|
|
385
634
|
}
|
|
386
|
-
return
|
|
635
|
+
return sql2;
|
|
387
636
|
}
|
|
388
637
|
async migrate() {
|
|
389
638
|
for (const table of this.tables.values()) {
|
|
@@ -420,6 +669,15 @@ var TauriORM = class {
|
|
|
420
669
|
delete(table) {
|
|
421
670
|
return new DeleteQueryBuilder(this.db, table);
|
|
422
671
|
}
|
|
672
|
+
$with(alias2) {
|
|
673
|
+
const withBuilder = new WithQueryBuilder(this.db);
|
|
674
|
+
return {
|
|
675
|
+
as: (query) => {
|
|
676
|
+
withBuilder.with(alias2, query);
|
|
677
|
+
return withBuilder;
|
|
678
|
+
}
|
|
679
|
+
};
|
|
680
|
+
}
|
|
423
681
|
async transaction(callback) {
|
|
424
682
|
await this.db.execute("BEGIN TRANSACTION");
|
|
425
683
|
try {
|
|
@@ -431,6 +689,9 @@ var TauriORM = class {
|
|
|
431
689
|
throw error;
|
|
432
690
|
}
|
|
433
691
|
}
|
|
692
|
+
rollback() {
|
|
693
|
+
throw new Error("Transaction rolled back");
|
|
694
|
+
}
|
|
434
695
|
// --- Schema detection / signature ---
|
|
435
696
|
async ensureSchemaMeta() {
|
|
436
697
|
await this.db.execute(
|
|
@@ -508,6 +769,12 @@ var relations = (table, relationsCallback) => {
|
|
|
508
769
|
})
|
|
509
770
|
});
|
|
510
771
|
};
|
|
772
|
+
var getTableColumns = (table) => {
|
|
773
|
+
return table._.columns;
|
|
774
|
+
};
|
|
775
|
+
var alias = (table, alias2) => {
|
|
776
|
+
return table;
|
|
777
|
+
};
|
|
511
778
|
// Annotate the CommonJS export names for ESM import in node:
|
|
512
779
|
0 && (module.exports = {
|
|
513
780
|
DeleteQueryBuilder,
|
|
@@ -517,10 +784,18 @@ var relations = (table, relationsCallback) => {
|
|
|
517
784
|
Table,
|
|
518
785
|
TauriORM,
|
|
519
786
|
UpdateQueryBuilder,
|
|
787
|
+
WithQueryBuilder,
|
|
788
|
+
alias,
|
|
520
789
|
and,
|
|
790
|
+
asc,
|
|
791
|
+
avg,
|
|
521
792
|
blob,
|
|
522
793
|
boolean,
|
|
794
|
+
count,
|
|
795
|
+
countDistinct,
|
|
796
|
+
desc,
|
|
523
797
|
eq,
|
|
798
|
+
getTableColumns,
|
|
524
799
|
gt,
|
|
525
800
|
gte,
|
|
526
801
|
inArray,
|
|
@@ -530,9 +805,14 @@ var relations = (table, relationsCallback) => {
|
|
|
530
805
|
like,
|
|
531
806
|
lt,
|
|
532
807
|
lte,
|
|
808
|
+
max,
|
|
809
|
+
min,
|
|
810
|
+
not,
|
|
533
811
|
or,
|
|
534
812
|
real,
|
|
535
813
|
relations,
|
|
814
|
+
sql,
|
|
536
815
|
sqliteTable,
|
|
816
|
+
sum,
|
|
537
817
|
text
|
|
538
818
|
});
|
package/dist/index.mjs
CHANGED
|
@@ -83,6 +83,9 @@ var SQLiteColumn = class _SQLiteColumn {
|
|
|
83
83
|
this._.mode
|
|
84
84
|
);
|
|
85
85
|
}
|
|
86
|
+
as(alias2) {
|
|
87
|
+
return this;
|
|
88
|
+
}
|
|
86
89
|
};
|
|
87
90
|
var text = (name) => new SQLiteColumn(name, "TEXT");
|
|
88
91
|
var integer = (name, config) => new SQLiteColumn(name, "INTEGER", {}, config?.mode || "default");
|
|
@@ -113,6 +116,10 @@ var or = (...conditions) => ({
|
|
|
113
116
|
sql: conditions.map((c) => `(${c.sql})`).join(" OR "),
|
|
114
117
|
params: conditions.flatMap((c) => c.params)
|
|
115
118
|
});
|
|
119
|
+
var not = (condition) => ({
|
|
120
|
+
sql: `NOT (${condition.sql})`,
|
|
121
|
+
params: condition.params
|
|
122
|
+
});
|
|
116
123
|
var gt = (column, value) => ({
|
|
117
124
|
sql: `${column._.name} > ?`,
|
|
118
125
|
params: [value]
|
|
@@ -145,6 +152,58 @@ var inArray = (column, values) => ({
|
|
|
145
152
|
sql: `${column._.name} IN (${values.map(() => "?").join(",")})`,
|
|
146
153
|
params: values
|
|
147
154
|
});
|
|
155
|
+
var asc = (column) => ({
|
|
156
|
+
sql: `${column._.name} ASC`,
|
|
157
|
+
params: []
|
|
158
|
+
});
|
|
159
|
+
var desc = (column) => ({
|
|
160
|
+
sql: `${column._.name} DESC`,
|
|
161
|
+
params: []
|
|
162
|
+
});
|
|
163
|
+
var count = (column) => ({
|
|
164
|
+
sql: `COUNT(${column ? column._.name : "*"})`,
|
|
165
|
+
params: []
|
|
166
|
+
});
|
|
167
|
+
var countDistinct = (column) => ({
|
|
168
|
+
sql: `COUNT(DISTINCT ${column._.name})`,
|
|
169
|
+
params: []
|
|
170
|
+
});
|
|
171
|
+
var sum = (column) => ({
|
|
172
|
+
sql: `SUM(${column._.name})`,
|
|
173
|
+
params: []
|
|
174
|
+
});
|
|
175
|
+
var avg = (column) => ({
|
|
176
|
+
sql: `AVG(${column._.name})`,
|
|
177
|
+
params: []
|
|
178
|
+
});
|
|
179
|
+
var max = (column) => ({
|
|
180
|
+
sql: `MAX(${column._.name})`,
|
|
181
|
+
params: []
|
|
182
|
+
});
|
|
183
|
+
var min = (column) => ({
|
|
184
|
+
sql: `MIN(${column._.name})`,
|
|
185
|
+
params: []
|
|
186
|
+
});
|
|
187
|
+
var sql = (strings, ...values) => {
|
|
188
|
+
const queryParts = [];
|
|
189
|
+
const params = [];
|
|
190
|
+
strings.forEach((str, i) => {
|
|
191
|
+
queryParts.push(str);
|
|
192
|
+
if (values[i] !== void 0) {
|
|
193
|
+
if (typeof values[i] === "object" && values[i].sql) {
|
|
194
|
+
queryParts.push(values[i].sql);
|
|
195
|
+
params.push(...values[i].params);
|
|
196
|
+
} else {
|
|
197
|
+
queryParts.push("?");
|
|
198
|
+
params.push(values[i]);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
return {
|
|
203
|
+
sql: queryParts.join(""),
|
|
204
|
+
params
|
|
205
|
+
};
|
|
206
|
+
};
|
|
148
207
|
var BaseQueryBuilder = class {
|
|
149
208
|
constructor(db) {
|
|
150
209
|
this.db = db;
|
|
@@ -157,15 +216,20 @@ var BaseQueryBuilder = class {
|
|
|
157
216
|
return this;
|
|
158
217
|
}
|
|
159
218
|
orderBy(column, direction = "ASC") {
|
|
160
|
-
|
|
219
|
+
if ("sql" in column) {
|
|
220
|
+
this.query += ` ORDER BY ${column.sql} ${direction}`;
|
|
221
|
+
this.params.push(...column.params);
|
|
222
|
+
} else {
|
|
223
|
+
this.query += ` ORDER BY ${column._.name} ${direction}`;
|
|
224
|
+
}
|
|
161
225
|
return this;
|
|
162
226
|
}
|
|
163
|
-
limit(
|
|
164
|
-
this.query += ` LIMIT ${
|
|
227
|
+
limit(count2) {
|
|
228
|
+
this.query += ` LIMIT ${count2}`;
|
|
165
229
|
return this;
|
|
166
230
|
}
|
|
167
|
-
offset(
|
|
168
|
-
this.query += ` OFFSET ${
|
|
231
|
+
offset(count2) {
|
|
232
|
+
this.query += ` OFFSET ${count2}`;
|
|
169
233
|
return this;
|
|
170
234
|
}
|
|
171
235
|
build() {
|
|
@@ -183,9 +247,37 @@ var SelectQueryBuilder = class extends BaseQueryBuilder {
|
|
|
183
247
|
const columnNames = columns ? columns.map((c) => table._.columns[c]._.name) : ["*"];
|
|
184
248
|
this.query = `SELECT ${columnNames.join(", ")} FROM ${table._.name}`;
|
|
185
249
|
}
|
|
250
|
+
isDistinct = false;
|
|
251
|
+
groupByColumns = [];
|
|
252
|
+
havingCondition = null;
|
|
253
|
+
distinct() {
|
|
254
|
+
this.isDistinct = true;
|
|
255
|
+
this.query = this.query.replace("SELECT", "SELECT DISTINCT");
|
|
256
|
+
return this;
|
|
257
|
+
}
|
|
258
|
+
groupBy(...columns) {
|
|
259
|
+
this.groupByColumns.push(...columns);
|
|
260
|
+
const columnNames = columns.map((col) => col._.name).join(", ");
|
|
261
|
+
this.query += ` GROUP BY ${columnNames}`;
|
|
262
|
+
return this;
|
|
263
|
+
}
|
|
264
|
+
having(condition) {
|
|
265
|
+
this.havingCondition = condition;
|
|
266
|
+
this.query += ` HAVING ${condition.sql}`;
|
|
267
|
+
this.params.push(...condition.params);
|
|
268
|
+
return this;
|
|
269
|
+
}
|
|
186
270
|
async execute() {
|
|
187
|
-
const { sql, params } = this.build();
|
|
188
|
-
return this.db.select(
|
|
271
|
+
const { sql: sql2, params } = this.build();
|
|
272
|
+
return this.db.select(sql2, params);
|
|
273
|
+
}
|
|
274
|
+
async all() {
|
|
275
|
+
return this.execute();
|
|
276
|
+
}
|
|
277
|
+
async get() {
|
|
278
|
+
this.limit(1);
|
|
279
|
+
const result = await this.execute();
|
|
280
|
+
return result[0];
|
|
189
281
|
}
|
|
190
282
|
};
|
|
191
283
|
var InsertQueryBuilder = class extends BaseQueryBuilder {
|
|
@@ -195,26 +287,69 @@ var InsertQueryBuilder = class extends BaseQueryBuilder {
|
|
|
195
287
|
this.query = `INSERT INTO ${table._.name}`;
|
|
196
288
|
}
|
|
197
289
|
dataSets = [];
|
|
290
|
+
returningColumns = [];
|
|
291
|
+
onConflictAction = null;
|
|
292
|
+
conflictTarget = [];
|
|
293
|
+
updateSet = {};
|
|
198
294
|
values(data) {
|
|
199
295
|
const dataArray = Array.isArray(data) ? data : [data];
|
|
200
296
|
this.dataSets.push(...dataArray);
|
|
201
297
|
return this;
|
|
202
298
|
}
|
|
299
|
+
returning(...columns) {
|
|
300
|
+
this.returningColumns = columns;
|
|
301
|
+
return this;
|
|
302
|
+
}
|
|
303
|
+
onConflictDoNothing(target) {
|
|
304
|
+
this.onConflictAction = "nothing";
|
|
305
|
+
if (target) {
|
|
306
|
+
this.conflictTarget = Array.isArray(target) ? target : [target];
|
|
307
|
+
}
|
|
308
|
+
return this;
|
|
309
|
+
}
|
|
310
|
+
onConflictDoUpdate(config) {
|
|
311
|
+
this.onConflictAction = "update";
|
|
312
|
+
this.conflictTarget = Array.isArray(config.target) ? config.target : [config.target];
|
|
313
|
+
this.updateSet = config.set;
|
|
314
|
+
return this;
|
|
315
|
+
}
|
|
316
|
+
processDefaultValues(data) {
|
|
317
|
+
const finalData = { ...data };
|
|
318
|
+
for (const [key, column] of Object.entries(this.table._.columns)) {
|
|
319
|
+
const typedKey = key;
|
|
320
|
+
if (finalData[typedKey] === void 0) {
|
|
321
|
+
if (column.options.$defaultFn) {
|
|
322
|
+
finalData[typedKey] = column.options.$defaultFn();
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return finalData;
|
|
327
|
+
}
|
|
328
|
+
buildConflictClause() {
|
|
329
|
+
if (!this.onConflictAction) return "";
|
|
330
|
+
let clause = " ON CONFLICT";
|
|
331
|
+
if (this.conflictTarget.length > 0) {
|
|
332
|
+
const targetNames = this.conflictTarget.map((col) => col._.name).join(", ");
|
|
333
|
+
clause += ` (${targetNames})`;
|
|
334
|
+
}
|
|
335
|
+
if (this.onConflictAction === "nothing") {
|
|
336
|
+
clause += " DO NOTHING";
|
|
337
|
+
} else if (this.onConflictAction === "update") {
|
|
338
|
+
const setEntries = Object.entries(this.updateSet);
|
|
339
|
+
if (setEntries.length > 0) {
|
|
340
|
+
const setClause = setEntries.map(([key]) => `${key} = ?`).join(", ");
|
|
341
|
+
clause += ` DO UPDATE SET ${setClause}`;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
return clause;
|
|
345
|
+
}
|
|
203
346
|
async execute() {
|
|
204
347
|
if (this.dataSets.length === 0) {
|
|
205
348
|
throw new Error("No data provided for insert");
|
|
206
349
|
}
|
|
207
|
-
const processedDataSets = this.dataSets.map(
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
if (finalData[key] === void 0) {
|
|
211
|
-
if (column.options.$defaultFn) {
|
|
212
|
-
finalData[key] = column.options.$defaultFn();
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
return finalData;
|
|
217
|
-
});
|
|
350
|
+
const processedDataSets = this.dataSets.map(
|
|
351
|
+
(data) => this.processDefaultValues(data)
|
|
352
|
+
);
|
|
218
353
|
const groups = /* @__PURE__ */ new Map();
|
|
219
354
|
for (const dataSet of processedDataSets) {
|
|
220
355
|
const keys = Object.keys(dataSet).sort().join(",");
|
|
@@ -223,7 +358,9 @@ var InsertQueryBuilder = class extends BaseQueryBuilder {
|
|
|
223
358
|
}
|
|
224
359
|
groups.get(keys).push(dataSet);
|
|
225
360
|
}
|
|
226
|
-
let
|
|
361
|
+
let results = [];
|
|
362
|
+
let lastInsertId;
|
|
363
|
+
let rowsAffected = 0;
|
|
227
364
|
for (const [_, dataSets] of groups) {
|
|
228
365
|
const columns = Object.keys(dataSets[0]);
|
|
229
366
|
const columnNames = columns.map(
|
|
@@ -231,16 +368,40 @@ var InsertQueryBuilder = class extends BaseQueryBuilder {
|
|
|
231
368
|
);
|
|
232
369
|
const placeholders = `(${columns.map(() => "?").join(", ")})`;
|
|
233
370
|
const valuesSql = dataSets.map(() => placeholders).join(", ");
|
|
371
|
+
const conflictClause = this.buildConflictClause();
|
|
234
372
|
const finalQuery = `${this.query} (${columnNames.join(
|
|
235
373
|
", "
|
|
236
|
-
)}) VALUES ${valuesSql}`;
|
|
374
|
+
)}) VALUES ${valuesSql}${conflictClause}`;
|
|
237
375
|
const params = dataSets.flatMap(
|
|
238
376
|
(data) => columns.map((col) => data[col] ?? null)
|
|
239
377
|
);
|
|
240
|
-
|
|
241
|
-
|
|
378
|
+
if (this.onConflictAction === "update") {
|
|
379
|
+
const setValues = Object.entries(this.updateSet).map(
|
|
380
|
+
([, value]) => value
|
|
381
|
+
);
|
|
382
|
+
params.push(...setValues);
|
|
383
|
+
}
|
|
384
|
+
if (this.returningColumns.length > 0) {
|
|
385
|
+
const returningNames = this.returningColumns.map((col) => this.table._.columns[col]._.name).join(", ");
|
|
386
|
+
const queryWithReturning = `${finalQuery} RETURNING ${returningNames}`;
|
|
387
|
+
const rows = await this.db.select(queryWithReturning, params);
|
|
388
|
+
results = results.concat(rows);
|
|
389
|
+
} else {
|
|
390
|
+
const result = await this.db.execute(finalQuery, params);
|
|
391
|
+
lastInsertId = result.lastInsertId;
|
|
392
|
+
rowsAffected += result.rowsAffected;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
if (this.returningColumns.length > 0) {
|
|
396
|
+
return results;
|
|
242
397
|
}
|
|
243
|
-
return lastInsertId
|
|
398
|
+
return [{ lastInsertId, rowsAffected }];
|
|
399
|
+
}
|
|
400
|
+
async returningAll() {
|
|
401
|
+
const allColumns = Object.keys(
|
|
402
|
+
this.table._.columns
|
|
403
|
+
);
|
|
404
|
+
return this.returning(...allColumns).execute();
|
|
244
405
|
}
|
|
245
406
|
};
|
|
246
407
|
var UpdateQueryBuilder = class extends BaseQueryBuilder {
|
|
@@ -250,15 +411,21 @@ var UpdateQueryBuilder = class extends BaseQueryBuilder {
|
|
|
250
411
|
this.query = `UPDATE ${table._.name}`;
|
|
251
412
|
}
|
|
252
413
|
updateData = {};
|
|
414
|
+
returningColumns = [];
|
|
253
415
|
set(data) {
|
|
254
416
|
this.updateData = { ...this.updateData, ...data };
|
|
255
417
|
return this;
|
|
256
418
|
}
|
|
257
|
-
|
|
419
|
+
returning(...columns) {
|
|
420
|
+
this.returningColumns = columns;
|
|
421
|
+
return this;
|
|
422
|
+
}
|
|
423
|
+
buildUpdateClause() {
|
|
258
424
|
const finalUpdateData = { ...this.updateData };
|
|
259
425
|
for (const [key, column] of Object.entries(this.table._.columns)) {
|
|
260
|
-
|
|
261
|
-
|
|
426
|
+
const typedKey = key;
|
|
427
|
+
if (finalUpdateData[typedKey] === void 0 && column.options.$onUpdateFn) {
|
|
428
|
+
finalUpdateData[typedKey] = column.options.$onUpdateFn();
|
|
262
429
|
}
|
|
263
430
|
}
|
|
264
431
|
const baseQuery = this.query;
|
|
@@ -284,14 +451,26 @@ var UpdateQueryBuilder = class extends BaseQueryBuilder {
|
|
|
284
451
|
return `${column._.name} = ?`;
|
|
285
452
|
}).join(", ");
|
|
286
453
|
const setParams = entries.map(([, value]) => value);
|
|
287
|
-
const
|
|
454
|
+
const sql2 = `${tablePart} SET ${setClause}${whereClause}`;
|
|
288
455
|
const params = [...setParams, ...whereParams];
|
|
289
|
-
return { sql, params };
|
|
456
|
+
return { sql: sql2, params };
|
|
290
457
|
}
|
|
291
458
|
async execute() {
|
|
292
|
-
const { sql, params } = this.
|
|
293
|
-
|
|
294
|
-
|
|
459
|
+
const { sql: updateSql, params } = this.buildUpdateClause();
|
|
460
|
+
if (this.returningColumns.length > 0) {
|
|
461
|
+
const returningNames = this.returningColumns.map((col) => this.table._.columns[col]._.name).join(", ");
|
|
462
|
+
const sqlWithReturning = `${updateSql} RETURNING ${returningNames}`;
|
|
463
|
+
return this.db.select(sqlWithReturning, params);
|
|
464
|
+
} else {
|
|
465
|
+
const result = await this.db.execute(updateSql, params);
|
|
466
|
+
return [{ rowsAffected: result.rowsAffected }];
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
async returningAll() {
|
|
470
|
+
const allColumns = Object.keys(
|
|
471
|
+
this.table._.columns
|
|
472
|
+
);
|
|
473
|
+
return this.returning(...allColumns).execute();
|
|
295
474
|
}
|
|
296
475
|
};
|
|
297
476
|
var DeleteQueryBuilder = class extends BaseQueryBuilder {
|
|
@@ -300,10 +479,67 @@ var DeleteQueryBuilder = class extends BaseQueryBuilder {
|
|
|
300
479
|
this.table = table;
|
|
301
480
|
this.query = `DELETE FROM ${table._.name}`;
|
|
302
481
|
}
|
|
482
|
+
returningColumns = [];
|
|
483
|
+
returning(...columns) {
|
|
484
|
+
this.returningColumns = columns;
|
|
485
|
+
return this;
|
|
486
|
+
}
|
|
303
487
|
async execute() {
|
|
304
|
-
const { sql, params } = this.build();
|
|
305
|
-
|
|
306
|
-
|
|
488
|
+
const { sql: sql2, params } = this.build();
|
|
489
|
+
if (this.returningColumns.length > 0) {
|
|
490
|
+
const returningNames = this.returningColumns.map((col) => this.table._.columns[col]._.name).join(", ");
|
|
491
|
+
const sqlWithReturning = `${sql2} RETURNING ${returningNames}`;
|
|
492
|
+
return this.db.select(sqlWithReturning, params);
|
|
493
|
+
} else {
|
|
494
|
+
const result = await this.db.execute(sql2, params);
|
|
495
|
+
return [{ rowsAffected: result.rowsAffected }];
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
async returningAll() {
|
|
499
|
+
const allColumns = Object.keys(
|
|
500
|
+
this.table._.columns
|
|
501
|
+
);
|
|
502
|
+
return this.returning(...allColumns).execute();
|
|
503
|
+
}
|
|
504
|
+
};
|
|
505
|
+
var WithQueryBuilder = class {
|
|
506
|
+
constructor(db) {
|
|
507
|
+
this.db = db;
|
|
508
|
+
}
|
|
509
|
+
ctes = [];
|
|
510
|
+
with(alias2, query) {
|
|
511
|
+
this.ctes.push({ alias: alias2, query: query.sql, params: query.params });
|
|
512
|
+
return this;
|
|
513
|
+
}
|
|
514
|
+
select(table, columns) {
|
|
515
|
+
const builder = new SelectQueryBuilder(this.db, table, columns);
|
|
516
|
+
this.applyWithClause(builder);
|
|
517
|
+
return builder;
|
|
518
|
+
}
|
|
519
|
+
insert(table) {
|
|
520
|
+
const builder = new InsertQueryBuilder(this.db, table);
|
|
521
|
+
this.applyWithClause(builder);
|
|
522
|
+
return builder;
|
|
523
|
+
}
|
|
524
|
+
update(table) {
|
|
525
|
+
const builder = new UpdateQueryBuilder(this.db, table);
|
|
526
|
+
this.applyWithClause(builder);
|
|
527
|
+
return builder;
|
|
528
|
+
}
|
|
529
|
+
delete(table) {
|
|
530
|
+
const builder = new DeleteQueryBuilder(this.db, table);
|
|
531
|
+
this.applyWithClause(builder);
|
|
532
|
+
return builder;
|
|
533
|
+
}
|
|
534
|
+
applyWithClause(builder) {
|
|
535
|
+
if (this.ctes.length > 0) {
|
|
536
|
+
const cteSql = this.ctes.map((cte) => `${cte.alias} AS (${cte.query})`).join(", ");
|
|
537
|
+
builder["query"] = `WITH ${cteSql} ${builder["query"]}`;
|
|
538
|
+
builder["params"] = [
|
|
539
|
+
...this.ctes.flatMap((cte) => cte.params),
|
|
540
|
+
...builder["params"]
|
|
541
|
+
];
|
|
542
|
+
}
|
|
307
543
|
}
|
|
308
544
|
};
|
|
309
545
|
var TauriORM = class {
|
|
@@ -317,23 +553,23 @@ var TauriORM = class {
|
|
|
317
553
|
}
|
|
318
554
|
tables = /* @__PURE__ */ new Map();
|
|
319
555
|
buildColumnDefinition(col, forAlterTable = false) {
|
|
320
|
-
let
|
|
556
|
+
let sql2 = `${col._.name} ${col.type}`;
|
|
321
557
|
if (col.options.primaryKey && !forAlterTable) {
|
|
322
|
-
|
|
558
|
+
sql2 += " PRIMARY KEY";
|
|
323
559
|
if (col._.autoincrement) {
|
|
324
|
-
|
|
560
|
+
sql2 += " AUTOINCREMENT";
|
|
325
561
|
}
|
|
326
562
|
}
|
|
327
|
-
if (col._.notNull)
|
|
328
|
-
if (col.options.unique)
|
|
563
|
+
if (col._.notNull) sql2 += " NOT NULL";
|
|
564
|
+
if (col.options.unique) sql2 += " UNIQUE";
|
|
329
565
|
if (col.options.default !== void 0) {
|
|
330
566
|
const value = col.options.default;
|
|
331
|
-
|
|
567
|
+
sql2 += ` DEFAULT ${typeof value === "string" ? `'${value.replace(/'/g, "''")}'` : value}`;
|
|
332
568
|
}
|
|
333
569
|
if (col.options.references) {
|
|
334
|
-
|
|
570
|
+
sql2 += ` REFERENCES ${col.options.references.table._.name}(${col.options.references.column._.name})`;
|
|
335
571
|
}
|
|
336
|
-
return
|
|
572
|
+
return sql2;
|
|
337
573
|
}
|
|
338
574
|
async migrate() {
|
|
339
575
|
for (const table of this.tables.values()) {
|
|
@@ -370,6 +606,15 @@ var TauriORM = class {
|
|
|
370
606
|
delete(table) {
|
|
371
607
|
return new DeleteQueryBuilder(this.db, table);
|
|
372
608
|
}
|
|
609
|
+
$with(alias2) {
|
|
610
|
+
const withBuilder = new WithQueryBuilder(this.db);
|
|
611
|
+
return {
|
|
612
|
+
as: (query) => {
|
|
613
|
+
withBuilder.with(alias2, query);
|
|
614
|
+
return withBuilder;
|
|
615
|
+
}
|
|
616
|
+
};
|
|
617
|
+
}
|
|
373
618
|
async transaction(callback) {
|
|
374
619
|
await this.db.execute("BEGIN TRANSACTION");
|
|
375
620
|
try {
|
|
@@ -381,6 +626,9 @@ var TauriORM = class {
|
|
|
381
626
|
throw error;
|
|
382
627
|
}
|
|
383
628
|
}
|
|
629
|
+
rollback() {
|
|
630
|
+
throw new Error("Transaction rolled back");
|
|
631
|
+
}
|
|
384
632
|
// --- Schema detection / signature ---
|
|
385
633
|
async ensureSchemaMeta() {
|
|
386
634
|
await this.db.execute(
|
|
@@ -458,6 +706,12 @@ var relations = (table, relationsCallback) => {
|
|
|
458
706
|
})
|
|
459
707
|
});
|
|
460
708
|
};
|
|
709
|
+
var getTableColumns = (table) => {
|
|
710
|
+
return table._.columns;
|
|
711
|
+
};
|
|
712
|
+
var alias = (table, alias2) => {
|
|
713
|
+
return table;
|
|
714
|
+
};
|
|
461
715
|
export {
|
|
462
716
|
DeleteQueryBuilder,
|
|
463
717
|
InsertQueryBuilder,
|
|
@@ -466,10 +720,18 @@ export {
|
|
|
466
720
|
Table,
|
|
467
721
|
TauriORM,
|
|
468
722
|
UpdateQueryBuilder,
|
|
723
|
+
WithQueryBuilder,
|
|
724
|
+
alias,
|
|
469
725
|
and,
|
|
726
|
+
asc,
|
|
727
|
+
avg,
|
|
470
728
|
blob,
|
|
471
729
|
boolean,
|
|
730
|
+
count,
|
|
731
|
+
countDistinct,
|
|
732
|
+
desc,
|
|
472
733
|
eq,
|
|
734
|
+
getTableColumns,
|
|
473
735
|
gt,
|
|
474
736
|
gte,
|
|
475
737
|
inArray,
|
|
@@ -479,9 +741,14 @@ export {
|
|
|
479
741
|
like,
|
|
480
742
|
lt,
|
|
481
743
|
lte,
|
|
744
|
+
max,
|
|
745
|
+
min,
|
|
746
|
+
not,
|
|
482
747
|
or,
|
|
483
748
|
real,
|
|
484
749
|
relations,
|
|
750
|
+
sql,
|
|
485
751
|
sqliteTable,
|
|
752
|
+
sum,
|
|
486
753
|
text
|
|
487
754
|
};
|