@rocicorp/zero 0.18.2025032900 → 0.18.2025040201

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 (146) hide show
  1. package/out/analyze-query/src/bin.d.ts +2 -0
  2. package/out/analyze-query/src/bin.d.ts.map +1 -0
  3. package/out/analyze-query/src/bin.js +178 -0
  4. package/out/analyze-query/src/bin.js.map +1 -0
  5. package/out/{chunk-I7LQ2GI3.js → chunk-242YQPIZ.js} +241 -97
  6. package/out/chunk-242YQPIZ.js.map +7 -0
  7. package/out/{chunk-NBZURO2P.js → chunk-R7QLNPBS.js} +16 -109
  8. package/out/{chunk-NBZURO2P.js.map → chunk-R7QLNPBS.js.map} +3 -3
  9. package/out/inspector-RYBBQ63M.js +394 -0
  10. package/out/inspector-RYBBQ63M.js.map +7 -0
  11. package/out/otel/src/test-log-config.d.ts +8 -0
  12. package/out/otel/src/test-log-config.d.ts.map +1 -0
  13. package/out/otel/src/test-log-config.js +8 -0
  14. package/out/otel/src/test-log-config.js.map +1 -0
  15. package/out/replicache/src/replicache-impl.d.ts.map +1 -1
  16. package/out/replicache/src/replicache-options.d.ts +12 -0
  17. package/out/replicache/src/replicache-options.d.ts.map +1 -1
  18. package/out/shared/src/browser-env.d.ts +2 -0
  19. package/out/shared/src/browser-env.d.ts.map +1 -1
  20. package/out/shared/src/logging-test-utils.d.ts +12 -0
  21. package/out/shared/src/logging-test-utils.d.ts.map +1 -0
  22. package/out/shared/src/logging-test-utils.js +21 -0
  23. package/out/shared/src/logging-test-utils.js.map +1 -0
  24. package/out/solid.js +2 -2
  25. package/out/z2s/src/compiler.d.ts +5 -4
  26. package/out/z2s/src/compiler.d.ts.map +1 -1
  27. package/out/z2s/src/compiler.js +86 -59
  28. package/out/z2s/src/compiler.js.map +1 -1
  29. package/out/z2s/src/schema.d.ts +11 -0
  30. package/out/z2s/src/schema.d.ts.map +1 -0
  31. package/out/z2s/src/schema.js +2 -0
  32. package/out/z2s/src/schema.js.map +1 -0
  33. package/out/z2s/src/sql.d.ts +7 -4
  34. package/out/z2s/src/sql.d.ts.map +1 -1
  35. package/out/z2s/src/sql.js +113 -66
  36. package/out/z2s/src/sql.js.map +1 -1
  37. package/out/zero/src/analyze-query.d.ts +3 -0
  38. package/out/zero/src/analyze-query.d.ts.map +1 -0
  39. package/out/zero/src/analyze-query.js +3 -0
  40. package/out/zero/src/analyze-query.js.map +1 -0
  41. package/out/zero-cache/src/db/specs.d.ts +1 -1
  42. package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts +5 -5
  43. package/out/zero-cache/src/services/change-source/pg/schema/published.d.ts +2 -2
  44. package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts +1 -1
  45. package/out/zero-cache/src/services/mutagen/pusher.d.ts.map +1 -1
  46. package/out/zero-cache/src/services/mutagen/pusher.js +10 -6
  47. package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
  48. package/out/zero-cache/src/services/replicator/schema/change-log.d.ts.map +1 -1
  49. package/out/zero-cache/src/services/replicator/schema/change-log.js +17 -16
  50. package/out/zero-cache/src/services/replicator/schema/change-log.js.map +1 -1
  51. package/out/zero-cache/src/services/view-syncer/client-schema.d.ts.map +1 -1
  52. package/out/zero-cache/src/services/view-syncer/client-schema.js +2 -8
  53. package/out/zero-cache/src/services/view-syncer/client-schema.js.map +1 -1
  54. package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts +1 -1
  55. package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +1 -1
  56. package/out/zero-cache/src/services/view-syncer/cvr-store.js +8 -15
  57. package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
  58. package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +1 -1
  59. package/out/zero-cache/src/services/view-syncer/cvr.js +2 -3
  60. package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
  61. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +2 -2
  62. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
  63. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
  64. package/out/zero-cache/src/services/view-syncer/view-syncer.js +0 -7
  65. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  66. package/out/zero-cache/src/types/lite.d.ts +1 -1
  67. package/out/zero-cache/src/types/lite.d.ts.map +1 -1
  68. package/out/zero-cache/src/types/lite.js +2 -52
  69. package/out/zero-cache/src/types/lite.js.map +1 -1
  70. package/out/zero-cache/src/types/pg.d.ts +2 -0
  71. package/out/zero-cache/src/types/pg.d.ts.map +1 -1
  72. package/out/zero-cache/src/types/pg.js +53 -0
  73. package/out/zero-cache/src/types/pg.js.map +1 -1
  74. package/out/zero-cache/src/workers/replicator.d.ts.map +1 -1
  75. package/out/zero-cache/src/workers/replicator.js +14 -3
  76. package/out/zero-cache/src/workers/replicator.js.map +1 -1
  77. package/out/zero-client/src/client/custom.d.ts +6 -10
  78. package/out/zero-client/src/client/custom.d.ts.map +1 -1
  79. package/out/zero-client/src/client/inspector/inspector.d.ts.map +1 -1
  80. package/out/zero-client/src/client/inspector/types.d.ts +0 -1
  81. package/out/zero-client/src/client/inspector/types.d.ts.map +1 -1
  82. package/out/zero-client/src/client/mutation-tracker.d.ts +7 -3
  83. package/out/zero-client/src/client/mutation-tracker.d.ts.map +1 -1
  84. package/out/zero-client/src/client/zero-rep.d.ts +6 -2
  85. package/out/zero-client/src/client/zero-rep.d.ts.map +1 -1
  86. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  87. package/out/zero-client/src/mod.d.ts +1 -1
  88. package/out/zero-client/src/mod.d.ts.map +1 -1
  89. package/out/zero-pg/src/custom.d.ts +2 -1
  90. package/out/zero-pg/src/custom.d.ts.map +1 -1
  91. package/out/zero-pg/src/custom.js +33 -16
  92. package/out/zero-pg/src/custom.js.map +1 -1
  93. package/out/zero-pg/src/query.d.ts +3 -2
  94. package/out/zero-pg/src/query.d.ts.map +1 -1
  95. package/out/zero-pg/src/query.js +10 -6
  96. package/out/zero-pg/src/query.js.map +1 -1
  97. package/out/zero-pg/src/schema.d.ts +13 -0
  98. package/out/zero-pg/src/schema.d.ts.map +1 -0
  99. package/out/zero-pg/src/schema.js +59 -0
  100. package/out/zero-pg/src/schema.js.map +1 -0
  101. package/out/zero-pg/src/web.d.ts +2 -1
  102. package/out/zero-pg/src/web.d.ts.map +1 -1
  103. package/out/zero-pg/src/web.js +19 -10
  104. package/out/zero-pg/src/web.js.map +1 -1
  105. package/out/zero-protocol/src/client-schema.d.ts +1 -1
  106. package/out/zero-protocol/src/client-schema.d.ts.map +1 -1
  107. package/out/zero-protocol/src/client-schema.js +1 -1
  108. package/out/zero-protocol/src/client-schema.js.map +1 -1
  109. package/out/zero-protocol/src/down.d.ts +5 -5
  110. package/out/zero-protocol/src/protocol-version.d.ts +1 -1
  111. package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
  112. package/out/zero-protocol/src/protocol-version.js +3 -2
  113. package/out/zero-protocol/src/protocol-version.js.map +1 -1
  114. package/out/zero-protocol/src/push.d.ts +16 -16
  115. package/out/zero-protocol/src/push.d.ts.map +1 -1
  116. package/out/zero-protocol/src/push.js +8 -5
  117. package/out/zero-protocol/src/push.js.map +1 -1
  118. package/out/zero-react/src/mod.d.ts +1 -1
  119. package/out/zero-react/src/mod.d.ts.map +1 -1
  120. package/out/zero-schema/src/builder/table-builder.d.ts +0 -12
  121. package/out/zero-schema/src/builder/table-builder.d.ts.map +1 -1
  122. package/out/zero-schema/src/builder/table-builder.js +0 -16
  123. package/out/zero-schema/src/builder/table-builder.js.map +1 -1
  124. package/out/zero-schema/src/table-schema.d.ts +0 -3
  125. package/out/zero-schema/src/table-schema.d.ts.map +1 -1
  126. package/out/zero-schema/src/table-schema.js +0 -3
  127. package/out/zero-schema/src/table-schema.js.map +1 -1
  128. package/out/zero-solid/src/mod.d.ts +1 -1
  129. package/out/zero-solid/src/mod.d.ts.map +1 -1
  130. package/out/zero.js +4 -8
  131. package/out/zql/src/ivm/catch.d.ts +51 -0
  132. package/out/zql/src/ivm/catch.d.ts.map +1 -0
  133. package/out/zql/src/ivm/catch.js +78 -0
  134. package/out/zql/src/ivm/catch.js.map +1 -0
  135. package/out/zql/src/ivm/memory-storage.js +37 -0
  136. package/out/zql/src/ivm/memory-storage.js.map +1 -0
  137. package/out/zql/src/query/query-impl.d.ts.map +1 -1
  138. package/out/zql/src/query/query-impl.js +6 -4
  139. package/out/zql/src/query/query-impl.js.map +1 -1
  140. package/out/zqlite/src/table-source.d.ts.map +1 -1
  141. package/out/zqlite/src/table-source.js +0 -8
  142. package/out/zqlite/src/table-source.js.map +1 -1
  143. package/package.json +4 -3
  144. package/out/chunk-I7LQ2GI3.js.map +0 -7
  145. package/out/inspector-SH2ZK7O3.js +0 -835
  146. package/out/inspector-SH2ZK7O3.js.map +0 -7
