@livestore/common 0.3.0-dev.23 → 0.3.0-dev.24

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.
Files changed (97) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/derived-mutations.d.ts +8 -8
  3. package/dist/devtools/devtools-messages-client-session.d.ts +21 -21
  4. package/dist/devtools/devtools-messages-common.d.ts +6 -6
  5. package/dist/devtools/devtools-messages-leader.d.ts +25 -24
  6. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
  7. package/dist/leader-thread/LeaderSyncProcessor.js +3 -1
  8. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  9. package/dist/leader-thread/apply-mutation.js +1 -1
  10. package/dist/leader-thread/apply-mutation.js.map +1 -1
  11. package/dist/leader-thread/leader-worker-devtools.js +2 -2
  12. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  13. package/dist/leader-thread/make-leader-thread-layer.js +2 -2
  14. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  15. package/dist/leader-thread/mutationlog.js +1 -1
  16. package/dist/leader-thread/mutationlog.js.map +1 -1
  17. package/dist/leader-thread/pull-queue-set.d.ts.map +1 -1
  18. package/dist/leader-thread/types.d.ts +1 -1
  19. package/dist/leader-thread/types.d.ts.map +1 -1
  20. package/dist/mutation.d.ts.map +1 -1
  21. package/dist/mutation.js +13 -2
  22. package/dist/mutation.js.map +1 -1
  23. package/dist/query-builder/api.d.ts +118 -20
  24. package/dist/query-builder/api.d.ts.map +1 -1
  25. package/dist/query-builder/api.js.map +1 -1
  26. package/dist/query-builder/astToSql.d.ts +7 -0
  27. package/dist/query-builder/astToSql.d.ts.map +1 -0
  28. package/dist/query-builder/astToSql.js +168 -0
  29. package/dist/query-builder/astToSql.js.map +1 -0
  30. package/dist/query-builder/impl.d.ts +1 -5
  31. package/dist/query-builder/impl.d.ts.map +1 -1
  32. package/dist/query-builder/impl.js +130 -96
  33. package/dist/query-builder/impl.js.map +1 -1
  34. package/dist/query-builder/impl.test.js +94 -0
  35. package/dist/query-builder/impl.test.js.map +1 -1
  36. package/dist/query-builder/mod.d.ts +7 -0
  37. package/dist/query-builder/mod.d.ts.map +1 -1
  38. package/dist/query-builder/mod.js +7 -0
  39. package/dist/query-builder/mod.js.map +1 -1
  40. package/dist/query-info.d.ts +4 -1
  41. package/dist/query-info.d.ts.map +1 -1
  42. package/dist/query-info.js.map +1 -1
  43. package/dist/rehydrate-from-mutationlog.js +1 -1
  44. package/dist/rehydrate-from-mutationlog.js.map +1 -1
  45. package/dist/schema/MutationEvent.d.ts +10 -9
  46. package/dist/schema/MutationEvent.d.ts.map +1 -1
  47. package/dist/schema/MutationEvent.js +6 -6
  48. package/dist/schema/MutationEvent.js.map +1 -1
  49. package/dist/schema/db-schema/dsl/mod.d.ts +7 -5
  50. package/dist/schema/db-schema/dsl/mod.d.ts.map +1 -1
  51. package/dist/schema/db-schema/dsl/mod.js +6 -0
  52. package/dist/schema/db-schema/dsl/mod.js.map +1 -1
  53. package/dist/schema/mutations.d.ts +12 -3
  54. package/dist/schema/mutations.d.ts.map +1 -1
  55. package/dist/schema/mutations.js.map +1 -1
  56. package/dist/schema/system-tables.d.ts +5 -5
  57. package/dist/schema/system-tables.d.ts.map +1 -1
  58. package/dist/schema/system-tables.js +1 -2
  59. package/dist/schema/system-tables.js.map +1 -1
  60. package/dist/schema/table-def.d.ts +7 -3
  61. package/dist/schema/table-def.d.ts.map +1 -1
  62. package/dist/schema/table-def.js +7 -1
  63. package/dist/schema/table-def.js.map +1 -1
  64. package/dist/sync/next/rebase-events.d.ts +1 -1
  65. package/dist/sync/next/rebase-events.d.ts.map +1 -1
  66. package/dist/sync/sync.d.ts +9 -1
  67. package/dist/sync/sync.d.ts.map +1 -1
  68. package/dist/sync/sync.js.map +1 -1
  69. package/dist/sync/syncstate.test.js +1 -1
  70. package/dist/sync/syncstate.test.js.map +1 -1
  71. package/dist/version.d.ts +1 -1
  72. package/dist/version.js +1 -1
  73. package/package.json +2 -2
  74. package/src/leader-thread/LeaderSyncProcessor.ts +3 -1
  75. package/src/leader-thread/apply-mutation.ts +2 -2
  76. package/src/leader-thread/leader-worker-devtools.ts +2 -2
  77. package/src/leader-thread/make-leader-thread-layer.ts +2 -2
  78. package/src/leader-thread/mutationlog.ts +1 -1
  79. package/src/leader-thread/types.ts +1 -1
  80. package/src/mutation.ts +20 -3
  81. package/src/query-builder/api.ts +192 -15
  82. package/src/query-builder/astToSql.ts +203 -0
  83. package/src/query-builder/impl.test.ts +104 -0
  84. package/src/query-builder/impl.ts +157 -113
  85. package/src/query-builder/mod.ts +7 -0
  86. package/src/query-info.ts +6 -1
  87. package/src/rehydrate-from-mutationlog.ts +1 -1
  88. package/src/schema/MutationEvent.ts +10 -10
  89. package/src/schema/db-schema/dsl/mod.ts +30 -2
  90. package/src/schema/mutations.ts +12 -1
  91. package/src/schema/system-tables.ts +1 -2
  92. package/src/schema/table-def.ts +14 -4
  93. package/src/sync/next/rebase-events.ts +1 -1
  94. package/src/sync/sync.ts +9 -3
  95. package/src/sync/syncstate.test.ts +1 -1
  96. package/src/version.ts +1 -1
  97. package/tmp/pack.tgz +0 -0
