uql-orm 0.20.2 → 0.22.0
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/README.md +47 -110
- package/dist/browser/http/bus.d.ts +0 -1
- package/dist/browser/http/bus.js +0 -1
- package/dist/browser/http/http.d.ts +0 -1
- package/dist/browser/http/http.js +0 -1
- package/dist/browser/http/index.d.ts +0 -1
- package/dist/browser/http/index.js +0 -1
- package/dist/browser/index.d.ts +0 -1
- package/dist/browser/index.js +0 -1
- package/dist/browser/options.d.ts +0 -1
- package/dist/browser/options.js +0 -1
- package/dist/browser/querier/httpQuerier.d.ts +0 -1
- package/dist/browser/querier/httpQuerier.js +0 -1
- package/dist/browser/querier/index.d.ts +0 -1
- package/dist/browser/querier/index.js +0 -1
- package/dist/browser/type/clientQuerier.d.ts +0 -1
- package/dist/browser/type/clientQuerier.js +0 -1
- package/dist/browser/type/clientQuerierPool.d.ts +0 -1
- package/dist/browser/type/clientQuerierPool.js +0 -1
- package/dist/browser/type/index.d.ts +0 -1
- package/dist/browser/type/index.js +0 -1
- package/dist/browser/type/request.d.ts +0 -1
- package/dist/browser/type/request.js +0 -1
- package/dist/browser/uql-browser.min.js +2 -2
- package/dist/browser/uql-browser.min.js.map +1 -1
- package/dist/bunSql/bunSql.util.d.ts +0 -1
- package/dist/bunSql/bunSql.util.js +0 -1
- package/dist/bunSql/bunSqlCockroachDialect.d.ts +2 -3
- package/dist/bunSql/bunSqlCockroachDialect.js +4 -11
- package/dist/bunSql/bunSqlPostgresDialect.d.ts +2 -3
- package/dist/bunSql/bunSqlPostgresDialect.js +4 -11
- package/dist/bunSql/bunSqlQuerier.d.ts +0 -1
- package/dist/bunSql/bunSqlQuerier.js +0 -1
- package/dist/bunSql/bunSqlQuerierPool.d.ts +0 -1
- package/dist/bunSql/bunSqlQuerierPool.js +0 -1
- package/dist/bunSql/bunSqliteDialect.d.ts +0 -1
- package/dist/bunSql/bunSqliteDialect.js +0 -1
- package/dist/bunSql/index.d.ts +0 -1
- package/dist/bunSql/index.js +0 -1
- package/dist/cockroachdb/cockroachDialect.d.ts +20 -5
- package/dist/cockroachdb/cockroachDialect.js +33 -19
- package/dist/cockroachdb/crdbQuerier.d.ts +0 -1
- package/dist/cockroachdb/crdbQuerier.js +0 -1
- package/dist/cockroachdb/crdbQuerierPool.d.ts +0 -1
- package/dist/cockroachdb/crdbQuerierPool.js +0 -1
- package/dist/cockroachdb/index.d.ts +0 -1
- package/dist/cockroachdb/index.js +0 -1
- package/dist/context/context.browser.d.ts +0 -1
- package/dist/context/context.browser.js +0 -1
- package/dist/context/context.d.ts +0 -1
- package/dist/context/context.js +0 -1
- package/dist/context/securityError.d.ts +0 -1
- package/dist/context/securityError.js +0 -1
- package/dist/d1/d1Querier.d.ts +4 -4
- package/dist/d1/d1Querier.js +0 -4
- package/dist/d1/d1QuerierPool.d.ts +0 -1
- package/dist/d1/d1QuerierPool.js +0 -1
- package/dist/d1/d1SqliteDialect.d.ts +7 -1
- package/dist/d1/d1SqliteDialect.js +9 -1
- package/dist/d1/index.d.ts +0 -1
- package/dist/d1/index.js +0 -1
- package/dist/dialect/abstractDialect.d.ts +21 -5
- package/dist/dialect/abstractDialect.js +26 -5
- package/dist/dialect/abstractSqlDialect.d.ts +57 -17
- package/dist/dialect/abstractSqlDialect.js +182 -159
- package/dist/dialect/index.d.ts +1 -1
- package/dist/dialect/index.js +1 -1
- package/dist/dialect/indexSqlDialect.d.ts +57 -0
- package/dist/dialect/indexSqlDialect.js +101 -0
- package/dist/dialect/jsonArrayElemMatchUtils.d.ts +0 -1
- package/dist/dialect/jsonArrayElemMatchUtils.js +0 -1
- package/dist/dialect/jsonSql.d.ts +0 -1
- package/dist/dialect/jsonSql.js +1 -2
- package/dist/dialect/mysqlLikeSqlDialect.d.ts +16 -2
- package/dist/dialect/mysqlLikeSqlDialect.js +34 -5
- package/dist/dialect/pgLikeSqlDialect.d.ts +34 -16
- package/dist/dialect/pgLikeSqlDialect.js +94 -71
- package/dist/dialect/queryContext.d.ts +0 -1
- package/dist/dialect/queryContext.js +0 -1
- package/dist/dialect/vectorCast.d.ts +32 -0
- package/dist/dialect/vectorCast.js +41 -0
- package/dist/dialect/vectorSqlDialect.d.ts +11 -5
- package/dist/dialect/vectorSqlDialect.js +19 -9
- package/dist/entity/decorator/entity.d.ts +0 -1
- package/dist/entity/decorator/entity.js +0 -1
- package/dist/entity/decorator/field.d.ts +0 -1
- package/dist/entity/decorator/field.js +0 -1
- package/dist/entity/decorator/filter.d.ts +0 -1
- package/dist/entity/decorator/filter.js +0 -1
- package/dist/entity/decorator/hook.d.ts +0 -1
- package/dist/entity/decorator/hook.js +0 -1
- package/dist/entity/decorator/id.d.ts +0 -1
- package/dist/entity/decorator/id.js +0 -1
- package/dist/entity/decorator/index-decorator.d.ts +2 -10
- package/dist/entity/decorator/index-decorator.js +0 -1
- package/dist/entity/decorator/index.d.ts +0 -1
- package/dist/entity/decorator/index.js +0 -1
- package/dist/entity/decorator/relation.d.ts +0 -1
- package/dist/entity/decorator/relation.js +0 -1
- package/dist/entity/index.d.ts +0 -1
- package/dist/entity/index.js +0 -1
- package/dist/entity/metadata/definition.d.ts +5 -6
- package/dist/entity/metadata/definition.js +10 -6
- package/dist/express/index.d.ts +0 -1
- package/dist/express/index.js +0 -1
- package/dist/express/querierMiddleware.d.ts +0 -1
- package/dist/express/querierMiddleware.js +0 -1
- package/dist/http/contract.d.ts +0 -1
- package/dist/http/contract.js +0 -1
- package/dist/http/fetchHandler.d.ts +0 -1
- package/dist/http/fetchHandler.js +0 -1
- package/dist/http/handler.d.ts +0 -1
- package/dist/http/handler.js +0 -1
- package/dist/http/index.d.ts +0 -1
- package/dist/http/index.js +0 -1
- package/dist/http/query.d.ts +0 -1
- package/dist/http/query.js +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/libsql/index.d.ts +0 -1
- package/dist/libsql/index.js +0 -1
- package/dist/libsql/libsqlDialect.d.ts +12 -3
- package/dist/libsql/libsqlDialect.js +14 -3
- package/dist/libsql/libsqlQuerier.d.ts +9 -23
- package/dist/libsql/libsqlQuerier.js +9 -78
- package/dist/libsql/libsqlQuerierPool.d.ts +10 -9
- package/dist/libsql/libsqlQuerierPool.js +17 -16
- package/dist/maria/index.d.ts +0 -1
- package/dist/maria/index.js +0 -1
- package/dist/maria/mariaDialect.d.ts +26 -5
- package/dist/maria/mariaDialect.js +54 -16
- package/dist/maria/mariadbQuerier.d.ts +0 -1
- package/dist/maria/mariadbQuerier.js +0 -1
- package/dist/maria/mariadbQuerierPool.d.ts +0 -1
- package/dist/maria/mariadbQuerierPool.js +0 -1
- package/dist/migrate/acquireQuerierForMigrations.d.ts +0 -1
- package/dist/migrate/acquireQuerierForMigrations.js +0 -1
- package/dist/migrate/assertCliConfig.d.ts +0 -1
- package/dist/migrate/assertCliConfig.js +0 -1
- package/dist/migrate/bin.d.ts +0 -1
- package/dist/migrate/bin.js +0 -1
- package/dist/migrate/builder/columnBuilder.d.ts +0 -1
- package/dist/migrate/builder/columnBuilder.js +0 -1
- package/dist/migrate/builder/expressions.d.ts +0 -1
- package/dist/migrate/builder/expressions.js +0 -1
- package/dist/migrate/builder/index.d.ts +0 -1
- package/dist/migrate/builder/index.js +0 -1
- package/dist/migrate/builder/migrationBuilder.d.ts +9 -30
- package/dist/migrate/builder/migrationBuilder.js +58 -77
- package/dist/migrate/builder/splitSqlStatements.d.ts +0 -3
- package/dist/migrate/builder/splitSqlStatements.js +0 -3
- package/dist/migrate/builder/tableBuilder.d.ts +12 -3
- package/dist/migrate/builder/tableBuilder.js +71 -120
- package/dist/migrate/builder/types.d.ts +30 -42
- package/dist/migrate/builder/types.js +0 -1
- package/dist/migrate/cli-config.d.ts +0 -1
- package/dist/migrate/cli-config.js +9 -5
- package/dist/migrate/cli.d.ts +3 -3
- package/dist/migrate/cli.js +21 -49
- package/dist/migrate/codegen/entityCodeGenerator.d.ts +0 -5
- package/dist/migrate/codegen/entityCodeGenerator.js +5 -64
- package/dist/migrate/codegen/fieldOptionsSource.d.ts +10 -0
- package/dist/migrate/codegen/fieldOptionsSource.js +55 -0
- package/dist/migrate/codegen/index.d.ts +0 -3
- package/dist/migrate/codegen/index.js +0 -5
- package/dist/migrate/codegen/migrationFile.d.ts +0 -1
- package/dist/migrate/codegen/migrationFile.js +0 -1
- package/dist/migrate/codegen/smartRelationDetector.d.ts +0 -1
- package/dist/migrate/codegen/smartRelationDetector.js +0 -1
- package/dist/migrate/drift/driftDetector.d.ts +0 -1
- package/dist/migrate/drift/driftDetector.js +0 -1
- package/dist/migrate/drift/index.d.ts +0 -1
- package/dist/migrate/drift/index.js +0 -1
- package/dist/migrate/generator/indexNodeToSchema.d.ts +9 -0
- package/dist/migrate/generator/indexNodeToSchema.js +14 -0
- package/dist/migrate/generator/mongoCommand.d.ts +57 -0
- package/dist/migrate/generator/mongoCommand.js +26 -0
- package/dist/migrate/generator/mongoSchemaGenerator.d.ts +9 -21
- package/dist/migrate/generator/mongoSchemaGenerator.js +40 -83
- package/dist/migrate/index.d.ts +0 -2
- package/dist/migrate/index.js +0 -2
- package/dist/migrate/introspection/abstractSqlSchemaIntrospector.d.ts +25 -11
- package/dist/migrate/introspection/abstractSqlSchemaIntrospector.js +46 -33
- package/dist/migrate/introspection/baseSqlIntrospector.d.ts +0 -2
- package/dist/migrate/introspection/baseSqlIntrospector.js +3 -13
- package/dist/migrate/introspection/index.d.ts +0 -1
- package/dist/migrate/introspection/index.js +0 -1
- package/dist/migrate/introspection/mongoIntrospector.d.ts +0 -1
- package/dist/migrate/introspection/mongoIntrospector.js +2 -3
- package/dist/migrate/introspection/mysqlIntrospector.d.ts +5 -9
- package/dist/migrate/introspection/mysqlIntrospector.js +4 -11
- package/dist/migrate/introspection/postgresIntrospector.d.ts +5 -9
- package/dist/migrate/introspection/postgresIntrospector.js +4 -11
- package/dist/migrate/introspection/sqliteIntrospector.d.ts +6 -6
- package/dist/migrate/introspection/sqliteIntrospector.js +26 -19
- package/dist/migrate/migrator.d.ts +23 -4
- package/dist/migrate/migrator.js +57 -70
- package/dist/migrate/schemaGenerator.d.ts +26 -38
- package/dist/migrate/schemaGenerator.js +69 -175
- package/dist/migrate/schemaGeneratorAsync.d.ts +2 -3
- package/dist/migrate/schemaGeneratorAsync.js +3 -4
- package/dist/migrate/storage/databaseStorage.d.ts +0 -1
- package/dist/migrate/storage/databaseStorage.js +4 -5
- package/dist/migrate/storage/index.d.ts +0 -1
- package/dist/migrate/storage/index.js +0 -1
- package/dist/migrate/storage/jsonStorage.d.ts +0 -1
- package/dist/migrate/storage/jsonStorage.js +0 -1
- package/dist/mongo/index.d.ts +0 -1
- package/dist/mongo/index.js +0 -1
- package/dist/mongo/mongoDialect.d.ts +93 -5
- package/dist/mongo/mongoDialect.js +315 -83
- package/dist/mongo/mongodbNativeDialect.d.ts +0 -1
- package/dist/mongo/mongodbNativeDialect.js +0 -1
- package/dist/mongo/mongodbQuerier.d.ts +5 -1
- package/dist/mongo/mongodbQuerier.js +61 -19
- package/dist/mongo/mongodbQuerierPool.d.ts +0 -1
- package/dist/mongo/mongodbQuerierPool.js +0 -1
- package/dist/mysql/index.d.ts +0 -1
- package/dist/mysql/index.js +0 -1
- package/dist/mysql/mysql2Dialect.d.ts +0 -1
- package/dist/mysql/mysql2Dialect.js +0 -1
- package/dist/mysql/mysql2Querier.d.ts +0 -1
- package/dist/mysql/mysql2Querier.js +0 -1
- package/dist/mysql/mysql2QuerierPool.d.ts +0 -1
- package/dist/mysql/mysql2QuerierPool.js +0 -1
- package/dist/mysql/mysqlDialect.d.ts +8 -1
- package/dist/mysql/mysqlDialect.js +13 -1
- package/dist/namingStrategy/defaultNamingStrategy.d.ts +0 -1
- package/dist/namingStrategy/defaultNamingStrategy.js +0 -1
- package/dist/namingStrategy/index.d.ts +0 -1
- package/dist/namingStrategy/index.js +0 -1
- package/dist/namingStrategy/snakeCaseNamingStrategy.d.ts +0 -1
- package/dist/namingStrategy/snakeCaseNamingStrategy.js +0 -1
- package/dist/neon/index.d.ts +0 -1
- package/dist/neon/index.js +0 -1
- package/dist/neon/neonDialect.d.ts +0 -1
- package/dist/neon/neonDialect.js +0 -1
- package/dist/neon/neonQuerier.d.ts +0 -1
- package/dist/neon/neonQuerier.js +0 -1
- package/dist/neon/neonQuerierPool.d.ts +0 -1
- package/dist/neon/neonQuerierPool.js +0 -1
- package/dist/nestjs/index.d.ts +0 -1
- package/dist/nestjs/index.js +0 -1
- package/dist/nestjs/uqlContextInterceptor.d.ts +0 -1
- package/dist/nestjs/uqlContextInterceptor.js +9 -2
- package/dist/nestjs/uqlModule.d.ts +0 -1
- package/dist/nestjs/uqlModule.js +12 -2
- package/dist/options.d.ts +0 -1
- package/dist/options.js +0 -1
- package/dist/postgres/abstractPgQuerier.d.ts +0 -1
- package/dist/postgres/abstractPgQuerier.js +0 -1
- package/dist/postgres/abstractPgQuerierPool.d.ts +0 -1
- package/dist/postgres/abstractPgQuerierPool.js +0 -1
- package/dist/postgres/index.d.ts +0 -1
- package/dist/postgres/index.js +0 -1
- package/dist/postgres/pgDialect.d.ts +0 -1
- package/dist/postgres/pgDialect.js +0 -1
- package/dist/postgres/pgQuerier.d.ts +0 -1
- package/dist/postgres/pgQuerier.js +0 -1
- package/dist/postgres/pgQuerierPool.d.ts +0 -1
- package/dist/postgres/pgQuerierPool.js +0 -1
- package/dist/postgres/postgresDialect.d.ts +0 -1
- package/dist/postgres/postgresDialect.js +0 -1
- package/dist/postgres/postgresWireDriverCapabilities.d.ts +0 -1
- package/dist/postgres/postgresWireDriverCapabilities.js +0 -1
- package/dist/querier/abstractPoolQuerier.d.ts +0 -1
- package/dist/querier/abstractPoolQuerier.js +0 -1
- package/dist/querier/abstractQuerier.d.ts +0 -1
- package/dist/querier/abstractQuerier.js +9 -2
- package/dist/querier/abstractQuerierPool.d.ts +0 -1
- package/dist/querier/abstractQuerierPool.js +0 -1
- package/dist/querier/abstractSqlQuerier.d.ts +0 -1
- package/dist/querier/abstractSqlQuerier.js +9 -2
- package/dist/querier/abstractSqlQuerierPool.d.ts +0 -1
- package/dist/querier/abstractSqlQuerierPool.js +0 -1
- package/dist/querier/decorator/index.d.ts +0 -1
- package/dist/querier/decorator/index.js +0 -1
- package/dist/querier/decorator/injectQuerier.d.ts +0 -1
- package/dist/querier/decorator/injectQuerier.js +0 -1
- package/dist/querier/decorator/log.d.ts +0 -1
- package/dist/querier/decorator/log.js +0 -1
- package/dist/querier/decorator/serialized.d.ts +0 -1
- package/dist/querier/decorator/serialized.js +0 -1
- package/dist/querier/decorator/transactional.d.ts +0 -1
- package/dist/querier/decorator/transactional.js +0 -1
- package/dist/querier/index.d.ts +0 -1
- package/dist/querier/index.js +0 -1
- package/dist/schema/canonicalType.d.ts +14 -13
- package/dist/schema/canonicalType.js +41 -44
- package/dist/schema/index.d.ts +1 -2
- package/dist/schema/index.js +0 -1
- package/dist/schema/schemaAST.d.ts +0 -1
- package/dist/schema/schemaAST.js +0 -1
- package/dist/schema/schemaASTBuilder.d.ts +8 -2
- package/dist/schema/schemaASTBuilder.js +56 -48
- package/dist/schema/schemaASTDiffer.d.ts +0 -1
- package/dist/schema/schemaASTDiffer.js +0 -1
- package/dist/schema/types.d.ts +10 -38
- package/dist/schema/types.js +0 -1
- package/dist/sqlite/abstractSqliteQuerier.d.ts +39 -1
- package/dist/sqlite/abstractSqliteQuerier.js +44 -1
- package/dist/sqlite/bunSqliteAdapter.bun.d.ts +26 -0
- package/dist/sqlite/bunSqliteAdapter.bun.js +25 -0
- package/dist/sqlite/hranaQuerier.d.ts +54 -0
- package/dist/sqlite/hranaQuerier.js +90 -0
- package/dist/sqlite/hranaQuerierPool.d.ts +21 -0
- package/dist/sqlite/hranaQuerierPool.js +25 -0
- package/dist/sqlite/index.d.ts +2 -2
- package/dist/sqlite/index.js +2 -2
- package/dist/sqlite/sqliteDialect.d.ts +18 -5
- package/dist/sqlite/sqliteDialect.js +24 -25
- package/dist/sqlite/sqliteQuerier.d.ts +16 -10
- package/dist/sqlite/sqliteQuerier.js +4 -28
- package/dist/sqlite/sqliteQuerierPool.d.ts +14 -5
- package/dist/sqlite/sqliteQuerierPool.js +16 -6
- package/dist/turso/index.d.ts +3 -0
- package/dist/turso/index.js +3 -0
- package/dist/turso/local.d.ts +3 -0
- package/dist/turso/local.js +3 -0
- package/dist/turso/tursoDialect.d.ts +15 -0
- package/dist/turso/tursoDialect.js +18 -0
- package/dist/turso/tursoLocalQuerier.d.ts +25 -0
- package/dist/turso/tursoLocalQuerier.js +20 -0
- package/dist/turso/tursoLocalQuerierPool.d.ts +32 -0
- package/dist/turso/tursoLocalQuerierPool.js +39 -0
- package/dist/turso/tursoQuerier.d.ts +10 -0
- package/dist/turso/tursoQuerier.js +10 -0
- package/dist/turso/tursoQuerierPool.d.ts +39 -0
- package/dist/turso/tursoQuerierPool.js +38 -0
- package/dist/type/config.d.ts +0 -7
- package/dist/type/config.js +0 -1
- package/dist/type/dialect.d.ts +12 -5
- package/dist/type/dialect.js +7 -2
- package/dist/type/entity.d.ts +66 -6
- package/dist/type/entity.js +0 -1
- package/dist/type/index.d.ts +0 -1
- package/dist/type/index.js +0 -1
- package/dist/type/logger.d.ts +0 -1
- package/dist/type/logger.js +0 -1
- package/dist/type/migration.d.ts +32 -24
- package/dist/type/migration.js +0 -1
- package/dist/type/migratorDialect.d.ts +0 -1
- package/dist/type/migratorDialect.js +0 -1
- package/dist/type/namingStrategy.d.ts +0 -1
- package/dist/type/namingStrategy.js +0 -1
- package/dist/type/querier.d.ts +0 -1
- package/dist/type/querier.js +0 -1
- package/dist/type/querierPool.d.ts +0 -1
- package/dist/type/querierPool.js +0 -1
- package/dist/type/query.d.ts +0 -1
- package/dist/type/query.js +0 -1
- package/dist/type/queryAggregate.d.ts +0 -1
- package/dist/type/queryAggregate.js +0 -1
- package/dist/type/queryRaw.d.ts +0 -1
- package/dist/type/queryRaw.js +0 -1
- package/dist/type/queryWhere.d.ts +0 -1
- package/dist/type/queryWhere.js +0 -1
- package/dist/type/universalQuerier.d.ts +0 -1
- package/dist/type/universalQuerier.js +0 -1
- package/dist/type/utility.d.ts +0 -1
- package/dist/type/utility.js +0 -1
- package/dist/type/vector.d.ts +5 -3
- package/dist/type/vector.js +0 -1
- package/dist/util/dialect.util.d.ts +8 -2
- package/dist/util/dialect.util.js +16 -1
- package/dist/util/field.util.d.ts +0 -1
- package/dist/util/field.util.js +0 -1
- package/dist/util/filters.util.d.ts +0 -1
- package/dist/util/filters.util.js +0 -1
- package/dist/util/hook.util.d.ts +0 -1
- package/dist/util/hook.util.js +0 -1
- package/dist/util/index.d.ts +1 -1
- package/dist/util/index.js +1 -1
- package/dist/util/indexColumn.util.d.ts +6 -0
- package/dist/util/indexColumn.util.js +26 -0
- package/dist/util/logger.d.ts +0 -1
- package/dist/util/logger.js +0 -1
- package/dist/util/object.util.d.ts +0 -1
- package/dist/util/object.util.js +0 -1
- package/dist/util/raw.d.ts +0 -1
- package/dist/util/raw.js +0 -1
- package/dist/util/relationQuery.util.d.ts +0 -1
- package/dist/util/relationQuery.util.js +0 -1
- package/dist/util/sql.util.d.ts +0 -1
- package/dist/util/sql.util.js +0 -1
- package/dist/util/sqlLiteral.d.ts +19 -0
- package/dist/util/sqlLiteral.js +108 -0
- package/dist/util/string.util.d.ts +0 -1
- package/dist/util/string.util.js +0 -1
- package/package.json +57 -27
- package/CHANGELOG.md +0 -1359
- package/dist/browser/http/bus.d.ts.map +0 -1
- package/dist/browser/http/bus.js.map +0 -1
- package/dist/browser/http/http.d.ts.map +0 -1
- package/dist/browser/http/http.js.map +0 -1
- package/dist/browser/http/index.d.ts.map +0 -1
- package/dist/browser/http/index.js.map +0 -1
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js.map +0 -1
- package/dist/browser/options.d.ts.map +0 -1
- package/dist/browser/options.js.map +0 -1
- package/dist/browser/querier/httpQuerier.d.ts.map +0 -1
- package/dist/browser/querier/httpQuerier.js.map +0 -1
- package/dist/browser/querier/index.d.ts.map +0 -1
- package/dist/browser/querier/index.js.map +0 -1
- package/dist/browser/type/clientQuerier.d.ts.map +0 -1
- package/dist/browser/type/clientQuerier.js.map +0 -1
- package/dist/browser/type/clientQuerierPool.d.ts.map +0 -1
- package/dist/browser/type/clientQuerierPool.js.map +0 -1
- package/dist/browser/type/index.d.ts.map +0 -1
- package/dist/browser/type/index.js.map +0 -1
- package/dist/browser/type/request.d.ts.map +0 -1
- package/dist/browser/type/request.js.map +0 -1
- package/dist/bunSql/bunSql.util.d.ts.map +0 -1
- package/dist/bunSql/bunSql.util.js.map +0 -1
- package/dist/bunSql/bunSqlCockroachDialect.d.ts.map +0 -1
- package/dist/bunSql/bunSqlCockroachDialect.js.map +0 -1
- package/dist/bunSql/bunSqlPostgresDialect.d.ts.map +0 -1
- package/dist/bunSql/bunSqlPostgresDialect.js.map +0 -1
- package/dist/bunSql/bunSqlQuerier.d.ts.map +0 -1
- package/dist/bunSql/bunSqlQuerier.js.map +0 -1
- package/dist/bunSql/bunSqlQuerierPool.d.ts.map +0 -1
- package/dist/bunSql/bunSqlQuerierPool.js.map +0 -1
- package/dist/bunSql/bunSqliteDialect.d.ts.map +0 -1
- package/dist/bunSql/bunSqliteDialect.js.map +0 -1
- package/dist/bunSql/index.d.ts.map +0 -1
- package/dist/bunSql/index.js.map +0 -1
- package/dist/cockroachdb/cockroachDialect.d.ts.map +0 -1
- package/dist/cockroachdb/cockroachDialect.js.map +0 -1
- package/dist/cockroachdb/crdbQuerier.d.ts.map +0 -1
- package/dist/cockroachdb/crdbQuerier.js.map +0 -1
- package/dist/cockroachdb/crdbQuerierPool.d.ts.map +0 -1
- package/dist/cockroachdb/crdbQuerierPool.js.map +0 -1
- package/dist/cockroachdb/index.d.ts.map +0 -1
- package/dist/cockroachdb/index.js.map +0 -1
- package/dist/context/context.browser.d.ts.map +0 -1
- package/dist/context/context.browser.js.map +0 -1
- package/dist/context/context.d.ts.map +0 -1
- package/dist/context/context.js.map +0 -1
- package/dist/context/securityError.d.ts.map +0 -1
- package/dist/context/securityError.js.map +0 -1
- package/dist/d1/d1Querier.d.ts.map +0 -1
- package/dist/d1/d1Querier.js.map +0 -1
- package/dist/d1/d1QuerierPool.d.ts.map +0 -1
- package/dist/d1/d1QuerierPool.js.map +0 -1
- package/dist/d1/d1SqliteDialect.d.ts.map +0 -1
- package/dist/d1/d1SqliteDialect.js.map +0 -1
- package/dist/d1/index.d.ts.map +0 -1
- package/dist/d1/index.js.map +0 -1
- package/dist/dialect/abstractDialect.d.ts.map +0 -1
- package/dist/dialect/abstractDialect.js.map +0 -1
- package/dist/dialect/abstractSqlDialect.d.ts.map +0 -1
- package/dist/dialect/abstractSqlDialect.js.map +0 -1
- package/dist/dialect/index.d.ts.map +0 -1
- package/dist/dialect/index.js.map +0 -1
- package/dist/dialect/jsonArrayElemMatchUtils.d.ts.map +0 -1
- package/dist/dialect/jsonArrayElemMatchUtils.js.map +0 -1
- package/dist/dialect/jsonSql.d.ts.map +0 -1
- package/dist/dialect/jsonSql.js.map +0 -1
- package/dist/dialect/mysqlLikeSqlDialect.d.ts.map +0 -1
- package/dist/dialect/mysqlLikeSqlDialect.js.map +0 -1
- package/dist/dialect/pgLikeSqlDialect.d.ts.map +0 -1
- package/dist/dialect/pgLikeSqlDialect.js.map +0 -1
- package/dist/dialect/queryContext.d.ts.map +0 -1
- package/dist/dialect/queryContext.js.map +0 -1
- package/dist/dialect/vectorSqlDialect.d.ts.map +0 -1
- package/dist/dialect/vectorSqlDialect.js.map +0 -1
- package/dist/entity/decorator/entity.d.ts.map +0 -1
- package/dist/entity/decorator/entity.js.map +0 -1
- package/dist/entity/decorator/field.d.ts.map +0 -1
- package/dist/entity/decorator/field.js.map +0 -1
- package/dist/entity/decorator/filter.d.ts.map +0 -1
- package/dist/entity/decorator/filter.js.map +0 -1
- package/dist/entity/decorator/hook.d.ts.map +0 -1
- package/dist/entity/decorator/hook.js.map +0 -1
- package/dist/entity/decorator/id.d.ts.map +0 -1
- package/dist/entity/decorator/id.js.map +0 -1
- package/dist/entity/decorator/index-decorator.d.ts.map +0 -1
- package/dist/entity/decorator/index-decorator.js.map +0 -1
- package/dist/entity/decorator/index.d.ts.map +0 -1
- package/dist/entity/decorator/index.js.map +0 -1
- package/dist/entity/decorator/relation.d.ts.map +0 -1
- package/dist/entity/decorator/relation.js.map +0 -1
- package/dist/entity/index.d.ts.map +0 -1
- package/dist/entity/index.js.map +0 -1
- package/dist/entity/metadata/definition.d.ts.map +0 -1
- package/dist/entity/metadata/definition.js.map +0 -1
- package/dist/entity/test-helpers.d.ts +0 -4
- package/dist/entity/test-helpers.d.ts.map +0 -1
- package/dist/entity/test-helpers.js +0 -16
- package/dist/entity/test-helpers.js.map +0 -1
- package/dist/express/index.d.ts.map +0 -1
- package/dist/express/index.js.map +0 -1
- package/dist/express/querierMiddleware.d.ts.map +0 -1
- package/dist/express/querierMiddleware.js.map +0 -1
- package/dist/http/contract.d.ts.map +0 -1
- package/dist/http/contract.js.map +0 -1
- package/dist/http/fetchHandler.d.ts.map +0 -1
- package/dist/http/fetchHandler.js.map +0 -1
- package/dist/http/handler.d.ts.map +0 -1
- package/dist/http/handler.js.map +0 -1
- package/dist/http/index.d.ts.map +0 -1
- package/dist/http/index.js.map +0 -1
- package/dist/http/query.d.ts.map +0 -1
- package/dist/http/query.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/libsql/index.d.ts.map +0 -1
- package/dist/libsql/index.js.map +0 -1
- package/dist/libsql/libsqlDialect.d.ts.map +0 -1
- package/dist/libsql/libsqlDialect.js.map +0 -1
- package/dist/libsql/libsqlQuerier.d.ts.map +0 -1
- package/dist/libsql/libsqlQuerier.js.map +0 -1
- package/dist/libsql/libsqlQuerierPool.d.ts.map +0 -1
- package/dist/libsql/libsqlQuerierPool.js.map +0 -1
- package/dist/maria/index.d.ts.map +0 -1
- package/dist/maria/index.js.map +0 -1
- package/dist/maria/mariaDialect.d.ts.map +0 -1
- package/dist/maria/mariaDialect.js.map +0 -1
- package/dist/maria/mariadbQuerier.d.ts.map +0 -1
- package/dist/maria/mariadbQuerier.js.map +0 -1
- package/dist/maria/mariadbQuerierPool.d.ts.map +0 -1
- package/dist/maria/mariadbQuerierPool.js.map +0 -1
- package/dist/migrate/acquireQuerierForMigrations.d.ts.map +0 -1
- package/dist/migrate/acquireQuerierForMigrations.js.map +0 -1
- package/dist/migrate/assertCliConfig.d.ts.map +0 -1
- package/dist/migrate/assertCliConfig.js.map +0 -1
- package/dist/migrate/bin.d.ts.map +0 -1
- package/dist/migrate/bin.js.map +0 -1
- package/dist/migrate/builder/columnBuilder.d.ts.map +0 -1
- package/dist/migrate/builder/columnBuilder.js.map +0 -1
- package/dist/migrate/builder/expressions.d.ts.map +0 -1
- package/dist/migrate/builder/expressions.js.map +0 -1
- package/dist/migrate/builder/index.d.ts.map +0 -1
- package/dist/migrate/builder/index.js.map +0 -1
- package/dist/migrate/builder/migrationBuilder.d.ts.map +0 -1
- package/dist/migrate/builder/migrationBuilder.js.map +0 -1
- package/dist/migrate/builder/splitSqlStatements.d.ts.map +0 -1
- package/dist/migrate/builder/splitSqlStatements.js.map +0 -1
- package/dist/migrate/builder/tableBuilder.d.ts.map +0 -1
- package/dist/migrate/builder/tableBuilder.js.map +0 -1
- package/dist/migrate/builder/types.d.ts.map +0 -1
- package/dist/migrate/builder/types.js.map +0 -1
- package/dist/migrate/cli-config.d.ts.map +0 -1
- package/dist/migrate/cli-config.js.map +0 -1
- package/dist/migrate/cli.d.ts.map +0 -1
- package/dist/migrate/cli.js.map +0 -1
- package/dist/migrate/codegen/entityCodeGenerator.d.ts.map +0 -1
- package/dist/migrate/codegen/entityCodeGenerator.js.map +0 -1
- package/dist/migrate/codegen/entityMerger.d.ts +0 -115
- package/dist/migrate/codegen/entityMerger.d.ts.map +0 -1
- package/dist/migrate/codegen/entityMerger.js +0 -294
- package/dist/migrate/codegen/entityMerger.js.map +0 -1
- package/dist/migrate/codegen/index.d.ts.map +0 -1
- package/dist/migrate/codegen/index.js.map +0 -1
- package/dist/migrate/codegen/migrationCodeGenerator.d.ts +0 -62
- package/dist/migrate/codegen/migrationCodeGenerator.d.ts.map +0 -1
- package/dist/migrate/codegen/migrationCodeGenerator.js +0 -356
- package/dist/migrate/codegen/migrationCodeGenerator.js.map +0 -1
- package/dist/migrate/codegen/migrationFile.d.ts.map +0 -1
- package/dist/migrate/codegen/migrationFile.js.map +0 -1
- package/dist/migrate/codegen/smartRelationDetector.d.ts.map +0 -1
- package/dist/migrate/codegen/smartRelationDetector.js.map +0 -1
- package/dist/migrate/drift/driftDetector.d.ts.map +0 -1
- package/dist/migrate/drift/driftDetector.js.map +0 -1
- package/dist/migrate/drift/index.d.ts.map +0 -1
- package/dist/migrate/drift/index.js.map +0 -1
- package/dist/migrate/generator/index.d.ts +0 -3
- package/dist/migrate/generator/index.d.ts.map +0 -1
- package/dist/migrate/generator/index.js +0 -3
- package/dist/migrate/generator/index.js.map +0 -1
- package/dist/migrate/generator/mongoSchemaGenerator.d.ts.map +0 -1
- package/dist/migrate/generator/mongoSchemaGenerator.js.map +0 -1
- package/dist/migrate/index.d.ts.map +0 -1
- package/dist/migrate/index.js.map +0 -1
- package/dist/migrate/introspection/abstractSqlSchemaIntrospector.d.ts.map +0 -1
- package/dist/migrate/introspection/abstractSqlSchemaIntrospector.js.map +0 -1
- package/dist/migrate/introspection/baseSqlIntrospector.d.ts.map +0 -1
- package/dist/migrate/introspection/baseSqlIntrospector.js.map +0 -1
- package/dist/migrate/introspection/index.d.ts.map +0 -1
- package/dist/migrate/introspection/index.js.map +0 -1
- package/dist/migrate/introspection/mongoIntrospector.d.ts.map +0 -1
- package/dist/migrate/introspection/mongoIntrospector.js.map +0 -1
- package/dist/migrate/introspection/mysqlIntrospector.d.ts.map +0 -1
- package/dist/migrate/introspection/mysqlIntrospector.js.map +0 -1
- package/dist/migrate/introspection/postgresIntrospector.d.ts.map +0 -1
- package/dist/migrate/introspection/postgresIntrospector.js.map +0 -1
- package/dist/migrate/introspection/sqliteIntrospector.d.ts.map +0 -1
- package/dist/migrate/introspection/sqliteIntrospector.js.map +0 -1
- package/dist/migrate/migrator.d.ts.map +0 -1
- package/dist/migrate/migrator.js.map +0 -1
- package/dist/migrate/schemaGenerator.d.ts.map +0 -1
- package/dist/migrate/schemaGenerator.js.map +0 -1
- package/dist/migrate/schemaGeneratorAsync.d.ts.map +0 -1
- package/dist/migrate/schemaGeneratorAsync.js.map +0 -1
- package/dist/migrate/storage/databaseStorage.d.ts.map +0 -1
- package/dist/migrate/storage/databaseStorage.js.map +0 -1
- package/dist/migrate/storage/index.d.ts.map +0 -1
- package/dist/migrate/storage/index.js.map +0 -1
- package/dist/migrate/storage/jsonStorage.d.ts.map +0 -1
- package/dist/migrate/storage/jsonStorage.js.map +0 -1
- package/dist/migrate/sync/index.d.ts +0 -7
- package/dist/migrate/sync/index.d.ts.map +0 -1
- package/dist/migrate/sync/index.js +0 -7
- package/dist/migrate/sync/index.js.map +0 -1
- package/dist/migrate/sync/schemaSync.d.ts +0 -132
- package/dist/migrate/sync/schemaSync.d.ts.map +0 -1
- package/dist/migrate/sync/schemaSync.js +0 -260
- package/dist/migrate/sync/schemaSync.js.map +0 -1
- package/dist/mongo/index.d.ts.map +0 -1
- package/dist/mongo/index.js.map +0 -1
- package/dist/mongo/mongoDialect.d.ts.map +0 -1
- package/dist/mongo/mongoDialect.js.map +0 -1
- package/dist/mongo/mongodbNativeDialect.d.ts.map +0 -1
- package/dist/mongo/mongodbNativeDialect.js.map +0 -1
- package/dist/mongo/mongodbQuerier.d.ts.map +0 -1
- package/dist/mongo/mongodbQuerier.js.map +0 -1
- package/dist/mongo/mongodbQuerierPool.d.ts.map +0 -1
- package/dist/mongo/mongodbQuerierPool.js.map +0 -1
- package/dist/mysql/index.d.ts.map +0 -1
- package/dist/mysql/index.js.map +0 -1
- package/dist/mysql/mysql2Dialect.d.ts.map +0 -1
- package/dist/mysql/mysql2Dialect.js.map +0 -1
- package/dist/mysql/mysql2Querier.d.ts.map +0 -1
- package/dist/mysql/mysql2Querier.js.map +0 -1
- package/dist/mysql/mysql2QuerierPool.d.ts.map +0 -1
- package/dist/mysql/mysql2QuerierPool.js.map +0 -1
- package/dist/mysql/mysqlDialect.d.ts.map +0 -1
- package/dist/mysql/mysqlDialect.js.map +0 -1
- package/dist/namingStrategy/defaultNamingStrategy.d.ts.map +0 -1
- package/dist/namingStrategy/defaultNamingStrategy.js.map +0 -1
- package/dist/namingStrategy/index.d.ts.map +0 -1
- package/dist/namingStrategy/index.js.map +0 -1
- package/dist/namingStrategy/snakeCaseNamingStrategy.d.ts.map +0 -1
- package/dist/namingStrategy/snakeCaseNamingStrategy.js.map +0 -1
- package/dist/neon/index.d.ts.map +0 -1
- package/dist/neon/index.js.map +0 -1
- package/dist/neon/neonDialect.d.ts.map +0 -1
- package/dist/neon/neonDialect.js.map +0 -1
- package/dist/neon/neonQuerier.d.ts.map +0 -1
- package/dist/neon/neonQuerier.js.map +0 -1
- package/dist/neon/neonQuerierPool.d.ts.map +0 -1
- package/dist/neon/neonQuerierPool.js.map +0 -1
- package/dist/nestjs/index.d.ts.map +0 -1
- package/dist/nestjs/index.js.map +0 -1
- package/dist/nestjs/uqlContextInterceptor.d.ts.map +0 -1
- package/dist/nestjs/uqlContextInterceptor.js.map +0 -1
- package/dist/nestjs/uqlModule.d.ts.map +0 -1
- package/dist/nestjs/uqlModule.js.map +0 -1
- package/dist/options.d.ts.map +0 -1
- package/dist/options.js.map +0 -1
- package/dist/postgres/abstractPgQuerier.d.ts.map +0 -1
- package/dist/postgres/abstractPgQuerier.js.map +0 -1
- package/dist/postgres/abstractPgQuerierPool.d.ts.map +0 -1
- package/dist/postgres/abstractPgQuerierPool.js.map +0 -1
- package/dist/postgres/index.d.ts.map +0 -1
- package/dist/postgres/index.js.map +0 -1
- package/dist/postgres/pgDialect.d.ts.map +0 -1
- package/dist/postgres/pgDialect.js.map +0 -1
- package/dist/postgres/pgQuerier.d.ts.map +0 -1
- package/dist/postgres/pgQuerier.js.map +0 -1
- package/dist/postgres/pgQuerierPool.d.ts.map +0 -1
- package/dist/postgres/pgQuerierPool.js.map +0 -1
- package/dist/postgres/postgresDialect.d.ts.map +0 -1
- package/dist/postgres/postgresDialect.js.map +0 -1
- package/dist/postgres/postgresWireDriverCapabilities.d.ts.map +0 -1
- package/dist/postgres/postgresWireDriverCapabilities.js.map +0 -1
- package/dist/querier/abstractPoolQuerier.d.ts.map +0 -1
- package/dist/querier/abstractPoolQuerier.js.map +0 -1
- package/dist/querier/abstractQuerier.d.ts.map +0 -1
- package/dist/querier/abstractQuerier.js.map +0 -1
- package/dist/querier/abstractQuerierPool.d.ts.map +0 -1
- package/dist/querier/abstractQuerierPool.js.map +0 -1
- package/dist/querier/abstractSqlQuerier.d.ts.map +0 -1
- package/dist/querier/abstractSqlQuerier.js.map +0 -1
- package/dist/querier/abstractSqlQuerierPool.d.ts.map +0 -1
- package/dist/querier/abstractSqlQuerierPool.js.map +0 -1
- package/dist/querier/decorator/index.d.ts.map +0 -1
- package/dist/querier/decorator/index.js.map +0 -1
- package/dist/querier/decorator/injectQuerier.d.ts.map +0 -1
- package/dist/querier/decorator/injectQuerier.js.map +0 -1
- package/dist/querier/decorator/log.d.ts.map +0 -1
- package/dist/querier/decorator/log.js.map +0 -1
- package/dist/querier/decorator/serialized.d.ts.map +0 -1
- package/dist/querier/decorator/serialized.js.map +0 -1
- package/dist/querier/decorator/transactional.d.ts.map +0 -1
- package/dist/querier/decorator/transactional.js.map +0 -1
- package/dist/querier/index.d.ts.map +0 -1
- package/dist/querier/index.js.map +0 -1
- package/dist/schema/canonicalType.d.ts.map +0 -1
- package/dist/schema/canonicalType.js.map +0 -1
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/index.js.map +0 -1
- package/dist/schema/schemaAST.d.ts.map +0 -1
- package/dist/schema/schemaAST.js.map +0 -1
- package/dist/schema/schemaASTBuilder.d.ts.map +0 -1
- package/dist/schema/schemaASTBuilder.js.map +0 -1
- package/dist/schema/schemaASTDiffer.d.ts.map +0 -1
- package/dist/schema/schemaASTDiffer.js.map +0 -1
- package/dist/schema/types.d.ts.map +0 -1
- package/dist/schema/types.js.map +0 -1
- package/dist/sqlite/abstractSqliteQuerier.d.ts.map +0 -1
- package/dist/sqlite/abstractSqliteQuerier.js.map +0 -1
- package/dist/sqlite/betterSqlite3Dialect.d.ts +0 -10
- package/dist/sqlite/betterSqlite3Dialect.d.ts.map +0 -1
- package/dist/sqlite/betterSqlite3Dialect.js +0 -10
- package/dist/sqlite/betterSqlite3Dialect.js.map +0 -1
- package/dist/sqlite/index.d.ts.map +0 -1
- package/dist/sqlite/index.js.map +0 -1
- package/dist/sqlite/sqliteDialect.d.ts.map +0 -1
- package/dist/sqlite/sqliteDialect.js.map +0 -1
- package/dist/sqlite/sqliteQuerier.d.ts.map +0 -1
- package/dist/sqlite/sqliteQuerier.js.map +0 -1
- package/dist/sqlite/sqliteQuerierPool.d.ts.map +0 -1
- package/dist/sqlite/sqliteQuerierPool.js.map +0 -1
- package/dist/type/config.d.ts.map +0 -1
- package/dist/type/config.js.map +0 -1
- package/dist/type/dialect.d.ts.map +0 -1
- package/dist/type/dialect.js.map +0 -1
- package/dist/type/entity.d.ts.map +0 -1
- package/dist/type/entity.js.map +0 -1
- package/dist/type/index.d.ts.map +0 -1
- package/dist/type/index.js.map +0 -1
- package/dist/type/logger.d.ts.map +0 -1
- package/dist/type/logger.js.map +0 -1
- package/dist/type/migration.d.ts.map +0 -1
- package/dist/type/migration.js.map +0 -1
- package/dist/type/migratorDialect.d.ts.map +0 -1
- package/dist/type/migratorDialect.js.map +0 -1
- package/dist/type/namingStrategy.d.ts.map +0 -1
- package/dist/type/namingStrategy.js.map +0 -1
- package/dist/type/querier.d.ts.map +0 -1
- package/dist/type/querier.js.map +0 -1
- package/dist/type/querierPool.d.ts.map +0 -1
- package/dist/type/querierPool.js.map +0 -1
- package/dist/type/query.d.ts.map +0 -1
- package/dist/type/query.js.map +0 -1
- package/dist/type/queryAggregate.d.ts.map +0 -1
- package/dist/type/queryAggregate.js.map +0 -1
- package/dist/type/queryRaw.d.ts.map +0 -1
- package/dist/type/queryRaw.js.map +0 -1
- package/dist/type/queryWhere.d.ts.map +0 -1
- package/dist/type/queryWhere.js.map +0 -1
- package/dist/type/universalQuerier.d.ts.map +0 -1
- package/dist/type/universalQuerier.js.map +0 -1
- package/dist/type/utility.d.ts.map +0 -1
- package/dist/type/utility.js.map +0 -1
- package/dist/type/vector.d.ts.map +0 -1
- package/dist/type/vector.js.map +0 -1
- package/dist/util/ansiSqlLiteral.d.ts +0 -23
- package/dist/util/ansiSqlLiteral.d.ts.map +0 -1
- package/dist/util/ansiSqlLiteral.js +0 -105
- package/dist/util/ansiSqlLiteral.js.map +0 -1
- package/dist/util/dialect.util.d.ts.map +0 -1
- package/dist/util/dialect.util.js.map +0 -1
- package/dist/util/field.util.d.ts.map +0 -1
- package/dist/util/field.util.js.map +0 -1
- package/dist/util/filters.util.d.ts.map +0 -1
- package/dist/util/filters.util.js.map +0 -1
- package/dist/util/hook.util.d.ts.map +0 -1
- package/dist/util/hook.util.js.map +0 -1
- package/dist/util/index.d.ts.map +0 -1
- package/dist/util/index.js.map +0 -1
- package/dist/util/logger.d.ts.map +0 -1
- package/dist/util/logger.js.map +0 -1
- package/dist/util/object.util.d.ts.map +0 -1
- package/dist/util/object.util.js.map +0 -1
- package/dist/util/raw.d.ts.map +0 -1
- package/dist/util/raw.js.map +0 -1
- package/dist/util/relationQuery.util.d.ts.map +0 -1
- package/dist/util/relationQuery.util.js.map +0 -1
- package/dist/util/sql.util.d.ts.map +0 -1
- package/dist/util/sql.util.js.map +0 -1
- package/dist/util/string.util.d.ts.map +0 -1
- package/dist/util/string.util.js.map +0 -1
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { getMeta } from '../entity/index.js';
|
|
2
2
|
import { QueryRaw, RAW_ALIAS, RAW_VALUE, } from '../type/index.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { asSelectMap, buildQueryWhereAsMap, buildSortMap, escapeSqlId, fillOnFields, filterFieldKeys, flatObject, getInsertFieldKeys, getKeys, getRelationRequestSummary, getSoftDeleteValue, hasKeys, hasMultipleKeys, isJsonType, isJsonUpdateOp, isOperatorObject, isOperatorOnlyObject, isPopulatingRelations, isVectorSearch, normalizeScalarFieldSelection, parseGroupMap, parseRelationAtKey, parseRelationSize, raw, someValue, withoutSoftDeleteFilter, } from '../util/index.js';
|
|
4
|
+
import { escapeAnsiSqlLiteral, escapeSingleQuotes } from '../util/sqlLiteral.js';
|
|
5
|
+
import { IndexSqlDialect } from './indexSqlDialect.js';
|
|
5
6
|
import { buildElemMatchConditions } from './jsonArrayElemMatchUtils.js';
|
|
6
7
|
import { JSON_ELEM_ALIAS_PREFIX, jsonElemExists } from './jsonSql.js';
|
|
7
8
|
import { SqlQueryContext } from './queryContext.js';
|
|
8
|
-
import {
|
|
9
|
-
export class AbstractSqlDialect extends
|
|
9
|
+
import { isVectorFieldType } from './vectorCast.js';
|
|
10
|
+
export class AbstractSqlDialect extends IndexSqlDialect {
|
|
10
11
|
isolationLevelStrategy = 'inline';
|
|
11
12
|
alterColumnStrategy = 'single-statement';
|
|
12
13
|
alterColumnSyntax = 'ALTER COLUMN';
|
|
@@ -81,7 +82,7 @@ export class AbstractSqlDialect extends VectorSqlDialect {
|
|
|
81
82
|
returningId(entity) {
|
|
82
83
|
const meta = getMeta(entity);
|
|
83
84
|
const idKey = (meta.id ?? 'id');
|
|
84
|
-
const idName = this.
|
|
85
|
+
const idName = this.columnOf(meta, idKey);
|
|
85
86
|
return `RETURNING ${this.escapeId(idName)} ${this.escapeId('id')}`;
|
|
86
87
|
}
|
|
87
88
|
search(ctx, entity, q = {}, opts = {}) {
|
|
@@ -135,7 +136,6 @@ export class AbstractSqlDialect extends VectorSqlDialect {
|
|
|
135
136
|
const field = meta.fields[key];
|
|
136
137
|
if (!field)
|
|
137
138
|
return;
|
|
138
|
-
const columnName = this.resolveColumnName(key, field);
|
|
139
139
|
if (field.virtual) {
|
|
140
140
|
this.getRawValue(ctx, {
|
|
141
141
|
value: raw(field.virtual[RAW_VALUE], key),
|
|
@@ -143,17 +143,35 @@ export class AbstractSqlDialect extends VectorSqlDialect {
|
|
|
143
143
|
escapedPrefix,
|
|
144
144
|
autoPrefixAlias: opts.autoPrefixAlias,
|
|
145
145
|
});
|
|
146
|
+
return;
|
|
146
147
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
148
|
+
const columnName = this.resolveColumnName(key, field);
|
|
149
|
+
const column = escapedPrefix + this.escapeId(columnName);
|
|
150
|
+
const expr = this.selectFieldExpr(column, field);
|
|
151
|
+
ctx.append(expr);
|
|
152
|
+
// An expression needs the alias too, or the row comes back keyed by the expression text.
|
|
153
|
+
if (expr !== column || columnName !== key || opts.autoPrefixAlias) {
|
|
154
|
+
ctx.append(' ' + this.escapeId(prefix + key, true));
|
|
153
155
|
}
|
|
154
156
|
}
|
|
155
157
|
});
|
|
156
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* The expression a scalar field is read through, the plain column by default. MariaDB reads a
|
|
161
|
+
* vector column back with `VEC_ToText`, since selecting it raw yields its binary form.
|
|
162
|
+
*/
|
|
163
|
+
selectFieldExpr(escapedColumn, _field) {
|
|
164
|
+
return escapedColumn;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* The `$text` full-text predicate, which every engine spells differently: `MATCH ... AGAINST`
|
|
168
|
+
* (MySQL family), `to_tsvector @@ websearch_to_tsquery` (Postgres-wire), an FTS5 `MATCH` against
|
|
169
|
+
* the table itself (SQLite). No portable form exists, so a dialect without one says so here rather
|
|
170
|
+
* than inheriting another engine's syntax.
|
|
171
|
+
*/
|
|
172
|
+
appendTextSearch(_ctx, _entity, _meta, _search) {
|
|
173
|
+
throw new TypeError(`${this.dialectName} does not support $text full-text search`);
|
|
174
|
+
}
|
|
157
175
|
select(ctx, entity, select, exclude, populate, opts = {}, distinct, sort) {
|
|
158
176
|
const meta = getMeta(entity);
|
|
159
177
|
const tableName = this.resolveTableName(entity, meta);
|
|
@@ -239,9 +257,8 @@ export class AbstractSqlDialect extends VectorSqlDialect {
|
|
|
239
257
|
}
|
|
240
258
|
where(ctx, entity, where = {}, opts = {}) {
|
|
241
259
|
const meta = getMeta(entity);
|
|
242
|
-
//
|
|
243
|
-
|
|
244
|
-
this.renderWhere(ctx, entity, whereMap, opts);
|
|
260
|
+
// Filters are applied once, here at the scope entry point; recursion uses `renderWhere`.
|
|
261
|
+
this.renderWhere(ctx, entity, this.scopedWhereMap(meta, where, opts), opts);
|
|
245
262
|
}
|
|
246
263
|
/** Renders a `$where` tree without applying entity filters (used for same-scope `$and`/`$or` recursion). */
|
|
247
264
|
renderWhere(ctx, entity, where = {}, opts = {}) {
|
|
@@ -297,16 +314,7 @@ export class AbstractSqlDialect extends VectorSqlDialect {
|
|
|
297
314
|
return;
|
|
298
315
|
}
|
|
299
316
|
if (key === '$text') {
|
|
300
|
-
|
|
301
|
-
const searchFields = search.$fields ?? getFieldKeys(meta.fields);
|
|
302
|
-
const fields = searchFields.map((fKey) => {
|
|
303
|
-
const field = meta.fields[fKey];
|
|
304
|
-
const columnName = this.resolveColumnName(fKey, field);
|
|
305
|
-
return this.escapeId(columnName);
|
|
306
|
-
});
|
|
307
|
-
ctx.append(`MATCH(${fields.join(', ')}) AGAINST(`);
|
|
308
|
-
ctx.addValue(search.$value);
|
|
309
|
-
ctx.append(')');
|
|
317
|
+
this.appendTextSearch(ctx, entity, meta, val);
|
|
310
318
|
return;
|
|
311
319
|
}
|
|
312
320
|
if (key === '$and' || key === '$or' || key === '$not' || key === '$nor') {
|
|
@@ -322,13 +330,11 @@ export class AbstractSqlDialect extends VectorSqlDialect {
|
|
|
322
330
|
if (key.includes('.')) {
|
|
323
331
|
throw new TypeError(`path ${key} does not exist in ${meta.name}`);
|
|
324
332
|
}
|
|
325
|
-
// Detect relation filtering
|
|
326
333
|
const rel = meta.relations[key];
|
|
327
334
|
if (rel) {
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
this.compareRelationSize(ctx, entity, key, valObj['$size'], rel, opts);
|
|
335
|
+
const sizeVal = parseRelationSize(val);
|
|
336
|
+
if (sizeVal !== undefined) {
|
|
337
|
+
this.compareRelationSize(ctx, entity, key, sizeVal, rel, opts);
|
|
332
338
|
return;
|
|
333
339
|
}
|
|
334
340
|
this.compareRelation(ctx, entity, key, val, rel, opts);
|
|
@@ -382,6 +388,8 @@ export class AbstractSqlDialect extends VectorSqlDialect {
|
|
|
382
388
|
}
|
|
383
389
|
}
|
|
384
390
|
/** Simple comparison operators: `getComparisonKey → op → addValue`. */
|
|
391
|
+
/** Memoizes {@link escapedColumnName}; see there for why it is per dialect instance. */
|
|
392
|
+
escapedColumns = new WeakMap();
|
|
385
393
|
static NEGATE_OP_MAP = new Map([
|
|
386
394
|
['$not', '$and'],
|
|
387
395
|
['$nor', '$or'],
|
|
@@ -797,9 +805,7 @@ export class AbstractSqlDialect extends VectorSqlDialect {
|
|
|
797
805
|
if (!sqlFn) {
|
|
798
806
|
throw TypeError(`unsupported aggregate operator: ${entry.op}`);
|
|
799
807
|
}
|
|
800
|
-
const sqlArg = entry.fieldRef === '*'
|
|
801
|
-
? '*'
|
|
802
|
-
: this.escapeId(this.resolveColumnName(entry.fieldRef, meta.fields[entry.fieldRef]));
|
|
808
|
+
const sqlArg = entry.fieldRef === '*' ? '*' : this.escapeId(this.columnOf(meta, entry.fieldRef));
|
|
803
809
|
const expr = `${sqlFn}(${entry.distinct ? 'DISTINCT ' : ''}${sqlArg})`;
|
|
804
810
|
aggregateExpressions[entry.alias] = expr;
|
|
805
811
|
selectParts.push(`${expr} ${this.escapeId(entry.alias)}`);
|
|
@@ -860,7 +866,8 @@ export class AbstractSqlDialect extends VectorSqlDialect {
|
|
|
860
866
|
}
|
|
861
867
|
return direction;
|
|
862
868
|
}
|
|
863
|
-
|
|
869
|
+
/** Scalar comparison operators shared by `HAVING` conditions and `$size` comparisons. */
|
|
870
|
+
static comparisonOpMap = new Map([
|
|
864
871
|
['$eq', '='],
|
|
865
872
|
['$ne', '<>'],
|
|
866
873
|
['$gt', '>'],
|
|
@@ -900,7 +907,7 @@ export class AbstractSqlDialect extends VectorSqlDialect {
|
|
|
900
907
|
ctx.append(this.neExpr(expr, this.addValue(ctx.values, val)));
|
|
901
908
|
}
|
|
902
909
|
else {
|
|
903
|
-
const sqlOp = AbstractSqlDialect.
|
|
910
|
+
const sqlOp = AbstractSqlDialect.comparisonOpMap.get(op);
|
|
904
911
|
if (!sqlOp)
|
|
905
912
|
throw TypeError(`unsupported HAVING operator: ${op}`);
|
|
906
913
|
ctx.append(`${expr} ${sqlOp} `);
|
|
@@ -913,32 +920,58 @@ export class AbstractSqlDialect extends VectorSqlDialect {
|
|
|
913
920
|
this.search(ctx, entity, q, opts);
|
|
914
921
|
}
|
|
915
922
|
insert(ctx, entity, payload, opts) {
|
|
923
|
+
this.appendInsertValues(ctx, entity, payload, opts);
|
|
924
|
+
// Every engine whose ids come back from the statement itself wants the same clause, so it is
|
|
925
|
+
// appended once here instead of in an identical `insert` override per dialect.
|
|
926
|
+
if (this.insertIdSource === 'returning') {
|
|
927
|
+
ctx.append(` ${this.returningId(entity)}`);
|
|
928
|
+
}
|
|
929
|
+
}
|
|
930
|
+
/**
|
|
931
|
+
* `INSERT INTO ... VALUES (...)` and nothing more. The upsert builders extend this rather than
|
|
932
|
+
* {@link insert}: their own clause has to come before the `RETURNING`, not after it.
|
|
933
|
+
*/
|
|
934
|
+
appendInsertValues(ctx, entity, payload, opts) {
|
|
916
935
|
const meta = getMeta(entity);
|
|
917
936
|
const payloads = fillOnFields(meta, payload, 'onInsert');
|
|
918
937
|
const keys = getInsertFieldKeys(meta, payloads);
|
|
919
|
-
|
|
938
|
+
// Resolve each key's field and escaped column once, then index into them: re-reading
|
|
939
|
+
// `meta.fields[key]` per record cost 40 redundant lookups on a 10-row, 4-column insert.
|
|
940
|
+
const width = keys.length;
|
|
941
|
+
const fields = new Array(width);
|
|
942
|
+
const columns = new Array(width);
|
|
943
|
+
const kinds = new Array(width);
|
|
944
|
+
for (let i = 0; i < width; i++) {
|
|
945
|
+
const key = keys[i];
|
|
920
946
|
const field = meta.fields[key];
|
|
921
|
-
|
|
922
|
-
|
|
947
|
+
fields[i] = field;
|
|
948
|
+
columns[i] = this.escapedColumnName(meta, key);
|
|
949
|
+
kinds[i] = this.persistKind(field);
|
|
950
|
+
}
|
|
923
951
|
const tableName = this.resolveTableName(entity, meta);
|
|
924
952
|
ctx.append(`INSERT INTO ${this.escapeId(tableName)} (${columns.join(', ')}) VALUES (`);
|
|
925
|
-
payloads.
|
|
926
|
-
if (
|
|
953
|
+
for (let r = 0; r < payloads.length; r++) {
|
|
954
|
+
if (r > 0) {
|
|
927
955
|
ctx.append('), (');
|
|
928
956
|
}
|
|
929
|
-
|
|
930
|
-
|
|
957
|
+
const record = payloads[r];
|
|
958
|
+
for (let i = 0; i < width; i++) {
|
|
959
|
+
if (i > 0) {
|
|
931
960
|
ctx.append(', ');
|
|
932
961
|
}
|
|
933
|
-
const
|
|
934
|
-
if (
|
|
935
|
-
this.appendDefaultInsertValue(ctx,
|
|
962
|
+
const value = record[keys[i]];
|
|
963
|
+
if (value === undefined) {
|
|
964
|
+
this.appendDefaultInsertValue(ctx, fields[i]);
|
|
965
|
+
}
|
|
966
|
+
else if (kinds[i] === 'plain' && !(value instanceof QueryRaw)) {
|
|
967
|
+
// The overwhelmingly common case in a bulk insert, so it binds without a dispatch.
|
|
968
|
+
ctx.addValue(value);
|
|
936
969
|
}
|
|
937
970
|
else {
|
|
938
|
-
this.
|
|
971
|
+
this.writePersistableValue(ctx, kinds[i], fields[i], value);
|
|
939
972
|
}
|
|
940
|
-
}
|
|
941
|
-
}
|
|
973
|
+
}
|
|
974
|
+
}
|
|
942
975
|
ctx.append(')');
|
|
943
976
|
}
|
|
944
977
|
/**
|
|
@@ -955,13 +988,13 @@ export class AbstractSqlDialect extends VectorSqlDialect {
|
|
|
955
988
|
const keys = filterFieldKeys(meta, filledPayload, 'onUpdate');
|
|
956
989
|
const tableName = this.resolveTableName(entity, meta);
|
|
957
990
|
ctx.append(`UPDATE ${this.escapeId(tableName)} SET `);
|
|
958
|
-
keys.
|
|
959
|
-
if (
|
|
991
|
+
for (let i = 0; i < keys.length; i++) {
|
|
992
|
+
if (i > 0) {
|
|
960
993
|
ctx.append(', ');
|
|
961
994
|
}
|
|
995
|
+
const key = keys[i];
|
|
962
996
|
const field = meta.fields[key];
|
|
963
|
-
const
|
|
964
|
-
const escapedCol = this.escapeId(columnName);
|
|
997
|
+
const escapedCol = this.escapedColumnName(meta, key);
|
|
965
998
|
const value = filledPayload[key];
|
|
966
999
|
if (isJsonUpdateOp(value)) {
|
|
967
1000
|
this.formatJsonUpdate(ctx, escapedCol, value, field);
|
|
@@ -970,7 +1003,7 @@ export class AbstractSqlDialect extends VectorSqlDialect {
|
|
|
970
1003
|
ctx.append(`${escapedCol} = `);
|
|
971
1004
|
this.formatPersistableValue(ctx, field, value);
|
|
972
1005
|
}
|
|
973
|
-
}
|
|
1006
|
+
}
|
|
974
1007
|
this.search(ctx, entity, q, opts);
|
|
975
1008
|
}
|
|
976
1009
|
upsert(ctx, entity, conflictPaths, payload) {
|
|
@@ -978,13 +1011,13 @@ export class AbstractSqlDialect extends VectorSqlDialect {
|
|
|
978
1011
|
const updateCtx = this.createContext();
|
|
979
1012
|
const update = this.getUpsertUpdateAssignments(updateCtx, meta, conflictPaths, payload, (name) => `VALUES(${name})`);
|
|
980
1013
|
if (update) {
|
|
981
|
-
this.
|
|
1014
|
+
this.appendInsertValues(ctx, entity, payload);
|
|
982
1015
|
ctx.append(` ON DUPLICATE KEY UPDATE ${update}`);
|
|
983
1016
|
ctx.pushValue(...updateCtx.values);
|
|
984
1017
|
}
|
|
985
1018
|
else {
|
|
986
1019
|
const insertCtx = this.createContext();
|
|
987
|
-
this.
|
|
1020
|
+
this.appendInsertValues(insertCtx, entity, payload);
|
|
988
1021
|
ctx.append(insertCtx.sql.replace(/^INSERT/, 'INSERT IGNORE'));
|
|
989
1022
|
ctx.pushValue(...insertCtx.values);
|
|
990
1023
|
}
|
|
@@ -1039,21 +1072,46 @@ export class AbstractSqlDialect extends VectorSqlDialect {
|
|
|
1039
1072
|
escapeId(val, forbidQualified, addDot) {
|
|
1040
1073
|
return escapeSqlId(val, this.escapeIdChar, forbidQualified, addDot);
|
|
1041
1074
|
}
|
|
1075
|
+
/**
|
|
1076
|
+
* Bind one persisted value, classifying its column on the spot. Dialects override
|
|
1077
|
+
* {@link appendJsonValue} and {@link appendVectorValue} rather than this, so the chain runs once per
|
|
1078
|
+
* value - overriding this and delegating back to `super` ran every check twice, measurably slowing
|
|
1079
|
+
* every INSERT/UPDATE.
|
|
1080
|
+
*/
|
|
1042
1081
|
formatPersistableValue(ctx, field, value) {
|
|
1082
|
+
this.writePersistableValue(ctx, this.persistKind(field), field, value);
|
|
1083
|
+
}
|
|
1084
|
+
/**
|
|
1085
|
+
* How a column's values are written. A function of the column, not of the value, so a bulk insert
|
|
1086
|
+
* classifies each column once instead of re-deciding per row: a 20-row, 6-column insert asked
|
|
1087
|
+
* `isJsonType` and `isVectorFieldType` 120 times to get the same six answers.
|
|
1088
|
+
*/
|
|
1089
|
+
persistKind(field) {
|
|
1090
|
+
const type = field?.type;
|
|
1091
|
+
if (isJsonType(type)) {
|
|
1092
|
+
return 'json';
|
|
1093
|
+
}
|
|
1094
|
+
return isVectorFieldType(type) ? 'vector' : 'plain';
|
|
1095
|
+
}
|
|
1096
|
+
/** The one type dispatch for a persisted value, over a column kind decided by the caller. */
|
|
1097
|
+
writePersistableValue(ctx, kind, field, value) {
|
|
1043
1098
|
if (value instanceof QueryRaw) {
|
|
1044
1099
|
this.getRawValue(ctx, { value });
|
|
1045
1100
|
return;
|
|
1046
1101
|
}
|
|
1047
|
-
if (
|
|
1048
|
-
|
|
1102
|
+
if (kind === 'json') {
|
|
1103
|
+
this.appendJsonValue(ctx, value, field?.type);
|
|
1049
1104
|
return;
|
|
1050
1105
|
}
|
|
1051
|
-
if (
|
|
1052
|
-
|
|
1106
|
+
if (kind === 'vector' && Array.isArray(value)) {
|
|
1107
|
+
this.appendVectorValue(ctx, value, field);
|
|
1053
1108
|
return;
|
|
1054
1109
|
}
|
|
1055
1110
|
ctx.addValue(value);
|
|
1056
1111
|
}
|
|
1112
|
+
appendJsonValue(ctx, value, _type) {
|
|
1113
|
+
ctx.addValue(value == null ? null : JSON.stringify(value));
|
|
1114
|
+
}
|
|
1057
1115
|
/**
|
|
1058
1116
|
* Reads `operand` as a JSON value. Passing the `?` placeholder yields the cast for a bound
|
|
1059
1117
|
* parameter, and passing an expression re-reads text as JSON - the same SQL either way, which is
|
|
@@ -1208,97 +1266,85 @@ export class AbstractSqlDialect extends VectorSqlDialect {
|
|
|
1208
1266
|
return { $eq: val };
|
|
1209
1267
|
}
|
|
1210
1268
|
/**
|
|
1211
|
-
*
|
|
1212
|
-
*
|
|
1269
|
+
* A field key's mapped column (`@Field({ name })`), escaped, memoized per dialect instance: field
|
|
1270
|
+
* metadata is shared between dialects while this result is not, since `escapeIdChar` and the naming
|
|
1271
|
+
* strategy differ. Weakly keyed so a transient entity's metadata stays collectable.
|
|
1213
1272
|
*/
|
|
1273
|
+
escapedColumnName(meta, key) {
|
|
1274
|
+
const field = meta.fields[key];
|
|
1275
|
+
if (!field) {
|
|
1276
|
+
return this.escapeId(this.columnOf(meta, key));
|
|
1277
|
+
}
|
|
1278
|
+
let escaped = this.escapedColumns.get(field);
|
|
1279
|
+
if (escaped === undefined) {
|
|
1280
|
+
escaped = this.escapeId(this.columnOf(meta, key));
|
|
1281
|
+
this.escapedColumns.set(field, escaped);
|
|
1282
|
+
}
|
|
1283
|
+
return escaped;
|
|
1284
|
+
}
|
|
1285
|
+
escapedColumn(table, meta, key) {
|
|
1286
|
+
return this.escapeId(table, false, true) + this.escapedColumnName(meta, key);
|
|
1287
|
+
}
|
|
1288
|
+
/** As {@link escapedColumn}, but qualified by the query alias when the parent is nested. */
|
|
1289
|
+
escapedParentColumn(parentTable, meta, opts, key) {
|
|
1290
|
+
return opts.prefix
|
|
1291
|
+
? this.escapeId(opts.prefix, true, true) + this.escapedColumnName(meta, key)
|
|
1292
|
+
: this.escapedColumn(parentTable, meta, key);
|
|
1293
|
+
}
|
|
1214
1294
|
/**
|
|
1215
|
-
* The
|
|
1216
|
-
*
|
|
1217
|
-
*
|
|
1218
|
-
*
|
|
1295
|
+
* The single path from a relation operator to its target, so none can emit an unscoped subquery:
|
|
1296
|
+
* the target's `$where` is merged with its active filters, making a trashed or out-of-scope row
|
|
1297
|
+
* invisible here just as it is to a joined `$populate`. The caller's filter bypass is deliberately
|
|
1298
|
+
* not propagated (`withDeleted()` does not reach into relations), matching `selectRelationJoins`.
|
|
1219
1299
|
*/
|
|
1220
|
-
|
|
1300
|
+
appendRelationSubquery(ctx, entity, key, rel, opts, projection, val) {
|
|
1221
1301
|
const meta = getMeta(entity);
|
|
1222
1302
|
const parentTable = this.resolveTableName(entity, meta);
|
|
1223
1303
|
if (!rel.references?.length) {
|
|
1224
1304
|
throw new TypeError(`Relation '${key}' on '${parentTable}' has no references defined`);
|
|
1225
1305
|
}
|
|
1226
|
-
const escapedParentId = (opts.prefix ? this.escapeId(opts.prefix, true, true) : this.escapeId(parentTable, false, true)) +
|
|
1227
|
-
this.escapeId(meta.id);
|
|
1228
|
-
return { parentTable, escapedParentId };
|
|
1229
|
-
}
|
|
1230
|
-
compareRelation(ctx, entity, key, val, rel, opts) {
|
|
1231
|
-
const { parentTable, escapedParentId } = this.resolveRelationParent(entity, key, rel, opts);
|
|
1232
1306
|
const references = rel.references;
|
|
1307
|
+
const escapedParentId = this.escapedParentColumn(parentTable, meta, opts, meta.id);
|
|
1233
1308
|
const relatedEntity = rel.entity();
|
|
1234
1309
|
const relatedMeta = getMeta(relatedEntity);
|
|
1235
1310
|
const relatedTable = this.resolveTableName(relatedEntity, relatedMeta);
|
|
1236
|
-
|
|
1311
|
+
// Resolved before any SQL is emitted: it also decides whether the mm form reaches the target.
|
|
1312
|
+
const targetWhere = this.scopedWhereMap(relatedMeta, val);
|
|
1313
|
+
ctx.append(`(SELECT ${projection} FROM `);
|
|
1237
1314
|
if (rel.cardinality === 'mm' && rel.through) {
|
|
1238
|
-
// ManyToMany: EXISTS (SELECT 1 FROM JunctionTable WHERE junction.localFk = parent.id AND junction.foreignFk IN (SELECT related.id FROM Related WHERE ...))
|
|
1239
1315
|
const throughEntity = rel.through();
|
|
1240
1316
|
const throughMeta = getMeta(throughEntity);
|
|
1241
1317
|
const throughTable = this.resolveTableName(throughEntity, throughMeta);
|
|
1242
|
-
const localFk = references[0].local;
|
|
1243
|
-
const foreignFk = references[1].local;
|
|
1244
|
-
const relatedId = relatedMeta.id;
|
|
1245
1318
|
ctx.append(this.escapeId(throughTable));
|
|
1246
|
-
ctx.append(` WHERE ${this.
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1319
|
+
ctx.append(` WHERE ${this.escapedColumn(throughTable, throughMeta, references[0].local)} = ${escapedParentId}`);
|
|
1320
|
+
// The junction is a row being read too: a soft-deleted link is not a link.
|
|
1321
|
+
this.where(ctx, throughEntity, {}, { prefix: throughTable, clause: 'AND' });
|
|
1322
|
+
if (hasKeys(targetWhere)) {
|
|
1323
|
+
ctx.append(` AND ${this.escapedColumn(throughTable, throughMeta, references[1].local)} IN (`);
|
|
1324
|
+
ctx.append(`SELECT ${this.escapedColumn(relatedTable, relatedMeta, relatedMeta.id)} FROM ${this.escapeId(relatedTable)}`);
|
|
1325
|
+
this.renderWhere(ctx, relatedEntity, targetWhere, { prefix: relatedTable, clause: 'WHERE' });
|
|
1326
|
+
ctx.append(')');
|
|
1327
|
+
}
|
|
1255
1328
|
}
|
|
1256
1329
|
else {
|
|
1257
|
-
|
|
1258
|
-
// Left side is always relatedTable.references[0].foreign
|
|
1259
|
-
// Right side is the parent's PK (1m) or the parent's FK (m1/11)
|
|
1260
|
-
const joinLeft = `${this.escapeId(relatedTable, false, true)}${this.escapeId(references[0].foreign)}`;
|
|
1330
|
+
const joinLeft = this.escapedColumn(relatedTable, relatedMeta, references[0].foreign);
|
|
1261
1331
|
const joinRight = rel.cardinality === '1m'
|
|
1262
1332
|
? escapedParentId
|
|
1263
|
-
:
|
|
1264
|
-
this.escapeId(references[0].local);
|
|
1333
|
+
: this.escapedParentColumn(parentTable, meta, opts, references[0].local);
|
|
1265
1334
|
ctx.append(this.escapeId(relatedTable));
|
|
1266
1335
|
ctx.append(` WHERE ${joinLeft} = ${joinRight}`);
|
|
1267
|
-
this.
|
|
1268
|
-
prefix: relatedTable,
|
|
1269
|
-
clause: 'AND',
|
|
1270
|
-
filters: { softDelete: false },
|
|
1271
|
-
});
|
|
1336
|
+
this.renderWhere(ctx, relatedEntity, targetWhere, { prefix: relatedTable, clause: 'AND' });
|
|
1272
1337
|
}
|
|
1273
1338
|
ctx.append(')');
|
|
1274
1339
|
}
|
|
1275
|
-
/**
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1340
|
+
/** Filter by relation: a parent matches when {@link appendRelationSubquery} finds one target row. */
|
|
1341
|
+
compareRelation(ctx, entity, key, val, rel, opts) {
|
|
1342
|
+
ctx.append('EXISTS ');
|
|
1343
|
+
this.appendRelationSubquery(ctx, entity, key, rel, opts, '1', val);
|
|
1344
|
+
}
|
|
1345
|
+
/** Filter by relation size: the same subquery, counting instead of testing for existence. */
|
|
1279
1346
|
compareRelationSize(ctx, entity, key, sizeVal, rel, opts) {
|
|
1280
|
-
|
|
1281
|
-
const appendSubquery = () => {
|
|
1282
|
-
ctx.append('(SELECT COUNT(*) FROM ');
|
|
1283
|
-
if (rel.cardinality === 'mm' && rel.through) {
|
|
1284
|
-
const throughEntity = rel.through();
|
|
1285
|
-
const throughMeta = getMeta(throughEntity);
|
|
1286
|
-
const throughTable = this.resolveTableName(throughEntity, throughMeta);
|
|
1287
|
-
const localFk = rel.references[0].local;
|
|
1288
|
-
ctx.append(this.escapeId(throughTable));
|
|
1289
|
-
ctx.append(` WHERE ${this.escapeId(throughTable, false, true)}${this.escapeId(localFk)} = ${escapedParentId}`);
|
|
1290
|
-
}
|
|
1291
|
-
else {
|
|
1292
|
-
const relatedEntity = rel.entity();
|
|
1293
|
-
const relatedMeta = getMeta(relatedEntity);
|
|
1294
|
-
const relatedTable = this.resolveTableName(relatedEntity, relatedMeta);
|
|
1295
|
-
const joinLeft = `${this.escapeId(relatedTable, false, true)}${this.escapeId(rel.references[0].foreign)}`;
|
|
1296
|
-
ctx.append(this.escapeId(relatedTable));
|
|
1297
|
-
ctx.append(` WHERE ${joinLeft} = ${escapedParentId}`);
|
|
1298
|
-
}
|
|
1299
|
-
ctx.append(')');
|
|
1300
|
-
};
|
|
1301
|
-
this.buildSizeComparison(ctx, appendSubquery, sizeVal);
|
|
1347
|
+
this.buildSizeComparison(ctx, () => this.appendRelationSubquery(ctx, entity, key, rel, opts, 'COUNT(*)', {}), sizeVal);
|
|
1302
1348
|
}
|
|
1303
1349
|
/**
|
|
1304
1350
|
* Build a complete `$size` comparison expression.
|
|
@@ -1331,42 +1377,20 @@ export class AbstractSqlDialect extends VectorSqlDialect {
|
|
|
1331
1377
|
* Append a single size comparison operator and value to the context.
|
|
1332
1378
|
*/
|
|
1333
1379
|
appendSizeOp(ctx, op, val) {
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
ctx.addValue(val);
|
|
1346
|
-
break;
|
|
1347
|
-
case '$gte':
|
|
1348
|
-
ctx.append(' >= ');
|
|
1349
|
-
ctx.addValue(val);
|
|
1350
|
-
break;
|
|
1351
|
-
case '$lt':
|
|
1352
|
-
ctx.append(' < ');
|
|
1353
|
-
ctx.addValue(val);
|
|
1354
|
-
break;
|
|
1355
|
-
case '$lte':
|
|
1356
|
-
ctx.append(' <= ');
|
|
1357
|
-
ctx.addValue(val);
|
|
1358
|
-
break;
|
|
1359
|
-
case '$between': {
|
|
1360
|
-
const [min, max] = val;
|
|
1361
|
-
ctx.append(' BETWEEN ');
|
|
1362
|
-
ctx.addValue(min);
|
|
1363
|
-
ctx.append(' AND ');
|
|
1364
|
-
ctx.addValue(max);
|
|
1365
|
-
break;
|
|
1366
|
-
}
|
|
1367
|
-
default:
|
|
1368
|
-
throw TypeError(`unsupported $size comparison operator: ${op}`);
|
|
1380
|
+
if (op === '$between') {
|
|
1381
|
+
const [min, max] = val;
|
|
1382
|
+
ctx.append(' BETWEEN ');
|
|
1383
|
+
ctx.addValue(min);
|
|
1384
|
+
ctx.append(' AND ');
|
|
1385
|
+
ctx.addValue(max);
|
|
1386
|
+
return;
|
|
1387
|
+
}
|
|
1388
|
+
const sqlOp = AbstractSqlDialect.comparisonOpMap.get(op);
|
|
1389
|
+
if (!sqlOp) {
|
|
1390
|
+
throw TypeError(`unsupported $size comparison operator: ${op}`);
|
|
1369
1391
|
}
|
|
1392
|
+
ctx.append(` ${sqlOp} `);
|
|
1393
|
+
ctx.addValue(val);
|
|
1370
1394
|
}
|
|
1371
1395
|
/** ANSI-style single-quote escaping. MySQL-family dialects override this for backslash escaping. */
|
|
1372
1396
|
escape(value) {
|
|
@@ -1408,4 +1432,3 @@ export class AbstractSqlDialect extends VectorSqlDialect {
|
|
|
1408
1432
|
return this.dialectName;
|
|
1409
1433
|
}
|
|
1410
1434
|
}
|
|
1411
|
-
//# sourceMappingURL=abstractSqlDialect.js.map
|
package/dist/dialect/index.d.ts
CHANGED
|
@@ -4,6 +4,6 @@ export { PostgresDialect } from '../postgres/postgresDialect.js';
|
|
|
4
4
|
export { SqliteDialect } from '../sqlite/sqliteDialect.js';
|
|
5
5
|
export * from './abstractDialect.js';
|
|
6
6
|
export * from './abstractSqlDialect.js';
|
|
7
|
+
export * from './indexSqlDialect.js';
|
|
7
8
|
export * from './mysqlLikeSqlDialect.js';
|
|
8
9
|
export * from './queryContext.js';
|
|
9
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/dialect/index.js
CHANGED
|
@@ -4,6 +4,6 @@ export { PostgresDialect } from '../postgres/postgresDialect.js';
|
|
|
4
4
|
export { SqliteDialect } from '../sqlite/sqliteDialect.js';
|
|
5
5
|
export * from './abstractDialect.js';
|
|
6
6
|
export * from './abstractSqlDialect.js';
|
|
7
|
+
export * from './indexSqlDialect.js';
|
|
7
8
|
export * from './mysqlLikeSqlDialect.js';
|
|
8
9
|
export * from './queryContext.js';
|
|
9
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { type IndexColumnSchema, type IndexFeature, type IndexSchema } from '../type/index.js';
|
|
2
|
+
import { VectorSqlDialect } from './vectorSqlDialect.js';
|
|
3
|
+
/**
|
|
4
|
+
* `CREATE INDEX` for SQL dialects: the statement and the fragments each engine spells differently.
|
|
5
|
+
*
|
|
6
|
+
* A layer of its own for the same reason as {@link VectorSqlDialect} below it - it needs only
|
|
7
|
+
* `escapeId` and `features.indexIfNotExists` from the SQL dialect above, so keeping it here spares
|
|
8
|
+
* that 2000-line class thirteen more members. What each engine can express at all is data
|
|
9
|
+
* ({@link indexFeatures}), validated once, rather than a throw per feature per dialect.
|
|
10
|
+
*/
|
|
11
|
+
export declare abstract class IndexSqlDialect extends VectorSqlDialect {
|
|
12
|
+
/**
|
|
13
|
+
* The `CREATE INDEX` statement for this dialect. The form here is the portable one, which SQLite
|
|
14
|
+
* (and so libSQL, Turso and D1) takes verbatim: no access-method clause, no operator classes, no
|
|
15
|
+
* tuning parameters. Dialects that have those override the fragments below rather than this.
|
|
16
|
+
*/
|
|
17
|
+
getCreateIndexStatement(tableName: string, index: IndexSchema, opts?: {
|
|
18
|
+
ifNotExists?: boolean;
|
|
19
|
+
}): string;
|
|
20
|
+
/**
|
|
21
|
+
* Index features this dialect can express. Everything here is supported by at least one engine and
|
|
22
|
+
* refused by at least one other, so an index asking for a missing one is rejected rather than
|
|
23
|
+
* emitted: each of them is a hard error at the server, not a slower plan.
|
|
24
|
+
*/
|
|
25
|
+
protected readonly indexFeatures: ReadonlySet<IndexFeature>;
|
|
26
|
+
private assertIndexFeatures;
|
|
27
|
+
/**
|
|
28
|
+
* The column-level declaration for a vector index that lives inside `CREATE TABLE` rather than in
|
|
29
|
+
* its own statement, which the `inlineVectorIndex` feature flags. Only MariaDB has one.
|
|
30
|
+
*/
|
|
31
|
+
getInlineVectorIndexDeclaration(index: IndexSchema): string;
|
|
32
|
+
/** Only CockroachDB's native vector index replaces the `INDEX` keyword. */
|
|
33
|
+
protected indexKeyword(_index: IndexSchema): string;
|
|
34
|
+
/** One index entry: what is indexed, its operator class if any, then its stored order. */
|
|
35
|
+
protected indexColumn(entry: IndexColumnSchema, index: IndexSchema): string;
|
|
36
|
+
/**
|
|
37
|
+
* A quoted column, optionally prefix-limited, or an expression in its own parentheses - the form
|
|
38
|
+
* `((lower("email")))` that MySQL requires and Postgres, CockroachDB and SQLite all accept, so one
|
|
39
|
+
* rendering serves every engine that has expression indexes.
|
|
40
|
+
*/
|
|
41
|
+
protected indexColumnTarget(entry: IndexColumnSchema): string;
|
|
42
|
+
/** Postgres-wire dialects put a vector or user-declared operator class here. */
|
|
43
|
+
protected indexColumnOpsClass(_entry: IndexColumnSchema, _index: IndexSchema): string;
|
|
44
|
+
/** `ASC` is every engine's default, so only `DESC` is worth emitting. */
|
|
45
|
+
protected indexColumnOrder(entry: IndexColumnSchema): string;
|
|
46
|
+
/** ` INCLUDE (...)`: non-key columns stored for index-only scans. Postgres-wire only. */
|
|
47
|
+
protected indexInclude(_index: IndexSchema): string;
|
|
48
|
+
/** ` USING <method>`, which SQLite's grammar has no place for at all. */
|
|
49
|
+
protected indexAccessMethod(_index: IndexSchema): string;
|
|
50
|
+
/** pgvector's ` WITH (m = ..., ef_construction = ..., lists = ...)`. */
|
|
51
|
+
protected indexTuning(_index: IndexSchema): string;
|
|
52
|
+
/**
|
|
53
|
+
* The partial-index predicate. Dialects without partial indexes throw instead of dropping it:
|
|
54
|
+
* silently widening a partial unique index changes which rows the database accepts.
|
|
55
|
+
*/
|
|
56
|
+
protected indexPredicate(index: IndexSchema): string;
|
|
57
|
+
}
|