orange-orm 3.10.2

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 (459) hide show
  1. package/.dockerignore +1 -0
  2. package/.eslintignore +2 -0
  3. package/.eslintrc.js +45 -0
  4. package/.gitattributes +3 -0
  5. package/CNAME +1 -0
  6. package/CONTRIBUTING.md +43 -0
  7. package/LICENSE +7 -0
  8. package/README.md +1969 -0
  9. package/SECURITY.md +12 -0
  10. package/bin/build.js +127 -0
  11. package/bin/compile.js +26 -0
  12. package/bin/rdb.js +4 -0
  13. package/docs/CODE_OF_CONDUCT.md +18 -0
  14. package/docs/changelog.md +461 -0
  15. package/docs/docs.md +2373 -0
  16. package/docs/orange.svg +32 -0
  17. package/docs/relations.png +0 -0
  18. package/package.json +139 -0
  19. package/src/applyPatch.js +105 -0
  20. package/src/client/axiosInterceptor.js +46 -0
  21. package/src/client/clientMap.js +72 -0
  22. package/src/client/createPatch.js +122 -0
  23. package/src/client/createProviders.js +121 -0
  24. package/src/client/index.js +997 -0
  25. package/src/client/index.mjs +6295 -0
  26. package/src/client/map.js +110 -0
  27. package/src/client/merge.js +9 -0
  28. package/src/client/netAdapter.js +133 -0
  29. package/src/client/rollup.config.js +12 -0
  30. package/src/client/self.js +4 -0
  31. package/src/client/stringify.js +22 -0
  32. package/src/client/toKeyPositionMap.js +30 -0
  33. package/src/clsTest.js +79 -0
  34. package/src/createDomain/negotiateForwardProperty.js +23 -0
  35. package/src/createDomain.js +31 -0
  36. package/src/dateToISOString.js +25 -0
  37. package/src/emitEvent.js +46 -0
  38. package/src/emptyFilter.js +35 -0
  39. package/src/flags.js +6 -0
  40. package/src/fromCompareObject.js +24 -0
  41. package/src/generic-pool.js +641 -0
  42. package/src/getManyDto/newQuery.js +18 -0
  43. package/src/getManyDto/query/newColumnSql.js +8 -0
  44. package/src/getManyDto/query/newSingleQuery.js +19 -0
  45. package/src/getManyDto/query/singleQuery/newJoinedColumnSql.js +25 -0
  46. package/src/getManyDto/query/singleQuery/newShallowColumnSql.js +25 -0
  47. package/src/getManyDto.js +255 -0
  48. package/src/getTSDefinition.js +510 -0
  49. package/src/hostExpress/executePath.js +433 -0
  50. package/src/hostExpress/getMeta.js +49 -0
  51. package/src/hostExpress.js +125 -0
  52. package/src/hostLocal.js +110 -0
  53. package/src/index.d.ts +324 -0
  54. package/src/index.js +116 -0
  55. package/src/jsconfig.json +8 -0
  56. package/src/lock/toIntKey.js +35 -0
  57. package/src/lock.js +26 -0
  58. package/src/map.d.ts +1729 -0
  59. package/src/mssql/encodeBuffer.js +7 -0
  60. package/src/mssql/newDatabase.js +129 -0
  61. package/src/mssql/newPool.js +19 -0
  62. package/src/mssql/newTransaction.js +69 -0
  63. package/src/mssql/pool/defaults.js +45 -0
  64. package/src/mssql/pool/end.js +13 -0
  65. package/src/mssql/pool/newGenericPool.js +62 -0
  66. package/src/mssql/wrapQuery.js +34 -0
  67. package/src/mySql/deleteFromSql.js +8 -0
  68. package/src/mySql/encodeBoolean.js +7 -0
  69. package/src/mySql/insert.js +21 -0
  70. package/src/mySql/insertSql.js +62 -0
  71. package/src/mySql/lastInsertedSql.js +11 -0
  72. package/src/mySql/limitAndOffset.js +18 -0
  73. package/src/mySql/newDatabase.js +127 -0
  74. package/src/mySql/newPool.js +19 -0
  75. package/src/mySql/newTransaction.js +54 -0
  76. package/src/mySql/pool/defaults.js +16 -0
  77. package/src/mySql/pool/end.js +13 -0
  78. package/src/mySql/pool/negotiatePoolOptions.js +12 -0
  79. package/src/mySql/pool/newGenericPool.js +67 -0
  80. package/src/mySql/selectForUpdateSql.js +3 -0
  81. package/src/mySql/wrapQuery.js +16 -0
  82. package/src/mySql/wrapQueryStream.js +9 -0
  83. package/src/newArray.js +3 -0
  84. package/src/newCollection.js +55 -0
  85. package/src/newId.js +1 -0
  86. package/src/newImmutable.js +22 -0
  87. package/src/newObject.js +5 -0
  88. package/src/oracle/deleteFromSql.js +8 -0
  89. package/src/oracle/encodeBoolean.js +7 -0
  90. package/src/oracle/encodeBuffer.js +7 -0
  91. package/src/oracle/encodeDate.js +7 -0
  92. package/src/oracle/formatDateIn.js +5 -0
  93. package/src/oracle/formatDateOut.js +5 -0
  94. package/src/oracle/insert.js +23 -0
  95. package/src/oracle/insertSql.js +73 -0
  96. package/src/oracle/lastInsertedSql.js +14 -0
  97. package/src/oracle/limitAndOffset.js +18 -0
  98. package/src/oracle/mergeSql.js +79 -0
  99. package/src/oracle/newDatabase.js +128 -0
  100. package/src/oracle/newInsertCommandCore.js +27 -0
  101. package/src/oracle/newPool.js +19 -0
  102. package/src/oracle/newTransaction.js +63 -0
  103. package/src/oracle/outputInsertedSql.js +5 -0
  104. package/src/oracle/pool/defaults.js +45 -0
  105. package/src/oracle/pool/end.js +13 -0
  106. package/src/oracle/pool/newGenericPool.js +64 -0
  107. package/src/oracle/replaceParamChar.js +14 -0
  108. package/src/oracle/selectForUpdateSql.js +3 -0
  109. package/src/oracle/wrapQuery.js +38 -0
  110. package/src/patchRow.js +13 -0
  111. package/src/patchTable.js +317 -0
  112. package/src/pg/deleteFromSql.js +8 -0
  113. package/src/pg/encodeBoolean.js +5 -0
  114. package/src/pg/encodeDate.js +7 -0
  115. package/src/pg/encodeJSON.js +15 -0
  116. package/src/pg/formatDateOut.js +5 -0
  117. package/src/pg/insert.js +14 -0
  118. package/src/pg/insertSql.js +70 -0
  119. package/src/pg/lastInsertedSql.js +11 -0
  120. package/src/pg/limitAndOffset.js +18 -0
  121. package/src/pg/newDatabase.js +153 -0
  122. package/src/pg/newPool.js +19 -0
  123. package/src/pg/newStreamableQuery.js +7 -0
  124. package/src/pg/newTransaction.js +58 -0
  125. package/src/pg/pool/defaults.js +45 -0
  126. package/src/pg/pool/end.js +13 -0
  127. package/src/pg/pool/newPgPool.js +82 -0
  128. package/src/pg/replaceParamChar.js +14 -0
  129. package/src/pg/schema.js +11 -0
  130. package/src/pg/selectForUpdateSql.js +3 -0
  131. package/src/pg/wrapQuery.js +33 -0
  132. package/src/pg/wrapQueryStream.js +20 -0
  133. package/src/pools.js +17 -0
  134. package/src/query/negotiateParameters.js +10 -0
  135. package/src/query/negotiateSql.js +14 -0
  136. package/src/query/wrapQuery.js +17 -0
  137. package/src/query.js +13 -0
  138. package/src/sap/deleteFromSql.js +8 -0
  139. package/src/sap/encodeBoolean.js +7 -0
  140. package/src/sap/encodeBuffer.js +7 -0
  141. package/src/sap/formatDateOut.js +5 -0
  142. package/src/sap/insert.js +21 -0
  143. package/src/sap/insertSql.js +64 -0
  144. package/src/sap/lastInsertedSql.js +12 -0
  145. package/src/sap/limitAndOffset.js +16 -0
  146. package/src/sap/mergeSql.js +73 -0
  147. package/src/sap/newDatabase.js +129 -0
  148. package/src/sap/newPool.js +19 -0
  149. package/src/sap/newTransaction.js +69 -0
  150. package/src/sap/pool/end.js +13 -0
  151. package/src/sap/selectForUpdateSql.js +3 -0
  152. package/src/sqlite/deleteFromSql.js +8 -0
  153. package/src/sqlite/encodeBoolean.js +7 -0
  154. package/src/sqlite/encodeBuffer.js +7 -0
  155. package/src/sqlite/insert.js +21 -0
  156. package/src/sqlite/insertSql.js +64 -0
  157. package/src/sqlite/lastInsertedSql.js +12 -0
  158. package/src/sqlite/limitAndOffset.js +18 -0
  159. package/src/sqlite/newDatabase.js +128 -0
  160. package/src/sqlite/newPool.js +19 -0
  161. package/src/sqlite/newTransaction.js +58 -0
  162. package/src/sqlite/pool/defaults.js +45 -0
  163. package/src/sqlite/pool/end.js +13 -0
  164. package/src/sqlite/pool/newGenericPool.js +59 -0
  165. package/src/sqlite/selectForUpdateSql.js +3 -0
  166. package/src/sqlite/wrapQuery.js +24 -0
  167. package/src/table/aggregate.js +9 -0
  168. package/src/table/begin.js +10 -0
  169. package/src/table/cascadeDelete.js +11 -0
  170. package/src/table/cloneStrategy.js +18 -0
  171. package/src/table/column/binary/newDecode.js +15 -0
  172. package/src/table/column/binary/newEncode.js +23 -0
  173. package/src/table/column/binary/purify.js +12 -0
  174. package/src/table/column/binary.js +12 -0
  175. package/src/table/column/boolean/newDecode.js +12 -0
  176. package/src/table/column/boolean/newEncode.js +36 -0
  177. package/src/table/column/boolean/purify.js +7 -0
  178. package/src/table/column/boolean.js +14 -0
  179. package/src/table/column/date/formatOut.js +11 -0
  180. package/src/table/column/date/newDecode.js +17 -0
  181. package/src/table/column/date/newEncode.js +47 -0
  182. package/src/table/column/date/purify.js +17 -0
  183. package/src/table/column/date/toISOString.js +25 -0
  184. package/src/table/column/date/tryParseISO.js +14 -0
  185. package/src/table/column/date.js +14 -0
  186. package/src/table/column/dateWithTimeZone/newEncode.js +41 -0
  187. package/src/table/column/dateWithTimeZone.js +14 -0
  188. package/src/table/column/encodeFilterArg.js +8 -0
  189. package/src/table/column/equal.js +15 -0
  190. package/src/table/column/extractAlias.js +7 -0
  191. package/src/table/column/greaterThan.js +12 -0
  192. package/src/table/column/greaterThanOrEqual.js +12 -0
  193. package/src/table/column/guid/newDecode.js +10 -0
  194. package/src/table/column/guid/newEncode.js +30 -0
  195. package/src/table/column/guid/purify.js +10 -0
  196. package/src/table/column/guid.js +12 -0
  197. package/src/table/column/in.js +24 -0
  198. package/src/table/column/json/formatOut.js +11 -0
  199. package/src/table/column/json/newDecode.js +21 -0
  200. package/src/table/column/json/newEncode.js +41 -0
  201. package/src/table/column/json/purify.js +7 -0
  202. package/src/table/column/json.js +22 -0
  203. package/src/table/column/lessThan.js +12 -0
  204. package/src/table/column/lessThanOrEqual.js +12 -0
  205. package/src/table/column/negotiateNextAndFilter.js +7 -0
  206. package/src/table/column/negotiateNextOrFilter.js +7 -0
  207. package/src/table/column/negotiateRawSqlFilter.js +74 -0
  208. package/src/table/column/newBoolean.js +54 -0
  209. package/src/table/column/newColumn.js +89 -0
  210. package/src/table/column/newDecodeCore.js +10 -0
  211. package/src/table/column/notEqual.js +15 -0
  212. package/src/table/column/numeric/negotiateDefault.js +5 -0
  213. package/src/table/column/numeric/newDecode.js +16 -0
  214. package/src/table/column/numeric/newEncode.js +25 -0
  215. package/src/table/column/numeric/purify.js +12 -0
  216. package/src/table/column/numeric.js +15 -0
  217. package/src/table/column/string/contains.js +3 -0
  218. package/src/table/column/string/containsCore.js +16 -0
  219. package/src/table/column/string/endsWith.js +3 -0
  220. package/src/table/column/string/endsWithCore.js +16 -0
  221. package/src/table/column/string/iContains.js +3 -0
  222. package/src/table/column/string/iEndsWith.js +3 -0
  223. package/src/table/column/string/iEqual.js +15 -0
  224. package/src/table/column/string/iStartsWith.js +3 -0
  225. package/src/table/column/string/newEncode.js +31 -0
  226. package/src/table/column/string/purify.js +7 -0
  227. package/src/table/column/string/startsWith.js +3 -0
  228. package/src/table/column/string/startsWithCore.js +16 -0
  229. package/src/table/column/string.js +55 -0
  230. package/src/table/column.js +154 -0
  231. package/src/table/commands/beginCommand.js +13 -0
  232. package/src/table/commands/commitCommand.js +9 -0
  233. package/src/table/commands/compressChanges.js +25 -0
  234. package/src/table/commands/delete/createAlias.js +6 -0
  235. package/src/table/commands/delete/newSingleCommand.js +17 -0
  236. package/src/table/commands/delete/singleCommand/joinSql.js +26 -0
  237. package/src/table/commands/delete/singleCommand/newSingleCommandCore.js +19 -0
  238. package/src/table/commands/delete/singleCommand/selectSql.js +11 -0
  239. package/src/table/commands/delete/singleCommand/subFilter.js +19 -0
  240. package/src/table/commands/delete/singleCommand/whereSql.js +25 -0
  241. package/src/table/commands/getChangeSet.js +6 -0
  242. package/src/table/commands/insert/getSqlTemplate.js +68 -0
  243. package/src/table/commands/lastCommandMatches.js +11 -0
  244. package/src/table/commands/negotiateEndEdit.js +7 -0
  245. package/src/table/commands/newDeleteCommand.js +23 -0
  246. package/src/table/commands/newGetLastInsertedCommand.js +49 -0
  247. package/src/table/commands/newGetLastInsertedCommandCore.js +42 -0
  248. package/src/table/commands/newInsertAndForgetCommand.js +55 -0
  249. package/src/table/commands/newInsertCommand.js +56 -0
  250. package/src/table/commands/newInsertCommandCore.js +27 -0
  251. package/src/table/commands/newRow.js +51 -0
  252. package/src/table/commands/newUpdateCommand.js +62 -0
  253. package/src/table/commands/newUpdateCommandCore.js +45 -0
  254. package/src/table/commands/pushCommand.js +10 -0
  255. package/src/table/commands/rollbackCommand.js +13 -0
  256. package/src/table/commit.js +30 -0
  257. package/src/table/count.js +29 -0
  258. package/src/table/createJSONReadStream.js +7 -0
  259. package/src/table/createJSONReadStreamDefault.js +33 -0
  260. package/src/table/createJSONReadStreamNative.js +31 -0
  261. package/src/table/createReadStream.js +24 -0
  262. package/src/table/createReadStreamCoreNative.js +40 -0
  263. package/src/table/createReadStreamDefault.js +102 -0
  264. package/src/table/createReadStreamNative.js +17 -0
  265. package/src/table/delete.js +20 -0
  266. package/src/table/deleteSessionContext.js +17 -0
  267. package/src/table/encodeDbSpecific.js +10 -0
  268. package/src/table/executeQueries/executeChanges.js +35 -0
  269. package/src/table/executeQueries/executeQueriesCore.js +12 -0
  270. package/src/table/executeQueries/executeQuery.js +8 -0
  271. package/src/table/executeQueries/resolveExecuteQuery.js +57 -0
  272. package/src/table/executeQueries.js +15 -0
  273. package/src/table/extractDeleteStrategy.js +9 -0
  274. package/src/table/fuzzyPromise.js +18 -0
  275. package/src/table/getById.js +33 -0
  276. package/src/table/getFirstFromDb.js +10 -0
  277. package/src/table/getFromDbById.js +17 -0
  278. package/src/table/getIdArgs.js +14 -0
  279. package/src/table/getMany.js +26 -0
  280. package/src/table/getManyDto/newQuery.js +32 -0
  281. package/src/table/getManyDto/pg/newQuery.js +8 -0
  282. package/src/table/getManyDto.js +10 -0
  283. package/src/table/getManyDtoFast/getSubRows.js +172 -0
  284. package/src/table/getManyDtoFast/newQuery.js +8 -0
  285. package/src/table/getManyDtoFast/newQueryCore.js +18 -0
  286. package/src/table/getManyDtoFast/query/newSingleQuery.js +20 -0
  287. package/src/table/getManyDtoFast/query/newSubQueries/joinLegToQuery.js +18 -0
  288. package/src/table/getManyDtoFast/query/newSubQueries/manyLegToQuery.js +20 -0
  289. package/src/table/getManyDtoFast/query/newSubQueries/oneLegToQuery.js +21 -0
  290. package/src/table/getManyDtoFast/query/newSubQueries.js +47 -0
  291. package/src/table/getManyDtoFast/query/singleQuery/newShallowColumnSql.js +21 -0
  292. package/src/table/getSessionContext.js +10 -0
  293. package/src/table/getSessionSingleton.js +5 -0
  294. package/src/table/groupBy/newQuery.js +25 -0
  295. package/src/table/groupBy.js +65 -0
  296. package/src/table/hasMany.js +33 -0
  297. package/src/table/hasOne.js +33 -0
  298. package/src/table/insert.js +91 -0
  299. package/src/table/insertDefault.js +88 -0
  300. package/src/table/join.js +42 -0
  301. package/src/table/joinRelation/getRelatives.js +64 -0
  302. package/src/table/log.js +39 -0
  303. package/src/table/negotiateAddStrategy.js +20 -0
  304. package/src/table/negotiateExpandInverse.js +13 -0
  305. package/src/table/newCache.js +96 -0
  306. package/src/table/newCascadeDeleteStrategy.js +30 -0
  307. package/src/table/newGetRelated.js +21 -0
  308. package/src/table/newJoinRelation.js +117 -0
  309. package/src/table/newManyRelation.js +61 -0
  310. package/src/table/newOneRelation.js +61 -0
  311. package/src/table/newPrimaryKeyFilter.js +13 -0
  312. package/src/table/newQuery.js +18 -0
  313. package/src/table/newRelatedTable.js +100 -0
  314. package/src/table/newRowCache.js +106 -0
  315. package/src/table/newThrow.js +11 -0
  316. package/src/table/nullPromise.js +1 -0
  317. package/src/table/objectToCallback.js +7 -0
  318. package/src/table/oneRelation/getRelatives.js +45 -0
  319. package/src/table/popChanges.js +19 -0
  320. package/src/table/promise.js +14 -0
  321. package/src/table/purifyStrategy.js +49 -0
  322. package/src/table/query/extractFilter.js +9 -0
  323. package/src/table/query/extractLimit.js +11 -0
  324. package/src/table/query/extractLimitQuery.js +23 -0
  325. package/src/table/query/extractOffset.js +11 -0
  326. package/src/table/query/extractOrderBy.js +57 -0
  327. package/src/table/query/extractSql.js +10 -0
  328. package/src/table/query/newParameterized.js +38 -0
  329. package/src/table/query/newSingleQuery.js +23 -0
  330. package/src/table/query/parameterized/extractParameters.js +8 -0
  331. package/src/table/query/singleQuery/columnSql/joinLegToColumnSql.js +16 -0
  332. package/src/table/query/singleQuery/columnSql/newJoinedColumnSql.js +27 -0
  333. package/src/table/query/singleQuery/columnSql/newShallowColumnSql.js +37 -0
  334. package/src/table/query/singleQuery/joinSql/joinLegToJoinSql.js +13 -0
  335. package/src/table/query/singleQuery/joinSql/joinLegToShallowJoinSql.js +9 -0
  336. package/src/table/query/singleQuery/joinSql/newDiscriminatorSql.js +11 -0
  337. package/src/table/query/singleQuery/joinSql/newShallowJoinSql.js +9 -0
  338. package/src/table/query/singleQuery/joinSql/newShallowJoinSqlCore.js +25 -0
  339. package/src/table/query/singleQuery/joinSql/oneLegToJoinSql.js +13 -0
  340. package/src/table/query/singleQuery/joinSql/oneLegToShallowJoinSql.js +10 -0
  341. package/src/table/query/singleQuery/negotiateExclusive.js +11 -0
  342. package/src/table/query/singleQuery/negotiateLimit.js +10 -0
  343. package/src/table/query/singleQuery/newColumnSql.js +8 -0
  344. package/src/table/query/singleQuery/newDiscriminatorSql.js +33 -0
  345. package/src/table/query/singleQuery/newJoinSql.js +41 -0
  346. package/src/table/query/singleQuery/newQueryContext.js +20 -0
  347. package/src/table/query/singleQuery/newWhereSql.js +19 -0
  348. package/src/table/readStream/extractLimit.js +7 -0
  349. package/src/table/readStream/extractOrderBy.js +55 -0
  350. package/src/table/readStream/mySql/newQuery.js +16 -0
  351. package/src/table/readStream/mySql/query/newSingleQuery.js +21 -0
  352. package/src/table/readStream/mySql/query/newSubQueries/joinLegToQuery.js +19 -0
  353. package/src/table/readStream/mySql/query/newSubQueries/manyLegToQuery.js +22 -0
  354. package/src/table/readStream/mySql/query/newSubQueries/newQueryCore.js +9 -0
  355. package/src/table/readStream/mySql/query/newSubQueries/newSingleQueryCore.js +18 -0
  356. package/src/table/readStream/mySql/query/newSubQueries/oneLegToQuery.js +22 -0
  357. package/src/table/readStream/mySql/query/newSubQueries.js +47 -0
  358. package/src/table/readStream/mySql/query/singleQuery/newShallowColumnSql.js +17 -0
  359. package/src/table/readStream/newQuery.js +32 -0
  360. package/src/table/readStream/newQueryStream.js +8 -0
  361. package/src/table/readStream/pg/newQuery.js +8 -0
  362. package/src/table/readStream/pg/newQueryCore.js +17 -0
  363. package/src/table/readStream/pg/query/newSingleQuery.js +19 -0
  364. package/src/table/readStream/pg/query/newSubQueries/joinLegToQuery.js +19 -0
  365. package/src/table/readStream/pg/query/newSubQueries/manyLegToQuery.js +22 -0
  366. package/src/table/readStream/pg/query/newSubQueries/oneLegToQuery.js +19 -0
  367. package/src/table/readStream/pg/query/newSubQueries.js +47 -0
  368. package/src/table/readStream/pg/query/singleQuery/newShallowColumnSql.js +19 -0
  369. package/src/table/readStreamDefault/createBatchFilter.js +39 -0
  370. package/src/table/relatedTable/aggregate/aggregateJoinSql.js +37 -0
  371. package/src/table/relatedTable/aggregate/joinSql.js +38 -0
  372. package/src/table/relatedTable/aggregate.js +48 -0
  373. package/src/table/relatedTable/all.js +24 -0
  374. package/src/table/relatedTable/any.js +70 -0
  375. package/src/table/relatedTable/childColumn.js +61 -0
  376. package/src/table/relatedTable/columnAggregate.js +16 -0
  377. package/src/table/relatedTable/columnAggregateGroup.js +59 -0
  378. package/src/table/relatedTable/joinSql.js +40 -0
  379. package/src/table/relatedTable/joinSqlArray.js +32 -0
  380. package/src/table/relatedTable/none.js +22 -0
  381. package/src/table/relatedTable/relatedColumn.js +49 -0
  382. package/src/table/relatedTable/relationFilter.js +16 -0
  383. package/src/table/relatedTable/selectSql.js +11 -0
  384. package/src/table/relatedTable/subFilter.js +16 -0
  385. package/src/table/relatedTable/where.js +50 -0
  386. package/src/table/relatedTable/whereSql.js +41 -0
  387. package/src/table/relation/manyCache/extractParentKey.js +17 -0
  388. package/src/table/relation/manyCache/synchronizeAdded.js +13 -0
  389. package/src/table/relation/manyCache/synchronizeChanged.js +31 -0
  390. package/src/table/relation/manyCache/synchronizeRemoved.js +13 -0
  391. package/src/table/relation/newExpanderCache.js +7 -0
  392. package/src/table/relation/newForeignKeyFilter.js +20 -0
  393. package/src/table/relation/newJoinLeg.js +23 -0
  394. package/src/table/relation/newManyCache.js +57 -0
  395. package/src/table/relation/newManyCacheCore.js +53 -0
  396. package/src/table/relation/newManyLeg.js +15 -0
  397. package/src/table/relation/newOneCache.js +28 -0
  398. package/src/table/relation/newOneLeg.js +25 -0
  399. package/src/table/releaseDbClient.js +15 -0
  400. package/src/table/resultToPromise.js +8 -0
  401. package/src/table/resultToRows/dbRowToRow.js +51 -0
  402. package/src/table/resultToRows/dbRowsToRows.js +13 -0
  403. package/src/table/resultToRows/decodeDbRow.js +25 -0
  404. package/src/table/resultToRows/delete/removeFromCache.js +33 -0
  405. package/src/table/resultToRows/delete.js +31 -0
  406. package/src/table/resultToRows/negotiateQueryContext.js +6 -0
  407. package/src/table/resultToRows/newDecodeDbRow.js +262 -0
  408. package/src/table/resultToRows/toDto/createDto.js +20 -0
  409. package/src/table/resultToRows/toDto/extractStrategy.js +41 -0
  410. package/src/table/resultToRows/toDto.js +92 -0
  411. package/src/table/resultToRows.js +37 -0
  412. package/src/table/rollback.js +31 -0
  413. package/src/table/rowArray/negotiateNextTick.js +11 -0
  414. package/src/table/rowArray/orderBy.js +51 -0
  415. package/src/table/rowArray.js +62 -0
  416. package/src/table/setSessionSingleton.js +5 -0
  417. package/src/table/strategyToSpan.js +49 -0
  418. package/src/table/tryGetById.js +13 -0
  419. package/src/table/tryGetFirstFromDb.js +23 -0
  420. package/src/table/tryGetFromCacheById.js +12 -0
  421. package/src/table/tryGetFromDbById/extractStrategy.js +9 -0
  422. package/src/table/tryGetFromDbById.js +19 -0
  423. package/src/table/tryGetSessionContext.js +16 -0
  424. package/src/table/tryReleaseDbClient.js +14 -0
  425. package/src/table/updateField.js +12 -0
  426. package/src/table/where.js +12 -0
  427. package/src/table.js +174 -0
  428. package/src/tedious/deleteFromSql.js +8 -0
  429. package/src/tedious/encodeBoolean.js +7 -0
  430. package/src/tedious/encodeBuffer.js +7 -0
  431. package/src/tedious/formatDateOut.js +5 -0
  432. package/src/tedious/formatJSONOut.js +5 -0
  433. package/src/tedious/getManyDto/newQuery.js +8 -0
  434. package/src/tedious/getManyDto/newQueryCore.js +18 -0
  435. package/src/tedious/getManyDto/query/newSingleQuery.js +29 -0
  436. package/src/tedious/getManyDto/query/newSubQueries/joinLegToQuery.js +16 -0
  437. package/src/tedious/getManyDto/query/newSubQueries/manyLegToQuery.js +16 -0
  438. package/src/tedious/getManyDto/query/newSubQueries/oneLegToQuery.js +19 -0
  439. package/src/tedious/getManyDto/query/newSubQueries.js +48 -0
  440. package/src/tedious/getManyDto/query/singleQuery/newShallowColumnSql.js +34 -0
  441. package/src/tedious/getManyDto.js +27 -0
  442. package/src/tedious/insert.js +13 -0
  443. package/src/tedious/insertSql.js +70 -0
  444. package/src/tedious/limitAndOffset.js +16 -0
  445. package/src/tedious/mergeSql.js +76 -0
  446. package/src/tedious/newDatabase.js +129 -0
  447. package/src/tedious/newPool.js +19 -0
  448. package/src/tedious/newTransaction.js +72 -0
  449. package/src/tedious/outputInsertedSql.js +11 -0
  450. package/src/tedious/pool/defaults.js +45 -0
  451. package/src/tedious/pool/end.js +13 -0
  452. package/src/tedious/pool/newGenericPool.js +71 -0
  453. package/src/tedious/pool/parseConnectionString.js +40 -0
  454. package/src/tedious/selectForUpdateSql.js +3 -0
  455. package/src/tedious/wrapQuery.js +112 -0
  456. package/src/toCompareObject.js +41 -0
  457. package/src/useHook.js +9 -0
  458. package/src/validateDeleteAllowed.js +49 -0
  459. package/src/validateDeleteConflict.js +92 -0
