@deterministic-code/datasources 0.0.0-stage → 0.1.1
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.
- package/dist/ArrayReader.d.ts +12 -0
- package/dist/BatchCommandIBulkWriteStrategy.d.ts +33 -0
- package/dist/BuiltRepository.d.ts +16 -0
- package/dist/BulkCRUDRepository.d.ts +17 -0
- package/dist/BulkCommand.d.ts +5 -0
- package/dist/BulkWriteEnrichment.d.ts +4 -0
- package/dist/CRUDRepository.d.ts +40 -0
- package/dist/CRUDRepositoryBuilder.d.ts +19 -0
- package/dist/CRUDRepositoryOptions.d.ts +7 -0
- package/dist/CRUDRepositoryStatements.d.ts +17 -0
- package/dist/CascadeDeleteEnrichmentStrategy.d.ts +7 -0
- package/dist/CascadeDeleteUpdateEnrichmentStrategy.d.ts +8 -0
- package/dist/CommandMiddlewareHost.d.ts +22 -0
- package/dist/ConsoleCommandMiddleware.d.ts +14 -0
- package/dist/CreateEnrichmentStrategy.d.ts +14 -0
- package/dist/Datasource.d.ts +30 -0
- package/dist/DatasourceError.d.ts +3 -0
- package/dist/DatasourceFactory.d.ts +12 -0
- package/dist/DatasourceOptions.d.ts +1 -0
- package/dist/DatasourceUrl.d.ts +12 -0
- package/dist/DatasourceUrlParser.d.ts +4 -0
- package/dist/DefaultCreateEnrichmentStrategy.d.ts +7 -0
- package/dist/DefaultReadonlyEnrichmentStrategy.d.ts +19 -0
- package/dist/DefaultUpdateEnrichmentStrategy.d.ts +7 -0
- package/dist/DefaultWriteEnrichmentStrategy.d.ts +21 -0
- package/dist/DeleteEnrichmentStrategy.d.ts +11 -0
- package/dist/DriverLoader.d.ts +5 -0
- package/dist/Enrichment.d.ts +13 -0
- package/dist/EnrichmentPropertyType.d.ts +7 -0
- package/dist/ExpectConsoleMiddleware.d.ts +15 -0
- package/dist/FirstResultReader.d.ts +19 -0
- package/dist/HashsetOptimizedReadonlyEnrichmentStrategy.d.ts +9 -0
- package/dist/IBulkWriteStrategy.d.ts +12 -0
- package/dist/ICRUDRepository.d.ts +12 -0
- package/dist/ICRUDRepositoryFactory.d.ts +7 -0
- package/dist/ICommand.d.ts +20 -0
- package/dist/ICommandMiddleware.d.ts +12 -0
- package/dist/IConnection.d.ts +12 -0
- package/dist/IDatasource.d.ts +18 -0
- package/dist/IDatasourceFactory.d.ts +5 -0
- package/dist/IDriver.d.ts +19 -0
- package/dist/IEnriched.d.ts +6 -0
- package/dist/IReader.d.ts +8 -0
- package/dist/IReadonlyEnrichmentStrategy.d.ts +7 -0
- package/dist/IReadonlyRepository.d.ts +11 -0
- package/dist/IRepository.d.ts +4 -0
- package/dist/IRepositoryFactory.d.ts +7 -0
- package/dist/IRepositoryTree.d.ts +4 -0
- package/dist/IRepositoryTreeNode.d.ts +7 -0
- package/dist/ITransaction.d.ts +8 -0
- package/dist/IUnitOfWork.d.ts +5 -0
- package/dist/IWriteEnrichmentStrategy.d.ts +7 -0
- package/dist/Information.d.ts +5 -0
- package/dist/IsolationLevel.d.ts +7 -0
- package/dist/LazyWriteEnrichmentStrategy.d.ts +4 -0
- package/dist/NestedToObjectEnrichmentStrategy.d.ts +10 -0
- package/dist/Parameter.d.ts +7 -0
- package/dist/ParameterDirection.d.ts +7 -0
- package/dist/ProviderCatalog.d.ts +7 -0
- package/dist/ProviderNotImplementedError.d.ts +4 -0
- package/dist/ProviderNotInstalledError.d.ts +4 -0
- package/dist/ReadonlyRepository.d.ts +59 -0
- package/dist/ReadonlyRepositoryBuilder.d.ts +12 -0
- package/dist/ReadonlyRepositoryMappingOptions.d.ts +14 -0
- package/dist/ReadonlyRepositoryStatements.d.ts +8 -0
- package/dist/RepositoryAccess.d.ts +11 -0
- package/dist/RepositoryFactory.d.ts +23 -0
- package/dist/RepositoryNotRegisteredError.d.ts +4 -0
- package/dist/RepositoryTree.d.ts +6 -0
- package/dist/RepositoryTreeNode.d.ts +9 -0
- package/dist/Response.d.ts +7 -0
- package/dist/Row.d.ts +2 -0
- package/dist/SingleCommandIBulkWriteStrategy.d.ts +11 -0
- package/dist/StatementMappers.d.ts +16 -0
- package/dist/StoredEnrichment.d.ts +11 -0
- package/dist/StoredProcedureBulkWriteStrategy.d.ts +27 -0
- package/dist/StreamingReader.d.ts +16 -0
- package/dist/UnitOfWorkTransaction.d.ts +12 -0
- package/dist/UpdateEnrichmentStrategy.d.ts +18 -0
- package/dist/WriteMode.d.ts +1 -0
- package/dist/builders/Field.d.ts +5 -0
- package/dist/builders/Scalar.d.ts +1 -0
- package/dist/builders/index.d.ts +2 -0
- package/dist/collectAsync.d.ts +1 -0
- package/dist/converters/Cell.d.ts +2 -0
- package/dist/converters/ChangeCasingConverter.d.ts +7 -0
- package/dist/converters/Constructable.d.ts +1 -0
- package/dist/converters/MetaDataRowTypeConverter.d.ts +14 -0
- package/dist/converters/PluralizerConverter.d.ts +4 -0
- package/dist/converters/RegexConverter.d.ts +7 -0
- package/dist/converters/ReplaceConverter.d.ts +7 -0
- package/dist/converters/RowTypeConverter.d.ts +10 -0
- package/dist/converters/ToLowerCaseConverter.d.ts +4 -0
- package/dist/converters/ToUpperCaseConverter.d.ts +4 -0
- package/dist/converters/TypeConverter.d.ts +5 -0
- package/dist/createCRUDRepositoryOptions.d.ts +7 -0
- package/dist/createReadonlyRepositoryMappingOptions.d.ts +6 -0
- package/dist/dotEnv.d.ts +5 -0
- package/dist/index.d.ts +119 -0
- package/dist/mappers/ChangeCasingMapper.d.ts +9 -0
- package/dist/mappers/DictionaryMapper.d.ts +8 -0
- package/dist/mappers/FlatToNestedMapper.d.ts +20 -0
- package/dist/mappers/IFlatToNestedMapper.d.ts +6 -0
- package/dist/mappers/IMapper.d.ts +4 -0
- package/dist/mappers/IdentityMapper.d.ts +5 -0
- package/dist/mappers/PluralizerMapper.d.ts +6 -0
- package/dist/mappers/RowTypeMapper.d.ts +6 -0
- package/dist/mappers/TransformConverterMapper.d.ts +5 -0
- package/dist/mappers/TransformMapper.d.ts +6 -0
- package/dist/mappers/TypeMap.d.ts +8 -0
- package/dist/mappers/TypeMapGroup.d.ts +5 -0
- package/dist/mocks/index.d.ts +9 -0
- package/dist/mocks/mock-command.d.ts +28 -0
- package/dist/mocks/mock-connection.d.ts +22 -0
- package/dist/mocks/mock-datasource.d.ts +24 -0
- package/dist/mocks/mock-driver.d.ts +15 -0
- package/dist/mocks/mock-reader.d.ts +14 -0
- package/dist/mocks/mock-repository.d.ts +42 -0
- package/dist/mocks/mock-select-statement.d.ts +10 -0
- package/dist/mocks/mock-transaction.d.ts +16 -0
- package/dist/mocks/mock-where.d.ts +8 -0
- package/dist/parametersToRecord.d.ts +2 -0
- package/dist/readerToAsyncIterable.d.ts +2 -0
- package/dist/splitStatements.d.ts +1 -0
- package/dist/statementParameters.d.ts +1 -0
- package/dist/statementUsesParameter.d.ts +1 -0
- package/dist/statements/Aggregate.d.ts +6 -0
- package/dist/statements/ArrayExpression.d.ts +5 -0
- package/dist/statements/BulkDeleteStatement.d.ts +11 -0
- package/dist/statements/BulkDeleteStatementTextRenderer.d.ts +4 -0
- package/dist/statements/BulkInsertStatement.d.ts +12 -0
- package/dist/statements/BulkInsertStatementTextRenderer.d.ts +4 -0
- package/dist/statements/BulkUpdateStatement.d.ts +16 -0
- package/dist/statements/BulkUpdateStatementTextRenderer.d.ts +8 -0
- package/dist/statements/CheckConstraint.d.ts +7 -0
- package/dist/statements/Cmp.d.ts +9 -0
- package/dist/statements/Column.d.ts +9 -0
- package/dist/statements/ColumnDefault.d.ts +5 -0
- package/dist/statements/Condition.d.ts +3 -0
- package/dist/statements/ConditionRenderer.d.ts +12 -0
- package/dist/statements/CreateIndexStatement.d.ts +10 -0
- package/dist/statements/CreateIndexStatementTextRenderer.d.ts +5 -0
- package/dist/statements/CreateTableStatement.d.ts +11 -0
- package/dist/statements/CreateTableStatementTextRenderer.d.ts +18 -0
- package/dist/statements/DefaultStatementTextRenderer.d.ts +5 -0
- package/dist/statements/DeleteStatement.d.ts +9 -0
- package/dist/statements/DeleteStatementTextRenderer.d.ts +7 -0
- package/dist/statements/ExecuteStoredProcedureStatement.d.ts +9 -0
- package/dist/statements/ExecuteStoredProcedureStatementTextRenderer.d.ts +4 -0
- package/dist/statements/ExpressionEvaluator.d.ts +5 -0
- package/dist/statements/ExpressionRenderer.d.ts +8 -0
- package/dist/statements/ForeignKey.d.ts +19 -0
- package/dist/statements/IBulkDeleteStatement.d.ts +3 -0
- package/dist/statements/IBulkInsertStatement.d.ts +3 -0
- package/dist/statements/IBulkUpdateStatement.d.ts +3 -0
- package/dist/statements/ICondition.d.ts +4 -0
- package/dist/statements/IConditionVisitor.d.ts +6 -0
- package/dist/statements/ICreateIndexStatement.d.ts +3 -0
- package/dist/statements/ICreateTableStatement.d.ts +3 -0
- package/dist/statements/IDeleteStatement.d.ts +5 -0
- package/dist/statements/IExecuteStoredProcedureStatement.d.ts +3 -0
- package/dist/statements/IExpression.d.ts +2 -0
- package/dist/statements/IInsertStatement.d.ts +3 -0
- package/dist/statements/IReturnStatement.d.ts +3 -0
- package/dist/statements/ISelectStatement.d.ts +5 -0
- package/dist/statements/IStatement.d.ts +4 -0
- package/dist/statements/IStatementVisitor.d.ts +26 -0
- package/dist/statements/ITableConstraint.d.ts +5 -0
- package/dist/statements/IUpdateStatement.d.ts +5 -0
- package/dist/statements/IWhere.d.ts +6 -0
- package/dist/statements/Identifier.d.ts +5 -0
- package/dist/statements/InsertStatement.d.ts +9 -0
- package/dist/statements/InsertStatementTextRenderer.d.ts +4 -0
- package/dist/statements/Join.d.ts +14 -0
- package/dist/statements/Literal.d.ts +6 -0
- package/dist/statements/Native.d.ts +5 -0
- package/dist/statements/NotNull.d.ts +4 -0
- package/dist/statements/Operator.d.ts +107 -0
- package/dist/statements/OrderBy.d.ts +10 -0
- package/dist/statements/PrimaryKey.d.ts +7 -0
- package/dist/statements/ReturnStatement.d.ts +9 -0
- package/dist/statements/ReturnStatementTextRenderer.d.ts +4 -0
- package/dist/statements/SelectInsertedIdStatement.d.ts +8 -0
- package/dist/statements/SelectInsertedIdStatementTextRenderer.d.ts +4 -0
- package/dist/statements/SelectStatement.d.ts +20 -0
- package/dist/statements/SelectStatementOptions.d.ts +15 -0
- package/dist/statements/SelectStatementTextRenderer.d.ts +19 -0
- package/dist/statements/StatementEvaluator.d.ts +4 -0
- package/dist/statements/StatementParser.d.ts +4 -0
- package/dist/statements/StatementRenderer.d.ts +42 -0
- package/dist/statements/StatementTextRenderer.d.ts +14 -0
- package/dist/statements/Subquery.d.ts +6 -0
- package/dist/statements/UniqueConstraint.d.ts +7 -0
- package/dist/statements/UpdateStatement.d.ts +14 -0
- package/dist/statements/UpdateStatementTextRenderer.d.ts +14 -0
- package/dist/statements/Where.d.ts +16 -0
- package/dist/statements/WhereText.d.ts +8 -0
- package/dist/statements/index.d.ts +75 -0
- package/dist/stubs/StubCommand.d.ts +15 -0
- package/dist/stubs/StubConnection.d.ts +13 -0
- package/dist/stubs/StubDatasource.d.ts +20 -0
- package/dist/stubs/StubReader.d.ts +11 -0
- package/dist/stubs/StubRepository.d.ts +22 -0
- package/dist/stubs/StubTransaction.d.ts +10 -0
- package/dist/stubs/createStubDatasource.d.ts +2 -0
- package/dist/stubs/index.d.ts +7 -0
- package/dist/stubs/notImplemented.d.ts +1 -0
- package/package.json +24 -4
- package/src/ArrayReader.test.ts +23 -0
- package/src/ArrayReader.ts +32 -0
- package/src/BatchCommandIBulkWriteStrategy.ts +228 -0
- package/src/BuiltRepository.ts +17 -0
- package/src/BulkCRUDRepository.test.ts +183 -0
- package/src/BulkCRUDRepository.ts +84 -0
- package/src/BulkCommand.ts +6 -0
- package/src/BulkWriteEnrichment.ts +19 -0
- package/src/BulkWriteStrategy.test.ts +293 -0
- package/src/CRUDRepository.test.ts +420 -0
- package/src/CRUDRepository.ts +264 -0
- package/src/CRUDRepositoryBuilder.ts +53 -0
- package/src/CRUDRepositoryOptions.test.ts +76 -0
- package/src/CRUDRepositoryOptions.ts +8 -0
- package/src/CRUDRepositoryStatements.ts +43 -0
- package/src/CascadeDeleteEnrichmentStrategy.ts +51 -0
- package/src/CascadeDeleteUpdateEnrichmentStrategy.ts +28 -0
- package/src/Command.test.ts +105 -0
- package/src/CommandMiddlewareHost.test.ts +98 -0
- package/src/CommandMiddlewareHost.ts +113 -0
- package/src/Connection.test.ts +34 -0
- package/src/ConsoleCommandMiddleware.test.ts +149 -0
- package/src/ConsoleCommandMiddleware.ts +64 -0
- package/src/CreateEnrichmentStrategy.ts +82 -0
- package/src/Datasource.test.ts +63 -0
- package/src/Datasource.ts +152 -0
- package/src/DatasourceError.test.ts +10 -0
- package/src/DatasourceError.ts +6 -0
- package/src/DatasourceFactory.test.ts +159 -0
- package/src/DatasourceFactory.ts +86 -0
- package/src/DatasourceOptions.ts +1 -0
- package/src/DatasourceUrl.ts +37 -0
- package/src/DatasourceUrlParser.test.ts +173 -0
- package/src/DatasourceUrlParser.ts +188 -0
- package/src/DefaultCreateEnrichmentStrategy.ts +21 -0
- package/src/DefaultReadonlyEnrichmentStrategy.ts +164 -0
- package/src/DefaultUpdateEnrichmentStrategy.ts +40 -0
- package/src/DefaultWriteEnrichmentStrategy.ts +151 -0
- package/src/DeleteEnrichmentStrategy.ts +56 -0
- package/src/DriverLoader.ts +97 -0
- package/src/Enrichment.ts +15 -0
- package/src/EnrichmentPropertyType.ts +9 -0
- package/src/ExpectConsoleMiddleware.test.ts +79 -0
- package/src/ExpectConsoleMiddleware.ts +47 -0
- package/src/FirstResultReader.test.ts +43 -0
- package/src/FirstResultReader.ts +49 -0
- package/src/HashsetOptimizedReadonlyEnrichmentStrategy.ts +80 -0
- package/src/IBulkWriteStrategy.ts +13 -0
- package/src/ICRUDRepository.ts +13 -0
- package/src/ICRUDRepositoryFactory.ts +8 -0
- package/src/ICommand.ts +45 -0
- package/src/ICommandMiddleware.ts +20 -0
- package/src/IConnection.ts +13 -0
- package/src/IDatasource.ts +27 -0
- package/src/IDatasourceFactory.ts +6 -0
- package/src/IDriver.ts +24 -0
- package/src/IEnriched.ts +11 -0
- package/src/IReader.ts +8 -0
- package/src/IReadonlyEnrichmentStrategy.ts +19 -0
- package/src/IReadonlyRepository.ts +21 -0
- package/src/IRepository.ts +5 -0
- package/src/IRepositoryFactory.ts +8 -0
- package/src/IRepositoryTree.ts +5 -0
- package/src/IRepositoryTreeNode.ts +8 -0
- package/src/ITransaction.ts +9 -0
- package/src/IUnitOfWork.ts +5 -0
- package/src/IWriteEnrichmentStrategy.ts +8 -0
- package/src/Information.ts +5 -0
- package/src/IsolationLevel.test.ts +13 -0
- package/src/IsolationLevel.ts +8 -0
- package/src/LazyWriteEnrichmentStrategy.ts +5 -0
- package/src/NestedToObjectEnrichmentStrategy.ts +33 -0
- package/src/Parameter.ts +8 -0
- package/src/ParameterDirection.ts +9 -0
- package/src/ProviderCatalog.test.ts +110 -0
- package/src/ProviderCatalog.ts +21 -0
- package/src/ProviderNotImplementedError.test.ts +11 -0
- package/src/ProviderNotImplementedError.ts +9 -0
- package/src/ProviderNotInstalledError.test.ts +11 -0
- package/src/ProviderNotInstalledError.ts +9 -0
- package/src/ReadonlyRepository.test.ts +406 -0
- package/src/ReadonlyRepository.ts +276 -0
- package/src/ReadonlyRepositoryBuilder.ts +53 -0
- package/src/ReadonlyRepositoryMappingOptions.ts +15 -0
- package/src/ReadonlyRepositoryStatements.ts +13 -0
- package/src/RepositoryAccess.ts +14 -0
- package/src/RepositoryFactory.test.ts +94 -0
- package/src/RepositoryFactory.ts +115 -0
- package/src/RepositoryNotRegisteredError.ts +9 -0
- package/src/RepositoryTree.ts +6 -0
- package/src/RepositoryTreeNode.ts +11 -0
- package/src/Response.ts +15 -0
- package/src/Row.ts +3 -0
- package/src/SingleCommandIBulkWriteStrategy.ts +35 -0
- package/src/StatementMappers.test.ts +221 -0
- package/src/StatementMappers.ts +110 -0
- package/src/StoredEnrichment.ts +25 -0
- package/src/StoredProcedureBulkWriteStrategy.ts +164 -0
- package/src/StreamingReader.test.ts +126 -0
- package/src/StreamingReader.ts +64 -0
- package/src/Transaction.test.ts +37 -0
- package/src/UnitOfWorkTransaction.test.ts +43 -0
- package/src/UnitOfWorkTransaction.ts +50 -0
- package/src/UpdateEnrichmentStrategy.ts +97 -0
- package/src/UserViewCRUDRepository.test.ts +323 -0
- package/src/WriteMode.ts +1 -0
- package/src/builders/Field.ts +6 -0
- package/src/builders/Scalar.ts +1 -0
- package/src/builders/builders.test.ts +404 -0
- package/src/builders/index.ts +2 -0
- package/src/collectAsync.ts +7 -0
- package/src/converters/Cell.ts +10 -0
- package/src/converters/ChangeCasingConverter.test.ts +34 -0
- package/src/converters/ChangeCasingConverter.ts +59 -0
- package/src/converters/Constructable.ts +1 -0
- package/src/converters/MetaDataRowTypeConverter.ts +80 -0
- package/src/converters/PluralizerConverter.test.ts +43 -0
- package/src/converters/PluralizerConverter.ts +67 -0
- package/src/converters/RegexConverter.test.ts +11 -0
- package/src/converters/RegexConverter.ts +14 -0
- package/src/converters/ReplaceConverter.test.ts +9 -0
- package/src/converters/ReplaceConverter.ts +6 -0
- package/src/converters/RowTypeConverter.test.ts +79 -0
- package/src/converters/RowTypeConverter.ts +33 -0
- package/src/converters/ToLowerCaseConverter.test.ts +9 -0
- package/src/converters/ToLowerCaseConverter.ts +4 -0
- package/src/converters/ToUpperCaseConverter.test.ts +9 -0
- package/src/converters/ToUpperCaseConverter.ts +4 -0
- package/src/converters/TypeConverter.ts +6 -0
- package/src/createCRUDRepositoryOptions.ts +21 -0
- package/src/createReadonlyRepositoryMappingOptions.ts +26 -0
- package/src/dotEnv.test.ts +21 -0
- package/src/dotEnv.ts +16 -0
- package/src/edgeCases.test.ts +485 -0
- package/src/index.ts +222 -0
- package/src/mappers/ChangeCasingMapper.test.ts +32 -0
- package/src/mappers/ChangeCasingMapper.ts +15 -0
- package/src/mappers/DictionaryMapper.test.ts +69 -0
- package/src/mappers/DictionaryMapper.ts +16 -0
- package/src/mappers/FlatToNestedMapper.test.ts +269 -0
- package/src/mappers/FlatToNestedMapper.ts +127 -0
- package/src/mappers/IFlatToNestedMapper.ts +7 -0
- package/src/mappers/IMapper.ts +4 -0
- package/src/mappers/IdentityMapper.test.ts +12 -0
- package/src/mappers/IdentityMapper.ts +6 -0
- package/src/mappers/PluralizerMapper.test.ts +40 -0
- package/src/mappers/PluralizerMapper.ts +9 -0
- package/src/mappers/RowTypeMapper.test.ts +12 -0
- package/src/mappers/RowTypeMapper.ts +13 -0
- package/src/mappers/TransformConverterMapper.test.ts +181 -0
- package/src/mappers/TransformConverterMapper.ts +11 -0
- package/src/mappers/TransformMapper.ts +8 -0
- package/src/mappers/TypeMap.ts +10 -0
- package/src/mappers/TypeMapGroup.ts +6 -0
- package/src/mappers/transformMapper.test.ts +66 -0
- package/src/mocks/MockCommand.test.ts +75 -0
- package/src/mocks/MockConnection.test.ts +34 -0
- package/src/mocks/MockDatasource.test.ts +40 -0
- package/src/mocks/MockReader.test.ts +17 -0
- package/src/mocks/MockRepository.test.ts +32 -0
- package/src/mocks/MockSelectStatement.test.ts +11 -0
- package/src/mocks/MockTransaction.test.ts +17 -0
- package/src/mocks/MockWhere.test.ts +11 -0
- package/src/mocks/index.ts +9 -0
- package/src/mocks/mock-command.ts +66 -0
- package/src/mocks/mock-connection.ts +57 -0
- package/src/mocks/mock-datasource.ts +65 -0
- package/src/mocks/mock-driver.ts +27 -0
- package/src/mocks/mock-reader.ts +38 -0
- package/src/mocks/mock-repository.ts +91 -0
- package/src/mocks/mock-select-statement.ts +17 -0
- package/src/mocks/mock-transaction.ts +31 -0
- package/src/mocks/mock-where.ts +13 -0
- package/src/parametersToRecord.test.ts +19 -0
- package/src/parametersToRecord.ts +11 -0
- package/src/public-surface.test.ts +23 -0
- package/src/readWithWhereClauseAndCustomFlatToNestedObjectMappingOptions.test.ts +126 -0
- package/src/readerToAsyncIterable.test.ts +39 -0
- package/src/readerToAsyncIterable.ts +11 -0
- package/src/repository.test.ts +410 -0
- package/src/repository.type.test.ts +29 -0
- package/src/splitStatements.ts +99 -0
- package/src/statementParameters.ts +22 -0
- package/src/statementUsesParameter.ts +4 -0
- package/src/statements/Aggregate.ts +9 -0
- package/src/statements/ArrayExpression.ts +5 -0
- package/src/statements/BulkDeleteStatement.ts +18 -0
- package/src/statements/BulkDeleteStatementTextRenderer.ts +16 -0
- package/src/statements/BulkInsertStatement.ts +37 -0
- package/src/statements/BulkInsertStatementTextRenderer.ts +10 -0
- package/src/statements/BulkUpdateStatement.ts +24 -0
- package/src/statements/BulkUpdateStatementTextRenderer.ts +29 -0
- package/src/statements/CheckConstraint.ts +9 -0
- package/src/statements/Cmp.ts +12 -0
- package/src/statements/Column.ts +10 -0
- package/src/statements/ColumnDefault.ts +6 -0
- package/src/statements/Condition.ts +3 -0
- package/src/statements/ConditionRenderer.ts +17 -0
- package/src/statements/CreateIndexStatement.ts +18 -0
- package/src/statements/CreateIndexStatementTextRenderer.ts +11 -0
- package/src/statements/CreateTableStatement.ts +18 -0
- package/src/statements/CreateTableStatementTextRenderer.ts +92 -0
- package/src/statements/DefaultStatementTextRenderer.ts +9 -0
- package/src/statements/DeleteStatement.ts +15 -0
- package/src/statements/DeleteStatementTextRenderer.ts +12 -0
- package/src/statements/ExecuteStoredProcedureStatement.ts +15 -0
- package/src/statements/ExecuteStoredProcedureStatementTextRenderer.ts +15 -0
- package/src/statements/ExpressionEvaluator.ts +166 -0
- package/src/statements/ExpressionRenderer.ts +161 -0
- package/src/statements/ForeignKey.ts +23 -0
- package/src/statements/IBulkDeleteStatement.ts +3 -0
- package/src/statements/IBulkInsertStatement.ts +3 -0
- package/src/statements/IBulkUpdateStatement.ts +3 -0
- package/src/statements/ICondition.ts +5 -0
- package/src/statements/IConditionVisitor.ts +7 -0
- package/src/statements/ICreateIndexStatement.ts +3 -0
- package/src/statements/ICreateTableStatement.ts +3 -0
- package/src/statements/IDeleteStatement.ts +6 -0
- package/src/statements/IExecuteStoredProcedureStatement.ts +3 -0
- package/src/statements/IExpression.ts +1 -0
- package/src/statements/IInsertStatement.ts +3 -0
- package/src/statements/IReturnStatement.ts +3 -0
- package/src/statements/ISelectStatement.ts +6 -0
- package/src/statements/IStatement.ts +5 -0
- package/src/statements/IStatementVisitor.ts +27 -0
- package/src/statements/ITableConstraint.ts +6 -0
- package/src/statements/IUpdateStatement.ts +6 -0
- package/src/statements/IWhere.ts +7 -0
- package/src/statements/Identifier.ts +5 -0
- package/src/statements/InsertStatement.ts +15 -0
- package/src/statements/InsertStatementTextRenderer.ts +7 -0
- package/src/statements/Join.ts +26 -0
- package/src/statements/Literal.ts +6 -0
- package/src/statements/Native.ts +5 -0
- package/src/statements/NotNull.ts +3 -0
- package/src/statements/Operator.ts +234 -0
- package/src/statements/OrderBy.ts +19 -0
- package/src/statements/PrimaryKey.ts +9 -0
- package/src/statements/ReturnStatement.ts +15 -0
- package/src/statements/ReturnStatementTextRenderer.ts +15 -0
- package/src/statements/SelectInsertedIdStatement.test.ts +11 -0
- package/src/statements/SelectInsertedIdStatement.ts +11 -0
- package/src/statements/SelectInsertedIdStatementTextRenderer.ts +7 -0
- package/src/statements/SelectStatement.ts +34 -0
- package/src/statements/SelectStatementOptions.ts +16 -0
- package/src/statements/SelectStatementTextRenderer.ts +71 -0
- package/src/statements/StatementCompile.test.ts +231 -0
- package/src/statements/StatementEvaluator.ts +5 -0
- package/src/statements/StatementParser.test.ts +304 -0
- package/src/statements/StatementParser.ts +461 -0
- package/src/statements/StatementRenderer.ts +120 -0
- package/src/statements/StatementTextRenderer.ts +60 -0
- package/src/statements/Subquery.ts +6 -0
- package/src/statements/UniqueConstraint.ts +9 -0
- package/src/statements/UpdateStatement.ts +34 -0
- package/src/statements/UpdateStatementTextRenderer.ts +63 -0
- package/src/statements/Where.ts +250 -0
- package/src/statements/WhereText.ts +10 -0
- package/src/statements/index.ts +75 -0
- package/src/stubs/StubCommand.ts +30 -0
- package/src/stubs/StubConnection.ts +21 -0
- package/src/stubs/StubDatasource.test.ts +99 -0
- package/src/stubs/StubDatasource.ts +60 -0
- package/src/stubs/StubReader.ts +25 -0
- package/src/stubs/StubRepository.ts +42 -0
- package/src/stubs/StubTransaction.ts +17 -0
- package/src/stubs/createStubDatasource.ts +4 -0
- package/src/stubs/index.ts +7 -0
- package/src/stubs/notImplemented.ts +5 -0
- package/src/tests/contact/Address.ts +14 -0
- package/src/tests/contact/AddressType.ts +6 -0
- package/src/tests/contact/Base.ts +7 -0
- package/src/tests/contact/Contact.ts +12 -0
- package/src/tests/contact/ContactBase.ts +8 -0
- package/src/tests/contact/ContactChangeLog.ts +8 -0
- package/src/tests/contact/ContactGroup.ts +6 -0
- package/src/tests/contact/ContactGroupBase.ts +6 -0
- package/src/tests/contact/ContactGroupMember.ts +6 -0
- package/src/tests/contact/ContactSource.ts +6 -0
- package/src/tests/contact/ContactType.ts +6 -0
- package/src/tests/contact/ContactsService.test.ts +118 -0
- package/src/tests/contact/ContactsService.ts +32 -0
- package/src/tests/contact/ImportContactRequest.ts +4 -0
- package/src/tests/contact/ImportContactResult.ts +5 -0
- package/src/tests/contact/LegacyContact.ts +7 -0
- package/src/tests/contact/LegacyMigrationResult.ts +5 -0
- package/src/tests/contact/Phone.ts +9 -0
- package/src/tests/contact/PhoneType.ts +6 -0
- package/src/tests/contact/asContactsView.ts +63 -0
- package/src/tests/contact/contactColumns.ts +40 -0
- package/src/tests/contact/contactLookupIds.ts +32 -0
- package/src/tests/contact/contactLookups.ts +6 -0
- package/src/tests/contact/contactsParity.ts +63 -0
- package/src/tests/contact/contactsServiceOf.ts +38 -0
- package/src/tests/contact/contactsView.ts +31 -0
- package/src/tests/contact/expectContactsView.ts +23 -0
- package/src/tests/contact/extraContact.ts +61 -0
- package/src/tests/contact/logMapped.ts +5 -0
- package/src/tests/contact/seedContacts.ts +31 -0
- package/README.md +0 -3
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import type { Scalar } from "../builders/Scalar.ts";
|
|
2
|
+
import { ArrayExpression } from "./ArrayExpression.ts";
|
|
3
|
+
import { Identifier } from "./Identifier.ts";
|
|
4
|
+
import type { IExpression } from "./IExpression.ts";
|
|
5
|
+
import { Literal } from "./Literal.ts";
|
|
6
|
+
import { Operator } from "./Operator.ts";
|
|
7
|
+
import { Subquery } from "./Subquery.ts";
|
|
8
|
+
import { WhereText } from "./WhereText.ts";
|
|
9
|
+
import { Where } from "./Where.ts";
|
|
10
|
+
|
|
11
|
+
const isTrue = (value: Scalar): boolean => value === true;
|
|
12
|
+
|
|
13
|
+
const like = (text: Scalar, pattern: Scalar): boolean =>
|
|
14
|
+
text === null || pattern === null
|
|
15
|
+
? false
|
|
16
|
+
: typeof text === "string" && typeof pattern === "string"
|
|
17
|
+
? wild(text, pattern)
|
|
18
|
+
: (() => {
|
|
19
|
+
throw new Error("empty like");
|
|
20
|
+
})();
|
|
21
|
+
|
|
22
|
+
const wild = (text: string, pattern: string): boolean => {
|
|
23
|
+
let t = 0;
|
|
24
|
+
let p = 0;
|
|
25
|
+
let starT = -1;
|
|
26
|
+
let starP = -1;
|
|
27
|
+
while (t < text.length) {
|
|
28
|
+
if (p < pattern.length && (pattern[p] === "_" || pattern[p] === text[t])) {
|
|
29
|
+
t++;
|
|
30
|
+
p++;
|
|
31
|
+
} else if (p < pattern.length && pattern[p] === "%") {
|
|
32
|
+
starP = p++;
|
|
33
|
+
starT = t;
|
|
34
|
+
} else if (starP >= 0) {
|
|
35
|
+
p = starP + 1;
|
|
36
|
+
t = ++starT;
|
|
37
|
+
} else return false;
|
|
38
|
+
}
|
|
39
|
+
while (p < pattern.length && pattern[p] === "%") p++;
|
|
40
|
+
return p === pattern.length;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const between = (value: Scalar, low: Scalar, high: Scalar): boolean =>
|
|
44
|
+
value === null || low === null || high === null ? false : compare(value, low) >= 0 && compare(value, high) <= 0;
|
|
45
|
+
|
|
46
|
+
const equal = (left: Scalar, right: Scalar): boolean => left === right;
|
|
47
|
+
|
|
48
|
+
const compare = (left: Scalar, right: Scalar): number =>
|
|
49
|
+
typeof left === "number" && typeof right === "number"
|
|
50
|
+
? left - right
|
|
51
|
+
: typeof left === "bigint" && typeof right === "bigint"
|
|
52
|
+
? Number(left - right)
|
|
53
|
+
: typeof left === "string" && typeof right === "string"
|
|
54
|
+
? left < right
|
|
55
|
+
? -1
|
|
56
|
+
: left > right
|
|
57
|
+
? 1
|
|
58
|
+
: 0
|
|
59
|
+
: (() => {
|
|
60
|
+
throw new Error("empty compare");
|
|
61
|
+
})();
|
|
62
|
+
|
|
63
|
+
export class ExpressionEvaluator {
|
|
64
|
+
evaluate = (expression: IExpression, parameters?: Record<string, Scalar>): Scalar =>
|
|
65
|
+
expression instanceof Where
|
|
66
|
+
? this.evaluate(expression.condition, parameters)
|
|
67
|
+
: expression instanceof WhereText
|
|
68
|
+
? (() => {
|
|
69
|
+
throw new Error("text where is not evaluable");
|
|
70
|
+
})()
|
|
71
|
+
: expression instanceof Identifier
|
|
72
|
+
? (parameters?.[expression.name] ?? null)
|
|
73
|
+
: expression instanceof Literal
|
|
74
|
+
? expression.value
|
|
75
|
+
: expression instanceof Operator.Not
|
|
76
|
+
? !isTrue(this.evaluate(expression.argument, parameters))
|
|
77
|
+
: expression instanceof Operator.IsNull
|
|
78
|
+
? this.evaluate(expression.argument, parameters) === null
|
|
79
|
+
: expression instanceof Operator.IsNotNull
|
|
80
|
+
? this.evaluate(expression.argument, parameters) !== null
|
|
81
|
+
: expression instanceof Operator.Like
|
|
82
|
+
? like(this.evaluate(expression.left, parameters), this.evaluate(expression.right, parameters))
|
|
83
|
+
: expression instanceof Operator.NotLike
|
|
84
|
+
? !like(this.evaluate(expression.left, parameters), this.evaluate(expression.right, parameters))
|
|
85
|
+
: expression instanceof Operator.Between
|
|
86
|
+
? between(
|
|
87
|
+
this.evaluate(expression.value, parameters),
|
|
88
|
+
this.evaluate(expression.low, parameters),
|
|
89
|
+
this.evaluate(expression.high, parameters),
|
|
90
|
+
)
|
|
91
|
+
: expression instanceof Operator.NotBetween
|
|
92
|
+
? !between(
|
|
93
|
+
this.evaluate(expression.value, parameters),
|
|
94
|
+
this.evaluate(expression.low, parameters),
|
|
95
|
+
this.evaluate(expression.high, parameters),
|
|
96
|
+
)
|
|
97
|
+
: expression instanceof Operator.NotIn
|
|
98
|
+
? expression.right instanceof ArrayExpression
|
|
99
|
+
? !expression.right.elements.some((element) =>
|
|
100
|
+
equal(
|
|
101
|
+
this.evaluate(expression.left, parameters),
|
|
102
|
+
this.evaluate(element, parameters),
|
|
103
|
+
),
|
|
104
|
+
)
|
|
105
|
+
: (() => {
|
|
106
|
+
throw new Error("empty in");
|
|
107
|
+
})()
|
|
108
|
+
: expression instanceof Operator.Exists || expression instanceof Subquery
|
|
109
|
+
? (() => {
|
|
110
|
+
throw new Error("subquery is not evaluable");
|
|
111
|
+
})()
|
|
112
|
+
: expression instanceof Operator.And
|
|
113
|
+
? isTrue(this.evaluate(expression.left, parameters)) &&
|
|
114
|
+
isTrue(this.evaluate(expression.right, parameters))
|
|
115
|
+
: expression instanceof Operator.Or
|
|
116
|
+
? isTrue(this.evaluate(expression.left, parameters)) ||
|
|
117
|
+
isTrue(this.evaluate(expression.right, parameters))
|
|
118
|
+
: expression instanceof Operator.In
|
|
119
|
+
? expression.right instanceof ArrayExpression
|
|
120
|
+
? expression.right.elements.some((element) =>
|
|
121
|
+
equal(
|
|
122
|
+
this.evaluate(expression.left, parameters),
|
|
123
|
+
this.evaluate(element, parameters),
|
|
124
|
+
),
|
|
125
|
+
)
|
|
126
|
+
: (() => {
|
|
127
|
+
throw new Error("empty in");
|
|
128
|
+
})()
|
|
129
|
+
: expression instanceof Operator.Equals
|
|
130
|
+
? equal(
|
|
131
|
+
this.evaluate(expression.left, parameters),
|
|
132
|
+
this.evaluate(expression.right, parameters),
|
|
133
|
+
)
|
|
134
|
+
: expression instanceof Operator.NotEquals
|
|
135
|
+
? !equal(
|
|
136
|
+
this.evaluate(expression.left, parameters),
|
|
137
|
+
this.evaluate(expression.right, parameters),
|
|
138
|
+
)
|
|
139
|
+
: expression instanceof Operator.GreaterThan
|
|
140
|
+
? compare(
|
|
141
|
+
this.evaluate(expression.left, parameters),
|
|
142
|
+
this.evaluate(expression.right, parameters),
|
|
143
|
+
) > 0
|
|
144
|
+
: expression instanceof Operator.LessThan
|
|
145
|
+
? compare(
|
|
146
|
+
this.evaluate(expression.left, parameters),
|
|
147
|
+
this.evaluate(expression.right, parameters),
|
|
148
|
+
) < 0
|
|
149
|
+
: expression instanceof Operator.GreaterThanOrEqual
|
|
150
|
+
? compare(
|
|
151
|
+
this.evaluate(expression.left, parameters),
|
|
152
|
+
this.evaluate(expression.right, parameters),
|
|
153
|
+
) >= 0
|
|
154
|
+
: expression instanceof Operator.LessThanOrEqual
|
|
155
|
+
? compare(
|
|
156
|
+
this.evaluate(expression.left, parameters),
|
|
157
|
+
this.evaluate(expression.right, parameters),
|
|
158
|
+
) <= 0
|
|
159
|
+
: expression instanceof ArrayExpression
|
|
160
|
+
? (() => {
|
|
161
|
+
throw new Error("array is not a scalar");
|
|
162
|
+
})()
|
|
163
|
+
: (() => {
|
|
164
|
+
throw new Error("empty expression");
|
|
165
|
+
})();
|
|
166
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import type { Cell } from "../converters/Cell.ts";
|
|
2
|
+
import { ArrayExpression } from "./ArrayExpression.ts";
|
|
3
|
+
import type { IExpression } from "./IExpression.ts";
|
|
4
|
+
import { Identifier } from "./Identifier.ts";
|
|
5
|
+
import { Literal } from "./Literal.ts";
|
|
6
|
+
import { Operator } from "./Operator.ts";
|
|
7
|
+
import type { StatementTextRenderer } from "./StatementTextRenderer.ts";
|
|
8
|
+
import { Subquery } from "./Subquery.ts";
|
|
9
|
+
import { Where } from "./Where.ts";
|
|
10
|
+
|
|
11
|
+
export class ExpressionRenderer {
|
|
12
|
+
constructor(private readonly text: StatementTextRenderer) {}
|
|
13
|
+
|
|
14
|
+
render = (expression: IExpression): string => {
|
|
15
|
+
if (expression instanceof Where) return this.render(expression.condition);
|
|
16
|
+
if (expression instanceof Identifier) return expression.name;
|
|
17
|
+
if (expression instanceof Literal) return inline(expression.value);
|
|
18
|
+
if (expression instanceof ArrayExpression) return expression.elements.map((e) => this.render(e)).join(", ");
|
|
19
|
+
if (expression instanceof Operator.Not) return `NOT (${this.render(expression.argument)})`;
|
|
20
|
+
if (expression instanceof Operator.IsNull) return `${this.render(expression.argument)} IS NULL`;
|
|
21
|
+
if (expression instanceof Operator.IsNotNull) return `${this.render(expression.argument)} IS NOT NULL`;
|
|
22
|
+
if (expression instanceof Operator.Exists) return `EXISTS ${this.render(expression.argument)}`;
|
|
23
|
+
if (expression instanceof Subquery) return `(${this.text.render(expression.query)})`;
|
|
24
|
+
if (
|
|
25
|
+
expression instanceof Operator.In &&
|
|
26
|
+
expression.left instanceof Identifier &&
|
|
27
|
+
expression.right instanceof ArrayExpression
|
|
28
|
+
)
|
|
29
|
+
return expression.right.elements.length === 0
|
|
30
|
+
? "1 = 0"
|
|
31
|
+
: `${expression.left.name} IN (${slots(expression.left.name, expression.right.elements.length)})`;
|
|
32
|
+
if (
|
|
33
|
+
expression instanceof Operator.In &&
|
|
34
|
+
expression.left instanceof Identifier &&
|
|
35
|
+
expression.right instanceof Subquery
|
|
36
|
+
)
|
|
37
|
+
return `${expression.left.name} IN ${this.render(expression.right)}`;
|
|
38
|
+
if (
|
|
39
|
+
expression instanceof Operator.NotIn &&
|
|
40
|
+
expression.left instanceof Identifier &&
|
|
41
|
+
expression.right instanceof ArrayExpression
|
|
42
|
+
)
|
|
43
|
+
return expression.right.elements.length === 0
|
|
44
|
+
? "1 = 1"
|
|
45
|
+
: `${expression.left.name} NOT IN (${slots(expression.left.name, expression.right.elements.length)})`;
|
|
46
|
+
if (
|
|
47
|
+
expression instanceof Operator.NotIn &&
|
|
48
|
+
expression.left instanceof Identifier &&
|
|
49
|
+
expression.right instanceof Subquery
|
|
50
|
+
)
|
|
51
|
+
return `${expression.left.name} NOT IN ${this.render(expression.right)}`;
|
|
52
|
+
if (
|
|
53
|
+
(expression instanceof Operator.Between || expression instanceof Operator.NotBetween) &&
|
|
54
|
+
expression.value instanceof Identifier &&
|
|
55
|
+
expression.low instanceof Literal &&
|
|
56
|
+
expression.high instanceof Literal
|
|
57
|
+
) {
|
|
58
|
+
const word = expression instanceof Operator.NotBetween ? "NOT BETWEEN" : "BETWEEN";
|
|
59
|
+
return `${expression.value.name} ${word} $${parameterName(expression.value.name)}_0 AND $${parameterName(expression.value.name)}_1`;
|
|
60
|
+
}
|
|
61
|
+
if (expression instanceof Operator.Between)
|
|
62
|
+
return `${this.render(expression.value)} BETWEEN ${this.render(expression.low)} AND ${this.render(expression.high)}`;
|
|
63
|
+
if (expression instanceof Operator.NotBetween)
|
|
64
|
+
return `${this.render(expression.value)} NOT BETWEEN ${this.render(expression.low)} AND ${this.render(expression.high)}`;
|
|
65
|
+
if (expression instanceof Operator.And)
|
|
66
|
+
return `${this.wrap(expression.left, true)} AND ${this.wrap(expression.right, true)}`;
|
|
67
|
+
if (expression instanceof Operator.Or)
|
|
68
|
+
return `${this.wrap(expression.left, false)} OR ${this.wrap(expression.right, false)}`;
|
|
69
|
+
const operands = expression instanceof Operator ? pair(expression) : undefined;
|
|
70
|
+
if (operands && operands.left instanceof Identifier && operands.right instanceof Literal)
|
|
71
|
+
return `${operands.left.name} ${symbol(expression as Operator)} $${parameterName(operands.left.name)}`;
|
|
72
|
+
if (operands && operands.left instanceof Literal && operands.right instanceof Literal)
|
|
73
|
+
return `${inline(operands.left.value)} ${symbol(expression as Operator)} ${inline(operands.right.value)}`;
|
|
74
|
+
if (operands)
|
|
75
|
+
return `${this.render(operands.left)} ${symbol(expression as Operator)} ${this.render(operands.right)}`;
|
|
76
|
+
throw new Error("empty expression");
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
private wrap = (child: IExpression, and: boolean): string =>
|
|
80
|
+
needsParens(child, and) ? `(${this.render(child)})` : this.render(child);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const symbol = (op: Operator): string =>
|
|
84
|
+
op instanceof Operator.Equals
|
|
85
|
+
? "="
|
|
86
|
+
: op instanceof Operator.NotEquals
|
|
87
|
+
? "<>"
|
|
88
|
+
: op instanceof Operator.GreaterThan
|
|
89
|
+
? ">"
|
|
90
|
+
: op instanceof Operator.LessThan
|
|
91
|
+
? "<"
|
|
92
|
+
: op instanceof Operator.GreaterThanOrEqual
|
|
93
|
+
? ">="
|
|
94
|
+
: op instanceof Operator.LessThanOrEqual
|
|
95
|
+
? "<="
|
|
96
|
+
: op instanceof Operator.Like
|
|
97
|
+
? "LIKE"
|
|
98
|
+
: op instanceof Operator.NotLike
|
|
99
|
+
? "NOT LIKE"
|
|
100
|
+
: "IN";
|
|
101
|
+
|
|
102
|
+
const inline = (value: Cell): string =>
|
|
103
|
+
value === null
|
|
104
|
+
? "null"
|
|
105
|
+
: typeof value === "boolean"
|
|
106
|
+
? String(value)
|
|
107
|
+
: typeof value === "string"
|
|
108
|
+
? `'${value.replace(/'/g, "''")}'`
|
|
109
|
+
: String(value);
|
|
110
|
+
|
|
111
|
+
const needsParens = (child: IExpression, and: boolean): boolean =>
|
|
112
|
+
child instanceof Where
|
|
113
|
+
? needsParens(child.condition, and)
|
|
114
|
+
: child instanceof Operator.Not ||
|
|
115
|
+
child instanceof Operator.In ||
|
|
116
|
+
child instanceof Operator.NotIn ||
|
|
117
|
+
(child instanceof Operator.And && !and) ||
|
|
118
|
+
(child instanceof Operator.Or && and);
|
|
119
|
+
|
|
120
|
+
const pair = (
|
|
121
|
+
expression: Operator,
|
|
122
|
+
): { left: IExpression; right: IExpression } | undefined =>
|
|
123
|
+
expression instanceof Operator.Equals ||
|
|
124
|
+
expression instanceof Operator.NotEquals ||
|
|
125
|
+
expression instanceof Operator.GreaterThan ||
|
|
126
|
+
expression instanceof Operator.LessThan ||
|
|
127
|
+
expression instanceof Operator.GreaterThanOrEqual ||
|
|
128
|
+
expression instanceof Operator.LessThanOrEqual ||
|
|
129
|
+
expression instanceof Operator.And ||
|
|
130
|
+
expression instanceof Operator.Or ||
|
|
131
|
+
expression instanceof Operator.In ||
|
|
132
|
+
expression instanceof Operator.Like ||
|
|
133
|
+
expression instanceof Operator.NotLike
|
|
134
|
+
? expression
|
|
135
|
+
: undefined;
|
|
136
|
+
|
|
137
|
+
const parameterName = (name: string): string =>
|
|
138
|
+
parts(name)
|
|
139
|
+
.map((part) =>
|
|
140
|
+
part.length >= 2 && part.startsWith('"') && part.endsWith('"')
|
|
141
|
+
? part.slice(1, -1).replace(/""/g, '"')
|
|
142
|
+
: part,
|
|
143
|
+
)
|
|
144
|
+
.join(".");
|
|
145
|
+
|
|
146
|
+
const parts = (name: string): string[] => {
|
|
147
|
+
const found: string[] = [];
|
|
148
|
+
let start = 0;
|
|
149
|
+
let quoted = false;
|
|
150
|
+
for (let i = 0; i < name.length; i++) {
|
|
151
|
+
if (name[i] === '"') quoted = !quoted;
|
|
152
|
+
if (name[i] !== "." || quoted) continue;
|
|
153
|
+
found.push(name.slice(start, i));
|
|
154
|
+
start = i + 1;
|
|
155
|
+
}
|
|
156
|
+
found.push(name.slice(start));
|
|
157
|
+
return found;
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
const slots = (name: string, count: number): string =>
|
|
161
|
+
Array.from({ length: count }, (_, i) => `$${parameterName(name)}_${i}`).join(", ");
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ITableConstraint } from "./ITableConstraint.ts";
|
|
2
|
+
|
|
3
|
+
export const ReferentialAction = {
|
|
4
|
+
Cascade: "cascade",
|
|
5
|
+
SetNull: "setNull",
|
|
6
|
+
SetDefault: "setDefault",
|
|
7
|
+
Restrict: "restrict",
|
|
8
|
+
NoAction: "noAction",
|
|
9
|
+
} as const;
|
|
10
|
+
|
|
11
|
+
export type ReferentialAction = (typeof ReferentialAction)[keyof typeof ReferentialAction];
|
|
12
|
+
|
|
13
|
+
export class ForeignKey implements ITableConstraint {
|
|
14
|
+
readonly kind = "foreignKey" as const;
|
|
15
|
+
constructor(
|
|
16
|
+
readonly name: string,
|
|
17
|
+
readonly columns: string[],
|
|
18
|
+
readonly referencesTable: string,
|
|
19
|
+
readonly referencesColumns: string[],
|
|
20
|
+
readonly onDelete?: ReferentialAction,
|
|
21
|
+
readonly onUpdate?: ReferentialAction,
|
|
22
|
+
) {}
|
|
23
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export interface IExpression {}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { BulkDeleteStatement } from "./BulkDeleteStatement.ts";
|
|
2
|
+
import type { BulkInsertStatement } from "./BulkInsertStatement.ts";
|
|
3
|
+
import type { BulkUpdateStatement } from "./BulkUpdateStatement.ts";
|
|
4
|
+
import type { CreateIndexStatement } from "./CreateIndexStatement.ts";
|
|
5
|
+
import type { CreateTableStatement } from "./CreateTableStatement.ts";
|
|
6
|
+
import type { DeleteStatement } from "./DeleteStatement.ts";
|
|
7
|
+
import type { ExecuteStoredProcedureStatement } from "./ExecuteStoredProcedureStatement.ts";
|
|
8
|
+
import type { InsertStatement } from "./InsertStatement.ts";
|
|
9
|
+
import type { ReturnStatement } from "./ReturnStatement.ts";
|
|
10
|
+
import type { SelectInsertedIdStatement } from "./SelectInsertedIdStatement.ts";
|
|
11
|
+
import type { SelectStatement } from "./SelectStatement.ts";
|
|
12
|
+
import type { UpdateStatement } from "./UpdateStatement.ts";
|
|
13
|
+
|
|
14
|
+
export interface IStatementVisitor {
|
|
15
|
+
visit(statement: SelectStatement): string;
|
|
16
|
+
visit(statement: InsertStatement): string;
|
|
17
|
+
visit(statement: UpdateStatement): string;
|
|
18
|
+
visit(statement: DeleteStatement): string;
|
|
19
|
+
visit(statement: CreateTableStatement): string;
|
|
20
|
+
visit(statement: CreateIndexStatement): string;
|
|
21
|
+
visit(statement: ExecuteStoredProcedureStatement): string;
|
|
22
|
+
visit(statement: ReturnStatement): string;
|
|
23
|
+
visit(statement: SelectInsertedIdStatement): string;
|
|
24
|
+
visit(statement: BulkInsertStatement): string;
|
|
25
|
+
visit(statement: BulkUpdateStatement): string;
|
|
26
|
+
visit(statement: BulkDeleteStatement): string;
|
|
27
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Field } from "../builders/Field.ts";
|
|
2
|
+
import type { IInsertStatement } from "./IInsertStatement.ts";
|
|
3
|
+
import type { IStatementVisitor } from "./IStatementVisitor.ts";
|
|
4
|
+
|
|
5
|
+
export class InsertStatement implements IInsertStatement {
|
|
6
|
+
readonly table: string;
|
|
7
|
+
readonly fields: Field[];
|
|
8
|
+
|
|
9
|
+
constructor(table: string, fields: Field[]) {
|
|
10
|
+
this.table = table;
|
|
11
|
+
this.fields = fields;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
accept = (visitor: IStatementVisitor): string => visitor.visit(this);
|
|
15
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { InsertStatement } from "./InsertStatement.ts";
|
|
2
|
+
|
|
3
|
+
export class InsertStatementTextRenderer {
|
|
4
|
+
render(statement: InsertStatement): string {
|
|
5
|
+
return `INSERT INTO ${statement.table} (${statement.fields.map((field) => field.name).join(", ")}) VALUES (${statement.fields.map((field) => `$${field.name}`).join(", ")})`;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Identifier } from "./Identifier.ts";
|
|
2
|
+
import type { IExpression } from "./IExpression.ts";
|
|
3
|
+
import { Operator } from "./Operator.ts";
|
|
4
|
+
|
|
5
|
+
export type JoinKind = "inner" | "left" | "right" | "full" | "cross";
|
|
6
|
+
|
|
7
|
+
export type Join = {
|
|
8
|
+
kind: JoinKind;
|
|
9
|
+
table: string;
|
|
10
|
+
on?: IExpression;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const equality = (left: string, right: string): IExpression =>
|
|
14
|
+
new Operator.Equals(new Identifier(left), new Identifier(right));
|
|
15
|
+
|
|
16
|
+
export const Join = {
|
|
17
|
+
inner: (table: string, left: string, right: string): Join =>
|
|
18
|
+
({ kind: "inner", table, on: equality(left, right) }),
|
|
19
|
+
left: (table: string, left: string, right: string): Join =>
|
|
20
|
+
({ kind: "left", table, on: equality(left, right) }),
|
|
21
|
+
right: (table: string, left: string, right: string): Join =>
|
|
22
|
+
({ kind: "right", table, on: equality(left, right) }),
|
|
23
|
+
full: (table: string, left: string, right: string): Join =>
|
|
24
|
+
({ kind: "full", table, on: equality(left, right) }),
|
|
25
|
+
cross: (table: string): Join => ({ kind: "cross", table }),
|
|
26
|
+
};
|