prostgles-server 4.2.183 → 4.2.185

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 (432) hide show
  1. package/.github/workflows/main.yml +15 -15
  2. package/.prettierignore +2 -0
  3. package/README.md +1 -1
  4. package/dist/Auth/AuthHandler.d.ts +1 -1
  5. package/dist/Auth/AuthHandler.d.ts.map +1 -1
  6. package/dist/Auth/AuthHandler.js +64 -32
  7. package/dist/Auth/AuthHandler.js.map +1 -1
  8. package/dist/Auth/AuthTypes.d.ts +15 -1
  9. package/dist/Auth/AuthTypes.d.ts.map +1 -1
  10. package/dist/Auth/getSafeReturnURL.d.ts.map +1 -1
  11. package/dist/Auth/getSafeReturnURL.js.map +1 -1
  12. package/dist/Auth/sendEmail.d.ts.map +1 -1
  13. package/dist/Auth/sendEmail.js +6 -6
  14. package/dist/Auth/sendEmail.js.map +1 -1
  15. package/dist/Auth/setAuthProviders.d.ts +1 -1
  16. package/dist/Auth/setAuthProviders.d.ts.map +1 -1
  17. package/dist/Auth/setAuthProviders.js +15 -8
  18. package/dist/Auth/setAuthProviders.js.map +1 -1
  19. package/dist/Auth/setEmailProvider.d.ts.map +1 -1
  20. package/dist/Auth/setEmailProvider.js +23 -4
  21. package/dist/Auth/setEmailProvider.js.map +1 -1
  22. package/dist/Auth/setupAuthRoutes.d.ts.map +1 -1
  23. package/dist/Auth/setupAuthRoutes.js +27 -9
  24. package/dist/Auth/setupAuthRoutes.js.map +1 -1
  25. package/dist/DBEventsManager.d.ts.map +1 -1
  26. package/dist/DBEventsManager.js +24 -19
  27. package/dist/DBEventsManager.js.map +1 -1
  28. package/dist/DBSchemaBuilder.d.ts.map +1 -1
  29. package/dist/DBSchemaBuilder.js +18 -5
  30. package/dist/DBSchemaBuilder.js.map +1 -1
  31. package/dist/DboBuilder/DboBuilder.d.ts.map +1 -1
  32. package/dist/DboBuilder/DboBuilder.js +7 -2
  33. package/dist/DboBuilder/DboBuilder.js.map +1 -1
  34. package/dist/DboBuilder/DboBuilderTypes.d.ts +4 -4
  35. package/dist/DboBuilder/DboBuilderTypes.d.ts.map +1 -1
  36. package/dist/DboBuilder/DboBuilderTypes.js.map +1 -1
  37. package/dist/DboBuilder/QueryBuilder/Functions.d.ts +2 -2
  38. package/dist/DboBuilder/QueryBuilder/Functions.d.ts.map +1 -1
  39. package/dist/DboBuilder/QueryBuilder/Functions.js +293 -173
  40. package/dist/DboBuilder/QueryBuilder/Functions.js.map +1 -1
  41. package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts +2 -2
  42. package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -1
  43. package/dist/DboBuilder/QueryBuilder/QueryBuilder.js +52 -29
  44. package/dist/DboBuilder/QueryBuilder/QueryBuilder.js.map +1 -1
  45. package/dist/DboBuilder/QueryBuilder/getJoinQuery.d.ts.map +1 -1
  46. package/dist/DboBuilder/QueryBuilder/getJoinQuery.js +51 -32
  47. package/dist/DboBuilder/QueryBuilder/getJoinQuery.js.map +1 -1
  48. package/dist/DboBuilder/QueryBuilder/getNewQuery.d.ts.map +1 -1
  49. package/dist/DboBuilder/QueryBuilder/getNewQuery.js +48 -25
  50. package/dist/DboBuilder/QueryBuilder/getNewQuery.js.map +1 -1
  51. package/dist/DboBuilder/QueryBuilder/getSelectQuery.d.ts +1 -1
  52. package/dist/DboBuilder/QueryBuilder/getSelectQuery.d.ts.map +1 -1
  53. package/dist/DboBuilder/QueryBuilder/getSelectQuery.js +32 -23
  54. package/dist/DboBuilder/QueryBuilder/getSelectQuery.js.map +1 -1
  55. package/dist/DboBuilder/QueryStreamer.d.ts +2 -2
  56. package/dist/DboBuilder/QueryStreamer.d.ts.map +1 -1
  57. package/dist/DboBuilder/QueryStreamer.js +68 -23
  58. package/dist/DboBuilder/QueryStreamer.js.map +1 -1
  59. package/dist/DboBuilder/TableHandler/DataValidator.d.ts +1 -1
  60. package/dist/DboBuilder/TableHandler/DataValidator.d.ts.map +1 -1
  61. package/dist/DboBuilder/TableHandler/DataValidator.js +79 -43
  62. package/dist/DboBuilder/TableHandler/DataValidator.js.map +1 -1
  63. package/dist/DboBuilder/TableHandler/TableHandler.d.ts.map +1 -1
  64. package/dist/DboBuilder/TableHandler/TableHandler.js +39 -15
  65. package/dist/DboBuilder/TableHandler/TableHandler.js.map +1 -1
  66. package/dist/DboBuilder/TableHandler/delete.d.ts.map +1 -1
  67. package/dist/DboBuilder/TableHandler/delete.js +44 -13
  68. package/dist/DboBuilder/TableHandler/delete.js.map +1 -1
  69. package/dist/DboBuilder/TableHandler/insert.d.ts.map +1 -1
  70. package/dist/DboBuilder/TableHandler/insert.js +81 -22
  71. package/dist/DboBuilder/TableHandler/insert.js.map +1 -1
  72. package/dist/DboBuilder/TableHandler/insertTest.d.ts.map +1 -1
  73. package/dist/DboBuilder/TableHandler/insertTest.js.map +1 -1
  74. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.d.ts +1 -1
  75. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.d.ts.map +1 -1
  76. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js +7 -4
  77. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js.map +1 -1
  78. package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.d.ts.map +1 -1
  79. package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js +24 -5
  80. package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js.map +1 -1
  81. package/dist/DboBuilder/TableHandler/update.d.ts.map +1 -1
  82. package/dist/DboBuilder/TableHandler/update.js +16 -4
  83. package/dist/DboBuilder/TableHandler/update.js.map +1 -1
  84. package/dist/DboBuilder/TableHandler/updateBatch.d.ts.map +1 -1
  85. package/dist/DboBuilder/TableHandler/updateBatch.js +33 -10
  86. package/dist/DboBuilder/TableHandler/updateBatch.js.map +1 -1
  87. package/dist/DboBuilder/TableHandler/updateFile.d.ts.map +1 -1
  88. package/dist/DboBuilder/TableHandler/updateFile.js +24 -6
  89. package/dist/DboBuilder/TableHandler/updateFile.js.map +1 -1
  90. package/dist/DboBuilder/TableHandler/upsert.d.ts.map +1 -1
  91. package/dist/DboBuilder/TableHandler/upsert.js +22 -6
  92. package/dist/DboBuilder/TableHandler/upsert.js.map +1 -1
  93. package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts +5 -5
  94. package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts.map +1 -1
  95. package/dist/DboBuilder/ViewHandler/ViewHandler.js +64 -36
  96. package/dist/DboBuilder/ViewHandler/ViewHandler.js.map +1 -1
  97. package/dist/DboBuilder/ViewHandler/count.d.ts.map +1 -1
  98. package/dist/DboBuilder/ViewHandler/count.js +21 -7
  99. package/dist/DboBuilder/ViewHandler/count.js.map +1 -1
  100. package/dist/DboBuilder/ViewHandler/find.d.ts.map +1 -1
  101. package/dist/DboBuilder/ViewHandler/find.js +76 -22
  102. package/dist/DboBuilder/ViewHandler/find.js.map +1 -1
  103. package/dist/DboBuilder/ViewHandler/getExistsCondition.d.ts.map +1 -1
  104. package/dist/DboBuilder/ViewHandler/getExistsCondition.js +19 -10
  105. package/dist/DboBuilder/ViewHandler/getExistsCondition.js.map +1 -1
  106. package/dist/DboBuilder/ViewHandler/getExistsFilters.d.ts.map +1 -1
  107. package/dist/DboBuilder/ViewHandler/getExistsFilters.js +12 -5
  108. package/dist/DboBuilder/ViewHandler/getExistsFilters.js.map +1 -1
  109. package/dist/DboBuilder/ViewHandler/getInfo.d.ts.map +1 -1
  110. package/dist/DboBuilder/ViewHandler/getInfo.js +27 -9
  111. package/dist/DboBuilder/ViewHandler/getInfo.js.map +1 -1
  112. package/dist/DboBuilder/ViewHandler/getTableJoinQuery.d.ts +2 -2
  113. package/dist/DboBuilder/ViewHandler/getTableJoinQuery.d.ts.map +1 -1
  114. package/dist/DboBuilder/ViewHandler/getTableJoinQuery.js +42 -23
  115. package/dist/DboBuilder/ViewHandler/getTableJoinQuery.js.map +1 -1
  116. package/dist/DboBuilder/ViewHandler/parseComplexFilter.d.ts.map +1 -1
  117. package/dist/DboBuilder/ViewHandler/parseComplexFilter.js +22 -9
  118. package/dist/DboBuilder/ViewHandler/parseComplexFilter.js.map +1 -1
  119. package/dist/DboBuilder/ViewHandler/parseFieldFilter.d.ts +4 -4
  120. package/dist/DboBuilder/ViewHandler/parseFieldFilter.d.ts.map +1 -1
  121. package/dist/DboBuilder/ViewHandler/parseFieldFilter.js +13 -11
  122. package/dist/DboBuilder/ViewHandler/parseFieldFilter.js.map +1 -1
  123. package/dist/DboBuilder/ViewHandler/parseJoinPath.d.ts +1 -1
  124. package/dist/DboBuilder/ViewHandler/parseJoinPath.d.ts.map +1 -1
  125. package/dist/DboBuilder/ViewHandler/parseJoinPath.js +44 -29
  126. package/dist/DboBuilder/ViewHandler/parseJoinPath.js.map +1 -1
  127. package/dist/DboBuilder/ViewHandler/prepareSortItems.d.ts.map +1 -1
  128. package/dist/DboBuilder/ViewHandler/prepareSortItems.js +36 -27
  129. package/dist/DboBuilder/ViewHandler/prepareSortItems.js.map +1 -1
  130. package/dist/DboBuilder/ViewHandler/prepareWhere.d.ts.map +1 -1
  131. package/dist/DboBuilder/ViewHandler/prepareWhere.js +16 -12
  132. package/dist/DboBuilder/ViewHandler/prepareWhere.js.map +1 -1
  133. package/dist/DboBuilder/ViewHandler/size.d.ts.map +1 -1
  134. package/dist/DboBuilder/ViewHandler/size.js +24 -7
  135. package/dist/DboBuilder/ViewHandler/size.js.map +1 -1
  136. package/dist/DboBuilder/ViewHandler/subscribe.d.ts.map +1 -1
  137. package/dist/DboBuilder/ViewHandler/subscribe.js +40 -12
  138. package/dist/DboBuilder/ViewHandler/subscribe.js.map +1 -1
  139. package/dist/DboBuilder/ViewHandler/validateViewRules.d.ts.map +1 -1
  140. package/dist/DboBuilder/ViewHandler/validateViewRules.js +20 -5
  141. package/dist/DboBuilder/ViewHandler/validateViewRules.js.map +1 -1
  142. package/dist/DboBuilder/dboBuilderUtils.d.ts.map +1 -1
  143. package/dist/DboBuilder/dboBuilderUtils.js +18 -7
  144. package/dist/DboBuilder/dboBuilderUtils.js.map +1 -1
  145. package/dist/DboBuilder/getColumns.d.ts.map +1 -1
  146. package/dist/DboBuilder/getColumns.js +22 -7
  147. package/dist/DboBuilder/getColumns.js.map +1 -1
  148. package/dist/DboBuilder/getCondition.d.ts.map +1 -1
  149. package/dist/DboBuilder/getCondition.js +43 -30
  150. package/dist/DboBuilder/getCondition.js.map +1 -1
  151. package/dist/DboBuilder/getSubscribeRelatedTables.d.ts.map +1 -1
  152. package/dist/DboBuilder/getSubscribeRelatedTables.js +38 -27
  153. package/dist/DboBuilder/getSubscribeRelatedTables.js.map +1 -1
  154. package/dist/DboBuilder/getTablesForSchemaPostgresSQL.d.ts.map +1 -1
  155. package/dist/DboBuilder/getTablesForSchemaPostgresSQL.js +9 -9
  156. package/dist/DboBuilder/getTablesForSchemaPostgresSQL.js.map +1 -1
  157. package/dist/DboBuilder/insertNestedRecords.d.ts +3 -3
  158. package/dist/DboBuilder/insertNestedRecords.d.ts.map +1 -1
  159. package/dist/DboBuilder/insertNestedRecords.js +79 -44
  160. package/dist/DboBuilder/insertNestedRecords.js.map +1 -1
  161. package/dist/DboBuilder/parseUpdateRules.d.ts.map +1 -1
  162. package/dist/DboBuilder/parseUpdateRules.js +38 -14
  163. package/dist/DboBuilder/parseUpdateRules.js.map +1 -1
  164. package/dist/DboBuilder/prepareShortestJoinPaths.d.ts.map +1 -1
  165. package/dist/DboBuilder/prepareShortestJoinPaths.js +56 -31
  166. package/dist/DboBuilder/prepareShortestJoinPaths.js.map +1 -1
  167. package/dist/DboBuilder/runSQL.d.ts.map +1 -1
  168. package/dist/DboBuilder/runSQL.js +41 -21
  169. package/dist/DboBuilder/runSQL.js.map +1 -1
  170. package/dist/DboBuilder/runTransaction.d.ts +1 -1
  171. package/dist/DboBuilder/runTransaction.d.ts.map +1 -1
  172. package/dist/DboBuilder/runTransaction.js +2 -2
  173. package/dist/DboBuilder/runTransaction.js.map +1 -1
  174. package/dist/DboBuilder/sqlErrCodeToMsg.d.ts.map +1 -1
  175. package/dist/DboBuilder/sqlErrCodeToMsg.js +297 -38
  176. package/dist/DboBuilder/sqlErrCodeToMsg.js.map +1 -1
  177. package/dist/DboBuilder/uploadFile.d.ts.map +1 -1
  178. package/dist/DboBuilder/uploadFile.js +33 -9
  179. package/dist/DboBuilder/uploadFile.js.map +1 -1
  180. package/dist/Event_Trigger_Tags.d.ts +1 -1
  181. package/dist/Event_Trigger_Tags.d.ts.map +1 -1
  182. package/dist/Event_Trigger_Tags.js +1 -1
  183. package/dist/Event_Trigger_Tags.js.map +1 -1
  184. package/dist/FileManager/FileManager.d.ts.map +1 -1
  185. package/dist/FileManager/FileManager.js +6 -3
  186. package/dist/FileManager/FileManager.js.map +1 -1
  187. package/dist/FileManager/getValidatedFileType.d.ts.map +1 -1
  188. package/dist/FileManager/getValidatedFileType.js +18 -16
  189. package/dist/FileManager/getValidatedFileType.js.map +1 -1
  190. package/dist/FileManager/initFileManager.d.ts.map +1 -1
  191. package/dist/FileManager/initFileManager.js +7 -1
  192. package/dist/FileManager/initFileManager.js.map +1 -1
  193. package/dist/FileManager/upload.d.ts +1 -1
  194. package/dist/FileManager/upload.d.ts.map +1 -1
  195. package/dist/FileManager/upload.js +3 -3
  196. package/dist/FileManager/upload.js.map +1 -1
  197. package/dist/FileManager/uploadStream.d.ts +1 -1
  198. package/dist/FileManager/uploadStream.d.ts.map +1 -1
  199. package/dist/FileManager/uploadStream.js +6 -7
  200. package/dist/FileManager/uploadStream.js.map +1 -1
  201. package/dist/Filtering.d.ts +3 -3
  202. package/dist/Filtering.d.ts.map +1 -1
  203. package/dist/Filtering.js +70 -37
  204. package/dist/Filtering.js.map +1 -1
  205. package/dist/JSONBValidation/validate_jsonb_schema_sql.d.ts.map +1 -1
  206. package/dist/JSONBValidation/validate_jsonb_schema_sql.js +1 -4
  207. package/dist/JSONBValidation/validate_jsonb_schema_sql.js.map +1 -1
  208. package/dist/JSONBValidation/validation.d.ts.map +1 -1
  209. package/dist/JSONBValidation/validation.js +46 -24
  210. package/dist/JSONBValidation/validation.js.map +1 -1
  211. package/dist/Logging.d.ts +2 -2
  212. package/dist/Logging.d.ts.map +1 -1
  213. package/dist/PostgresNotifListenManager.d.ts.map +1 -1
  214. package/dist/PostgresNotifListenManager.js +20 -22
  215. package/dist/PostgresNotifListenManager.js.map +1 -1
  216. package/dist/Prostgles.d.ts +1 -1
  217. package/dist/Prostgles.d.ts.map +1 -1
  218. package/dist/Prostgles.js +37 -11
  219. package/dist/Prostgles.js.map +1 -1
  220. package/dist/ProstglesTypes.d.ts.map +1 -1
  221. package/dist/ProstglesTypes.js +6 -1
  222. package/dist/ProstglesTypes.js.map +1 -1
  223. package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
  224. package/dist/PubSubManager/PubSubManager.js +10 -5
  225. package/dist/PubSubManager/PubSubManager.js.map +1 -1
  226. package/dist/PubSubManager/addSub.d.ts.map +1 -1
  227. package/dist/PubSubManager/addSub.js +4 -6
  228. package/dist/PubSubManager/addSub.js.map +1 -1
  229. package/dist/PubSubManager/addSync.d.ts.map +1 -1
  230. package/dist/PubSubManager/addSync.js +10 -6
  231. package/dist/PubSubManager/addSync.js.map +1 -1
  232. package/dist/PubSubManager/getCreatePubSubManagerError.d.ts.map +1 -1
  233. package/dist/PubSubManager/getCreatePubSubManagerError.js +3 -1
  234. package/dist/PubSubManager/getCreatePubSubManagerError.js.map +1 -1
  235. package/dist/PubSubManager/getPubSubManagerInitQuery.d.ts.map +1 -1
  236. package/dist/PubSubManager/getPubSubManagerInitQuery.js +8 -8
  237. package/dist/PubSubManager/getPubSubManagerInitQuery.js.map +1 -1
  238. package/dist/PubSubManager/initPubSubManager.d.ts.map +1 -1
  239. package/dist/PubSubManager/initPubSubManager.js +7 -9
  240. package/dist/PubSubManager/initPubSubManager.js.map +1 -1
  241. package/dist/PubSubManager/notifListener.d.ts.map +1 -1
  242. package/dist/PubSubManager/notifListener.js +23 -12
  243. package/dist/PubSubManager/notifListener.js.map +1 -1
  244. package/dist/PubSubManager/orphanTriggerCheck.d.ts.map +1 -1
  245. package/dist/PubSubManager/orphanTriggerCheck.js.map +1 -1
  246. package/dist/PubSubManager/pushSubData.d.ts.map +1 -1
  247. package/dist/PubSubManager/pushSubData.js +1 -1
  248. package/dist/PubSubManager/pushSubData.js.map +1 -1
  249. package/dist/PublishParser/PublishParser.d.ts +1 -1
  250. package/dist/PublishParser/PublishParser.d.ts.map +1 -1
  251. package/dist/PublishParser/PublishParser.js +25 -14
  252. package/dist/PublishParser/PublishParser.js.map +1 -1
  253. package/dist/PublishParser/getFileTableRules.d.ts.map +1 -1
  254. package/dist/PublishParser/getFileTableRules.js +23 -16
  255. package/dist/PublishParser/getFileTableRules.js.map +1 -1
  256. package/dist/PublishParser/getSchemaFromPublish.d.ts.map +1 -1
  257. package/dist/PublishParser/getSchemaFromPublish.js +39 -16
  258. package/dist/PublishParser/getSchemaFromPublish.js.map +1 -1
  259. package/dist/PublishParser/getTableRulesWithoutFileTable.d.ts.map +1 -1
  260. package/dist/PublishParser/getTableRulesWithoutFileTable.js +42 -22
  261. package/dist/PublishParser/getTableRulesWithoutFileTable.js.map +1 -1
  262. package/dist/PublishParser/publishTypesAndUtils.d.ts.map +1 -1
  263. package/dist/PublishParser/publishTypesAndUtils.js +5 -1
  264. package/dist/PublishParser/publishTypesAndUtils.js.map +1 -1
  265. package/dist/RestApi.d.ts +1 -1
  266. package/dist/RestApi.d.ts.map +1 -1
  267. package/dist/RestApi.js +1 -1
  268. package/dist/RestApi.js.map +1 -1
  269. package/dist/SchemaWatch/SchemaWatch.d.ts +2 -2
  270. package/dist/SchemaWatch/SchemaWatch.d.ts.map +1 -1
  271. package/dist/SchemaWatch/SchemaWatch.js +11 -9
  272. package/dist/SchemaWatch/SchemaWatch.js.map +1 -1
  273. package/dist/SchemaWatch/getValidatedWatchSchemaType.d.ts.map +1 -1
  274. package/dist/SchemaWatch/getValidatedWatchSchemaType.js +3 -3
  275. package/dist/SchemaWatch/getValidatedWatchSchemaType.js.map +1 -1
  276. package/dist/SchemaWatch/getWatchSchemaTagList.d.ts.map +1 -1
  277. package/dist/SchemaWatch/getWatchSchemaTagList.js +12 -6
  278. package/dist/SchemaWatch/getWatchSchemaTagList.js.map +1 -1
  279. package/dist/SyncReplication.d.ts.map +1 -1
  280. package/dist/SyncReplication.js +84 -42
  281. package/dist/SyncReplication.js.map +1 -1
  282. package/dist/TableConfig/TableConfig.d.ts +5 -5
  283. package/dist/TableConfig/TableConfig.d.ts.map +1 -1
  284. package/dist/TableConfig/TableConfig.js +18 -5
  285. package/dist/TableConfig/TableConfig.js.map +1 -1
  286. package/dist/TableConfig/getColumnDefinitionQuery.d.ts +2 -2
  287. package/dist/TableConfig/getColumnDefinitionQuery.d.ts.map +1 -1
  288. package/dist/TableConfig/getColumnDefinitionQuery.js +20 -9
  289. package/dist/TableConfig/getColumnDefinitionQuery.js.map +1 -1
  290. package/dist/TableConfig/getConstraintDefinitionQueries.d.ts +3 -3
  291. package/dist/TableConfig/getConstraintDefinitionQueries.d.ts.map +1 -1
  292. package/dist/TableConfig/getConstraintDefinitionQueries.js +12 -7
  293. package/dist/TableConfig/getConstraintDefinitionQueries.js.map +1 -1
  294. package/dist/TableConfig/getFutureTableSchema.d.ts +1 -1
  295. package/dist/TableConfig/getFutureTableSchema.d.ts.map +1 -1
  296. package/dist/TableConfig/getFutureTableSchema.js +6 -4
  297. package/dist/TableConfig/getFutureTableSchema.js.map +1 -1
  298. package/dist/TableConfig/getPGIndexes.d.ts.map +1 -1
  299. package/dist/TableConfig/getPGIndexes.js.map +1 -1
  300. package/dist/TableConfig/getTableColumnQueries.d.ts +1 -1
  301. package/dist/TableConfig/getTableColumnQueries.d.ts.map +1 -1
  302. package/dist/TableConfig/getTableColumnQueries.js +38 -19
  303. package/dist/TableConfig/getTableColumnQueries.js.map +1 -1
  304. package/dist/TableConfig/initTableConfig.d.ts.map +1 -1
  305. package/dist/TableConfig/initTableConfig.js +91 -43
  306. package/dist/TableConfig/initTableConfig.js.map +1 -1
  307. package/dist/index.d.ts.map +1 -1
  308. package/dist/index.js.map +1 -1
  309. package/dist/initProstgles.d.ts.map +1 -1
  310. package/dist/initProstgles.js +14 -10
  311. package/dist/initProstgles.js.map +1 -1
  312. package/dist/onSocketConnected.d.ts.map +1 -1
  313. package/dist/onSocketConnected.js +38 -16
  314. package/dist/onSocketConnected.js.map +1 -1
  315. package/dist/runClientRequest.d.ts.map +1 -1
  316. package/dist/runClientRequest.js +33 -14
  317. package/dist/runClientRequest.js.map +1 -1
  318. package/dist/shortestPath.d.ts.map +1 -1
  319. package/dist/shortestPath.js +1 -1
  320. package/dist/shortestPath.js.map +1 -1
  321. package/dist/typeTests/dboTypeCheck.js.map +1 -1
  322. package/examples/full-example-typescript/DBoGenerated.d.ts +112 -54
  323. package/examples/full-example-typescript/DBoGenerated.js +3 -3
  324. package/examples/full-example-typescript/home.html +28 -26
  325. package/examples/full-example-typescript/index.d.ts +1 -1
  326. package/examples/full-example-typescript/index.js +80 -53
  327. package/examples/full-example-vanilla/home.html +151 -125
  328. package/examples/server/javascript/index.js +17 -19
  329. package/lib/Auth/AuthHandler.ts +234 -155
  330. package/lib/Auth/AuthTypes.ts +27 -4
  331. package/lib/Auth/getSafeReturnURL.ts +35 -21
  332. package/lib/Auth/sendEmail.ts +34 -31
  333. package/lib/Auth/setAuthProviders.ts +94 -71
  334. package/lib/Auth/setEmailProvider.ts +45 -27
  335. package/lib/Auth/setupAuthRoutes.ts +164 -100
  336. package/lib/DBEventsManager.ts +87 -65
  337. package/lib/DBSchemaBuilder.ts +62 -28
  338. package/lib/DboBuilder/DboBuilder.ts +45 -21
  339. package/lib/DboBuilder/DboBuilderTypes.ts +99 -95
  340. package/lib/DboBuilder/QueryBuilder/Functions.ts +862 -580
  341. package/lib/DboBuilder/QueryBuilder/QueryBuilder.ts +202 -141
  342. package/lib/DboBuilder/QueryBuilder/getJoinQuery.ts +199 -124
  343. package/lib/DboBuilder/QueryBuilder/getNewQuery.ts +209 -148
  344. package/lib/DboBuilder/QueryBuilder/getSelectQuery.ts +101 -75
  345. package/lib/DboBuilder/QueryBuilder/prepareHaving.ts +10 -5
  346. package/lib/DboBuilder/QueryStreamer.ts +207 -100
  347. package/lib/DboBuilder/TableHandler/DataValidator.ts +253 -148
  348. package/lib/DboBuilder/TableHandler/TableHandler.ts +155 -60
  349. package/lib/DboBuilder/TableHandler/delete.ts +82 -29
  350. package/lib/DboBuilder/TableHandler/insert.ts +177 -81
  351. package/lib/DboBuilder/TableHandler/insertTest.ts +13 -7
  352. package/lib/DboBuilder/TableHandler/onDeleteFromFileTable.ts +35 -21
  353. package/lib/DboBuilder/TableHandler/runInsertUpdateQuery.ts +95 -45
  354. package/lib/DboBuilder/TableHandler/update.ts +54 -14
  355. package/lib/DboBuilder/TableHandler/updateBatch.ts +59 -21
  356. package/lib/DboBuilder/TableHandler/updateFile.ts +57 -26
  357. package/lib/DboBuilder/TableHandler/upsert.ts +58 -13
  358. package/lib/DboBuilder/ViewHandler/ViewHandler.ts +264 -121
  359. package/lib/DboBuilder/ViewHandler/count.ts +56 -25
  360. package/lib/DboBuilder/ViewHandler/find.ts +153 -68
  361. package/lib/DboBuilder/ViewHandler/getExistsCondition.ts +59 -32
  362. package/lib/DboBuilder/ViewHandler/getExistsFilters.ts +31 -19
  363. package/lib/DboBuilder/ViewHandler/getInfo.ts +47 -16
  364. package/lib/DboBuilder/ViewHandler/getTableJoinQuery.ts +91 -57
  365. package/lib/DboBuilder/ViewHandler/parseComplexFilter.ts +51 -29
  366. package/lib/DboBuilder/ViewHandler/parseFieldFilter.ts +35 -29
  367. package/lib/DboBuilder/ViewHandler/parseJoinPath.ts +130 -76
  368. package/lib/DboBuilder/ViewHandler/prepareSortItems.ts +140 -92
  369. package/lib/DboBuilder/ViewHandler/prepareWhere.ts +66 -26
  370. package/lib/DboBuilder/ViewHandler/size.ts +56 -22
  371. package/lib/DboBuilder/ViewHandler/subscribe.ts +122 -46
  372. package/lib/DboBuilder/ViewHandler/validateViewRules.ts +39 -14
  373. package/lib/DboBuilder/dboBuilderUtils.ts +41 -18
  374. package/lib/DboBuilder/getColumns.ts +44 -12
  375. package/lib/DboBuilder/getCondition.ts +120 -79
  376. package/lib/DboBuilder/getSubscribeRelatedTables.ts +144 -83
  377. package/lib/DboBuilder/getTablesForSchemaPostgresSQL.ts +61 -44
  378. package/lib/DboBuilder/insertNestedRecords.ts +370 -235
  379. package/lib/DboBuilder/parseUpdateRules.ts +117 -61
  380. package/lib/DboBuilder/prepareShortestJoinPaths.ts +115 -56
  381. package/lib/DboBuilder/runSQL.ts +135 -74
  382. package/lib/DboBuilder/runTransaction.ts +27 -16
  383. package/lib/DboBuilder/sqlErrCodeToMsg.ts +502 -244
  384. package/lib/DboBuilder/uploadFile.ts +67 -31
  385. package/lib/Event_Trigger_Tags.ts +6 -4
  386. package/lib/FileManager/FileManager.ts +53 -21
  387. package/lib/FileManager/getValidatedFileType.ts +79 -35
  388. package/lib/FileManager/initFileManager.ts +21 -9
  389. package/lib/FileManager/upload.ts +21 -19
  390. package/lib/FileManager/uploadStream.ts +33 -34
  391. package/lib/Filtering.ts +249 -197
  392. package/lib/JSONBValidation/validate_jsonb_schema_sql.ts +2 -7
  393. package/lib/JSONBValidation/validation.ts +147 -82
  394. package/lib/Logging.ts +107 -97
  395. package/lib/PostgresNotifListenManager.ts +96 -63
  396. package/lib/Prostgles.ts +106 -35
  397. package/lib/ProstglesTypes.ts +31 -9
  398. package/lib/PubSubManager/PubSubManager.ts +62 -27
  399. package/lib/PubSubManager/addSub.ts +56 -37
  400. package/lib/PubSubManager/addSync.ts +50 -33
  401. package/lib/PubSubManager/getCreatePubSubManagerError.ts +29 -21
  402. package/lib/PubSubManager/getPubSubManagerInitQuery.ts +45 -27
  403. package/lib/PubSubManager/initPubSubManager.ts +27 -18
  404. package/lib/PubSubManager/notifListener.ts +77 -59
  405. package/lib/PubSubManager/orphanTriggerCheck.ts +5 -4
  406. package/lib/PubSubManager/pushSubData.ts +11 -9
  407. package/lib/PublishParser/PublishParser.ts +102 -44
  408. package/lib/PublishParser/getFileTableRules.ts +97 -54
  409. package/lib/PublishParser/getSchemaFromPublish.ts +146 -74
  410. package/lib/PublishParser/getTableRulesWithoutFileTable.ts +101 -51
  411. package/lib/PublishParser/publishTypesAndUtils.ts +74 -23
  412. package/lib/RestApi.ts +10 -2
  413. package/lib/SchemaWatch/SchemaWatch.ts +52 -34
  414. package/lib/SchemaWatch/createSchemaWatchEventTrigger.ts +1 -1
  415. package/lib/SchemaWatch/getValidatedWatchSchemaType.ts +32 -22
  416. package/lib/SchemaWatch/getWatchSchemaTagList.ts +24 -16
  417. package/lib/SyncReplication.ts +376 -190
  418. package/lib/TableConfig/TableConfig.ts +200 -136
  419. package/lib/TableConfig/getColumnDefinitionQuery.ts +65 -44
  420. package/lib/TableConfig/getConstraintDefinitionQueries.ts +41 -25
  421. package/lib/TableConfig/getFutureTableSchema.ts +31 -21
  422. package/lib/TableConfig/getPGIndexes.ts +7 -4
  423. package/lib/TableConfig/getTableColumnQueries.ts +101 -54
  424. package/lib/TableConfig/initTableConfig.ts +192 -101
  425. package/lib/index.ts +6 -5
  426. package/lib/initProstgles.ts +57 -51
  427. package/lib/onSocketConnected.ts +75 -40
  428. package/lib/runClientRequest.ts +148 -79
  429. package/lib/shortestPath.ts +80 -76
  430. package/lib/typeTests/DBoGenerated.d.ts +5 -1
  431. package/lib/typeTests/dboTypeCheck.ts +8 -8
  432. package/package.json +1 -1
