@deterministic-code/datasources 0.1.1 → 0.1.3

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 (613) hide show
  1. package/dist/ArrayReader.js +27 -0
  2. package/dist/BatchCommandIBulkWriteStrategy.js +150 -0
  3. package/dist/BuiltRepository.js +1 -0
  4. package/dist/BulkCRUDRepository.js +48 -0
  5. package/dist/BulkCommand.js +1 -0
  6. package/dist/BulkWriteEnrichment.js +11 -0
  7. package/dist/CRUDRepository.js +182 -0
  8. package/dist/CRUDRepositoryBuilder.js +30 -0
  9. package/dist/CRUDRepositoryOptions.js +1 -0
  10. package/dist/CRUDRepositoryStatements.js +19 -0
  11. package/dist/CascadeDeleteEnrichmentStrategy.js +28 -0
  12. package/dist/CascadeDeleteUpdateEnrichmentStrategy.js +25 -0
  13. package/dist/CommandMiddlewareHost.js +73 -0
  14. package/dist/ConsoleCommandMiddleware.js +45 -0
  15. package/dist/CreateEnrichmentStrategy.js +64 -0
  16. package/dist/Datasource.js +98 -0
  17. package/dist/DatasourceError.js +6 -0
  18. package/dist/DatasourceFactory.js +76 -0
  19. package/dist/DatasourceOptions.js +1 -0
  20. package/dist/DatasourceUrl.js +28 -0
  21. package/dist/DatasourceUrlParser.js +168 -0
  22. package/dist/DefaultCreateEnrichmentStrategy.js +18 -0
  23. package/dist/DefaultReadonlyEnrichmentStrategy.js +107 -0
  24. package/dist/DefaultUpdateEnrichmentStrategy.js +41 -0
  25. package/dist/DefaultWriteEnrichmentStrategy.js +135 -0
  26. package/dist/DeleteEnrichmentStrategy.js +28 -0
  27. package/dist/DriverLoader.js +87 -0
  28. package/dist/Enrichment.js +1 -0
  29. package/dist/EnrichmentPropertyType.js +6 -0
  30. package/dist/ExpectConsoleMiddleware.js +30 -0
  31. package/dist/FirstResultReader.js +43 -0
  32. package/dist/HashsetOptimizedReadonlyEnrichmentStrategy.js +58 -0
  33. package/dist/IBulkWriteStrategy.js +1 -0
  34. package/dist/ICRUDRepository.js +1 -0
  35. package/dist/ICRUDRepositoryFactory.js +1 -0
  36. package/dist/ICommand.js +6 -0
  37. package/dist/ICommandMiddleware.js +1 -0
  38. package/dist/IConnection.js +1 -0
  39. package/dist/IDatasource.js +1 -0
  40. package/dist/IDatasourceFactory.js +1 -0
  41. package/dist/IDriver.d.ts +4 -0
  42. package/dist/IDriver.js +1 -0
  43. package/dist/IEnriched.js +1 -0
  44. package/dist/IReader.js +1 -0
  45. package/dist/IReadonlyEnrichmentStrategy.js +1 -0
  46. package/dist/IReadonlyRepository.js +1 -0
  47. package/dist/IRepository.js +1 -0
  48. package/dist/IRepositoryFactory.js +1 -0
  49. package/dist/IRepositoryTree.js +1 -0
  50. package/dist/IRepositoryTreeNode.js +1 -0
  51. package/dist/ITransaction.js +1 -0
  52. package/dist/IUnitOfWork.js +1 -0
  53. package/dist/IWriteEnrichmentStrategy.js +1 -0
  54. package/dist/Information.js +1 -0
  55. package/dist/IsolationLevel.js +6 -0
  56. package/dist/LazyWriteEnrichmentStrategy.js +4 -0
  57. package/dist/NestedToObjectEnrichmentStrategy.js +20 -0
  58. package/dist/Parameter.js +1 -0
  59. package/dist/ParameterDirection.js +6 -0
  60. package/dist/ProviderCatalog.js +23 -0
  61. package/dist/ProviderNotImplementedError.js +8 -0
  62. package/dist/ProviderNotInstalledError.js +8 -0
  63. package/dist/ReadonlyRepository.js +150 -0
  64. package/dist/ReadonlyRepositoryBuilder.js +43 -0
  65. package/dist/ReadonlyRepositoryMappingOptions.js +1 -0
  66. package/dist/ReadonlyRepositoryStatements.js +10 -0
  67. package/dist/RepositoryAccess.js +12 -0
  68. package/dist/RepositoryFactory.js +71 -0
  69. package/dist/RepositoryNotRegisteredError.js +8 -0
  70. package/dist/RepositoryTree.js +6 -0
  71. package/dist/RepositoryTreeNode.js +12 -0
  72. package/dist/Response.js +13 -0
  73. package/dist/Row.js +1 -0
  74. package/dist/SingleCommandIBulkWriteStrategy.js +21 -0
  75. package/dist/StatementMappers.js +88 -0
  76. package/dist/StoredEnrichment.js +12 -0
  77. package/dist/StoredProcedureBulkWriteStrategy.js +143 -0
  78. package/dist/StreamingReader.js +53 -0
  79. package/dist/UnitOfWorkTransaction.js +51 -0
  80. package/dist/UpdateEnrichmentStrategy.js +61 -0
  81. package/dist/WriteMode.js +1 -0
  82. package/dist/builders/Field.js +1 -0
  83. package/dist/builders/Scalar.js +1 -0
  84. package/dist/builders/index.js +1 -0
  85. package/dist/collectAsync.js +7 -0
  86. package/dist/converters/Cell.js +1 -0
  87. package/dist/converters/ChangeCasingConverter.js +46 -0
  88. package/dist/converters/Constructable.js +1 -0
  89. package/dist/converters/DefaultValueConverter.d.ts +25 -0
  90. package/dist/converters/DefaultValueConverter.js +183 -0
  91. package/dist/converters/DefaultValueOptions.d.ts +9 -0
  92. package/dist/converters/DefaultValueOptions.js +1 -0
  93. package/dist/converters/DeterministicTypeConverter.d.ts +11 -0
  94. package/dist/converters/DeterministicTypeConverter.js +74 -0
  95. package/dist/converters/IMapping.d.ts +4 -0
  96. package/dist/converters/IMapping.js +1 -0
  97. package/dist/converters/MetaDataRowTypeConverter.js +71 -0
  98. package/dist/converters/PluralizerConverter.js +54 -0
  99. package/dist/converters/RegexConverter.js +12 -0
  100. package/dist/converters/ReplaceConverter.js +10 -0
  101. package/dist/converters/RowTypeConverter.js +25 -0
  102. package/dist/converters/SpecField.d.ts +7 -0
  103. package/dist/converters/SpecField.js +1 -0
  104. package/dist/converters/SpecFieldRules.d.ts +17 -0
  105. package/dist/converters/SpecFieldRules.js +1 -0
  106. package/dist/converters/ToLowerCaseConverter.js +4 -0
  107. package/dist/converters/ToUpperCaseConverter.js +4 -0
  108. package/dist/converters/TypeConverter.js +2 -0
  109. package/dist/createCRUDRepositoryOptions.js +7 -0
  110. package/dist/createReadonlyRepositoryMappingOptions.js +16 -0
  111. package/dist/dotEnv.js +9 -0
  112. package/dist/index.d.ts +9 -2
  113. package/dist/index.js +83 -0
  114. package/dist/mappers/ChangeCasingMapper.js +11 -0
  115. package/dist/mappers/DictionaryMapper.js +13 -0
  116. package/dist/mappers/FlatToNestedMapper.js +105 -0
  117. package/dist/mappers/IFlatToNestedMapper.js +1 -0
  118. package/dist/mappers/IMapper.js +1 -0
  119. package/dist/mappers/IdentityMapper.js +4 -0
  120. package/dist/mappers/PluralizerMapper.js +6 -0
  121. package/dist/mappers/RowTypeMapper.js +7 -0
  122. package/dist/mappers/TransformConverterMapper.js +6 -0
  123. package/dist/mappers/TransformMapper.js +8 -0
  124. package/dist/mappers/TypeMap.js +1 -0
  125. package/dist/mappers/TypeMapGroup.js +1 -0
  126. package/dist/mocks/index.js +9 -0
  127. package/dist/mocks/mock-command.js +42 -0
  128. package/dist/mocks/mock-connection.js +48 -0
  129. package/dist/mocks/mock-datasource.js +44 -0
  130. package/dist/mocks/mock-driver.js +15 -0
  131. package/dist/mocks/mock-reader.js +33 -0
  132. package/dist/mocks/mock-repository.js +61 -0
  133. package/dist/mocks/mock-select-statement.js +13 -0
  134. package/dist/mocks/mock-transaction.js +28 -0
  135. package/dist/mocks/mock-where.js +11 -0
  136. package/dist/parametersToRecord.js +9 -0
  137. package/dist/readerToAsyncIterable.js +7 -0
  138. package/dist/splitStatements.js +106 -0
  139. package/dist/statementParameters.js +25 -0
  140. package/dist/statementUsesParameter.js +2 -0
  141. package/dist/statements/Aggregate.js +7 -0
  142. package/dist/statements/AlterTableStatement.d.ts +33 -0
  143. package/dist/statements/AlterTableStatement.js +9 -0
  144. package/dist/statements/AlterTableStatementTextRenderer.d.ts +9 -0
  145. package/dist/statements/AlterTableStatementTextRenderer.js +33 -0
  146. package/dist/statements/ArrayExpression.js +6 -0
  147. package/dist/statements/BulkDeleteStatement.js +15 -0
  148. package/dist/statements/BulkDeleteStatementTextRenderer.js +15 -0
  149. package/dist/statements/BulkInsertStatement.js +29 -0
  150. package/dist/statements/BulkInsertStatementTextRenderer.js +6 -0
  151. package/dist/statements/BulkUpdateStatement.js +17 -0
  152. package/dist/statements/BulkUpdateStatementTextRenderer.js +20 -0
  153. package/dist/statements/CheckConstraint.js +9 -0
  154. package/dist/statements/Cmp.js +7 -0
  155. package/dist/statements/Column.js +1 -0
  156. package/dist/statements/ColumnDefault.js +8 -0
  157. package/dist/statements/Condition.js +2 -0
  158. package/dist/statements/ConditionRenderer.js +11 -0
  159. package/dist/statements/CreateBulkCreateStoredProcedureStatement.d.ts +13 -0
  160. package/dist/statements/CreateBulkCreateStoredProcedureStatement.js +17 -0
  161. package/dist/statements/CreateBulkCreateStoredProcedureStatementTextRenderer.d.ts +4 -0
  162. package/dist/statements/CreateBulkCreateStoredProcedureStatementTextRenderer.js +5 -0
  163. package/dist/statements/CreateBulkDeleteStoredProcedureStatement.d.ts +13 -0
  164. package/dist/statements/CreateBulkDeleteStoredProcedureStatement.js +17 -0
  165. package/dist/statements/CreateBulkDeleteStoredProcedureStatementTextRenderer.d.ts +4 -0
  166. package/dist/statements/CreateBulkDeleteStoredProcedureStatementTextRenderer.js +5 -0
  167. package/dist/statements/CreateBulkUpdateStoredProcedureStatement.d.ts +13 -0
  168. package/dist/statements/CreateBulkUpdateStoredProcedureStatement.js +17 -0
  169. package/dist/statements/CreateBulkUpdateStoredProcedureStatementTextRenderer.d.ts +4 -0
  170. package/dist/statements/CreateBulkUpdateStoredProcedureStatementTextRenderer.js +5 -0
  171. package/dist/statements/CreateCreateStoredProcedureStatement.d.ts +16 -0
  172. package/dist/statements/CreateCreateStoredProcedureStatement.js +23 -0
  173. package/dist/statements/CreateCreateStoredProcedureStatementTextRenderer.d.ts +4 -0
  174. package/dist/statements/CreateCreateStoredProcedureStatementTextRenderer.js +5 -0
  175. package/dist/statements/CreateDeleteStoredProcedureStatement.d.ts +17 -0
  176. package/dist/statements/CreateDeleteStoredProcedureStatement.js +25 -0
  177. package/dist/statements/CreateDeleteStoredProcedureStatementTextRenderer.d.ts +4 -0
  178. package/dist/statements/CreateDeleteStoredProcedureStatementTextRenderer.js +5 -0
  179. package/dist/statements/CreateIndexStatement.js +13 -0
  180. package/dist/statements/CreateIndexStatementTextRenderer.js +8 -0
  181. package/dist/statements/CreateReadStoredProcedureStatement.d.ts +17 -0
  182. package/dist/statements/CreateReadStoredProcedureStatement.js +25 -0
  183. package/dist/statements/CreateReadStoredProcedureStatementTextRenderer.d.ts +4 -0
  184. package/dist/statements/CreateReadStoredProcedureStatementTextRenderer.js +5 -0
  185. package/dist/statements/CreateRoutineStatement.d.ts +22 -0
  186. package/dist/statements/CreateRoutineStatementTextRenderer.d.ts +4 -0
  187. package/dist/statements/CreateTableStatement.js +11 -0
  188. package/dist/statements/CreateTableStatementTextRenderer.js +65 -0
  189. package/dist/statements/CreateTriggerStatement.d.ts +11 -0
  190. package/dist/statements/CreateTriggerStatement.js +15 -0
  191. package/dist/statements/CreateTriggerStatementTextRenderer.d.ts +4 -0
  192. package/dist/statements/CreateTriggerStatementTextRenderer.js +5 -0
  193. package/dist/statements/CreateUpdateStoredProcedureStatement.d.ts +17 -0
  194. package/dist/statements/CreateUpdateStoredProcedureStatement.js +25 -0
  195. package/dist/statements/CreateUpdateStoredProcedureStatementTextRenderer.d.ts +4 -0
  196. package/dist/statements/CreateUpdateStoredProcedureStatementTextRenderer.js +5 -0
  197. package/dist/statements/DefaultStatementTextRenderer.js +7 -0
  198. package/dist/statements/DeleteStatement.js +9 -0
  199. package/dist/statements/DeleteStatementTextRenderer.js +11 -0
  200. package/dist/statements/DropIndexStatement.d.ts +8 -0
  201. package/dist/statements/DropIndexStatement.js +9 -0
  202. package/dist/statements/DropIndexStatementTextRenderer.d.ts +5 -0
  203. package/dist/statements/DropIndexStatementTextRenderer.js +8 -0
  204. package/dist/statements/DropRoutineStatement.d.ts +7 -0
  205. package/dist/statements/DropRoutineStatement.js +7 -0
  206. package/dist/statements/DropRoutineStatementTextRenderer.d.ts +4 -0
  207. package/dist/statements/DropRoutineStatementTextRenderer.js +5 -0
  208. package/dist/statements/DropTableStatement.d.ts +7 -0
  209. package/dist/statements/DropTableStatement.js +7 -0
  210. package/dist/statements/DropTableStatementTextRenderer.d.ts +5 -0
  211. package/dist/statements/DropTableStatementTextRenderer.js +8 -0
  212. package/dist/statements/DropTriggerStatement.d.ts +8 -0
  213. package/dist/statements/DropTriggerStatement.js +9 -0
  214. package/dist/statements/DropTriggerStatementTextRenderer.d.ts +5 -0
  215. package/dist/statements/DropTriggerStatementTextRenderer.js +8 -0
  216. package/dist/statements/ExecuteStoredProcedureStatement.js +9 -0
  217. package/dist/statements/ExecuteStoredProcedureStatementTextRenderer.js +10 -0
  218. package/dist/statements/ExpressionEvaluator.js +122 -0
  219. package/dist/statements/ExpressionRenderer.js +141 -0
  220. package/dist/statements/ForeignKey.js +24 -0
  221. package/dist/statements/IAlterTableStatement.d.ts +3 -0
  222. package/dist/statements/IAlterTableStatement.js +1 -0
  223. package/dist/statements/IBulkDeleteStatement.js +1 -0
  224. package/dist/statements/IBulkInsertStatement.js +1 -0
  225. package/dist/statements/IBulkUpdateStatement.js +1 -0
  226. package/dist/statements/ICondition.js +1 -0
  227. package/dist/statements/IConditionVisitor.js +1 -0
  228. package/dist/statements/ICreateBulkCreateStoredProcedureStatement.d.ts +3 -0
  229. package/dist/statements/ICreateBulkCreateStoredProcedureStatement.js +1 -0
  230. package/dist/statements/ICreateBulkDeleteStoredProcedureStatement.d.ts +3 -0
  231. package/dist/statements/ICreateBulkDeleteStoredProcedureStatement.js +1 -0
  232. package/dist/statements/ICreateBulkUpdateStoredProcedureStatement.d.ts +3 -0
  233. package/dist/statements/ICreateBulkUpdateStoredProcedureStatement.js +1 -0
  234. package/dist/statements/ICreateCreateStoredProcedureStatement.d.ts +3 -0
  235. package/dist/statements/ICreateCreateStoredProcedureStatement.js +1 -0
  236. package/dist/statements/ICreateDeleteStoredProcedureStatement.d.ts +3 -0
  237. package/dist/statements/ICreateDeleteStoredProcedureStatement.js +1 -0
  238. package/dist/statements/ICreateIndexStatement.js +1 -0
  239. package/dist/statements/ICreateReadStoredProcedureStatement.d.ts +3 -0
  240. package/dist/statements/ICreateReadStoredProcedureStatement.js +1 -0
  241. package/dist/statements/ICreateRoutineStatement.d.ts +3 -0
  242. package/dist/statements/ICreateTableStatement.js +1 -0
  243. package/dist/statements/ICreateTriggerStatement.d.ts +3 -0
  244. package/dist/statements/ICreateTriggerStatement.js +1 -0
  245. package/dist/statements/ICreateUpdateStoredProcedureStatement.d.ts +3 -0
  246. package/dist/statements/ICreateUpdateStoredProcedureStatement.js +1 -0
  247. package/dist/statements/IDeleteStatement.js +1 -0
  248. package/dist/statements/IDropIndexStatement.d.ts +3 -0
  249. package/dist/statements/IDropIndexStatement.js +1 -0
  250. package/dist/statements/IDropRoutineStatement.d.ts +3 -0
  251. package/dist/statements/IDropRoutineStatement.js +1 -0
  252. package/dist/statements/IDropTableStatement.d.ts +3 -0
  253. package/dist/statements/IDropTableStatement.js +1 -0
  254. package/dist/statements/IDropTriggerStatement.d.ts +3 -0
  255. package/dist/statements/IDropTriggerStatement.js +1 -0
  256. package/dist/statements/IExecuteStoredProcedureStatement.js +1 -0
  257. package/dist/statements/IExpression.js +1 -0
  258. package/dist/statements/IIdentityInsertStatement.d.ts +3 -0
  259. package/dist/statements/IIdentityInsertStatement.js +1 -0
  260. package/dist/statements/IInsertStatement.js +1 -0
  261. package/dist/statements/IReturnStatement.js +1 -0
  262. package/dist/statements/ISelectStatement.js +1 -0
  263. package/dist/statements/IStatement.js +1 -0
  264. package/dist/statements/IStatementVisitor.d.ts +28 -0
  265. package/dist/statements/IStatementVisitor.js +1 -0
  266. package/dist/statements/ITableConstraint.js +1 -0
  267. package/dist/statements/IUpdateStatement.js +1 -0
  268. package/dist/statements/IWhere.js +1 -0
  269. package/dist/statements/Identifier.js +6 -0
  270. package/dist/statements/IdentityInsertStatement.d.ts +11 -0
  271. package/dist/statements/IdentityInsertStatement.js +13 -0
  272. package/dist/statements/IdentityInsertStatementTextRenderer.d.ts +6 -0
  273. package/dist/statements/IdentityInsertStatementTextRenderer.js +8 -0
  274. package/dist/statements/InsertStatement.js +9 -0
  275. package/dist/statements/InsertStatementTextRenderer.js +5 -0
  276. package/dist/statements/Join.js +10 -0
  277. package/dist/statements/Literal.js +6 -0
  278. package/dist/statements/Native.js +7 -0
  279. package/dist/statements/NotNull.js +6 -0
  280. package/dist/statements/Operator.js +207 -0
  281. package/dist/statements/OrderBy.js +9 -0
  282. package/dist/statements/PrimaryKey.js +9 -0
  283. package/dist/statements/ReturnStatement.js +9 -0
  284. package/dist/statements/ReturnStatementTextRenderer.js +10 -0
  285. package/dist/statements/RoutineParameter.d.ts +4 -0
  286. package/dist/statements/RoutineParameter.js +1 -0
  287. package/dist/statements/SelectInsertedIdStatement.js +9 -0
  288. package/dist/statements/SelectInsertedIdStatementTextRenderer.js +5 -0
  289. package/dist/statements/SelectStatement.js +25 -0
  290. package/dist/statements/SelectStatementOptions.js +1 -0
  291. package/dist/statements/SelectStatementTextRenderer.js +54 -0
  292. package/dist/statements/StatementEvaluator.js +3 -0
  293. package/dist/statements/StatementParser.js +454 -0
  294. package/dist/statements/StatementRenderer.d.ts +42 -0
  295. package/dist/statements/StatementRenderer.js +140 -0
  296. package/dist/statements/StatementTextRenderer.js +27 -0
  297. package/dist/statements/Subquery.js +6 -0
  298. package/dist/statements/UniqueConstraint.js +9 -0
  299. package/dist/statements/UpdateStatement.js +19 -0
  300. package/dist/statements/UpdateStatementTextRenderer.js +51 -0
  301. package/dist/statements/Where.js +182 -0
  302. package/dist/statements/WhereText.js +10 -0
  303. package/dist/statements/index.d.ts +44 -0
  304. package/dist/statements/index.js +79 -0
  305. package/dist/stubs/StubCommand.js +13 -0
  306. package/dist/stubs/StubConnection.js +14 -0
  307. package/dist/stubs/StubDatasource.js +34 -0
  308. package/dist/stubs/StubReader.js +20 -0
  309. package/dist/stubs/StubRepository.js +17 -0
  310. package/dist/stubs/StubTransaction.js +13 -0
  311. package/dist/stubs/createStubDatasource.js +2 -0
  312. package/dist/stubs/index.js +7 -0
  313. package/dist/stubs/notImplemented.js +4 -0
  314. package/package.json +10 -11
  315. package/src/ArrayReader.test.ts +0 -23
  316. package/src/ArrayReader.ts +0 -32
  317. package/src/BatchCommandIBulkWriteStrategy.ts +0 -228
  318. package/src/BuiltRepository.ts +0 -17
  319. package/src/BulkCRUDRepository.test.ts +0 -183
  320. package/src/BulkCRUDRepository.ts +0 -84
  321. package/src/BulkCommand.ts +0 -6
  322. package/src/BulkWriteEnrichment.ts +0 -19
  323. package/src/BulkWriteStrategy.test.ts +0 -293
  324. package/src/CRUDRepository.test.ts +0 -420
  325. package/src/CRUDRepository.ts +0 -264
  326. package/src/CRUDRepositoryBuilder.ts +0 -53
  327. package/src/CRUDRepositoryOptions.test.ts +0 -76
  328. package/src/CRUDRepositoryOptions.ts +0 -8
  329. package/src/CRUDRepositoryStatements.ts +0 -43
  330. package/src/CascadeDeleteEnrichmentStrategy.ts +0 -51
  331. package/src/CascadeDeleteUpdateEnrichmentStrategy.ts +0 -28
  332. package/src/Command.test.ts +0 -105
  333. package/src/CommandMiddlewareHost.test.ts +0 -98
  334. package/src/CommandMiddlewareHost.ts +0 -113
  335. package/src/Connection.test.ts +0 -34
  336. package/src/ConsoleCommandMiddleware.test.ts +0 -149
  337. package/src/ConsoleCommandMiddleware.ts +0 -64
  338. package/src/CreateEnrichmentStrategy.ts +0 -82
  339. package/src/Datasource.test.ts +0 -63
  340. package/src/Datasource.ts +0 -152
  341. package/src/DatasourceError.test.ts +0 -10
  342. package/src/DatasourceError.ts +0 -6
  343. package/src/DatasourceFactory.test.ts +0 -159
  344. package/src/DatasourceFactory.ts +0 -86
  345. package/src/DatasourceOptions.ts +0 -1
  346. package/src/DatasourceUrl.ts +0 -37
  347. package/src/DatasourceUrlParser.test.ts +0 -173
  348. package/src/DatasourceUrlParser.ts +0 -188
  349. package/src/DefaultCreateEnrichmentStrategy.ts +0 -21
  350. package/src/DefaultReadonlyEnrichmentStrategy.ts +0 -164
  351. package/src/DefaultUpdateEnrichmentStrategy.ts +0 -40
  352. package/src/DefaultWriteEnrichmentStrategy.ts +0 -151
  353. package/src/DeleteEnrichmentStrategy.ts +0 -56
  354. package/src/DriverLoader.ts +0 -97
  355. package/src/Enrichment.ts +0 -15
  356. package/src/EnrichmentPropertyType.ts +0 -9
  357. package/src/ExpectConsoleMiddleware.test.ts +0 -79
  358. package/src/ExpectConsoleMiddleware.ts +0 -47
  359. package/src/FirstResultReader.test.ts +0 -43
  360. package/src/FirstResultReader.ts +0 -49
  361. package/src/HashsetOptimizedReadonlyEnrichmentStrategy.ts +0 -80
  362. package/src/IBulkWriteStrategy.ts +0 -13
  363. package/src/ICRUDRepository.ts +0 -13
  364. package/src/ICRUDRepositoryFactory.ts +0 -8
  365. package/src/ICommand.ts +0 -45
  366. package/src/ICommandMiddleware.ts +0 -20
  367. package/src/IConnection.ts +0 -13
  368. package/src/IDatasource.ts +0 -27
  369. package/src/IDatasourceFactory.ts +0 -6
  370. package/src/IDriver.ts +0 -24
  371. package/src/IEnriched.ts +0 -11
  372. package/src/IReader.ts +0 -8
  373. package/src/IReadonlyEnrichmentStrategy.ts +0 -19
  374. package/src/IReadonlyRepository.ts +0 -21
  375. package/src/IRepository.ts +0 -5
  376. package/src/IRepositoryFactory.ts +0 -8
  377. package/src/IRepositoryTree.ts +0 -5
  378. package/src/IRepositoryTreeNode.ts +0 -8
  379. package/src/ITransaction.ts +0 -9
  380. package/src/IUnitOfWork.ts +0 -5
  381. package/src/IWriteEnrichmentStrategy.ts +0 -8
  382. package/src/Information.ts +0 -5
  383. package/src/IsolationLevel.test.ts +0 -13
  384. package/src/IsolationLevel.ts +0 -8
  385. package/src/LazyWriteEnrichmentStrategy.ts +0 -5
  386. package/src/NestedToObjectEnrichmentStrategy.ts +0 -33
  387. package/src/Parameter.ts +0 -8
  388. package/src/ParameterDirection.ts +0 -9
  389. package/src/ProviderCatalog.test.ts +0 -110
  390. package/src/ProviderCatalog.ts +0 -21
  391. package/src/ProviderNotImplementedError.test.ts +0 -11
  392. package/src/ProviderNotImplementedError.ts +0 -9
  393. package/src/ProviderNotInstalledError.test.ts +0 -11
  394. package/src/ProviderNotInstalledError.ts +0 -9
  395. package/src/ReadonlyRepository.test.ts +0 -406
  396. package/src/ReadonlyRepository.ts +0 -276
  397. package/src/ReadonlyRepositoryBuilder.ts +0 -53
  398. package/src/ReadonlyRepositoryMappingOptions.ts +0 -15
  399. package/src/ReadonlyRepositoryStatements.ts +0 -13
  400. package/src/RepositoryAccess.ts +0 -14
  401. package/src/RepositoryFactory.test.ts +0 -94
  402. package/src/RepositoryFactory.ts +0 -115
  403. package/src/RepositoryNotRegisteredError.ts +0 -9
  404. package/src/RepositoryTree.ts +0 -6
  405. package/src/RepositoryTreeNode.ts +0 -11
  406. package/src/Response.ts +0 -15
  407. package/src/Row.ts +0 -3
  408. package/src/SingleCommandIBulkWriteStrategy.ts +0 -35
  409. package/src/StatementMappers.test.ts +0 -221
  410. package/src/StatementMappers.ts +0 -110
  411. package/src/StoredEnrichment.ts +0 -25
  412. package/src/StoredProcedureBulkWriteStrategy.ts +0 -164
  413. package/src/StreamingReader.test.ts +0 -126
  414. package/src/StreamingReader.ts +0 -64
  415. package/src/Transaction.test.ts +0 -37
  416. package/src/UnitOfWorkTransaction.test.ts +0 -43
  417. package/src/UnitOfWorkTransaction.ts +0 -50
  418. package/src/UpdateEnrichmentStrategy.ts +0 -97
  419. package/src/UserViewCRUDRepository.test.ts +0 -323
  420. package/src/WriteMode.ts +0 -1
  421. package/src/builders/Field.ts +0 -6
  422. package/src/builders/Scalar.ts +0 -1
  423. package/src/builders/builders.test.ts +0 -404
  424. package/src/builders/index.ts +0 -2
  425. package/src/collectAsync.ts +0 -7
  426. package/src/converters/Cell.ts +0 -10
  427. package/src/converters/ChangeCasingConverter.test.ts +0 -34
  428. package/src/converters/ChangeCasingConverter.ts +0 -59
  429. package/src/converters/Constructable.ts +0 -1
  430. package/src/converters/MetaDataRowTypeConverter.ts +0 -80
  431. package/src/converters/PluralizerConverter.test.ts +0 -43
  432. package/src/converters/PluralizerConverter.ts +0 -67
  433. package/src/converters/RegexConverter.test.ts +0 -11
  434. package/src/converters/RegexConverter.ts +0 -14
  435. package/src/converters/ReplaceConverter.test.ts +0 -9
  436. package/src/converters/ReplaceConverter.ts +0 -6
  437. package/src/converters/RowTypeConverter.test.ts +0 -79
  438. package/src/converters/RowTypeConverter.ts +0 -33
  439. package/src/converters/ToLowerCaseConverter.test.ts +0 -9
  440. package/src/converters/ToLowerCaseConverter.ts +0 -4
  441. package/src/converters/ToUpperCaseConverter.test.ts +0 -9
  442. package/src/converters/ToUpperCaseConverter.ts +0 -4
  443. package/src/converters/TypeConverter.ts +0 -6
  444. package/src/createCRUDRepositoryOptions.ts +0 -21
  445. package/src/createReadonlyRepositoryMappingOptions.ts +0 -26
  446. package/src/dotEnv.test.ts +0 -21
  447. package/src/dotEnv.ts +0 -16
  448. package/src/edgeCases.test.ts +0 -485
  449. package/src/index.ts +0 -222
  450. package/src/mappers/ChangeCasingMapper.test.ts +0 -32
  451. package/src/mappers/ChangeCasingMapper.ts +0 -15
  452. package/src/mappers/DictionaryMapper.test.ts +0 -69
  453. package/src/mappers/DictionaryMapper.ts +0 -16
  454. package/src/mappers/FlatToNestedMapper.test.ts +0 -269
  455. package/src/mappers/FlatToNestedMapper.ts +0 -127
  456. package/src/mappers/IFlatToNestedMapper.ts +0 -7
  457. package/src/mappers/IMapper.ts +0 -4
  458. package/src/mappers/IdentityMapper.test.ts +0 -12
  459. package/src/mappers/IdentityMapper.ts +0 -6
  460. package/src/mappers/PluralizerMapper.test.ts +0 -40
  461. package/src/mappers/PluralizerMapper.ts +0 -9
  462. package/src/mappers/RowTypeMapper.test.ts +0 -12
  463. package/src/mappers/RowTypeMapper.ts +0 -13
  464. package/src/mappers/TransformConverterMapper.test.ts +0 -181
  465. package/src/mappers/TransformConverterMapper.ts +0 -11
  466. package/src/mappers/TransformMapper.ts +0 -8
  467. package/src/mappers/TypeMap.ts +0 -10
  468. package/src/mappers/TypeMapGroup.ts +0 -6
  469. package/src/mappers/transformMapper.test.ts +0 -66
  470. package/src/mocks/MockCommand.test.ts +0 -75
  471. package/src/mocks/MockConnection.test.ts +0 -34
  472. package/src/mocks/MockDatasource.test.ts +0 -40
  473. package/src/mocks/MockReader.test.ts +0 -17
  474. package/src/mocks/MockRepository.test.ts +0 -32
  475. package/src/mocks/MockSelectStatement.test.ts +0 -11
  476. package/src/mocks/MockTransaction.test.ts +0 -17
  477. package/src/mocks/MockWhere.test.ts +0 -11
  478. package/src/mocks/index.ts +0 -9
  479. package/src/mocks/mock-command.ts +0 -66
  480. package/src/mocks/mock-connection.ts +0 -57
  481. package/src/mocks/mock-datasource.ts +0 -65
  482. package/src/mocks/mock-driver.ts +0 -27
  483. package/src/mocks/mock-reader.ts +0 -38
  484. package/src/mocks/mock-repository.ts +0 -91
  485. package/src/mocks/mock-select-statement.ts +0 -17
  486. package/src/mocks/mock-transaction.ts +0 -31
  487. package/src/mocks/mock-where.ts +0 -13
  488. package/src/parametersToRecord.test.ts +0 -19
  489. package/src/parametersToRecord.ts +0 -11
  490. package/src/public-surface.test.ts +0 -23
  491. package/src/readWithWhereClauseAndCustomFlatToNestedObjectMappingOptions.test.ts +0 -126
  492. package/src/readerToAsyncIterable.test.ts +0 -39
  493. package/src/readerToAsyncIterable.ts +0 -11
  494. package/src/repository.test.ts +0 -410
  495. package/src/repository.type.test.ts +0 -29
  496. package/src/splitStatements.ts +0 -99
  497. package/src/statementParameters.ts +0 -22
  498. package/src/statementUsesParameter.ts +0 -4
  499. package/src/statements/Aggregate.ts +0 -9
  500. package/src/statements/ArrayExpression.ts +0 -5
  501. package/src/statements/BulkDeleteStatement.ts +0 -18
  502. package/src/statements/BulkDeleteStatementTextRenderer.ts +0 -16
  503. package/src/statements/BulkInsertStatement.ts +0 -37
  504. package/src/statements/BulkInsertStatementTextRenderer.ts +0 -10
  505. package/src/statements/BulkUpdateStatement.ts +0 -24
  506. package/src/statements/BulkUpdateStatementTextRenderer.ts +0 -29
  507. package/src/statements/CheckConstraint.ts +0 -9
  508. package/src/statements/Cmp.ts +0 -12
  509. package/src/statements/Column.ts +0 -10
  510. package/src/statements/ColumnDefault.ts +0 -6
  511. package/src/statements/Condition.ts +0 -3
  512. package/src/statements/ConditionRenderer.ts +0 -17
  513. package/src/statements/CreateIndexStatement.ts +0 -18
  514. package/src/statements/CreateIndexStatementTextRenderer.ts +0 -11
  515. package/src/statements/CreateTableStatement.ts +0 -18
  516. package/src/statements/CreateTableStatementTextRenderer.ts +0 -92
  517. package/src/statements/DefaultStatementTextRenderer.ts +0 -9
  518. package/src/statements/DeleteStatement.ts +0 -15
  519. package/src/statements/DeleteStatementTextRenderer.ts +0 -12
  520. package/src/statements/ExecuteStoredProcedureStatement.ts +0 -15
  521. package/src/statements/ExecuteStoredProcedureStatementTextRenderer.ts +0 -15
  522. package/src/statements/ExpressionEvaluator.ts +0 -166
  523. package/src/statements/ExpressionRenderer.ts +0 -161
  524. package/src/statements/ForeignKey.ts +0 -23
  525. package/src/statements/IBulkDeleteStatement.ts +0 -3
  526. package/src/statements/IBulkInsertStatement.ts +0 -3
  527. package/src/statements/IBulkUpdateStatement.ts +0 -3
  528. package/src/statements/ICondition.ts +0 -5
  529. package/src/statements/IConditionVisitor.ts +0 -7
  530. package/src/statements/ICreateIndexStatement.ts +0 -3
  531. package/src/statements/ICreateTableStatement.ts +0 -3
  532. package/src/statements/IDeleteStatement.ts +0 -6
  533. package/src/statements/IExecuteStoredProcedureStatement.ts +0 -3
  534. package/src/statements/IExpression.ts +0 -1
  535. package/src/statements/IInsertStatement.ts +0 -3
  536. package/src/statements/IReturnStatement.ts +0 -3
  537. package/src/statements/ISelectStatement.ts +0 -6
  538. package/src/statements/IStatement.ts +0 -5
  539. package/src/statements/IStatementVisitor.ts +0 -27
  540. package/src/statements/ITableConstraint.ts +0 -6
  541. package/src/statements/IUpdateStatement.ts +0 -6
  542. package/src/statements/IWhere.ts +0 -7
  543. package/src/statements/Identifier.ts +0 -5
  544. package/src/statements/InsertStatement.ts +0 -15
  545. package/src/statements/InsertStatementTextRenderer.ts +0 -7
  546. package/src/statements/Join.ts +0 -26
  547. package/src/statements/Literal.ts +0 -6
  548. package/src/statements/Native.ts +0 -5
  549. package/src/statements/NotNull.ts +0 -3
  550. package/src/statements/Operator.ts +0 -234
  551. package/src/statements/OrderBy.ts +0 -19
  552. package/src/statements/PrimaryKey.ts +0 -9
  553. package/src/statements/ReturnStatement.ts +0 -15
  554. package/src/statements/ReturnStatementTextRenderer.ts +0 -15
  555. package/src/statements/SelectInsertedIdStatement.test.ts +0 -11
  556. package/src/statements/SelectInsertedIdStatement.ts +0 -11
  557. package/src/statements/SelectInsertedIdStatementTextRenderer.ts +0 -7
  558. package/src/statements/SelectStatement.ts +0 -34
  559. package/src/statements/SelectStatementOptions.ts +0 -16
  560. package/src/statements/SelectStatementTextRenderer.ts +0 -71
  561. package/src/statements/StatementCompile.test.ts +0 -231
  562. package/src/statements/StatementEvaluator.ts +0 -5
  563. package/src/statements/StatementParser.test.ts +0 -304
  564. package/src/statements/StatementParser.ts +0 -461
  565. package/src/statements/StatementRenderer.ts +0 -120
  566. package/src/statements/StatementTextRenderer.ts +0 -60
  567. package/src/statements/Subquery.ts +0 -6
  568. package/src/statements/UniqueConstraint.ts +0 -9
  569. package/src/statements/UpdateStatement.ts +0 -34
  570. package/src/statements/UpdateStatementTextRenderer.ts +0 -63
  571. package/src/statements/Where.ts +0 -250
  572. package/src/statements/WhereText.ts +0 -10
  573. package/src/statements/index.ts +0 -75
  574. package/src/stubs/StubCommand.ts +0 -30
  575. package/src/stubs/StubConnection.ts +0 -21
  576. package/src/stubs/StubDatasource.test.ts +0 -99
  577. package/src/stubs/StubDatasource.ts +0 -60
  578. package/src/stubs/StubReader.ts +0 -25
  579. package/src/stubs/StubRepository.ts +0 -42
  580. package/src/stubs/StubTransaction.ts +0 -17
  581. package/src/stubs/createStubDatasource.ts +0 -4
  582. package/src/stubs/index.ts +0 -7
  583. package/src/stubs/notImplemented.ts +0 -5
  584. package/src/tests/contact/Address.ts +0 -14
  585. package/src/tests/contact/AddressType.ts +0 -6
  586. package/src/tests/contact/Base.ts +0 -7
  587. package/src/tests/contact/Contact.ts +0 -12
  588. package/src/tests/contact/ContactBase.ts +0 -8
  589. package/src/tests/contact/ContactChangeLog.ts +0 -8
  590. package/src/tests/contact/ContactGroup.ts +0 -6
  591. package/src/tests/contact/ContactGroupBase.ts +0 -6
  592. package/src/tests/contact/ContactGroupMember.ts +0 -6
  593. package/src/tests/contact/ContactSource.ts +0 -6
  594. package/src/tests/contact/ContactType.ts +0 -6
  595. package/src/tests/contact/ContactsService.test.ts +0 -118
  596. package/src/tests/contact/ContactsService.ts +0 -32
  597. package/src/tests/contact/ImportContactRequest.ts +0 -4
  598. package/src/tests/contact/ImportContactResult.ts +0 -5
  599. package/src/tests/contact/LegacyContact.ts +0 -7
  600. package/src/tests/contact/LegacyMigrationResult.ts +0 -5
  601. package/src/tests/contact/Phone.ts +0 -9
  602. package/src/tests/contact/PhoneType.ts +0 -6
  603. package/src/tests/contact/asContactsView.ts +0 -63
  604. package/src/tests/contact/contactColumns.ts +0 -40
  605. package/src/tests/contact/contactLookupIds.ts +0 -32
  606. package/src/tests/contact/contactLookups.ts +0 -6
  607. package/src/tests/contact/contactsParity.ts +0 -63
  608. package/src/tests/contact/contactsServiceOf.ts +0 -38
  609. package/src/tests/contact/contactsView.ts +0 -31
  610. package/src/tests/contact/expectContactsView.ts +0 -23
  611. package/src/tests/contact/extraContact.ts +0 -61
  612. package/src/tests/contact/logMapped.ts +0 -5
  613. package/src/tests/contact/seedContacts.ts +0 -31
