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,14 @@
1
+ let newInsertCommand = require('../table/commands/newInsertCommand');
2
+ let newInsertCommandCore = require('../table/commands/newInsertCommandCore');
3
+ let executeQueries = require('../table/executeQueries');
4
+
5
+
6
+ function insertDefault(table, row, options) {
7
+ let insertCmd = newInsertCommand(newInsertCommandCore, table, row, options);
8
+ insertCmd.disallowCompress = true;
9
+
10
+ return executeQueries([insertCmd]).then((result) => result[result.length - 1]);
11
+
12
+ }
13
+
14
+ module.exports = insertDefault;
@@ -0,0 +1,70 @@
1
+ let lastInsertedSql = require('./lastInsertedSql');
2
+ let getSessionContext = require('../table/getSessionContext');
3
+
4
+ function insertSql(table, row, options) {
5
+ let columnNames = [];
6
+ let regularColumnNames = [];
7
+ let conflictColumnUpdateSql = '';
8
+ let values = [];
9
+ let sql = 'INSERT INTO ' + table._dbName + ' ';
10
+ addDiscriminators();
11
+ addColumns();
12
+ if (columnNames.length === 0)
13
+ sql += `${outputInserted()}DEFAULT VALUES ${lastInsertedSql(table)}`;
14
+ else
15
+ sql = sql + '(' + columnNames.join(',') + ') ' + outputInserted() + 'VALUES (' + values.join(',') + ')' + onConflict() + lastInsertedSql(table);
16
+ return sql;
17
+
18
+ function onConflict() {
19
+ if (options.concurrency === 'skipOnConflict' || options.concurrency === 'overwrite') {
20
+ const primaryKeys = table._primaryColumns.map(x => x._dbName).join(',');
21
+ return ` ON CONFLICT(${primaryKeys}) ${conflictColumnUpdateSql} `;
22
+ }
23
+ else return '';
24
+ }
25
+
26
+ function addDiscriminators() {
27
+ let discriminators = table._columnDiscriminators;
28
+ for (let i = 0; i < discriminators.length; i++) {
29
+ let parts = discriminators[i].split('=');
30
+ columnNames.push(parts[0]);
31
+ values.push(parts[1]);
32
+ }
33
+ }
34
+
35
+ function addColumns() {
36
+ let conflictColumnUpdates = [];
37
+ let columns = table._columns;
38
+ for (let i = 0; i < columns.length; i++) {
39
+ let column = columns[i];
40
+ regularColumnNames.push(column._dbName);
41
+ if (row['__' + column.alias] !== undefined) {
42
+ columnNames.push(column._dbName);
43
+ values.push('%s');
44
+ addConflictUpdate(column);
45
+ }
46
+ }
47
+ if (conflictColumnUpdates.length === 0)
48
+ conflictColumnUpdateSql = 'DO NOTHING';
49
+ else
50
+ conflictColumnUpdateSql = 'DO UPDATE SET ' + conflictColumnUpdates.join(',');
51
+
52
+ function addConflictUpdate(column) {
53
+ let concurrency = options[column.alias]?.concurrency || options.concurrency;
54
+ if (concurrency === 'overwrite')
55
+ conflictColumnUpdates.push(`${column._dbName}=EXCLUDED.${column._dbName}`);
56
+ else if (concurrency === 'optimistic')
57
+ conflictColumnUpdates.push(`${column._dbName} = CASE WHEN ${table._dbName}.${column._dbName} <> EXCLUDED.${column._dbName} THEN CAST(random()::int || '12345678-1234-1234-1234-123456789012Conflict when updating ${column._dbName}12345678-1234-1234-1234-123456789012' AS INTEGER) ELSE ${table._dbName}.${column._dbName} END`);
58
+ }
59
+ }
60
+
61
+
62
+ function outputInserted() {
63
+ let context = getSessionContext();
64
+ if (!context.lastInsertedIsSeparate && context.outputInsertedSql)
65
+ return context.outputInsertedSql(table) + ' ';
66
+ return '';
67
+ }
68
+ }
69
+
70
+ module.exports = insertSql;
@@ -0,0 +1,11 @@
1
+ function lastInsertedSql(table) {
2
+ let separator = '';
3
+ let result = 'RETURNING ';
4
+ for (let i = 0; i < table._columns.length; i++) {
5
+ result += separator + table._columns[i]._dbName;
6
+ separator = ',';
7
+ }
8
+ return result;
9
+ }
10
+
11
+ module.exports = lastInsertedSql;
@@ -0,0 +1,18 @@
1
+ function limitAndOffset(span) {
2
+ if (span.offset)
3
+ return ` limit ${limit()} offset ${span.offset}`;
4
+ else if (span.limit || span.limit === 0)
5
+ return ` limit ${span.limit}`;
6
+ else
7
+ return '';
8
+
9
+ function limit() {
10
+ if (span.limit || span.limit === 0)
11
+ return span.limit;
12
+ else
13
+ return 'all';
14
+ }
15
+
16
+ }
17
+
18
+ module.exports = limitAndOffset;
@@ -0,0 +1,153 @@
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 lock = require('../lock');
8
+ let executeSchema = require('./schema');
9
+ let useHook = require('../useHook');
10
+ let promise = require('promise/domains');
11
+ let versionArray = process.version.replace('v', '').split('.');
12
+ let major = parseInt(versionArray[0]);
13
+ let express = require('../hostExpress');
14
+ let hostLocal = require('../hostLocal');
15
+ let doQuery = require('../query');
16
+ let releaseDbClient = require('../table/releaseDbClient');
17
+ let setSessionSingleton = require('../table/setSessionSingleton');
18
+ let types = require('pg').types;
19
+
20
+ types.setTypeParser(1700, function(val) {
21
+ return parseFloat(val);
22
+ });
23
+
24
+ function newDatabase(connectionString, poolOptions) {
25
+ if (!connectionString)
26
+ throw new Error('Connection string cannot be empty');
27
+ var pool;
28
+ if (!poolOptions)
29
+ pool = newPool.bind(null, connectionString, poolOptions);
30
+ else
31
+ pool = newPool(connectionString, poolOptions);
32
+
33
+ let c = { poolFactory: pool, hostLocal, express };
34
+
35
+ c.transaction = function(options, fn) {
36
+ if ((arguments.length === 1) && (typeof options === 'function')) {
37
+ fn = options;
38
+ options = undefined;
39
+ }
40
+ let domain = createDomain();
41
+
42
+ if (fn)
43
+ return domain.run(runInTransaction);
44
+ else if ((major >= 12) && useHook()) {
45
+ domain.exitContext = true;
46
+ return domain.start().then(run);
47
+ }
48
+ else
49
+ return domain.run(run);
50
+
51
+ async function runInTransaction() {
52
+ let result;
53
+ let transaction = newTransaction(domain, pool);
54
+ await new Promise(transaction)
55
+ .then(begin)
56
+ .then(negotiateSchema)
57
+ .then(fn)
58
+ .then((res) => result = res)
59
+ .then(c.commit)
60
+ .then(null, c.rollback);
61
+ return result;
62
+ }
63
+
64
+ function run() {
65
+ let p;
66
+ let transaction = newTransaction(domain, pool);
67
+ if (useHook())
68
+ p = new Promise(transaction);
69
+ else
70
+ p = new promise(transaction);
71
+
72
+ return p.then(begin)
73
+ .then(negotiateSchema);
74
+ }
75
+
76
+ function negotiateSchema(previous) {
77
+ let schema = options && options.schema;
78
+ if (!schema)
79
+ return previous;
80
+ return executeSchema(schema);
81
+ }
82
+ };
83
+
84
+ c.createTransaction = function(options) {
85
+ let domain = createDomain();
86
+ let transaction = newTransaction(domain, pool);
87
+ let p = domain.run(() => new Promise(transaction).then(begin).then(negotiateSchema));
88
+
89
+ function run(fn) {
90
+ return p.then(domain.run.bind(domain, fn));
91
+ }
92
+
93
+ function negotiateSchema(previous) {
94
+ let schema = options && options.schema;
95
+ if (!schema)
96
+ return previous;
97
+ return executeSchema(schema);
98
+ }
99
+
100
+ return run;
101
+ };
102
+
103
+ c.bindTransaction = function() {
104
+ // @ts-ignore
105
+ var domain = process.domain;
106
+ let p = domain.run(() => true);
107
+
108
+ function run(fn) {
109
+ return p.then(domain.run.bind(domain, fn));
110
+ }
111
+ return run;
112
+ };
113
+
114
+ c.query = function(query) {
115
+ let domain = createDomain();
116
+ let transaction = newTransaction(domain, pool);
117
+ let p = domain.run(() => new Promise(transaction)
118
+ .then(() => setSessionSingleton('changes', []))
119
+ .then(() => doQuery(query).then(onResult, onError)));
120
+ return p;
121
+
122
+ function onResult(result) {
123
+ releaseDbClient();
124
+ return result;
125
+ }
126
+
127
+ function onError(e) {
128
+ releaseDbClient();
129
+ throw e;
130
+ }
131
+ };
132
+
133
+
134
+ c.rollback = rollback;
135
+ c.commit = commit;
136
+ c.lock = lock;
137
+ c.schema = executeSchema;
138
+
139
+ c.end = function() {
140
+ if (poolOptions)
141
+ return pool.end();
142
+ else
143
+ return Promise.resolve();
144
+ };
145
+
146
+ c.accept = function(caller) {
147
+ caller.visitPg();
148
+ };
149
+
150
+ return c;
151
+ }
152
+
153
+ 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 newPgPool = require('./pool/newPgPool');
5
+ var newId = require('../newId');
6
+
7
+ function newPool(connectionString, poolOptions) {
8
+ var pool = newPgPool(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,7 @@
1
+ var QueryStream;
2
+
3
+ module.exports = function(sql, params) {
4
+ if (!QueryStream)
5
+ QueryStream = require('pg-query-stream');
6
+ return new QueryStream(sql, params);
7
+ };
@@ -0,0 +1,58 @@
1
+ var wrapQuery = require('./wrapQuery');
2
+ var wrapQueryStream = require('./wrapQueryStream');
3
+ var encodeDate = require('./encodeDate');
4
+ var encodeBoolean = require('./encodeBoolean');
5
+ var deleteFromSql = require('./deleteFromSql');
6
+ var selectForUpdateSql = require('./selectForUpdateSql');
7
+ var limitAndOffset = require('./limitAndOffset');
8
+ var formatDateOut = require('./formatDateOut');
9
+ var encodeJSON = require('./encodeJSON');
10
+ var insertSql = require('./insertSql');
11
+ var 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
+ client.streamQuery = wrapQueryStream(client);
31
+ rdb.engine = 'pg';
32
+ rdb.dbClient = client;
33
+ rdb.dbClientDone = done;
34
+ rdb.encodeBoolean = encodeBoolean;
35
+ rdb.encodeDate = encodeDate;
36
+ rdb.encodeJSON = encodeJSON;
37
+ rdb.formatDateOut = formatDateOut;
38
+ rdb.deleteFromSql = deleteFromSql;
39
+ rdb.selectForUpdateSql = selectForUpdateSql;
40
+ rdb.lastInsertedIsSeparate = false;
41
+ rdb.insertSql = insertSql;
42
+ rdb.insert = insert;
43
+ rdb.multipleStatements = true;
44
+ rdb.limitAndOffset = limitAndOffset;
45
+ rdb.accept = function(caller) {
46
+ caller.visitPg();
47
+ };
48
+ rdb.aggregateCount = 0;
49
+ domain.rdb = rdb;
50
+ onSuccess();
51
+ } catch (e) {
52
+ onError(e);
53
+ }
54
+ }
55
+ };
56
+ }
57
+
58
+ module.exports = newResolveTransaction;
@@ -0,0 +1,45 @@
1
+ module.exports = {
2
+ // database host defaults to localhost
3
+ host: 'localhost',
4
+
5
+ //database user's name
6
+ user: process.platform === 'win32' ? process.env.USERNAME : process.env.USER,
7
+
8
+ //name of database to connect
9
+ database: process.platform === 'win32' ? process.env.USERNAME : process.env.USER,
10
+
11
+ //database user's password
12
+ password: null,
13
+
14
+ //database port
15
+ port: 5432,
16
+
17
+ //number of rows to return at a time from a prepared statement's
18
+ //portal. 0 will return all rows at once
19
+ rows: 0,
20
+
21
+ // binary result mode
22
+ binary: false,
23
+
24
+ //Connection pool options - see https://github.com/coopernurse/node-pool
25
+ //number of connections to use in connection pool
26
+ //0 will disable connection pooling
27
+ poolSize: 0,
28
+
29
+ //max milliseconds a client can go unused before it is removed
30
+ //from the pool and destroyed
31
+ poolIdleTimeout: 30000,
32
+
33
+ //frequeny to check for idle clients within the client pool
34
+ reapIntervalMillis: 1000,
35
+
36
+ //pool log function / boolean
37
+ poolLog: false,
38
+
39
+ client_encoding: '',
40
+
41
+ ssl: false,
42
+
43
+ application_name : undefined,
44
+ fallback_application_name: undefined
45
+ };
@@ -0,0 +1,13 @@
1
+ var pools = require('../../pools');
2
+
3
+ function endPool(pgPool, id, done) {
4
+ pgPool.drain(onDrained);
5
+
6
+ function onDrained() {
7
+ pgPool.destroyAllNow();
8
+ delete pools[id];
9
+ done();
10
+ }
11
+ }
12
+
13
+ module.exports = endPool;
@@ -0,0 +1,82 @@
1
+ /* eslint-disable no-prototype-builtins */
2
+ //slightly modified code from github.com/brianc/node-postgres
3
+ var EventEmitter = require('events').EventEmitter;
4
+
5
+ var defaults = require('./defaults');
6
+ var genericPool = require('../../generic-pool');
7
+ var _pg = require('pg');
8
+
9
+ function newPgPool(connectionString, poolOptions) {
10
+ poolOptions = poolOptions || {};
11
+ let pg = poolOptions.native ? _pg.native : _pg;
12
+ var pool = genericPool.Pool({
13
+ max: poolOptions.size || poolOptions.poolSize || defaults.poolSize,
14
+ idleTimeoutMillis: poolOptions.idleTimeout || defaults.poolIdleTimeout,
15
+ reapIntervalMillis: poolOptions.reapIntervalMillis || defaults.reapIntervalMillis,
16
+ log: poolOptions.log || defaults.poolLog,
17
+ create: function(cb) {
18
+ var client = new pg.Client(connectionString);
19
+ client.connect(function(err) {
20
+ if (err) return cb(err, null);
21
+
22
+ //handle connected client background errors by emitting event
23
+ //via the pg object and then removing errored client from the pool
24
+ client.on('error', function(e) {
25
+ pool.emit('error', e, client);
26
+
27
+ // If the client is already being destroyed, the error
28
+ // occurred during stream ending. Do not attempt to destroy
29
+ // the client again.
30
+ if (!client._destroying) {
31
+ pool.destroy(client);
32
+ }
33
+ });
34
+
35
+ // Remove connection from pool on disconnect
36
+ client.on('end', function(_e) {
37
+ // Do not enter infinite loop between pool.destroy
38
+ // and client 'end' event...
39
+ if (!client._destroying) {
40
+ pool.destroy(client);
41
+ }
42
+ });
43
+ client.poolCount = 0;
44
+ return cb(null, client);
45
+ });
46
+ },
47
+ destroy: function(client) {
48
+ client._destroying = true;
49
+ client.poolCount = undefined;
50
+ client.end();
51
+ }
52
+ });
53
+ //mixin EventEmitter to pool
54
+ EventEmitter.call(pool);
55
+ for (var key in EventEmitter.prototype) {
56
+ if (EventEmitter.prototype.hasOwnProperty(key)) {
57
+ pool[key] = EventEmitter.prototype[key];
58
+ }
59
+ }
60
+ //monkey-patch with connect method
61
+ pool.connect = function(cb) {
62
+ var domain = process.domain;
63
+ pool.acquire(function(err, client) {
64
+ if (domain) {
65
+ cb = domain.bind(cb);
66
+ }
67
+ if (err) return cb(err, null, function() {
68
+ /*NOOP*/ });
69
+ client.poolCount++;
70
+ cb(null, client, function(err) {
71
+ if (err) {
72
+ pool.destroy(client);
73
+ } else {
74
+ pool.release(client);
75
+ }
76
+ });
77
+ });
78
+ };
79
+ return pool;
80
+ }
81
+
82
+ module.exports = newPgPool;
@@ -0,0 +1,14 @@
1
+ function replaceParamChar(query, params) {
2
+ if (params.length === 0)
3
+ return query.sql();
4
+ var splitted = query.sql().split('?');
5
+ var sql = '';
6
+ var lastIndex = splitted.length - 1;
7
+ for (var i = 0; i < lastIndex; i++) {
8
+ sql += splitted[i] + '$' + (i + 1);
9
+ }
10
+ sql += splitted[lastIndex];
11
+ return sql;
12
+ }
13
+
14
+ module.exports = replaceParamChar;
@@ -0,0 +1,11 @@
1
+ var query = require('../query');
2
+
3
+ function executeSchema(schema) {
4
+ if (!schema)
5
+ throw new Error('Missing schema');
6
+ if (!Array.isArray(schema))
7
+ schema = [schema];
8
+ return query('SET LOCAL search_path TO ' + schema.join(','));
9
+ }
10
+
11
+ module.exports = executeSchema;
@@ -0,0 +1,3 @@
1
+ module.exports = function(alias) {
2
+ return ' FOR UPDATE OF ' + alias;
3
+ };
@@ -0,0 +1,33 @@
1
+ var log = require('../table/log');
2
+ var replaceParamChar = require('./replaceParamChar');
3
+
4
+ function wrapQuery(connection) {
5
+ var runOriginalQuery = connection.query;
6
+ return runQuery;
7
+
8
+ function runQuery(query, onCompleted) {
9
+ var params = query.parameters;
10
+ var sql = replaceParamChar(query, params);
11
+ query = {
12
+ text: sql,
13
+ values: params,
14
+ types: query.types
15
+ };
16
+ log.emitQuery({sql, parameters: params});
17
+
18
+ runOriginalQuery.call(connection, query, onInnerCompleted);
19
+
20
+ function onInnerCompleted(err, result) {
21
+ if (err)
22
+ onCompleted(err);
23
+ else {
24
+ if (Array.isArray(result))
25
+ result = result[result.length-1];
26
+ onCompleted(null, result.rows);
27
+ }
28
+ }
29
+ }
30
+
31
+ }
32
+
33
+ module.exports = wrapQuery;
@@ -0,0 +1,20 @@
1
+ var log = require('../table/log');
2
+ var replaceParamChar = require('./replaceParamChar');
3
+ var newStreamableQuery = require('./newStreamableQuery');
4
+
5
+ function wrapQueryStream(connection) {
6
+ var runOriginalQuery = connection.query;
7
+ return runQuery;
8
+
9
+ function runQuery(query, options) {
10
+ var params = query.parameters;
11
+ var sql = replaceParamChar(query, params);
12
+ log.emitQuery({sql, parameters: params});
13
+ query = newStreamableQuery(sql, params, options);
14
+
15
+ return runOriginalQuery.call(connection, query);
16
+ }
17
+
18
+ }
19
+
20
+ module.exports = wrapQueryStream;
package/src/pools.js ADDED
@@ -0,0 +1,17 @@
1
+ var pools = require('./newObject')();
2
+
3
+ Object.defineProperty(pools, 'end', {
4
+ enumerable: false,
5
+ value: end
6
+ });
7
+
8
+ function end() {
9
+ var all = [];
10
+ for (var poolId in pools) {
11
+ var endPool = pools[poolId].end();
12
+ all.push(endPool);
13
+ }
14
+ return Promise.all(all);
15
+ }
16
+
17
+ module.exports = pools;
@@ -0,0 +1,10 @@
1
+ function negotiateParameters(parameters) {
2
+ if(parameters === undefined)
3
+ return [];
4
+ else if(parameters.length !== undefined)
5
+ return parameters;
6
+ else
7
+ throw new Error('Query has invalid parameters property. Must be undefined or array');
8
+ }
9
+
10
+ module.exports = negotiateParameters;
@@ -0,0 +1,14 @@
1
+ function negotiateSql(query) {
2
+ if(typeof(query) === 'string')
3
+ return function() { return query; };
4
+
5
+ var sql = query.sql;
6
+ if(typeof(sql) === 'function')
7
+ return sql;
8
+ else if(typeof(sql) === 'string')
9
+ return function() { return sql; };
10
+ else
11
+ throw new Error('Query lacks sql property string or function');
12
+ }
13
+
14
+ module.exports = negotiateSql;
@@ -0,0 +1,17 @@
1
+ var negotiateSql = require('./negotiateSql');
2
+ var negotiateParameters = require('./negotiateParameters');
3
+
4
+ function wrapQuery(query) {
5
+ var safeSql = negotiateSql(query);
6
+ var safeParameters = negotiateParameters(query.parameters);
7
+ let obj = {
8
+ sql: safeSql,
9
+ parameters: safeParameters
10
+ };
11
+ if (query.types)
12
+ obj.types = query.types;
13
+ return obj;
14
+ }
15
+
16
+
17
+ module.exports = wrapQuery;
package/src/query.js ADDED
@@ -0,0 +1,13 @@
1
+ var executeQueries = require('./table/executeQueries');
2
+ var wrapQuery = require('./query/wrapQuery');
3
+
4
+ function doQuery(query) {
5
+ var wrappedQuery = wrapQuery(query);
6
+ return executeQueries([wrappedQuery]).then(unwrapResult);
7
+ }
8
+
9
+ function unwrapResult(results) {
10
+ return results[0];
11
+ }
12
+
13
+ module.exports = doQuery;
@@ -0,0 +1,8 @@
1
+ var format = 'delete from %s from %s as %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, 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;