@antelopejs/postgres 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.
Files changed (280) hide show
  1. package/README.md +28 -15
  2. package/dist/config.d.ts +1 -0
  3. package/dist/config.js +7 -3
  4. package/dist/config.js.map +1 -1
  5. package/dist/connect-failure.d.ts +1 -0
  6. package/dist/connect-failure.js +39 -0
  7. package/dist/connect-failure.js.map +1 -0
  8. package/dist/connection.d.ts +2 -1
  9. package/dist/connection.js +19 -2
  10. package/dist/connection.js.map +1 -1
  11. package/dist/implementations/catalog/index.js +3 -6
  12. package/dist/implementations/catalog/index.js.map +1 -1
  13. package/dist/implementations/database/coerce.js +20 -20
  14. package/dist/implementations/database/coerce.js.map +1 -1
  15. package/dist/implementations/database/context.d.ts +1 -0
  16. package/dist/implementations/database/context.js +4 -0
  17. package/dist/implementations/database/context.js.map +1 -1
  18. package/dist/implementations/database/convergence.d.ts +22 -0
  19. package/dist/implementations/database/convergence.js +183 -0
  20. package/dist/implementations/database/convergence.js.map +1 -0
  21. package/dist/implementations/database/cursors.js +3 -0
  22. package/dist/implementations/database/cursors.js.map +1 -1
  23. package/dist/implementations/database/ddl.d.ts +5 -26
  24. package/dist/implementations/database/ddl.js +15 -191
  25. package/dist/implementations/database/ddl.js.map +1 -1
  26. package/dist/implementations/database/external-column-profile.js +6 -1
  27. package/dist/implementations/database/external-column-profile.js.map +1 -1
  28. package/dist/implementations/database/external-discovery.js +5 -5
  29. package/dist/implementations/database/external-discovery.js.map +1 -1
  30. package/dist/implementations/database/external-measures.js.map +1 -1
  31. package/dist/implementations/database/external-payload.d.ts +2 -2
  32. package/dist/implementations/database/external-payload.js +23 -13
  33. package/dist/implementations/database/external-payload.js.map +1 -1
  34. package/dist/implementations/database/external-schema.d.ts +2 -2
  35. package/dist/implementations/database/external-schema.js +3 -3
  36. package/dist/implementations/database/external-schema.js.map +1 -1
  37. package/dist/implementations/database/external-types.js +23 -16
  38. package/dist/implementations/database/external-types.js.map +1 -1
  39. package/dist/implementations/database/external-writes.d.ts +7 -1
  40. package/dist/implementations/database/external-writes.js +22 -21
  41. package/dist/implementations/database/external-writes.js.map +1 -1
  42. package/dist/implementations/database/feed-pipeline.js +3 -2
  43. package/dist/implementations/database/feed-pipeline.js.map +1 -1
  44. package/dist/implementations/database/feeds.d.ts +1 -1
  45. package/dist/implementations/database/feeds.js +36 -45
  46. package/dist/implementations/database/feeds.js.map +1 -1
  47. package/dist/implementations/database/fields.d.ts +9 -13
  48. package/dist/implementations/database/fields.js +25 -21
  49. package/dist/implementations/database/fields.js.map +1 -1
  50. package/dist/implementations/database/guards.d.ts +5 -0
  51. package/dist/implementations/database/guards.js +23 -0
  52. package/dist/implementations/database/guards.js.map +1 -0
  53. package/dist/implementations/database/introspect.d.ts +1 -1
  54. package/dist/implementations/database/listener.js +9 -3
  55. package/dist/implementations/database/listener.js.map +1 -1
  56. package/dist/implementations/database/migrate.d.ts +2 -2
  57. package/dist/implementations/database/migrate.js +10 -10
  58. package/dist/implementations/database/migrate.js.map +1 -1
  59. package/dist/implementations/database/payload.d.ts +3 -3
  60. package/dist/implementations/database/payload.js +4 -4
  61. package/dist/implementations/database/pipeline.d.ts +6 -2
  62. package/dist/implementations/database/pipeline.js +4 -1
  63. package/dist/implementations/database/pipeline.js.map +1 -1
  64. package/dist/implementations/database/query.js +12 -7
  65. package/dist/implementations/database/query.js.map +1 -1
  66. package/dist/implementations/database/reaper.js +6 -4
  67. package/dist/implementations/database/reaper.js.map +1 -1
  68. package/dist/implementations/database/relation.d.ts +2 -12
  69. package/dist/implementations/database/relation.js +5 -141
  70. package/dist/implementations/database/relation.js.map +1 -1
  71. package/dist/implementations/database/render.d.ts +11 -0
  72. package/dist/implementations/database/render.js +147 -0
  73. package/dist/implementations/database/render.js.map +1 -0
  74. package/dist/implementations/database/result.d.ts +2 -2
  75. package/dist/implementations/database/result.js +18 -19
  76. package/dist/implementations/database/result.js.map +1 -1
  77. package/dist/implementations/database/row-source.d.ts +10 -10
  78. package/dist/implementations/database/row-source.js +22 -19
  79. package/dist/implementations/database/row-source.js.map +1 -1
  80. package/dist/implementations/database/schema.d.ts +2 -2
  81. package/dist/implementations/database/schema.js +19 -19
  82. package/dist/implementations/database/schema.js.map +1 -1
  83. package/dist/implementations/database/selection.js +13 -7
  84. package/dist/implementations/database/selection.js.map +1 -1
  85. package/dist/implementations/database/sql.d.ts +7 -3
  86. package/dist/implementations/database/sql.js.map +1 -1
  87. package/dist/implementations/database/stage.js +3 -2
  88. package/dist/implementations/database/stage.js.map +1 -1
  89. package/dist/implementations/database/stages-aggregate.js +7 -5
  90. package/dist/implementations/database/stages-aggregate.js.map +1 -1
  91. package/dist/implementations/database/stages-array.js.map +1 -1
  92. package/dist/implementations/database/stages-core.js +2 -1
  93. package/dist/implementations/database/stages-core.js.map +1 -1
  94. package/dist/implementations/database/stages-date.js +2 -1
  95. package/dist/implementations/database/stages-date.js.map +1 -1
  96. package/dist/implementations/database/stages-group.js +11 -6
  97. package/dist/implementations/database/stages-group.js.map +1 -1
  98. package/dist/implementations/database/stages-join.js +13 -11
  99. package/dist/implementations/database/stages-join.js.map +1 -1
  100. package/dist/implementations/database/stages-numeric.js.map +1 -1
  101. package/dist/implementations/database/stages-object.js +1 -1
  102. package/dist/implementations/database/stages-object.js.map +1 -1
  103. package/dist/implementations/database/stages-projection.js +9 -8
  104. package/dist/implementations/database/stages-projection.js.map +1 -1
  105. package/dist/implementations/database/stages-rows.js +10 -8
  106. package/dist/implementations/database/stages-rows.js.map +1 -1
  107. package/dist/implementations/database/stages-selection.js +6 -4
  108. package/dist/implementations/database/stages-selection.js.map +1 -1
  109. package/dist/implementations/database/stages-string.js +7 -6
  110. package/dist/implementations/database/stages-string.js.map +1 -1
  111. package/dist/implementations/database/subquery.d.ts +1 -1
  112. package/dist/implementations/database/subquery.js +7 -5
  113. package/dist/implementations/database/subquery.js.map +1 -1
  114. package/dist/implementations/database/types.d.ts +5 -5
  115. package/dist/implementations/database/types.js +11 -11
  116. package/dist/implementations/database/types.js.map +1 -1
  117. package/dist/implementations/database/utils.js +2 -1
  118. package/dist/implementations/database/utils.js.map +1 -1
  119. package/dist/implementations/database/value.d.ts +1 -1
  120. package/dist/implementations/database/value.js +34 -33
  121. package/dist/implementations/database/value.js.map +1 -1
  122. package/dist/implementations/database/writes-atomic.js +6 -5
  123. package/dist/implementations/database/writes-atomic.js.map +1 -1
  124. package/dist/implementations/database/writes-identity.js +18 -19
  125. package/dist/implementations/database/writes-identity.js.map +1 -1
  126. package/dist/implementations/database/writes-insert.js +16 -22
  127. package/dist/implementations/database/writes-insert.js.map +1 -1
  128. package/dist/implementations/database/writes-shared.d.ts +1 -1
  129. package/dist/implementations/database/writes-shared.js +11 -7
  130. package/dist/implementations/database/writes-shared.js.map +1 -1
  131. package/dist/implementations/database/writes.d.ts +22 -1
  132. package/dist/implementations/database/writes.js +6 -3
  133. package/dist/implementations/database/writes.js.map +1 -1
  134. package/dist/test/catalog-owned.test.js +2 -0
  135. package/dist/test/catalog-owned.test.js.map +1 -1
  136. package/dist/test/contention.test.js.map +1 -1
  137. package/dist/test/duplicate-key.test.js +13 -10
  138. package/dist/test/duplicate-key.test.js.map +1 -1
  139. package/dist/test/indexes.test.js +7 -7
  140. package/dist/test/indexes.test.js.map +1 -1
  141. package/dist/test/unit/coerce.spec.js +7 -7
  142. package/dist/test/unit/coerce.spec.js.map +1 -1
  143. package/dist/test/unit/config.spec.js +3 -1
  144. package/dist/test/unit/config.spec.js.map +1 -1
  145. package/dist/test/unit/connect-failure.spec.d.ts +1 -0
  146. package/dist/test/unit/connect-failure.spec.js +50 -0
  147. package/dist/test/unit/connect-failure.spec.js.map +1 -0
  148. package/dist/test/unit/connection.spec.js +16 -18
  149. package/dist/test/unit/connection.spec.js.map +1 -1
  150. package/dist/test/unit/convergence.spec.d.ts +1 -0
  151. package/dist/test/unit/convergence.spec.js +347 -0
  152. package/dist/test/unit/convergence.spec.js.map +1 -0
  153. package/dist/test/unit/cursors-fixture.d.ts +79 -0
  154. package/dist/test/unit/cursors-fixture.js +245 -0
  155. package/dist/test/unit/cursors-fixture.js.map +1 -0
  156. package/dist/test/unit/cursors.spec.js +138 -718
  157. package/dist/test/unit/cursors.spec.js.map +1 -1
  158. package/dist/test/unit/cursors.teardown.spec.d.ts +1 -0
  159. package/dist/test/unit/cursors.teardown.spec.js +322 -0
  160. package/dist/test/unit/cursors.teardown.spec.js.map +1 -0
  161. package/dist/test/unit/cursors.window.spec.d.ts +1 -0
  162. package/dist/test/unit/cursors.window.spec.js +78 -0
  163. package/dist/test/unit/cursors.window.spec.js.map +1 -0
  164. package/dist/test/unit/ddl-fixture.d.ts +5 -0
  165. package/dist/test/unit/ddl-fixture.js +19 -0
  166. package/dist/test/unit/ddl-fixture.js.map +1 -0
  167. package/dist/test/unit/ddl.spec.js +39 -380
  168. package/dist/test/unit/ddl.spec.js.map +1 -1
  169. package/dist/test/unit/expression-array-fixture.d.ts +17 -0
  170. package/dist/test/unit/expression-array-fixture.js +63 -0
  171. package/dist/test/unit/expression-array-fixture.js.map +1 -0
  172. package/dist/test/unit/expression-array-walk.spec.d.ts +1 -0
  173. package/dist/test/unit/expression-array-walk.spec.js +235 -0
  174. package/dist/test/unit/expression-array-walk.spec.js.map +1 -0
  175. package/dist/test/unit/expression-array.spec.js +48 -322
  176. package/dist/test/unit/expression-array.spec.js.map +1 -1
  177. package/dist/test/unit/expression-date.spec.js +4 -3
  178. package/dist/test/unit/expression-date.spec.js.map +1 -1
  179. package/dist/test/unit/expression-fixture.d.ts +15 -0
  180. package/dist/test/unit/expression-fixture.js +40 -0
  181. package/dist/test/unit/expression-fixture.js.map +1 -0
  182. package/dist/test/unit/expression-numeric.spec.js +10 -8
  183. package/dist/test/unit/expression-numeric.spec.js.map +1 -1
  184. package/dist/test/unit/expression-object.spec.js +3 -4
  185. package/dist/test/unit/expression-object.spec.js.map +1 -1
  186. package/dist/test/unit/expression-predicate.spec.d.ts +1 -0
  187. package/dist/test/unit/expression-predicate.spec.js +231 -0
  188. package/dist/test/unit/expression-predicate.spec.js.map +1 -0
  189. package/dist/test/unit/expression-stages.spec.js +0 -5
  190. package/dist/test/unit/expression-stages.spec.js.map +1 -1
  191. package/dist/test/unit/expression-string.spec.js +2 -5
  192. package/dist/test/unit/expression-string.spec.js.map +1 -1
  193. package/dist/test/unit/expression.spec.js +44 -292
  194. package/dist/test/unit/expression.spec.js.map +1 -1
  195. package/dist/test/unit/external-comparisons.spec.js +5 -5
  196. package/dist/test/unit/external-comparisons.spec.js.map +1 -1
  197. package/dist/test/unit/external-types.spec.js +2 -3
  198. package/dist/test/unit/external-types.spec.js.map +1 -1
  199. package/dist/test/unit/feeds.spec.js +40 -23
  200. package/dist/test/unit/feeds.spec.js.map +1 -1
  201. package/dist/test/unit/fields.spec.js +15 -9
  202. package/dist/test/unit/fields.spec.js.map +1 -1
  203. package/dist/test/unit/invalid-fixture.d.ts +3 -0
  204. package/dist/test/unit/invalid-fixture.js +11 -0
  205. package/dist/test/unit/invalid-fixture.js.map +1 -0
  206. package/dist/test/unit/payload.spec.js.map +1 -1
  207. package/dist/test/unit/pipeline-aggregate.spec.js +14 -14
  208. package/dist/test/unit/pipeline-aggregate.spec.js.map +1 -1
  209. package/dist/test/unit/pipeline-fixture.d.ts +25 -6
  210. package/dist/test/unit/pipeline-fixture.js +21 -11
  211. package/dist/test/unit/pipeline-fixture.js.map +1 -1
  212. package/dist/test/unit/pipeline-group-fixture.d.ts +2 -0
  213. package/dist/test/unit/pipeline-group-fixture.js +6 -0
  214. package/dist/test/unit/pipeline-group-fixture.js.map +1 -0
  215. package/dist/test/unit/pipeline-group.spec.js +15 -248
  216. package/dist/test/unit/pipeline-group.spec.js.map +1 -1
  217. package/dist/test/unit/pipeline-lookup.spec.js +13 -10
  218. package/dist/test/unit/pipeline-lookup.spec.js.map +1 -1
  219. package/dist/test/unit/pipeline-projection.spec.js +12 -13
  220. package/dist/test/unit/pipeline-projection.spec.js.map +1 -1
  221. package/dist/test/unit/pipeline-rows.spec.js +21 -18
  222. package/dist/test/unit/pipeline-rows.spec.js.map +1 -1
  223. package/dist/test/unit/pipeline-selection.spec.js +6 -4
  224. package/dist/test/unit/pipeline-selection.spec.js.map +1 -1
  225. package/dist/test/unit/pipeline-stages.spec.js +23 -35
  226. package/dist/test/unit/pipeline-stages.spec.js.map +1 -1
  227. package/dist/test/unit/pipeline-substream.spec.d.ts +1 -0
  228. package/dist/test/unit/pipeline-substream.spec.js +246 -0
  229. package/dist/test/unit/pipeline-substream.spec.js.map +1 -0
  230. package/dist/test/unit/pipeline.spec.js +1 -1
  231. package/dist/test/unit/query.spec.js +6 -2
  232. package/dist/test/unit/query.spec.js.map +1 -1
  233. package/dist/test/unit/reaper.spec.js +4 -3
  234. package/dist/test/unit/reaper.spec.js.map +1 -1
  235. package/dist/test/unit/relation.spec.js +37 -36
  236. package/dist/test/unit/relation.spec.js.map +1 -1
  237. package/dist/test/unit/result.spec.js +13 -11
  238. package/dist/test/unit/result.spec.js.map +1 -1
  239. package/dist/test/unit/row-source.spec.js +1 -1
  240. package/dist/test/unit/row-source.spec.js.map +1 -1
  241. package/dist/test/unit/schema.spec.js +5 -2
  242. package/dist/test/unit/schema.spec.js.map +1 -1
  243. package/dist/test/unit/selection.spec.js +7 -3
  244. package/dist/test/unit/selection.spec.js.map +1 -1
  245. package/dist/test/unit/types.spec.js +6 -6
  246. package/dist/test/unit/types.spec.js.map +1 -1
  247. package/dist/test/unit/writes-atomic.spec.js +2 -2
  248. package/dist/test/unit/writes-atomic.spec.js.map +1 -1
  249. package/dist/test/unit/writes-insert.spec.js +5 -4
  250. package/dist/test/unit/writes-insert.spec.js.map +1 -1
  251. package/dist/test/unit/writes-replace.spec.js +6 -6
  252. package/dist/test/unit/writes-replace.spec.js.map +1 -1
  253. package/dist/test/unit/writes-target.spec.js +3 -3
  254. package/dist/test/unit/writes-target.spec.js.map +1 -1
  255. package/dist/test/unit/writes-update-fixture.d.ts +9 -0
  256. package/dist/test/unit/writes-update-fixture.js +20 -0
  257. package/dist/test/unit/writes-update-fixture.js.map +1 -0
  258. package/dist/test/unit/writes-update-mapper.spec.d.ts +1 -0
  259. package/dist/test/unit/writes-update-mapper.spec.js +123 -0
  260. package/dist/test/unit/writes-update-mapper.spec.js.map +1 -0
  261. package/dist/test/unit/writes-update.spec.js +42 -171
  262. package/dist/test/unit/writes-update.spec.js.map +1 -1
  263. package/dist/test-external/catalog.test.js +11 -1
  264. package/dist/test-external/catalog.test.js.map +1 -1
  265. package/dist/test-external/native.test.js +8 -6
  266. package/dist/test-external/native.test.js.map +1 -1
  267. package/dist/test-external/reads.test.js +20 -22
  268. package/dist/test-external/reads.test.js.map +1 -1
  269. package/dist/test-external/refusals.test.js +45 -24
  270. package/dist/test-external/refusals.test.js.map +1 -1
  271. package/dist/test-external/registration.test.js +4 -2
  272. package/dist/test-external/registration.test.js.map +1 -1
  273. package/dist/test-external/sales.d.ts +9 -2
  274. package/dist/test-external/sales.js.map +1 -1
  275. package/dist/test-external/unreachable.test.d.ts +1 -0
  276. package/dist/test-external/unreachable.test.js +83 -0
  277. package/dist/test-external/unreachable.test.js.map +1 -0
  278. package/dist/test-external/writes.test.js +71 -37
  279. package/dist/test-external/writes.test.js.map +1 -1
  280. package/package.json +22 -7
