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,54 @@
1
+ const wrapQuery = require('./wrapQuery');
2
+ const encodeBoolean = require('./encodeBoolean');
3
+ const deleteFromSql = require('./deleteFromSql');
4
+ const selectForUpdateSql = require('./selectForUpdateSql');
5
+ const lastInsertedSql = require('./lastInsertedSql');
6
+ const limitAndOffset = require('./limitAndOffset');
7
+ const insertSql = require('./insertSql');
8
+ const insert = require('./insert');
9
+
10
+ function newResolveTransaction(domain, pool) {
11
+ var rdb = {poolFactory: pool};
12
+ if (!pool.connect) {
13
+ pool = pool();
14
+ rdb.pool = pool;
15
+ }
16
+
17
+ return function(onSuccess, onError) {
18
+ pool.connect(onConnected);
19
+
20
+ function onConnected(err, connection, done) {
21
+ try {
22
+ if (err) {
23
+ onError(err);
24
+ return;
25
+ }
26
+ connection.executeQuery = wrapQuery(connection);
27
+ // connection.streamQuery = wrapQueryStream(connection);
28
+ rdb.engine = 'mysql';
29
+ rdb.dbClient = connection;
30
+ rdb.dbClientDone = done;
31
+ rdb.encodeBoolean = encodeBoolean;
32
+ rdb.encodeJSON = JSON.stringify;
33
+ rdb.deleteFromSql = deleteFromSql;
34
+ rdb.selectForUpdateSql = selectForUpdateSql;
35
+ rdb.lastInsertedIsSeparate = true;
36
+ rdb.lastInsertedSql = lastInsertedSql;
37
+ rdb.insertSql = insertSql;
38
+ rdb.insert = insert;
39
+ rdb.multipleStatements = false;
40
+ rdb.limitAndOffset = limitAndOffset;
41
+ rdb.accept = function(caller) {
42
+ caller.visitMySql();
43
+ };
44
+ rdb.aggregateCount = 0;
45
+ domain.rdb = rdb;
46
+ onSuccess();
47
+ } catch (e) {
48
+ onError(e);
49
+ }
50
+ }
51
+ };
52
+ }
53
+
54
+ module.exports = newResolveTransaction;
@@ -0,0 +1,16 @@
1
+ module.exports = {
2
+ //Connection pool options - see https://github.com/coopernurse/node-pool
3
+ //number of connections to use in connection pool
4
+ //0 will disable connection pooling
5
+ poolSize: 0,
6
+
7
+ //max milliseconds a client can go unused before it is removed
8
+ //from the pool and destroyed
9
+ poolIdleTimeout: 30000,
10
+
11
+ //frequeny to check for idle clients within the client pool
12
+ reapIntervalMillis: 1000,
13
+
14
+ //pool log function / boolean
15
+ poolLog: false,
16
+ };
@@ -0,0 +1,13 @@
1
+ var pools = require('../../pools');
2
+
3
+ function endPool(genericPool, id, done) {
4
+ genericPool.drain(onDrained);
5
+
6
+ function onDrained() {
7
+ genericPool.destroyAllNow();
8
+ delete pools[id];
9
+ done();
10
+ }
11
+ }
12
+
13
+ module.exports = endPool;
@@ -0,0 +1,12 @@
1
+ function negotiatePoolOptions(pool, options) {
2
+ var config = pool.config;
3
+ for(var name in options) {
4
+ var value = options[name];
5
+ if (name === 'size')
6
+ config.connectionLimit = value;
7
+ else
8
+ config[name] = value;
9
+ }
10
+ }
11
+
12
+ module.exports = negotiatePoolOptions;
@@ -0,0 +1,67 @@
1
+ // @ts-nocheck
2
+ /* eslint-disable no-prototype-builtins */
3
+ var EventEmitter = require('events').EventEmitter;
4
+
5
+ var defaults = require('./defaults');
6
+ var genericPool = require('../../generic-pool');
7
+ var mysql = require('mysql2');
8
+
9
+ function newGenericPool(connectionString, poolOptions) {
10
+ if (typeof connectionString === 'string')
11
+ connectionString = connectionString + '?dateStrings=true&decimalNumbers=true';
12
+ else
13
+ connectionString.dateStrings = true;
14
+ poolOptions = poolOptions || {};
15
+ var pool = genericPool.Pool({
16
+ max: poolOptions.size || poolOptions.poolSize || defaults.poolSize,
17
+ idleTimeoutMillis: poolOptions.idleTimeout || defaults.poolIdleTimeout,
18
+ reapIntervalMillis: poolOptions.reapIntervalMillis || defaults.reapIntervalMillis,
19
+ log: poolOptions.log || defaults.poolLog,
20
+ create: function(cb) {
21
+ var innerPool = mysql.createPool(connectionString);
22
+ return cb(null, innerPool);
23
+ // innerPool.getConnection(onConnected);
24
+
25
+ // function onConnected(err, client) {
26
+ // console.dir('onConnected');
27
+ // if(err)
28
+ // return cb(err, null);
29
+ // client.poolCount = 0;
30
+ // return cb(null, client);
31
+ // }
32
+ },
33
+
34
+ destroy: function(client) {
35
+ client.poolCount = undefined;
36
+ client.end();
37
+ }
38
+ });
39
+ //mixin EventEmitter to pool
40
+ EventEmitter.call(pool);
41
+ for(var key in EventEmitter.prototype) {
42
+ if(EventEmitter.prototype.hasOwnProperty(key)) {
43
+ pool[key] = EventEmitter.prototype[key];
44
+ }
45
+ }
46
+ //monkey-patch with connect method
47
+ pool.connect = function(cb) {
48
+ var domain = process.domain;
49
+ pool.acquire(function(err, client) {
50
+ if(domain) {
51
+ cb = domain.bind(cb);
52
+ }
53
+ if(err) return cb(err, null, function() {/*NOOP*/});
54
+ client.poolCount++;
55
+ cb(null, client, function(err) {
56
+ if(err) {
57
+ pool.destroy(client);
58
+ } else {
59
+ pool.release(client);
60
+ }
61
+ });
62
+ });
63
+ };
64
+ return pool;
65
+ }
66
+
67
+ module.exports = newGenericPool;
@@ -0,0 +1,3 @@
1
+ module.exports = function(_alias) {
2
+ return ' FOR UPDATE';
3
+ };
@@ -0,0 +1,16 @@
1
+ var log = require('../table/log');
2
+
3
+ function wrapQuery(connection) {
4
+ var runOriginalQuery = connection.query;
5
+ return runQuery;
6
+
7
+ function runQuery(query, onCompleted) {
8
+ var params = query.parameters;
9
+ var sql = query.sql();
10
+ log.emitQuery({sql, parameters: params});
11
+ return runOriginalQuery.call(connection, sql, params, onCompleted);
12
+ }
13
+
14
+ }
15
+
16
+ module.exports = wrapQuery;
@@ -0,0 +1,9 @@
1
+ function wrapQueryStream(connection) {
2
+ return runQuery;
3
+
4
+ function runQuery(query, options) {
5
+ return connection.executeQuery(query).stream(options);
6
+ }
7
+ }
8
+
9
+ module.exports = wrapQueryStream;
@@ -0,0 +1,3 @@
1
+ module.exports = function() {
2
+ return [];
3
+ };
@@ -0,0 +1,55 @@
1
+ function newCollection() {
2
+ var c = {};
3
+ var initialArgs = [];
4
+ for (var i = 0; i < arguments.length; i++) {
5
+ initialArgs.push(arguments[i]);
6
+ }
7
+ var ranges = [initialArgs];
8
+
9
+ c.addRange = function(otherCollection) {
10
+ ranges.push(otherCollection);
11
+ };
12
+
13
+ c.add = function(element) {
14
+ c.addRange([element]);
15
+ };
16
+
17
+ c.toArray = function() {
18
+ var result = [];
19
+ c.forEach(onEach);
20
+ return result;
21
+
22
+ function onEach(element) {
23
+ result.push(element);
24
+ }
25
+ };
26
+
27
+ c.forEach = function(callback) {
28
+ var index = 0;
29
+ for (var i = 0; i < ranges.length; i++) {
30
+ ranges[i].forEach(onEach);
31
+ }
32
+
33
+ function onEach(element) {
34
+ callback(element, index);
35
+ index++;
36
+ }
37
+
38
+ };
39
+
40
+ Object.defineProperty(c, 'length', {
41
+ enumerable: false,
42
+ get: function() {
43
+ var result = 0;
44
+ for (var i = 0; i < ranges.length; i++) {
45
+ result += ranges[i].length;
46
+ }
47
+ return result;
48
+ },
49
+ });
50
+
51
+
52
+ return c;
53
+ }
54
+
55
+ module.exports = newCollection;
package/src/newId.js ADDED
@@ -0,0 +1 @@
1
+ module.exports = require('uuid').v4;
@@ -0,0 +1,22 @@
1
+ function newImmutable(fn) {
2
+ var result;
3
+ var _run = runFirst;
4
+ return run;
5
+
6
+ function run() {
7
+ var args = [].slice.call(arguments);
8
+ return _run(args);
9
+ }
10
+
11
+ function runFirst(args) {
12
+ result = fn.apply(null, args);
13
+ _run = runNIgnoreArgs;
14
+ return result;
15
+ }
16
+
17
+ function runNIgnoreArgs() {
18
+ return result;
19
+ }
20
+ }
21
+
22
+ module.exports = newImmutable;
@@ -0,0 +1,5 @@
1
+ function newObject() {
2
+ return {};
3
+ }
4
+
5
+ module.exports = newObject;
@@ -0,0 +1,8 @@
1
+ var format = 'delete from %s where %s.rowId in (SELECT %s.rowId FROM %s %s%s)';
2
+ var util = require('util');
3
+
4
+ function deleteFromSql(table, alias, whereSql) {
5
+ var name = table._dbName;
6
+ return util.format(format, name, name, alias, name, alias, whereSql);
7
+ }
8
+ module.exports = deleteFromSql;
@@ -0,0 +1,7 @@
1
+ function encodeBoolean(bool) {
2
+ if (bool)
3
+ return 1;
4
+ return 0;
5
+ }
6
+
7
+ module.exports = encodeBoolean;
@@ -0,0 +1,7 @@
1
+ //unused because using sql parameters instead
2
+ //Remove ?
3
+ function encodeBuffer(buffer) {
4
+ return 'E\'\\\\x' + buffer.toString('hex') + '\'';
5
+ }
6
+
7
+ module.exports = encodeBuffer;
@@ -0,0 +1,7 @@
1
+ function encodeDate(date) {
2
+ if (date.toISOString)
3
+ return '\'' + date.toISOString() + '\'';
4
+ return '\'' + date + '\'';
5
+ }
6
+
7
+ module.exports = encodeDate;
@@ -0,0 +1,5 @@
1
+ function formatDateColumn(value) {
2
+ return `TO_TIMESTAMP(${value}, 'YYYY-MM-DD"T"HH24:MI:SS.FF3')`;
3
+ }
4
+
5
+ module.exports = formatDateColumn;
@@ -0,0 +1,5 @@
1
+ function formatDateColumn(column, alias) {
2
+ return `TO_CHAR(${alias}.${column._dbName}, 'YYYY-MM-DD"T"HH24:MI:SS.FF3')`;
3
+ }
4
+
5
+ module.exports = formatDateColumn;
@@ -0,0 +1,23 @@
1
+ const newInsertCommand = require('../table/commands/newInsertCommand');
2
+ const newInsertCommandCore = require('./newInsertCommandCore');
3
+ const setSessionSingleton = require('../table/setSessionSingleton');
4
+ const newGetLastInsertedCommand = require('../table/commands/newGetLastInsertedCommand');
5
+ const executeQueries = require('../table/executeQueries');
6
+
7
+ function insert(table, row, options) {
8
+
9
+ return new Promise((res, rej) => {
10
+ const cmd = newInsertCommand(newInsertCommandCore, table, row, options);
11
+ cmd.disallowCompress = true;
12
+ executeQueries([cmd]).then((result) => result[0]).then(onResult).then(res, rej);
13
+
14
+ function onResult([result]) {
15
+ setSessionSingleton('lastRowid', result.lastRowid);
16
+ const selectCmd = newGetLastInsertedCommand(table, row, cmd);
17
+ return executeQueries([selectCmd]).then((result) => res(result[0]));
18
+ }
19
+
20
+ });
21
+ }
22
+
23
+ module.exports = insert;
@@ -0,0 +1,73 @@
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()} (${table._primaryColumns[0]._dbName}) VALUES(DEFAULT)`;
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
+ if (column.tsType === 'DateColumn')
58
+ values.push('TO_TIMESTAMP(%s, \'YYYY-MM-DD"T"HH24:MI:SS.FF6\')');
59
+ else
60
+ values.push('%s');
61
+ }
62
+ }
63
+ }
64
+
65
+
66
+ function outputInserted() {
67
+
68
+ return ' ' + outputInsertedSql(table) + ' ';
69
+ }
70
+
71
+ }
72
+
73
+ module.exports = getSqlTemplate;
@@ -0,0 +1,14 @@
1
+ let getSessionSingleton = require('../table/getSessionSingleton');
2
+
3
+ function lastInsertedSql(table, keyValues) {
4
+ return keyValues.map((value,i) => {
5
+ let column = table._primaryColumns[i];
6
+ if (value === undefined)
7
+ return `ROWID='${getSessionSingleton('lastRowid')}'`;
8
+ else
9
+ return column.eq(value);
10
+ });
11
+
12
+ }
13
+
14
+ module.exports = lastInsertedSql;
@@ -0,0 +1,18 @@
1
+ function limitAndOffset(span) {
2
+ if (span.offset)
3
+ return ` OFFSET ${span.offset} ROWS FETCH NEXT ${limit()} ROWS ONLY`;
4
+ else if (span.limit || span.limit === 0)
5
+ return ` FETCH FIRST ${span.limit} ROWS ONLY`;
6
+ else
7
+ return '';
8
+
9
+ function limit() {
10
+ if (span.limit || span.limit === 0)
11
+ return span.limit;
12
+ else
13
+ return '';
14
+ }
15
+
16
+ }
17
+
18
+ module.exports = limitAndOffset;
@@ -0,0 +1,79 @@
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} target USING (SELECT ${values.join(',')} FROM DUAL) source ON (${join()}) WHEN MATCHED THEN ${matched} WHEN NOT MATCHED THEN ${whenNotMatched()} ${outputInsertedSql(table)}`;
15
+ else
16
+ sql = `MERGE INTO ${table._dbName} target USING (SELECT ${values.join(',')} FROM DUAL) 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]} ${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 ${column.alias}`);
58
+ if (!column.isPrimary)
59
+ addConflictUpdate(column);
60
+ }
61
+ }
62
+
63
+ if (conflictColumnUpdates.length > 0)
64
+ conflictColumnUpdateSql = 'UPDATE SET ' + conflictColumnUpdates.join(',');
65
+
66
+
67
+ function addConflictUpdate(column) {
68
+ let concurrency = options[column.alias]?.concurrency || options.concurrency;
69
+ if (concurrency === 'overwrite')
70
+ conflictColumnUpdates.push(`target.${column._dbName}=source.${column._dbName}`);
71
+ else if (concurrency === 'optimistic')
72
+ // conflictColumnUpdates.push(`target.${column._dbName} = CASE WHEN target.${column._dbName} <> source.${column._dbName} THEN RAISE_APPLICATION_ERROR(-20001, 'Conflict when updating ${column._dbName}') ELSE target.${column._dbName} END`);
73
+ conflictColumnUpdates.push(`target.${column._dbName} = CASE WHEN target.${column._dbName} <> source.${column._dbName} THEN 1/0 ELSE target.${column._dbName} END`);
74
+
75
+ }
76
+ }
77
+ }
78
+
79
+ module.exports = insertSql;
@@ -0,0 +1,128 @@
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
+ return c;
126
+ }
127
+
128
+ module.exports = newDatabase;