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,5 @@
1
+ function formatDateOut(column, alias) {
2
+ return `CONVERT(VARCHAR, ${alias}.${column._dbName}, 121)`;
3
+ }
4
+
5
+ module.exports = formatDateOut;
@@ -0,0 +1,5 @@
1
+ function formatJSONOut(column, alias) {
2
+ return `JSON_QUERY(${alias}.${column._dbName})`;
3
+ }
4
+
5
+ module.exports = formatJSONOut;
@@ -0,0 +1,8 @@
1
+ var newQueryCore = require('./newQueryCore');
2
+
3
+ function newQuery() {
4
+ var query = newQueryCore.apply(null, arguments);
5
+ return query.append(' FOR JSON path, INCLUDE_NULL_VALUES');
6
+ }
7
+
8
+ module.exports = newQuery;
@@ -0,0 +1,18 @@
1
+ var newSingleQuery = require('./query/newSingleQuery');
2
+ var newSubQueries = require('./query/newSubQueries');
3
+ var extractFilter = require('../../table/query/extractFilter');
4
+ var extractOrderBy = require('../../table/query/extractOrderBy');
5
+ var extractLimit = require('../../table/query/extractLimit');
6
+ var limitAndOffset = require('../limitAndOffset');
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 = limitAndOffset(span);
13
+
14
+ var subQueries = newSubQueries(table,span,alias);
15
+ return newSingleQuery(table,filter,span,alias,subQueries,orderBy,limit,offset);
16
+ }
17
+
18
+ module.exports = newQuery;
@@ -0,0 +1,29 @@
1
+ var newColumnSql = require('./singleQuery/newShallowColumnSql');
2
+ var newWhereSql = require('../../../table/query/singleQuery/newWhereSql');
3
+ var newParameterized = require('../../../table/query/newParameterized');
4
+
5
+ function _new(table, filter, span, alias, subQueries, orderBy, limit, offset) {
6
+
7
+ var name = table._dbName;
8
+ var columnSql = newColumnSql(table, alias, span);
9
+ var whereSql = newWhereSql(table, filter, alias);
10
+ if (limit)
11
+ limit = limit + ' ';
12
+
13
+ let join = '';
14
+ const set = new Set();
15
+ for(let key in span.aggregates) {
16
+ const agg = span.aggregates[key];
17
+ for(let sql of agg.joins) {
18
+ if (!set.has(sql)) {
19
+ join = join + sql;
20
+ set.add(sql);
21
+ }
22
+ }
23
+ }
24
+
25
+
26
+ return newParameterized('select ' + limit + columnSql).append(subQueries).append(' from ' + name + ' ' + alias + join).append(whereSql).append(orderBy + offset);
27
+ }
28
+
29
+ module.exports = _new;
@@ -0,0 +1,16 @@
1
+ var newShallowJoinSql = require('../../../../table/query/singleQuery/joinSql/newShallowJoinSqlCore');
2
+ var newQuery = require('../../newQueryCore');
3
+
4
+ function joinLegToQuery(parentAlias,leg,_legNo) {
5
+ var childAlias = parentAlias + leg.name;
6
+ var span = leg.span;
7
+ var parentTable = leg.table;
8
+ var childColumns = span.table._primaryColumns;
9
+ var parentColumns = leg.columns;
10
+
11
+ var filter = newShallowJoinSql(parentTable,childColumns,parentColumns,childAlias,parentAlias,leg.span.where);
12
+ var query = newQuery(span.table,filter,span,childAlias);
13
+ return query.prepend('JSON_QUERY((').append(` FOR JSON PATH, INCLUDE_NULL_VALUES, WITHOUT_ARRAY_WRAPPER)) "${leg.name}"`);
14
+ }
15
+
16
+ module.exports = joinLegToQuery;
@@ -0,0 +1,16 @@
1
+ var newShallowJoinSql = require('../../../../table/query/singleQuery/joinSql/newShallowJoinSqlCore');
2
+ var newQuery = require('../../newQueryCore');
3
+
4
+ function manyLegToQuery(rightAlias, leg, _legNo) {
5
+ var leftAlias = rightAlias + leg.name;
6
+ var span = leg.span;
7
+ var rightTable = leg.table;
8
+ var rightColumns = rightTable._primaryColumns;
9
+ var leftColumns = leg.columns;
10
+
11
+ var filter = newShallowJoinSql(rightTable, leftColumns, rightColumns, leftAlias, rightAlias, leg.span.where);
12
+ var query = newQuery(span.table, filter, span, leftAlias);
13
+ return query.prepend('JSON_QUERY( coalesce((').append(` FOR JSON PATH, INCLUDE_NULL_VALUES),'[]')) "${leg.name}"`);
14
+ }
15
+
16
+ module.exports = manyLegToQuery;
@@ -0,0 +1,19 @@
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 + leg.name;
8
+ var span = leg.span;
9
+ var rightTable = leg.table;
10
+ var rightColumns = rightTable._primaryColumns;
11
+ var leftColumns = leg.columns;
12
+
13
+ var filter = newShallowJoinSql(rightTable,leftColumns,rightColumns,leftAlias,rightAlias,leg.span.where);
14
+ var query = newQuery(span.table,filter,span,leftAlias);
15
+ var sql = 'SELECT TOP 1' + query.sql().substring(6);
16
+ return newParameterized(util.format('JSON_QUERY((%s FOR JSON PATH, INCLUDE_NULL_VALUES, WITHOUT_ARRAY_WRAPPER)) "%s"',sql, leg.name ), query.parameters);
17
+ }
18
+
19
+ module.exports = oneLegToQuery;
@@ -0,0 +1,48 @@
1
+ var joinLegToQuery = _joinLegToQuery;
2
+ var oneLegToQuery = _oneLegToQuery;
3
+ var manyLegToQuery = _manyLegToQuery;
4
+ var newParameterized = require('../../../table/query/newParameterized');
5
+
6
+ function newSubQueries(_table,span,alias) {
7
+ var result = newParameterized('', []);
8
+ var c = {};
9
+ var _legNo;
10
+
11
+ c.visitJoin = function(leg) {
12
+ result = result.append(',').append(joinLegToQuery( alias,leg,_legNo));
13
+ };
14
+ c.visitOne = function(leg) {
15
+ result = result.append(',').append(oneLegToQuery( alias,leg,_legNo));
16
+ };
17
+ c.visitMany = function(leg) {
18
+ result = result.append(',').append(manyLegToQuery( alias,leg,_legNo));
19
+ };
20
+
21
+ span.legs.forEach(onEachLeg);
22
+
23
+ function onEachLeg(leg,legNo) {
24
+ _legNo = legNo;
25
+ leg.accept(c);
26
+ }
27
+
28
+ return result;
29
+ }
30
+
31
+ function _joinLegToQuery() {
32
+ joinLegToQuery = require('./newSubQueries/joinLegToQuery');
33
+ return joinLegToQuery.apply(null,arguments);
34
+ }
35
+
36
+ function _oneLegToQuery() {
37
+ oneLegToQuery = require('./newSubQueries/oneLegToQuery');
38
+ return oneLegToQuery.apply(null,arguments);
39
+ }
40
+
41
+ function _manyLegToQuery() {
42
+ manyLegToQuery = require('./newSubQueries/manyLegToQuery');
43
+ return manyLegToQuery.apply(null,arguments);
44
+ }
45
+
46
+
47
+
48
+ module.exports = newSubQueries;
@@ -0,0 +1,34 @@
1
+ function _new(table,alias, span) {
2
+ let columnsMap = span.columns;
3
+ var columns = table._columns;
4
+ var sql = '';
5
+ var separator = '';
6
+
7
+ for (var i = 0; i < columns.length; i++) {
8
+ var column = columns[i];
9
+ if (!columnsMap || (columnsMap.get(column))) {
10
+ sql = sql + separator + formatColumn(column) + ' as ' + column.alias;
11
+ separator = ',';
12
+ }
13
+ }
14
+
15
+ for (let name in span.aggregates || {}) {
16
+ sql = sql + separator + span.aggregates[name].expression(name);
17
+ }
18
+
19
+ return sql;
20
+
21
+ function formatColumn(column) {
22
+
23
+ const formatted = column.formatOut && column.tsType !== 'DateColumn' ? column.formatOut(alias) : alias + '.' + column._dbName;
24
+ if (column.dbNull === null)
25
+ return formatted;
26
+ else {
27
+ const encoded = column.encode.unsafe(column.dbNull);
28
+ return `CASE WHEN ${formatted}=${encoded} THEN null ELSE ${formatted} END`;
29
+ }
30
+
31
+ }
32
+ }
33
+
34
+ module.exports = _new;
@@ -0,0 +1,27 @@
1
+ const newQuery = require('./getManyDto/newQuery');
2
+ const negotiateRawSqlFilter = require('../table/column/negotiateRawSqlFilter');
3
+ const strategyToSpan = require('../table/strategyToSpan');
4
+ const executeQueries = require('../table/executeQueries');
5
+
6
+ async function getManyDto(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
+ let span = strategyToSpan(table,strategy);
13
+ let alias = table._dbName;
14
+
15
+ const query = newQuery(table, filter, span, alias);
16
+ const res = await executeQueries([query]);
17
+ const rows = await res[0];
18
+ if (rows.length === 0)
19
+ return [];
20
+ let json = '';
21
+ for (let i = 0; i < rows.length; i++) {
22
+ json += rows[i]['JSON_F52E2B61-18A1-11d1-B105-00805F49916B'];
23
+ }
24
+ return JSON.parse(json);
25
+ }
26
+
27
+ module.exports = getManyDto;
@@ -0,0 +1,13 @@
1
+ let newInsertCommand = require('../table/commands/newInsertCommand');
2
+ let newInsertCommandCore = require('../table/commands/newInsertCommandCore');
3
+ let executeQueries = require('../table/executeQueries');
4
+
5
+ async function insertDefault(table, row, options) {
6
+ let insertCmd = newInsertCommand(newInsertCommandCore, table, row, options);
7
+ insertCmd.disallowCompress = true;
8
+
9
+ return executeQueries([insertCmd]).then((result) => result[result.length - 1]);
10
+
11
+ }
12
+
13
+ module.exports = insertDefault;
@@ -0,0 +1,70 @@
1
+ let outputInsertedSql = require('./outputInsertedSql');
2
+ let mergeSql = require('./mergeSql');
3
+
4
+ function getSqlTemplate(_table, _row, options) {
5
+ if (hasConcurrency(_table, options) && hasColumns())
6
+ return mergeSql.apply(null, arguments);
7
+ else
8
+ return insertSql.apply(null, arguments);
9
+
10
+ function hasColumns() {
11
+ for(let p in _row) {
12
+ let alias = _table[p]?.alias;
13
+ if (alias && _row['__' + alias] !== undefined && _table[p]?.equal)
14
+ return true;
15
+ }
16
+ }
17
+ }
18
+
19
+ function hasConcurrency(table,options) {
20
+ for (let i = 0; i < table._primaryColumns.length; i++) {
21
+ const concurrency = options[table._primaryColumns[i]]?.concurrency;
22
+ if ( concurrency === 'skipOnConflict' || concurrency === 'overwrite' )
23
+ return true;
24
+ }
25
+ return options.concurrency === 'skipOnConflict' || options.concurrency === 'overwrite';
26
+ }
27
+
28
+ function insertSql(table, row) {
29
+ let columnNames = [];
30
+ let regularColumnNames = [];
31
+ let values = [];
32
+ let sql = 'INSERT INTO ' + table._dbName + ' ';
33
+ addDiscriminators();
34
+ addColumns();
35
+ if (columnNames.length === 0)
36
+ sql += `${outputInserted()}DEFAULT VALUES`;
37
+ else
38
+ sql = sql + '('+ columnNames.join(',') + ')' + outputInserted() + 'VALUES (' + values.join(',') + ')';
39
+ return sql;
40
+
41
+ function addDiscriminators() {
42
+ let discriminators = table._columnDiscriminators;
43
+ for (let i = 0; i < discriminators.length; i++) {
44
+ let parts = discriminators[i].split('=');
45
+ columnNames.push(parts[0]);
46
+ values.push(parts[1]);
47
+ }
48
+ }
49
+
50
+ function addColumns() {
51
+ let columns = table._columns;
52
+ for (let i = 0; i < columns.length; i++) {
53
+ let column = columns[i];
54
+ regularColumnNames.push(column._dbName);
55
+ if (row['__' + column.alias] !== undefined) {
56
+ columnNames.push(column._dbName);
57
+ values.push('%s');
58
+ }
59
+ }
60
+ }
61
+
62
+
63
+ function outputInserted() {
64
+
65
+ return ' ' + outputInsertedSql(table) + ' ';
66
+ }
67
+
68
+ }
69
+
70
+ module.exports = getSqlTemplate;
@@ -0,0 +1,16 @@
1
+ function limitAndOffset(span) {
2
+ if (span.offset)
3
+ return ` OFFSET ${span.offset} ROWS${limit()}`;
4
+ else
5
+ return '';
6
+
7
+ function limit() {
8
+ if (span.limit || span.limit === 0)
9
+ return ` FETCH NEXT ${span.limit} ROW ONLY`;
10
+ else
11
+ return '';
12
+ }
13
+
14
+ }
15
+
16
+ module.exports = limitAndOffset;
@@ -0,0 +1,76 @@
1
+ const outputInsertedSql = require('./outputInsertedSql');
2
+
3
+ function insertSql(table, row, options) {
4
+ let columnNames = [];
5
+ let regularColumnNames = [];
6
+ let conflictColumnUpdateSql = '';
7
+ let values = [];
8
+ addDiscriminators();
9
+ addColumns();
10
+
11
+ const matched = whenMatched();
12
+ let sql;
13
+ if (matched)
14
+ sql = `MERGE INTO ${table._dbName} AS target USING (SELECT ${values.join(',')}) AS source ON ${join()} WHEN MATCHED THEN ${matched} WHEN NOT MATCHED THEN ${whenNotMatched()} ${outputInsertedSql(table)};`;
15
+ else
16
+ sql = `MERGE INTO ${table._dbName} AS target USING (SELECT ${values.join(',')}) AS source ON ${join()} WHEN NOT MATCHED THEN ${whenNotMatched()} ${outputInsertedSql(table)};`;
17
+ return sql;
18
+
19
+ function join() {
20
+ const discriminators = table._columnDiscriminators.map(x => {
21
+ const name = x.split('=')[0];
22
+
23
+ return `target.${name}=source.${name}`;
24
+ });
25
+ const primaries = table._primaryColumns.map(x => `target.${x._dbName}=source.${x._dbName}`);
26
+ return [...discriminators, ...primaries].join(' AND ');
27
+ }
28
+
29
+ function whenMatched() {
30
+ if (options.concurrency === 'skipOnConflict' || options.concurrency === 'overwrite') {
31
+ return conflictColumnUpdateSql;
32
+ }
33
+ else return '';
34
+ }
35
+
36
+ function whenNotMatched() {
37
+ return `INSERT (${columnNames.join(',')}) VALUES (${columnNames.map(name => 'source.' + name)})`;
38
+ }
39
+
40
+ function addDiscriminators() {
41
+ let discriminators = table._columnDiscriminators;
42
+ for (let i = 0; i < discriminators.length; i++) {
43
+ let parts = discriminators[i].split('=');
44
+ columnNames.push(parts[0]);
45
+ values.push(`${parts[1]} AS ${parts[0]}`);
46
+ }
47
+ }
48
+
49
+ function addColumns() {
50
+ let conflictColumnUpdates = [];
51
+ let columns = table._columns;
52
+ for (let i = 0; i < columns.length; i++) {
53
+ let column = columns[i];
54
+ regularColumnNames.push(column._dbName);
55
+ if (row['__' + column.alias] !== undefined) {
56
+ columnNames.push(column._dbName);
57
+ values.push(`%s AS ${column.alias}`);
58
+ addConflictUpdate(column);
59
+ }
60
+ }
61
+
62
+ if (conflictColumnUpdates.length > 0)
63
+ conflictColumnUpdateSql = 'UPDATE SET ' + conflictColumnUpdates.join(',');
64
+
65
+
66
+ function addConflictUpdate(column) {
67
+ let concurrency = options[column.alias]?.concurrency || options.concurrency;
68
+ if (concurrency === 'overwrite')
69
+ conflictColumnUpdates.push(`target.${column._dbName}=source.${column._dbName}`);
70
+ else if (concurrency === 'optimistic')
71
+ conflictColumnUpdates.push(`target.${column._dbName} = CASE WHEN target.${column._dbName} <> source.${column._dbName} THEN CAST('12345678-1234-1234-1234-123456789012Conflict when updating ${column._dbName}12345678-1234-1234-1234-123456789012' AS INTEGER) ELSE target.${column._dbName} END`);
72
+ }
73
+ }
74
+ }
75
+
76
+ module.exports = insertSql;
@@ -0,0 +1,129 @@
1
+ let createDomain = require('../createDomain');
2
+ let newTransaction = require('./newTransaction');
3
+ let begin = require('../table/begin');
4
+ let commit = require('../table/commit');
5
+ let rollback = require('../table/rollback');
6
+ let newPool = require('./newPool');
7
+ let useHook = require('../useHook');
8
+ let promise = require('promise/domains');
9
+ let versionArray = process.version.replace('v', '').split('.');
10
+ let major = parseInt(versionArray[0]);
11
+ let express = require('../hostExpress');
12
+ let hostLocal = require('../hostLocal');
13
+ let doQuery = require('../query');
14
+ let releaseDbClient = require('../table/releaseDbClient');
15
+ let setSessionSingleton = require('../table/setSessionSingleton');
16
+
17
+ function newDatabase(connectionString, poolOptions) {
18
+ if (!connectionString)
19
+ throw new Error('Connection string cannot be empty');
20
+ var pool;
21
+ if (!poolOptions)
22
+ pool = newPool.bind(null,connectionString, poolOptions);
23
+ else
24
+ pool = newPool(connectionString, poolOptions);
25
+
26
+ let c = {poolFactory: pool, hostLocal, express};
27
+
28
+ c.transaction = function(options, fn) {
29
+ if ((arguments.length === 1) && (typeof options === 'function')) {
30
+ fn = options;
31
+ options = undefined;
32
+ }
33
+ let domain = createDomain();
34
+
35
+ if (fn)
36
+ return domain.run(runInTransaction);
37
+ else if ((major >= 12) && useHook()) {
38
+ domain.exitContext = true;
39
+ return domain.start().then(run);
40
+ }
41
+ else
42
+ return domain.run(run);
43
+
44
+ async function runInTransaction() {
45
+ let result;
46
+ let transaction = newTransaction(domain, pool);
47
+ await new Promise(transaction)
48
+ .then(begin)
49
+ .then(fn)
50
+ .then((res) => result = res)
51
+ .then(c.commit)
52
+ .then(null, c.rollback);
53
+ return result;
54
+ }
55
+
56
+ function run() {
57
+ let p;
58
+ let transaction = newTransaction(domain, pool);
59
+ if (useHook())
60
+ p = new Promise(transaction);
61
+ else
62
+ p = new promise(transaction);
63
+
64
+ return p.then(begin);
65
+ }
66
+
67
+ };
68
+
69
+ c.createTransaction = function() {
70
+ let domain = createDomain();
71
+ let transaction = newTransaction(domain, pool);
72
+ let p = domain.run(() => new Promise(transaction).then(begin));
73
+
74
+ function run(fn) {
75
+ return p.then(domain.run.bind(domain, fn));
76
+ }
77
+ return run;
78
+ };
79
+
80
+ c.bindTransaction = function() {
81
+ // @ts-ignore
82
+ var domain = process.domain;
83
+ let p = domain.run(() => true);
84
+
85
+ function run(fn) {
86
+ return p.then(domain.run.bind(domain, fn));
87
+ }
88
+ return run;
89
+ };
90
+
91
+ c.query = function(query) {
92
+ let domain = createDomain();
93
+ let transaction = newTransaction(domain, pool);
94
+ let p = domain.run(() => new Promise(transaction)
95
+ .then(() => setSessionSingleton('changes', []))
96
+ .then(() => doQuery(query).then(onResult, onError)));
97
+ return p;
98
+
99
+ function onResult(result) {
100
+ releaseDbClient();
101
+ return result;
102
+ }
103
+
104
+ function onError(e) {
105
+ releaseDbClient();
106
+ throw e;
107
+ }
108
+ };
109
+
110
+
111
+ c.rollback = rollback;
112
+ c.commit = commit;
113
+
114
+ c.end = function() {
115
+ if (poolOptions)
116
+ return pool.end();
117
+ else
118
+ return Promise.resolve();
119
+ };
120
+
121
+ c.accept = function(caller) {
122
+ caller.visitSqlite();
123
+ };
124
+
125
+
126
+ return c;
127
+ }
128
+
129
+ module.exports = newDatabase;
@@ -0,0 +1,19 @@
1
+ var pools = require('../pools');
2
+ var promise = require('../table/promise');
3
+ var end = require('./pool/end');
4
+ var newGenericPool = require('./pool/newGenericPool');
5
+ var newId = require('../newId');
6
+
7
+ function newPool(connectionString, poolOptions) {
8
+ var pool = newGenericPool(connectionString, poolOptions);
9
+ var id = newId();
10
+ var boundEnd = end.bind(null, pool, id);
11
+ var c = {};
12
+
13
+ c.connect = pool.connect;
14
+ c.end = promise.denodeify(boundEnd);
15
+ pools[id] = c;
16
+ return c;
17
+ }
18
+
19
+ module.exports = newPool;
@@ -0,0 +1,72 @@
1
+ var wrapQuery = require('./wrapQuery');
2
+ var encodeBoolean = require('./encodeBoolean');
3
+ var deleteFromSql = require('./deleteFromSql');
4
+ var selectForUpdateSql = require('./selectForUpdateSql');
5
+ var outputInsertedSql = require('./outputInsertedSql');
6
+ const limitAndOffset = require('./limitAndOffset');
7
+ const getManyDto = require('./getManyDto');
8
+ const formatDateOut = require('./formatDateOut');
9
+ const formatJSONOut = require('./formatJSONOut');
10
+ const insertSql = require('./insertSql');
11
+ const insert = require('./insert');
12
+
13
+ function newResolveTransaction(domain, pool) {
14
+ var rdb = {poolFactory: pool};
15
+ if (!pool.connect) {
16
+ pool = pool();
17
+ rdb.pool = pool;
18
+ }
19
+
20
+ return function(onSuccess, onError) {
21
+ pool.connect(onConnected);
22
+
23
+ function onConnected(err, client, done) {
24
+ try {
25
+ if (err) {
26
+ onError(err);
27
+ return;
28
+ }
29
+ client.executeQuery = wrapQuery(client);
30
+ rdb.engine = 'mssql';
31
+ rdb.getManyDto = getManyDto;
32
+ rdb.dbClient = client;
33
+ rdb.dbClientDone = done;
34
+ rdb.encodeBoolean = encodeBoolean;
35
+ rdb.decodeJSON = decodeJSON;
36
+ rdb.encodeJSON = JSON.stringify;
37
+ rdb.deleteFromSql = deleteFromSql;
38
+ rdb.selectForUpdateSql = selectForUpdateSql;
39
+ rdb.outputInsertedSql = outputInsertedSql;
40
+ rdb.lastInsertedIsSeparate = false;
41
+ rdb.insertSql = insertSql;
42
+ rdb.insert = insert;
43
+ rdb.formatDateOut = formatDateOut;
44
+ rdb.formatJSONOut = formatJSONOut;
45
+ rdb.multipleStatements = true;
46
+ rdb.begin = 'BEGIN TRANSACTION';
47
+ rdb.limit = (span) => {
48
+ if (span.offset)
49
+ return '';
50
+ else if (span.limit || span.limit === 0)
51
+ return 'TOP ' + span.limit;
52
+ else
53
+ return '';
54
+ };
55
+ rdb.limitAndOffset = limitAndOffset;
56
+ rdb.accept = function(caller) {
57
+ caller.visitSqlite();
58
+ };
59
+ rdb.aggregateCount = 0;
60
+ domain.rdb = rdb;
61
+ onSuccess();
62
+ } catch (e) {
63
+ onError(e);
64
+ }
65
+ }
66
+ };
67
+ }
68
+ function decodeJSON(value){
69
+ return JSON.parse(value);
70
+ }
71
+
72
+ module.exports = newResolveTransaction;
@@ -0,0 +1,11 @@
1
+ function outputInsertedSql(table) {
2
+ let separator = '';
3
+ let result = 'OUTPUT ';
4
+ for (let i = 0; i < table._columns.length; i++) {
5
+ result += separator + 'INSERTED.' + table._columns[i]._dbName;
6
+ separator = ',';
7
+ }
8
+ return result;
9
+ }
10
+
11
+ module.exports = outputInsertedSql;