@@ -0,0 +1,168 @@
1
+ import { shouldNeverHappen } from '@livestore/utils';
2
+ import { Schema } from '@livestore/utils/effect';
3
+ import { SessionIdSymbol } from '../adapter-types.js';
4
+ // Helper functions for SQL generation
5
+ const formatWhereClause = (whereConditions, tableDef, bindValues) => {
6
+ if (whereConditions.length === 0)
7
+ return '';
8
+ const whereClause = whereConditions
9
+ .map(({ col, op, value }) => {
10
+ // Handle NULL values
11
+ if (value === null) {
12
+ if (op !== '=' && op !== '!=') {
13
+ throw new Error(`Unsupported operator for NULL value: ${op}`);
14
+ }
15
+ const opStmt = op === '=' ? 'IS' : 'IS NOT';
16
+ return `${col} ${opStmt} NULL`;
17
+ }
18
+ // Get column definition and encode value
19
+ const colDef = tableDef.sqliteDef.columns[col];
20
+ if (colDef === undefined) {
21
+ throw new Error(`Column ${col} not found`);
22
+ }
23
+ // Handle array values for IN/NOT IN operators
24
+ const isArray = op === 'IN' || op === 'NOT IN';
25
+ if (isArray) {
26
+ // Verify value is an array
27
+ if (!Array.isArray(value)) {
28
+ return shouldNeverHappen(`Expected array value for ${op} operator but got`, value);
29
+ }
30
+ // Handle empty arrays
31
+ if (value.length === 0) {
32
+ return op === 'IN' ? '0=1' : '1=1';
33
+ }
34
+ const encodedValues = value.map((v) => Schema.encodeSync(colDef.schema)(v));
35
+ bindValues.push(...encodedValues);
36
+ const placeholders = encodedValues.map(() => '?').join(', ');
37
+ return `${col} ${op} (${placeholders})`;
38
+ }
39
+ else {
40
+ const encodedValue = Schema.encodeSync(colDef.schema)(value);
41
+ bindValues.push(encodedValue);
42
+ return `${col} ${op} ?`;
43
+ }
44
+ })
45
+ .join(' AND ');
46
+ return `WHERE ${whereClause}`;
47
+ };
48
+ const formatReturningClause = (returning) => {
49
+ if (!returning || returning.length === 0)
50
+ return '';
51
+ return ` RETURNING ${returning.join(', ')}`;
52
+ };
53
+ export const astToSql = (ast) => {
54
+ const bindValues = [];
55
+ // INSERT query
56
+ if (ast._tag === 'InsertQuery') {
57
+ const columns = Object.keys(ast.values);
58
+ const placeholders = columns.map(() => '?').join(', ');
59
+ const values = Object.values(Schema.encodeSync(ast.tableDef.insertSchema)(ast.values));
60
+ bindValues.push(...values);
61
+ let query = `INSERT INTO '${ast.tableDef.sqliteDef.name}' (${columns.join(', ')}) VALUES (${placeholders})`;
62
+ // Handle ON CONFLICT clause
63
+ if (ast.onConflict) {
64
+ query += ` ON CONFLICT (${ast.onConflict.target}) `;
65
+ if (ast.onConflict.action._tag === 'ignore') {
66
+ query += 'DO NOTHING';
67
+ }
68
+ else if (ast.onConflict.action._tag === 'replace') {
69
+ query += 'DO REPLACE';
70
+ }
71
+ else {
72
+ // Handle the update record case
73
+ const updateValues = ast.onConflict.action.update;
74
+ const updateCols = Object.keys(updateValues);
75
+ if (updateCols.length === 0) {
76
+ throw new Error('No update columns provided for ON CONFLICT DO UPDATE');
77
+ }
78
+ const updates = updateCols
79
+ .map((col) => {
80
+ const value = updateValues[col];
81
+ // If the value is undefined, use excluded.col
82
+ return value === undefined ? `${col} = excluded.${col}` : `${col} = ?`;
83
+ })
84
+ .join(', ');
85
+ // Add values for the parameters
86
+ updateCols.forEach((col) => {
87
+ const value = updateValues[col];
88
+ if (value !== undefined) {
89
+ const colDef = ast.tableDef.sqliteDef.columns[col];
90
+ if (colDef === undefined) {
91
+ throw new Error(`Column ${col} not found`);
92
+ }
93
+ const encodedValue = Schema.encodeSync(colDef.schema)(value);
94
+ bindValues.push(encodedValue);
95
+ }
96
+ });
97
+ query += `DO UPDATE SET ${updates}`;
98
+ }
99
+ }
100
+ query += formatReturningClause(ast.returning);
101
+ return { query, bindValues };
102
+ }
103
+ // UPDATE query
104
+ if (ast._tag === 'UpdateQuery') {
105
+ const setColumns = Object.keys(ast.values);
106
+ const setValues = Object.values(Schema.encodeSync(Schema.partial(ast.tableDef.schema))(ast.values));
107
+ bindValues.push(...setValues);
108
+ let query = `UPDATE '${ast.tableDef.sqliteDef.name}' SET ${setColumns.map((col) => `${col} = ?`).join(', ')}`;
109
+ const whereClause = formatWhereClause(ast.where, ast.tableDef, bindValues);
110
+ if (whereClause)
111
+ query += ` ${whereClause}`;
112
+ query += formatReturningClause(ast.returning);
113
+ return { query, bindValues };
114
+ }
115
+ // DELETE query
116
+ if (ast._tag === 'DeleteQuery') {
117
+ let query = `DELETE FROM '${ast.tableDef.sqliteDef.name}'`;
118
+ const whereClause = formatWhereClause(ast.where, ast.tableDef, bindValues);
119
+ if (whereClause)
120
+ query += ` ${whereClause}`;
121
+ query += formatReturningClause(ast.returning);
122
+ return { query, bindValues };
123
+ }
124
+ // COUNT query
125
+ if (ast._tag === 'CountQuery') {
126
+ const query = [
127
+ `SELECT COUNT(*) as count FROM '${ast.tableDef.sqliteDef.name}'`,
128
+ formatWhereClause(ast.where, ast.tableDef, bindValues),
129
+ ]
130
+ .filter((clause) => clause.length > 0)
131
+ .join(' ');
132
+ return { query, bindValues };
133
+ }
134
+ // ROW query
135
+ if (ast._tag === 'RowQuery') {
136
+ // Handle the id value by encoding it with the id column schema
137
+ const idColDef = ast.tableDef.sqliteDef.columns.id;
138
+ if (idColDef === undefined) {
139
+ throw new Error('Column id not found for ROW query');
140
+ }
141
+ // NOTE we're not encoding the id if it's the session id symbol, which needs to be taken care of by the caller
142
+ const encodedId = ast.id === SessionIdSymbol ? ast.id : Schema.encodeSync(idColDef.schema)(ast.id);
143
+ return {
144
+ query: `SELECT * FROM '${ast.tableDef.sqliteDef.name}' WHERE id = ?`,
145
+ bindValues: [encodedId],
146
+ };
147
+ }
148
+ // SELECT query
149
+ const columnsStmt = ast.select.columns.length === 0 ? '*' : ast.select.columns.join(', ');
150
+ const selectStmt = `SELECT ${columnsStmt}`;
151
+ const fromStmt = `FROM '${ast.tableDef.sqliteDef.name}'`;
152
+ const whereStmt = formatWhereClause(ast.where, ast.tableDef, bindValues);
153
+ const orderByStmt = ast.orderBy.length > 0
154
+ ? `ORDER BY ${ast.orderBy.map(({ col, direction }) => `${col} ${direction}`).join(', ')}`
155
+ : '';
156
+ const limitStmt = ast.limit._tag === 'Some' ? `LIMIT ?` : '';
157
+ if (ast.limit._tag === 'Some')
158
+ bindValues.push(ast.limit.value);
159
+ const offsetStmt = ast.offset._tag === 'Some' ? `OFFSET ?` : '';
160
+ if (ast.offset._tag === 'Some')
161
+ bindValues.push(ast.offset.value);
162
+ const query = [selectStmt, fromStmt, whereStmt, orderByStmt, offsetStmt, limitStmt]
163
+ .map((clause) => clause.trim())
164
+ .filter((clause) => clause.length > 0)
165
+ .join(' ');
166
+ return { query, bindValues };
167
+ };
168
+ //# sourceMappingURL=astToSql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astToSql.js","sourceRoot":"","sources":["../../src/query-builder/astToSql.ts"],"names":[],"mappings":"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"}
@@ -4,9 +4,5 @@ import type { DbSchema } from '../schema/mod.js';
4
4
  import type { QueryBuilder, QueryBuilderAst } from './api.js';
