@casekit/orm 0.0.1-alpha.7 → 0.0.1-alpha.9

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 (245) hide show
  1. package/lib/migrate/commands/implode.js +1 -1
  2. package/lib/migrate/commands/implode.js.map +1 -1
  3. package/lib/migrate/sql/createTableSql.test.js +1 -0
  4. package/lib/migrate/sql/createTableSql.test.js.map +1 -1
  5. package/lib/orm.d.ts.map +1 -1
  6. package/lib/orm.js +4 -2
  7. package/lib/orm.js.map +1 -1
  8. package/lib/queries/clauses/ReturningClause.d.ts +2 -3
  9. package/lib/queries/clauses/ReturningClause.d.ts.map +1 -1
  10. package/lib/queries/clauses/SelectClause.d.ts +2 -3
  11. package/lib/queries/clauses/SelectClause.d.ts.map +1 -1
  12. package/lib/queries/clauses/WhereClause.d.ts +1 -1
  13. package/lib/queries/clauses/WhereClause.d.ts.map +1 -1
  14. package/lib/queries/clauses/helpers/OptionalColumn.d.ts +4 -5
  15. package/lib/queries/clauses/helpers/OptionalColumn.d.ts.map +1 -1
  16. package/lib/queries/clauses/helpers/OptionalParams.d.ts +2 -2
  17. package/lib/queries/clauses/helpers/OptionalParams.d.ts.map +1 -1
  18. package/lib/queries/clauses/helpers/RequiredColumn.d.ts +2 -3
  19. package/lib/queries/clauses/helpers/RequiredColumn.d.ts.map +1 -1
  20. package/lib/queries/clauses/helpers/RequiredParams.d.ts +2 -2
  21. package/lib/queries/clauses/helpers/RequiredParams.d.ts.map +1 -1
  22. package/lib/queries/clauses/where/buildWhereClauses.d.ts +1 -1
  23. package/lib/queries/clauses/where/buildWhereClauses.d.ts.map +1 -1
  24. package/lib/queries/clauses/where/buildWhereClauses.js.map +1 -1
  25. package/lib/queries/clauses/where/buildWhereClauses.test.js +1 -1
  26. package/lib/queries/clauses/where/buildWhereClauses.test.js.map +1 -1
  27. package/lib/queries/clauses/where/types/WhereClauseValue.d.ts +1 -1
  28. package/lib/queries/clauses/where/types/WhereClauseValue.d.ts.map +1 -1
  29. package/lib/queries/count/buildCount.d.ts.map +1 -1
  30. package/lib/queries/count/buildCount.js +33 -29
  31. package/lib/queries/count/buildCount.js.map +1 -1
  32. package/lib/queries/count/countToSql.d.ts.map +1 -1
  33. package/lib/queries/count/countToSql.js +12 -17
  34. package/lib/queries/count/countToSql.js.map +1 -1
  35. package/lib/queries/count/types/CountBuilder.d.ts +12 -4
  36. package/lib/queries/count/types/CountBuilder.d.ts.map +1 -1
  37. package/lib/queries/count.d.ts.map +1 -1
  38. package/lib/queries/count.js +3 -1
  39. package/lib/queries/count.js.map +1 -1
  40. package/lib/queries/create/buildCreate.d.ts +1 -1
  41. package/lib/queries/create/buildCreate.d.ts.map +1 -1
  42. package/lib/queries/create/buildCreate.js +1 -1
  43. package/lib/queries/create/buildCreate.js.map +1 -1
  44. package/lib/queries/create/createResultSchema.d.ts.map +1 -1
  45. package/lib/queries/create/createResultSchema.js +3 -1
  46. package/lib/queries/create/createResultSchema.js.map +1 -1
  47. package/lib/queries/create/createToSql.d.ts.map +1 -1
  48. package/lib/queries/create/createToSql.js +2 -2
  49. package/lib/queries/create/createToSql.js.map +1 -1
  50. package/lib/queries/create/types/CreateManyParams.d.ts +1 -1
  51. package/lib/queries/create/types/CreateManyParams.d.ts.map +1 -1
  52. package/lib/queries/create/types/CreateManyResult.d.ts +1 -1
  53. package/lib/queries/create/types/CreateManyResult.d.ts.map +1 -1
  54. package/lib/queries/create/types/CreateOneParams.d.ts +1 -1
  55. package/lib/queries/create/types/CreateOneParams.d.ts.map +1 -1
  56. package/lib/queries/create/types/CreateOneResult.d.ts +1 -1
  57. package/lib/queries/create/types/CreateOneResult.d.ts.map +1 -1
  58. package/lib/queries/createMany.d.ts.map +1 -1
  59. package/lib/queries/createMany.js +3 -1
  60. package/lib/queries/createMany.js.map +1 -1
  61. package/lib/queries/delete/buildDelete.d.ts +1 -1
  62. package/lib/queries/delete/buildDelete.d.ts.map +1 -1
  63. package/lib/queries/delete/buildDelete.js +1 -1
  64. package/lib/queries/delete/buildDelete.js.map +1 -1
  65. package/lib/queries/delete/deleteResultSchema.d.ts.map +1 -1
  66. package/lib/queries/delete/deleteResultSchema.js +3 -1
  67. package/lib/queries/delete/deleteResultSchema.js.map +1 -1
  68. package/lib/queries/delete/deleteToSql.js +1 -1
  69. package/lib/queries/delete/deleteToSql.js.map +1 -1
  70. package/lib/queries/delete/types/DeleteManyResult.d.ts +1 -1
  71. package/lib/queries/delete/types/DeleteManyResult.d.ts.map +1 -1
  72. package/lib/queries/delete/types/DeleteOneResult.d.ts +1 -1
  73. package/lib/queries/delete/types/DeleteOneResult.d.ts.map +1 -1
  74. package/lib/queries/delete/types/DeleteParams.d.ts +1 -1
  75. package/lib/queries/delete/types/DeleteParams.d.ts.map +1 -1
  76. package/lib/queries/deleteMany.d.ts.map +1 -1
  77. package/lib/queries/deleteMany.js +3 -1
  78. package/lib/queries/deleteMany.js.map +1 -1
  79. package/lib/queries/find/buildFind.d.ts.map +1 -1
  80. package/lib/queries/find/buildFind.js +34 -30
  81. package/lib/queries/find/buildFind.js.map +1 -1
  82. package/lib/queries/find/findResultSchema.d.ts.map +1 -1
  83. package/lib/queries/find/findResultSchema.js +9 -2
  84. package/lib/queries/find/findResultSchema.js.map +1 -1
  85. package/lib/queries/find/findToSql.d.ts.map +1 -1
  86. package/lib/queries/find/findToSql.js +12 -17
  87. package/lib/queries/find/findToSql.js.map +1 -1
  88. package/lib/queries/find/tests/findMany.nullable-relations.test.d.ts +2 -0
  89. package/lib/queries/find/tests/findMany.nullable-relations.test.d.ts.map +1 -0
  90. package/lib/queries/find/tests/findMany.nullable-relations.test.js +118 -0
  91. package/lib/queries/find/tests/findMany.nullable-relations.test.js.map +1 -0
  92. package/lib/queries/find/types/FindBuilder.d.ts +12 -4
  93. package/lib/queries/find/types/FindBuilder.d.ts.map +1 -1
  94. package/lib/queries/find/types/FindManyParams.d.ts +2 -2
  95. package/lib/queries/find/types/FindManyParams.d.ts.map +1 -1
  96. package/lib/queries/find/types/FindOneParams.d.ts +1 -1
  97. package/lib/queries/find/types/FindOneParams.d.ts.map +1 -1
  98. package/lib/queries/findMany.d.ts.map +1 -1
  99. package/lib/queries/findMany.js +17 -9
  100. package/lib/queries/findMany.js.map +1 -1
  101. package/lib/queries/update/buildUpdate.d.ts +1 -1
  102. package/lib/queries/update/buildUpdate.d.ts.map +1 -1
  103. package/lib/queries/update/buildUpdate.js +1 -1
  104. package/lib/queries/update/buildUpdate.js.map +1 -1
  105. package/lib/queries/update/types/UpdateManyResult.d.ts +1 -1
  106. package/lib/queries/update/types/UpdateManyResult.d.ts.map +1 -1
  107. package/lib/queries/update/types/UpdateOneResult.d.ts +1 -1
  108. package/lib/queries/update/types/UpdateOneResult.d.ts.map +1 -1
  109. package/lib/queries/update/types/UpdateParams.d.ts +1 -1
  110. package/lib/queries/update/types/UpdateParams.d.ts.map +1 -1
  111. package/lib/queries/update/types/UpdateValues.d.ts +1 -1
  112. package/lib/queries/update/types/UpdateValues.d.ts.map +1 -1
  113. package/lib/queries/update/updateResultSchema.d.ts.map +1 -1
  114. package/lib/queries/update/updateResultSchema.js +3 -1
  115. package/lib/queries/update/updateResultSchema.js.map +1 -1
  116. package/lib/queries/update/updateToSql.js +1 -1
  117. package/lib/queries/update/updateToSql.js.map +1 -1
  118. package/lib/queries/updateMany.d.ts.map +1 -1
  119. package/lib/queries/updateMany.js +3 -1
  120. package/lib/queries/updateMany.js.map +1 -1
  121. package/lib/queries/util/rowToObject.d.ts.map +1 -1
  122. package/lib/queries/util/rowToObject.js +1 -1
  123. package/lib/queries/util/rowToObject.js.map +1 -1
  124. package/lib/schema/types/base/BaseRelation.d.ts +1 -0
  125. package/lib/schema/types/base/BaseRelation.d.ts.map +1 -1
  126. package/lib/schema/types/helpers/ColumnName.d.ts +2 -3
  127. package/lib/schema/types/helpers/ColumnName.d.ts.map +1 -1
  128. package/lib/schema/types/helpers/ColumnType.d.ts +2 -2
  129. package/lib/schema/types/helpers/ColumnType.d.ts.map +1 -1
  130. package/lib/schema/types/helpers/Columns.d.ts +2 -3
  131. package/lib/schema/types/helpers/Columns.d.ts.map +1 -1
  132. package/lib/schema/types/helpers/HasDefault.d.ts +2 -3
  133. package/lib/schema/types/helpers/HasDefault.d.ts.map +1 -1
  134. package/lib/schema/types/helpers/IsNullable.d.ts +2 -3
  135. package/lib/schema/types/helpers/IsNullable.d.ts.map +1 -1
  136. package/lib/schema/types/helpers/IsProvided.d.ts +2 -3
  137. package/lib/schema/types/helpers/IsProvided.d.ts.map +1 -1
  138. package/lib/schema/types/helpers/IsSerial.d.ts +2 -3
  139. package/lib/schema/types/helpers/IsSerial.d.ts.map +1 -1
  140. package/lib/schema/types/loose/LooseRelationDefinition.d.ts +1 -0
  141. package/lib/schema/types/loose/LooseRelationDefinition.d.ts.map +1 -1
  142. package/lib/schema/types/relations/ManyToManyRelation.d.ts +2 -2
  143. package/lib/schema/types/relations/ManyToManyRelation.d.ts.map +1 -1
  144. package/lib/schema/types/relations/ManyToOneRelation.d.ts +1 -1
  145. package/lib/schema/types/relations/ManyToOneRelation.d.ts.map +1 -1
  146. package/lib/schema/types/relations/OneToManyRelation.d.ts +2 -1
  147. package/lib/schema/types/relations/OneToManyRelation.d.ts.map +1 -1
  148. package/lib/test/db/index.d.ts +40 -0
  149. package/lib/test/db/index.d.ts.map +1 -1
  150. package/lib/test/db/models/post.model.d.ts +9 -0
  151. package/lib/test/db/models/post.model.d.ts.map +1 -1
  152. package/lib/test/db/models/post.model.js +6 -0
  153. package/lib/test/db/models/post.model.js.map +1 -1
  154. package/lib/test/db/models/post.relations.d.ts +6 -0
  155. package/lib/test/db/models/post.relations.d.ts.map +1 -1
  156. package/lib/test/db/models/post.relations.js +6 -0
  157. package/lib/test/db/models/post.relations.js.map +1 -1
  158. package/lib/test/db/models/user.model.d.ts +9 -0
  159. package/lib/test/db/models/user.model.d.ts.map +1 -1
  160. package/lib/test/db/models/user.model.js +6 -0
  161. package/lib/test/db/models/user.model.js.map +1 -1
  162. package/lib/test/db/models/user.relations.d.ts +16 -0
  163. package/lib/test/db/models/user.relations.d.ts.map +1 -1
  164. package/lib/test/db/models/user.relations.js +16 -0
  165. package/lib/test/db/models/user.relations.js.map +1 -1
  166. package/lib/test/db/models.d.ts +18 -0
  167. package/lib/test/db/models.d.ts.map +1 -1
  168. package/lib/test/db/relations.d.ts +22 -0
  169. package/lib/test/db/relations.d.ts.map +1 -1
  170. package/lib/test/seed/index.d.ts +40 -0
  171. package/lib/test/seed/index.d.ts.map +1 -1
  172. package/lib/types/ModelType.d.ts +10 -3
  173. package/lib/types/ModelType.d.ts.map +1 -1
  174. package/package.json +1 -1
  175. package/src/migrate/commands/implode.ts +1 -1
  176. package/src/migrate/sql/createTableSql.test.ts +1 -0
  177. package/src/orm.ts +5 -2
  178. package/src/queries/clauses/ReturningClause.ts +4 -6
  179. package/src/queries/clauses/SelectClause.ts +4 -6
  180. package/src/queries/clauses/WhereClause.ts +1 -1
  181. package/src/queries/clauses/helpers/OptionalColumn.ts +7 -11
  182. package/src/queries/clauses/helpers/OptionalParams.ts +2 -2
  183. package/src/queries/clauses/helpers/RequiredColumn.ts +5 -6
  184. package/src/queries/clauses/helpers/RequiredParams.ts +2 -2
  185. package/src/queries/clauses/where/buildWhereClauses.test.ts +1 -1
  186. package/src/queries/clauses/where/buildWhereClauses.ts +1 -1
  187. package/src/queries/clauses/where/types/WhereClauseValue.ts +1 -1
  188. package/src/queries/count/buildCount.ts +39 -33
  189. package/src/queries/count/countToSql.ts +27 -32
  190. package/src/queries/count/types/CountBuilder.ts +23 -6
  191. package/src/queries/count.ts +4 -1
  192. package/src/queries/create/buildCreate.ts +2 -2
  193. package/src/queries/create/createResultSchema.ts +3 -1
  194. package/src/queries/create/createToSql.ts +6 -2
  195. package/src/queries/create/types/CreateManyParams.ts +1 -1
  196. package/src/queries/create/types/CreateManyResult.ts +1 -1
  197. package/src/queries/create/types/CreateOneParams.ts +1 -1
  198. package/src/queries/create/types/CreateOneResult.ts +1 -1
  199. package/src/queries/createMany.ts +4 -1
  200. package/src/queries/delete/buildDelete.ts +2 -2
  201. package/src/queries/delete/deleteResultSchema.ts +3 -1
  202. package/src/queries/delete/deleteToSql.ts +1 -1
  203. package/src/queries/delete/types/DeleteManyResult.ts +1 -1
  204. package/src/queries/delete/types/DeleteOneResult.ts +1 -1
  205. package/src/queries/delete/types/DeleteParams.ts +1 -1
  206. package/src/queries/deleteMany.ts +4 -1
  207. package/src/queries/find/buildFind.ts +40 -34
  208. package/src/queries/find/findResultSchema.ts +9 -2
  209. package/src/queries/find/findToSql.ts +27 -32
  210. package/src/queries/find/tests/findMany.nullable-relations.test.ts +127 -0
  211. package/src/queries/find/types/FindBuilder.ts +23 -6
  212. package/src/queries/find/types/FindManyParams.ts +2 -2
  213. package/src/queries/find/types/FindOneParams.ts +1 -1
  214. package/src/queries/findMany.ts +25 -17
  215. package/src/queries/update/buildUpdate.ts +2 -2
  216. package/src/queries/update/types/UpdateManyResult.ts +1 -1
  217. package/src/queries/update/types/UpdateOneResult.ts +1 -1
  218. package/src/queries/update/types/UpdateParams.ts +1 -1
  219. package/src/queries/update/types/UpdateValues.ts +1 -1
  220. package/src/queries/update/updateResultSchema.ts +3 -1
  221. package/src/queries/update/updateToSql.ts +1 -1
  222. package/src/queries/updateMany.ts +4 -1
  223. package/src/queries/util/rowToObject.ts +5 -1
  224. package/src/schema/types/base/BaseRelation.ts +1 -0
  225. package/src/schema/types/helpers/ColumnName.ts +5 -6
  226. package/src/schema/types/helpers/ColumnType.ts +2 -2
  227. package/src/schema/types/helpers/Columns.ts +2 -6
  228. package/src/schema/types/helpers/HasDefault.ts +5 -7
  229. package/src/schema/types/helpers/IsNullable.ts +4 -6
  230. package/src/schema/types/helpers/IsProvided.ts +4 -6
  231. package/src/schema/types/helpers/IsSerial.ts +4 -6
  232. package/src/schema/types/loose/LooseRelationDefinition.ts +1 -1
  233. package/src/schema/types/relations/ManyToManyRelation.ts +2 -2
  234. package/src/schema/types/relations/ManyToOneRelation.ts +1 -1
  235. package/src/schema/types/relations/OneToManyRelation.ts +2 -1
  236. package/src/test/db/models/post.model.ts +6 -0
  237. package/src/test/db/models/post.relations.ts +6 -0
  238. package/src/test/db/models/user.model.ts +6 -0
  239. package/src/test/db/models/user.relations.ts +16 -0
  240. package/src/types/ModelType.ts +16 -3
  241. package/lib/queries/clauses/helpers/ModelValues.d.ts +0 -8
  242. package/lib/queries/clauses/helpers/ModelValues.d.ts.map +0 -1
  243. package/lib/queries/clauses/helpers/ModelValues.js +0 -2
  244. package/lib/queries/clauses/helpers/ModelValues.js.map +0 -1
  245. package/src/queries/clauses/helpers/ModelValues.ts +0 -9