@@ -1 +1 @@
1
- {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../../z2s/src/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAC,KAAK,SAAS,EAAC,MAAM,0BAA0B,CAAC;AAExD,OAAO,KAAK,EACV,2BAA2B,EAC3B,WAAW,EACX,QAAQ,EACR,aAAa,EACd,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,KAAK,GAAG,EACR,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACrB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACV,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,2BAA2B,CAAC;AAQtD,KAAK,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAI1C,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,GAAG,GAAG,SAAS,CAMzD;AAgDD;;;;;;GAMG;AACH,wBAAgB,OAAO,CACrB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAC1B,QAAQ,CAGV;AAED,qBAAa,QAAQ;;gBAIP,MAAM,EAAE,MAAM;IAK1B,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ;IAWxD,MAAM,CACJ,GAAG,EAAE,GAAG,EAER,MAAM,EAAE,MAAM,GAAG,SAAS,EAE1B,WAAW,EAAE,QAAQ,GAAG,SAAS,GAChC,QAAQ;IAiBX,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ;IAgB/D,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ;IAO1C,OAAO,CACL,aAAa,EAAE,SAAS,kBAAkB,EAAE,EAC5C,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,WAAW,EAAE,MAAM,GAClB,QAAQ,EAAE;IAUb,oBAAoB,CAClB,YAAY,EAAE,kBAAkB,EAChC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,WAAW,EAAE,MAAM,GAClB,QAAQ;IA+DX,qBAAqB,CACnB,YAAY,EAAE,kBAAkB,EAChC,MAAM,GAAE,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC,EAAO;IAiB1D,gBAAgB,CACd,YAAY,EAAE,kBAAkB,GAC/B;QACD,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,MAAM;QAChB,SAAS,EAAE,MAAM,GAAG,SAAS;QAC7B,SAAS,EAAE,MAAM;KAClB;IAsCD,KAAK,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ;IAuBhE,MAAM,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ;IAgC3D,YAAY,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ;IAMjE,GAAG,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ;IAMxD,aAAa,CACX,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,OAAO,GACd,QAAQ;IAaX,MAAM,CACJ,SAAS,EAAE,2BAA2B,EACtC,WAAW,EAAE,MAAM,GAClB,QAAQ;IAwBX,SAAS,CAKP,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B,QAAQ;CA+GZ"}
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../../z2s/src/compiler.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import {} from "../../shared/src/json.js";
4
4
  import { must } from "../../shared/src/must.js";
5
5
  import {} from "../../zero-protocol/src/ast.js";
6
6
  import { clientToServer, NameMapper } from "../../zero-schema/src/name-mapper.js";
7
- import { sql, sqlConvertArg, sqlConvertArgUnsafe } from "./sql.js";
7
+ import { sql, sqlConvertColumnArg, sqlConvertSingularLiteralArg, sqlConvertPluralLiteralArg, Z2S_COLLATION, } from "./sql.js";
8
8
  import { parse as parseBigIntJson, } from "../../zero-cache/src/types/bigint-json.js";
9
9
  import { hasOwn } from "../../shared/src/has-own.js";
10
10
  const ZQL_RESULT_KEY = 'zql_result';
@@ -64,15 +64,17 @@ function findPathToBigInt(v) {
64
64
  * - IN is changed to ANY to allow binding array literals
65
65
  * - subqueries are aggregated using PG's `array_agg` and `row_to_json` functions
66
66
  */
67
- export function compile(ast, tables, format) {
68
- const compiler = new Compiler(tables);
67
+ export function compile(ast, tables, serverSchema, format) {
68
+ const compiler = new Compiler(tables, serverSchema);
69
69
  return compiler.compile(ast, format);
70
70
  }
71
71
  export class Compiler {
72
72
  #tables;
73
+ #serverSchema;
73
74
  #nameMapper;
74
- constructor(tables) {
75
+ constructor(tables, serverSchema) {
75
76
  this.#tables = tables;
77
+ this.#serverSchema = serverSchema;
76
78
  this.#nameMapper = clientToServer(tables);
77
79
  }
78
80
  compile(ast, format) {
@@ -85,8 +87,8 @@ export class Compiler {
85
87
  correlation) {
86
88
  const selectionSet = this.related(ast.related ?? [], format, ast.table);
87
89
  const tableSchema = this.#tables[ast.table];
88
- for (const [column, columnSchema] of Object.entries(tableSchema.columns)) {
89
- selectionSet.push(this.#selectCol(ast.table, column, columnSchema.type));
90
+ for (const column of Object.keys(tableSchema.columns)) {
91
+ selectionSet.push(this.#selectCol(ast.table, column));
90
92
  }
91
93
  return sql `SELECT ${sql.join(selectionSet, ',')} FROM ${this.#mapTable(ast.table)} ${ast.where ? sql `WHERE ${this.where(ast.where, ast.table)}` : sql ``} ${correlation
92
94
  ? sql `${ast.where ? sql `AND` : sql `WHERE`} (${correlation})`
@@ -96,17 +98,31 @@ export class Compiler {
96
98
  if (!orderBy) {
97
99
  return sql ``;
98
100
  }
99
- return sql `ORDER BY ${sql.join(orderBy.map(([col, dir]) => dir === 'asc'
100
- ? // Oh postgres. The table must be referred to be client name but the column by server name.
101
- // E.g., `SELECT server_col as client_col FROM server_table as client_table ORDER BY client_Table.server_col`
102
- sql `${sql.ident(table)}.${this.#mapColumnNoAlias(table, col)} ASC`
103
- : sql `${sql.ident(table)}.${this.#mapColumnNoAlias(table, col)} DESC`), ', ')}`;
101
+ return sql `ORDER BY ${sql.join(orderBy.map(([col, dir]) => {
102
+ const serverColumnSchema = this.#serverSchema[this.#nameMapper.tableName(table)][this.#nameMapper.columnName(table, col)];
103
+ return dir === 'asc'
104
+ ? // Oh postgres. The table must be referred to be client name but the column by server name.
105
+ // E.g., `SELECT server_col as client_col FROM server_table as client_table ORDER BY client_Table.server_col`
106
+ sql `${sql.ident(table)}.${this.#mapColumnNoAlias(table, col)}${this.#maybeCollate(serverColumnSchema)} ASC`
107
+ : sql `${sql.ident(table)}.${this.#mapColumnNoAlias(table, col)}${this.#maybeCollate(serverColumnSchema)} DESC`;
108
+ }), ', ')}`;
109
+ }
110
+ #maybeCollate(serverColumnSchema) {
111
+ if (serverColumnSchema.type === 'text' ||
112
+ serverColumnSchema.type === 'char' ||
113
+ serverColumnSchema.type === 'varchar') {
114
+ return sql ` COLLATE ${sql.ident(Z2S_COLLATION)}`;
115
+ }
116
+ if (serverColumnSchema.type === 'uuid' || serverColumnSchema.isEnum) {
117
+ return sql `::text COLLATE ${sql.ident(Z2S_COLLATION)}`;
118
+ }
119
+ return sql ``;
104
120
  }
105
121
  limit(limit) {
106
122
  if (!limit) {
107
123
  return sql ``;
108
124
  }
109
- return sql `LIMIT ${sqlConvertArg('number', limit)}`;
125
+ return sql `LIMIT ${sqlConvertSingularLiteralArg(limit)}`;
110
126
  }
111
127
  related(relationships, format, parentTable) {
112
128
  return relationships.map(relationship => this.relationshipSubquery(relationship, format?.relationships[must(relationship.subquery.alias)], parentTable));
@@ -194,7 +210,7 @@ export class Compiler {
194
210
  case 'LIKE':
195
211
  case 'NOT ILIKE':
196
212
  case 'NOT LIKE':
197
- return sql `${this.valuePosition(condition.left, table, this.#extractType(table, condition.left, condition.right), false)} ${sql.__dangerous__rawValue(condition.op)} ${this.valuePosition(condition.right, table, this.#extractType(table, condition.right, condition.left), false)}`;
213
+ return sql `${this.valueComparison(condition.left, table, condition.right, false)} ${sql.__dangerous__rawValue(condition.op)} ${this.valueComparison(condition.right, table, condition.left, false)}`;
198
214
  case 'NOT IN':
199
215
  case 'IN':
200
216
  return this.any(condition, table);
@@ -204,19 +220,61 @@ export class Compiler {
204
220
  }
205
221
  }
206
222
  distinctFrom(condition, table) {
207
- return sql `${this.valuePosition(condition.left, table, this.#extractType(table, condition.left, condition.right), false)} ${condition.op === 'IS' ? sql `IS NOT DISTINCT FROM` : sql `IS DISTINCT FROM`} ${this.valuePosition(condition.right, table, this.#extractType(table, condition.right, condition.left), false)}`;
223
+ return sql `${this.valueComparison(condition.left, table, condition.right, false)} ${condition.op === 'IS' ? sql `IS NOT DISTINCT FROM` : sql `IS DISTINCT FROM`} ${this.valueComparison(condition.right, table, condition.left, false)}`;
208
224
  }
209
225
  any(condition, table) {
210
- return sql `${this.valuePosition(condition.left, table, this.#extractType(table, condition.left, condition.right), false)} ${condition.op === 'IN' ? sql `= ANY` : sql `!= ANY`} (${this.valuePosition(condition.right, table, this.#extractType(table, condition.right, condition.left), true)})`;
226
+ return sql `${this.valueComparison(condition.left, table, condition.right, false)} ${condition.op === 'IN' ? sql `= ANY` : sql `!= ANY`} (${this.valueComparison(condition.right, table, condition.left, true)})`;
211
227
  }
212
- valuePosition(value, table, valueType, plural) {
213
- switch (value.type) {
228
+ valueComparison(valuePos, table, otherValuePos, plural) {
229
+ const valuePosType = valuePos.type;
230
+ switch (valuePosType) {
214
231
  case 'column':
215
- return this.#mapColumnNoAlias(table, value.name);
232
+ return this.#mapColumnNoAlias(table, valuePos.name);
216
233
  case 'literal':
217
- return sqlConvertArgUnsafe(valueType, value.value, plural);
234
+ return this.#literalValueComparison(valuePos, table, otherValuePos, plural);
218
235
  case 'static':
219
236
  throw new Error('Static parameters must be bound to a value before compiling to SQL');
237
+ default:
238
+ unreachable(valuePosType);
239
+ break;
240
+ }
241
+ }
242
+ #literalValueComparison(valuePos, table, otherValuePos, plural) {
243
+ {
244
+ const otherType = otherValuePos.type;
245
+ switch (otherType) {
246
+ case 'column':
247
+ return sqlConvertColumnArg(this.#serverSchema[this.#nameMapper.tableName(table)][this.#nameMapper.columnName(table, otherValuePos.name)], valuePos.value, plural, true);
248
+ case 'literal': {
249
+ assert(plural === Array.isArray(valuePos.value));
250
+ if (Array.isArray(valuePos.value)) {
251
+ if (valuePos.value.length > 0) {
252
+ // If the array is non-empty base its type on its first
253
+ // element
254
+ return sqlConvertPluralLiteralArg(typeof valuePos.value[0], valuePos.value);
255
+ }
256
+ // If the array is empty, base its type on the other value
257
+ // position's type (as long as the other value position is non-null,
258
+ // cannot have a null[]).
259
+ if (otherValuePos.value !== null) {
260
+ return sqlConvertPluralLiteralArg(typeof otherValuePos.value, []);
261
+ }
262
+ // If the other value position is null, it can be compared to any
263
+ // type of empty array, chose 'string' arbitrarily.
264
+ return sqlConvertPluralLiteralArg('string', []);
265
+ }
266
+ if (typeof valuePos.value === 'string' ||
267
+ typeof valuePos.value === 'number' ||
268
+ typeof valuePos.value === 'boolean') {
269
+ return sqlConvertSingularLiteralArg(valuePos.value);
270
+ }
271
+ throw new Error(`Literal of unexpected type. ${valuePos.value} of type ${typeof valuePos.value}`);
272
+ }
273
+ case 'static':
274
+ throw new Error('Static parameters must be bound to a value before compiling to SQL');
275
+ default:
276
+ unreachable(otherType);
277
+ }
220
278
  }
221
279
  }
222
280
  exists(condition, parentTable) {
@@ -257,8 +315,15 @@ export class Compiler {
257
315
  const mapped = this.#nameMapper.tableName(table);
258
316
  return sql.ident(mapped);
259
317
  }
260
- #selectCol(table, column, type) {
261
- if (type === 'date' || type === 'timestamp') {
318
+ #selectCol(table, column) {
319
+ const serverColumnSchema = this.#serverSchema[this.#nameMapper.tableName(table)][this.#nameMapper.columnName(table, column)];
320
+ const serverType = serverColumnSchema.type;
321
+ if (!serverColumnSchema.isEnum &&
322
+ (serverType === 'date' ||
323
+ serverType === 'timestamp' ||
324
+ serverType === 'timestamptz' ||
325
+ serverType === 'timestamp with time zone' ||
326
+ serverType === 'timestamp without time zone')) {
262
327
  return sql `EXTRACT(EPOCH FROM ${sql.ident(table)}.${this.#mapColumnNoAlias(table, column)}::timestamp AT TIME ZONE 'UTC') * 1000 as ${sql.ident(column)}`;
263
328
  }
264
329
  return sql `${sql.ident(table)}.${this.#mapColumn(table, column)}`;
@@ -266,43 +331,5 @@ export class Compiler {
266
331
  #toJSON(table, singular = false) {
267
332
  return sql `${singular ? sql `` : sql `COALESCE(json_agg`}(row_to_json(${sql.ident(table)})) ${singular ? sql `` : sql `, '[]'::json)`}`;
268
333
  }
269
- #extractType(table,
270
- // first takes precedence over second in terms of type discovery
271
- first, second) {
272
- // Derive the type from the table schema first if able
273
- const column = first.type === 'column'
274
- ? first.name
275
- : second.type === 'column'
276
- ? second.name
277
- : undefined;
278
- if (column) {
279
- return this.#tables[table].columns[column].type;
280
- }
281
- // We're comparing two literals? Derive the type from the JS type itself.
282
- const literalValue = first.type === 'literal'
283
- ? first.value
284
- : second.type === 'literal'
285
- ? second.value
286
- : undefined;
287
- assert(literalValue, 'Literal value not found');
288
- if (literalValue === null) {
289
- return 'null';
290
- }
291
- const jsType = typeof literalValue;
292
- switch (jsType) {
293
- case 'boolean':
294
- case 'number':
295
- case 'string':
296
- return jsType;
297
- case 'object':
298
- case 'bigint':
299
- case 'function':
300
- case 'symbol':
301
- case 'undefined':
302
- throw new Error('Unsupported type: ' + jsType);
303
- default:
304
- unreachable(jsType);
305
- }
306
- }
307
334
  }
308
335
  //# sourceMappingURL=compiler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../../../z2s/src/compiler.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,4BAA4B,CAAC;AAC/C,OAAO,EAAC,MAAM,EAAE,WAAW,EAAC,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAgB,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAC,IAAI,EAAC,MAAM,0BAA0B,CAAC;AAO9C,OAAO,EAKN,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAC,cAAc,EAAE,UAAU,EAAC,MAAM,sCAAsC,CAAC;AAMhF,OAAO,EAAC,GAAG,EAAE,aAAa,EAAE,mBAAmB,EAAC,MAAM,UAAU,CAAC;AACjE,OAAO,EAEL,KAAK,IAAI,eAAe,GACzB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAC,MAAM,EAAC,MAAM,6BAA6B,CAAC;AAInD,MAAM,cAAc,GAAG,YAAY,CAAC;AACpC,8DAA8D;AAC9D,MAAM,UAAU,gBAAgB,CAAC,QAAa;IAC5C,MAAM,UAAU,GAAoB,eAAe,CACjD,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAC5B,CAAC;IACF,eAAe,CAAC,UAAU,CAAC,CAAC;IAC5B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,eAAe,CAAC,CAAkB;IACzC,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAkB;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC;IACzB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,EAAE,CAAC;QACnB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAClC,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpC,IAAI,IAAI,EAAE,CAAC;wBACT,OAAO,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;oBACzB,CAAC;gBACH,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,MAAM,CAAC,GAAG,CAAoC,CAAC;YAC/C,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClB,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBACjB,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpC,IAAI,IAAI,EAAE,CAAC;wBACT,OAAO,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;oBAC3B,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CACrB,GAAQ,EACR,MAAc,EACd,MAA2B;IAE3B,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,OAAO,QAAQ;IACV,OAAO,CAAS;IAChB,WAAW,CAAa;IAEjC,YAAY,MAAc;QACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,CAAC,GAAQ,EAAE,MAA2B;QAC3C,OAAO,GAAG,CAAA,UAAU,IAAI,CAAC,OAAO,CAC9B,MAAM,EACN,MAAM,EAAE,QAAQ,CACjB,aAAa,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,IAAI,CAAC,MAAM,CAC1D,GAAG,EACH,MAAM,EACN,SAAS,CACV,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,CACJ,GAAQ;IACR,sCAAsC;IACtC,MAA0B;IAC1B,uFAAuF;IACvF,WAAiC;QAEjC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QACxE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5C,KAAK,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YACzE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,GAAG,CAAA,UAAU,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,SAAS,IAAI,CAAC,SAAS,CACpE,GAAG,CAAC,KAAK,CACV,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA,EAAE,IACrE,WAAW;YACT,CAAC,CAAC,GAAG,CAAA,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA,OAAO,KAAK,WAAW,GAAG;YAC5D,CAAC,CAAC,GAAG,CAAA,EACT,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,IACtC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CACzD,EAAE,CAAC;IACL,CAAC;IAED,OAAO,CAAC,OAA6B,EAAE,KAAa;QAClD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,CAAA,EAAE,CAAC;QACf,CAAC;QACD,OAAO,GAAG,CAAA,YAAY,GAAG,CAAC,IAAI,CAC5B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CACzB,GAAG,KAAK,KAAK;YACX,CAAC,CAAC,2FAA2F;gBAC3F,6GAA6G;gBAC7G,GAAG,CAAA,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM;YACpE,CAAC,CAAC,GAAG,CAAA,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CACxE,EACD,IAAI,CACL,EAAE,CAAC;IACN,CAAC;IAED,KAAK,CAAC,KAAyB;QAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,GAAG,CAAA,EAAE,CAAC;QACf,CAAC;QACD,OAAO,GAAG,CAAA,SAAS,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;IACtD,CAAC;IAED,OAAO,CACL,aAA4C,EAC5C,MAA0B,EAC1B,WAAmB;QAEnB,OAAO,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CACtC,IAAI,CAAC,oBAAoB,CACvB,YAAY,EACZ,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EACxD,WAAW,CACZ,CACF,CAAC;IACJ,CAAC;IAED,oBAAoB,CAClB,YAAgC,EAChC,MAA0B,EAC1B,WAAmB;QAEnB,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,GAC3C,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;YACtC,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC;YACvE;;;;;;eAMG;YACH,OAAO,GAAG,CAAA;iBACC,IAAI,CAAC,OAAO,CACnB,SAAS,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,EACtC,MAAM,EAAE,QAAQ,CACjB,iBAAiB,GAAG,CAAC,IAAI,CACxB,iBAAiB,CAAC,GAAG,CACnB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAA,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CACnE,EACD,GAAG,CACJ,SAAS,IAAI,WAAW,IAAI,CAAC,SAAS,CACrC,WAAW,EACX,WAAW,EACX,YAAY,CAAC,WAAW,CAAC,WAAW,EACpC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAC3B,YAAY,CAAC,QAAQ,CAAC,KAAK,EAC3B,YAAY,CAAC,WAAW,CAAC,UAAU,CACpC,KACC,YAAY,CAAC,QAAQ,CAAC,KAAK;gBACzB,CAAC,CAAC,GAAG,CAAA,OAAO,IAAI,CAAC,KAAK,CAClB,YAAY,CAAC,QAAQ,CAAC,KAAK,EAC3B,YAAY,CAAC,QAAQ,CAAC,KAAK,CAC5B,EAAE;gBACL,CAAC,CAAC,GAAG,CAAA,EACT,IAAI,IAAI,CAAC,OAAO,CACd,YAAY,CAAC,QAAQ,CAAC,OAAO,EAC7B,YAAY,CAAC,QAAQ,CAAC,KAAK,CAC5B,IACC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CACzD,MAAM,GAAG,CAAC,KAAK,CAAC,SAAS,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;aAClD,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,CAAC;QACD,OAAO,GAAG,CAAA;eAEN,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAA,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA,mBAChC,gBAAgB,GAAG,CAAC,KAAK,CAAC,SAAS,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,MAC/D,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAA,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA,eAChC,UAAU,IAAI,CAAC,MAAM,CACnB,YAAY,CAAC,QAAQ,EACrB,MAAM,EACN,IAAI,CAAC,SAAS,CACZ,WAAW,EACX,WAAW,EACX,YAAY,CAAC,WAAW,CAAC,WAAW,EACpC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAC3B,YAAY,CAAC,QAAQ,CAAC,KAAK,EAC3B,YAAY,CAAC,WAAW,CAAC,UAAU,CACpC,CACF,KAAK,GAAG,CAAC,KAAK,CAAC,SAAS,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;WAClD,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IAClD,CAAC;IAED,qBAAqB,CACnB,YAAgC,EAChC,SAAsD,EAAE;QAExD,MAAM,CAAC,IAAI,CAAC;YACV,YAAY,CAAC,QAAQ,CAAC,KAAK;YAC3B,YAAY,CAAC,WAAW;YACxB,YAAY,CAAC,QAAQ,CAAC,KAAK;SAC5B,CAAC,CAAC;QACH,MAAM,CACJ,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAC/C,6CAA6C,CAC9C,CAAC;QACF,KAAK,MAAM,eAAe,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YAClE,IAAI,CAAC,qBAAqB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,gBAAgB,CACd,YAAgC;QAOhC,MAAM,mBAAmB,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;QACrE,MAAM,KAAK,GAAe,EAAE,CAAC;QAE7B,SAAS,KAAK,CAAC,KAAa;YAC1B,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,CAAC;YACD,OAAO,SAAS,KAAK,EAAE,CAAC;QAC1B,CAAC;QAED,KAAK,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,mBAAmB,EAAE,CAAC;YACxD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBAClC,SAAS;YACX,CAAC;YACD,KAAK,CAAC,IAAI,CACR,GAAG,CAAA,SAAS,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,CACtD,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CACpB,OAAO,IAAI,CAAC,SAAS,CACpB,mBAAmB,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACxC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EACvB,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAChD,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EACpC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EACnB,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAChD,EAAE,CACJ,CAAC;QACJ,CAAC;QAED,OAAO;YACL,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YACnB,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACvB,mBAAmB,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,mBAAmB,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC9C,CAAC;IACb,CAAC;IAED,KAAK,CAAC,SAAgC,EAAE,KAAa;QACnD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,GAAG,CAAA,EAAE,CAAC;QACf,CAAC;QAED,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;YACvB,KAAK,KAAK;gBACR,OAAO,GAAG,CAAA,IAAI,GAAG,CAAC,IAAI,CACpB,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EACnD,OAAO,CACR,GAAG,CAAC;YACP,KAAK,IAAI;gBACP,OAAO,GAAG,CAAA,IAAI,GAAG,CAAC,IAAI,CACpB,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EACnD,MAAM,CACP,GAAG,CAAC;YACP,KAAK,oBAAoB;gBACvB,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACvC,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,SAA0B,EAAE,KAAa;QAC9C,QAAQ,SAAS,CAAC,EAAE,EAAE,CAAC;YACrB,KAAK,IAAI,CAAC;YACV,KAAK,GAAG,CAAC;YACT,KAAK,IAAI,CAAC;YACV,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC;YACT,KAAK,IAAI,CAAC;YACV,KAAK,OAAO,CAAC;YACb,KAAK,MAAM,CAAC;YACZ,KAAK,WAAW,CAAC;YACjB,KAAK,UAAU;gBACb,OAAO,GAAG,CAAA,GAAG,IAAI,CAAC,aAAa,CAC7B,SAAS,CAAC,IAAI,EACd,KAAK,EACL,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,EACzD,KAAK,CACN,IAAI,GAAG,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,aAAa,CAChE,SAAS,CAAC,KAAK,EACf,KAAK,EACL,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,EACzD,KAAK,CACN,EAAE,CAAC;YACN,KAAK,QAAQ,CAAC;YACd,KAAK,IAAI;gBACP,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACpC,KAAK,IAAI,CAAC;YACV,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,YAAY,CAAC,SAA0B,EAAE,KAAa;QACpD,OAAO,GAAG,CAAA,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,IACtH,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAA,sBAAsB,CAAC,CAAC,CAAC,GAAG,CAAA,kBACzD,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;IACrH,CAAC;IAED,GAAG,CAAC,SAA0B,EAAE,KAAa;QAC3C,OAAO,GAAG,CAAA,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,IACtH,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAA,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA,QAC1C,KAAK,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC;IACtH,CAAC;IAED,aAAa,CACX,KAAoB,EACpB,KAAa,EACb,SAAoB,EACpB,MAAe;QAEf,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACnD,KAAK,SAAS;gBACZ,OAAO,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC7D,KAAK,QAAQ;gBACX,MAAM,IAAI,KAAK,CACb,oEAAoE,CACrE,CAAC;QACN,CAAC;IACH,CAAC;IAED,MAAM,CACJ,SAAsC,EACtC,WAAmB;QAEnB,QAAQ,SAAS,CAAC,EAAE,EAAE,CAAC;YACrB,KAAK,QAAQ;gBACX,OAAO,GAAG,CAAA,WAAW,IAAI,CAAC,MAAM,CAC9B,SAAS,CAAC,OAAO,CAAC,QAAQ,EAC1B,SAAS,EACT,IAAI,CAAC,SAAS,CACZ,WAAW,EACX,WAAW,EACX,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,EACzC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAChC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAChC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CACzC,CACF,GAAG,CAAC;YACP,KAAK,YAAY;gBACf,OAAO,GAAG,CAAA,eAAe,IAAI,CAAC,MAAM,CAClC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAC1B,SAAS,EACT,SAAS,CACV,GAAG,CAAC;QACT,CAAC;IACH,CAAC;IAED,SAAS;IACP,iEAAiE;IACjE,uEAAuE;IACvE,kFAAkF;IAClF,iCAAiC;IACjC,WAAmB,EACnB,gBAAwB,EACxB,aAAgC,EAChC,UAAkB,EAClB,eAAuB,EACvB,YAA+B;QAE/B,OAAO,GAAG,CAAC,IAAI,CACb,GAAG,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,GAAG,CAClC,CAAC,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE,EAAE,CAC9B,GAAG,CAAA,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,iBAAiB,CACzD,WAAW,EACX,YAAY,CACb,MAAM,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,iBAAiB,CACzD,UAAU,EACV,WAAW,CACZ,EAAE,CACN,EACD,OAAO,CACR,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,KAAa,EAAE,MAAc;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1D,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QAED,OAAO,GAAG,CAAA,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;IAC3D,CAAC;IAED,iBAAiB,CAAC,KAAa,EAAE,MAAc;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1D,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,KAAa;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO,GAAG,CAAA,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;IAC1D,CAAC;IAED,gBAAgB,CAAC,KAAa;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjD,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,UAAU,CAAC,KAAa,EAAE,MAAc,EAAE,IAAe;QACvD,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YAC5C,OAAO,GAAG,CAAA,sBAAsB,GAAG,CAAC,KAAK,CACvC,KAAK,CACN,IAAI,IAAI,CAAC,iBAAiB,CACzB,KAAK,EACL,MAAM,CACP,6CAA6C,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACpE,CAAC;QACD,OAAO,GAAG,CAAA,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;IACpE,CAAC;IAED,OAAO,CAAC,KAAa,EAAE,QAAQ,GAAG,KAAK;QACrC,OAAO,GAAG,CAAA,GACR,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAA,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA,mBACxB,gBAAgB,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAC9B,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAA,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA,eACxB,EAAE,CAAC;IACL,CAAC;IAED,YAAY,CACV,KAAa;IACb,gEAAgE;IAChE,KAAoB,EACpB,MAAqB;QAErB,sDAAsD;QACtD,MAAM,MAAM,GACV,KAAK,CAAC,IAAI,KAAK,QAAQ;YACrB,CAAC,CAAC,KAAK,CAAC,IAAI;YACZ,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;gBACxB,CAAC,CAAC,MAAM,CAAC,IAAI;gBACb,CAAC,CAAC,SAAS,CAAC;QAClB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;QAClD,CAAC;QAED,yEAAyE;QACzE,MAAM,YAAY,GAChB,KAAK,CAAC,IAAI,KAAK,SAAS;YACtB,CAAC,CAAC,KAAK,CAAC,KAAK;YACb,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS;gBACzB,CAAC,CAAC,MAAM,CAAC,KAAK;gBACd,CAAC,CAAC,SAAS,CAAC;QAElB,MAAM,CAAC,YAAY,EAAE,yBAAyB,CAAC,CAAC;QAEhD,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,YAAY,CAAC;QACnC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,SAAS,CAAC;YACf,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ;gBACX,OAAO,MAAM,CAAC;YAChB,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,UAAU,CAAC;YAChB,KAAK,QAAQ,CAAC;YACd,KAAK,WAAW;gBACd,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,MAAM,CAAC,CAAC;YACjD;gBACE,WAAW,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../../../z2s/src/compiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export type ServerTableSchema = {
2
+ [columnName: string]: ServerColumnSchema;
3
+ };
4
+ export type ServerColumnSchema = {
5
+ type: string;
6
+ isEnum: boolean;
7
+ };
8
+ export type ServerSchema = {
9
+ [tableName: string]: ServerTableSchema;
10
+ };
11
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../z2s/src/schema.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,CAAC;CACxC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../z2s/src/schema.ts"],"names":[],"mappings":""}
@@ -1,7 +1,7 @@
1
1
  import type { SQLQuery } from '@databases/sql';
2
2
  import baseSql from '@databases/sql';
3
- import type { ValueType } from '../../zero-protocol/src/client-schema.ts';
4
- import type { TypeNameToTypeMap } from '../../zero-schema/src/table-schema.ts';
3
+ import type { ServerColumnSchema } from './schema.ts';
4
+ export declare const Z2S_COLLATION = "ucs_basic";
5
5
  export declare function formatPg(sql: SQLQuery): {
6
6
  text: string;
7
7
  values: unknown[];
@@ -14,7 +14,10 @@ export declare function formatSqlite(sql: SQLQuery): {
14
14
  text: string;
15
15
  values: unknown[];
16
16
  };
17
- export declare function sqlConvertArg<T extends ValueType, P extends boolean = false>(type: T, value: true extends P ? TypeNameToTypeMap[T][] : TypeNameToTypeMap[T], plural?: P): SQLQuery;
18
- export declare function sqlConvertArgUnsafe(type: ValueType, value: unknown, plural?: boolean): SQLQuery;
17
+ export type LiteralType = 'boolean' | 'number' | 'string' | 'null';
18
+ export type PluralLiteralType = Exclude<LiteralType, 'null'>;
19
+ export declare function sqlConvertSingularLiteralArg(value: string | boolean | number | null): SQLQuery;
20
+ export declare function sqlConvertPluralLiteralArg(type: PluralLiteralType, value: PluralLiteralType[]): SQLQuery;
21
+ export declare function sqlConvertColumnArg(serverColumnSchema: ServerColumnSchema, value: unknown, plural: boolean, isComparison: boolean): SQLQuery;
19
22
  export declare const sql: baseSql.SQL;
20
23
  //# sourceMappingURL=sql.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../../../../z2s/src/sql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAwB,MAAM,gBAAgB,CAAC;AACpE,OAAO,OAAsB,MAAM,gBAAgB,CAAC;AAKpD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,0CAA0C,CAAC;AAExE,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,uCAAuC,CAAC;AAE7E,wBAAgB,QAAQ,CAAC,GAAG,EAAE,QAAQ;UAmM9B,MAAM;YACJ,OAAO,EAAE;EAjMlB;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,QAAQ;UA8L7C,MAAM;YACJ,OAAO,EAAE;EA5LlB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ;UAyLlC,MAAM;YACJ,OAAO,EAAE;EAvLlB;AAaD,wBAAgB,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,OAAO,GAAG,KAAK,EAC1E,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,IAAI,SAAS,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAGrE,MAAM,CAAC,EAAE,CAAC,GACT,QAAQ,CAEV;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,OAAO,GACf,QAAQ,CAEV;AAkJD,eAAO,MAAM,GAAG,aAAkB,CAAC"}
1
+ {"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../../../../z2s/src/sql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAwB,MAAM,gBAAgB,CAAC;AACpE,OAAO,OAAsB,MAAM,gBAAgB,CAAC;AAMpD,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,aAAa,CAAC;AAGpD,eAAO,MAAM,aAAa,cAAc,CAAC;AAEzC,wBAAgB,QAAQ,CAAC,GAAG,EAAE,QAAQ;UAsQ9B,MAAM;YACJ,OAAO,EAAE;EApQlB;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,QAAQ;UAiQ7C,MAAM;YACJ,OAAO,EAAE;EA/PlB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ;UA4PlC,MAAM;YACJ,OAAO,EAAE;EA1PlB;AAGD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AACnE,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAsB7D,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,GACtC,QAAQ,CAQV;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,iBAAiB,EACvB,KAAK,EAAE,iBAAiB,EAAE,GACzB,QAAQ,CAQV;AAED,wBAAgB,mBAAmB,CACjC,kBAAkB,EAAE,kBAAkB,EACtC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,OAAO,EACf,YAAY,EAAE,OAAO,GACpB,QAAQ,CASV;AAiLD,eAAO,MAAM,GAAG,aAAkB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import baseSql, { SQLItemType } from '@databases/sql';
2
2
  import { escapePostgresIdentifier, escapeSQLiteIdentifier, } from '@databases/escape-identifier';
3
3
  import { assert, unreachable } from "../../shared/src/asserts.js";
4
+ export const Z2S_COLLATION = 'ucs_basic';
4
5
  export function formatPg(sql) {
5
6
  const format = new ReusingFormat(escapePostgresIdentifier);
6
7
  return sql.format((items) => formatFn(items, format));
@@ -17,14 +18,33 @@ const sqlConvert = Symbol('fromJson');
17
18
  function isSqlConvert(value) {
18
19
  return value !== null && typeof value === 'object' && sqlConvert in value;
19
20
  }
20
- export function sqlConvertArg(type, value,
21
- // plural is an explicit argument so we do not get confused by a singular JSON array vs
22
- // an array of JSON.
23
- plural) {
24
- return sql.value({ [sqlConvert]: true, type, value, plural });
21
+ export function sqlConvertSingularLiteralArg(value) {
22
+ const arg = {
23
+ [sqlConvert]: 'literal',
24
+ type: value === null ? 'null' : typeof value,
25
+ value,
26
+ plural: false,
27
+ };
28
+ return sql.value(arg);
29
+ }
30
+ export function sqlConvertPluralLiteralArg(type, value) {
31
+ const arg = {
32
+ [sqlConvert]: 'literal',
33
+ type,
34
+ value,
35
+ plural: true,
36
+ };
37
+ return sql.value(arg);
25
38
  }
26
- export function sqlConvertArgUnsafe(type, value, plural) {
27
- return sqlConvertArg(type, value, plural);
39
+ export function sqlConvertColumnArg(serverColumnSchema, value, plural, isComparison) {
40
+ return sql.value({
41
+ [sqlConvert]: 'column',
42
+ type: serverColumnSchema.type,
43
+ isEnum: serverColumnSchema.isEnum,
44
+ value,
45
+ plural,
46
+ isComparison,
47
+ });
28
48
  }
29
49
  class ReusingFormat {
30
50
  #seen = new Map();
@@ -44,25 +64,26 @@ class ReusingFormat {
44
64
  };
45
65
  }
46
66
  function stringify(arg) {
67
+ if (arg.value === null) {
68
+ return null;
69
+ }
47
70
  if (arg.plural) {
48
71
  return JSON.stringify(arg.value);
49
72
  }
50
- switch (arg.type) {
51
- case 'json':
52
- return JSON.stringify(arg.value);
53
- case 'boolean':
54
- return arg.value ? 'true' : 'false';
55
- case 'number':
56
- case 'date':
57
- case 'timestamp':
58
- return arg.value.toString();
59
- case 'string':
60
- return arg.value;
61
- case 'null':
62
- return 'null';
63
- default:
64
- unreachable(arg.type);
73
+ if (arg[sqlConvert] === 'literal' && arg.type === 'string') {
74
+ return arg.value;
65
75
  }
76
+ if (arg[sqlConvert] === 'column' &&
77
+ (arg.isEnum ||
78
+ arg.type === 'uuid' ||
79
+ arg.type === 'bpchar' ||
80
+ arg.type === 'character' ||
81
+ arg.type === 'text' ||
82
+ arg.type === 'character varying' ||
83
+ arg.type === 'varchar')) {
84
+ return arg.value;
85
+ }
86
+ return JSON.stringify(arg.value);
66
87
  }
67
88
  class SQLConvertFormat {
68
89
  #seen = new Map();
@@ -85,74 +106,100 @@ class SQLConvertFormat {
85
106
  value: stringify(value),
86
107
  };
87
108
  };
88
- #createPlaceholder(index, value) {
109
+ #createPlaceholder(index, arg) {
89
110
  // Ok, so what is with all the `::text` casts
90
111
  // before the final cast?
91
112
  // This is to force the statement to describe its arguments
92
113
  // as being text. Without the text cast the args are described as
93
114
  // being bool/json/numeric/whatever and the bindings try to coerce
94
115
  // the inputs to those types.
95
- const sqlType = pgType(value.type);
96
- if (!value.plural) {
97
- switch (value.type) {
98
- case 'json':
99
- // We use JSONB since that can be used as a primary key type
100
- // whereas JSON cannot. So JSONB covers more cases.
101
- return `$${index}::text::${sqlType}`;
102
- case 'boolean':
103
- return `$${index}::text::${sqlType}`;
104
- case 'number':
105
- return `$${index}::text::${sqlType}`;
106
- case 'string':
107
- return `$${index}::text`;
116
+ if (arg.type === 'null') {
117
+ assert(arg.value === null, "Args of type 'null' must have value null");
118
+ assert(!arg.plural, "Args of type 'null' must not be plural");
119
+ return `$${index}`;
120
+ }
121
+ if (arg[sqlConvert] === 'literal') {
122
+ const collate = arg.type === 'string' ? ` COLLATE "${Z2S_COLLATION}"` : '';
123
+ const { value } = arg;
124
+ if (Array.isArray(value)) {
125
+ const elType = pgTypeForLiteralType(arg.type);
126
+ return formatPlural(index, `value::${elType}${collate}`);
127
+ }
128
+ return `$${index}::text::${pgTypeForLiteralType(arg.type)}${collate}`;
129
+ }
130
+ const collate = arg.isComparison ? ` COLLATE "${Z2S_COLLATION}"` : '';
131
+ if (!arg.plural) {
132
+ if (arg.isEnum) {
133
+ if (arg.isComparison) {
134
+ return `$${index}::text ${collate}`;
135
+ }
136
+ return `$${index}::text::${arg.type}`;
137
+ }
138
+ switch (arg.type) {
108
139
  case 'date':
109
140
  case 'timestamp':
110
- return `to_timestamp($${index}::text::${sqlType} / 1000.0) AT TIME ZONE 'UTC'`;
111
- case 'null':
112
- return 'NULL';
141
+ case 'timestamptz':
142
+ case 'timestamp with time zone':
143
+ case 'timestamp without time zone':
144
+ return `to_timestamp($${index}::text::bigint / 1000.0) AT TIME ZONE 'UTC'`;
145
+ case 'text':
146
+ return `$${index}::text${collate}`;
147
+ case 'bpchar':
148
+ case 'character':
149
+ case 'character varying':
150
+ case 'varchar':
151
+ return `$${index}::text::${arg.type}${collate}`;
152
+ // uuid doesn't support collation, so we compare as text
153
+ case 'uuid':
154
+ return arg.isComparison
155
+ ? `$${index}::text ${collate}`
156
+ : `$${index}::text::uuid`;
113
157
  default:
114
- unreachable(value.type);
158
+ return `$${index}::text::${arg.type}`;
115
159
  }
116
160
  }
117
- switch (value.type) {
118
- case 'json':
119
- case 'boolean':
120
- case 'number':
121
- return `ARRAY(
122
- SELECT value::${sqlType} FROM jsonb_array_elements_text($${index}::text::jsonb)
123
- )`;
124
- case 'string':
125
- return `ARRAY(
126
- SELECT value FROM jsonb_array_elements_text($${index}::text::jsonb)
127
- )`;
161
+ if (arg.isEnum && arg.isComparison) {
162
+ if (arg.isComparison) {
163
+ return formatPlural(index, `value::text${collate}`);
164
+ }
165
+ return formatPlural(index, `value::${arg.type}`);
166
+ }
167
+ switch (arg.type) {
128
168
  case 'date':
129
169
  case 'timestamp':
130
- return `ARRAY(
131
- SELECT to_timestamp(value::bigint / 1000.0)
132
- FROM jsonb_array_elements_text($${index}::text::jsonb)
133
- )::timestamp[]`;
134
- case 'null':
135
- throw new Error('unsupported null');
170
+ case 'timestamptz':
171
+ case 'timestamp with time zone':
172
+ case 'timestamp without time zone':
173
+ return formatPlural(index, `to_timestamp(value::bigint / 1000.0)`);
174
+ case 'bpchar':
175
+ case 'character':
176
+ case 'character varying':
177
+ case 'text':
178
+ case 'varchar':
179
+ return formatPlural(index, `value::${arg.type}${collate}`);
180
+ // uuid doesn't support collation, so we compare as text
181
+ case 'uuid':
182
+ return arg.isComparison
183
+ ? formatPlural(index, `value::text${collate}`)
184
+ : formatPlural(index, `value::${arg.type}`);
136
185
  default:
137
- unreachable(value.type);
186
+ return formatPlural(index, `value::${arg.type}`);
138
187
  }
139
188
  }
140
189
  }
141
- function pgType(type) {
190
+ function formatPlural(index, select) {
191
+ return `ARRAY(
192
+ SELECT ${select} FROM jsonb_array_elements_text($${index}::text::jsonb)
193
+ )`;
194
+ }
195
+ function pgTypeForLiteralType(type) {
142
196
  switch (type) {
143
- case 'json':
144
- return 'jsonb';
145
197
  case 'boolean':
146
198
  return 'boolean';
147
199
  case 'number':
148
200
  return 'numeric';
149
201
  case 'string':
150
202
  return 'text';
151
- case 'date':
152
- case 'timestamp':
153
- return 'bigint';
154
- case 'null':
155
- return 'null';
156
203
  default:
157
204
  unreachable(type);
158
205
  }