5
5
  export declare const makeQueryBuilder: <TResult, TTableDef extends DbSchema.TableDefBase>(tableDef: TTableDef, ast?: QueryBuilderAst) => QueryBuilder<TResult, TTableDef, never, QueryInfo.None>;
6
6
  export declare const invalidQueryBuilder: (msg?: string) => never;
7
- export declare const getResultSchema: (qb: QueryBuilder<any, any, any>) => Schema.Array$<Schema.Schema<any, any, never>> | Schema.transform<Schema.Array$<Schema.Schema<any, any, never>>, Schema.SchemaClass<any, any, never>> | Schema.transform<Schema.Array$<Schema.SchemaClass<number, {
8
- readonly count: number;
9
- }, never>>, Schema.SchemaClass<number, number, never>> | Schema.transform<Schema.Array$<Schema.SchemaClass<any, {
10
- value: any;
11
- }, never>>, Schema.SchemaClass<any, any, never>>;
7
+ export declare const getResultSchema: (qb: QueryBuilder<any, any, any>) => Schema.Schema<any>;
12
8
  //# sourceMappingURL=impl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"impl.d.ts","sourceRoot":"","sources":["../../src/query-builder/impl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAG7D,eAAO,MAAM,gBAAgB,GAAI,OAAO,EAAE,SAAS,SAAS,QAAQ,CAAC,YAAY,EAC/E,UAAU,SAAS,EACnB,MAAK,eAAoC,KACxC,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CA6JxD,CAAA;AA+FD,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,UAE/C,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;;;;gDAkB9D,CAAA"}