@@ -1,9 +1,7 @@
1
1
  import { ColumnName } from "../../schema/types/helpers/ColumnName";
2
- import { ModelName } from "../../schema/types/helpers/ModelName";
3
- import { LooseModelDefinitions } from "../../schema/types/loose/LooseModelDefinitions";
2
+ import { LooseModelDefinition } from "../../schema/types/loose/LooseModelDefinition";
4
3
  import { NonEmptyArray } from "../../types/util/NonEmptyArray";
5
4
 
6
- export type ReturningClause<
7
- Models extends LooseModelDefinitions,
8
- M extends ModelName<Models>,
9
- > = NonEmptyArray<ColumnName<Models, M>>;
5
+ export type ReturningClause<Model extends LooseModelDefinition> = NonEmptyArray<
6
+ ColumnName<Model>
7
+ >;
@@ -1,9 +1,7 @@
1
1
  import { ColumnName } from "../../schema/types/helpers/ColumnName";
2
- import { ModelName } from "../../schema/types/helpers/ModelName";
3
- import { LooseModelDefinitions } from "../../schema/types/loose/LooseModelDefinitions";
2
+ import { LooseModelDefinition } from "../../schema/types/loose/LooseModelDefinition";
4
3
  import { NonEmptyArray } from "../../types/util/NonEmptyArray";