@@ -1,71 +1,81 @@
1
- import { asName, pickKeys } from "prostgles-types";
1
+ import { asName, pickKeys } from "prostgles-types";
2
2
  import { DB } from "../Prostgles";
3
3
  import { asValue } from "../PubSubManager/PubSubManager";
4
4
  import { VALIDATE_SCHEMA_FUNCNAME } from "../JSONBValidation/validate_jsonb_schema_sql";
5
5
  import { BaseColumnTypes, ColumnConfig } from "./TableConfig";
6
- import pgPromise from "pg-promise";
6
+ import pgPromise from "pg-promise";
7
7
 
8
8
  type Args = {
9
- column: string;
9
+ column: string;
10
10
  colConf: ColumnConfig;
11
- db: DB;
11
+ db: DB;
12
12
  table: string;
13
13
  };
14
14
 
15
15
  /**
16
16
  * Column create statement for a given config
17
17
  */
18
- export const getColumnDefinitionQuery = async ({ colConf: colConfRaw, column, db, table }: Args): Promise<string | undefined> => {
19
- const colConf = typeof colConfRaw === "string"? { sqlDefinition: colConfRaw } : colConfRaw;
18
+ export const getColumnDefinitionQuery = async ({
19
+ colConf: colConfRaw,
20
+ column,
21
+ db,
22
+ table,
23
+ }: Args): Promise<string | undefined> => {
24
+ const colConf =
25
+ typeof colConfRaw === "string" ? { sqlDefinition: colConfRaw } : colConfRaw;
20
26
  const colNameEsc = asName(column);
21
- const getColTypeDef = (colConf: BaseColumnTypes, pgType: "TEXT" | "JSONB") => {
27
+ const getColTypeDef = (
28
+ colConf: BaseColumnTypes,
29
+ pgType: "TEXT" | "JSONB",
30
+ ) => {
22
31
  const { nullable, defaultValue } = colConf;
23
- return `${pgType} ${!nullable ? " NOT NULL " : ""} ${defaultValue ? ` DEFAULT ${asValue(defaultValue)} ` : ""}`
24
- }
32
+ return `${pgType} ${!nullable ? " NOT NULL " : ""} ${defaultValue ? ` DEFAULT ${asValue(defaultValue)} ` : ""}`;
33
+ };
25
34
 
26
35
  const jsonbSchema =
27
- ("jsonbSchema" in colConf && colConf.jsonbSchema) ? { jsonbSchema: colConf.jsonbSchema, jsonbSchemaType: undefined } :
28
- ("jsonbSchemaType" in colConf && colConf.jsonbSchemaType) ? { jsonbSchema: undefined, jsonbSchemaType: colConf.jsonbSchemaType } :
29
- undefined;
30
-
36
+ "jsonbSchema" in colConf && colConf.jsonbSchema
37
+ ? { jsonbSchema: colConf.jsonbSchema, jsonbSchemaType: undefined }
38
+ : "jsonbSchemaType" in colConf && colConf.jsonbSchemaType
39
+ ? { jsonbSchema: undefined, jsonbSchemaType: colConf.jsonbSchemaType }
40
+ : undefined;
31
41
 
32
42
  if ("references" in colConf && colConf.references) {
33
-
34
- const { tableName: lookupTable, columnName: lookupCol = "id" } = colConf.references;
43
+ const { tableName: lookupTable, columnName: lookupCol = "id" } =
44
+ colConf.references;
35
45
  return ` ${colNameEsc} ${getColTypeDef(colConf.references, "TEXT")} REFERENCES ${lookupTable} (${lookupCol}) `;
36
-
37
46
  } else if ("sqlDefinition" in colConf && colConf.sqlDefinition) {
38
-
39
47
  return ` ${colNameEsc} ${colConf.sqlDefinition} `;
40
-
41
48
  } else if ("isText" in colConf && colConf.isText) {
42
49
  let checks = "";
43
50
  const colChecks: string[] = [];
44
51
  if (colConf.lowerCased) {
45
- colChecks.push(`${colNameEsc} = LOWER(${colNameEsc})`)
52
+ colChecks.push(`${colNameEsc} = LOWER(${colNameEsc})`);
46
53
  }
47
54
  if (colConf.trimmed) {
48
- colChecks.push(`${colNameEsc} = BTRIM(${colNameEsc})`)
55
+ colChecks.push(`${colNameEsc} = BTRIM(${colNameEsc})`);
49
56
  }
50
57
  if (colChecks.length) {
51
- checks = `CHECK (${colChecks.join(" AND ")})`
58
+ checks = `CHECK (${colChecks.join(" AND ")})`;
52
59
  }
53
60
  return ` ${colNameEsc} ${getColTypeDef(colConf, "TEXT")} ${checks}`;
54
-
55
61
  } else if (jsonbSchema) {
56
-
57
- const jsonbSchemaStr = asValue({
58
- ...pickKeys(colConf, ["enum", "nullable", "info"]),
59
- ...(jsonbSchema.jsonbSchemaType ? { type: jsonbSchema.jsonbSchemaType } : jsonbSchema.jsonbSchema)
60
- }) + "::TEXT";
62
+ const jsonbSchemaStr =
63
+ asValue({
64
+ ...pickKeys(colConf, ["enum", "nullable", "info"]),
65
+ ...(jsonbSchema.jsonbSchemaType
66
+ ? { type: jsonbSchema.jsonbSchemaType }
67
+ : jsonbSchema.jsonbSchema),
68
+ }) + "::TEXT";
61
69
 
62
70
  /** Validate default value against jsonbSchema */
63
71
  const validationQuery = `SELECT ${VALIDATE_SCHEMA_FUNCNAME}(${jsonbSchemaStr}, ${asValue(colConf.defaultValue) + "::JSONB"}, ${asValue({ table, column })}) as v`;
64
72
  if (colConf.defaultValue) {
65
-
66
73
  const failedDefault = (err?: any) => {
67
- return { msg: `Default value (${colConf.defaultValue}) for ${table}.${column} does not satisfy the jsonb constraint check: ${validationQuery}`, err };
68
- }
74
+ return {
75
+ msg: `Default value (${colConf.defaultValue}) for ${table}.${column} does not satisfy the jsonb constraint check: ${validationQuery}`,
76
+ err,
77
+ };
78
+ };
69
79
  try {
70
80
  const row = await db.oneOrNone(validationQuery);
71
81
  if (!row?.v) {
@@ -74,38 +84,49 @@ export const getColumnDefinitionQuery = async ({ colConf: colConfRaw, column, db
74
84
  } catch (e) {
75
85
  throw failedDefault(e);
76
86
  }
77
- }
87
+ }
78
88
 
79
89
  return ` ${colNameEsc} ${getColTypeDef(colConf, "JSONB")} CHECK(${VALIDATE_SCHEMA_FUNCNAME}(${jsonbSchemaStr}, ${colNameEsc}, ${asValue({ table, column })} ))`;
80
-
81
90
  } else if ("enum" in colConf) {
82
- if (!colConf.enum?.length) throw new Error("colConf.enum Must not be empty");
83
- const type = colConf.enum.every(v => Number.isFinite(v)) ? "NUMERIC" : "TEXT";
84
- const checks = colConf.enum.map(v => `${colNameEsc} = ${asValue(v)}`).join(" OR ");
91
+ if (!colConf.enum?.length)
92
+ throw new Error("colConf.enum Must not be empty");
93
+ const type = colConf.enum.every((v) => Number.isFinite(v))
94
+ ? "NUMERIC"
95
+ : "TEXT";
96
+ const checks = colConf.enum
97
+ .map((v) => `${colNameEsc} = ${asValue(v)}`)
98
+ .join(" OR ");
85
99
  return ` ${colNameEsc} ${type} ${colConf.nullable ? "" : "NOT NULL"} ${"defaultValue" in colConf ? ` DEFAULT ${asValue(colConf.defaultValue)}` : ""} CHECK(${checks})`;
86
-
87
100
  } else {
88
101
  return undefined;
89
102
  // throw "Unknown column config: " + JSON.stringify(colConf);
90
103
  }
91
- }
92
-
104
+ };
93
105
 
94
- export type ColumnMinimalInfo = {
106
+ export type ColumnMinimalInfo = {
95
107
  table_name: string;
96
108
  table_schema: string;
97
109
  column_name: string;
98
110
  column_default: string | null;
99
111
  udt_name: string;
100
- nullable: boolean;
112
+ nullable: boolean;
101
113
  };
102
- export const getTableColumns = ({ db, table }: { db: DB | pgPromise.ITask<{}>; table: string;}): Promise<ColumnMinimalInfo[]> => {
103
- return db.manyOrNone(`
114
+ export const getTableColumns = ({
115
+ db,
116
+ table,
117
+ }: {
118
+ db: DB | pgPromise.ITask<{}>;
119
+ table: string;
120
+ }): Promise<ColumnMinimalInfo[]> => {
121
+ return db.manyOrNone(
122
+ `
104
123
  SELECT table_name,
105
124
  table_schema, column_name,
106
125
  column_default, udt_name,
107
126
  is_nullable = 'YES' as nullable
108
127
  FROM information_schema.columns
109
128
  WHERE table_name = $1
110
- `, [table]);
111
- }
129
+ `,
130
+ [table],
131
+ );
132
+ };
@@ -6,48 +6,55 @@ import { TableConfig } from "./TableConfig";
6
6
 
7
7
  type Args = {
8
8
  tableName: string;
9
- tableConf: TableConfig[string]
9
+ tableConf: TableConfig[string];
10
10
  // tableConf: BaseTableDefinition<LANG_IDS> & (TableDefinition<LANG_IDS> | LookupTableDefinition<LANG_IDS>)
11
11
  };
12
12
 
13
- export type ConstraintDef = {
13
+ export type ConstraintDef = {
14
14
  /**
15
15
  * Named constraints are used to show a relevant error message
16
16
  */
17
- name?: string;
18
- content: string;
19
- alterQuery: string;
17
+ name?: string;
18
+ content: string;
19
+ alterQuery: string;
20
20
  };
21
- export const getConstraintDefinitionQueries = ({ tableConf, tableName }: Args): ConstraintDef[] | undefined => {
22
-
21
+ export const getConstraintDefinitionQueries = ({
22
+ tableConf,
23
+ tableName,
24
+ }: Args): ConstraintDef[] | undefined => {
23
25
  if ("constraints" in tableConf && tableConf.constraints) {
24
26
  const { constraints } = tableConf;
25
- if(!constraints){
27
+ if (!constraints) {
26
28
  return undefined;
27
29
  }
28
-
29
- if(Array.isArray(constraints)) {
30
- return constraints.map(c => ({ content: c, alterQuery: `ALTER TABLE ${asName(tableName)} ADD ${c}`}));
31
-
30
+
31
+ if (Array.isArray(constraints)) {
32
+ return constraints.map((c) => ({
33
+ content: c,
34
+ alterQuery: `ALTER TABLE ${asName(tableName)} ADD ${c}`,
35
+ }));
32
36
  } else {
33
37
  const constraintNames = Object.keys(constraints);
34
- return constraintNames.map(constraintName => {
38
+ return constraintNames.map((constraintName) => {
35
39
  const _cnstr = constraints[constraintName]!;
36
- const constraintDef = typeof _cnstr === "string"? _cnstr : `${_cnstr.type} (${_cnstr.content})`;
37
-
40
+ const constraintDef =
41
+ typeof _cnstr === "string"
42
+ ? _cnstr
43
+ : `${_cnstr.type} (${_cnstr.content})`;
44
+
38
45
  /** Drop constraints with the same name */
39
46
  // const existingConstraint = constraints.some(c => c.conname === constraintName);
40
47
  // if(existingConstraint){
41
48
  // if(canDrop) queries.push(`ALTER TABLE ${asName(tableName)} DROP CONSTRAINT ${asName(constraintName)};`);
42
49
  // }
43
-
50
+
44
51
  const alterQuery = `ALTER TABLE ${asName(tableName)} ADD CONSTRAINT ${asName(constraintName)} ${constraintDef};`;
45
52
 
46
53
  return { name: constraintName, alterQuery, content: constraintDef };
47
54
  });
48
55
  }
49
56
  }
50
- }
57
+ };
51
58
 
52
59
  export type ColConstraint = {
53
60
  name: string;
@@ -56,14 +63,18 @@ export type ColConstraint = {
56
63
  cols: Array<string>;
57
64
  definition: string;
58
65
  schema: string;
59
- }
66
+ };
60
67
  type ColConstraintsArgs = {
61
68
  db: DB | pgPromise.ITask<{}>;
62
69
  table?: string;
63
70
  column?: string;
64
71
  types?: ColConstraint["type"][];
65
- }
66
- export const getColConstraintsQuery = ({ column, table, types }: Omit<ColConstraintsArgs, "db">) => {
72
+ };
73
+ export const getColConstraintsQuery = ({
74
+ column,
75
+ table,
76
+ types,
77
+ }: Omit<ColConstraintsArgs, "db">) => {
67
78
  let query = `
68
79
  SELECT *
69
80
  FROM (
@@ -86,10 +97,15 @@ export const getColConstraintsQuery = ({ column, table, types }: Omit<ColConstra
86
97
  `;
87
98
  if (table) query += `\nAND "table" = ${asValue(table)}`;
88
99
  if (column) query += `\nAND cols @> ARRAY[${asValue(column)}]`;
89
- if (types?.length) query += `\nAND type IN (${types.map(v => asValue(v)).join(", ")})`;
100
+ if (types?.length)
101
+ query += `\nAND type IN (${types.map((v) => asValue(v)).join(", ")})`;
90
102
  return query;
91
- }
92
- export const getColConstraints = ({ db, column, table, types }: ColConstraintsArgs ): Promise<ColConstraint[]> => {
93
-
103
+ };
104
+ export const getColConstraints = ({
105
+ db,
106
+ column,
107
+ table,
108
+ types,
109
+ }: ColConstraintsArgs): Promise<ColConstraint[]> => {
94
110
  return db.manyOrNone(getColConstraintsQuery({ column, table, types }));
95
- }
111
+ };
@@ -2,42 +2,53 @@ import { asName } from "prostgles-types";
2
2
  import { pgp } from "../DboBuilder/DboBuilder";
3
3
  import { DB } from "../Prostgles";
4
4
  import { ColumnMinimalInfo, getTableColumns } from "./getColumnDefinitionQuery";
5
- import { ColConstraint, ConstraintDef, getColConstraints } from "./getConstraintDefinitionQueries";
5
+ import {
6
+ ColConstraint,
7
+ ConstraintDef,
8
+ getColConstraints,
9
+ } from "./getConstraintDefinitionQueries";
6
10
 
7
11
  type Args = {
8
- db: DB,
9
- columnDefs: string[];
12
+ db: DB;
13
+ columnDefs: string[];
10
14
  tableName: string;
11
15
  constraintDefs?: ConstraintDef[];
12
16
  };
13
17
 
14
18
  /**
15
- * Given a table name, column definitions and constraint definitions,
19
+ * Given a table name, column definitions and constraint definitions,
16
20
  * returns structured resulting column definitions and constraints of the table
17
21
  */
18
- export const getFutureTableSchema = async ({ columnDefs, tableName, constraintDefs = [], db }: Args): Promise<{
22
+ export const getFutureTableSchema = async ({
23
+ columnDefs,
24
+ tableName,
25
+ constraintDefs = [],
26
+ db,
27
+ }: Args): Promise<{
19
28
  constraints: ColConstraint[];
20
29
  cols: ColumnMinimalInfo[];
21
- }> => {
30
+ }> => {
22
31
  const { TransactionMode, isolationLevel } = pgp.txMode;
23
-
32
+
24
33
  let constraints: ColConstraint[] = [];
25
34
  let cols: ColumnMinimalInfo[] = [];
26
35
  const ROLLBACK = "Rollback";
27
36
  try {
28
37
  const txMode = new TransactionMode({
29
- tiLevel: isolationLevel.serializable
38
+ tiLevel: isolationLevel.serializable,
30
39
  });
31
- await db.tx({ mode: txMode }, async t => {
32
-
40
+ await db.tx({ mode: txMode }, async (t) => {
33
41
  /** To prevent deadlocks we use a random table name -> Not feasible because named constraints cannot be recreated without dropping the existing ones from actual table */
34
- // const tableEsc = asName(tableName.slice(0, 12) + (await t.oneOrNone(`SELECT md5(now()::text) as md5`)).md5);
35
-
42
+ // const tableEsc = asName(tableName.slice(0, 12) + (await t.oneOrNone(`SELECT md5(now()::text) as md5`)).md5);
43
+
36
44
  const tableEsc = asName(tableName);
37
45
 
38
- const consQueries = constraintDefs.map(c =>
39
- `ALTER TABLE ${tableEsc} ADD ${c.name? ` CONSTRAINT ${asName(c.name)}` : ""} ${c.content};`
40
- ).join("\n");
46
+ const consQueries = constraintDefs
47
+ .map(
48
+ (c) =>
49
+ `ALTER TABLE ${tableEsc} ADD ${c.name ? ` CONSTRAINT ${asName(c.name)}` : ""} ${c.content};`,
50
+ )
51
+ .join("\n");
41
52
 
42
53
  const query = `
43
54
  DROP TABLE IF EXISTS ${tableEsc} CASCADE;
@@ -51,18 +62,17 @@ export const getFutureTableSchema = async ({ columnDefs, tableName, constraintDe
51
62
 
52
63
  constraints = await getColConstraints({ db: t, table: tableName });
53
64
  cols = await getTableColumns({ db: t, table: tableName });
54
-
65
+
55
66
  /** Rollback */
56
67
  return Promise.reject(new Error(ROLLBACK));
57
68
  });
58
-
59
- } catch(e: any){
60
- if(e instanceof Error && e.message === ROLLBACK) {
69
+ } catch (e: any) {
70
+ if (e instanceof Error && e.message === ROLLBACK) {
61
71
  // Ignore
62
72
  } else {
63
73
  throw e;
64
74
  }
65
75
  }
66
-
76
+
67
77
  return { cols, constraints };
68
- }
78
+ };
@@ -13,8 +13,11 @@ type PGIndex = {
13
13
  size: string;
14
14
  description: string | null;
15
15
  };
16
- export const getPGIndexes = async (db: DB, tableName: string, schema: string): Promise<PGIndex[]> => {
17
-
16
+ export const getPGIndexes = async (
17
+ db: DB,
18
+ tableName: string,
19
+ schema: string,
20
+ ): Promise<PGIndex[]> => {
18
21
  const indexQuery = `
19
22
  SELECT n.nspname as schemaname,
20
23
  c.relname as indexname,
@@ -48,6 +51,6 @@ export const getPGIndexes = async (db: DB, tableName: string, schema: string): P
48
51
  AND c2.relname = \${tableName}
49
52
  AND n.nspname = \${schema}
50
53
  ORDER BY 1,2;
51
- `
54
+ `;
52
55
  return db.any(indexQuery, { tableName, schema });
53
- };
56
+ };
@@ -1,8 +1,17 @@
1
- import { getKeys, asName as _asName, isObject, asName, getObjectEntries } from "prostgles-types";
1
+ import {
2
+ getKeys,
3
+ asName as _asName,
4
+ isObject,
5
+ asName,
6
+ getObjectEntries,
7
+ } from "prostgles-types";
2
8
  import { DB, DBHandlerServer } from "../Prostgles";
3
9
  import { validate_jsonb_schema_sql } from "../JSONBValidation/validate_jsonb_schema_sql";
4
- import { getColumnDefinitionQuery, getTableColumns } from "./getColumnDefinitionQuery";
5
- import { TableConfig } from "./TableConfig";
10
+ import {
11
+ getColumnDefinitionQuery,
12
+ getTableColumns,
13
+ } from "./getColumnDefinitionQuery";
14
+ import { TableConfig } from "./TableConfig";
6
15
  import { getFutureTableSchema } from "./getFutureTableSchema";
7
16
 
8
17
  type Args = {
@@ -10,19 +19,26 @@ type Args = {
10
19
  tableConf: TableConfig[string];
11
20
  tableName: string;
12
21
  tableHandler: DBHandlerServer[string] | undefined;
13
- }
22
+ };
14
23
 
15
24
  /**
16
25
  * Given a tableHandler, table name, column definitions and constraint definitions,
17
26
  * returns the queries to align any existing table with the given column definitions
18
27
  */
19
- export const getTableColumnQueries = async ({ db, tableConf, tableName, tableHandler }: Args): Promise<undefined | {
20
- columnDefs: string[];
21
- newColumnDefs: string[];
22
- fullQuery: string;
23
- isCreate: boolean;
24
- }> => {
25
-
28
+ export const getTableColumnQueries = async ({
29
+ db,
30
+ tableConf,
31
+ tableName,
32
+ tableHandler,
33
+ }: Args): Promise<
34
+ | undefined
35
+ | {
36
+ columnDefs: string[];
37
+ newColumnDefs: string[];
38
+ fullQuery: string;
39
+ isCreate: boolean;
40
+ }
41
+ > => {
26
42
  let newColumnDefs: string[] = [];
27
43
  const droppedColNames: string[] = [];
28
44
  const alteredColQueries: string[] = [];
@@ -32,89 +48,121 @@ export const getTableColumnQueries = async ({ db, tableConf, tableName, tableHan
32
48
  if (!("columns" in tableConf && tableConf.columns)) {
33
49
  return undefined;
34
50
  }
35
-
36
- const hasJSONBValidation = getKeys(tableConf.columns).some(c => {
51
+
52
+ const hasJSONBValidation = getKeys(tableConf.columns).some((c) => {
37
53
  const cConf = tableConf.columns?.[c];
38
- return cConf && isObject(cConf) && (cConf.jsonbSchema || cConf.jsonbSchemaType)
54
+ return (
55
+ cConf && isObject(cConf) && (cConf.jsonbSchema || cConf.jsonbSchemaType)
56
+ );
39
57
  });
40
58
 
41
59
  /** Must install validation function */
42
- if(hasJSONBValidation){
60
+ if (hasJSONBValidation) {
43
61
  try {
44
62
  await db.any(validate_jsonb_schema_sql);
45
- } catch(err: any){
46
- console.error("Could not install the jsonb validation function due to error: ", err);
63
+ } catch (err: any) {
64
+ console.error(
65
+ "Could not install the jsonb validation function due to error: ",
66
+ err,
67
+ );
47
68
  throw err;
48
69
  }
49
70
  }
50
71
 
51
72
  const columns = getObjectEntries(tableConf.columns).filter(([_, colDef]) => {
52
73
  /** Exclude NamedJoinColumn */
53
- return typeof colDef === "string" || !("joinDef" in colDef)
74
+ return typeof colDef === "string" || !("joinDef" in colDef);
54
75
  });
55
76
 
56
77
  const colDefs: { name: string; def: string }[] = [];
57
-
58
- for (const [colName, colConf] of columns) {
59
78
 
79
+ for (const [colName, colConf] of columns) {
60
80
  /* Get column definition */
61
- const colDef = await getColumnDefinitionQuery({ colConf, column: colName.toString(), db, table: tableName });
62
- if(colDef){
63
- colDefs.push({ name: colName.toString(), def: colDef});
81
+ const colDef = await getColumnDefinitionQuery({
82
+ colConf,
83
+ column: colName.toString(),
84
+ db,
85
+ table: tableName,
86
+ });
87
+ if (colDef) {
88
+ colDefs.push({ name: colName.toString(), def: colDef });
64
89
  }
65
90
  }
66
- const columnDefs = colDefs.map(c => c.def);
91
+ const columnDefs = colDefs.map((c) => c.def);
67
92
 
68
- if(!colDefs.length){
93
+ if (!colDefs.length) {
69
94
  return undefined;
70
95
  }
71
96
 
72
-
73
97
  const ALTERQ = `ALTER TABLE ${asName(tableName)}`;
74
98
  if (!tableHandler) {
75
- newColumnDefs.push(...colDefs.map(c => c.def));
76
-
99
+ newColumnDefs.push(...colDefs.map((c) => c.def));
77
100
  } else if (tableHandler) {
78
101
  const currCols = await getTableColumns({ db, table: tableName });
79
102
 
80
103
  /** Add new columns */
81
- newColumnDefs = colDefs.filter(nc => !tableHandler.columns?.some(c => nc.name === c.name)).map(c => c.def);
82
-
104
+ newColumnDefs = colDefs
105
+ .filter((nc) => !tableHandler.columns?.some((c) => nc.name === c.name))
106
+ .map((c) => c.def);
107
+
83
108
  /** Altered/Dropped columns */
84
- const { cols: futureCols } = await getFutureTableSchema({ tableName, columnDefs, constraintDefs: [], db });
85
- currCols.forEach(c => {
86
- const newCol = futureCols.find(nc => nc.column_name === c.column_name);
87
- if(!newCol){
109
+ const { cols: futureCols } = await getFutureTableSchema({
110
+ tableName,
111
+ columnDefs,
112
+ constraintDefs: [],
113
+ db,
114
+ });
115
+ currCols.forEach((c) => {
116
+ const newCol = futureCols.find((nc) => nc.column_name === c.column_name);
117
+ if (!newCol) {
88
118
  droppedColNames.push(c.column_name);
89
- } else if(newCol.nullable !== c.nullable){
90
- alteredColQueries.push(`${ALTERQ} ALTER COLUMN ${asName(c.column_name)} ${newCol.nullable? "DROP" : "SET"} NOT NULL;`)
91
- } else if(newCol.udt_name !== c.udt_name){
92
- alteredColQueries.push(`${ALTERQ} ALTER COLUMN ${asName(c.column_name)} TYPE ${newCol.udt_name} USING ${asName(c.column_name)}::${newCol.udt_name};`)
93
- } else if(newCol.column_default !== c.column_default){
94
- const colConfig = colDefs.find(cd => cd.name === c.column_name);
95
- if(["serial", "bigserial"].some(t => colConfig?.def.toLowerCase().includes(` ${t}`)) && c.column_default?.toLowerCase().includes("nextval")){
119
+ } else if (newCol.nullable !== c.nullable) {
120
+ alteredColQueries.push(
121
+ `${ALTERQ} ALTER COLUMN ${asName(c.column_name)} ${newCol.nullable ? "DROP" : "SET"} NOT NULL;`,
122
+ );
123
+ } else if (newCol.udt_name !== c.udt_name) {
124
+ alteredColQueries.push(
125
+ `${ALTERQ} ALTER COLUMN ${asName(c.column_name)} TYPE ${newCol.udt_name} USING ${asName(c.column_name)}::${newCol.udt_name};`,
126
+ );
127
+ } else if (newCol.column_default !== c.column_default) {
128
+ const colConfig = colDefs.find((cd) => cd.name === c.column_name);
129
+ if (
130
+ ["serial", "bigserial"].some((t) =>
131
+ colConfig?.def.toLowerCase().includes(` ${t}`),
132
+ ) &&
133
+ c.column_default?.toLowerCase().includes("nextval")
134
+ ) {
96
135
  /** Ignore SERIAL/BIGSERIAL <> nextval mismatch */
97
136
  } else {
98
- alteredColQueries.push(`${ALTERQ} ALTER COLUMN ${asName(c.column_name)} ${newCol.column_default === null? "DROP DEFAULT" : `SET DEFAULT ${newCol.column_default}`};`)
137
+ alteredColQueries.push(
138
+ `${ALTERQ} ALTER COLUMN ${asName(c.column_name)} ${newCol.column_default === null ? "DROP DEFAULT" : `SET DEFAULT ${newCol.column_default}`};`,
139
+ );
99
140
  }
100
141
  }
101
142
  });
102
143
  }
103
144
 
104
- if (!tableHandler || tableConf.dropIfExists || tableConf.dropIfExistsCascade) {
145
+ if (
146
+ !tableHandler ||
147
+ tableConf.dropIfExists ||
148
+ tableConf.dropIfExistsCascade
149
+ ) {
105
150
  isCreate = true;
106
151
  const DROPQ = `DROP TABLE IF EXISTS ${asName(tableName)}`;
107
- fullQuery = ([
108
- ...(tableConf.dropIfExists? [`${DROPQ};`] : tableConf.dropIfExistsCascade? [`${DROPQ} CASCADE;`] : []),
152
+ fullQuery = [
153
+ ...(tableConf.dropIfExists
154
+ ? [`${DROPQ};`]
155
+ : tableConf.dropIfExistsCascade
156
+ ? [`${DROPQ} CASCADE;`]
157
+ : []),
109
158
  `CREATE TABLE ${asName(tableName)} (`,
110
- columnDefs.join(", \n"),
111
- `);`
112
- ].join("\n"));
113
-
159
+ columnDefs.join(", \n"),
160
+ `);`,
161
+ ].join("\n");
114
162
  } else {
115
163
  fullQuery = [
116
- ...droppedColNames.map(c => `${ALTERQ} DROP COLUMN ${asName(c)};`),
117
- ...newColumnDefs.map(c => `${ALTERQ} ADD COLUMN ${c};`),
164
+ ...droppedColNames.map((c) => `${ALTERQ} DROP COLUMN ${asName(c)};`),
165
+ ...newColumnDefs.map((c) => `${ALTERQ} ADD COLUMN ${c};`),
118
166
  ...alteredColQueries,
119
167
  ].join("\n");
120
168
  }
@@ -124,6 +172,5 @@ export const getTableColumnQueries = async ({ db, tableConf, tableName, tableHan
124
172
  columnDefs,
125
173
  isCreate,
126
174
  newColumnDefs,
127
- }
128
-
129
- }
175
+ };
176
+ };