@@ -3,26 +3,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.WHERE_BLOCKERS = exports.SINGLE_ROW = exports.OUTPUT_COLUMN = void 0;
6
+ exports.OUTPUT_COLUMN = void 0;
7
7
  exports.RequireOrigin = RequireOrigin;
8
8
  exports.IndexColumns = IndexColumns;
9
9
  exports.ScanColumns = ScanColumns;
10
- exports.AbsorbOrder = AbsorbOrder;
11
- exports.RowBound = RowBound;
12
- exports.Render = Render;
13
10
  exports.TableRelation = TableRelation;
14
11
  exports.LoggedRelation = LoggedRelation;
15
12
  exports.ValueRelation = ValueRelation;
16
- exports.Nested = Nested;
17
- exports.Prepare = Prepare;
18
13
  exports.SetProjection = SetProjection;
19
14
  exports.SetPlainProjection = SetPlainProjection;
20
- exports.HasFlag = HasFlag;
21
15
  exports.CurrentValue = CurrentValue;
22
16
  const node_assert_1 = __importDefault(require("node:assert"));
23
- const utils_1 = require("./utils");
24
17
  const sql_1 = require("./sql");
25
- const fields_1 = require("./fields");
26
18
  const row_source_1 = require("./row-source");
27
19
  exports.OUTPUT_COLUMN = "value";