1
+ {"version":3,"file":"impl.d.ts","sourceRoot":"","sources":["../../src/query-builder/impl.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAE1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAI7D,eAAO,MAAM,gBAAgB,GAAI,OAAO,EAAE,SAAS,SAAS,QAAQ,CAAC,YAAY,EAC/E,UAAU,SAAS,EACnB,MAAK,eAAoC,KACxC,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CA+OxD,CAAA;AAuCD,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,UAE/C,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAkClF,CAAA"}
@@ -1,10 +1,12 @@
1
- import { Option, Predicate, Schema } from '@livestore/utils/effect';
1
+ import { casesHandled } from '@livestore/utils';
2
+ import { Match, Option, Predicate, Schema } from '@livestore/utils/effect';
2
3
  import { QueryBuilderAstSymbol, TypeId } from './api.js';
4
+ import { astToSql } from './astToSql.js';
3
5
  export const makeQueryBuilder = (tableDef, ast = emptyAst(tableDef)) => {
4
6
  const api = {
5
7
  // eslint-disable-next-line prefer-arrow/prefer-arrow-functions
6
8
  select() {
7
- assertQueryBuilderAst(ast);
9
+ assertSelectQueryBuilderAst(ast);
8
10
  // eslint-disable-next-line prefer-rest-params
9
11
  const params = [...arguments];
10
12
  if (params.length === 2 && typeof params[0] === 'string' && typeof params[1] === 'object') {
@@ -23,9 +25,11 @@ export const makeQueryBuilder = (tableDef, ast = emptyAst(tableDef)) => {
23
25
  });
24
26
  },
25
27
  // eslint-disable-next-line prefer-arrow/prefer-arrow-functions
26
- where() {
27
- if (isRowQuery(ast))
28
- return invalidQueryBuilder();
28
+ where: function () {
29
+ if (ast._tag === 'InsertQuery')
30
+ return invalidQueryBuilder('Cannot use where with insert');
31
+ if (ast._tag === 'RowQuery')
32
+ return invalidQueryBuilder('Cannot use where with row');
29
33
  if (arguments.length === 1) {
30
34
  // eslint-disable-next-line prefer-rest-params
31
35
  const params = arguments[0];
@@ -34,23 +38,43 @@ export const makeQueryBuilder = (tableDef, ast = emptyAst(tableDef)) => {
34
38
  .map(([col, value]) => Predicate.hasProperty(value, 'op') && Predicate.hasProperty(value, 'value')
35
39
  ? { col, op: value.op, value: value.value }
36
40
  : { col, op: '=', value });
37
- return makeQueryBuilder(tableDef, {
38
- ...ast,
39
- where: [...ast.where, ...newOps],
40
- });
41
+ switch (ast._tag) {
42
+ case 'CountQuery':
43
+ case 'SelectQuery':
44
+ case 'UpdateQuery':
45
+ case 'DeleteQuery': {
46
+ return makeQueryBuilder(tableDef, {
47
+ ...ast,
48
+ where: [...ast.where, ...newOps],
49
+ });
50
+ }
51
+ default: {
52
+ return casesHandled(ast);
53
+ }
54
+ }
41
55
  }
42
56
  // eslint-disable-next-line prefer-rest-params
43
57
  const [col, opOrValue, valueOrUndefined] = arguments;
44
58
  const op = valueOrUndefined === undefined ? '=' : opOrValue;
45
59
  const value = valueOrUndefined === undefined ? opOrValue : valueOrUndefined;
46
- return makeQueryBuilder(tableDef, {
47
- ...ast,
48
- where: [...ast.where, { col, op, value }],
49
- });
60
+ switch (ast._tag) {
61
+ case 'CountQuery':
62
+ case 'SelectQuery':
63
+ case 'UpdateQuery':
64
+ case 'DeleteQuery': {
65
+ return makeQueryBuilder(tableDef, {
66
+ ...ast,
67
+ where: [...ast.where, { col, op, value }],
68
+ });
69
+ }
70
+ default: {
71
+ return casesHandled(ast);
72
+ }
73
+ }
50
74
  },
51
75
  // eslint-disable-next-line prefer-arrow/prefer-arrow-functions
52
76
  orderBy() {
53
- assertQueryBuilderAst(ast);
77
+ assertSelectQueryBuilderAst(ast);
54
78
  if (arguments.length === 0 || arguments.length > 2)
55
79
  return invalidQueryBuilder();
56
80
  if (arguments.length === 1) {
@@ -69,24 +93,25 @@ export const makeQueryBuilder = (tableDef, ast = emptyAst(tableDef)) => {
69
93
  });
70
94
  },
71
95
  limit: (limit) => {
72
- assertQueryBuilderAst(ast);
96
+ assertSelectQueryBuilderAst(ast);
73
97
  return makeQueryBuilder(tableDef, { ...ast, limit: Option.some(limit) });
74
98
  },
75
99
  offset: (offset) => {
76
- assertQueryBuilderAst(ast);
100
+ assertSelectQueryBuilderAst(ast);
77
101
  return makeQueryBuilder(tableDef, { ...ast, offset: Option.some(offset) });
78
102
  },
79
103
  count: () => {
80
104
  if (isRowQuery(ast))
81
105
  return invalidQueryBuilder();
82
106
  return makeQueryBuilder(tableDef, {
83
- ...ast,
84
- resultSchema: Schema.Struct({ count: Schema.Number }).pipe(Schema.pluck('count'), Schema.Array, Schema.headOrElse()),
85
107
  _tag: 'CountQuery',
108
+ tableDef,
109
+ where: [],
110
+ resultSchema: Schema.Struct({ count: Schema.Number }).pipe(Schema.pluck('count'), Schema.Array, Schema.headOrElse()),
86
111
  });
87
112
  },
88
113
  first: (options) => {
89
- assertQueryBuilderAst(ast);
114
+ assertSelectQueryBuilderAst(ast);
90
115
  if (ast.limit._tag === 'Some')
91
116
  return invalidQueryBuilder(`.first() can't be called after .limit()`);
92
117
  return makeQueryBuilder(tableDef, {
@@ -119,6 +144,51 @@ export const makeQueryBuilder = (tableDef, ast = emptyAst(tableDef)) => {
119
144
  insertValues,
120
145
  });
121
146
  },
147
+ insert: (values) => {
148
+ return makeQueryBuilder(tableDef, {
149
+ _tag: 'InsertQuery',
150
+ tableDef,
151
+ values: values,
152
+ onConflict: undefined,
153
+ returning: undefined,
154
+ resultSchema: Schema.Void,
155
+ });
156
+ },
157
+ onConflict: (target, action, updateValues) => {
158
+ assertInsertQueryBuilderAst(ast);
159
+ const onConflict = Match.value(action).pipe(Match.when('ignore', () => ({ target, action: { _tag: 'ignore' } })), Match.when('replace', () => ({ target, action: { _tag: 'replace' } })), Match.when('update', () => ({ target, action: { _tag: 'update', update: updateValues } })), Match.exhaustive);
160
+ return makeQueryBuilder(tableDef, {
161
+ ...ast,
162
+ onConflict,
163
+ });
164
+ },
165
+ returning: (...columns) => {
166
+ assertWriteQueryBuilderAst(ast);
167
+ return makeQueryBuilder(tableDef, {
168
+ ...ast,
169
+ returning: columns,
170
+ resultSchema: tableDef.schema.pipe(Schema.pick(...columns), Schema.Array),
171
+ });
172
+ },
173
+ update: (values) => {
174
+ return makeQueryBuilder(tableDef, {
175
+ _tag: 'UpdateQuery',
176
+ tableDef,
177
+ values: values,
178
+ where: [],
179
+ returning: undefined,
180
+ resultSchema: Schema.Void,
181
+ });
182
+ },
183
+ delete: () => {
184
+ return makeQueryBuilder(tableDef, {
185
+ _tag: 'DeleteQuery',
186
+ tableDef,
187
+ where: [],
188
+ returning: undefined,
189
+ resultSchema: Schema.Void,
190
+ });
191
+ },
122
192
  };
123
193
  return {
124
194
  [TypeId]: TypeId,
@@ -148,96 +218,60 @@ const emptyAst = (tableDef) => ({
148
218
  where: [],
149
219
  resultSchemaSingle: tableDef.schema,
150
220
  });
151
- const astToSql = (ast) => {
152
- if (isRowQuery(ast)) {
153
- // TODO
154
- return { query: `SELECT * FROM '${ast.tableDef.sqliteDef.name}' WHERE id = ?`, bindValues: [ast.id] };
155
- }
156
- const bindValues = [];
157
- // TODO bind values
158
- const whereStmt = ast.where.length > 0
159
- ? `WHERE ${ast.where
160
- .map(({ col, op, value }) => {
161
- if (value === null) {
162
- if (op !== '=' && op !== '!=') {
163
- throw new Error(`Unsupported operator for NULL value: ${op}`);
164
- }
165
- const opStmt = op === '=' ? 'IS' : 'IS NOT';
166
- return `${col} ${opStmt} NULL`;
167
- }
168
- else {
169
- const colDef = ast.tableDef.sqliteDef.columns[col];
170
- if (colDef === undefined) {
171
- throw new Error(`Column ${col} not found`);
172
- }
173
- const isArray = op === 'IN' || op === 'NOT IN';
174
- const colSchema = isArray ? Schema.Array(colDef.schema) : colDef.schema;
175
- const encodedValue = Schema.encodeSync(colSchema)(value);
176
- if (isArray) {
177
- bindValues.push(...encodedValue);
178
- const placeholders = Array.from({ length: encodedValue.length }, () => '?').join(', ');
179
- return `${col} ${op} (${placeholders})`;
180
- }
181
- else {
182
- bindValues.push(encodedValue);
183
- return `${col} ${op} ?`;
184
- }
185
- }
186
- })
187
- .join(' AND ')}`
188
- : '';
189
- if (ast._tag === 'CountQuery') {
190
- const selectFromStmt = `SELECT COUNT(*) as count FROM '${ast.tableDef.sqliteDef.name}'`;
191
- const query = [selectFromStmt, whereStmt].filter((_) => _.length > 0).join(' ');
192
- return { query, bindValues };
193
- }
194
- const columnsStmt = ast.select.columns.length === 0 ? '*' : ast.select.columns.join(', ');
195
- const selectStmt = `SELECT ${columnsStmt}`;
196
- const fromStmt = `FROM '${ast.tableDef.sqliteDef.name}'`;
197
- const orderByStmt = ast.orderBy.length > 0
198
- ? `ORDER BY ${ast.orderBy.map(({ col, direction }) => `${col} ${direction}`).join(', ')}`
199
- : '';
200
- const limitStmt = ast.limit._tag === 'Some' ? `LIMIT ?` : '';
201
- if (ast.limit._tag === 'Some')
202
- bindValues.push(ast.limit.value);
203
- const offsetStmt = ast.offset._tag === 'Some' ? `OFFSET ?` : '';
204
- if (ast.offset._tag === 'Some')
205
- bindValues.push(ast.offset.value);
206
- const query = [selectStmt, fromStmt, whereStmt, orderByStmt, offsetStmt, limitStmt]
207
- .map((_) => _.trim())
208
- .filter((_) => _.length > 0)
209
- .join(' ');
210
- // TODO bind values
211
- return { query, bindValues };
212
- };
221
+ // Helper functions
213
222
  // eslint-disable-next-line prefer-arrow/prefer-arrow-functions
214
- function assertQueryBuilderAst(ast) {
223
+ function assertSelectQueryBuilderAst(ast) {
215
224
  if (ast._tag !== 'SelectQuery') {
216
225
  throw new Error('Expected SelectQuery but got ' + ast._tag);
217
226
  }
218
227
  }
228
+ // eslint-disable-next-line prefer-arrow/prefer-arrow-functions
229
+ function assertInsertQueryBuilderAst(ast) {
230
+ if (ast._tag !== 'InsertQuery') {
231
+ throw new Error('Expected InsertQuery but got ' + ast._tag);
232
+ }
233
+ }
234
+ // eslint-disable-next-line prefer-arrow/prefer-arrow-functions
235
+ function assertWriteQueryBuilderAst(ast) {
236
+ if (ast._tag !== 'InsertQuery' && ast._tag !== 'UpdateQuery' && ast._tag !== 'DeleteQuery') {
237
+ throw new Error('Expected WriteQuery but got ' + ast._tag);
238
+ }
239
+ }
219
240
  const isRowQuery = (ast) => ast._tag === 'RowQuery';
220
241
  export const invalidQueryBuilder = (msg) => {
221
242
  throw new Error('Invalid query builder' + (msg ? `: ${msg}` : ''));
222
243
  };
223
244
  export const getResultSchema = (qb) => {
224
245
  const queryAst = qb[QueryBuilderAstSymbol];
225
- if (queryAst._tag === 'SelectQuery') {
226
- const arraySchema = Schema.Array(queryAst.resultSchemaSingle);
227
- if (queryAst.pickFirst !== false) {
228
- return arraySchema.pipe(Schema.headOrElse(queryAst.pickFirst.fallback));
246
+ switch (queryAst._tag) {
247
+ case 'SelectQuery': {
248
+ const arraySchema = Schema.Array(queryAst.resultSchemaSingle);
249
+ if (queryAst.pickFirst !== false) {
250
+ return arraySchema.pipe(Schema.headOrElse(queryAst.pickFirst.fallback));
251
+ }
252
+ return arraySchema;
229
253
  }
230
- return arraySchema;
231
- }
232
- else if (queryAst._tag === 'CountQuery') {
233
- return Schema.Struct({ count: Schema.Number }).pipe(Schema.pluck('count'), Schema.Array, Schema.headOrElse());
234
- }
235
- else {
236
- if (queryAst.tableDef.options.isSingleColumn) {
237
- return queryAst.tableDef.schema.pipe(Schema.pluck('value'), Schema.Array, Schema.headOrElse());
254
+ case 'CountQuery': {
255
+ return Schema.Struct({ count: Schema.Number }).pipe(Schema.pluck('count'), Schema.Array, Schema.headOrElse());
256
+ }
257
+ case 'InsertQuery':
258
+ case 'UpdateQuery':
259
+ case 'DeleteQuery': {
260
+ // For write operations with RETURNING clause, we need to return the appropriate schema
261
+ if (queryAst.returning && queryAst.returning.length > 0) {
262
+ // Create a schema for the returned columns
263
+ return queryAst.tableDef.schema.pipe(Schema.pick(...queryAst.returning), Schema.Array);
264
+ }
265
+ // For write operations without RETURNING, the result is the number of affected rows
266
+ return Schema.Number;
238
267
  }
239
- else {
240
- return queryAst.tableDef.schema.pipe(Schema.Array, Schema.headOrElse());
268
+ default: {
269
+ if (queryAst.tableDef.options.isSingleColumn) {
270
+ return queryAst.tableDef.schema.pipe(Schema.pluck('value'), Schema.Array, Schema.headOrElse());
271
+ }
272
+ else {
273
+ return queryAst.tableDef.schema.pipe(Schema.Array, Schema.headOrElse());
274
+ }
241
275
  }
242
276
  }
243
277
  };
@@ -1 +1 @@
1
- {"version":3,"file":"impl.js","sourceRoot":"","sources":["../../src/query-builder/impl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"impl.js","sourceRoot":"","sources":["../../src/query-builder/impl.ts"],"names":[],"mappings":"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"}
@@ -195,6 +195,100 @@ describe('query builder', () => {
195
195
  `);
196
196
  });
197
197
  });
198
+ describe('write operations', () => {
199
+ it('should handle INSERT queries', () => {
200
+ expect(db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).asSql()).toMatchInlineSnapshot(`
201
+ {
202
+ "bindValues": [
203
+ "123",
204
+ "Buy milk",
205
+ "active",
206
+ ],
207
+ "query": "INSERT INTO 'todos' (id, text, status) VALUES (?, ?, ?)",
208
+ }
209
+ `);
210
+ });
211
+ it('should handle UPDATE queries', () => {
212
+ expect(db.todos.update({ status: 'completed' }).where({ id: '123' }).asSql()).toMatchInlineSnapshot(`
213
+ {
214
+ "bindValues": [
215
+ "completed",
216
+ "123",
217
+ ],
218
+ "query": "UPDATE 'todos' SET status = ? WHERE id = ?",
219
+ }
220
+ `);
221
+ });
222
+ it('should handle DELETE queries', () => {
223
+ expect(db.todos.delete().where({ status: 'completed' }).asSql()).toMatchInlineSnapshot(`
224
+ {
225
+ "bindValues": [
226
+ "completed",
227
+ ],
228
+ "query": "DELETE FROM 'todos' WHERE status = ?",
229
+ }
230
+ `);
231
+ });
232
+ it('should handle INSERT with ON CONFLICT', () => {
233
+ expect(db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'ignore').asSql())
234
+ .toMatchInlineSnapshot(`
235
+ {
236
+ "bindValues": [
237
+ "123",
238
+ "Buy milk",
239
+ "active",
240
+ ],
241
+ "query": "INSERT INTO 'todos' (id, text, status) VALUES (?, ?, ?) ON CONFLICT (id) DO NOTHING",
242
+ }
243
+ `);
244
+ expect(db.todos
245
+ .insert({ id: '123', text: 'Buy milk', status: 'active' })
246
+ .onConflict('id', 'update', { text: 'Buy soy milk', status: 'active' })
247
+ .asSql()).toMatchInlineSnapshot(`
248
+ {
249
+ "bindValues": [
250
+ "123",
251
+ "Buy milk",
252
+ "active",
253
+ "Buy soy milk",
254
+ "active",
255
+ ],
256
+ "query": "INSERT INTO 'todos' (id, text, status) VALUES (?, ?, ?) ON CONFLICT (id) DO UPDATE SET text = ?, status = ?",
257
+ }
258
+ `);
259
+ });
260
+ it('should handle RETURNING clause', () => {
261
+ expect(db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).returning('id').asSql())
262
+ .toMatchInlineSnapshot(`
263
+ {
264
+ "bindValues": [
265
+ "123",
266
+ "Buy milk",
267
+ "active",
268
+ ],
269
+ "query": "INSERT INTO 'todos' (id, text, status) VALUES (?, ?, ?) RETURNING id",
270
+ }
271
+ `);
272
+ expect(db.todos.update({ status: 'completed' }).where({ id: '123' }).returning('id').asSql())
273
+ .toMatchInlineSnapshot(`
274
+ {
275
+ "bindValues": [
276
+ "completed",
277
+ "123",
278
+ ],
279
+ "query": "UPDATE 'todos' SET status = ? WHERE id = ? RETURNING id",
280
+ }
281
+ `);
282
+ expect(db.todos.delete().where({ status: 'completed' }).returning('id').asSql()).toMatchInlineSnapshot(`
283
+ {
284
+ "bindValues": [
285
+ "completed",
286
+ ],
287
+ "query": "DELETE FROM 'todos' WHERE status = ? RETURNING id",
288
+ }
289
+ `);
290
+ });
291
+ });
198
292
  });
199
293
  // TODO nested queries
200
294
  // const rawSql = <A, I>(sql: string, params: { [key: string]: any }, schema: Schema.Schema<A, I>) =>