@casekit/orm 0.0.1-alpha.1 → 0.0.1-alpha.10

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 (326) hide show
  1. package/.github/workflows/ci.yml +2 -0
  2. package/lib/migrate/commands/implode.js +1 -1
  3. package/lib/migrate/commands/implode.js.map +1 -1
  4. package/lib/migrate/sql/createTableSql.test.js +1 -0
  5. package/lib/migrate/sql/createTableSql.test.js.map +1 -1
  6. package/lib/orm.d.ts +2 -2
  7. package/lib/orm.d.ts.map +1 -1
  8. package/lib/orm.js +8 -0
  9. package/lib/orm.js.map +1 -1
  10. package/lib/queries/clauses/IncludeClause.d.ts +3 -3
  11. package/lib/queries/clauses/IncludeClause.d.ts.map +1 -1
  12. package/lib/queries/clauses/ReturningClause.d.ts +2 -3
  13. package/lib/queries/clauses/ReturningClause.d.ts.map +1 -1
  14. package/lib/queries/clauses/SelectClause.d.ts +2 -3
  15. package/lib/queries/clauses/SelectClause.d.ts.map +1 -1
  16. package/lib/queries/clauses/WhereClause.d.ts +1 -1
  17. package/lib/queries/clauses/WhereClause.d.ts.map +1 -1
  18. package/lib/queries/clauses/helpers/OptionalColumn.d.ts +5 -5
  19. package/lib/queries/clauses/helpers/OptionalColumn.d.ts.map +1 -1
  20. package/lib/queries/clauses/helpers/OptionalParams.d.ts +2 -2
  21. package/lib/queries/clauses/helpers/OptionalParams.d.ts.map +1 -1
  22. package/lib/queries/clauses/helpers/RequiredColumn.d.ts +2 -3
  23. package/lib/queries/clauses/helpers/RequiredColumn.d.ts.map +1 -1
  24. package/lib/queries/clauses/helpers/RequiredParams.d.ts +2 -2
  25. package/lib/queries/clauses/helpers/RequiredParams.d.ts.map +1 -1
  26. package/lib/queries/clauses/where/buildWhereClauses.d.ts +1 -1
  27. package/lib/queries/clauses/where/buildWhereClauses.d.ts.map +1 -1
  28. package/lib/queries/clauses/where/buildWhereClauses.js.map +1 -1
  29. package/lib/queries/clauses/where/buildWhereClauses.test.js +1 -1
  30. package/lib/queries/clauses/where/buildWhereClauses.test.js.map +1 -1
  31. package/lib/queries/clauses/where/types/WhereClauseValue.d.ts +1 -1
  32. package/lib/queries/clauses/where/types/WhereClauseValue.d.ts.map +1 -1
  33. package/lib/queries/count/buildCount.d.ts.map +1 -1
  34. package/lib/queries/count/buildCount.js +33 -29
  35. package/lib/queries/count/buildCount.js.map +1 -1
  36. package/lib/queries/count/countToSql.d.ts.map +1 -1
  37. package/lib/queries/count/countToSql.js +12 -17
  38. package/lib/queries/count/countToSql.js.map +1 -1
  39. package/lib/queries/count/types/CountBuilder.d.ts +12 -4
  40. package/lib/queries/count/types/CountBuilder.d.ts.map +1 -1
  41. package/lib/queries/count.d.ts.map +1 -1
  42. package/lib/queries/count.js +3 -1
  43. package/lib/queries/count.js.map +1 -1
  44. package/lib/queries/create/buildCreate.d.ts +4 -1
  45. package/lib/queries/create/buildCreate.d.ts.map +1 -1
  46. package/lib/queries/create/buildCreate.js +2 -1
  47. package/lib/queries/create/buildCreate.js.map +1 -1
  48. package/lib/queries/create/createResultSchema.d.ts.map +1 -1
  49. package/lib/queries/create/createResultSchema.js +3 -1
  50. package/lib/queries/create/createResultSchema.js.map +1 -1
  51. package/lib/queries/create/createToSql.d.ts.map +1 -1
  52. package/lib/queries/create/createToSql.js +5 -2
  53. package/lib/queries/create/createToSql.js.map +1 -1
  54. package/lib/queries/create/tests/createOne.test.js +53 -0
  55. package/lib/queries/create/tests/createOne.test.js.map +1 -1
  56. package/lib/queries/create/types/BaseCreateManyParams.d.ts +3 -0
  57. package/lib/queries/create/types/BaseCreateManyParams.d.ts.map +1 -1
  58. package/lib/queries/create/types/BaseCreateOneParams.d.ts +3 -0
  59. package/lib/queries/create/types/BaseCreateOneParams.d.ts.map +1 -1
  60. package/lib/queries/create/types/CreateManyParams.d.ts +4 -1
  61. package/lib/queries/create/types/CreateManyParams.d.ts.map +1 -1
  62. package/lib/queries/create/types/CreateManyResult.d.ts +1 -1
  63. package/lib/queries/create/types/CreateManyResult.d.ts.map +1 -1
  64. package/lib/queries/create/types/CreateOneParams.d.ts +4 -1
  65. package/lib/queries/create/types/CreateOneParams.d.ts.map +1 -1
  66. package/lib/queries/create/types/CreateOneResult.d.ts +1 -1
  67. package/lib/queries/create/types/CreateOneResult.d.ts.map +1 -1
  68. package/lib/queries/createMany.d.ts.map +1 -1
  69. package/lib/queries/createMany.js +3 -1
  70. package/lib/queries/createMany.js.map +1 -1
  71. package/lib/queries/createOne.d.ts.map +1 -1
  72. package/lib/queries/createOne.js +6 -0
  73. package/lib/queries/createOne.js.map +1 -1
  74. package/lib/queries/delete/buildDelete.d.ts +1 -1
  75. package/lib/queries/delete/buildDelete.d.ts.map +1 -1
  76. package/lib/queries/delete/buildDelete.js +1 -1
  77. package/lib/queries/delete/buildDelete.js.map +1 -1
  78. package/lib/queries/delete/deleteResultSchema.d.ts.map +1 -1
  79. package/lib/queries/delete/deleteResultSchema.js +3 -1
  80. package/lib/queries/delete/deleteResultSchema.js.map +1 -1
  81. package/lib/queries/delete/deleteToSql.js +1 -1
  82. package/lib/queries/delete/deleteToSql.js.map +1 -1
  83. package/lib/queries/delete/types/DeleteManyResult.d.ts +1 -1
  84. package/lib/queries/delete/types/DeleteManyResult.d.ts.map +1 -1
  85. package/lib/queries/delete/types/DeleteOneResult.d.ts +1 -1
  86. package/lib/queries/delete/types/DeleteOneResult.d.ts.map +1 -1
  87. package/lib/queries/delete/types/DeleteParams.d.ts +1 -1
  88. package/lib/queries/delete/types/DeleteParams.d.ts.map +1 -1
  89. package/lib/queries/deleteMany.d.ts.map +1 -1
  90. package/lib/queries/deleteMany.js +3 -1
  91. package/lib/queries/deleteMany.js.map +1 -1
  92. package/lib/queries/find/buildFind.d.ts.map +1 -1
  93. package/lib/queries/find/buildFind.js +35 -30
  94. package/lib/queries/find/buildFind.js.map +1 -1
  95. package/lib/queries/find/findResultSchema.d.ts.map +1 -1
  96. package/lib/queries/find/findResultSchema.js +9 -2
  97. package/lib/queries/find/findResultSchema.js.map +1 -1
  98. package/lib/queries/find/findToSql.d.ts.map +1 -1
  99. package/lib/queries/find/findToSql.js +15 -17
  100. package/lib/queries/find/findToSql.js.map +1 -1
  101. package/lib/queries/find/getIncludedManyToManyRelations.d.ts +17 -0
  102. package/lib/queries/find/getIncludedManyToManyRelations.d.ts.map +1 -0
  103. package/lib/queries/find/getIncludedManyToManyRelations.js +20 -0
  104. package/lib/queries/find/getIncludedManyToManyRelations.js.map +1 -0
  105. package/lib/queries/find/getIncludedOneToManyRelations.d.ts +12 -0
  106. package/lib/queries/find/getIncludedOneToManyRelations.d.ts.map +1 -0
  107. package/lib/queries/find/getIncludedOneToManyRelations.js +20 -0
  108. package/lib/queries/find/getIncludedOneToManyRelations.js.map +1 -0
  109. package/lib/queries/find/tests/findMany.include.test.d.ts +2 -0
  110. package/lib/queries/find/tests/findMany.include.test.d.ts.map +1 -0
  111. package/lib/queries/find/tests/findMany.include.test.js +93 -0
  112. package/lib/queries/find/tests/findMany.include.test.js.map +1 -0
  113. package/lib/queries/find/tests/findMany.nullable-relations.test.d.ts +2 -0
  114. package/lib/queries/find/tests/findMany.nullable-relations.test.d.ts.map +1 -0
  115. package/lib/queries/find/tests/findMany.nullable-relations.test.js +118 -0
  116. package/lib/queries/find/tests/findMany.nullable-relations.test.js.map +1 -0
  117. package/lib/queries/find/tests/middleware.find.where.test.js +12 -12
  118. package/lib/queries/find/tests/middleware.find.where.test.js.map +1 -1
  119. package/lib/queries/find/types/BaseFindParams.d.ts +2 -1
  120. package/lib/queries/find/types/BaseFindParams.d.ts.map +1 -1
  121. package/lib/queries/find/types/FindBuilder.d.ts +13 -4
  122. package/lib/queries/find/types/FindBuilder.d.ts.map +1 -1
  123. package/lib/queries/find/types/FindManyParams.d.ts +3 -2
  124. package/lib/queries/find/types/FindManyParams.d.ts.map +1 -1
  125. package/lib/queries/find/types/FindOneParams.d.ts +2 -1
  126. package/lib/queries/find/types/FindOneParams.d.ts.map +1 -1
  127. package/lib/queries/findMany.d.ts.map +1 -1
  128. package/lib/queries/findMany.js +59 -36
  129. package/lib/queries/findMany.js.map +1 -1
  130. package/lib/queries/middleware/Middleware.d.ts +1 -1
  131. package/lib/queries/middleware/Middleware.d.ts.map +1 -1
  132. package/lib/queries/update/buildUpdate.d.ts +2 -2
  133. package/lib/queries/update/buildUpdate.d.ts.map +1 -1
  134. package/lib/queries/update/buildUpdate.js +8 -8
  135. package/lib/queries/update/buildUpdate.js.map +1 -1
  136. package/lib/queries/update/tests/updateOne.test.js +3 -3
  137. package/lib/queries/update/tests/updateOne.test.js.map +1 -1
  138. package/lib/queries/update/types/BaseUpdateParams.d.ts +1 -1
  139. package/lib/queries/update/types/BaseUpdateParams.d.ts.map +1 -1
  140. package/lib/queries/update/types/UpdateManyResult.d.ts +1 -1
  141. package/lib/queries/update/types/UpdateManyResult.d.ts.map +1 -1
  142. package/lib/queries/update/types/UpdateOneResult.d.ts +1 -1
  143. package/lib/queries/update/types/UpdateOneResult.d.ts.map +1 -1
  144. package/lib/queries/update/types/UpdateParams.d.ts +2 -2
  145. package/lib/queries/update/types/UpdateParams.d.ts.map +1 -1
  146. package/lib/queries/update/types/UpdateValues.d.ts +1 -1
  147. package/lib/queries/update/types/UpdateValues.d.ts.map +1 -1
  148. package/lib/queries/update/updateResultSchema.d.ts.map +1 -1
  149. package/lib/queries/update/updateResultSchema.js +3 -1
  150. package/lib/queries/update/updateResultSchema.js.map +1 -1
  151. package/lib/queries/update/updateToSql.js +3 -3
  152. package/lib/queries/update/updateToSql.js.map +1 -1
  153. package/lib/queries/updateMany.d.ts.map +1 -1
  154. package/lib/queries/updateMany.js +3 -1
  155. package/lib/queries/updateMany.js.map +1 -1
  156. package/lib/queries/util/rowToObject.d.ts.map +1 -1
  157. package/lib/queries/util/rowToObject.js +1 -1
  158. package/lib/queries/util/rowToObject.js.map +1 -1
  159. package/lib/schema/populate/composeMiddleware.js +1 -1
  160. package/lib/schema/populate/composeMiddleware.js.map +1 -1
  161. package/lib/schema/populate/populateModel.d.ts.map +1 -1
  162. package/lib/schema/populate/populateModel.js +1 -0
  163. package/lib/schema/populate/populateModel.js.map +1 -1
  164. package/lib/schema/types/base/BaseColumn.d.ts +1 -0
  165. package/lib/schema/types/base/BaseColumn.d.ts.map +1 -1
  166. package/lib/schema/types/base/BaseRelation.d.ts +1 -0
  167. package/lib/schema/types/base/BaseRelation.d.ts.map +1 -1
  168. package/lib/schema/types/helpers/ColumnName.d.ts +2 -3
  169. package/lib/schema/types/helpers/ColumnName.d.ts.map +1 -1
  170. package/lib/schema/types/helpers/ColumnType.d.ts +2 -2
  171. package/lib/schema/types/helpers/ColumnType.d.ts.map +1 -1
  172. package/lib/schema/types/helpers/Columns.d.ts +2 -3
  173. package/lib/schema/types/helpers/Columns.d.ts.map +1 -1
  174. package/lib/schema/types/helpers/HasDefault.d.ts +2 -3
  175. package/lib/schema/types/helpers/HasDefault.d.ts.map +1 -1
  176. package/lib/schema/types/helpers/IsNullable.d.ts +2 -3
  177. package/lib/schema/types/helpers/IsNullable.d.ts.map +1 -1
  178. package/lib/schema/types/helpers/IsProvided.d.ts +5 -0
  179. package/lib/schema/types/helpers/IsProvided.d.ts.map +1 -0
  180. package/lib/schema/types/helpers/IsProvided.js +2 -0
  181. package/lib/schema/types/helpers/IsProvided.js.map +1 -0
  182. package/lib/schema/types/helpers/IsSerial.d.ts +2 -3
  183. package/lib/schema/types/helpers/IsSerial.d.ts.map +1 -1
  184. package/lib/schema/types/loose/LooseColumnDefinition.d.ts +5 -0
  185. package/lib/schema/types/loose/LooseColumnDefinition.d.ts.map +1 -1
  186. package/lib/schema/types/loose/LooseRelationDefinition.d.ts +1 -0
  187. package/lib/schema/types/loose/LooseRelationDefinition.d.ts.map +1 -1
  188. package/lib/schema/types/loose/LooseRelationsDefinition.d.ts +3 -1
  189. package/lib/schema/types/loose/LooseRelationsDefinition.d.ts.map +1 -1
  190. package/lib/schema/types/loose/LooseRelationsDefinitions.d.ts +1 -1
  191. package/lib/schema/types/loose/LooseRelationsDefinitions.d.ts.map +1 -1
  192. package/lib/schema/types/relations/ManyToManyRelation.d.ts +2 -2
  193. package/lib/schema/types/relations/ManyToManyRelation.d.ts.map +1 -1
  194. package/lib/schema/types/relations/ManyToOneRelation.d.ts +1 -1
  195. package/lib/schema/types/relations/ManyToOneRelation.d.ts.map +1 -1
  196. package/lib/schema/types/relations/OneToManyRelation.d.ts +2 -1
  197. package/lib/schema/types/relations/OneToManyRelation.d.ts.map +1 -1
  198. package/lib/schema/types/strict/ColumnDefinition.d.ts +5 -0
  199. package/lib/schema/types/strict/ColumnDefinition.d.ts.map +1 -1
  200. package/lib/test/db/index.d.ts +40 -0
  201. package/lib/test/db/index.d.ts.map +1 -1
  202. package/lib/test/db/models/post.model.d.ts +10 -1
  203. package/lib/test/db/models/post.model.d.ts.map +1 -1
  204. package/lib/test/db/models/post.model.js +6 -0
  205. package/lib/test/db/models/post.model.js.map +1 -1
  206. package/lib/test/db/models/post.relations.d.ts +6 -0
  207. package/lib/test/db/models/post.relations.d.ts.map +1 -1
  208. package/lib/test/db/models/post.relations.js +6 -0
  209. package/lib/test/db/models/post.relations.js.map +1 -1
  210. package/lib/test/db/models/tenant.model.d.ts +2 -2
  211. package/lib/test/db/models/tenantUser.model.d.ts +2 -2
  212. package/lib/test/db/models/user.model.d.ts +11 -2
  213. package/lib/test/db/models/user.model.d.ts.map +1 -1
  214. package/lib/test/db/models/user.model.js +6 -0
  215. package/lib/test/db/models/user.model.js.map +1 -1
  216. package/lib/test/db/models/user.relations.d.ts +16 -0
  217. package/lib/test/db/models/user.relations.d.ts.map +1 -1
  218. package/lib/test/db/models/user.relations.js +16 -0
  219. package/lib/test/db/models/user.relations.js.map +1 -1
  220. package/lib/test/db/models.d.ts +18 -0
  221. package/lib/test/db/models.d.ts.map +1 -1
  222. package/lib/test/db/relations.d.ts +22 -0
  223. package/lib/test/db/relations.d.ts.map +1 -1
  224. package/lib/test/gen/column.d.ts +1 -0
  225. package/lib/test/gen/column.d.ts.map +1 -1
  226. package/lib/test/seed/index.d.ts +40 -0
  227. package/lib/test/seed/index.d.ts.map +1 -1
  228. package/lib/types/ModelType.d.ts +10 -3
  229. package/lib/types/ModelType.d.ts.map +1 -1
  230. package/package.json +2 -2
  231. package/src/migrate/commands/implode.ts +1 -1
  232. package/src/migrate/sql/createTableSql.test.ts +1 -0
  233. package/src/orm.ts +10 -2
  234. package/src/queries/clauses/IncludeClause.ts +19 -3
  235. package/src/queries/clauses/ReturningClause.ts +4 -6
  236. package/src/queries/clauses/SelectClause.ts +4 -6
  237. package/src/queries/clauses/WhereClause.ts +1 -1
  238. package/src/queries/clauses/helpers/OptionalColumn.ts +10 -11
  239. package/src/queries/clauses/helpers/OptionalParams.ts +2 -2
  240. package/src/queries/clauses/helpers/RequiredColumn.ts +5 -6
  241. package/src/queries/clauses/helpers/RequiredParams.ts +2 -2
  242. package/src/queries/clauses/where/buildWhereClauses.test.ts +1 -1
  243. package/src/queries/clauses/where/buildWhereClauses.ts +1 -1
  244. package/src/queries/clauses/where/types/WhereClauseValue.ts +1 -1
  245. package/src/queries/count/buildCount.ts +39 -33
  246. package/src/queries/count/countToSql.ts +27 -32
  247. package/src/queries/count/types/CountBuilder.ts +23 -6
  248. package/src/queries/count.ts +3 -1
  249. package/src/queries/create/buildCreate.ts +5 -2
  250. package/src/queries/create/createResultSchema.ts +3 -1
  251. package/src/queries/create/createToSql.ts +10 -2
  252. package/src/queries/create/tests/createOne.test.ts +70 -0
  253. package/src/queries/create/types/BaseCreateManyParams.ts +1 -0
  254. package/src/queries/create/types/BaseCreateOneParams.ts +1 -0
  255. package/src/queries/create/types/CreateManyParams.ts +4 -1
  256. package/src/queries/create/types/CreateManyResult.ts +1 -1
  257. package/src/queries/create/types/CreateOneParams.ts +4 -1
  258. package/src/queries/create/types/CreateOneResult.ts +1 -1
  259. package/src/queries/createMany.ts +3 -1
  260. package/src/queries/createOne.ts +9 -0
  261. package/src/queries/delete/buildDelete.ts +2 -2
  262. package/src/queries/delete/deleteResultSchema.ts +3 -1
  263. package/src/queries/delete/deleteToSql.ts +1 -1
  264. package/src/queries/delete/types/DeleteManyResult.ts +1 -1
  265. package/src/queries/delete/types/DeleteOneResult.ts +1 -1
  266. package/src/queries/delete/types/DeleteParams.ts +1 -1
  267. package/src/queries/deleteMany.ts +3 -1
  268. package/src/queries/find/buildFind.ts +41 -34
  269. package/src/queries/find/findResultSchema.ts +9 -2
  270. package/src/queries/find/findToSql.ts +31 -32
  271. package/src/queries/find/getIncludedManyToManyRelations.ts +49 -0
  272. package/src/queries/find/getIncludedOneToManyRelations.ts +44 -0
  273. package/src/queries/find/tests/findMany.include.test.ts +107 -0
  274. package/src/queries/find/tests/findMany.nullable-relations.test.ts +127 -0
  275. package/src/queries/find/tests/middleware.find.where.test.ts +12 -12
  276. package/src/queries/find/types/BaseFindParams.ts +2 -1
  277. package/src/queries/find/types/FindBuilder.ts +25 -6
  278. package/src/queries/find/types/FindManyParams.ts +3 -2
  279. package/src/queries/find/types/FindOneParams.ts +2 -1
  280. package/src/queries/findMany.ts +87 -66
  281. package/src/queries/middleware/Middleware.ts +1 -1
  282. package/src/queries/update/buildUpdate.ts +10 -10
  283. package/src/queries/update/tests/updateOne.test.ts +3 -3
  284. package/src/queries/update/types/BaseUpdateParams.ts +1 -1
  285. package/src/queries/update/types/UpdateManyResult.ts +1 -1
  286. package/src/queries/update/types/UpdateOneResult.ts +1 -1
  287. package/src/queries/update/types/UpdateParams.ts +2 -2
  288. package/src/queries/update/types/UpdateValues.ts +1 -1
  289. package/src/queries/update/updateResultSchema.ts +3 -1
  290. package/src/queries/update/updateToSql.ts +3 -3
  291. package/src/queries/updateMany.ts +3 -1
  292. package/src/queries/util/rowToObject.ts +5 -1
  293. package/src/schema/populate/composeMiddleware.ts +1 -1
  294. package/src/schema/populate/populateModel.ts +1 -0
  295. package/src/schema/types/base/BaseColumn.ts +1 -0
  296. package/src/schema/types/base/BaseRelation.ts +1 -0
  297. package/src/schema/types/helpers/ColumnName.ts +5 -6
  298. package/src/schema/types/helpers/ColumnType.ts +2 -2
  299. package/src/schema/types/helpers/Columns.ts +2 -6
  300. package/src/schema/types/helpers/HasDefault.ts +5 -7
  301. package/src/schema/types/helpers/IsNullable.ts +4 -6
  302. package/src/schema/types/helpers/IsProvided.ts +8 -0
  303. package/src/schema/types/helpers/IsSerial.ts +4 -6
  304. package/src/schema/types/loose/LooseColumnDefinition.ts +6 -0
  305. package/src/schema/types/loose/LooseRelationDefinition.ts +1 -1
  306. package/src/schema/types/loose/LooseRelationsDefinition.ts +6 -1
  307. package/src/schema/types/loose/LooseRelationsDefinitions.ts +1 -1
  308. package/src/schema/types/relations/ManyToManyRelation.ts +2 -2
  309. package/src/schema/types/relations/ManyToOneRelation.ts +1 -1
  310. package/src/schema/types/relations/OneToManyRelation.ts +2 -1
  311. package/src/schema/types/strict/ColumnDefinition.ts +6 -0
  312. package/src/test/db/models/foo.relations.ts +1 -1
  313. package/src/test/db/models/post.model.ts +7 -1
  314. package/src/test/db/models/post.relations.ts +7 -1
  315. package/src/test/db/models/tenant.model.ts +1 -1
  316. package/src/test/db/models/tenant.relations.ts +1 -1
  317. package/src/test/db/models/tenantUser.model.ts +1 -1
  318. package/src/test/db/models/tenantUser.relations.ts +1 -1
  319. package/src/test/db/models/user.model.ts +7 -1
  320. package/src/test/db/models/user.relations.ts +17 -1
  321. package/src/types/ModelType.ts +16 -3
  322. package/lib/queries/clauses/helpers/ModelValues.d.ts +0 -8
  323. package/lib/queries/clauses/helpers/ModelValues.d.ts.map +0 -1
  324. package/lib/queries/clauses/helpers/ModelValues.js +0 -2
  325. package/lib/queries/clauses/helpers/ModelValues.js.map +0 -1
  326. package/src/queries/clauses/helpers/ModelValues.ts +0 -9
