@type32/tauri-sqlite-orm 0.2.2 → 0.2.4
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 +23 -3
- package/dist/index.d.ts +23 -3
- package/dist/index.js +77 -0
- package/dist/index.mjs +77 -0
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -80,10 +80,23 @@ declare class SelectQueryBuilder<TTable extends AnyTable, TSelectedColumns exten
|
|
|
80
80
|
innerJoin<T extends AnyTable>(table: T, condition: SQLCondition, alias: string): this;
|
|
81
81
|
include(relations: IncludeRelations<TTable>): this;
|
|
82
82
|
private buildJoins;
|
|
83
|
-
execute(): Promise<
|
|
83
|
+
execute(): Promise<InferSelectModel<TTable>[]>;
|
|
84
84
|
private processRelationResults;
|
|
85
|
-
all(): Promise<
|
|
86
|
-
get(): Promise<
|
|
85
|
+
all(): Promise<InferSelectModel<TTable>[]>;
|
|
86
|
+
get(): Promise<InferSelectModel<TTable> | undefined>;
|
|
87
|
+
exists(): Promise<boolean>;
|
|
88
|
+
count(): Promise<number>;
|
|
89
|
+
first(): Promise<InferSelectModel<TTable> | undefined>;
|
|
90
|
+
pluck<K extends keyof TTable['_']['columns']>(column: K): Promise<InferSelectModel<TTable>[K][]>;
|
|
91
|
+
paginate(page?: number, pageSize?: number): Promise<{
|
|
92
|
+
data: InferSelectModel<TTable>[];
|
|
93
|
+
total: number;
|
|
94
|
+
page: number;
|
|
95
|
+
pageSize: number;
|
|
96
|
+
totalPages: number;
|
|
97
|
+
hasNextPage: boolean;
|
|
98
|
+
hasPrevPage: boolean;
|
|
99
|
+
}>;
|
|
87
100
|
toSQL(): {
|
|
88
101
|
sql: string;
|
|
89
102
|
params: any[];
|
|
@@ -107,6 +120,7 @@ declare class UpdateQueryBuilder<T extends AnyTable> extends BaseQueryBuilder {
|
|
|
107
120
|
private buildUpdateClause;
|
|
108
121
|
execute(): Promise<T extends AnyTable ? (InferSelectModel<T> & Record<string, any>)[] : never>;
|
|
109
122
|
returningAll(): Promise<InferSelectModel<T>[]>;
|
|
123
|
+
returningFirst(): Promise<InferSelectModel<T> | undefined>;
|
|
110
124
|
toSQL(): {
|
|
111
125
|
sql: string;
|
|
112
126
|
params: any[];
|
|
@@ -132,6 +146,7 @@ declare class InsertQueryBuilder<T extends AnyTable> extends BaseQueryBuilder {
|
|
|
132
146
|
private buildConflictClause;
|
|
133
147
|
execute(): Promise<T extends AnyTable ? (InferSelectModel<T> & Record<string, any>)[] : never>;
|
|
134
148
|
returningAll(): Promise<InferSelectModel<T>[]>;
|
|
149
|
+
returningFirst(): Promise<InferSelectModel<T> | undefined>;
|
|
135
150
|
toSQL(): {
|
|
136
151
|
sql: string;
|
|
137
152
|
params: any[];
|
|
@@ -149,6 +164,7 @@ declare class DeleteQueryBuilder<T extends AnyTable> extends BaseQueryBuilder {
|
|
|
149
164
|
returning(...columns: (keyof T['_']['columns'])[]): this;
|
|
150
165
|
execute(): Promise<T extends AnyTable ? (InferSelectModel<T> & Record<string, any>)[] : never>;
|
|
151
166
|
returningAll(): Promise<InferSelectModel<T>[]>;
|
|
167
|
+
returningFirst(): Promise<InferSelectModel<T> | undefined>;
|
|
152
168
|
toSQL(): {
|
|
153
169
|
sql: string;
|
|
154
170
|
params: any[];
|
|
@@ -268,6 +284,10 @@ declare class TauriORM {
|
|
|
268
284
|
insert<T extends AnyTable>(table: T): InsertQueryBuilder<T>;
|
|
269
285
|
update<T extends AnyTable>(table: T): UpdateQueryBuilder<T>;
|
|
270
286
|
delete<T extends AnyTable>(table: T): DeleteQueryBuilder<T>;
|
|
287
|
+
upsert<T extends AnyTable>(table: T, data: InferInsertModel<T>, conflictTarget: (keyof T['_']['columns'])[]): Promise<T extends AnyTable ? {
|
|
288
|
+
lastInsertId: number;
|
|
289
|
+
rowsAffected: number;
|
|
290
|
+
}[] : never>;
|
|
271
291
|
$with(alias: string): {
|
|
272
292
|
as: (query: {
|
|
273
293
|
sql: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -80,10 +80,23 @@ declare class SelectQueryBuilder<TTable extends AnyTable, TSelectedColumns exten
|
|
|
80
80
|
innerJoin<T extends AnyTable>(table: T, condition: SQLCondition, alias: string): this;
|
|
81
81
|
include(relations: IncludeRelations<TTable>): this;
|
|
82
82
|
private buildJoins;
|
|
83
|
-
execute(): Promise<
|
|
83
|
+
execute(): Promise<InferSelectModel<TTable>[]>;
|
|
84
84
|
private processRelationResults;
|
|
85
|
-
all(): Promise<
|
|
86
|
-
get(): Promise<
|
|
85
|
+
all(): Promise<InferSelectModel<TTable>[]>;
|
|
86
|
+
get(): Promise<InferSelectModel<TTable> | undefined>;
|
|
87
|
+
exists(): Promise<boolean>;
|
|
88
|
+
count(): Promise<number>;
|
|
89
|
+
first(): Promise<InferSelectModel<TTable> | undefined>;
|
|
90
|
+
pluck<K extends keyof TTable['_']['columns']>(column: K): Promise<InferSelectModel<TTable>[K][]>;
|
|
91
|
+
paginate(page?: number, pageSize?: number): Promise<{
|
|
92
|
+
data: InferSelectModel<TTable>[];
|
|
93
|
+
total: number;
|
|
94
|
+
page: number;
|
|
95
|
+
pageSize: number;
|
|
96
|
+
totalPages: number;
|
|
97
|
+
hasNextPage: boolean;
|
|
98
|
+
hasPrevPage: boolean;
|
|
99
|
+
}>;
|
|
87
100
|
toSQL(): {
|
|
88
101
|
sql: string;
|
|
89
102
|
params: any[];
|
|
@@ -107,6 +120,7 @@ declare class UpdateQueryBuilder<T extends AnyTable> extends BaseQueryBuilder {
|
|
|
107
120
|
private buildUpdateClause;
|
|
108
121
|
execute(): Promise<T extends AnyTable ? (InferSelectModel<T> & Record<string, any>)[] : never>;
|
|
109
122
|
returningAll(): Promise<InferSelectModel<T>[]>;
|
|
123
|
+
returningFirst(): Promise<InferSelectModel<T> | undefined>;
|
|
110
124
|
toSQL(): {
|
|
111
125
|
sql: string;
|
|
112
126
|
params: any[];
|
|
@@ -132,6 +146,7 @@ declare class InsertQueryBuilder<T extends AnyTable> extends BaseQueryBuilder {
|
|
|
132
146
|
private buildConflictClause;
|
|
133
147
|
execute(): Promise<T extends AnyTable ? (InferSelectModel<T> & Record<string, any>)[] : never>;
|
|
134
148
|
returningAll(): Promise<InferSelectModel<T>[]>;
|
|
149
|
+
returningFirst(): Promise<InferSelectModel<T> | undefined>;
|
|
135
150
|
toSQL(): {
|
|
136
151
|
sql: string;
|
|
137
152
|
params: any[];
|
|
@@ -149,6 +164,7 @@ declare class DeleteQueryBuilder<T extends AnyTable> extends BaseQueryBuilder {
|
|
|
149
164
|
returning(...columns: (keyof T['_']['columns'])[]): this;
|
|
150
165
|
execute(): Promise<T extends AnyTable ? (InferSelectModel<T> & Record<string, any>)[] : never>;
|
|
151
166
|
returningAll(): Promise<InferSelectModel<T>[]>;
|
|
167
|
+
returningFirst(): Promise<InferSelectModel<T> | undefined>;
|
|
152
168
|
toSQL(): {
|
|
153
169
|
sql: string;
|
|
154
170
|
params: any[];
|
|
@@ -268,6 +284,10 @@ declare class TauriORM {
|
|
|
268
284
|
insert<T extends AnyTable>(table: T): InsertQueryBuilder<T>;
|
|
269
285
|
update<T extends AnyTable>(table: T): UpdateQueryBuilder<T>;
|
|
270
286
|
delete<T extends AnyTable>(table: T): DeleteQueryBuilder<T>;
|
|
287
|
+
upsert<T extends AnyTable>(table: T, data: InferInsertModel<T>, conflictTarget: (keyof T['_']['columns'])[]): Promise<T extends AnyTable ? {
|
|
288
|
+
lastInsertId: number;
|
|
289
|
+
rowsAffected: number;
|
|
290
|
+
}[] : never>;
|
|
271
291
|
$with(alias: string): {
|
|
272
292
|
as: (query: {
|
|
273
293
|
sql: string;
|
package/dist/index.js
CHANGED
|
@@ -594,6 +594,57 @@ var SelectQueryBuilder = class extends BaseQueryBuilder {
|
|
|
594
594
|
const result = await this.execute();
|
|
595
595
|
return result[0];
|
|
596
596
|
}
|
|
597
|
+
async exists() {
|
|
598
|
+
const originalColumns = this.selectedColumns;
|
|
599
|
+
this.selectedColumns = ["1"];
|
|
600
|
+
const { sql: joinSql, params: joinParams } = this.buildJoins();
|
|
601
|
+
const query = `SELECT 1 ${this.query}${joinSql} LIMIT 1`;
|
|
602
|
+
const params = [...this.params, ...joinParams];
|
|
603
|
+
this.selectedColumns = originalColumns;
|
|
604
|
+
const result = await this.db.select(query, params);
|
|
605
|
+
return result.length > 0;
|
|
606
|
+
}
|
|
607
|
+
async count() {
|
|
608
|
+
const originalColumns = this.selectedColumns;
|
|
609
|
+
this.selectedColumns = ["COUNT(*) as count"];
|
|
610
|
+
const { sql: joinSql, params: joinParams } = this.buildJoins();
|
|
611
|
+
const query = `SELECT COUNT(*) as count ${this.query}${joinSql}`;
|
|
612
|
+
const params = [...this.params, ...joinParams];
|
|
613
|
+
this.selectedColumns = originalColumns;
|
|
614
|
+
const result = await this.db.select(query, params);
|
|
615
|
+
return result[0]?.count || 0;
|
|
616
|
+
}
|
|
617
|
+
async first() {
|
|
618
|
+
return this.get();
|
|
619
|
+
}
|
|
620
|
+
async pluck(column) {
|
|
621
|
+
const columnName = this.table._.columns[column]._.name;
|
|
622
|
+
const originalColumns = this.selectedColumns;
|
|
623
|
+
this.selectedColumns = [`${this.selectedTableAlias}.${columnName} AS "${columnName}"`];
|
|
624
|
+
const { sql: joinSql, params: joinParams } = this.buildJoins();
|
|
625
|
+
const query = `SELECT ${this.selectedColumns.join(", ")} ${this.query}${joinSql}`;
|
|
626
|
+
const params = [...this.params, ...joinParams];
|
|
627
|
+
this.selectedColumns = originalColumns;
|
|
628
|
+
const results = await this.db.select(query, params);
|
|
629
|
+
return results.map((row) => row[columnName]);
|
|
630
|
+
}
|
|
631
|
+
async paginate(page = 1, pageSize = 10) {
|
|
632
|
+
if (page < 1) page = 1;
|
|
633
|
+
if (pageSize < 1) pageSize = 10;
|
|
634
|
+
const total = await this.count();
|
|
635
|
+
const totalPages = Math.ceil(total / pageSize);
|
|
636
|
+
const offset = (page - 1) * pageSize;
|
|
637
|
+
const data = await this.limit(pageSize).offset(offset).all();
|
|
638
|
+
return {
|
|
639
|
+
data,
|
|
640
|
+
total,
|
|
641
|
+
page,
|
|
642
|
+
pageSize,
|
|
643
|
+
totalPages,
|
|
644
|
+
hasNextPage: page < totalPages,
|
|
645
|
+
hasPrevPage: page > 1
|
|
646
|
+
};
|
|
647
|
+
}
|
|
597
648
|
toSQL() {
|
|
598
649
|
const { sql: joinSql, params: joinParams } = this.buildJoins();
|
|
599
650
|
const distinct = this.isDistinct ? "DISTINCT " : "";
|
|
@@ -781,6 +832,13 @@ var UpdateQueryBuilder = class extends BaseQueryBuilder {
|
|
|
781
832
|
);
|
|
782
833
|
return this.returning(...allColumns).execute();
|
|
783
834
|
}
|
|
835
|
+
async returningFirst() {
|
|
836
|
+
const allColumns = Object.keys(
|
|
837
|
+
this.table._.columns
|
|
838
|
+
);
|
|
839
|
+
const results = await this.returning(...allColumns).execute();
|
|
840
|
+
return results[0];
|
|
841
|
+
}
|
|
784
842
|
toSQL() {
|
|
785
843
|
const { sql: updateSql, params } = this.buildUpdateClause();
|
|
786
844
|
if (this.returningColumns.length > 0) {
|
|
@@ -918,6 +976,13 @@ var InsertQueryBuilder = class extends BaseQueryBuilder {
|
|
|
918
976
|
);
|
|
919
977
|
return this.returning(...allColumns).execute();
|
|
920
978
|
}
|
|
979
|
+
async returningFirst() {
|
|
980
|
+
const allColumns = Object.keys(
|
|
981
|
+
this.table._.columns
|
|
982
|
+
);
|
|
983
|
+
const results = await this.returning(...allColumns).execute();
|
|
984
|
+
return results[0];
|
|
985
|
+
}
|
|
921
986
|
toSQL() {
|
|
922
987
|
if (this.dataSets.length === 0) {
|
|
923
988
|
throw new InsertValidationError("No data provided for insert. Use .values() to provide data.");
|
|
@@ -996,6 +1061,11 @@ var DeleteQueryBuilder = class extends BaseQueryBuilder {
|
|
|
996
1061
|
const allColumns = Object.keys(this.table._.columns);
|
|
997
1062
|
return this.returning(...allColumns).execute();
|
|
998
1063
|
}
|
|
1064
|
+
async returningFirst() {
|
|
1065
|
+
const allColumns = Object.keys(this.table._.columns);
|
|
1066
|
+
const results = await this.returning(...allColumns).execute();
|
|
1067
|
+
return results[0];
|
|
1068
|
+
}
|
|
999
1069
|
toSQL() {
|
|
1000
1070
|
const { sql: sql2, params } = this.build();
|
|
1001
1071
|
if (this.returningColumns.length > 0) {
|
|
@@ -1253,6 +1323,13 @@ var TauriORM = class {
|
|
|
1253
1323
|
delete(table) {
|
|
1254
1324
|
return new DeleteQueryBuilder(this.db, table);
|
|
1255
1325
|
}
|
|
1326
|
+
async upsert(table, data, conflictTarget) {
|
|
1327
|
+
const columns = conflictTarget.map((col) => table._.columns[col]);
|
|
1328
|
+
return this.insert(table).values(data).onConflictDoUpdate({
|
|
1329
|
+
target: columns.length === 1 ? columns[0] : columns,
|
|
1330
|
+
set: data
|
|
1331
|
+
}).execute();
|
|
1332
|
+
}
|
|
1256
1333
|
$with(alias2) {
|
|
1257
1334
|
const withBuilder = new WithQueryBuilder(this.db);
|
|
1258
1335
|
return {
|
package/dist/index.mjs
CHANGED
|
@@ -495,6 +495,57 @@ var SelectQueryBuilder = class extends BaseQueryBuilder {
|
|
|
495
495
|
const result = await this.execute();
|
|
496
496
|
return result[0];
|
|
497
497
|
}
|
|
498
|
+
async exists() {
|
|
499
|
+
const originalColumns = this.selectedColumns;
|
|
500
|
+
this.selectedColumns = ["1"];
|
|
501
|
+
const { sql: joinSql, params: joinParams } = this.buildJoins();
|
|
502
|
+
const query = `SELECT 1 ${this.query}${joinSql} LIMIT 1`;
|
|
503
|
+
const params = [...this.params, ...joinParams];
|
|
504
|
+
this.selectedColumns = originalColumns;
|
|
505
|
+
const result = await this.db.select(query, params);
|
|
506
|
+
return result.length > 0;
|
|
507
|
+
}
|
|
508
|
+
async count() {
|
|
509
|
+
const originalColumns = this.selectedColumns;
|
|
510
|
+
this.selectedColumns = ["COUNT(*) as count"];
|
|
511
|
+
const { sql: joinSql, params: joinParams } = this.buildJoins();
|
|
512
|
+
const query = `SELECT COUNT(*) as count ${this.query}${joinSql}`;
|
|
513
|
+
const params = [...this.params, ...joinParams];
|
|
514
|
+
this.selectedColumns = originalColumns;
|
|
515
|
+
const result = await this.db.select(query, params);
|
|
516
|
+
return result[0]?.count || 0;
|
|
517
|
+
}
|
|
518
|
+
async first() {
|
|
519
|
+
return this.get();
|
|
520
|
+
}
|
|
521
|
+
async pluck(column) {
|
|
522
|
+
const columnName = this.table._.columns[column]._.name;
|
|
523
|
+
const originalColumns = this.selectedColumns;
|
|
524
|
+
this.selectedColumns = [`${this.selectedTableAlias}.${columnName} AS "${columnName}"`];
|
|
525
|
+
const { sql: joinSql, params: joinParams } = this.buildJoins();
|
|
526
|
+
const query = `SELECT ${this.selectedColumns.join(", ")} ${this.query}${joinSql}`;
|
|
527
|
+
const params = [...this.params, ...joinParams];
|
|
528
|
+
this.selectedColumns = originalColumns;
|
|
529
|
+
const results = await this.db.select(query, params);
|
|
530
|
+
return results.map((row) => row[columnName]);
|
|
531
|
+
}
|
|
532
|
+
async paginate(page = 1, pageSize = 10) {
|
|
533
|
+
if (page < 1) page = 1;
|
|
534
|
+
if (pageSize < 1) pageSize = 10;
|
|
535
|
+
const total = await this.count();
|
|
536
|
+
const totalPages = Math.ceil(total / pageSize);
|
|
537
|
+
const offset = (page - 1) * pageSize;
|
|
538
|
+
const data = await this.limit(pageSize).offset(offset).all();
|
|
539
|
+
return {
|
|
540
|
+
data,
|
|
541
|
+
total,
|
|
542
|
+
page,
|
|
543
|
+
pageSize,
|
|
544
|
+
totalPages,
|
|
545
|
+
hasNextPage: page < totalPages,
|
|
546
|
+
hasPrevPage: page > 1
|
|
547
|
+
};
|
|
548
|
+
}
|
|
498
549
|
toSQL() {
|
|
499
550
|
const { sql: joinSql, params: joinParams } = this.buildJoins();
|
|
500
551
|
const distinct = this.isDistinct ? "DISTINCT " : "";
|
|
@@ -682,6 +733,13 @@ var UpdateQueryBuilder = class extends BaseQueryBuilder {
|
|
|
682
733
|
);
|
|
683
734
|
return this.returning(...allColumns).execute();
|
|
684
735
|
}
|
|
736
|
+
async returningFirst() {
|
|
737
|
+
const allColumns = Object.keys(
|
|
738
|
+
this.table._.columns
|
|
739
|
+
);
|
|
740
|
+
const results = await this.returning(...allColumns).execute();
|
|
741
|
+
return results[0];
|
|
742
|
+
}
|
|
685
743
|
toSQL() {
|
|
686
744
|
const { sql: updateSql, params } = this.buildUpdateClause();
|
|
687
745
|
if (this.returningColumns.length > 0) {
|
|
@@ -819,6 +877,13 @@ var InsertQueryBuilder = class extends BaseQueryBuilder {
|
|
|
819
877
|
);
|
|
820
878
|
return this.returning(...allColumns).execute();
|
|
821
879
|
}
|
|
880
|
+
async returningFirst() {
|
|
881
|
+
const allColumns = Object.keys(
|
|
882
|
+
this.table._.columns
|
|
883
|
+
);
|
|
884
|
+
const results = await this.returning(...allColumns).execute();
|
|
885
|
+
return results[0];
|
|
886
|
+
}
|
|
822
887
|
toSQL() {
|
|
823
888
|
if (this.dataSets.length === 0) {
|
|
824
889
|
throw new InsertValidationError("No data provided for insert. Use .values() to provide data.");
|
|
@@ -897,6 +962,11 @@ var DeleteQueryBuilder = class extends BaseQueryBuilder {
|
|
|
897
962
|
const allColumns = Object.keys(this.table._.columns);
|
|
898
963
|
return this.returning(...allColumns).execute();
|
|
899
964
|
}
|
|
965
|
+
async returningFirst() {
|
|
966
|
+
const allColumns = Object.keys(this.table._.columns);
|
|
967
|
+
const results = await this.returning(...allColumns).execute();
|
|
968
|
+
return results[0];
|
|
969
|
+
}
|
|
900
970
|
toSQL() {
|
|
901
971
|
const { sql: sql2, params } = this.build();
|
|
902
972
|
if (this.returningColumns.length > 0) {
|
|
@@ -1154,6 +1224,13 @@ var TauriORM = class {
|
|
|
1154
1224
|
delete(table) {
|
|
1155
1225
|
return new DeleteQueryBuilder(this.db, table);
|
|
1156
1226
|
}
|
|
1227
|
+
async upsert(table, data, conflictTarget) {
|
|
1228
|
+
const columns = conflictTarget.map((col) => table._.columns[col]);
|
|
1229
|
+
return this.insert(table).values(data).onConflictDoUpdate({
|
|
1230
|
+
target: columns.length === 1 ? columns[0] : columns,
|
|
1231
|
+
set: data
|
|
1232
|
+
}).execute();
|
|
1233
|
+
}
|
|
1157
1234
|
$with(alias2) {
|
|
1158
1235
|
const withBuilder = new WithQueryBuilder(this.db);
|
|
1159
1236
|
return {
|