@type32/tauri-sqlite-orm 0.2.2 → 0.2.3

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 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<any[]>;
83
+ execute(): Promise<InferSelectModel<TTable>[]>;
84
84
  private processRelationResults;
85
- all(): Promise<any[]>;
86
- get(): Promise<any | undefined>;
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[];
@@ -268,6 +281,10 @@ declare class TauriORM {
268
281
  insert<T extends AnyTable>(table: T): InsertQueryBuilder<T>;
269
282
  update<T extends AnyTable>(table: T): UpdateQueryBuilder<T>;
270
283
  delete<T extends AnyTable>(table: T): DeleteQueryBuilder<T>;
284
+ upsert<T extends AnyTable>(table: T, data: InferInsertModel<T>, conflictTarget: (keyof T['_']['columns'])[]): Promise<T extends AnyTable ? {
285
+ lastInsertId: number;
286
+ rowsAffected: number;
287
+ }[] : never>;
271
288
  $with(alias: string): {
272
289
  as: (query: {
273
290
  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<any[]>;
83
+ execute(): Promise<InferSelectModel<TTable>[]>;
84
84
  private processRelationResults;
85
- all(): Promise<any[]>;
86
- get(): Promise<any | undefined>;
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[];
@@ -268,6 +281,10 @@ declare class TauriORM {
268
281
  insert<T extends AnyTable>(table: T): InsertQueryBuilder<T>;
269
282
  update<T extends AnyTable>(table: T): UpdateQueryBuilder<T>;
270
283
  delete<T extends AnyTable>(table: T): DeleteQueryBuilder<T>;
284
+ upsert<T extends AnyTable>(table: T, data: InferInsertModel<T>, conflictTarget: (keyof T['_']['columns'])[]): Promise<T extends AnyTable ? {
285
+ lastInsertId: number;
286
+ rowsAffected: number;
287
+ }[] : never>;
271
288
  $with(alias: string): {
272
289
  as: (query: {
273
290
  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 " : "";
@@ -1253,6 +1304,13 @@ var TauriORM = class {
1253
1304
  delete(table) {
1254
1305
  return new DeleteQueryBuilder(this.db, table);
1255
1306
  }
1307
+ async upsert(table, data, conflictTarget) {
1308
+ const columns = conflictTarget.map((col) => table._.columns[col]);
1309
+ return this.insert(table).values(data).onConflictDoUpdate({
1310
+ target: columns.length === 1 ? columns[0] : columns,
1311
+ set: data
1312
+ }).execute();
1313
+ }
1256
1314
  $with(alias2) {
1257
1315
  const withBuilder = new WithQueryBuilder(this.db);
1258
1316
  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 " : "";
@@ -1154,6 +1205,13 @@ var TauriORM = class {
1154
1205
  delete(table) {
1155
1206
  return new DeleteQueryBuilder(this.db, table);
1156
1207
  }
1208
+ async upsert(table, data, conflictTarget) {
1209
+ const columns = conflictTarget.map((col) => table._.columns[col]);
1210
+ return this.insert(table).values(data).onConflictDoUpdate({
1211
+ target: columns.length === 1 ? columns[0] : columns,
1212
+ set: data
1213
+ }).execute();
1214
+ }
1157
1215
  $with(alias2) {
1158
1216
  const withBuilder = new WithQueryBuilder(this.db);
1159
1217
  return {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@type32/tauri-sqlite-orm",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "A Drizzle-like ORM for Tauri v2's SQL JS API plugin.",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",