@@ -0,0 +1,122 @@
1
+ import { ArrayExpression } from "./ArrayExpression.js";
2
+ import { Identifier } from "./Identifier.js";
3
+ import { Literal } from "./Literal.js";
4
+ import { Operator } from "./Operator.js";
5
+ import { Subquery } from "./Subquery.js";
6
+ import { WhereText } from "./WhereText.js";
7
+ import { Where } from "./Where.js";
8
+ const isTrue = (value) => value === true;
9
+ const like = (text, pattern) => text === null || pattern === null
10
+ ? false
11
+ : typeof text === "string" && typeof pattern === "string"
12
+ ? wild(text, pattern)
13
+ : (() => {
14
+ throw new Error("empty like");
15
+ })();
16
+ const wild = (text, pattern) => {
17
+ let t = 0;
18
+ let p = 0;
19
+ let starT = -1;
20
+ let starP = -1;
21
+ while (t < text.length) {
22
+ if (p < pattern.length && (pattern[p] === "_" || pattern[p] === text[t])) {
23
+ t++;
24
+ p++;
25
+ }
26
+ else if (p < pattern.length && pattern[p] === "%") {
27
+ starP = p++;
28
+ starT = t;
29
+ }
30
+ else if (starP >= 0) {
31
+ p = starP + 1;
32
+ t = ++starT;
33
+ }
34
+ else
35
+ return false;
36
+ }
37
+ while (p < pattern.length && pattern[p] === "%")
38
+ p++;
39
+ return p === pattern.length;
40
+ };
41
+ const between = (value, low, high) => value === null || low === null || high === null ? false : compare(value, low) >= 0 && compare(value, high) <= 0;
42
+ const equal = (left, right) => left === right;
43
+ const compare = (left, right) => typeof left === "number" && typeof right === "number"
44
+ ? left - right
45
+ : typeof left === "bigint" && typeof right === "bigint"
46
+ ? Number(left - right)
47
+ : typeof left === "string" && typeof right === "string"
48
+ ? left < right
49
+ ? -1
50
+ : left > right
51
+ ? 1
52
+ : 0
53
+ : (() => {
54
+ throw new Error("empty compare");
55
+ })();
56
+ export class ExpressionEvaluator {
57
+ evaluate = (expression, parameters) => expression instanceof Where
58
+ ? this.evaluate(expression.condition, parameters)
59
+ : expression instanceof WhereText
60
+ ? (() => {
61
+ throw new Error("text where is not evaluable");
62
+ })()
63
+ : expression instanceof Identifier
64
+ ? (parameters?.[expression.name] ?? null)
65
+ : expression instanceof Literal
66
+ ? expression.value
67
+ : expression instanceof Operator.Not
68
+ ? !isTrue(this.evaluate(expression.argument, parameters))
69
+ : expression instanceof Operator.IsNull
70
+ ? this.evaluate(expression.argument, parameters) === null
71
+ : expression instanceof Operator.IsNotNull
72
+ ? this.evaluate(expression.argument, parameters) !== null
73
+ : expression instanceof Operator.Like
74
+ ? like(this.evaluate(expression.left, parameters), this.evaluate(expression.right, parameters))
75
+ : expression instanceof Operator.NotLike
76
+ ? !like(this.evaluate(expression.left, parameters), this.evaluate(expression.right, parameters))
77
+ : expression instanceof Operator.Between
78
+ ? between(this.evaluate(expression.value, parameters), this.evaluate(expression.low, parameters), this.evaluate(expression.high, parameters))
79
+ : expression instanceof Operator.NotBetween
80
+ ? !between(this.evaluate(expression.value, parameters), this.evaluate(expression.low, parameters), this.evaluate(expression.high, parameters))
81
+ : expression instanceof Operator.NotIn
82
+ ? expression.right instanceof ArrayExpression
83
+ ? !expression.right.elements.some((element) => equal(this.evaluate(expression.left, parameters), this.evaluate(element, parameters)))
84
+ : (() => {
85
+ throw new Error("empty in");
86
+ })()
87
+ : expression instanceof Operator.Exists || expression instanceof Subquery
88
+ ? (() => {
89
+ throw new Error("subquery is not evaluable");
90
+ })()
91
+ : expression instanceof Operator.And
92
+ ? isTrue(this.evaluate(expression.left, parameters)) &&
93
+ isTrue(this.evaluate(expression.right, parameters))
94
+ : expression instanceof Operator.Or
95
+ ? isTrue(this.evaluate(expression.left, parameters)) ||
96
+ isTrue(this.evaluate(expression.right, parameters))
97
+ : expression instanceof Operator.In
98
+ ? expression.right instanceof ArrayExpression
99
+ ? expression.right.elements.some((element) => equal(this.evaluate(expression.left, parameters), this.evaluate(element, parameters)))
100
+ : (() => {
101
+ throw new Error("empty in");
102
+ })()
103
+ : expression instanceof Operator.Equals
104
+ ? equal(this.evaluate(expression.left, parameters), this.evaluate(expression.right, parameters))
105
+ : expression instanceof Operator.NotEquals
106
+ ? !equal(this.evaluate(expression.left, parameters), this.evaluate(expression.right, parameters))
107
+ : expression instanceof Operator.GreaterThan
108
+ ? compare(this.evaluate(expression.left, parameters), this.evaluate(expression.right, parameters)) > 0
109
+ : expression instanceof Operator.LessThan
110
+ ? compare(this.evaluate(expression.left, parameters), this.evaluate(expression.right, parameters)) < 0
111
+ : expression instanceof Operator.GreaterThanOrEqual
112
+ ? compare(this.evaluate(expression.left, parameters), this.evaluate(expression.right, parameters)) >= 0
113
+ : expression instanceof Operator.LessThanOrEqual
114
+ ? compare(this.evaluate(expression.left, parameters), this.evaluate(expression.right, parameters)) <= 0
115
+ : expression instanceof ArrayExpression
116
+ ? (() => {
117
+ throw new Error("array is not a scalar");
118
+ })()
119
+ : (() => {
120
+ throw new Error("empty expression");
121
+ })();
122
+ }
@@ -0,0 +1,141 @@
1
+ import { ArrayExpression } from "./ArrayExpression.js";
2
+ import { Identifier } from "./Identifier.js";
3
+ import { Literal } from "./Literal.js";
4
+ import { Operator } from "./Operator.js";
5
+ import { Subquery } from "./Subquery.js";
6
+ import { Where } from "./Where.js";
7
+ export class ExpressionRenderer {
8
+ text;
9
+ constructor(text) {
10
+ this.text = text;
11
+ }
12
+ render = (expression) => {
13
+ if (expression instanceof Where)
14
+ return this.render(expression.condition);
15
+ if (expression instanceof Identifier)
16
+ return expression.name;
17
+ if (expression instanceof Literal)
18
+ return inline(expression.value);
19
+ if (expression instanceof ArrayExpression)
20
+ return expression.elements.map((e) => this.render(e)).join(", ");
21
+ if (expression instanceof Operator.Not)
22
+ return `NOT (${this.render(expression.argument)})`;
23
+ if (expression instanceof Operator.IsNull)
24
+ return `${this.render(expression.argument)} IS NULL`;
25
+ if (expression instanceof Operator.IsNotNull)
26
+ return `${this.render(expression.argument)} IS NOT NULL`;
27
+ if (expression instanceof Operator.Exists)
28
+ return `EXISTS ${this.render(expression.argument)}`;
29
+ if (expression instanceof Subquery)
30
+ return `(${this.text.render(expression.query)})`;
31
+ if (expression instanceof Operator.In &&
32
+ expression.left instanceof Identifier &&
33
+ expression.right instanceof ArrayExpression)
34
+ return expression.right.elements.length === 0
35
+ ? "1 = 0"
36
+ : `${expression.left.name} IN (${slots(expression.left.name, expression.right.elements.length)})`;
37
+ if (expression instanceof Operator.In &&
38
+ expression.left instanceof Identifier &&
39
+ expression.right instanceof Subquery)
40
+ return `${expression.left.name} IN ${this.render(expression.right)}`;
41
+ if (expression instanceof Operator.NotIn &&
42
+ expression.left instanceof Identifier &&
43
+ expression.right instanceof ArrayExpression)
44
+ return expression.right.elements.length === 0
45
+ ? "1 = 1"
46
+ : `${expression.left.name} NOT IN (${slots(expression.left.name, expression.right.elements.length)})`;
47
+ if (expression instanceof Operator.NotIn &&
48
+ expression.left instanceof Identifier &&
49
+ expression.right instanceof Subquery)
50
+ return `${expression.left.name} NOT IN ${this.render(expression.right)}`;
51
+ if ((expression instanceof Operator.Between || expression instanceof Operator.NotBetween) &&
52
+ expression.value instanceof Identifier &&
53
+ expression.low instanceof Literal &&
54
+ expression.high instanceof Literal) {
55
+ const word = expression instanceof Operator.NotBetween ? "NOT BETWEEN" : "BETWEEN";
56
+ return `${expression.value.name} ${word} $${parameterName(expression.value.name)}_0 AND $${parameterName(expression.value.name)}_1`;
57
+ }
58
+ if (expression instanceof Operator.Between)
59
+ return `${this.render(expression.value)} BETWEEN ${this.render(expression.low)} AND ${this.render(expression.high)}`;
60
+ if (expression instanceof Operator.NotBetween)
61
+ return `${this.render(expression.value)} NOT BETWEEN ${this.render(expression.low)} AND ${this.render(expression.high)}`;
62
+ if (expression instanceof Operator.And)
63
+ return `${this.wrap(expression.left, true)} AND ${this.wrap(expression.right, true)}`;
64
+ if (expression instanceof Operator.Or)
65
+ return `${this.wrap(expression.left, false)} OR ${this.wrap(expression.right, false)}`;
66
+ const operands = expression instanceof Operator ? pair(expression) : undefined;
67
+ if (operands && operands.left instanceof Identifier && operands.right instanceof Literal)
68
+ return `${operands.left.name} ${symbol(expression)} $${parameterName(operands.left.name)}`;
69
+ if (operands && operands.left instanceof Literal && operands.right instanceof Literal)
70
+ return `${inline(operands.left.value)} ${symbol(expression)} ${inline(operands.right.value)}`;
71
+ if (operands)
72
+ return `${this.render(operands.left)} ${symbol(expression)} ${this.render(operands.right)}`;
73
+ throw new Error("empty expression");
74
+ };
75
+ wrap = (child, and) => needsParens(child, and) ? `(${this.render(child)})` : this.render(child);
76
+ }
77
+ const symbol = (op) => op instanceof Operator.Equals
78
+ ? "="
79
+ : op instanceof Operator.NotEquals
80
+ ? "<>"
81
+ : op instanceof Operator.GreaterThan
82
+ ? ">"
83
+ : op instanceof Operator.LessThan
84
+ ? "<"
85
+ : op instanceof Operator.GreaterThanOrEqual
86
+ ? ">="
87
+ : op instanceof Operator.LessThanOrEqual
88
+ ? "<="
89
+ : op instanceof Operator.Like
90
+ ? "LIKE"
91
+ : op instanceof Operator.NotLike
92
+ ? "NOT LIKE"
93
+ : "IN";
94
+ const inline = (value) => value === null
95
+ ? "null"
96
+ : typeof value === "boolean"
97
+ ? String(value)
98
+ : typeof value === "string"
99
+ ? `'${value.replace(/'/g, "''")}'`
100
+ : String(value);
101
+ const needsParens = (child, and) => child instanceof Where
102
+ ? needsParens(child.condition, and)
103
+ : child instanceof Operator.Not ||
104
+ child instanceof Operator.In ||
105
+ child instanceof Operator.NotIn ||
106
+ (child instanceof Operator.And && !and) ||
107
+ (child instanceof Operator.Or && and);
108
+ const pair = (expression) => expression instanceof Operator.Equals ||
109
+ expression instanceof Operator.NotEquals ||
110
+ expression instanceof Operator.GreaterThan ||
111
+ expression instanceof Operator.LessThan ||
112
+ expression instanceof Operator.GreaterThanOrEqual ||
113
+ expression instanceof Operator.LessThanOrEqual ||
114
+ expression instanceof Operator.And ||
115
+ expression instanceof Operator.Or ||
116
+ expression instanceof Operator.In ||
117
+ expression instanceof Operator.Like ||
118
+ expression instanceof Operator.NotLike
119
+ ? expression
120
+ : undefined;
121
+ const parameterName = (name) => parts(name)
122
+ .map((part) => part.length >= 2 && part.startsWith('"') && part.endsWith('"')
123
+ ? part.slice(1, -1).replace(/""/g, '"')
124
+ : part)
125
+ .join(".");
126
+ const parts = (name) => {
127
+ const found = [];
128
+ let start = 0;
129
+ let quoted = false;
130
+ for (let i = 0; i < name.length; i++) {
131
+ if (name[i] === '"')
132
+ quoted = !quoted;
133
+ if (name[i] !== "." || quoted)
134
+ continue;
135
+ found.push(name.slice(start, i));
136
+ start = i + 1;
137
+ }
138
+ found.push(name.slice(start));
139
+ return found;
140
+ };
141
+ const slots = (name, count) => Array.from({ length: count }, (_, i) => `$${parameterName(name)}_${i}`).join(", ");
@@ -0,0 +1,24 @@
1
+ export const ReferentialAction = {
2
+ Cascade: "cascade",
3
+ SetNull: "setNull",
4
+ SetDefault: "setDefault",
5
+ Restrict: "restrict",
6
+ NoAction: "noAction",
7
+ };
8
+ export class ForeignKey {
9
+ name;
10
+ columns;
11
+ referencesTable;
12
+ referencesColumns;
13
+ onDelete;
14
+ onUpdate;
15
+ kind = "foreignKey";
16
+ constructor(name, columns, referencesTable, referencesColumns, onDelete, onUpdate) {
17
+ this.name = name;
18
+ this.columns = columns;
19
+ this.referencesTable = referencesTable;
20
+ this.referencesColumns = referencesColumns;
21
+ this.onDelete = onDelete;
22
+ this.onUpdate = onUpdate;
23
+ }
24
+ }
@@ -0,0 +1,3 @@
1
+ import type { IStatement } from "./IStatement.js";
2
+ export interface IAlterTableStatement extends IStatement {
3
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { IStatement } from "./IStatement.js";
2
+ export interface ICreateBulkCreateStoredProcedureStatement extends IStatement {
3
+ }
@@ -0,0 +1,3 @@
1
+ import type { IStatement } from "./IStatement.js";
2
+ export interface ICreateBulkDeleteStoredProcedureStatement extends IStatement {
3
+ }
@@ -0,0 +1,3 @@
1
+ import type { IStatement } from "./IStatement.js";
2
+ export interface ICreateBulkUpdateStoredProcedureStatement extends IStatement {
3
+ }
@@ -0,0 +1,3 @@
1
+ import type { IStatement } from "./IStatement.js";
2
+ export interface ICreateCreateStoredProcedureStatement extends IStatement {
3
+ }
@@ -0,0 +1,3 @@
1
+ import type { IStatement } from "./IStatement.js";
2
+ export interface ICreateDeleteStoredProcedureStatement extends IStatement {
3
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { IStatement } from "./IStatement.js";
2
+ export interface ICreateReadStoredProcedureStatement extends IStatement {
3
+ }
@@ -0,0 +1,3 @@
1
+ import type { IStatement } from "./IStatement.js";
2
+ export interface ICreateRoutineStatement extends IStatement {
3
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { IStatement } from "./IStatement.js";
2
+ export interface ICreateTriggerStatement extends IStatement {
3
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { IStatement } from "./IStatement.js";
2
+ export interface ICreateUpdateStoredProcedureStatement extends IStatement {
3
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { IStatement } from "./IStatement.js";
2
+ export interface IDropIndexStatement extends IStatement {
3
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { IStatement } from "./IStatement.js";
2
+ export interface IDropRoutineStatement extends IStatement {
3
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { IStatement } from "./IStatement.js";
2
+ export interface IDropTableStatement extends IStatement {
3
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { IStatement } from "./IStatement.js";
2
+ export interface IDropTriggerStatement extends IStatement {
3
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { IStatement } from "./IStatement.js";
2
+ export interface IIdentityInsertStatement extends IStatement {
3
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -1,10 +1,24 @@
1
1
  import type { BulkDeleteStatement } from "./BulkDeleteStatement.js";
2
2
  import type { BulkInsertStatement } from "./BulkInsertStatement.js";
3
3
  import type { BulkUpdateStatement } from "./BulkUpdateStatement.js";
4
+ import type { AlterTableStatement } from "./AlterTableStatement.js";
4
5
  import type { CreateIndexStatement } from "./CreateIndexStatement.js";
5
6
  import type { CreateTableStatement } from "./CreateTableStatement.js";
7
+ import type { CreateTriggerStatement } from "./CreateTriggerStatement.js";
6
8
  import type { DeleteStatement } from "./DeleteStatement.js";
9
+ import type { DropIndexStatement } from "./DropIndexStatement.js";
10
+ import type { DropRoutineStatement } from "./DropRoutineStatement.js";
11
+ import type { CreateCreateStoredProcedureStatement } from "./CreateCreateStoredProcedureStatement.js";
12
+ import type { CreateReadStoredProcedureStatement } from "./CreateReadStoredProcedureStatement.js";
13
+ import type { CreateUpdateStoredProcedureStatement } from "./CreateUpdateStoredProcedureStatement.js";
14
+ import type { CreateDeleteStoredProcedureStatement } from "./CreateDeleteStoredProcedureStatement.js";
15
+ import type { CreateBulkCreateStoredProcedureStatement } from "./CreateBulkCreateStoredProcedureStatement.js";
16
+ import type { CreateBulkUpdateStoredProcedureStatement } from "./CreateBulkUpdateStoredProcedureStatement.js";
17
+ import type { CreateBulkDeleteStoredProcedureStatement } from "./CreateBulkDeleteStoredProcedureStatement.js";
18
+ import type { DropTableStatement } from "./DropTableStatement.js";
19
+ import type { DropTriggerStatement } from "./DropTriggerStatement.js";
7
20
  import type { ExecuteStoredProcedureStatement } from "./ExecuteStoredProcedureStatement.js";
21
+ import type { IdentityInsertStatement } from "./IdentityInsertStatement.js";
8
22
  import type { InsertStatement } from "./InsertStatement.js";
9
23
  import type { ReturnStatement } from "./ReturnStatement.js";
10
24
  import type { SelectInsertedIdStatement } from "./SelectInsertedIdStatement.js";
@@ -23,4 +37,18 @@ export interface IStatementVisitor {
23
37
  visit(statement: BulkInsertStatement): string;
24
38
  visit(statement: BulkUpdateStatement): string;
25
39
  visit(statement: BulkDeleteStatement): string;
40
+ visit(statement: DropTableStatement): string;
41
+ visit(statement: AlterTableStatement): string;
42
+ visit(statement: DropIndexStatement): string;
43
+ visit(statement: DropTriggerStatement): string;
44
+ visit(statement: CreateTriggerStatement): string;
45
+ visit(statement: IdentityInsertStatement): string;
46
+ visit(statement: DropRoutineStatement): string;
47
+ visit(statement: CreateCreateStoredProcedureStatement): string;
48
+ visit(statement: CreateReadStoredProcedureStatement): string;
49
+ visit(statement: CreateUpdateStoredProcedureStatement): string;
50
+ visit(statement: CreateDeleteStoredProcedureStatement): string;
51
+ visit(statement: CreateBulkCreateStoredProcedureStatement): string;
52
+ visit(statement: CreateBulkUpdateStoredProcedureStatement): string;
53
+ visit(statement: CreateBulkDeleteStoredProcedureStatement): string;
26
54
  }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ export class Identifier {
2
+ name;
3
+ constructor(name) {
4
+ this.name = name;
5
+ }
6
+ }
@@ -0,0 +1,11 @@
1
+ import type { IIdentityInsertStatement } from "./IIdentityInsertStatement.js";
2
+ import type { InsertStatement } from "./InsertStatement.js";
3
+ import type { IStatementVisitor } from "./IStatementVisitor.js";
4
+ export declare class IdentityInsertStatement implements IIdentityInsertStatement {
5
+ readonly table: string;
6
+ readonly idColumn: string;
7
+ readonly inserts: readonly InsertStatement[];
8
+ readonly identity: boolean;
9
+ constructor(table: string, idColumn: string, inserts: readonly InsertStatement[], identity?: boolean);
10
+ accept: (visitor: IStatementVisitor) => string;
11
+ }
@@ -0,0 +1,13 @@
1
+ export class IdentityInsertStatement {
2
+ table;
3
+ idColumn;
4
+ inserts;
5
+ identity;
6
+ constructor(table, idColumn, inserts, identity = false) {
7
+ this.table = table;
8
+ this.idColumn = idColumn;
9
+ this.inserts = inserts;
10
+ this.identity = identity;
11
+ }
12
+ accept = (visitor) => visitor.visit(this);
13
+ }
@@ -0,0 +1,6 @@
1
+ import type { IdentityInsertStatement } from "./IdentityInsertStatement.js";
2
+ import type { InsertStatement } from "./InsertStatement.js";
3
+ export declare class IdentityInsertStatementTextRenderer {
4
+ render(statement: IdentityInsertStatement): string;
5
+ protected insert(statement: InsertStatement): string;
6
+ }
@@ -0,0 +1,8 @@
1
+ export class IdentityInsertStatementTextRenderer {
2
+ render(statement) {
3
+ return statement.inserts.map((insert) => this.insert(insert)).join("\n");
4
+ }
5
+ insert(statement) {
6
+ return `INSERT INTO ${statement.table} (${statement.fields.map((field) => field.name).join(", ")}) VALUES (${statement.fields.map((field) => String(field.value)).join(", ")});`;
7
+ }
8
+ }
@@ -0,0 +1,9 @@
1
+ export class InsertStatement {
2
+ table;
3
+ fields;
4
+ constructor(table, fields) {
5
+ this.table = table;
6
+ this.fields = fields;
7
+ }
8
+ accept = (visitor) => visitor.visit(this);
9
+ }
@@ -0,0 +1,5 @@
1
+ export class InsertStatementTextRenderer {
2
+ render(statement) {
3
+ return `INSERT INTO ${statement.table} (${statement.fields.map((field) => field.name).join(", ")}) VALUES (${statement.fields.map((field) => `$${field.name}`).join(", ")})`;
4
+ }
5
+ }
@@ -0,0 +1,10 @@
1
+ import { Identifier } from "./Identifier.js";
2
+ import { Operator } from "./Operator.js";
3
+ const equality = (left, right) => new Operator.Equals(new Identifier(left), new Identifier(right));
4
+ export const Join = {
5
+ inner: (table, left, right) => ({ kind: "inner", table, on: equality(left, right) }),
6
+ left: (table, left, right) => ({ kind: "left", table, on: equality(left, right) }),
7
+ right: (table, left, right) => ({ kind: "right", table, on: equality(left, right) }),
8
+ full: (table, left, right) => ({ kind: "full", table, on: equality(left, right) }),
9
+ cross: (table) => ({ kind: "cross", table }),
10
+ };
@@ -0,0 +1,6 @@
1
+ export class Literal {
2
+ value;
3
+ constructor(value) {
4
+ this.value = value;
5
+ }
6
+ }
@@ -0,0 +1,7 @@
1
+ export class Native {
2
+ text;
3
+ constructor(text) {
4
+ this.text = text;
5
+ }
6
+ }
7
+ export const n = (text) => new Native(text);
@@ -0,0 +1,6 @@
1
+ export class NotNull {
2
+ name;
3
+ constructor(name) {
4
+ this.name = name;
5
+ }
6
+ }