@@ -0,0 +1,18 @@
1
+ var newSingleQuery = require('./query/newSingleQuery');
2
+ var extractFilter = require('../../table/query/extractFilter');
3
+ var extractOrderBy = require('../../table/query/extractOrderBy');
4
+ var extractLimit = require('../../table/query/extractLimit');
5
+ var extractOffset = require('../../table/query/extractOffset');
6
+ var newParameterized = require('../../table/query/newParameterized');
7
+
8
+ function newQuery(table,filter,span,alias) {
9
+ filter = extractFilter(filter);
10
+ var orderBy = extractOrderBy(table,alias,span.orderBy);
11
+ var limit = extractLimit(span);
12
+ var offset = extractOffset(span);
13
+ var subQueries = '';
14
+ var query = newSingleQuery(table,filter,span,alias,subQueries,orderBy,limit,offset);
15
+ return newParameterized(query.sql(), query.parameters);
16
+ }
17
+
18
+ module.exports = newQuery;
@@ -0,0 +1,20 @@
1
+ var newColumnSql = require('./singleQuery/newShallowColumnSql');
2
+ var newWhereSql = require('../../../table/query/singleQuery/newWhereSql');
3
+ var negotiateLimit = require('../../../table/query/singleQuery/negotiateLimit');
4
+ var newParameterized = require('../../../table/query/newParameterized');
5
+
6
+ function _new(table, filter, span, alias, innerJoin, orderBy, limit, offset = '') {
7
+
8
+ var name = table._dbName;
9
+ var columnSql = newColumnSql(table, alias, span);
10
+ var whereSql = newWhereSql(table, filter, alias);
11
+ var safeLimit = negotiateLimit(limit);
12
+
13
+ return newParameterized('select ' + safeLimit + ' ' + columnSql + ' from ' + name + ' ' + alias)
14
+ .append(innerJoin)
15
+ .append(whereSql)
16
+ .append(orderBy + offset);
17
+
18
+ }
19
+
20
+ module.exports = _new;
@@ -0,0 +1,18 @@
1
+ var newShallowJoinSql = require('../../../../table/query/singleQuery/joinSql/newShallowJoinSqlCore');
2
+ var newQuery = require('../../newQueryCore');
3
+ var newParameterized = require('../../../../table/query/newParameterized');
4
+
5
+ function joinLegToQuery(parentAlias,leg,_legNo) {
6
+ var childAlias = parentAlias + leg.name;
7
+ var span = leg.span;
8
+ var parentTable = leg.table;
9
+ var childColumns = span.table._primaryColumns;
10
+ var parentColumns = leg.columns;
11
+
12
+ var shallowJoin = newShallowJoinSql(parentTable,childColumns,parentColumns,childAlias,parentAlias);
13
+ var filter = newParameterized(shallowJoin);
14
+ var query = newQuery(span.table,filter,span,childAlias);
15
+ return query.prepend(',JSON_QUERY((').append(` FOR JSON PATH, INCLUDE_NULL_VALUES, WITHOUT_ARRAY_WRAPPER)) "${leg.name}"`);
16
+ }
17
+
18
+ module.exports = joinLegToQuery;
@@ -0,0 +1,20 @@
1
+ var newShallowJoinSql = require('../../../../table/query/singleQuery/joinSql/newShallowJoinSqlCore');
2
+ var newQuery = require('../../newQueryCore');
3
+ var newParameterized = require('../../../../table/query/newParameterized');
4
+ var util = require('util');
5
+
6
+ function manyLegToQuery(rightAlias, leg, legNo) {
7
+ var leftAlias = rightAlias + 'x' + legNo;
8
+ var span = leg.span;
9
+ var rightTable = leg.table;
10
+ var rightColumns = rightTable._primaryColumns;
11
+ var leftColumns = leg.columns;
12
+
13
+ var shallowJoin = newShallowJoinSql(rightTable, leftColumns, rightColumns, leftAlias, rightAlias);
14
+ var filter = newParameterized(shallowJoin);
15
+ var query = newQuery(span.table, filter, span, leftAlias);
16
+ return util.format(',JSON_QUERY( coalesce((%s FOR JSON PATH, INCLUDE_NULL_VALUES),\'[]\')) "%s"', query.sql(), leg.name);
17
+
18
+ }
19
+
20
+ module.exports = manyLegToQuery;
@@ -0,0 +1,21 @@
1
+ var newShallowJoinSql = require('../../../../table/query/singleQuery/joinSql/newShallowJoinSqlCore');
2
+ var newQuery = require('../../newQueryCore');
3
+ var newParameterized = require('../../../../table/query/newParameterized');
4
+ var util = require('util');
5
+
6
+ function oneLegToQuery(rightAlias,leg,legNo) {
7
+ var leftAlias = rightAlias + 'x' + legNo;
8
+ var span = leg.span;
9
+ var rightTable = leg.table;
10
+ var rightColumns = rightTable._primaryColumns;
11
+ var leftColumns = leg.columns;
12
+
13
+ var shallowJoin = newShallowJoinSql(rightTable,leftColumns,rightColumns,leftAlias,rightAlias);
14
+ var filter = newParameterized(shallowJoin);
15
+ var query = newQuery(span.table,filter,span,leftAlias);
16
+ var sql = 'SELECT TOP 1' + query.sql().substring(6);
17
+ return util.format(',JSON_QUERY((%s FOR JSON PATH, INCLUDE_NULL_VALUES, WITHOUT_ARRAY_WRAPPER)) "%s"',sql, leg.name );
18
+
19
+ }
20
+
21
+ module.exports = oneLegToQuery;
@@ -0,0 +1,47 @@
1
+ var joinLegToQuery = _joinLegToQuery;
2
+ var oneLegToQuery = _oneLegToQuery;
3
+ var manyLegToQuery = _manyLegToQuery;
4
+
5
+ function newSubQueries(table,span,alias) {
6
+ var result = [];
7
+ var c = {};
8
+ var _legNo;
9
+
10
+ c.visitJoin = function(leg) {
11
+ result.push(joinLegToQuery( alias,leg,_legNo));
12
+ };
13
+ c.visitOne = function(leg) {
14
+ result.push(oneLegToQuery( alias,leg,_legNo));
15
+ };
16
+ c.visitMany = function(leg) {
17
+ result.push(manyLegToQuery( alias,leg,_legNo));
18
+ };
19
+
20
+ span.legs.forEach(onEachLeg);
21
+
22
+ function onEachLeg(leg,legNo) {
23
+ _legNo = legNo;
24
+ leg.accept(c);
25
+ }
26
+
27
+ return result.join('');
28
+ }
29
+
30
+ function _joinLegToQuery() {
31
+ joinLegToQuery = require('./newSubQueries/joinLegToQuery');
32
+ return joinLegToQuery.apply(null,arguments);
33
+ }
34
+
35
+ function _oneLegToQuery() {
36
+ oneLegToQuery = require('./newSubQueries/oneLegToQuery');
37
+ return oneLegToQuery.apply(null,arguments);
38
+ }
39
+
40
+ function _manyLegToQuery() {
41
+ manyLegToQuery = require('./newSubQueries/manyLegToQuery');
42
+ return manyLegToQuery.apply(null,arguments);
43
+ }
44
+
45
+
46
+
47
+ module.exports = newSubQueries;
@@ -0,0 +1,21 @@
1
+ var util = require('util');
2
+
3
+ function _new(table, alias, span) {
4
+ let columnsMap = span.columns;
5
+ var columnFormat = '%s as "%s"';
6
+ var columns = table._columns;
7
+ var sql = '';
8
+ var separator = alias + '.';
9
+
10
+
11
+ for (var i = 0; i < columns.length; i++) {
12
+ var column = columns[i];
13
+ if (!columnsMap || (columnsMap.get(column))) {
14
+ sql = sql + separator + util.format(columnFormat, column._dbName, column.alias);
15
+ separator = ',' + alias + '.';
16
+ }
17
+ }
18
+ return sql;
19
+ }
20
+
21
+ module.exports = _new;
@@ -0,0 +1,10 @@
1
+ let tryGetSessionContext = require('./tryGetSessionContext');
2
+
3
+ function getSessionContext() {
4
+ let context = tryGetSessionContext();
5
+ if (!context)
6
+ throw new Error('Rdb transaction is no longer available. Is promise chain broken ?');
7
+ return context;
8
+ }
9
+
10
+ module.exports = getSessionContext;
@@ -0,0 +1,5 @@
1
+ var getSessionContext = require('./getSessionContext');
2
+
3
+ module.exports = function(name) {
4
+ return getSessionContext()[name];
5
+ };
@@ -0,0 +1,25 @@
1
+ var newSingleQuery = require('../../getManyDto/query/newSingleQuery');
2
+ var extractFilter = require('../query/extractFilter');
3
+ var extractLimit = require('../query/extractLimit');
4
+ var newParameterized = require('../query/newParameterized');
5
+ var extractOffset = require('../query/extractOffset');
6
+
7
+ function newQuery(table,filter,span,alias) {
8
+ filter = extractFilter(filter);
9
+ var orderBy = '';
10
+ var limit = extractLimit(span);
11
+ var offset = extractOffset(span);
12
+
13
+ var query = newSingleQuery(table,filter,span,alias,orderBy,limit,offset);
14
+ const groupClause = groupBy(span);
15
+ return newParameterized(query.sql(), query.parameters).append(groupClause);
16
+ }
17
+
18
+ function groupBy(span) {
19
+ const keys = Object.keys(span.aggregates).filter(x => span.aggregates[x].column);
20
+ if (keys.length === 0)
21
+ return '';
22
+ return ' GROUP BY ' + keys.map(key => span.aggregates[key].groupBy).join(',');
23
+ }
24
+
25
+ module.exports = newQuery;
@@ -0,0 +1,65 @@
1
+ const newQuery = require('./groupBy/newQuery');
2
+ const negotiateRawSqlFilter = require('./column/negotiateRawSqlFilter');
3
+ const strategyToSpan = require('./strategyToSpan');
4
+ const executeQueries = require('./executeQueries');
5
+
6
+ async function groupBy(table, filter, strategy) {
7
+ filter = negotiateRawSqlFilter(filter, table);
8
+ if (strategy && strategy.where) {
9
+ let arg = typeof strategy.where === 'function' ? strategy.where(table) : strategy.where;
10
+ filter = filter.and(arg);
11
+ }
12
+
13
+ let span = strategyToSpan(table, strategy);
14
+ span.columns = new Map();
15
+
16
+ let alias = table._dbName;
17
+
18
+ const query = newQuery(table, filter, span, alias);
19
+ const res = await executeQueries([query]);
20
+ return decode(span, await res[0]);
21
+ }
22
+
23
+ function newCreateRow(span) {
24
+ const protoRow = createProto(span);
25
+
26
+ return createRow;
27
+
28
+ function createRow() {
29
+ return Object.create(protoRow);
30
+ }
31
+ }
32
+
33
+ function createProto(span) {
34
+ let obj = {};
35
+ for (let key in span.aggregates) {
36
+ obj[key] = null;
37
+ }
38
+
39
+ return obj;
40
+ }
41
+
42
+
43
+ async function decode(span, rows, keys = rows.length > 0 ? Object.keys(rows[0]) : []) {
44
+ const rowsLength = rows.length;
45
+ const aggregateKeys = Object.keys(span.aggregates);
46
+
47
+ const outRows = new Array(rowsLength);
48
+ const createRow = newCreateRow(span);
49
+ for (let i = 0; i < rowsLength; i++) {
50
+ const row = rows[i];
51
+ let outRow = createRow();
52
+
53
+ for (let j = 0; j < aggregateKeys.length; j++) {
54
+ const key = aggregateKeys[j];
55
+ const parse = span.aggregates[key].column?.decode || Number.parseFloat;
56
+ outRow[key] = parse(row[keys[j]]);
57
+ }
58
+
59
+ outRows[i] = outRow;
60
+ }
61
+
62
+ return outRows;
63
+ }
64
+
65
+ module.exports = groupBy;
@@ -0,0 +1,33 @@
1
+ var newManyRelation = require('./newManyRelation');
2
+ var newRelatedTable = require('./newRelatedTable');
3
+
4
+ function newOne(joinRelation) {
5
+ var c = {};
6
+ var parentTable = joinRelation.childTable;
7
+
8
+ c.as = function(alias) {
9
+ joinRelation.rightAlias = alias;
10
+ var relation = newManyRelation(joinRelation);
11
+ parentTable._relations[alias] = relation;
12
+
13
+ Object.defineProperty(parentTable, alias, {
14
+ get: function() {
15
+ return newRelatedTable([relation]);
16
+ }
17
+ });
18
+
19
+ return relation;
20
+ };
21
+
22
+ c.notNullExceptInsert = function() {
23
+ return c;
24
+ };
25
+
26
+ c.notNull = function() {
27
+ return c;
28
+ };
29
+
30
+ return c;
31
+ }
32
+
33
+ module.exports = newOne;
@@ -0,0 +1,33 @@
1
+ var newOneRelation = require('./newOneRelation');
2
+ var newRelatedTable = require('./newRelatedTable');
3
+
4
+ function newOne(joinRelation) {
5
+ var c = {};
6
+ var parentTable = joinRelation.childTable;
7
+
8
+ c.as = function(alias) {
9
+ joinRelation.rightAlias = alias;
10
+ var relation = newOneRelation(joinRelation);
11
+ parentTable._relations[alias] = relation;
12
+
13
+ Object.defineProperty(parentTable, alias, {
14
+ get: function() {
15
+ return newRelatedTable([relation]);
16
+ }
17
+ });
18
+ return relation;
19
+ };
20
+
21
+ c.notNullExceptInsert = function() {
22
+ return c;
23
+ };
24
+
25
+ c.notNull = function() {
26
+ return c;
27
+ };
28
+
29
+
30
+ return c;
31
+ }
32
+
33
+ module.exports = newOne;
@@ -0,0 +1,91 @@
1
+ let getSessionContext = require('./getSessionContext');
2
+ let newRow = require('./commands/newRow');
3
+ let insertDefault = require('./insertDefault');
4
+
5
+ function insert({ table, options }, arg) {
6
+ // return insertDefault.apply(null, arguments);
7
+ if (Array.isArray(arg)) {
8
+ let all = [];
9
+ for (let i = 0; i < arg.length; i++) {
10
+ all.push(insert(table, arg[i]));
11
+ }
12
+ return Promise.all(all);
13
+ }
14
+ let args = [table].slice.call(arguments);
15
+ let row = newRow.apply(null, args);
16
+ let hasPrimary = getHasPrimary(table, row);
17
+ if (hasPrimary) {
18
+ row = table._cache.tryAdd(row);
19
+ }
20
+ expand(table, row);
21
+ Object.defineProperty(row, 'then', {
22
+ value: then,
23
+ writable: true,
24
+ enumerable: false,
25
+ configurable: true
26
+ });
27
+ const context = getSessionContext();
28
+ const insertP = (context.insert || insertDefault)(table, row, options).then(onResult);
29
+
30
+
31
+ // }
32
+ // else {
33
+ // // Non-PG case, use Promise
34
+ // result = new Promise((resolve, reject) => {
35
+ // ([result]) => {
36
+ // row.hydrate(result);
37
+ // if (!hasPrimary) {
38
+ // row = table._cache.tryAdd(row);
39
+ // }
40
+ // table._cache.tryAdd(row);
41
+ // resolve(row);qq
42
+ // };
43
+ // });
44
+ // }
45
+
46
+ async function then(fn, efn) {
47
+ delete row.then;
48
+ return insertP.then(() => fn(row), efn);
49
+ }
50
+
51
+ return row;
52
+
53
+ function onResult([result]) {
54
+ row.hydrate(result);
55
+ if (!hasPrimary)
56
+ row = table._cache.tryAdd(row);
57
+ table._cache.tryAdd(row);
58
+ return row;
59
+ }
60
+ }
61
+
62
+ function expand(table, row) {
63
+ let relationName;
64
+ let visitor = {};
65
+ visitor.visitJoin = function() { };
66
+
67
+ visitor.visitMany = function() {
68
+ row.expand(relationName);
69
+ };
70
+
71
+ visitor.visitOne = function() {
72
+ row.expand(relationName);
73
+ };
74
+
75
+ for (relationName in table._relations) {
76
+ let relation = table._relations[relationName];
77
+ relation.accept(visitor);
78
+ }
79
+ }
80
+
81
+ function getHasPrimary(table, row) {
82
+ for (let i = 0; i < table._primaryColumns.length; i++) {
83
+ let column = table._primaryColumns[i];
84
+ if (row[column.alias] === null) {
85
+ return false;
86
+ }
87
+ }
88
+ return true;
89
+ }
90
+
91
+ module.exports = insert;
@@ -0,0 +1,88 @@
1
+ let getSessionContext = require('./getSessionContext');
2
+ let executeQueries = require('./executeQueries');
3
+ let newRow = require('./commands/newRow');
4
+ let newInsertCommand = require('./commands/newInsertCommand');
5
+ let newInsertCommandCore = require('./commands/newInsertCommandCore');
6
+ let newGetLastInsertedCommand = require('./commands/newGetLastInsertedCommand');
7
+ let pushCommand = require('./commands/pushCommand');
8
+
9
+ function insert({table, options}, arg) {
10
+ if (Array.isArray(arg)) {
11
+ let all = [];
12
+ for (let i = 0; i < arg.length; i++) {
13
+ all.push(insert(table, arg[i]));
14
+ }
15
+ return Promise.all(all);
16
+ }
17
+ let args = [table].slice.call(arguments);
18
+ let row = newRow.apply(null, args);
19
+ let hasPrimary = getHasPrimary(table, row);
20
+ if (hasPrimary)
21
+ row = table._cache.tryAdd(row);
22
+ let cmd = newInsertCommand(newInsertCommandCore, table, row, options);
23
+
24
+ pushCommand(cmd);
25
+ expand(table, row);
26
+ Object.defineProperty(row, 'then', {
27
+ value: then,
28
+ writable: true,
29
+ enumerable: false,
30
+ configurable: true
31
+ });
32
+
33
+ let selectCmd;
34
+ if (getSessionContext().lastInsertedIsSeparate) {
35
+ selectCmd = newGetLastInsertedCommand(table, row, cmd);
36
+ pushCommand(selectCmd);
37
+ selectCmd.onResult = onResult;
38
+ }
39
+ else {
40
+ cmd.onResult = onResult;
41
+ cmd.disallowCompress = true;
42
+ }
43
+
44
+ return row;
45
+ function then(fn,efn) {
46
+ delete row.then;
47
+ return executeQueries([]).then(() => fn(row), efn);
48
+ }
49
+
50
+ function onResult([result]) {
51
+ row.hydrate(result);
52
+ if (!hasPrimary)
53
+ row = table._cache.tryAdd(row);
54
+ table._cache.tryAdd(row);
55
+ }
56
+ }
57
+
58
+ function expand(table, row) {
59
+ let relationName;
60
+ let visitor = {};
61
+ visitor.visitJoin = function() { };
62
+
63
+ visitor.visitMany = function() {
64
+ row.expand(relationName);
65
+ };
66
+
67
+ visitor.visitOne = function() {
68
+ row.expand(relationName);
69
+ };
70
+
71
+ for (relationName in table._relations) {
72
+ let relation = table._relations[relationName];
73
+ relation.accept(visitor);
74
+ }
75
+
76
+ }
77
+
78
+ function getHasPrimary(table, row) {
79
+ for (let i = 0; i < table._primaryColumns.length; i++) {
80
+ let column = table._primaryColumns[i];
81
+ if (row[column.alias] === null)
82
+ return;
83
+ }
84
+ return true;
85
+
86
+ }
87
+
88
+ module.exports = insert;
@@ -0,0 +1,42 @@
1
+ var newJoinRelation = require('./newJoinRelation');
2
+ var newRelatedTable = require('./newRelatedTable');
3
+
4
+ function newJoin(parentTable, childTable) {
5
+ var c = {};
6
+ var columnNames = [];
7
+ var relation;
8
+
9
+ c.by = function() {
10
+ for (var i = 0; i < arguments.length; i++) {
11
+ columnNames.push(getColumnName(arguments[i]));
12
+ }
13
+ relation = newJoinRelation(parentTable, childTable, columnNames);
14
+ relation.as = c.as;
15
+ return relation;
16
+ };
17
+
18
+ function getColumnName(columnName) {
19
+ var columns = parentTable._columns;
20
+ for (var i = 0; i < columns.length; i++) {
21
+ if (columns[i]._dbName === columnName || columns[i].alias === columnName)
22
+ return columns[i]._dbName;
23
+ }
24
+ throw new Error('Unknown column: ' + columnName);
25
+ }
26
+
27
+ c.as = function(alias) {
28
+ relation.leftAlias = alias;
29
+ parentTable._relations[alias] = relation;
30
+
31
+ Object.defineProperty(parentTable, alias, {
32
+ get: function() {
33
+ return newRelatedTable([relation]);
34
+ }
35
+ });
36
+
37
+ return relation;
38
+ };
39
+ return c;
40
+ }
41
+
42
+ module.exports = newJoin;
@@ -0,0 +1,64 @@
1
+ var newPrimaryKeyFilter = require('../newPrimaryKeyFilter');
2
+ var emptyFilter = require('../../emptyFilter');
3
+ var negotiateExpandInverse = require('../negotiateExpandInverse');
4
+
5
+ function getRelatives(parent, relation) {
6
+ var queryContext = parent.queryContext;
7
+ let strategy = queryContext && queryContext.strategy[relation.leftAlias];
8
+ var filter = emptyFilter;
9
+ if (relation.columns.length === 1)
10
+ createInFilter();
11
+ else
12
+ createCompositeFilter();
13
+
14
+ function createInFilter() {
15
+ var ids = [];
16
+ var row;
17
+ var id;
18
+ var alias = relation.columns[0].alias;
19
+ for (var i = 0; i < queryContext.rows.length; i++) {
20
+ row = queryContext.rows[i];
21
+ id = row[alias];
22
+ if (!isNullOrUndefined(id))
23
+ ids.push(id);
24
+ }
25
+
26
+ if (ids.length > 0)
27
+ filter = relation.childTable._primaryColumns[0].in(ids);
28
+ }
29
+
30
+ function createCompositeFilter() {
31
+ var keyFilter;
32
+ for (var i = 0; i < queryContext.rows.length; i++) {
33
+ keyFilter = rowToPrimaryKeyFilter(queryContext.rows[i], relation);
34
+ if (keyFilter)
35
+ filter = filter.or(keyFilter);
36
+ }
37
+ }
38
+
39
+ return relation.childTable.getMany(filter, strategy).then(onRows);
40
+
41
+ function onRows(rows) {
42
+ queryContext.expand(relation);
43
+ negotiateExpandInverse(parent, relation, rows);
44
+ return rows;
45
+ }
46
+
47
+ }
48
+
49
+ function rowToPrimaryKeyFilter(row, relation) {
50
+ var key = relation.columns.map( function(column) {
51
+ return row[column.alias];
52
+ });
53
+ if (key.some(isNullOrUndefined)) {
54
+ return;
55
+ }
56
+ var args = [relation.childTable].concat(key);
57
+ return newPrimaryKeyFilter.apply(null, args);
58
+ }
59
+
60
+ function isNullOrUndefined(item) {
61
+ return item === null || item === undefined;
62
+ }
63
+
64
+ module.exports = getRelatives;
@@ -0,0 +1,39 @@
1
+ var newEmitEvent = require('../emitEvent');
2
+
3
+ var emitters = {
4
+ query: newEmitEvent()
5
+ };
6
+
7
+ var logger = function() {
8
+ };
9
+
10
+ function log() {
11
+ logger.apply(null, arguments);
12
+ }
13
+ function emitQuery({ sql, parameters }) {
14
+ emitters.query.apply(null, arguments);
15
+ log(sql);
16
+ log('parameters: ' + parameters);
17
+ }
18
+
19
+ log.emitQuery = emitQuery;
20
+
21
+ log.registerLogger = function(cb) {
22
+ logger = cb;
23
+ };
24
+
25
+ log.on = function(type, cb) {
26
+ if (type === 'query')
27
+ emitters.query.add(cb);
28
+ else
29
+ throw new Error('unknown event type: ' + type);
30
+ };
31
+
32
+ log.off = function(type, cb) {
33
+ if (type === 'query')
34
+ emitters.query.tryRemove(cb);
35
+ else
36
+ throw new Error('unknown event type: ' + type);
37
+ };
38
+
39
+ module.exports = log;