5
4
 
6
- export type SelectClause<
7
- Models extends LooseModelDefinitions,
8
- M extends ModelName<Models>,
9
- > = NonEmptyArray<ColumnName<Models, M>>;
5
+ export type SelectClause<Model extends LooseModelDefinition> = NonEmptyArray<
6
+ ColumnName<Model>
7
+ >;
@@ -8,7 +8,7 @@ export type WhereClause<
8
8
  Models extends LooseModelDefinitions,
9
9
  M extends ModelName<Models>,
10
10
  > = {
11
- [C in ColumnName<Models, M>]?: WhereClauseValue<Models, M, C>;
11
+ [C in ColumnName<Models[M]>]?: WhereClauseValue<Models, M, C>;
12
12
  } & {
13
13
  [$and]?: WhereClause<Models, M>[];
14
14
  [$or]?: WhereClause<Models, M>[];
@@ -3,20 +3,16 @@ import { HasDefault } from "../../../schema/types/helpers/HasDefault";
3
3
  import { IsNullable } from "../../../schema/types/helpers/IsNullable";
4
4
  import { IsProvided } from "../../../schema/types/helpers/IsProvided";
5
5
  import { IsSerial } from "../../../schema/types/helpers/IsSerial";
6
- import { ModelName } from "../../../schema/types/helpers/ModelName";
7
- import { LooseModelDefinitions } from "../../../schema/types/loose/LooseModelDefinitions";
6
+ import { LooseModelDefinition } from "../../../schema/types/loose/LooseModelDefinition";
8
7
 
9
- export type OptionalColumn<
10
- Models extends LooseModelDefinitions,
11
- M extends ModelName<Models>,
12
- > = {
13
- [C in ColumnName<Models, M>]: IsNullable<Models, M, C> extends true
8
+ export type OptionalColumn<Model extends LooseModelDefinition> = {
9
+ [C in ColumnName<Model>]: IsNullable<Model, C> extends true
14
10
  ? C
15
- : IsSerial<Models, M, C> extends true
11
+ : IsSerial<Model, C> extends true
16
12
  ? C
17
- : HasDefault<Models, M, C> extends true
13
+ : HasDefault<Model, C> extends true
18
14
  ? C
19
- : IsProvided<Models, M, C> extends true
15
+ : IsProvided<Model, C> extends true
20
16
  ? C
21
17
  : never;
22
- }[ColumnName<Models, M>];
18
+ }[ColumnName<Model>];
@@ -7,8 +7,8 @@ export type OptionalParams<
7
7
  Models extends LooseModelDefinitions,
8
8
  M extends ModelName<Models>,
9
9
  > =
10
- OptionalColumn<Models, M> extends never
10
+ OptionalColumn<Models[M]> extends never
11
11
  ? unknown
12
12
  : {
13
- [C in OptionalColumn<Models, M>]?: ColumnType<Models, M, C>;
13
+ [C in OptionalColumn<Models[M]>]?: ColumnType<Models, M, C>;
14
14
  };
@@ -1,9 +1,8 @@
1
1
  import { ColumnName } from "../../../schema/types/helpers/ColumnName";
2
- import { ModelName } from "../../../schema/types/helpers/ModelName";
3
- import { LooseModelDefinitions } from "../../../schema/types/loose/LooseModelDefinitions";
2
+ import { LooseModelDefinition } from "../../../schema/types/loose/LooseModelDefinition";
4
3
  import { OptionalColumn } from "./OptionalColumn";
5
4
 
6
- export type RequiredColumn<
7
- Models extends LooseModelDefinitions,
8
- M extends ModelName<Models>,
9
- > = Exclude<ColumnName<Models, M>, OptionalColumn<Models, M>>;
5
+ export type RequiredColumn<Model extends LooseModelDefinition> = Exclude<
6
+ ColumnName<Model>,
7
+ OptionalColumn<Model>
8
+ >;
@@ -7,8 +7,8 @@ export type RequiredParams<
7
7
  Models extends LooseModelDefinitions,
8
8
  M extends ModelName<Models>,
9
9
  > =
10
- RequiredColumn<Models, M> extends never
10
+ RequiredColumn<Models[M]> extends never
11
11
  ? unknown
12
12
  : {
13
- [C in RequiredColumn<Models, M>]: ColumnType<Models, M, C>;
13
+ [C in RequiredColumn<Models[M]>]: ColumnType<Models, M, C>;
14
14
  };
@@ -135,7 +135,7 @@ describe("buildWhereClauses", () => {
135
135
  ) => {
136
136
  const clause = buildWhereClauses(
137
137
  db.config,
138
- { name: "foo", schema: "casekit", model: "foo", alias: "a" },
138
+ { table: "foo", schema: "casekit", model: "foo", alias: "a" },
139
139
  where,
140
140
  );
141
141
  expect(clause.text).toEqual(sql);
@@ -8,7 +8,7 @@ import { $and, $not, $or } from "./operators";
8
8
 
9
9
  export const buildWhereClauses = (
10
10
  config: BaseConfiguration,
11
- table: { name: string; schema: string; alias: string; model: string },
11
+ table: { table: string; schema: string; alias: string; model: string },
12
12
  where: WhereClause<LooseModelDefinitions, ModelName<LooseModelDefinitions>>,
13
13
  ): SQLStatement => {
14
14
  const clauses: SQLStatement[] = [];
@@ -19,7 +19,7 @@ import {
19
19
  export type WhereClauseValue<
20
20
  Models extends LooseModelDefinitions,
21
21
  M extends ModelName<Models>,
22
- C extends ColumnName<Models, M>,
22
+ C extends ColumnName<Models[M]>,
23
23
  T = ColumnType<Models, M, C>,
24
24
  > =
25
25
  | ColumnType<Models, M, C>
@@ -13,23 +13,25 @@ export const buildCount = (
13
13
  _tableIndex = 0,
14
14
  ): CountBuilder => {
15
15
  const builder: CountBuilder = {
16
+ table: {
17
+ table: config.models[m]["table"],
18
+ model: m,
19
+ schema: config.models[m]["schema"],
20
+ alias: tableAlias(_tableIndex++),
21
+ joins: [],
22
+ where: config.middleware.count?.where
23
+ ? config.middleware.count.where(query.where, {
24
+ config,
25
+ model: m,
26
+ })
27
+ : query.where,
28
+ },
16
29
  tableIndex: _tableIndex,
17
- tables: [],
18
30
  };
19
31
 
20
32
  const model = config.models[m];
21
33
 
22
- const alias = tableAlias(builder.tableIndex++);
23
-
24
- builder.tables.push({
25
- name: config.models[m]["table"],
26
- model: m,
27
- schema: config.models[m]["schema"],
28
- alias: alias,
29
- where: config.middleware.count?.where
30
- ? config.middleware.count.where(query.where, { config, model: m })
31
- : query.where,
32
- });
34
+ const alias = builder.table.alias;
33
35
 
34
36
  for (const [r, subquery] of Object.entries(query.include ?? {})) {
35
37
  const relation = config.relations[m][r];
@@ -42,28 +44,32 @@ export const buildCount = (
42
44
  [...path, r],
43
45
  builder.tableIndex++,
44
46
  );
45
- const [joinedTable, ...otherTables] = joinBuilder.tables;
46
- builder.tables.push({
47
- ...joinedTable,
48
- joins: [
49
- ...(joinedTable.joins ?? []),
50
- {
51
- from: {
52
- table: alias,
53
- columns: ensureArray(relation.foreignKey).map(
54
- (c) => model.columns[c].name,
55
- ),
56
- },
57
- to: {
58
- table: joinedTable.alias,
59
- columns: joinedModel.primaryKey.map(
60
- (c) => joinedModel.columns[c].name,
61
- ),
62
- },
47
+ const joinedTable = joinBuilder.table;
48
+ builder.table.joins.push(
49
+ {
50
+ from: {
51
+ schema: config.models[m].schema,
52
+ table: config.models[m].table,
53
+ alias,
54
+ model: m,
55
+ columns: ensureArray(relation.foreignKey).map(
56
+ (c) => model.columns[c].name,
57
+ ),
58
+ },
59
+ to: {
60
+ schema: joinedModel.schema,
61
+ table: joinedTable.table,
62
+ alias: joinedTable.alias,
63
+ model: relation.model,
64
+ columns: joinedModel.primaryKey.map(
65
+ (c) => joinedModel.columns[c].name,
66
+ ),
63
67
  },
64
- ],
65
- });
66
- builder.tables.push(...otherTables);
68
+ where: joinedTable.where,
69
+ type: relation.optional ? "left" : "inner",
70
+ },
71
+ ...joinedTable.joins,
72
+ );
67
73
  }
68
74
  }
69
75
 
@@ -11,50 +11,45 @@ export const countToSql = (
11
11
  config: BaseConfiguration,
12
12
  builder: CountBuilder,
13
13
  ): SQLStatement => {
14
- const [table, ...joinedTables] = builder.tables;
14
+ const table = builder.table;
15
15
 
16
16
  const frag = sql`SELECT count(1) as "count"`;
17
17
 
18
- frag.push(pgfmt(`\nFROM %I.%I %I`, table.schema, table.name, table.alias));
18
+ frag.push(pgfmt(`\nFROM %I.%I %I`, table.schema, table.table, table.alias));
19
19
 
20
- for (const joinedTable of joinedTables) {
21
- if (!joinedTable.joins)
22
- throw new OrmError("Joined table without join clauses", {
23
- data: builder,
24
- });
20
+ for (const join of table.joins ?? []) {
21
+ if (join.from.columns.length !== join.to.columns.length) {
22
+ throw new OrmError(
23
+ "Number of foreign keys doesn't match number of primary keys in join",
24
+ { data: builder },
25
+ );
26
+ }
27
+
28
+ frag.push(join.type === "left" ? "\nLEFT JOIN" : "\nJOIN");
25
29
  frag.push(
26
30
  pgfmt(
27
- "\nJOIN %I.%I %I\n ON ",
28
- joinedTable.schema,
29
- joinedTable.name,
30
- joinedTable.alias,
31
+ "\n %I.%I %I\n ON ",
32
+ join.to.schema,
33
+ join.to.table,
34
+ join.to.alias,
31
35
  ),
32
36
  );
33
37
  frag.push(
34
- joinedTable.joins
35
- .flatMap((join) => {
36
- if (join.from.columns.length !== join.to.columns.length) {
37
- throw new OrmError(
38
- "Number of foreign keys doesn't match number of primary keys in join",
39
- { data: builder },
40
- );
41
- }
42
-
43
- return join.from.columns.map((from, i) =>
44
- pgfmt(
45
- "%I.%I = %I.%I",
46
- table.alias,
47
- from,
48
- joinedTable.alias,
49
- join.to.columns[i],
50
- ),
51
- );
52
- })
38
+ join.from.columns
39
+ .map((from, i) =>
40
+ pgfmt(
41
+ "%I.%I = %I.%I",
42
+ join.from.alias,
43
+ from,
44
+ join.to.alias,
45
+ join.to.columns[i],
46
+ ),
47
+ )
53
48
  .join(" AND "),
54
49
  );
55
- if (hasConditions(joinedTable.where)) {
50
+ if (hasConditions(join.where)) {
56
51
  frag.push(
57
- sql`\n AND ${buildWhereClauses(config, joinedTable, joinedTable.where)}`,
52
+ sql`\n AND ${buildWhereClauses(config, join.to, join.where)}`,
58
53
  );
59
54
  }
60
55
  }
@@ -5,12 +5,12 @@ import { WhereClause } from "../../clauses/WhereClause";
5
5
  export type CountBuilder = {
6
6
  tableIndex: number;
7
7
 
8
- tables: {
9
- name: string;
8
+ table: {
9
+ table: string;
10
10
  model: string;
11
11
  schema: string;
12
12
  alias: string;
13
- joins?: Join[];
13
+ joins: Join[];
14
14
  conditions?: WhereClause<
15
15
  LooseModelDefinitions,
16
16
  ModelName<LooseModelDefinitions>
@@ -19,10 +19,27 @@ export type CountBuilder = {
19
19
  LooseModelDefinitions,
20
20
  ModelName<LooseModelDefinitions>
21
21
  >;
22
- }[];
22
+ };
23
23
  };
24
24
 
25
25
  export type Join = {
26
- from: { table: string; columns: string[] };
27
- to: { table: string; columns: string[] };
26
+ from: {
27
+ schema: string;
28
+ table: string;
29
+ alias: string;
30
+ model: string;
31
+ columns: string[];
32
+ };
33
+ to: {
34
+ schema: string;
35
+ table: string;
36
+ alias: string;
37
+ model: string;
38
+ columns: string[];
39
+ };
40
+ where?: WhereClause<
41
+ LooseModelDefinitions,
42
+ ModelName<LooseModelDefinitions>
43
+ >;
44
+ type?: "inner" | "left";
28
45
  };
@@ -20,7 +20,10 @@ export const count = async (
20
20
  values: statement.values,
21
21
  });
22
22
 
23
- if (!process.env.CI) console.log(statement.text);
23
+ if (process.env.ORM_VERBOSE_LOGGING) {
24
+ console.log(statement.text);
25
+ console.log(statement.values);
26
+ }
24
27
 
25
28
  const result = await conn
26
29
  .query(statement)
@@ -6,7 +6,7 @@ import { BaseCreateManyParams } from "./types/BaseCreateManyParams";
6
6
 
7
7
  export type CreateBuilder = {
8
8
  tableIndex: number;
9
- table: { name: string; schema: string };
9
+ table: { table: string; schema: string };
10
10
  params: { name: string; path: string; values: unknown[] }[];
11
11
  onConflict?: { do: "nothing" };
12
12
  returning: { name: string; path: string; alias: string }[];
@@ -21,7 +21,7 @@ export const buildCreate = (
21
21
  const builder: CreateBuilder = {
22
22
  tableIndex: _tableIndex,
23
23
  table: {
24
- name: config.models[m].table,
24
+ table: config.models[m].table,
25
25
  schema: config.models[m].schema,
26
26
  },
27
27
  params: [],
@@ -15,7 +15,9 @@ export const createResultSchema = (
15
15
 
16
16
  params.returning?.forEach((s) => {
17
17
  const col = config.models[m].columns[s];
18
- obj[s] = col.nullable ? col.zodSchema.nullable() : col.zodSchema;
18
+ obj[s] = col.nullable
19
+ ? col.zodSchema.nullish().transform((x) => x ?? null)
20
+ : col.zodSchema;
19
21
  });
20
22
 
21
23
  return z.object(obj);
@@ -10,10 +10,14 @@ export const createToSql = (builder: CreateBuilder): SQLStatement => {
10
10
 
11
11
  if (params.length === 0) {
12
12
  frag.push(
13
- pgfmt("INSERT INTO %I.%I DEFAULT VALUES", table.schema, table.name),
13
+ pgfmt(
14
+ "INSERT INTO %I.%I DEFAULT VALUES",
15
+ table.schema,
16
+ table.table,
17
+ ),
14
18
  );
15
19
  } else {
16
- frag.push(pgfmt("INSERT INTO %I.%I (\n", table.schema, table.name));
20
+ frag.push(pgfmt("INSERT INTO %I.%I (\n", table.schema, table.table));
17
21
  frag.push(params.map((p) => pgfmt(" %I", p.name)).join(",\n"));
18
22
  frag.push(") VALUES ");
19
23
  const values = params[0].values.map((_, index) => {
@@ -8,7 +8,7 @@ export type CreateManyParams<
8
8
  M extends ModelName<Models>,
9
9
  > = {
10
10
  values: CreateValues<Models, M>[];
11
- returning?: ReturningClause<Models, M>;
11
+ returning?: ReturningClause<Models[M]>;
12
12
  onConflict?: {
13
13
  do: "nothing";
14
14
  };
@@ -10,7 +10,7 @@ export type CreateManyResult<
10
10
  M extends ModelName<Models>,
11
11
  P extends CreateOneParams<Models, M> | CreateManyParams<Models, M>,
12
12
  > =
13
- P["returning"] extends ReturningClause<Models, M>
13
+ P["returning"] extends ReturningClause<Models[M]>
14
14
  ? Readonly<{
15
15
  [C in P["returning"][number]]: ColumnType<Models, M, C>;
16
16
  }>[]
@@ -15,7 +15,7 @@ export type CreateOneParams<
15
15
  M extends ModelName<Models>,
16
16
  > = {
17
17
  values: CreateValues<Models, M>;
18
- returning?: ReturningClause<Models, M>;
18
+ returning?: ReturningClause<Models[M]>;
19
19
  onConflict?: {
20
20
  do: "nothing";
21
21
  };
@@ -10,7 +10,7 @@ export type CreateOneResult<
10
10
  M extends ModelName<Models>,
11
11
  P extends CreateOneParams<Models, M> | CreateManyParams<Models, M>,
12
12
  > =
13
- P["returning"] extends SelectClause<Models, M>
13
+ P["returning"] extends SelectClause<Models[M]>
14
14
  ? Readonly<{
15
15
  [C in P["returning"][number]]: ColumnType<Models, M, C>;
16
16
  }>
@@ -26,7 +26,10 @@ export const createMany = async (
26
26
  values: statement.values,
27
27
  });
28
28
 
29
- if (!process.env.CI) console.log(statement.text);
29
+ if (process.env.ORM_VERBOSE_LOGGING) {
30
+ console.log(statement.text);
31
+ console.log(statement.values);
32
+ }
30
33
 
31
34
  const result = await conn.query(statement);
32
35
  return params.returning
@@ -9,7 +9,7 @@ import { BaseDeleteParams } from "./types/BaseDeleteParams";
9
9
 
10
10
  export type DeleteBuilder = {
11
11
  tableIndex: number;
12
- table: { name: string; model: string; alias: string; schema: string };
12
+ table: { table: string; model: string; alias: string; schema: string };
13
13
  where: WhereClause<LooseModelDefinitions, ModelName<LooseModelDefinitions>>;
14
14
  returning: { name: string; path: string; alias: string }[];
15
15
  };
@@ -23,7 +23,7 @@ export const buildDelete = (
23
23
  const builder: DeleteBuilder = {
24
24
  tableIndex: _tableIndex,
25
25
  table: {
26
- name: config.models[m].table,
26
+ table: config.models[m].table,
27
27
  schema: config.models[m].schema,
28
28
  model: m,
29
29
  alias: tableAlias(_tableIndex++),
@@ -14,7 +14,9 @@ export const deleteResultSchema = (
14
14
 
15
15
  params.returning?.forEach((s) => {
16
16
  const col = config.models[m].columns[s];
17
- obj[s] = col.nullable ? col.zodSchema.nullable() : col.zodSchema;
17
+ obj[s] = col.nullable
18
+ ? col.zodSchema.nullish().transform((x) => x ?? null)
19
+ : col.zodSchema;
18
20
  });
19
21
 
20
22
  return z.object(obj);
@@ -16,7 +16,7 @@ export const deleteToSql = (
16
16
 
17
17
  const frag = sql`DELETE FROM %I.%I AS %I`.withIdentifiers(
18
18
  table.schema,
19
- table.name,
19
+ table.table,
20
20
  table.alias,
21
21
  );
22
22
 
@@ -9,7 +9,7 @@ export type DeleteManyResult<
9
9
  M extends ModelName<Models>,
10
10
  P extends DeleteParams<Models, M>,
11
11
  > =
12
- P["returning"] extends ReturningClause<Models, M>
12
+ P["returning"] extends ReturningClause<Models[M]>
13
13
  ? Readonly<{
14
14
  [C in P["returning"][number]]: ColumnType<Models, M, C>;
15
15
  }>[]
@@ -9,7 +9,7 @@ export type DeleteOneResult<
9
9
  M extends ModelName<Models>,
10
10
  P extends DeleteParams<Models, M>,
11
11
  > =
12
- P["returning"] extends ReturningClause<Models, M>
12
+ P["returning"] extends ReturningClause<Models[M]>
13
13
  ? Readonly<{
14
14
  [C in P["returning"][number]]: ColumnType<Models, M, C>;
15
15
  }>
@@ -8,5 +8,5 @@ export type DeleteParams<
8
8
  M extends ModelName<Models>,
9
9
  > = {
10
10
  where: WhereClause<Models, M>;
11
- returning?: ReturningClause<Models, M>;
11
+ returning?: ReturningClause<Models[M]>;
12
12
  };
@@ -21,7 +21,10 @@ export const deleteMany = async (
21
21
  values: statement.values,
22
22
  });
23
23
 
24
- if (!process.env.CI) console.log(statement.text);
24
+ if (process.env.ORM_VERBOSE_LOGGING) {
25
+ console.log(statement.text);
26
+ console.log(statement.values);
27
+ }
25
28
 
26
29
  const result = await conn.query(statement);
27
30
  return params.returning