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,24 @@
1
+ let newRelatedTable = _newRelatedTable;
2
+ const negotiateRawSqlFilter = require('../column/negotiateRawSqlFilter');
3
+ let subFilter = require('./subFilter');
4
+ let isShallow = true;
5
+
6
+ function newAll(relations, depth) {
7
+
8
+ function all(fn) {
9
+ let relatedTable = newRelatedTable(relations, isShallow, depth + 1);
10
+ let arg = typeof fn === 'function' ? fn(relatedTable) : fn;
11
+ let anyFilter = negotiateRawSqlFilter(arg);
12
+ let anySubFilter = subFilter(relations, anyFilter, depth);
13
+ let notFilter = subFilter(relations, anyFilter.not(), depth).not();
14
+ return anySubFilter.and(notFilter);
15
+ }
16
+ return all;
17
+ }
18
+
19
+ function _newRelatedTable() {
20
+ newRelatedTable = require('../newRelatedTable');
21
+ return newRelatedTable.apply(null, arguments);
22
+ }
23
+
24
+ module.exports = newAll;
@@ -0,0 +1,70 @@
1
+ let newRelatedTable = _newRelatedTable;
2
+ const negotiateRawSqlFilter = require('../column/negotiateRawSqlFilter');
3
+ // let subFilter = require('./subFilterAny');
4
+ let subFilter = require('./subFilter');
5
+ let isShallow = true;
6
+
7
+ function newAny(relations, depth) {
8
+
9
+ function any(fn) {
10
+ let relatedTable = newRelatedTable(relations, isShallow, depth + 1);
11
+ let arg = typeof fn === 'function' ? fn(relatedTable) : fn;
12
+ let filter = negotiateRawSqlFilter(arg);
13
+ let sub = subFilter(relations, filter, depth);
14
+ return sub;
15
+ }
16
+ return any;
17
+ }
18
+
19
+ function _newRelatedTable() {
20
+ newRelatedTable = require('../newRelatedTable');
21
+ return newRelatedTable.apply(null, arguments);
22
+ }
23
+
24
+ module.exports = newAny;
25
+
26
+ //
27
+ // let newRelatedTable = _newRelatedTable;
28
+ // let negotiateRawSqlFilter = require('../column/negotiateRawSqlFilter');
29
+ // let newSelect = require('./selectSql');
30
+ // let newJoin = require('./joinSql');
31
+ // let newWhere = require('./whereSql');
32
+ // let subFilter = require('./subFilter');
33
+ // let isShallow = true;
34
+
35
+ // function newAny(relations, depth) {
36
+
37
+ // function any(fn) {
38
+ // let relationCount = relations.length;
39
+ // let alias = 'x' + (depth);
40
+ // // let alias = 'x' + relationCount;
41
+ // let table = relations[relationCount - 1].childTable;
42
+ // let exists = newSelect(table, alias).prepend('EXISTS (');
43
+ // let join = newJoin(relations, depth);
44
+
45
+ // let relatedTable = newRelatedTable(relations.slice(-1), isShallow, depth+1);
46
+ // let arg = typeof fn === 'function' ? fn(relatedTable) : fn; //we need inner joins from here
47
+ // let filter = negotiateRawSqlFilter(arg);
48
+ // let where = newWhere(relations[0],filter, depth);
49
+ // return exists.append(join).append(where).append(')');
50
+
51
+
52
+ // // let innerJoin = newJoinSql(relations);
53
+ // // let relatedTable = newRelatedTable(relations.slice(-1), isShallow);
54
+ // // //relations is missing anything below any(..)
55
+ // // let arg = typeof fn === 'function' ? fn(relatedTable) : fn; //we need inner joins from here
56
+ // // let filter = negotiateRawSqlFilter(arg);
57
+ // // let sqlFilter = filter.sql();
58
+ // // //_3.id is not null
59
+ // // return subFilter(relations.slice(-1), filter);
60
+ // }
61
+ // return any;
62
+ // // db.order.lines.any(x => x.order.deliveryAddress.id.notEqual(null));
63
+ // }
64
+
65
+ // function _newRelatedTable() {
66
+ // newRelatedTable = require('../newRelatedTable');
67
+ // return newRelatedTable.apply(null, arguments);
68
+ // }
69
+
70
+ // module.exports = newAny;
@@ -0,0 +1,61 @@
1
+ var newJoin = require('./joinSql');
2
+ var getSessionContext = require('../getSessionContext');
3
+ var newJoinCore = require('../query/singleQuery/joinSql/newShallowJoinSqlCore');
4
+
5
+ function childColumn(column, relations) {
6
+ const context = getSessionContext();
7
+ const outerAlias = 'y' + context.aggregateCount++;
8
+ const alias = 'x' + relations.length;
9
+ const foreignKeys = getForeignKeys(relations[0]);
10
+ const select = ` LEFT JOIN (SELECT ${foreignKeys},${alias}.${column._dbName} as prop`;
11
+ const innerJoin = relations.length > 1 ? newJoin(relations).sql() : '';
12
+ const onClause = createOnClause(relations[0], outerAlias);
13
+ const from = ` FROM ${relations.at(-1).childTable._dbName} ${alias} ${innerJoin}) ${outerAlias} ON (${onClause})`;
14
+ const join = select + from ;
15
+
16
+ return {
17
+ expression: (alias) => `${outerAlias}.prop ${alias}`,
18
+ joins: [join],
19
+ column,
20
+ groupBy: `${outerAlias}.prop`,
21
+ };
22
+ }
23
+
24
+ function createOnClause(relation, rightAlias) {
25
+ var c = {};
26
+ var sql = '';
27
+ let leftAlias = relation.parentTable._rootAlias || relation.parentTable._dbName;
28
+
29
+ c.visitJoin = function(relation) {
30
+ sql = newJoinCore(relation.childTable,relation.columns,relation.childTable._primaryColumns,leftAlias,rightAlias).sql();
31
+ };
32
+
33
+ c.visitOne = function(relation) {
34
+ innerJoin(relation);
35
+ };
36
+
37
+ c.visitMany = c.visitOne;
38
+
39
+ function innerJoin(relation) {
40
+ var joinRelation = relation.joinRelation;
41
+ var childTable = relation.childTable;
42
+ var parentTable = relation.parentTable;
43
+ var columns = joinRelation.columns;
44
+
45
+ sql = newJoinCore(childTable,parentTable._primaryColumns,columns,leftAlias, rightAlias).sql();
46
+ }
47
+ relation.accept(c);
48
+ return sql;
49
+ }
50
+
51
+ function getForeignKeys(relation) {
52
+ let columns;
53
+ let alias = 'x1';
54
+ if (relation.joinRelation)
55
+ columns = relation.joinRelation.columns;
56
+ else
57
+ columns = relation.childTable._primaryColumns;
58
+ return columns.map(x => `${alias}.${x._dbName}`).join(',');
59
+ }
60
+
61
+ module.exports = childColumn;
@@ -0,0 +1,16 @@
1
+ var newJoinArray = require('./joinSqlArray');
2
+
3
+ function columnAggregate(operator, column, relations, coalesce = true) {
4
+
5
+ const tableAlias = relations.reduce((prev,relation) => {
6
+ return prev + relation.toLeg().name;
7
+ }, 'z');
8
+
9
+ return {
10
+ expression: (alias) => coalesce ? `COALESCE(${operator}(${tableAlias}.${column._dbName}), 0) as ${alias}` : `${operator}(${tableAlias}.${column._dbName}) as ${alias}`,
11
+
12
+ joins: newJoinArray(relations)
13
+ };
14
+ }
15
+
16
+ module.exports = columnAggregate;
@@ -0,0 +1,59 @@
1
+ var newJoin = require('./joinSql');
2
+ var getSessionContext = require('../getSessionContext');
3
+ var newJoinCore = require('../query/singleQuery/joinSql/newShallowJoinSqlCore');
4
+
5
+ function columnAggregate(operator, column, relations, coalesce = true) {
6
+ const context = getSessionContext();
7
+ const outerAlias = 'y' + context.aggregateCount++;
8
+ const alias = 'x' + relations.length;
9
+ const foreignKeys = getForeignKeys(relations[0]);
10
+ const select = ` LEFT JOIN (SELECT ${foreignKeys},${operator}(${alias}.${column._dbName}) as amount`;
11
+ const innerJoin = relations.length > 1 ? newJoin(relations).sql() : '';
12
+ const onClause = createOnClause(relations[0], outerAlias);
13
+ const from = ` FROM ${relations.at(-1).childTable._dbName} ${alias} ${innerJoin} GROUP BY ${foreignKeys}) ${outerAlias} ON (${onClause})`;
14
+ const join = select + from ;
15
+
16
+ return {
17
+ expression: (alias) => coalesce? `COALESCE(${outerAlias}.amount, 0) as ${alias}` : `${outerAlias}.amount as ${alias}`,
18
+ joins: [join]
19
+ };
20
+ }
21
+
22
+ function createOnClause(relation, rightAlias) {
23
+ var c = {};
24
+ var sql = '';
25
+ let leftAlias = relation.parentTable._rootAlias || relation.parentTable._dbName;
26
+
27
+ c.visitJoin = function(relation) {
28
+ sql = newJoinCore(relation.childTable,relation.columns,relation.childTable._primaryColumns,leftAlias,rightAlias).sql();
29
+ };
30
+
31
+ c.visitOne = function(relation) {
32
+ innerJoin(relation);
33
+ };
34
+
35
+ c.visitMany = c.visitOne;
36
+
37
+ function innerJoin(relation) {
38
+ var joinRelation = relation.joinRelation;
39
+ var childTable = relation.childTable;
40
+ var parentTable = relation.parentTable;
41
+ var columns = joinRelation.columns;
42
+
43
+ sql = newJoinCore(childTable,parentTable._primaryColumns,columns,leftAlias, rightAlias).sql();
44
+ }
45
+ relation.accept(c);
46
+ return sql;
47
+ }
48
+
49
+ function getForeignKeys(relation) {
50
+ let columns;
51
+ let alias = 'x1';
52
+ if (relation.joinRelation)
53
+ columns = relation.joinRelation.columns;
54
+ else
55
+ columns = relation.childTable._primaryColumns;
56
+ return columns.map(x => `${alias}.${x._dbName}`).join(',');
57
+ }
58
+
59
+ module.exports = columnAggregate;
@@ -0,0 +1,40 @@
1
+ var newShallowJoinSql = require('../query/singleQuery/joinSql/newShallowJoinSql');
2
+ var newParameterized = require('../query/newParameterized');
3
+
4
+ function newJoinSql(relations, depth = 0) {
5
+ var leftAlias,
6
+ rightAlias;
7
+ var relation;
8
+ var c = {};
9
+ var sql = newParameterized('');
10
+
11
+ c.visitJoin = function(relation) {
12
+ //todo fix discriminators on childTable
13
+ sql = newShallowJoinSql(relation.parentTable,relation.childTable._primaryColumns,relation.columns,leftAlias,rightAlias).prepend(' INNER').prepend(sql);
14
+ };
15
+
16
+ c.visitOne = function(relation) {
17
+ innerJoin(relation);
18
+ };
19
+
20
+ c.visitMany = c.visitOne;
21
+
22
+ function innerJoin(relation) {
23
+ var joinRelation = relation.joinRelation;
24
+ var table = joinRelation.childTable;
25
+ var rightColumns = table._primaryColumns;
26
+ var leftColumns = joinRelation.columns;
27
+
28
+ sql = newShallowJoinSql(table,leftColumns,rightColumns,leftAlias,rightAlias).prepend(' INNER').prepend(sql);
29
+ }
30
+
31
+ for (let i = relations.length-1; i > depth; i--) {
32
+ leftAlias = 'x' + (i+1);
33
+ rightAlias = 'x' + i;
34
+ relation = relations[i];
35
+ relation.accept(c);
36
+ }
37
+ return sql;
38
+ }
39
+
40
+ module.exports = newJoinSql;
@@ -0,0 +1,32 @@
1
+ const newShallowJoinSql = require('../query/singleQuery/joinSql/newShallowJoinSql');
2
+
3
+ function _new(relations) {
4
+
5
+ let result = [];
6
+ let leftAlias = relations[0].parentTable._dbName;
7
+ let rightAlias = 'z';
8
+ let sql;
9
+
10
+
11
+ let c = {};
12
+ c.visitJoin = function(relation) {
13
+ sql = newShallowJoinSql(relation.childTable,relation.columns,relation.childTable._primaryColumns,leftAlias,rightAlias).prepend(' LEFT').sql();
14
+ };
15
+
16
+ c.visitOne = function(relation) {
17
+ sql = newShallowJoinSql(relation.childTable,relation.parentTable._primaryColumns,relation.joinRelation.columns,leftAlias,rightAlias).prepend(' LEFT').sql();
18
+ };
19
+
20
+ c.visitMany = c.visitOne;
21
+
22
+ for (let i = 0; i < relations.length; i++) {
23
+ rightAlias = rightAlias + relations[i].toLeg().name;
24
+ relations[i].accept(c);
25
+ result.push(sql);
26
+ leftAlias = rightAlias;
27
+ }
28
+
29
+ return result;
30
+ }
31
+
32
+ module.exports = _new;
@@ -0,0 +1,22 @@
1
+ let newRelatedTable = _newRelatedTable;
2
+ const negotiateRawSqlFilter = require('../column/negotiateRawSqlFilter');
3
+ let subFilter = require('./subFilter');
4
+ let isShallow = true;
5
+
6
+ function newNone(relations, depth) {
7
+
8
+ function none(fn) {
9
+ let relatedTable = newRelatedTable(relations, isShallow, depth + 1);
10
+ let arg = typeof fn === 'function' ? fn(relatedTable) : fn;
11
+ let filter = negotiateRawSqlFilter(arg);
12
+ return subFilter(relations, filter, depth).not();
13
+ }
14
+ return none;
15
+ }
16
+
17
+ function _newRelatedTable() {
18
+ newRelatedTable = require('../newRelatedTable');
19
+ return newRelatedTable.apply(null, arguments);
20
+ }
21
+
22
+ module.exports = newNone;
@@ -0,0 +1,49 @@
1
+ var newSubFilter = require('./subFilter');
2
+ var aggregateGroup = require('./columnAggregateGroup');
3
+ var aggregate = require('./columnAggregate');
4
+ var childColumn = require('./childColumn');
5
+
6
+ function newRelatedColumn(column, relations, isShallow, depth) {
7
+ var c = {};
8
+
9
+ var alias = 'x' + relations.length;
10
+ for (var propName in column) {
11
+ var prop = column[propName];
12
+ if (prop instanceof Function)
13
+
14
+ c[propName] = wrapFilter(prop);
15
+ }
16
+
17
+ c.groupSum = aggregateGroup.bind(null, 'sum', column, relations);
18
+ c.groupAvg = aggregateGroup.bind(null, 'avg', column, relations);
19
+ c.groupMin = aggregateGroup.bind(null, 'min', column, relations);
20
+ c.groupMax = aggregateGroup.bind(null, 'max', column, relations);
21
+ c.groupCount = aggregateGroup.bind(null, 'count', column, relations, false);
22
+ c.sum = aggregate.bind(null, 'sum', column, relations);
23
+ c.avg = aggregate.bind(null, 'avg', column, relations);
24
+ c.min = aggregate.bind(null, 'min', column, relations);
25
+ c.max = aggregate.bind(null, 'max', column, relations);
26
+ c.count = aggregate.bind(null, 'count', column, relations, false);
27
+ c.self = childColumn.bind(null, column, relations);
28
+
29
+ return c;
30
+
31
+ function wrapFilter(filter) {
32
+ return runFilter;
33
+
34
+ function runFilter() {
35
+ var args = [];
36
+ for (var i = 0; i < arguments.length; i++) {
37
+ args.push(arguments[i]);
38
+ }
39
+ args.push(alias);
40
+ var shallowFilter = filter.apply(null, args);
41
+ if (isShallow)
42
+ return shallowFilter;
43
+ return newSubFilter(relations, shallowFilter, depth);
44
+ }
45
+ }
46
+
47
+ }
48
+
49
+ module.exports = newRelatedColumn;
@@ -0,0 +1,16 @@
1
+ var newSelect = require('./selectSql');
2
+ var newJoin = require('./joinSql');
3
+ var newWhere = require('./whereSql');
4
+
5
+ function relationFilter(relations, shallowFilter, depth) {
6
+ var relationCount = relations.length;
7
+ var alias = 'x' + relationCount;
8
+ var table = relations[relationCount-1].childTable;
9
+ var exists = newSelect(table,alias).prepend('EXISTS (');
10
+ var join = newJoin(relations, depth);
11
+ var where = newWhere(relations,shallowFilter, depth);
12
+ return exists.append(join).append(where).append(')');
13
+
14
+ }
15
+
16
+ module.exports = relationFilter;
@@ -0,0 +1,11 @@
1
+ var newParameterized = require('../query/newParameterized');
2
+ var newBoolean = require('../column/newBoolean');
3
+
4
+ function newSelectSql(table, alias) {
5
+ var colName = table._primaryColumns[0]._dbName;
6
+ var sql = 'SELECT ' + alias + '.' + colName + ' FROM ' + table._dbName + ' ' + alias;
7
+ sql = newParameterized(sql);
8
+ return newBoolean(sql);
9
+ }
10
+
11
+ module.exports = newSelectSql;
@@ -0,0 +1,16 @@
1
+ var newSelect = require('./selectSql');
2
+ var newJoin = require('./joinSql');
3
+ var newWhere = require('./whereSql');
4
+
5
+ function newSubFilter(relations, shallowFilter, depth) {
6
+ var relationCount = relations.length;
7
+ var alias = 'x' + relationCount;
8
+ var table = relations[relationCount-1].childTable;
9
+ var exists = newSelect(table,alias).prepend('EXISTS (');
10
+ var join = newJoin(relations, depth);
11
+ var where = newWhere(relations,shallowFilter, depth);
12
+ return exists.append(join).append(where).append(')');
13
+
14
+ }
15
+
16
+ module.exports = newSubFilter;
@@ -0,0 +1,50 @@
1
+ let newRelatedTable = _newRelatedTable;
2
+ const negotiateRawSqlFilter = require('../column/negotiateRawSqlFilter');
3
+ let tryGetSessionContext = require('../tryGetSessionContext');
4
+
5
+ function newWhere(_relations, _depth) {
6
+
7
+ function where(fn) {
8
+ const includeMany = tryGetSessionContext()?.engine === 'mssql';
9
+ let { relations, alias } = extract(includeMany, _relations);
10
+ const table = relations[relations.length - 1].childTable;
11
+ if (!relations[0].isMany || includeMany)
12
+ table._rootAlias = alias;
13
+
14
+ try {
15
+ let arg = typeof fn === 'function' ? fn(table) : fn;
16
+ let anyFilter = negotiateRawSqlFilter(arg);
17
+ delete table._rootAlias;
18
+ return anyFilter;
19
+ }
20
+ catch (e) {
21
+ delete table._rootAlias;
22
+ throw e;
23
+ }
24
+ }
25
+ return where;
26
+
27
+ function extract(includeMany, relations) {
28
+ let alias = relations[0].toLeg().table._dbName;
29
+ let result = [];
30
+ for (let i = 0; i < relations.length; i++) {
31
+ if (relations[i].isMany && !includeMany) {
32
+ result = [relations[i]];
33
+ alias = relations[i].toLeg().table._dbName;
34
+ }
35
+ else {
36
+ result.push(relations[i]);
37
+ alias += relations[i].toLeg().name;
38
+ }
39
+ }
40
+ return { relations: result, alias };
41
+ }
42
+
43
+ }
44
+
45
+ function _newRelatedTable() {
46
+ newRelatedTable = require('../newRelatedTable');
47
+ return newRelatedTable.apply(null, arguments);
48
+ }
49
+
50
+ module.exports = newWhere;
@@ -0,0 +1,41 @@
1
+ var newShallowJoinSql = require('../query/singleQuery/joinSql/newShallowJoinSqlCore');
2
+
3
+ function newWhereSql(relations, shallowFilter, depth = 0) {
4
+ let relation = relations[depth];
5
+ var c = {};
6
+ var sql;
7
+
8
+ c.visitJoin = function(relation) {
9
+ var table = relation.childTable;
10
+ var alias = depth === 0 ? (relation.parentTable._rootAlias || relation.parentTable._dbName) : 'x' + depth;
11
+ var leftColumns = relation.columns;
12
+ var rightColumns = table._primaryColumns;
13
+ where(alias, leftColumns, rightColumns);
14
+ };
15
+
16
+ c.visitOne = function(relation) {
17
+ var joinRelation = relation.joinRelation;
18
+ var rightColumns = joinRelation.columns;
19
+ var childTable = joinRelation.childTable;
20
+ var leftColumns = childTable._primaryColumns;
21
+ var alias = depth === 0 ? (childTable._rootAlias || childTable._dbName) : 'x' + depth;
22
+ where(alias, leftColumns, rightColumns);
23
+ };
24
+
25
+ c.visitMany = c.visitOne;
26
+
27
+ function where(alias, leftColumns, rightColumns) {
28
+ var table = relation.childTable;
29
+ var joinCore = newShallowJoinSql(table, leftColumns, rightColumns, alias, 'x' + (depth + 1));
30
+ if (shallowFilter && shallowFilter.sql()) {
31
+ sql = joinCore.prepend(' WHERE ').append(' AND ').append(shallowFilter);
32
+ }
33
+ else
34
+ sql = joinCore.prepend(' WHERE ');
35
+ }
36
+
37
+ relation.accept(c);
38
+ return sql;
39
+ }
40
+
41
+ module.exports = newWhereSql;
@@ -0,0 +1,17 @@
1
+ function extractParentKey(joinRelation, child) {
2
+
3
+ var childTable = joinRelation.childTable;
4
+ var primaryColumns = childTable._primaryColumns;
5
+ var parent = {};
6
+
7
+ joinRelation.columns.forEach(addKeyToParent);
8
+
9
+ function addKeyToParent(childPk, index) {
10
+ var primaryColumn = primaryColumns[index];
11
+ parent[primaryColumn.alias] = child[childPk.alias];
12
+ }
13
+
14
+ return parent;
15
+ }
16
+
17
+ module.exports = extractParentKey;
@@ -0,0 +1,13 @@
1
+ var extractParentKey = require('./extractParentKey');
2
+
3
+ function synchronizeAdded(action, joinRelation) {
4
+ var cache = joinRelation.parentTable._cache;
5
+ cache.subscribeAdded(onAdded);
6
+
7
+ function onAdded(child) {
8
+ var parent = extractParentKey(joinRelation, child);
9
+ action(parent, child);
10
+ }
11
+ }
12
+
13
+ module.exports = synchronizeAdded;
@@ -0,0 +1,31 @@
1
+ var extractParentKey = require('./extractParentKey');
2
+
3
+ function synchronizeChanged(manyCache, joinRelation, parent, child) {
4
+ var columns = joinRelation.columns;
5
+ columns.forEach(subscribeColumn);
6
+ child = null;
7
+
8
+ function subscribeColumn(column) {
9
+ child.subscribeChanged(onChanged, column.alias);
10
+ }
11
+
12
+ function unsubscribe(child) {
13
+ columns.forEach(unsubscribeColumn);
14
+
15
+ function unsubscribeColumn(column) {
16
+ child.unsubscribeChanged(onChanged, column.alias);
17
+ }
18
+ }
19
+
20
+ function onChanged(child) {
21
+ unsubscribe(child);
22
+ manyCache.tryRemove(parent, child);
23
+ var newParent = extractParentKey(joinRelation, child);
24
+ manyCache.tryAdd(newParent, child);
25
+ }
26
+
27
+
28
+
29
+ }
30
+
31
+ module.exports = synchronizeChanged;
@@ -0,0 +1,13 @@
1
+ var extractParentKey = require('./extractParentKey');
2
+
3
+ function synchronizeRemoved(action, joinRelation) {
4
+ var cache = joinRelation.parentTable._cache;
5
+ cache.subscribeRemoved(onRemoved);
6
+
7
+ function onRemoved(child) {
8
+ var parent = extractParentKey(joinRelation, child);
9
+ action(parent, child);
10
+ }
11
+ }
12
+
13
+ module.exports = synchronizeRemoved;
@@ -0,0 +1,7 @@
1
+ var newRowCache = require('../newRowCache');
2
+
3
+ function newExpanderCache(joinRelation) {
4
+ return newRowCache(joinRelation.childTable);
5
+ }
6
+
7
+ module.exports = newExpanderCache;
@@ -0,0 +1,20 @@
1
+ function newForeignKeyFilter(joinRelation, parentRow) {
2
+ var columns = joinRelation.columns;
3
+ var rightTable = joinRelation.childTable;
4
+
5
+ var filter = getNextFilterPart(0);
6
+
7
+ for (var i = 1; i < columns.length; i++) {
8
+
9
+ filter = filter.and(getNextFilterPart(i));
10
+ }
11
+
12
+ function getNextFilterPart(index) {
13
+ var column = columns[index];
14
+ var pk = rightTable._primaryColumns[index];
15
+ return column.eq(parentRow[pk.alias]);
16
+ }
17
+ return filter;
18
+ }
19
+
20
+ module.exports = newForeignKeyFilter;
@@ -0,0 +1,23 @@
1
+ var newCollection = require('../../newCollection');
2
+ var newQueryContext = require('../query/singleQuery/newQueryContext');
3
+
4
+ function newLeg(relation) {
5
+ var c = {};
6
+ var span = {};
7
+ span.table = relation.childTable;
8
+ span.legs = newCollection();
9
+ span.queryContext = newQueryContext();
10
+ c.span = span;
11
+ c.name = relation.leftAlias;
12
+ c.table = relation.parentTable;
13
+ c.columns = relation.columns;
14
+ c.expand = relation.expand;
15
+
16
+ c.accept = function(visitor) {
17
+ visitor.visitJoin(c);
18
+ };
19
+
20
+ return c;
21
+ }
22
+
23
+ module.exports = newLeg;