@@ -5,7 +5,7 @@ import { WhereClause } from "../../clauses/WhereClause";
5
5
 
6
6
  export type BaseFindParams = {
7
7
  select: string[];
8
- include?: Partial<Record<string, BaseFindParams>>;
8
+ include?: Partial<Record<string, Omit<BaseFindParams, "for">>>;
9
9
  where?: WhereClause<
10
10
  LooseModelDefinitions,
11
11
  ModelName<LooseModelDefinitions>
@@ -13,5 +13,6 @@ export type BaseFindParams = {
13
13
  limit?: number;
14
14
  offset?: number;
15
15
  lateralBy?: LateralByClause;
16
+ for?: "update" | "no key update" | "share" | "key share";
16
17
  orderBy?: (string | [string, "asc" | "desc"])[];
17
18
  };
@@ -12,12 +12,12 @@ export type FindBuilder = {
12
12
  path: string[];
13
13
  }[];
14
14
 
15
- tables: {
16
- name: string;
15
+ table: {
16
+ table: string;
17
17
  model: string;
18
18
  schema: string;
19
19
  alias: string;
20
- joins?: Join[];
20
+ joins: Join[];
21
21
  conditions?: WhereClause<
22
22
  LooseModelDefinitions,
23
23
  ModelName<LooseModelDefinitions>
@@ -26,7 +26,7 @@ export type FindBuilder = {
26
26
  LooseModelDefinitions,
27
27
  ModelName<LooseModelDefinitions>
28
28
  >;
29
- }[];
29
+ };
30
30
 
31
31
  lateralBy?: {
32
32
  groupTable: string;
@@ -38,6 +38,8 @@ export type FindBuilder = {
38
38
  }[];
39
39
  };
40
40
 
41
+ for?: "update" | "no key update" | "share" | "key share";
42
+
41
43
  orderBy: {
42
44
  table: string;
43
45
  column: string;
@@ -49,6 +51,23 @@ export type FindBuilder = {
49
51
  offset?: number;
50
52
  };
51
53
  export type Join = {
52
- from: { table: string; columns: string[] };
53
- to: { table: string; columns: string[] };
54
+ from: {
55
+ schema: string;
56
+ table: string;
57
+ alias: string;
58
+ model: string;
59
+ columns: string[];
60
+ };
61
+ to: {
62
+ schema: string;
63
+ table: string;
64
+ alias: string;
65
+ model: string;
66
+ columns: string[];
67
+ };
68
+ where?: WhereClause<
69
+ LooseModelDefinitions,
70
+ ModelName<LooseModelDefinitions>
71
+ >;
72
+ type?: "inner" | "left";
54
73
  };
@@ -12,12 +12,13 @@ export type FindManyParams<
12
12
  Relations extends LooseRelationsDefinitions<Models>,
13
13
  M extends ModelName<Models>,
14
14
  > = {
15
- select: SelectClause<Models, M>;
15
+ select: SelectClause<Models[M]>;
16
16
  include?: IncludeClause<Models, Relations, M>;
17
17
  where?: WhereClause<Models, M>;
18
18
  limit?: number;
19
19
  offset?: number;
20
20
  orderBy?: NonEmptyArray<
21
- ColumnName<Models, M> | [ColumnName<Models, M>, "asc" | "desc"]
21
+ ColumnName<Models[M]> | [ColumnName<Models[M]>, "asc" | "desc"]
22
22
  >;
23
+ for?: "update" | "no key update" | "share" | "key share";
23
24
  };
@@ -10,7 +10,8 @@ export type FindOneParams<
10
10
  Relations extends LooseRelationsDefinitions<Models>,
11
11
  M extends ModelName<Models>,
12
12
  > = {
13
- select: SelectClause<Models, M>;
13
+ select: SelectClause<Models[M]>;
14
14
  where?: WhereClause<Models, M>;
15
15
  include?: IncludeClause<Models, Relations, M>;
16
+ for?: "update" | "no key update" | "share" | "key share";
16
17
  };
@@ -1,4 +1,4 @@
1
- import { groupBy } from "lodash-es";
1
+ import { dropRight, get, groupBy, set } from "lodash-es";
2
2
  import hash from "object-hash";
3
3
  import { BaseConfiguration } from "src/schema/types/base/BaseConfiguration";
4
4
 
@@ -8,6 +8,8 @@ import { logger } from "../logger";
8
8
  import { ensureArray } from "../util/ensureArray";
9
9
  import { buildFind } from "./find/buildFind";
10
10
  import { findToSql } from "./find/findToSql";
11
+ import { getIncludedManyToManyRelations } from "./find/getIncludedManyToManyRelations";
12
+ import { getIncludedOneToManyRelations } from "./find/getIncludedOneToManyRelations";
11
13
  import { BaseFindParams } from "./find/types/BaseFindParams";
12
14
  import { rowToObject } from "./util/rowToObject";
13
15
 
@@ -25,89 +27,108 @@ export const findMany = async (
25
27
  values: statement.values,
26
28
  });
27
29
 
28
- if (process.env.NODE_ENV === "test" && !process.env.CI)
30
+ if (process.env.ORM_VERBOSE_LOGGING) {
29
31
  console.log(statement.text);
32
+ console.log(statement.values);
33
+ }
30
34
 
31
35
  const results = await conn
32
36
  .query(statement)
33
37
  .then((result) => result.rows.map(rowToObject(builder.columns)));
34
38
 
35
- for (const [r, subquery] of Object.entries(query.include ?? {})) {
36
- const relation = config.relations[m]![r];
37
- if (relation.type === "1:N") {
38
- const relation = config.relations[m][r];
39
-
40
- const pk = config.models[m].primaryKey;
41
- const fk = ensureArray(relation.foreignKey);
42
-
43
- const lateralBy = fk.map((c, index) => ({
44
- column: c,
45
- values: results.map((result) => result[pk[index]]),
46
- }));
47
-
48
- const subqueryResults = await findMany(
49
- conn,
50
- config,
51
- relation.model,
52
- { ...subquery!, lateralBy },
53
- );
54
-
39
+ const fetchIncludedOneToManyRelations = getIncludedOneToManyRelations(
40
+ config,
41
+ m,
42
+ query,
43
+ ).map(({ model, relation, query, path }) => {
44
+ const pk = config.models[model].primaryKey;
45
+ const fk = ensureArray(relation.foreignKey);
46
+ const lateralBy = fk.map((c, index) => ({
47
+ column: c,
48
+ values: results.map((result) =>
49
+ get(result, [...dropRight(path, 1), pk[index]]),
50
+ ),
51
+ }));
52
+ return findMany(conn, config, relation.model, {
53
+ ...query,
54
+ for: builder.for,
55
+ lateralBy,
56
+ }).then((subqueryResults) => {
55
57
  const lookup = groupBy(subqueryResults, (result) => {
56
58
  return hash(fk.map((c) => result[c]));
57
59
  });
58
-
59
60
  for (const result of results) {
60
- const key = hash(pk.map((c) => result[c]));
61
- result[r] = lookup[key] ?? [];
62
- }
63
- } else if (relation.type === "N:N") {
64
- const joinFrom = Object.entries(config.relations[m]).find(
65
- ([, rel]) =>
66
- rel.type === "1:N" && rel.model === relation.through,
67
- )?.[0];
68
-
69
- const joinTo = Object.entries(
70
- config.relations[relation.through],
71
- ).find(
72
- ([, rel]) => rel.type === "N:1" && rel.model === relation.model,
73
- )?.[0];
74
-
75
- if (joinFrom === undefined || joinTo === undefined) {
76
- throw new OrmError(
77
- "Both sides of a N:N relation must be defined",
78
- { data: { joinFrom, joinTo, query } },
79
- );
61
+ const parent =
62
+ path.length === 1
63
+ ? result
64
+ : get(result, dropRight(path, 1));
65
+ if (parent !== undefined) {
66
+ const key = hash(pk.map((c) => get(parent, c)));
67
+ set(result, path, lookup[key] ?? []);
68
+ }
80
69
  }
70
+ });
71
+ });
81
72
 
82
- const pk = config.models[m].primaryKey;
83
- const fk = ensureArray(relation.foreignKey);
84
- const lateralBy = fk.map((c, index) => ({
85
- column: c,
86
- values: results.map((result) => result[pk[index]]),
87
- }));
73
+ const fetchIncludedManyToManyRelations = getIncludedManyToManyRelations(
74
+ config,
75
+ m,
76
+ query,
77
+ ).map(({ model, relation, query, path }) => {
78
+ const joinFrom = Object.entries(config.relations[model]).find(
79
+ ([, rel]) => rel.type === "1:N" && rel.model === relation.through,
80
+ )?.[0];
81
+
82
+ const joinTo = Object.entries(config.relations[relation.through]).find(
83
+ ([, rel]) => rel.type === "N:1" && rel.model === relation.model,
84
+ )?.[0];
85
+
86
+ if (joinFrom === undefined || joinTo === undefined) {
87
+ throw new OrmError("Both sides of a N:N relation must be defined", {
88
+ data: { joinFrom, joinTo, query },
89
+ });
90
+ }
88
91
 
89
- const subqueryResults = await findMany(
90
- conn,
91
- config,
92
- relation.through,
93
- {
94
- select: ensureArray(relation.foreignKey),
95
- include: { [joinTo]: subquery! },
96
- lateralBy,
97
- },
98
- );
92
+ const pk = config.models[model].primaryKey;
93
+ const fk = ensureArray(relation.foreignKey);
94
+ const lateralBy = fk.map((c, index) => ({
95
+ column: c,
96
+ values: results.map((result) =>
97
+ get(result, [...dropRight(path, 1), pk[index]]),
98
+ ),
99
+ }));
100
+
101
+ return findMany(conn, config, relation.through, {
102
+ select: ensureArray(relation.foreignKey),
103
+ include: { [joinTo]: query },
104
+ for: builder.for,
105
+ lateralBy,
106
+ }).then((subqueryResults) => {
99
107
  const lookup = groupBy(subqueryResults, (result) => {
100
108
  return hash(fk.map((c) => result[c]));
101
109
  });
102
-
103
110
  for (const result of results) {
104
- const key = hash(pk.map((c) => result[c]));
105
- result[r] = (lookup[key] ?? []).map(
106
- (relation) => relation[joinTo] ?? [],
107
- );
111
+ const parent =
112
+ path.length === 1
113
+ ? result
114
+ : get(result, dropRight(path, 1));
115
+
116
+ if (parent !== undefined) {
117
+ const key = hash(pk.map((c) => get(parent, c)));
118
+ set(
119
+ result,
120
+ path,
121
+ (lookup[key] ?? []).map((r) => r[joinTo] ?? []),
122
+ );
123
+ }
108
124
  }
109
- }
110
- }
125
+ });
126
+ });
127
+
128
+ await Promise.all([
129
+ ...fetchIncludedOneToManyRelations,
130
+ ...fetchIncludedManyToManyRelations,
131
+ ]);
111
132
 
112
133
  return results;
113
134
  };
@@ -15,7 +15,7 @@ export type Middleware = {
15
15
  values?: ValuesMiddleware;
16
16
  };
17
17
  update?: {
18
- values?: ValuesMiddleware;
18
+ set?: ValuesMiddleware;
19
19
  where?: WhereMiddleware;
20
20
  };
21
21
  count?: {
@@ -9,9 +9,9 @@ import { BaseUpdateParams } from "./types/BaseUpdateParams";
9
9
 
10
10
  export type UpdateBuilder = {
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
- values: { name: string; value: unknown }[];
14
+ set: { name: string; value: unknown }[];
15
15
  returning: { name: string; path: string; alias: string }[];
16
16
  };
17
17
 
@@ -24,7 +24,7 @@ export const buildUpdate = (
24
24
  const builder: UpdateBuilder = {
25
25
  tableIndex: _tableIndex,
26
26
  table: {
27
- name: config.models[m].table,
27
+ table: config.models[m].table,
28
28
  schema: config.models[m].schema,
29
29
  model: m,
30
30
  alias: tableAlias(_tableIndex++),
@@ -35,19 +35,19 @@ export const buildUpdate = (
35
35
  model: m,
36
36
  })!
37
37
  : params.where!,
38
- values: [],
38
+ set: [],
39
39
  returning: [],
40
40
  };
41
41
  let colIndex = 0;
42
42
  const model = config.models[m];
43
- const values = config.middleware.update?.values
44
- ? config.middleware.update.values(params.values, {
43
+ const set = config.middleware.update?.set
44
+ ? config.middleware.update.set(params.set, {
45
45
  config,
46
46
  model: m,
47
47
  })
48
- : params.values;
48
+ : params.set;
49
49
 
50
- if (values.length === 0) {
50
+ if (set.length === 0) {
51
51
  throw new OrmError("No updates provided for update operation", {
52
52
  data: { m, model, params },
53
53
  });
@@ -59,8 +59,8 @@ export const buildUpdate = (
59
59
  });
60
60
  }
61
61
 
62
- for (const [k, v] of Object.entries(values)) {
63
- builder.values.push({
62
+ for (const [k, v] of Object.entries(set)) {
63
+ builder.set.push({
64
64
  name: model.columns[k]["name"],
65
65
  value: v,
66
66
  });
@@ -21,7 +21,7 @@ describe("updateOne", () => {
21
21
  const user = users["Stewart House"];
22
22
 
23
23
  const updated = await db.updateOne("user", {
24
- values: { username: "Stewart Home" },
24
+ set: { username: "Stewart Home" },
25
25
  where: { username: "Stewart House" },
26
26
  returning: ["id", "username"],
27
27
  });
@@ -56,7 +56,7 @@ describe("updateOne", () => {
56
56
 
57
57
  await expect(
58
58
  db.updateOne("user", {
59
- values: { username: "Stewart Home" },
59
+ set: { username: "Stewart Home" },
60
60
  where: { username: "Stewart Wrong" },
61
61
  returning: ["id", "username"],
62
62
  }),
@@ -91,7 +91,7 @@ describe("updateOne", () => {
91
91
 
92
92
  await expect(
93
93
  db.updateOne("user", {
94
- values: { joinedAt: new Date("2021-01-04") },
94
+ set: { joinedAt: new Date("2021-01-04") },
95
95
  where: { username: { [$like]: "Stewart %" } },
96
96
  returning: ["id", "username"],
97
97
  }),
@@ -4,7 +4,7 @@ import { NonEmptyArray } from "../../../types/util/NonEmptyArray";
4
4
  import { WhereClause } from "../../clauses/WhereClause";
5
5
 
6
6
  export type BaseUpdateParams = {
7
- values: Record<string, unknown | null>;
7
+ set: Record<string, unknown | null>;
8
8
  where: WhereClause<LooseModelDefinitions, ModelName<LooseModelDefinitions>>;
9
9
  returning?: NonEmptyArray<string>;
10
10
  };
@@ -9,7 +9,7 @@ export type UpdateManyResult<
9
9
  M extends ModelName<Models>,
10
10
  P extends UpdateParams<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 UpdateOneResult<
9
9
  M extends ModelName<Models>,
10
10
  P extends UpdateParams<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,7 +8,7 @@ export type UpdateParams<
8
8
  Models extends LooseModelDefinitions,
9
9
  M extends ModelName<Models>,
10
10
  > = {
11
- values: UpdateValues<Models, M>;
11
+ set: UpdateValues<Models, M>;
12
12
  where: WhereClause<Models, M>;
13
- returning?: ReturningClause<Models, M>;
13
+ returning?: ReturningClause<Models[M]>;
14
14
  };
@@ -8,5 +8,5 @@ export type UpdateValues<
8
8
  Models extends LooseModelDefinitions,
9
9
  M extends ModelName<Models>,
10
10
  > = Simplify<{
11
- [C in ColumnName<Models, M>]?: ColumnType<Models, M, C>;
11
+ [C in ColumnName<Models[M]>]?: ColumnType<Models, M, C>;
12
12
  }>;
@@ -14,7 +14,9 @@ export const updateResultSchema = (
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);
@@ -10,15 +10,15 @@ export const updateToSql = (
10
10
  m: string,
11
11
  builder: UpdateBuilder,
12
12
  ): SQLStatement => {
13
- const { table, where, values: update, returning } = builder;
13
+ const { table, where, set, returning } = builder;
14
14
 
15
15
  const frag = sql`UPDATE %I.%I AS %I\nSET`.withIdentifiers(
16
16
  table.schema,
17
- table.name,
17
+ table.table,
18
18
  table.alias,
19
19
  );
20
20
 
21
- const fields = update.map((field) => {
21
+ const fields = set.map((field) => {
22
22
  return sql`\n %I = ${field.value}`.withIdentifiers(field.name);
23
23
  });
24
24
 
@@ -21,8 +21,10 @@ export const updateMany = async (
21
21
  values: statement.values,
22
22
  });
23
23
 
24
- if (process.env.NODE_ENV === "test" && !process.env.CI)
24
+ if (process.env.ORM_VERBOSE_LOGGING) {
25
25
  console.log(statement.text);
26
+ console.log(statement.values);
27
+ }
26
28
 
27
29
  const result = await conn.query(statement);
28
30
  return params.returning
@@ -5,5 +5,9 @@ export type ColumnMapping = { path: string | string[]; alias: string };
5
5
  export const rowToObject =
6
6
  (columns: ColumnMapping[]) =>
7
7
  (row: Record<string, unknown>): Record<string, unknown> => {
8
- return columns.reduce((acc, c) => set(acc, c.path, row[c.alias]), {});
8
+ return columns.reduce(
9
+ (acc, c) =>
10
+ row[c.alias] !== null ? set(acc, c.path, row[c.alias]) : acc,
11
+ {},
12
+ );
9
13
  };
@@ -27,7 +27,7 @@ export const composeMiddleware = (middleware: Middleware[]): Middleware => {
27
27
  values: compose(...middleware.map((m) => m.create?.values), values),
28
28
  },
29
29
  update: {
30
- values: compose(...middleware.map((m) => m.update?.values), values),
30
+ set: compose(...middleware.map((m) => m.update?.set), values),
31
31
  where: compose(...middleware.map((m) => m.update?.where), where),
32
32
  },
33
33
  delete: {
@@ -18,6 +18,7 @@ export const populateModel = (
18
18
  zodSchema: column.zodSchema ?? suggestedColumnSchema(column.type),
19
19
  nullable: column.nullable ?? false,
20
20
  default: column.default ?? null,
21
+ provided: column.provided ?? false,
21
22
  }));
22
23
 
23
24
  const primaryKey =
@@ -6,4 +6,5 @@ export type BaseColumn = {
6
6
  zodSchema: z.ZodType<unknown>;
7
7
  nullable: boolean;
8
8
  default?: unknown;
9
+ provided: boolean;
9
10
  };
@@ -10,6 +10,7 @@ export type BaseRelation =
10
10
  model: string;
11
11
  type: "N:1";
12
12
  foreignKey: string | string[];
13
+ optional?: boolean;
13
14
  }
14
15
  | {
15
16
  model: string;
@@ -1,7 +1,6 @@
1
- import { LooseModelDefinitions } from "../loose/LooseModelDefinitions";
2
- import { ModelName } from "./ModelName";
1
+ import { LooseModelDefinition } from "../loose/LooseModelDefinition";
3
2
 
4
- export type ColumnName<
5
- Models extends LooseModelDefinitions,
6
- M extends ModelName<Models>,
7
- > = Extract<keyof Models[M]["columns"], string>;
3
+ export type ColumnName<Model extends LooseModelDefinition> = Extract<
4
+ keyof Model["columns"],
5
+ string
6
+ >;
@@ -8,7 +8,7 @@ import { ModelName } from "./ModelName";
8
8
  type NonNullableColumnType<
9
9
  Models extends LooseModelDefinitions,
10
10
  M extends ModelName<Models>,
11
- C extends ColumnName<Models, M>,
11
+ C extends ColumnName<Models[M]>,
12
12
  > =
13
13
  Models[M]["columns"][C]["zodSchema"] extends z.ZodType<unknown>
14
14
  ? z.infer<Models[M]["columns"][C]["zodSchema"]>
@@ -17,7 +17,7 @@ type NonNullableColumnType<
17
17
  export type ColumnType<
18
18
  Models extends LooseModelDefinitions,
19
19
  M extends ModelName<Models>,
20
- C extends ColumnName<Models, M>,
20
+ C extends ColumnName<Models[M]>,
21
21
  > = Models[M]["columns"][C]["nullable"] extends true
22
22
  ? NonNullableColumnType<Models, M, C> | null
23
23
  : NonNullableColumnType<Models, M, C>;
@@ -1,7 +1,3 @@
1
- import { LooseModelDefinitions } from "../loose/LooseModelDefinitions";
2
- import { ModelName } from "./ModelName";
1
+ import { LooseModelDefinition } from "../loose/LooseModelDefinition";
3
2
 
4
- export type Columns<
5
- Models extends LooseModelDefinitions,
6
- M extends ModelName<Models>,
7
- > = Models[M]["columns"];
3
+ export type Columns<Model extends LooseModelDefinition> = Model["columns"];
@@ -1,13 +1,11 @@
1
- import { LooseModelDefinitions } from "../loose/LooseModelDefinitions";
1
+ import { LooseModelDefinition } from "../loose/LooseModelDefinition";
2
2
  import { Columns } from "./Columns";
3
- import { ModelName } from "./ModelName";
4
3
 
5
4
  export type HasDefault<
6
- Models extends LooseModelDefinitions,
7
- M extends ModelName<Models>,
8
- C extends keyof Columns<Models, M>,
9
- > = null extends Columns<Models, M>[C]["default"]
5
+ Model extends LooseModelDefinition,
6
+ C extends keyof Columns<Model>,
7
+ > = null extends Columns<Model>[C]["default"]
10
8
  ? false
11
- : undefined extends Columns<Models, M>[C]["default"]
9
+ : undefined extends Columns<Model>[C]["default"]
12
10
  ? false
13
11
  : true;
@@ -1,9 +1,7 @@
1
- import { LooseModelDefinitions } from "../loose/LooseModelDefinitions";
1
+ import { LooseModelDefinition } from "../loose/LooseModelDefinition";
2
2
  import { Columns } from "./Columns";
3
- import { ModelName } from "./ModelName";
4
3
 
5
4
  export type IsNullable<
6
- Models extends LooseModelDefinitions,
7
- M extends ModelName<Models>,
8
- C extends keyof Columns<Models, M>,
9
- > = Columns<Models, M>[C]["nullable"] extends true ? true : false;
5
+ Model extends LooseModelDefinition,
6
+ C extends keyof Columns<Model>,
7
+ > = Columns<Model>[C]["nullable"] extends true ? true : false;
@@ -0,0 +1,8 @@
1
+ import { LooseModelDefinition } from "../loose/LooseModelDefinition";
2
+ import { ColumnName } from "./ColumnName";
3
+ import { Columns } from "./Columns";
4
+
5
+ export type IsProvided<
6
+ Model extends LooseModelDefinition,
7
+ C extends ColumnName<Model>,
8
+ > = Columns<Model>[C]["provided"];
@@ -1,12 +1,10 @@
1
- import { LooseModelDefinitions } from "../loose/LooseModelDefinitions";
1
+ import { LooseModelDefinition } from "../loose/LooseModelDefinition";
2
2
  import { ColumnName } from "./ColumnName";
3
3
  import { Columns } from "./Columns";
4
- import { ModelName } from "./ModelName";
5
4
 
6
5
  export type IsSerial<
7
- Models extends LooseModelDefinitions,
8
- M extends ModelName<Models>,
9
- C extends ColumnName<Models, M>,
10
- > = Columns<Models, M>[C]["type"] extends "serial" | "bigserial" | "smallserial"
6
+ Model extends LooseModelDefinition,
7
+ C extends ColumnName<Model>,
8
+ > = Columns<Model>[C]["type"] extends "serial" | "bigserial" | "smallserial"
11
9
  ? true
12
10
  : false;
@@ -71,4 +71,10 @@ export type LooseColumnDefinition<ColumnType = unknown> = {
71
71
  onUpdate?: SQLStatement;
72
72
  onDelete?: SQLStatement;
73
73
  };
74
+
75
+ /**
76
+ * Is this column provided by middleware? If so, it will not be included in
77
+ * the set of required columns for inserts and updates.
78
+ */
79
+ provided?: boolean;
74
80
  };