28
20
  function NewRelation(seed) {
@@ -57,106 +49,11 @@ function ScanColumns(relation, name) {
57
49
  }
58
50
  return IndexColumns(relation, name);
59
51
  }
60
- function ExternalColumns(relation, shape) {
61
- return (0, row_source_1.ExternalNames)(shape).map((name) => `${relation.source.field(name).sql} AS ${(0, sql_1.QuoteIdentifier)(name)}`);
62
- }
63
- function RowColumns(relation) {
64
- const origin = RequireOrigin(relation);
65
- if (origin.shape.external) {
66
- return ExternalColumns(relation, origin.shape);
67
- }
68
- const declared = (0, fields_1.DeclaredColumns)(origin.shape);
69
- const columns = (0, fields_1.PhysicalOrder)(utils_1.ID_COLUMN, utils_1.INSTANCE_COLUMN, declared, utils_1.EXTRA_COLUMN);
70
- return columns.map((column) => (0, sql_1.QualifiedColumn)(relation.alias, column));
71
- }
72
- function SelectList(relation) {
73
- const projection = relation.projection;
74
- if (!projection) {
75
- return RowColumns(relation).join(", ");
76
- }
77
- return `${projection.sql} AS ${(0, sql_1.QuoteIdentifier)(exports.OUTPUT_COLUMN)}`;
78
- }
79
- function SelectClause(relation) {
80
- const modifier = relation.distinct ? "DISTINCT " : "";
81
- return `SELECT ${modifier}${SelectList(relation)}`;
82
- }
83
- function FromItem(from, alias) {
84
- return `${from} AS ${(0, sql_1.QuoteIdentifier)(alias)}`;
85
- }
86
- function FromClause(relation) {
87
- return `FROM ${FromItem(relation.from, relation.alias)}`;
88
- }
89
- function RenderJoin(join) {
90
- return `${join.kind} ${FromItem(join.from, join.alias)} ON ${join.on}`;
91
- }
92
- function JoinClauses(relation) {
93
- if (relation.joins.length === 0) {
94
- return undefined;
95
- }
96
- return relation.joins.map(RenderJoin).join(" ");
97
- }
98
- function WhereClause(relation) {
99
- if (relation.where.length === 0) {
100
- return undefined;
101
- }
102
- return `WHERE ${relation.where.join(" AND ")}`;
103
- }
104
- function GroupByClause(relation) {
105
- if (relation.groupBy.length === 0) {
106
- return undefined;
107
- }
108
- return `GROUP BY ${relation.groupBy.map((term) => term.sql).join(", ")}`;
109
- }
110
- function OrderTerms(relation) {
111
- if (relation.orderBy.length === 0) {
112
- return undefined;
113
- }
114
- const terms = relation.orderBy.map((term) => `${term.sql} ${term.descending ? "DESC" : "ASC"}`);
115
- return terms.join(", ");
116
- }
117
- function OrderByClause(relation) {
118
- const terms = OrderTerms(relation);
119
- return terms === undefined ? undefined : `ORDER BY ${terms}`;
120
- }
121
- const BOUND_PARAMETER = /\$\d/;
122
- function AbsorbOrder(relation) {
123
- const terms = OrderTerms(relation);
124
- (0, node_assert_1.default)(terms === undefined || !BOUND_PARAMETER.test(terms), "An order term must carry no bound parameter, since absorbing an aggregate discards it");
125
- relation.orderBy = [];
126
- return terms;
127
- }
128
- const ONE_ROW = "1";
129
- function RowBound(sql) {
130
- return `((${sql})::bigint)`;
131
- }
132
- exports.SINGLE_ROW = RowBound(ONE_ROW);
133
- function LimitClause(relation) {
134
- return relation.limit === undefined ? undefined : `LIMIT ${relation.limit}`;
135
- }
136
- function OffsetClause(relation) {
137
- return relation.offset === undefined
138
- ? undefined
139
- : `OFFSET ${relation.offset}`;
140
- }
141
- const CLAUSES = [
142
- SelectClause,
143
- FromClause,
144
- JoinClauses,
145
- WhereClause,
146
- GroupByClause,
147
- OrderByClause,
148
- LimitClause,
149
- OffsetClause,
150
- ];
151
- function Render(relation) {
152
- const clauses = CLAUSES.map((build) => build(relation));
153
- return clauses.filter((clause) => clause !== undefined).join(" ");
154
- }
155
52
  function TableSource(alias, origin, reads) {
156
- if (origin.shape.external) {
157
- return new row_source_1.ExternalRowSource(alias, origin.shape, reads);
53
+ if (origin.model.external) {
54
+ return new row_source_1.ExternalRowSource(alias, origin.model, reads);
158
55
  }
159
- return new row_source_1.ColumnRowSource((0, row_source_1.AliasedColumns)(alias), origin.shape);
56
+ return new row_source_1.ColumnRowSource((0, row_source_1.AliasedColumns)(alias), origin.model);
160
57
  }
161
58
  function TableRelation(from, alias, origin, reads = "table") {
162
59
  return NewRelation({
@@ -170,7 +67,7 @@ function LoggedRelation(from, alias, row, origin) {
170
67
  return NewRelation({
171
68
  from,
172
69
  alias,
173
- source: new row_source_1.ColumnRowSource((0, row_source_1.LoggedColumns)(row), origin.shape),
70
+ source: new row_source_1.ColumnRowSource((0, row_source_1.LoggedColumns)(row), origin.model),
174
71
  origin,
175
72
  });
176
73
  }
@@ -186,36 +83,6 @@ function ValueRelation(from, alias, type) {
186
83
  projection,
187
84
  });
188
85
  }
189
- function Nested(relation, context) {
190
- const from = `(${Render(relation)})`;
191
- const alias = context.nextAlias();
192
- const projection = relation.projection;
193
- const wrapped = projection
194
- ? ValueRelation(from, alias, projection.type)
195
- : TableRelation(from, alias, RequireOrigin(relation), "output");
196
- wrapped.single = relation.single;
197
- wrapped.absent = relation.absent;
198
- return wrapped;
199
- }
200
- exports.WHERE_BLOCKERS = [
201
- "projection",
202
- "limit",
203
- "offset",
204
- "distinct",
205
- "aggregated",
206
- ];
207
- const FLAG_PREDICATES = {
208
- projection: (relation) => relation.projection !== undefined,
209
- limit: (relation) => relation.limit !== undefined,
210
- offset: (relation) => relation.offset !== undefined,
211
- distinct: (relation) => relation.distinct,
212
- ordered: (relation) => relation.orderBy.length > 0,
213
- aggregated: (relation) => relation.aggregated,
214
- };
215
- function Prepare(relation, blockedBy, context) {
216
- const blocked = blockedBy.some((flag) => FLAG_PREDICATES[flag](relation));
217
- return blocked ? Nested(relation, context) : relation;
218
- }
219
86
  function SetProjection(relation, value) {
220
87
  relation.projection = value;
221
88
  relation.source = new row_source_1.JsonRowSource(value);
@@ -228,9 +95,6 @@ function SetPlainProjection(relation, value, source) {
228
95
  projected.projectedFrom = source;
229
96
  return projected;
230
97
  }
231
- function HasFlag(relation, flags) {
232
- return flags.some((flag) => FLAG_PREDICATES[flag](relation));
233
- }
234
98
  function CurrentValue(relation) {
235
99
  return relation.projection ?? relation.source.toJson();
236
100
  }
@@ -1 +1 @@
1
- {"version":3,"file":"relation.js","sourceRoot":"","sources":["../../../src/implementations/database/relation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relation.js","sourceRoot":"","sources":["../../../src/implementations/database/relation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { DecodingContext } from "./context";
2
+ import { type Relation } from "./relation";
3
+ export declare function AbsorbOrder(relation: Relation): string | undefined;
4
+ export declare function RowBound(sql: string): string;
5
+ export declare const SINGLE_ROW: string;
6
+ export declare function Render(relation: Relation): string;
7
+ export declare function Nested(relation: Relation, context: DecodingContext): Relation;
8
+ export type RelationFlag = "projection" | "limit" | "offset" | "distinct" | "ordered" | "aggregated";
9
+ export declare const WHERE_BLOCKERS: readonly RelationFlag[];
10
+ export declare function Prepare(relation: Relation, blockedBy: readonly RelationFlag[], context: DecodingContext): Relation;
11
+ export declare function HasFlag(relation: Relation, flags: readonly RelationFlag[]): boolean;
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.WHERE_BLOCKERS = exports.SINGLE_ROW = void 0;
7
+ exports.AbsorbOrder = AbsorbOrder;
8
+ exports.RowBound = RowBound;
9
+ exports.Render = Render;
10
+ exports.Nested = Nested;
11
+ exports.Prepare = Prepare;
12
+ exports.HasFlag = HasFlag;
13
+ const node_assert_1 = __importDefault(require("node:assert"));
14
+ const utils_1 = require("./utils");
15
+ const sql_1 = require("./sql");
16
+ const fields_1 = require("./fields");
17
+ const row_source_1 = require("./row-source");
18
+ const relation_1 = require("./relation");
19
+ function ExternalColumns(relation, model) {
20
+ return (0, row_source_1.ExternalNames)(model).map((name) => `${relation.source.field(name).sql} AS ${(0, sql_1.QuoteIdentifier)(name)}`);
21
+ }
22
+ function RowColumns(relation) {
23
+ const origin = (0, relation_1.RequireOrigin)(relation);
24
+ if (origin.model.external) {
25
+ return ExternalColumns(relation, origin.model);
26
+ }
27
+ const declared = (0, fields_1.DeclaredColumns)(origin.model);
28
+ const columns = (0, fields_1.PhysicalOrder)(utils_1.ID_COLUMN, utils_1.INSTANCE_COLUMN, declared, utils_1.EXTRA_COLUMN);
29
+ return columns.map((column) => (0, sql_1.QualifiedColumn)(relation.alias, column));
30
+ }
31
+ function SelectList(relation) {
32
+ const projection = relation.projection;
33
+ if (!projection) {
34
+ return RowColumns(relation).join(", ");
35
+ }
36
+ return `${projection.sql} AS ${(0, sql_1.QuoteIdentifier)(relation_1.OUTPUT_COLUMN)}`;
37
+ }
38
+ function SelectClause(relation) {
39
+ const modifier = relation.distinct ? "DISTINCT " : "";
40
+ return `SELECT ${modifier}${SelectList(relation)}`;
41
+ }
42
+ function FromItem(from, alias) {
43
+ return `${from} AS ${(0, sql_1.QuoteIdentifier)(alias)}`;
44
+ }
45
+ function FromClause(relation) {
46
+ return `FROM ${FromItem(relation.from, relation.alias)}`;
47
+ }
48
+ function RenderJoin(join) {
49
+ return `${join.kind} ${FromItem(join.from, join.alias)} ON ${join.on}`;
50
+ }
51
+ function JoinClauses(relation) {
52
+ if (relation.joins.length === 0) {
53
+ return undefined;
54
+ }
55
+ return relation.joins.map(RenderJoin).join(" ");
56
+ }
57
+ function WhereClause(relation) {
58
+ if (relation.where.length === 0) {
59
+ return undefined;
60
+ }
61
+ return `WHERE ${relation.where.join(" AND ")}`;
62
+ }
63
+ function GroupByClause(relation) {
64
+ if (relation.groupBy.length === 0) {
65
+ return undefined;
66
+ }
67
+ return `GROUP BY ${relation.groupBy.map((term) => term.sql).join(", ")}`;
68
+ }
69
+ function OrderTerms(relation) {
70
+ if (relation.orderBy.length === 0) {
71
+ return undefined;
72
+ }
73
+ const terms = relation.orderBy.map((term) => `${term.sql} ${term.descending ? "DESC" : "ASC"}`);
74
+ return terms.join(", ");
75
+ }
76
+ function OrderByClause(relation) {
77
+ const terms = OrderTerms(relation);
78
+ return terms === undefined ? undefined : `ORDER BY ${terms}`;
79
+ }
80
+ const BOUND_PARAMETER = /\$\d/;
81
+ function AbsorbOrder(relation) {
82
+ const terms = OrderTerms(relation);
83
+ (0, node_assert_1.default)(terms === undefined || !BOUND_PARAMETER.test(terms), "An order term must carry no bound parameter, since absorbing an aggregate discards it");
84
+ relation.orderBy = [];
85
+ return terms;
86
+ }
87
+ const ONE_ROW = "1";
88
+ function RowBound(sql) {
89
+ return `((${sql})::bigint)`;
90
+ }
91
+ exports.SINGLE_ROW = RowBound(ONE_ROW);
92
+ function LimitClause(relation) {
93
+ return relation.limit === undefined ? undefined : `LIMIT ${relation.limit}`;
94
+ }
95
+ function OffsetClause(relation) {
96
+ return relation.offset === undefined
97
+ ? undefined
98
+ : `OFFSET ${relation.offset}`;
99
+ }
100
+ const CLAUSES = [
101
+ SelectClause,
102
+ FromClause,
103
+ JoinClauses,
104
+ WhereClause,
105
+ GroupByClause,
106
+ OrderByClause,
107
+ LimitClause,
108
+ OffsetClause,
109
+ ];
110
+ function Render(relation) {
111
+ const clauses = CLAUSES.map((build) => build(relation));
112
+ return clauses.filter((clause) => clause !== undefined).join(" ");
113
+ }
114
+ function Nested(relation, context) {
115
+ const from = `(${Render(relation)})`;
116
+ const alias = context.nextAlias();
117
+ const projection = relation.projection;
118
+ const wrapped = projection
119
+ ? (0, relation_1.ValueRelation)(from, alias, projection.type)
120
+ : (0, relation_1.TableRelation)(from, alias, (0, relation_1.RequireOrigin)(relation), "output");
121
+ wrapped.single = relation.single;
122
+ wrapped.absent = relation.absent;
123
+ return wrapped;
124
+ }
125
+ exports.WHERE_BLOCKERS = [
126
+ "projection",
127
+ "limit",
128
+ "offset",
129
+ "distinct",
130
+ "aggregated",
131
+ ];
132
+ const FLAG_PREDICATES = {
133
+ projection: (relation) => relation.projection !== undefined,
134
+ limit: (relation) => relation.limit !== undefined,
135
+ offset: (relation) => relation.offset !== undefined,
136
+ distinct: (relation) => relation.distinct,
137
+ ordered: (relation) => relation.orderBy.length > 0,
138
+ aggregated: (relation) => relation.aggregated,
139
+ };
140
+ function Prepare(relation, blockedBy, context) {
141
+ const blocked = blockedBy.some((flag) => FLAG_PREDICATES[flag](relation));
142
+ return blocked ? Nested(relation, context) : relation;
143
+ }
144
+ function HasFlag(relation, flags) {
145
+ return flags.some((flag) => FLAG_PREDICATES[flag](relation));
146
+ }
147
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/implementations/database/render.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { TableShape } from "./fields";
1
+ import type { TableModel } from "./fields";
2
2
  import type { SqlType } from "./types";
3
3
  export declare function ReviveValue(value: unknown, type: SqlType): unknown;
4
- export declare function DecodeRow(row: Record<string, unknown>, table: TableShape): Record<string, unknown>;
4
+ export declare function DecodeRow(row: Record<string, unknown>, table: TableModel): Record<string, unknown>;
@@ -3,38 +3,37 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ReviveValue = ReviveValue;
4
4
  exports.DecodeRow = DecodeRow;
5
5
  const utils_1 = require("./utils");
6
+ const guards_1 = require("./guards");
6
7
  function ReviveTimestamp(value) {
7
8
  if (value instanceof Date) {
8
9
  return value;
9
10
  }
10
- const date = typeof value === "number" ? new Date(value) : new Date(String(value));
11
+ const date = (0, guards_1.IsNumber)(value) ? new Date(value) : new Date(String(value));
11
12
  return Number.isNaN(date.getTime()) ? value : date;
12
13
  }
13
- const REVIVERS = {
14
- timestamp: (value) => ReviveTimestamp(value),
15
- array: (value, type) => Array.isArray(value)
16
- ? value.map((item) => ReviveValue(item, type.elem))
17
- : value,
18
- json: (value, type) => ReviveShape(value, type.shape),
19
- };
20
14
  function ReviveValue(value, type) {
21
15
  if (value === null || value === undefined) {
22
16
  return value;
23
17
  }
24
- const reviver = REVIVERS[type.kind];
25
- return reviver ? reviver(value, type) : value;
18
+ switch (type.kind) {
19
+ case "timestamp":
20
+ return ReviveTimestamp(value);
21
+ case "array":
22
+ return Array.isArray(value)
23
+ ? value.map((item) => ReviveValue(item, type.elem))
24
+ : value;
25
+ case "json":
26
+ return ReviveKeyTypes(value, type.keys);
27
+ default:
28
+ return value;
29
+ }
26
30
  }
27
- function ReviveShape(value, shape) {
28
- if (!shape ||
29
- typeof value !== "object" ||
30
- value === null ||
31
- Array.isArray(value)) {
31
+ function ReviveKeyTypes(value, keyTypes) {
32
+ if (!keyTypes || !(0, guards_1.IsDocument)(value)) {
32
33
  return value;
33
34
  }
34
- const result = {
35
- ...value,
36
- };
37
- for (const [name, type] of Object.entries(shape)) {
35
+ const result = { ...value };
36
+ for (const [name, type] of Object.entries(keyTypes)) {
38
37
  if (Object.hasOwn(result, name)) {
39
38
  result[name] = ReviveValue(result[name], type);
40
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"result.js","sourceRoot":"","sources":["../../../src/implementations/database/result.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../../src/implementations/database/result.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
- import { type TableShape } from "./fields";
1
+ import { type TableModel } from "./fields";
2
2
  import { type Compiled } from "./sql";
3
- import { type SqlShape, type SqlType } from "./types";
3
+ import { type KeyTypes, type SqlType } from "./types";
4
4
  export interface RowSource {
5
5
  field(name: string, def?: Compiled): Compiled;
6
6
  dynamicField(key: Compiled, def?: Compiled): Compiled;
7
7
  toJson(): Compiled;
8
- shape(): SqlShape | undefined;
8
+ keyTypes(): KeyTypes | undefined;
9
9
  presence?(): string;
10
10
  }
11
11
  export interface DocumentMember extends Compiled {
@@ -18,14 +18,14 @@ export declare function LoggedColumns(row: string): ColumnAddress;
18
18
  export declare class ColumnRowSource implements RowSource {
19
19
  private readonly address;
20
20
  private readonly table;
21
- constructor(address: ColumnAddress, table: TableShape);
21
+ constructor(address: ColumnAddress, table: TableModel);
22
22
  field(name: string, def?: Compiled): Compiled;
23
23
  private instance;
24
24
  private overflow;
25
25
  dynamicField(key: Compiled, def?: Compiled): Compiled;
26
26
  private members;
27
27
  toJson(): Compiled;
28
- shape(): SqlShape;
28
+ keyTypes(): KeyTypes;
29
29
  }
30
30
  export declare class NullableRowSource implements RowSource {
31
31
  private readonly inner;
@@ -33,7 +33,7 @@ export declare class NullableRowSource implements RowSource {
33
33
  field(name: string, def?: Compiled): Compiled;
34
34
  dynamicField(key: Compiled, def?: Compiled): Compiled;
35
35
  toJson(): Compiled;
36
- shape(): SqlShape | undefined;
36
+ keyTypes(): KeyTypes | undefined;
37
37
  }
38
38
  export declare class JsonRowSource implements RowSource {
39
39
  private readonly value;
@@ -42,15 +42,15 @@ export declare class JsonRowSource implements RowSource {
42
42
  dynamicField(key: Compiled, def?: Compiled): Compiled;
43
43
  private fieldType;
44
44
  toJson(): Compiled;
45
- shape(): SqlShape | undefined;
45
+ keyTypes(): KeyTypes | undefined;
46
46
  }
47
- export declare function ExternalNames(shape: TableShape): string[];
47
+ export declare function ExternalNames(model: TableModel): string[];
48
48
  export type ExternalReads = "table" | "output";
49
49
  export declare class ExternalRowSource implements RowSource {
50
50
  private readonly alias;
51
51
  private readonly table;
52
52
  private readonly reads;
53
- constructor(alias: string, table: TableShape, reads: ExternalReads);
53
+ constructor(alias: string, table: TableModel, reads: ExternalReads);
54
54
  private column;
55
55
  private key;
56
56
  private native;
@@ -59,6 +59,6 @@ export declare class ExternalRowSource implements RowSource {
59
59
  dynamicField(key: Compiled, def?: Compiled): Compiled;
60
60
  private members;
61
61
  toJson(): Compiled;
62
- shape(): SqlShape;
62
+ keyTypes(): KeyTypes;
63
63
  presence(): string;
64
64
  }
@@ -13,12 +13,12 @@ const external_types_1 = require("./external-types");
13
13
  const sql_1 = require("./sql");
14
14
  const types_1 = require("./types");
15
15
  const DEFAULT_INSTANCE_SQL = (0, sql_1.QuoteLiteral)(utils_1.DEFAULT_INSTANCE_ID);
16
- function MemberShape(members) {
17
- const shape = {};
16
+ function MemberKeyTypes(members) {
17
+ const keyTypes = {};
18
18
  for (const member of members) {
19
- shape[member.name] = member.type;
19
+ keyTypes[member.name] = member.type;
20
20
  }
21
- return shape;
21
+ return keyTypes;
22
22
  }
23
23
  function ContainerMember(member) {
24
24
  const built = `jsonb_build_object(${(0, sql_1.QuoteLiteral)(member.name)}, ${member.sql})`;
@@ -39,7 +39,10 @@ function BuildDocument(members, overflow) {
39
39
  if (overflow) {
40
40
  parts.push(overflow);
41
41
  }
42
- return { sql: `(${parts.join(" || ")})`, type: (0, types_1.JsonOf)(MemberShape(members)) };
42
+ return {
43
+ sql: `(${parts.join(" || ")})`,
44
+ type: (0, types_1.JsonOf)(MemberKeyTypes(members)),
45
+ };
43
46
  }
44
47
  function KeySubject(name) {
45
48
  return `The default for key '${name}'`;
@@ -100,8 +103,8 @@ class ColumnRowSource {
100
103
  const overflow = `COALESCE(${this.overflow()}, '{}'::jsonb)`;
101
104
  return BuildDocument(this.members(), overflow);
102
105
  }
103
- shape() {
104
- return MemberShape(this.members());
106
+ keyTypes() {
107
+ return MemberKeyTypes(this.members());
105
108
  }
106
109
  }
107
110
  exports.ColumnRowSource = ColumnRowSource;
@@ -125,8 +128,8 @@ class NullableRowSource {
125
128
  type: document.type,
126
129
  };
127
130
  }
128
- shape() {
129
- return this.inner.shape();
131
+ keyTypes() {
132
+ return this.inner.keyTypes();
130
133
  }
131
134
  }
132
135
  exports.NullableRowSource = NullableRowSource;
@@ -146,23 +149,23 @@ class JsonRowSource {
146
149
  return (0, coerce_1.WithDefault)({ sql: `(${this.toJson().sql} -> ${(0, coerce_1.Cast)(key, types_1.TEXT).sql})`, type: types_1.OPAQUE }, def);
147
150
  }
148
151
  fieldType(name) {
149
- const shape = this.shape();
150
- if (!shape || !Object.hasOwn(shape, name)) {
152
+ const keyTypes = this.keyTypes();
153
+ if (!keyTypes || !Object.hasOwn(keyTypes, name)) {
151
154
  return types_1.OPAQUE;
152
155
  }
153
- return shape[name];
156
+ return keyTypes[name];
154
157
  }
155
158
  toJson() {
156
159
  return (0, coerce_1.Cast)(this.value, this.value.type.kind === "json" ? this.value.type : types_1.OPAQUE);
157
160
  }
158
- shape() {
159
- return (0, types_1.ShapeOf)(this.value.type);
161
+ keyTypes() {
162
+ return (0, types_1.KeyTypesOf)(this.value.type);
160
163
  }
161
164
  }
162
165
  exports.JsonRowSource = JsonRowSource;
163
- function ExternalNames(shape) {
164
- const declared = Object.keys(shape.fields);
165
- return shape.external?.key ? [utils_1.ID_COLUMN, ...declared] : declared;
166
+ function ExternalNames(model) {
167
+ const declared = Object.keys(model.fields);
168
+ return model.external?.key ? [utils_1.ID_COLUMN, ...declared] : declared;
166
169
  }
167
170
  function JsonKeyOf(other) {
168
171
  return `((CASE WHEN pg_input_is_valid(${other}, 'jsonb') THEN ${other} END)::jsonb)`;
@@ -268,8 +271,8 @@ class ExternalRowSource {
268
271
  toJson() {
269
272
  return BuildDocument(this.members());
270
273
  }
271
- shape() {
272
- return MemberShape(this.members());
274
+ keyTypes() {
275
+ return MemberKeyTypes(this.members());
273
276
  }
274
277
  presence() {
275
278
  return `(${(0, sql_1.QuoteIdentifier)(this.alias)} IS DISTINCT FROM NULL)`;