neoorm 0.8.0 → 0.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -6
- package/dist/bin/neoorm.d.ts +1 -1
- package/dist/bin/neoorm.d.ts.map +1 -1
- package/dist/bin/neoorm.js +148 -75
- package/dist/bin/neoorm.js.map +1 -1
- package/dist/codegen/diff-manifest.d.ts.map +1 -1
- package/dist/codegen/diff-manifest.js +106 -4
- package/dist/codegen/diff-manifest.js.map +1 -1
- package/dist/codegen/generate-summary.d.ts +5 -1
- package/dist/codegen/generate-summary.d.ts.map +1 -1
- package/dist/codegen/generate-summary.js +10 -1
- package/dist/codegen/generate-summary.js.map +1 -1
- package/dist/codegen/generate.d.ts +24 -4
- package/dist/codegen/generate.d.ts.map +1 -1
- package/dist/codegen/generate.js +150 -13
- package/dist/codegen/generate.js.map +1 -1
- package/dist/codegen/manifest-relations.d.ts +2 -0
- package/dist/codegen/manifest-relations.d.ts.map +1 -1
- package/dist/codegen/manifest-relations.js +2 -1
- package/dist/codegen/manifest-relations.js.map +1 -1
- package/dist/codegen/schema-to-manifest.d.ts +1 -1
- package/dist/codegen/schema-to-manifest.d.ts.map +1 -1
- package/dist/codegen/schema-to-manifest.js +349 -29
- package/dist/codegen/schema-to-manifest.js.map +1 -1
- package/dist/codegen/validation/emit-elysia.d.ts +4 -0
- package/dist/codegen/validation/emit-elysia.d.ts.map +1 -0
- package/dist/codegen/validation/emit-elysia.js +304 -0
- package/dist/codegen/validation/emit-elysia.js.map +1 -0
- package/dist/codegen/validation/emit-typebox.d.ts +4 -0
- package/dist/codegen/validation/emit-typebox.d.ts.map +1 -0
- package/dist/codegen/validation/emit-typebox.js +360 -0
- package/dist/codegen/validation/emit-typebox.js.map +1 -0
- package/dist/codegen/validation/emit-zod.d.ts +4 -0
- package/dist/codegen/validation/emit-zod.d.ts.map +1 -0
- package/dist/codegen/validation/emit-zod.js +288 -0
- package/dist/codegen/validation/emit-zod.js.map +1 -0
- package/dist/codegen/validation/from-manifest.d.ts +5 -0
- package/dist/codegen/validation/from-manifest.d.ts.map +1 -0
- package/dist/codegen/validation/from-manifest.js +284 -0
- package/dist/codegen/validation/from-manifest.js.map +1 -0
- package/dist/codegen/validation/infer.d.ts +47 -0
- package/dist/codegen/validation/infer.d.ts.map +1 -0
- package/dist/codegen/validation/infer.js +2 -0
- package/dist/codegen/validation/infer.js.map +1 -0
- package/dist/codegen/validation/json-generic-types.d.ts +7 -0
- package/dist/codegen/validation/json-generic-types.d.ts.map +1 -0
- package/dist/codegen/validation/json-generic-types.js +295 -0
- package/dist/codegen/validation/json-generic-types.js.map +1 -0
- package/dist/codegen/validation/types.d.ts +84 -0
- package/dist/codegen/validation/types.d.ts.map +1 -0
- package/dist/codegen/validation/types.js +6 -0
- package/dist/codegen/validation/types.js.map +1 -0
- package/dist/config.d.ts +8 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +30 -0
- package/dist/config.js.map +1 -1
- package/dist/datasource-provider.d.ts +5 -1
- package/dist/datasource-provider.d.ts.map +1 -1
- package/dist/datasource-provider.js +21 -2
- package/dist/datasource-provider.js.map +1 -1
- package/dist/dialect/column-kind-support.d.ts +9 -0
- package/dist/dialect/column-kind-support.d.ts.map +1 -0
- package/dist/dialect/column-kind-support.js +25 -0
- package/dist/dialect/column-kind-support.js.map +1 -0
- package/dist/dialect/fk.d.ts +30 -1
- package/dist/dialect/fk.d.ts.map +1 -1
- package/dist/dialect/fk.js +113 -0
- package/dist/dialect/fk.js.map +1 -1
- package/dist/dialect/index.d.ts +6 -1
- package/dist/dialect/index.d.ts.map +1 -1
- package/dist/dialect/index.js +5 -0
- package/dist/dialect/index.js.map +1 -1
- package/dist/dialect/mariadb.d.ts +4 -0
- package/dist/dialect/mariadb.d.ts.map +1 -0
- package/dist/dialect/mariadb.js +15 -0
- package/dist/dialect/mariadb.js.map +1 -0
- package/dist/dialect/mariadb.test.d.ts +2 -0
- package/dist/dialect/mariadb.test.d.ts.map +1 -0
- package/dist/dialect/mariadb.test.js +151 -0
- package/dist/dialect/mariadb.test.js.map +1 -0
- package/dist/dialect/mysql-family.d.ts +14 -0
- package/dist/dialect/mysql-family.d.ts.map +1 -0
- package/dist/dialect/mysql-family.js +453 -0
- package/dist/dialect/mysql-family.js.map +1 -0
- package/dist/dialect/mysql.d.ts +6 -0
- package/dist/dialect/mysql.d.ts.map +1 -0
- package/dist/dialect/mysql.js +16 -0
- package/dist/dialect/mysql.js.map +1 -0
- package/dist/dialect/mysql.test.d.ts +2 -0
- package/dist/dialect/mysql.test.d.ts.map +1 -0
- package/dist/dialect/mysql.test.js +211 -0
- package/dist/dialect/mysql.test.js.map +1 -0
- package/dist/dialect/placeholders.d.ts +7 -0
- package/dist/dialect/placeholders.d.ts.map +1 -0
- package/dist/dialect/placeholders.js +18 -0
- package/dist/dialect/placeholders.js.map +1 -0
- package/dist/dialect/postgres.d.ts +2 -1
- package/dist/dialect/postgres.d.ts.map +1 -1
- package/dist/dialect/postgres.js +93 -30
- package/dist/dialect/postgres.js.map +1 -1
- package/dist/dialect/resolve.d.ts +13 -0
- package/dist/dialect/resolve.d.ts.map +1 -0
- package/dist/dialect/resolve.js +66 -0
- package/dist/dialect/resolve.js.map +1 -0
- package/dist/dialect/shared.d.ts +8 -1
- package/dist/dialect/shared.d.ts.map +1 -1
- package/dist/dialect/shared.js +37 -0
- package/dist/dialect/shared.js.map +1 -1
- package/dist/dialect/sqlite.d.ts.map +1 -1
- package/dist/dialect/sqlite.js +50 -18
- package/dist/dialect/sqlite.js.map +1 -1
- package/dist/dialect/sqlite.test.js +43 -1
- package/dist/dialect/sqlite.test.js.map +1 -1
- package/dist/dialect/types.d.ts +60 -3
- package/dist/dialect/types.d.ts.map +1 -1
- package/dist/docs/pages.d.ts.map +1 -1
- package/dist/docs/pages.js +5 -0
- package/dist/docs/pages.js.map +1 -1
- package/dist/docs/render.js +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/init/scaffold.d.ts +2 -1
- package/dist/init/scaffold.d.ts.map +1 -1
- package/dist/init/scaffold.js.map +1 -1
- package/dist/init/templates.d.ts +3 -2
- package/dist/init/templates.d.ts.map +1 -1
- package/dist/init/templates.js +19 -9
- package/dist/init/templates.js.map +1 -1
- package/dist/introspect/group-fks.d.ts +24 -0
- package/dist/introspect/group-fks.d.ts.map +1 -0
- package/dist/introspect/group-fks.js +48 -0
- package/dist/introspect/group-fks.js.map +1 -0
- package/dist/introspect/mysql/to-manifest.d.ts +4 -0
- package/dist/introspect/mysql/to-manifest.d.ts.map +1 -0
- package/dist/introspect/mysql/to-manifest.js +317 -0
- package/dist/introspect/mysql/to-manifest.js.map +1 -0
- package/dist/introspect/pull.d.ts +1 -0
- package/dist/introspect/pull.d.ts.map +1 -1
- package/dist/introspect/pull.js +186 -9
- package/dist/introspect/pull.js.map +1 -1
- package/dist/introspect/queries.d.ts +11 -1
- package/dist/introspect/queries.d.ts.map +1 -1
- package/dist/introspect/queries.js +43 -12
- package/dist/introspect/queries.js.map +1 -1
- package/dist/introspect/sqlite/to-manifest.d.ts.map +1 -1
- package/dist/introspect/sqlite/to-manifest.js +99 -26
- package/dist/introspect/sqlite/to-manifest.js.map +1 -1
- package/dist/introspect/to-manifest.d.ts.map +1 -1
- package/dist/introspect/to-manifest.js +154 -28
- package/dist/introspect/to-manifest.js.map +1 -1
- package/dist/migrate/dev-lock.d.ts +15 -0
- package/dist/migrate/dev-lock.d.ts.map +1 -0
- package/dist/migrate/dev-lock.js +101 -0
- package/dist/migrate/dev-lock.js.map +1 -0
- package/dist/migrate/runner.d.ts.map +1 -1
- package/dist/migrate/runner.js +143 -51
- package/dist/migrate/runner.js.map +1 -1
- package/dist/plugins/builtin.d.ts +62 -12
- package/dist/plugins/builtin.d.ts.map +1 -1
- package/dist/plugins/builtin.js +378 -30
- package/dist/plugins/builtin.js.map +1 -1
- package/dist/plugins/index.d.ts +1 -0
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/json/operators.d.ts.map +1 -1
- package/dist/plugins/json/operators.js +69 -3
- package/dist/plugins/json/operators.js.map +1 -1
- package/dist/plugins/postgis/columns.d.ts.map +1 -1
- package/dist/plugins/postgis/columns.js +52 -0
- package/dist/plugins/postgis/columns.js.map +1 -1
- package/dist/plugins/postgis/columns.test.js +13 -0
- package/dist/plugins/postgis/columns.test.js.map +1 -1
- package/dist/plugins/postgis/operators.d.ts.map +1 -1
- package/dist/plugins/postgis/operators.js +15 -3
- package/dist/plugins/postgis/operators.js.map +1 -1
- package/dist/plugins/types.d.ts +3 -0
- package/dist/plugins/types.d.ts.map +1 -1
- package/dist/runtime/client.d.ts +31 -4
- package/dist/runtime/client.d.ts.map +1 -1
- package/dist/runtime/client.js +131 -6
- package/dist/runtime/client.js.map +1 -1
- package/dist/runtime/driver.d.ts +2 -0
- package/dist/runtime/driver.d.ts.map +1 -1
- package/dist/runtime/driver.js +12 -0
- package/dist/runtime/driver.js.map +1 -1
- package/dist/runtime/error-hints.d.ts.map +1 -1
- package/dist/runtime/error-hints.js +37 -10
- package/dist/runtime/error-hints.js.map +1 -1
- package/dist/runtime/executor.d.ts +1 -0
- package/dist/runtime/executor.d.ts.map +1 -1
- package/dist/runtime/executor.js +7 -1
- package/dist/runtime/executor.js.map +1 -1
- package/dist/runtime/mariadb-driver.d.ts +25 -0
- package/dist/runtime/mariadb-driver.d.ts.map +1 -0
- package/dist/runtime/mariadb-driver.js +103 -0
- package/dist/runtime/mariadb-driver.js.map +1 -0
- package/dist/runtime/mysql-driver.d.ts +25 -0
- package/dist/runtime/mysql-driver.d.ts.map +1 -0
- package/dist/runtime/mysql-driver.js +101 -0
- package/dist/runtime/mysql-driver.js.map +1 -0
- package/dist/runtime/mysql-error.d.ts +15 -0
- package/dist/runtime/mysql-error.d.ts.map +1 -0
- package/dist/runtime/mysql-error.js +119 -0
- package/dist/runtime/mysql-error.js.map +1 -0
- package/dist/runtime/mysql-family-pool.d.ts +50 -0
- package/dist/runtime/mysql-family-pool.d.ts.map +1 -0
- package/dist/runtime/mysql-family-pool.js +52 -0
- package/dist/runtime/mysql-family-pool.js.map +1 -0
- package/dist/runtime/mysql-family-pool.test.d.ts +2 -0
- package/dist/runtime/mysql-family-pool.test.d.ts.map +1 -0
- package/dist/runtime/mysql-family-pool.test.js +169 -0
- package/dist/runtime/mysql-family-pool.test.js.map +1 -0
- package/dist/runtime/mysql-placeholders.d.ts +18 -0
- package/dist/runtime/mysql-placeholders.d.ts.map +1 -0
- package/dist/runtime/mysql-placeholders.js +133 -0
- package/dist/runtime/mysql-placeholders.js.map +1 -0
- package/dist/runtime/mysql-placeholders.test.d.ts +2 -0
- package/dist/runtime/mysql-placeholders.test.d.ts.map +1 -0
- package/dist/runtime/mysql-placeholders.test.js +33 -0
- package/dist/runtime/mysql-placeholders.test.js.map +1 -0
- package/dist/runtime/query/aggregate.d.ts.map +1 -1
- package/dist/runtime/query/aggregate.js +3 -3
- package/dist/runtime/query/aggregate.js.map +1 -1
- package/dist/runtime/query/compile-aggregate.d.ts +1 -1
- package/dist/runtime/query/compile-aggregate.d.ts.map +1 -1
- package/dist/runtime/query/compile-aggregate.js +33 -28
- package/dist/runtime/query/compile-aggregate.js.map +1 -1
- package/dist/runtime/query/compile-where.d.ts +9 -9
- package/dist/runtime/query/compile-where.d.ts.map +1 -1
- package/dist/runtime/query/compile-where.js +108 -76
- package/dist/runtime/query/compile-where.js.map +1 -1
- package/dist/runtime/query/compile-write.d.ts +9 -9
- package/dist/runtime/query/compile-write.d.ts.map +1 -1
- package/dist/runtime/query/compile-write.js +77 -63
- package/dist/runtime/query/compile-write.js.map +1 -1
- package/dist/runtime/query/count.d.ts.map +1 -1
- package/dist/runtime/query/count.js +4 -1
- package/dist/runtime/query/count.js.map +1 -1
- package/dist/runtime/query/create.d.ts.map +1 -1
- package/dist/runtime/query/create.js +38 -12
- package/dist/runtime/query/create.js.map +1 -1
- package/dist/runtime/query/cursor.d.ts +1 -1
- package/dist/runtime/query/cursor.d.ts.map +1 -1
- package/dist/runtime/query/cursor.js +6 -7
- package/dist/runtime/query/cursor.js.map +1 -1
- package/dist/runtime/query/delete.d.ts.map +1 -1
- package/dist/runtime/query/delete.js +41 -15
- package/dist/runtime/query/delete.js.map +1 -1
- package/dist/runtime/query/execute.d.ts +1 -0
- package/dist/runtime/query/execute.d.ts.map +1 -1
- package/dist/runtime/query/execute.js +23 -8
- package/dist/runtime/query/execute.js.map +1 -1
- package/dist/runtime/query/find-or-create.d.ts +1 -1
- package/dist/runtime/query/find-or-create.d.ts.map +1 -1
- package/dist/runtime/query/find-or-create.js +16 -8
- package/dist/runtime/query/find-or-create.js.map +1 -1
- package/dist/runtime/query/find.d.ts +2 -0
- package/dist/runtime/query/find.d.ts.map +1 -1
- package/dist/runtime/query/find.js +116 -68
- package/dist/runtime/query/find.js.map +1 -1
- package/dist/runtime/query/group-by.d.ts.map +1 -1
- package/dist/runtime/query/group-by.js.map +1 -1
- package/dist/runtime/query/mutation-returning.d.ts +10 -0
- package/dist/runtime/query/mutation-returning.d.ts.map +1 -0
- package/dist/runtime/query/mutation-returning.js +85 -0
- package/dist/runtime/query/mutation-returning.js.map +1 -0
- package/dist/runtime/query/paginate.d.ts.map +1 -1
- package/dist/runtime/query/paginate.js +3 -3
- package/dist/runtime/query/paginate.js.map +1 -1
- package/dist/runtime/query/projection.d.ts.map +1 -1
- package/dist/runtime/query/projection.js +1 -1
- package/dist/runtime/query/projection.js.map +1 -1
- package/dist/runtime/query/relation-join.d.ts +5 -0
- package/dist/runtime/query/relation-join.d.ts.map +1 -0
- package/dist/runtime/query/relation-join.js +26 -0
- package/dist/runtime/query/relation-join.js.map +1 -0
- package/dist/runtime/query/relation-planner.d.ts +1 -1
- package/dist/runtime/query/relation-planner.d.ts.map +1 -1
- package/dist/runtime/query/relation-planner.js +72 -58
- package/dist/runtime/query/relation-planner.js.map +1 -1
- package/dist/runtime/query/relation-writes.d.ts +2 -2
- package/dist/runtime/query/relation-writes.d.ts.map +1 -1
- package/dist/runtime/query/relation-writes.js +272 -116
- package/dist/runtime/query/relation-writes.js.map +1 -1
- package/dist/runtime/query/table-index.d.ts +1 -1
- package/dist/runtime/query/table-index.d.ts.map +1 -1
- package/dist/runtime/query/table-index.js +17 -10
- package/dist/runtime/query/table-index.js.map +1 -1
- package/dist/runtime/query/unique.d.ts +3 -0
- package/dist/runtime/query/unique.d.ts.map +1 -1
- package/dist/runtime/query/unique.js +26 -6
- package/dist/runtime/query/unique.js.map +1 -1
- package/dist/runtime/query/unique.test.js +110 -7
- package/dist/runtime/query/unique.test.js.map +1 -1
- package/dist/runtime/query/update.d.ts.map +1 -1
- package/dist/runtime/query/update.js +89 -23
- package/dist/runtime/query/update.js.map +1 -1
- package/dist/runtime/query/updated-at.js +2 -2
- package/dist/runtime/query/updated-at.js.map +1 -1
- package/dist/runtime/query/upsert.d.ts.map +1 -1
- package/dist/runtime/query/upsert.js +29 -5
- package/dist/runtime/query/upsert.js.map +1 -1
- package/dist/runtime/sqlite-open.js +1 -1
- package/dist/runtime/sqlite-open.js.map +1 -1
- package/dist/runtime/transaction.d.ts +1 -0
- package/dist/runtime/transaction.d.ts.map +1 -1
- package/dist/runtime/transaction.js +8 -0
- package/dist/runtime/transaction.js.map +1 -1
- package/dist/runtime/types.d.ts +10 -2
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/schema/column-constraints.d.ts +26 -0
- package/dist/schema/column-constraints.d.ts.map +1 -0
- package/dist/schema/column-constraints.js +143 -0
- package/dist/schema/column-constraints.js.map +1 -0
- package/dist/schema/column.d.ts +92 -3
- package/dist/schema/column.d.ts.map +1 -1
- package/dist/schema/column.js +17 -11
- package/dist/schema/column.js.map +1 -1
- package/dist/schema/index.d.ts +9 -6
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +8 -2
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/json-column.d.ts +9 -0
- package/dist/schema/json-column.d.ts.map +1 -0
- package/dist/schema/json-column.js +11 -0
- package/dist/schema/json-column.js.map +1 -0
- package/dist/schema/many-to-many.d.ts +1 -1
- package/dist/schema/many-to-many.d.ts.map +1 -1
- package/dist/schema/nested-relation-types.d.ts +10 -9
- package/dist/schema/nested-relation-types.d.ts.map +1 -1
- package/dist/schema/relation-types.d.ts +80 -19
- package/dist/schema/relation-types.d.ts.map +1 -1
- package/dist/schema/relation.d.ts +11 -1
- package/dist/schema/relation.d.ts.map +1 -1
- package/dist/schema/relation.js +6 -0
- package/dist/schema/relation.js.map +1 -1
- package/dist/schema/table.d.ts +74 -11
- package/dist/schema/table.d.ts.map +1 -1
- package/dist/schema/table.js +93 -7
- package/dist/schema/table.js.map +1 -1
- package/dist/schema/types.d.ts +7 -6
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/sql/builder.d.ts +13 -3
- package/dist/sql/builder.d.ts.map +1 -1
- package/dist/sql/builder.js +155 -5
- package/dist/sql/builder.js.map +1 -1
- package/dist/sql/index.d.ts +1 -0
- package/dist/sql/index.d.ts.map +1 -1
- package/dist/sql/index.js.map +1 -1
- package/dist/sql/qualify-tables.d.ts +15 -0
- package/dist/sql/qualify-tables.d.ts.map +1 -0
- package/dist/sql/qualify-tables.js +206 -0
- package/dist/sql/qualify-tables.js.map +1 -0
- package/dist/sql/template.d.ts +5 -0
- package/dist/sql/template.d.ts.map +1 -1
- package/dist/sql/template.js +23 -3
- package/dist/sql/template.js.map +1 -1
- package/dist/utils/load-ts.d.ts +2 -1
- package/dist/utils/load-ts.d.ts.map +1 -1
- package/dist/utils/load-ts.js +13 -1
- package/dist/utils/load-ts.js.map +1 -1
- package/docs/cli.md +4 -4
- package/docs/configuration.md +12 -5
- package/docs/elysia.md +131 -0
- package/docs/errors.md +1 -1
- package/docs/examples.md +4 -2
- package/docs/getting-started.md +28 -2
- package/docs/mariadb.md +149 -0
- package/docs/migrations.md +5 -3
- package/docs/mysql.md +134 -0
- package/docs/plugins.md +2 -0
- package/docs/queries.md +14 -11
- package/docs/relations.md +19 -4
- package/docs/schema.md +100 -9
- package/docs/sqlite.md +14 -2
- package/docs/typebox.md +139 -0
- package/docs/zod.md +128 -0
- package/package.json +33 -3
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { postgresDialect } from "../../dialect/postgres.js";
|
|
2
2
|
import { getAppliedMigrations, listPendingMigrations, } from "../../migrate/runner.js";
|
|
3
3
|
import { SCHEMA_DRIFT_QUERY_CODES, } from "../error-codes.js";
|
|
4
|
-
import { createQueryError, NeoOrmQueryError, } from "../errors.js";
|
|
4
|
+
import { createQueryError, NeoOrmDriverError, NeoOrmQueryError, } from "../errors.js";
|
|
5
|
+
import { enrichMysqlError, isMysqlError } from "../mysql-error.js";
|
|
5
6
|
import { emptyReturningContext, enrichPgError, isPgError, isSchemaDriftPgCode, } from "../pg-error.js";
|
|
6
7
|
import { enrichSqliteError, isSqliteError } from "../sqlite-error.js";
|
|
7
8
|
async function resolveMigrationHint(driver, dialect, migrationsDir, schema, driftCode) {
|
|
@@ -32,6 +33,16 @@ async function resolveMigrationHint(driver, dialect, migrationsDir, schema, drif
|
|
|
32
33
|
return undefined;
|
|
33
34
|
}
|
|
34
35
|
}
|
|
36
|
+
function unwrapDriverError(err) {
|
|
37
|
+
if (err instanceof NeoOrmDriverError) {
|
|
38
|
+
return err.cause ?? err;
|
|
39
|
+
}
|
|
40
|
+
return err;
|
|
41
|
+
}
|
|
42
|
+
function isKnownDriverError(err) {
|
|
43
|
+
const inner = unwrapDriverError(err);
|
|
44
|
+
return isSqliteError(inner) || isPgError(inner) || isMysqlError(inner);
|
|
45
|
+
}
|
|
35
46
|
function isSchemaDriftCode(code) {
|
|
36
47
|
if (isSchemaDriftPgCode(code)) {
|
|
37
48
|
return true;
|
|
@@ -40,11 +51,15 @@ function isSchemaDriftCode(code) {
|
|
|
40
51
|
}
|
|
41
52
|
async function enrichQueryError(runtime, ctx, sql, err) {
|
|
42
53
|
const base = queryBaseContext(ctx, sql);
|
|
43
|
-
|
|
44
|
-
|
|
54
|
+
const inner = unwrapDriverError(err);
|
|
55
|
+
if (isSqliteError(inner)) {
|
|
56
|
+
return enrichSqliteError(inner, runtime.manifest, base);
|
|
57
|
+
}
|
|
58
|
+
if (isPgError(inner)) {
|
|
59
|
+
return enrichPgError(inner, runtime.manifest, base);
|
|
45
60
|
}
|
|
46
|
-
if (
|
|
47
|
-
return
|
|
61
|
+
if (isMysqlError(inner)) {
|
|
62
|
+
return enrichMysqlError(inner, runtime.manifest, base);
|
|
48
63
|
}
|
|
49
64
|
throw err;
|
|
50
65
|
}
|
|
@@ -62,7 +77,7 @@ export async function runQuery(executor, runtime, ctx, sql, params = []) {
|
|
|
62
77
|
return await executor.query(sql, params);
|
|
63
78
|
}
|
|
64
79
|
catch (err) {
|
|
65
|
-
if (
|
|
80
|
+
if (isKnownDriverError(err)) {
|
|
66
81
|
const enriched = await enrichQueryError(runtime, ctx, sql, err);
|
|
67
82
|
await throwQueryError(runtime, enriched, err);
|
|
68
83
|
}
|
|
@@ -74,7 +89,7 @@ export async function runExecute(executor, runtime, ctx, sql, params = []) {
|
|
|
74
89
|
return await executor.execute(sql, params);
|
|
75
90
|
}
|
|
76
91
|
catch (err) {
|
|
77
|
-
if (
|
|
92
|
+
if (isKnownDriverError(err)) {
|
|
78
93
|
const enriched = await enrichQueryError(runtime, ctx, sql, err);
|
|
79
94
|
await throwQueryError(runtime, enriched, err);
|
|
80
95
|
}
|
|
@@ -97,7 +112,7 @@ export async function runQueryOne(executor, runtime, ctx, sql, params = []) {
|
|
|
97
112
|
if (err instanceof NeoOrmQueryError) {
|
|
98
113
|
throw err;
|
|
99
114
|
}
|
|
100
|
-
if (
|
|
115
|
+
if (isKnownDriverError(err)) {
|
|
101
116
|
const enriched = await enrichQueryError(runtime, ctx, sql, err);
|
|
102
117
|
await throwQueryError(runtime, enriched, err);
|
|
103
118
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/runtime/query/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EACN,oBAAoB,EACpB,qBAAqB,GACrB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAEN,wBAAwB,GACxB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACN,gBAAgB,EAChB,gBAAgB,GAEhB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACN,qBAAqB,EACrB,aAAa,EACb,SAAS,EACT,mBAAmB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAuBtE,KAAK,UAAU,oBAAoB,CAClC,MAAkC,EAClC,OAAgB,EAChB,aAAiC,EACjC,MAA0B,EAC1B,SAA6B;IAE7B,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5D,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACpE,MAAM,WAAW,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;QACjC,MAAM,WAAW,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,WAAW,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,iBAAiB,WAAW,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,aAAa,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACpE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,mBAAmB,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC9D,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAC3C,CAAC;QACF,CAAC;aAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACtC,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,wBAAwB,CAAC,GAAG,CAAC,IAA2B,CAAC,CAAC;AAClE,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC9B,OAAqB,EACrB,GAAoB,EACpB,GAAW,EACX,GAAY;IAEZ,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/runtime/query/execute.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,5 +15,5 @@ export declare function findOrCreateRecord(executor: Executor, runtime: QueryRun
|
|
|
15
15
|
export declare function findOrCreatePk(executor: Executor, runtime: QueryRuntime, tableAccessor: string, item: {
|
|
16
16
|
where: Record<string, unknown>;
|
|
17
17
|
create: Record<string, unknown>;
|
|
18
|
-
}): Promise<
|
|
18
|
+
}, fkTsName?: string): Promise<unknown>;
|
|
19
19
|
//# sourceMappingURL=find-or-create.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-or-create.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/find-or-create.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAO/C,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,cAAc,CAAC;AAC9D,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAGpE,OAAO,EACN,KAAK,oBAAoB,EAGzB,MAAM,iBAAiB,CAAC;AAIzB,MAAM,MAAM,kBAAkB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACjC,GAAG,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"find-or-create.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/find-or-create.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAO/C,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,cAAc,CAAC;AAC9D,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAGpE,OAAO,EACN,KAAK,oBAAoB,EAGzB,MAAM,iBAAiB,CAAC;AAIzB,MAAM,MAAM,kBAAkB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACjC,GAAG,oBAAoB,CAAC;AAkDzB,wBAAsB,kBAAkB,CACvC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,gBAAgB,GACpB,OAAO,CAAC,kBAAkB,CAAC,CAoE7B;AA8DD,wBAAgB,cAAc,CAC7B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE;IACL,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,EACD,QAAQ,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAkBlB"}
|
|
@@ -10,7 +10,7 @@ import { fillMissingPrimaryKeys, rowScalarPkValue } from "./primary-key.js";
|
|
|
10
10
|
import { projectFindRow, resolveParentProjection, } from "./projection.js";
|
|
11
11
|
import { getTableIndex, requireTable } from "./table-index.js";
|
|
12
12
|
import { assertUniqueWhere } from "./unique.js";
|
|
13
|
-
function toFindLookupArgs(args) {
|
|
13
|
+
function toFindLookupArgs(args, andSql) {
|
|
14
14
|
return {
|
|
15
15
|
where: args.where,
|
|
16
16
|
take: 1,
|
|
@@ -20,6 +20,7 @@ function toFindLookupArgs(args) {
|
|
|
20
20
|
...(args.includeHidden !== undefined
|
|
21
21
|
? { includeHidden: args.includeHidden }
|
|
22
22
|
: {}),
|
|
23
|
+
...(andSql !== undefined ? { andSql } : {}),
|
|
23
24
|
};
|
|
24
25
|
}
|
|
25
26
|
async function finalizeFindOrCreateRecord(executor, runtime, table, tableAccessor, args, row, created, options = {}) {
|
|
@@ -45,20 +46,20 @@ export async function findOrCreateRecord(executor, runtime, tableAccessor, args)
|
|
|
45
46
|
const lookupArgs = { ...args, where: uniqueWhere };
|
|
46
47
|
const createData = { ...args.create, ...uniqueWhere };
|
|
47
48
|
fillMissingPrimaryKeys(table, createData, tableIndex);
|
|
48
|
-
if (dialect.
|
|
49
|
-
return
|
|
49
|
+
if (!dialect.supportsXmax) {
|
|
50
|
+
return findOrCreateWithoutReturning(executor, runtime, tableAccessor, lookupArgs, createData, constraint.whereSql);
|
|
50
51
|
}
|
|
51
52
|
const { keys: insertKeys, values: insertValues } = dataToSqlValues(table, createData, undefined, runtime.tableIndex, dialect);
|
|
52
|
-
const findOrCreateSql = buildFindOrCreateQuery(table, insertKeys, constraint.sqlColumns, runtime.tableIndex, projection.hasProjection ? projection.sqlColumns : undefined, projection.includeHidden);
|
|
53
|
+
const findOrCreateSql = buildFindOrCreateQuery(table, insertKeys, constraint.sqlColumns, runtime.tableIndex, projection.hasProjection ? projection.sqlColumns : undefined, projection.includeHidden, dialect, constraint.whereSql);
|
|
53
54
|
const row = await runQueryOne(executor, runtime, { operation: "findOrCreate", tableAccessor }, findOrCreateSql, insertValues);
|
|
54
55
|
const created = row[FIND_OR_CREATE_FLAG] === true;
|
|
55
56
|
const { [FIND_OR_CREATE_FLAG]: _createdFlag, ...rawRow } = row;
|
|
56
57
|
return finalizeFindOrCreateRecord(executor, runtime, table, tableAccessor, args, rawRow, created);
|
|
57
58
|
}
|
|
58
|
-
async function
|
|
59
|
+
async function findOrCreateWithoutReturning(executor, runtime, tableAccessor, args, createData, andSql) {
|
|
59
60
|
const { manifest } = runtime;
|
|
60
61
|
const table = requireTable(manifest, tableAccessor, "select");
|
|
61
|
-
const existing = await findMany(executor, runtime, tableAccessor, toFindLookupArgs(args));
|
|
62
|
+
const existing = await findMany(executor, runtime, tableAccessor, toFindLookupArgs(args, andSql));
|
|
62
63
|
if (existing.length > 0) {
|
|
63
64
|
const existingRow = existing[0];
|
|
64
65
|
if (existingRow) {
|
|
@@ -77,7 +78,7 @@ async function findOrCreateSqlite(executor, runtime, tableAccessor, args, create
|
|
|
77
78
|
if (!isUniqueViolation(err)) {
|
|
78
79
|
throw err;
|
|
79
80
|
}
|
|
80
|
-
const retry = await findMany(executor, runtime, tableAccessor, toFindLookupArgs(args));
|
|
81
|
+
const retry = await findMany(executor, runtime, tableAccessor, toFindLookupArgs(args, andSql));
|
|
81
82
|
if (retry.length > 0) {
|
|
82
83
|
const retryRow = retry[0];
|
|
83
84
|
if (retryRow) {
|
|
@@ -87,7 +88,7 @@ async function findOrCreateSqlite(executor, runtime, tableAccessor, args, create
|
|
|
87
88
|
compileError("findOrCreate insert failed and record was not found");
|
|
88
89
|
}
|
|
89
90
|
}
|
|
90
|
-
export function findOrCreatePk(executor, runtime, tableAccessor, item) {
|
|
91
|
+
export function findOrCreatePk(executor, runtime, tableAccessor, item, fkTsName) {
|
|
91
92
|
return findOrCreateRecord(executor, runtime, tableAccessor, {
|
|
92
93
|
where: item.where,
|
|
93
94
|
create: item.create,
|
|
@@ -95,6 +96,13 @@ export function findOrCreatePk(executor, runtime, tableAccessor, item) {
|
|
|
95
96
|
const table = runtime.manifest.tables[tableAccessor];
|
|
96
97
|
if (!table)
|
|
97
98
|
compileError(`Unknown table: ${tableAccessor}`);
|
|
99
|
+
if (fkTsName) {
|
|
100
|
+
const value = record[fkTsName];
|
|
101
|
+
if (value == null) {
|
|
102
|
+
compileError(`Missing primary key "${fkTsName}" on table "${tableAccessor}"`);
|
|
103
|
+
}
|
|
104
|
+
return value;
|
|
105
|
+
}
|
|
98
106
|
return rowScalarPkValue(record, table);
|
|
99
107
|
});
|
|
100
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-or-create.js","sourceRoot":"","sources":["../../../src/runtime/query/find-or-create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EACN,sBAAsB,EACtB,eAAe,EACf,mBAAmB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAqB,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAkB,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAEN,cAAc,EACd,uBAAuB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAahD,SAAS,gBAAgB,CACxB,IAAsB;
|
|
1
|
+
{"version":3,"file":"find-or-create.js","sourceRoot":"","sources":["../../../src/runtime/query/find-or-create.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,8 @@ type FindManyArgs = {
|
|
|
28
28
|
omit?: readonly string[] | Record<string, boolean | undefined>;
|
|
29
29
|
with?: Record<string, WithInput>;
|
|
30
30
|
includeHidden?: boolean;
|
|
31
|
+
/** Extra AND predicate (partial unique index `WHERE`). */
|
|
32
|
+
andSql?: string;
|
|
31
33
|
};
|
|
32
34
|
type FindByIdArgs = {
|
|
33
35
|
select?: readonly string[] | Record<string, boolean | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/find.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/find.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { relationFkPairs } from "../../dialect/fk.js";
|
|
2
|
+
import { joinPlaceholders } from "../../dialect/placeholders.js";
|
|
3
|
+
import { postgresDialect } from "../../dialect/postgres.js";
|
|
4
|
+
import { dialectDisplayName, dialectSupportsDistinctOn, } from "../../dialect/resolve.js";
|
|
2
5
|
import { rebaseParamRefs } from "../../sql/template.js";
|
|
3
6
|
import { compileError } from "../compile-error.js";
|
|
4
7
|
import { buildFindByIdQuery, buildFindManyQuery, buildSelectColumns, compileOrderBy, compileWhere, getCachedFindManyQuery, getCachedOrderByClause, getCachedWhereClause, isImpossibleWhere, normalizeLimitOffset, normalizeSelectColumns, } from "./compile.js";
|
|
@@ -9,6 +12,7 @@ import { primaryKeyTsNames, requireScalarPrimaryKey, resolvePkWhere, rowPkKey, t
|
|
|
9
12
|
import { projectFindRow, projectFindRows, projectionSignature, resolveParentProjection, } from "./projection.js";
|
|
10
13
|
import { buildCountAggregateGroupBy, buildPlanExtraSelectCols, compileCountOrderBy, getCachedFindByIdWithQuery, getCachedRelationPlan, hydrateRowsWithPlan, planRelationLoad, withShapeSignature, } from "./relation-planner.js";
|
|
11
14
|
import { columnBySqlName, getTableIndex, requireTable, } from "./table-index.js";
|
|
15
|
+
import { appendUniquePredicate } from "./unique.js";
|
|
12
16
|
function isRelationSpec(withSpec) {
|
|
13
17
|
if (typeof withSpec !== "object" || withSpec === null)
|
|
14
18
|
return false;
|
|
@@ -20,6 +24,13 @@ function isRelationSpec(withSpec) {
|
|
|
20
24
|
"with" in withSpec ||
|
|
21
25
|
"includeHidden" in withSpec);
|
|
22
26
|
}
|
|
27
|
+
function assertDistinctOnSupported(distinctOn, dialect) {
|
|
28
|
+
if (!distinctOn || distinctOn.length === 0)
|
|
29
|
+
return;
|
|
30
|
+
if (dialectSupportsDistinctOn(dialect))
|
|
31
|
+
return;
|
|
32
|
+
compileError(`distinct is not supported on ${dialectDisplayName(dialect.name)} (DISTINCT ON is PostgreSQL-only). Use groupBy or orderBy + a manual query instead.`);
|
|
33
|
+
}
|
|
23
34
|
function validateDistinctOrderBy(distinct, orderBy) {
|
|
24
35
|
if (!distinct || distinct.length === 0)
|
|
25
36
|
return;
|
|
@@ -77,10 +88,9 @@ async function loadRelationCounts(executor, runtime, parentTable, parentRows, co
|
|
|
77
88
|
const counts = await countRelationLinks(executor, runtime, parentTable, relationName, parentIds, whereFilter);
|
|
78
89
|
for (const parent of parentRows) {
|
|
79
90
|
const parentKey = rowPkKey(parent, parentTable);
|
|
80
|
-
const bucket = parent
|
|
81
|
-
{};
|
|
91
|
+
const bucket = parent._count ?? {};
|
|
82
92
|
bucket[relationName] = counts.get(parentKey) ?? 0;
|
|
83
|
-
parent
|
|
93
|
+
parent._count = bucket;
|
|
84
94
|
}
|
|
85
95
|
}));
|
|
86
96
|
}
|
|
@@ -92,14 +102,14 @@ async function countRelationLinks(executor, runtime, parentTable, relationName,
|
|
|
92
102
|
return countM2MLinks(executor, runtime, parentTable, m2m, parentIds, whereFilter);
|
|
93
103
|
}
|
|
94
104
|
const relation = findRelation(parentTable, relationName);
|
|
95
|
-
if (
|
|
105
|
+
if (relation?.cardinality !== "many") {
|
|
96
106
|
return new Map();
|
|
97
107
|
}
|
|
98
108
|
const targetTable = manifest.tables[relation.targetAccessor];
|
|
99
109
|
if (!targetTable)
|
|
100
110
|
return new Map();
|
|
101
|
-
const fkCol = quoteIdentifier(relation.fkSqlColumn);
|
|
102
|
-
const placeholders =
|
|
111
|
+
const fkCol = dialect.quoteIdentifier(relation.fkSqlColumn);
|
|
112
|
+
const placeholders = joinPlaceholders(dialect, parentIds.length);
|
|
103
113
|
let extraWhere = "";
|
|
104
114
|
let extraParams = [];
|
|
105
115
|
if (whereFilter) {
|
|
@@ -110,7 +120,7 @@ async function countRelationLinks(executor, runtime, parentTable, relationName,
|
|
|
110
120
|
extraParams = compiled.params;
|
|
111
121
|
}
|
|
112
122
|
}
|
|
113
|
-
const sql = `SELECT ${fkCol} AS parent_id, ${dialect.castToInt("COUNT(*)")} AS count FROM ${tableRef(targetTable)} WHERE ${fkCol} IN (${placeholders})${extraWhere} GROUP BY ${fkCol}`;
|
|
123
|
+
const sql = `SELECT ${fkCol} AS parent_id, ${dialect.castToInt("COUNT(*)")} AS count FROM ${dialect.tableRef(targetTable)} WHERE ${fkCol} IN (${placeholders})${extraWhere} GROUP BY ${fkCol}`;
|
|
114
124
|
const rows = await runQuery(executor, runtime, { operation: "select", tableAccessor: targetTable.accessor }, sql, [...parentIds, ...extraParams]);
|
|
115
125
|
return new Map(rows.map((row) => [String(row.parent_id), row.count]));
|
|
116
126
|
}
|
|
@@ -125,27 +135,27 @@ async function countM2MLinks(executor, runtime, parentTable, m2m, parentIds, whe
|
|
|
125
135
|
return new Map();
|
|
126
136
|
const parentFkCol = isLeft ? m2m.leftFkColumn : m2m.rightFkColumn;
|
|
127
137
|
const targetFkCol = isLeft ? m2m.rightFkColumn : m2m.leftFkColumn;
|
|
128
|
-
const placeholders =
|
|
138
|
+
const placeholders = joinPlaceholders(dialect, parentIds.length);
|
|
129
139
|
let joinSql = "";
|
|
130
140
|
let extraWhere = "";
|
|
131
141
|
let extraParams = [];
|
|
132
142
|
if (whereFilter) {
|
|
133
143
|
const compiled = compileWhere(manifest, targetTable, whereFilter, dialect, 1, runtime.tableIndex);
|
|
134
|
-
joinSql = ` JOIN ${tableRef(targetTable)} t ON t.${quoteIdentifier(targetRelationPkSql(targetTable))} = j.${quoteIdentifier(targetFkCol)}`;
|
|
144
|
+
joinSql = ` JOIN ${dialect.tableRef(targetTable)} t ON t.${dialect.quoteIdentifier(targetRelationPkSql(targetTable))} = j.${dialect.quoteIdentifier(targetFkCol)}`;
|
|
135
145
|
if (compiled.sql) {
|
|
136
146
|
const adjusted = rebaseParamRefs(compiled.sql, parentIds.length);
|
|
137
147
|
extraWhere = ` AND ${adjusted.replace(/^WHERE\s+/i, "")}`;
|
|
138
148
|
extraParams = compiled.params;
|
|
139
149
|
}
|
|
140
150
|
}
|
|
141
|
-
const sql = `SELECT j.${quoteIdentifier(parentFkCol)} AS parent_id, ${dialect.castToInt("COUNT(*)")} AS count FROM ${tableRef(throughTable)} j${joinSql} WHERE j.${quoteIdentifier(parentFkCol)} IN (${placeholders})${extraWhere} GROUP BY j.${quoteIdentifier(parentFkCol)}`;
|
|
151
|
+
const sql = `SELECT j.${dialect.quoteIdentifier(parentFkCol)} AS parent_id, ${dialect.castToInt("COUNT(*)")} AS count FROM ${dialect.tableRef(throughTable)} j${joinSql} WHERE j.${dialect.quoteIdentifier(parentFkCol)} IN (${placeholders})${extraWhere} GROUP BY j.${dialect.quoteIdentifier(parentFkCol)}`;
|
|
142
152
|
const rows = await runQuery(executor, runtime, { operation: "select", tableAccessor: throughTable.accessor }, sql, [...parentIds, ...extraParams]);
|
|
143
153
|
return new Map(rows.map((row) => [String(row.parent_id), row.count]));
|
|
144
154
|
}
|
|
145
|
-
function columnsForSelect(table, withSpec, manifestIndex, tableAlias) {
|
|
155
|
+
function columnsForSelect(table, withSpec, manifestIndex, tableAlias, dialect = postgresDialect) {
|
|
146
156
|
const nestedSpec = isRelationSpec(withSpec) ? withSpec : undefined;
|
|
147
157
|
const selectKeys = normalizeSelectColumns(nestedSpec?.select);
|
|
148
|
-
return buildSelectColumns(table, selectKeys ? [...selectKeys] : undefined, manifestIndex, nestedSpec?.includeHidden, tableAlias);
|
|
158
|
+
return buildSelectColumns(table, selectKeys ? [...selectKeys] : undefined, manifestIndex, nestedSpec?.includeHidden, tableAlias, dialect);
|
|
149
159
|
}
|
|
150
160
|
const BATCH_PARENT_ID = "_parent_id";
|
|
151
161
|
const BATCH_ROW_NUMBER = "_neoorm_rn";
|
|
@@ -166,14 +176,14 @@ function stripBatchRelationMeta(row) {
|
|
|
166
176
|
return targetRow;
|
|
167
177
|
}
|
|
168
178
|
function applyPerParentTakeSkip(args) {
|
|
169
|
-
const { selectList, fromSql, partitionBy, orderBySql, take, skip } = args;
|
|
179
|
+
const { selectList, fromSql, partitionBy, orderBySql, take, skip, dialect, } = args;
|
|
170
180
|
if (take === undefined && skip === undefined) {
|
|
171
181
|
return `SELECT ${selectList} ${fromSql}${orderBySql ? ` ${orderBySql}` : ""}`;
|
|
172
182
|
}
|
|
173
183
|
const takeN = take !== undefined ? normalizeLimitOffset(take, "take") : undefined;
|
|
174
184
|
const skipN = skip !== undefined ? normalizeLimitOffset(skip, "skip") : 0;
|
|
175
|
-
const rank = quoteIdentifier(BATCH_ROW_NUMBER);
|
|
176
|
-
const ranked = quoteIdentifier(BATCH_RANKED_ALIAS);
|
|
185
|
+
const rank = dialect.quoteIdentifier(BATCH_ROW_NUMBER);
|
|
186
|
+
const ranked = dialect.quoteIdentifier(BATCH_RANKED_ALIAS);
|
|
177
187
|
const overOrder = orderBySql ? ` ${orderBySql}` : "";
|
|
178
188
|
const filter = takeN !== undefined
|
|
179
189
|
? `${rank} > ${skipN} AND ${rank} <= ${skipN + takeN}`
|
|
@@ -188,6 +198,7 @@ async function loadNestedRelations(executor, runtime, targetTable, childRows, ne
|
|
|
188
198
|
async function loadOneRelation(executor, runtime, parentTable, parentRows, relationName, withSpec) {
|
|
189
199
|
if (parentRows.length === 0)
|
|
190
200
|
return;
|
|
201
|
+
const dialect = runtime.dialect ?? postgresDialect;
|
|
191
202
|
const { manifest } = runtime;
|
|
192
203
|
const m2m = findM2M(manifest, parentTable.accessor, relationName);
|
|
193
204
|
if (m2m) {
|
|
@@ -206,45 +217,80 @@ async function loadOneRelation(executor, runtime, parentTable, parentRows, relat
|
|
|
206
217
|
const nestedSpec = isRelationSpec(withSpec) ? withSpec : undefined;
|
|
207
218
|
if (relation.cardinality === "one" &&
|
|
208
219
|
tableOwnsFkColumn(parentTable, relation)) {
|
|
209
|
-
const
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
if (fkValues.length === 0)
|
|
220
|
+
const pairs = relationFkPairs(relation);
|
|
221
|
+
const parentWithFk = parentRows.filter((row) => pairs.every((pair) => row[pair.fkColumn] != null));
|
|
222
|
+
if (parentWithFk.length === 0)
|
|
213
223
|
return;
|
|
214
|
-
const
|
|
215
|
-
const targetPkCol = quoteIdentifier(targetRelationPkSql(targetTable, relation));
|
|
216
|
-
const selectCols = columnsForSelect(targetTable, withSpec, runtime.tableIndex);
|
|
217
|
-
const [targetPkTsName] = primaryKeyTsNames(targetTable);
|
|
218
|
-
if (!targetPkTsName) {
|
|
219
|
-
compileError(`No primary key defined for table "${targetTable.accessor}"`);
|
|
220
|
-
}
|
|
221
|
-
const { extraWhere, extraParams } = compileBatchedRelationWhere(runtime, targetTable, nestedSpec?.where, fkValues.length);
|
|
222
|
-
const rows = await runQuery(executor, runtime, { operation: "select", tableAccessor: targetTable.accessor }, `SELECT ${selectCols} FROM ${tableRef(targetTable)} WHERE ${targetPkCol} IN (${placeholders})${extraWhere}`, [...fkValues, ...extraParams]);
|
|
224
|
+
const selectCols = columnsForSelect(targetTable, withSpec, runtime.tableIndex, undefined, dialect);
|
|
223
225
|
const targetTableIndex = getTableIndex(runtime.tableIndex, targetTable.accessor);
|
|
226
|
+
if (pairs.length === 1) {
|
|
227
|
+
const fkValues = parentWithFk.map((r) => r[relation.fkColumn]);
|
|
228
|
+
const placeholders = joinPlaceholders(dialect, fkValues.length);
|
|
229
|
+
const targetPkCol = dialect.quoteIdentifier(targetRelationPkSql(targetTable, relation));
|
|
230
|
+
const [targetPkTsName] = primaryKeyTsNames(targetTable);
|
|
231
|
+
if (!targetPkTsName) {
|
|
232
|
+
compileError(`No primary key defined for table "${targetTable.accessor}"`);
|
|
233
|
+
}
|
|
234
|
+
const { extraWhere, extraParams } = compileBatchedRelationWhere(runtime, targetTable, nestedSpec?.where, fkValues.length);
|
|
235
|
+
const rows = await runQuery(executor, runtime, { operation: "select", tableAccessor: targetTable.accessor }, `SELECT ${selectCols} FROM ${dialect.tableRef(targetTable)} WHERE ${targetPkCol} IN (${placeholders})${extraWhere}`, [...fkValues, ...extraParams]);
|
|
236
|
+
const mapped = mapRowsToTs(targetTableIndex, targetTable, rows);
|
|
237
|
+
const byId = new Map(mapped.map((r) => [String(r[targetPkTsName]), r]));
|
|
238
|
+
for (const parent of parentRows) {
|
|
239
|
+
const fkVal = parent[relation.fkColumn];
|
|
240
|
+
parent[relationName] =
|
|
241
|
+
fkVal != null ? (byId.get(fkVal) ?? null) : null;
|
|
242
|
+
}
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
const params = [];
|
|
246
|
+
const orSql = parentWithFk
|
|
247
|
+
.map((parent) => {
|
|
248
|
+
const andSql = pairs.map((pair) => {
|
|
249
|
+
params.push(parent[pair.fkColumn]);
|
|
250
|
+
return `${dialect.quoteIdentifier(pair.targetColumn)} = ${dialect.placeholder(params.length)}`;
|
|
251
|
+
});
|
|
252
|
+
return `(${andSql.join(" AND ")})`;
|
|
253
|
+
})
|
|
254
|
+
.join(" OR ");
|
|
255
|
+
const { extraWhere, extraParams } = compileBatchedRelationWhere(runtime, targetTable, nestedSpec?.where, params.length);
|
|
256
|
+
const rows = await runQuery(executor, runtime, { operation: "select", tableAccessor: targetTable.accessor }, `SELECT ${selectCols} FROM ${dialect.tableRef(targetTable)} WHERE (${orSql})${extraWhere}`, [...params, ...extraParams]);
|
|
224
257
|
const mapped = mapRowsToTs(targetTableIndex, targetTable, rows);
|
|
225
|
-
const
|
|
258
|
+
const byKey = new Map(mapped.map((row) => [
|
|
259
|
+
pairs
|
|
260
|
+
.map((pair) => {
|
|
261
|
+
const ts = targetTable.columns.find((col) => col.sqlName === pair.targetColumn ||
|
|
262
|
+
col.tsName === pair.targetColumn)?.tsName ?? pair.targetColumn;
|
|
263
|
+
return String(row[ts] ?? "");
|
|
264
|
+
})
|
|
265
|
+
.join("\0"),
|
|
266
|
+
row,
|
|
267
|
+
]));
|
|
226
268
|
for (const parent of parentRows) {
|
|
227
|
-
const
|
|
228
|
-
|
|
229
|
-
|
|
269
|
+
const key = pairs
|
|
270
|
+
.map((pair) => String(parent[pair.fkColumn] ?? ""))
|
|
271
|
+
.join("\0");
|
|
272
|
+
parent[relationName] = pairs.every((pair) => parent[pair.fkColumn] != null)
|
|
273
|
+
? (byKey.get(key) ?? null)
|
|
274
|
+
: null;
|
|
230
275
|
}
|
|
231
276
|
}
|
|
232
277
|
else {
|
|
233
|
-
const fkCol = quoteIdentifier(relation.fkSqlColumn);
|
|
234
|
-
const placeholders =
|
|
235
|
-
const selectCols = columnsForSelect(targetTable, withSpec, runtime.tableIndex);
|
|
236
|
-
const parentIdSelect = `${fkCol} AS ${quoteIdentifier(BATCH_PARENT_ID)}`;
|
|
278
|
+
const fkCol = dialect.quoteIdentifier(relation.fkSqlColumn);
|
|
279
|
+
const placeholders = joinPlaceholders(dialect, parentIds.length);
|
|
280
|
+
const selectCols = columnsForSelect(targetTable, withSpec, runtime.tableIndex, undefined, dialect);
|
|
281
|
+
const parentIdSelect = `${fkCol} AS ${dialect.quoteIdentifier(BATCH_PARENT_ID)}`;
|
|
237
282
|
const { extraWhere, extraParams } = compileBatchedRelationWhere(runtime, targetTable, nestedSpec?.where, parentIds.length);
|
|
238
283
|
const orderBySql = nestedSpec?.orderBy
|
|
239
|
-
? compileOrderBy(targetTable, nestedSpec.orderBy, undefined, runtime.tableIndex)
|
|
284
|
+
? compileOrderBy(targetTable, nestedSpec.orderBy, undefined, runtime.tableIndex, dialect)
|
|
240
285
|
: "";
|
|
241
286
|
const sql = applyPerParentTakeSkip({
|
|
242
287
|
selectList: `${selectCols}, ${parentIdSelect}`,
|
|
243
|
-
fromSql: `FROM ${tableRef(targetTable)} WHERE ${fkCol} IN (${placeholders})${extraWhere}`,
|
|
288
|
+
fromSql: `FROM ${dialect.tableRef(targetTable)} WHERE ${fkCol} IN (${placeholders})${extraWhere}`,
|
|
244
289
|
partitionBy: fkCol,
|
|
245
290
|
orderBySql,
|
|
246
291
|
take: nestedSpec?.take,
|
|
247
292
|
skip: nestedSpec?.skip,
|
|
293
|
+
dialect,
|
|
248
294
|
});
|
|
249
295
|
const rows = await runQuery(executor, runtime, { operation: "select", tableAccessor: targetTable.accessor }, sql, [...parentIds, ...extraParams]);
|
|
250
296
|
const targetTableIndex = getTableIndex(runtime.tableIndex, targetTable.accessor);
|
|
@@ -283,6 +329,7 @@ async function loadOneRelation(executor, runtime, parentTable, parentRows, relat
|
|
|
283
329
|
}
|
|
284
330
|
}
|
|
285
331
|
async function loadM2MRelation(executor, runtime, parentTable, parentRows, m2m, relationName, withSpec) {
|
|
332
|
+
const dialect = runtime.dialect ?? postgresDialect;
|
|
286
333
|
const { manifest } = runtime;
|
|
287
334
|
const isLeft = m2m.leftAccessor === parentTable.accessor;
|
|
288
335
|
const targetAccessor = isLeft ? m2m.rightAccessor : m2m.leftAccessor;
|
|
@@ -297,23 +344,24 @@ async function loadM2MRelation(executor, runtime, parentTable, parentRows, m2m,
|
|
|
297
344
|
.filter(Boolean);
|
|
298
345
|
if (parentIds.length === 0)
|
|
299
346
|
return;
|
|
300
|
-
const placeholders =
|
|
347
|
+
const placeholders = joinPlaceholders(dialect, parentIds.length);
|
|
301
348
|
const nestedSpec = isRelationSpec(withSpec) ? withSpec : undefined;
|
|
302
|
-
const selectCols = columnsForSelect(targetTable, withSpec, runtime.tableIndex, "t");
|
|
303
|
-
const targetPkCol = quoteIdentifier(targetRelationPkSql(targetTable));
|
|
304
|
-
const parentFkSql = quoteIdentifier(parentFkCol);
|
|
305
|
-
const targetFkSql = quoteIdentifier(targetFkCol);
|
|
349
|
+
const selectCols = columnsForSelect(targetTable, withSpec, runtime.tableIndex, "t", dialect);
|
|
350
|
+
const targetPkCol = dialect.quoteIdentifier(targetRelationPkSql(targetTable));
|
|
351
|
+
const parentFkSql = dialect.quoteIdentifier(parentFkCol);
|
|
352
|
+
const targetFkSql = dialect.quoteIdentifier(targetFkCol);
|
|
306
353
|
const { extraWhere, extraParams } = compileBatchedRelationWhere(runtime, targetTable, nestedSpec?.where, parentIds.length, "t");
|
|
307
354
|
const orderBySql = nestedSpec?.orderBy
|
|
308
|
-
? compileOrderBy(targetTable, nestedSpec.orderBy, "t", runtime.tableIndex)
|
|
355
|
+
? compileOrderBy(targetTable, nestedSpec.orderBy, "t", runtime.tableIndex, dialect)
|
|
309
356
|
: "";
|
|
310
357
|
const sql = applyPerParentTakeSkip({
|
|
311
|
-
selectList: `${selectCols}, j.${parentFkSql} AS ${quoteIdentifier(BATCH_PARENT_ID)}`,
|
|
312
|
-
fromSql: `FROM ${tableRef(throughTable)} j JOIN ${tableRef(targetTable)} t ON t.${targetPkCol} = j.${targetFkSql} WHERE j.${parentFkSql} IN (${placeholders})${extraWhere}`,
|
|
358
|
+
selectList: `${selectCols}, j.${parentFkSql} AS ${dialect.quoteIdentifier(BATCH_PARENT_ID)}`,
|
|
359
|
+
fromSql: `FROM ${dialect.tableRef(throughTable)} j JOIN ${dialect.tableRef(targetTable)} t ON t.${targetPkCol} = j.${targetFkSql} WHERE j.${parentFkSql} IN (${placeholders})${extraWhere}`,
|
|
313
360
|
partitionBy: `j.${parentFkSql}`,
|
|
314
361
|
orderBySql,
|
|
315
362
|
take: nestedSpec?.take,
|
|
316
363
|
skip: nestedSpec?.skip,
|
|
364
|
+
dialect,
|
|
317
365
|
});
|
|
318
366
|
const rows = await runQuery(executor, runtime, { operation: "select", tableAccessor: targetTable.accessor }, sql, [...parentIds, ...extraParams]);
|
|
319
367
|
const targetTableIndex = getTableIndex(runtime.tableIndex, targetTable.accessor);
|
|
@@ -367,9 +415,9 @@ async function executeFindManyWithRelations(executor, runtime, tableAccessor, ta
|
|
|
367
415
|
}
|
|
368
416
|
const extraSelect = buildPlanExtraSelectCols(manifest, table, plan, dialect, runtime.tableIndex, params.length + 1);
|
|
369
417
|
const extraSelectCols = extraSelect.cols;
|
|
370
|
-
const countOrderSql = compileCountOrderBy(manifest, table, args.orderBy, plan, runtime.tableIndex);
|
|
418
|
+
const countOrderSql = compileCountOrderBy(manifest, table, args.orderBy, plan, runtime.tableIndex, dialect);
|
|
371
419
|
const orderSqlForWith = countOrderSql ||
|
|
372
|
-
getCachedOrderByClause(table, args.orderBy, needsQualifiedRefs ? table.sqlName : undefined, runtime.tableIndex);
|
|
420
|
+
getCachedOrderByClause(table, args.orderBy, needsQualifiedRefs ? table.sqlName : undefined, runtime.tableIndex, dialect);
|
|
373
421
|
const joinClauses = plan.countAggregate && plan.countAggregate.joins.length > 0
|
|
374
422
|
? plan.countAggregate.joins
|
|
375
423
|
: plan.hasManyAggregate && plan.hasManyAggregate.joins.length > 0
|
|
@@ -379,14 +427,13 @@ async function executeFindManyWithRelations(executor, runtime, tableAccessor, ta
|
|
|
379
427
|
: undefined;
|
|
380
428
|
const groupBySql = buildCountAggregateGroupBy(plan);
|
|
381
429
|
const distinctOn = normalizeSelectColumns(args.distinct);
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
}
|
|
430
|
+
validateDistinctOrderBy(distinctOn, args.orderBy);
|
|
431
|
+
assertDistinctOnSupported(distinctOn, dialect);
|
|
385
432
|
const withSignature = withShapeSignature(args.with);
|
|
386
433
|
const planMode = planOptions?.useHasManyAggregate === false ? "corr" : "agg";
|
|
387
434
|
const projSig = projectionSignature(projection.sqlColumns, projection.includeHidden);
|
|
388
435
|
const signature = `${whereSql}|${orderSqlForWith}|${args.take ?? ""}|${args.skip ?? ""}|${distinctOn?.join(",") ?? ""}|${withSignature}|${planMode}|${groupBySql}|${projSig}`;
|
|
389
|
-
const query = getCachedFindManyQuery(tableIndex, signature, () => buildFindManyQuery(table, whereSql, orderSqlForWith, args.take, args.skip, distinctOn, extraSelectCols.length > 0 ? extraSelectCols : undefined, joinClauses, runtime.tableIndex, groupBySql || undefined, projection.sqlColumns, projection.includeHidden));
|
|
436
|
+
const query = getCachedFindManyQuery(tableIndex, signature, () => buildFindManyQuery(table, whereSql, orderSqlForWith, args.take, args.skip, distinctOn, extraSelectCols.length > 0 ? extraSelectCols : undefined, joinClauses, runtime.tableIndex, groupBySql || undefined, projection.sqlColumns, projection.includeHidden, dialect));
|
|
390
437
|
const rows = await runQuery(executor, runtime, { operation: "select", tableAccessor }, query, [...params, ...extraSelect.params]);
|
|
391
438
|
const hydrated = await hydrateAndLoadRelations(executor, runtime, table, rows, args.with, plan);
|
|
392
439
|
return projectFindRows(hydrated, projection, args.with);
|
|
@@ -422,25 +469,23 @@ export async function findMany(executor, runtime, tableAccessor, args) {
|
|
|
422
469
|
}
|
|
423
470
|
const distinctOn = normalizeSelectColumns(args?.distinct);
|
|
424
471
|
validateDistinctOrderBy(distinctOn, args?.orderBy);
|
|
425
|
-
|
|
426
|
-
compileError("distinct is not supported on SQLite (DISTINCT ON is PostgreSQL-only). Use groupBy or orderBy + a manual query instead.");
|
|
427
|
-
}
|
|
472
|
+
assertDistinctOnSupported(distinctOn, dialect);
|
|
428
473
|
const compiledWhere = getCachedWhereClause(manifest, table, args?.where, dialect, 1, runtime.tableIndex);
|
|
429
474
|
if (compiledWhere.impossible || isImpossibleWhere(compiledWhere.sql)) {
|
|
430
475
|
return [];
|
|
431
476
|
}
|
|
432
|
-
const whereSql = compiledWhere.sql;
|
|
477
|
+
const whereSql = appendUniquePredicate(compiledWhere.sql, args?.andSql);
|
|
433
478
|
const params = compiledWhere.params;
|
|
434
479
|
const hasWith = Boolean(args?.with && Object.keys(args.with).length > 0);
|
|
435
480
|
if (!hasWith) {
|
|
436
|
-
const orderSql = getCachedOrderByClause(table, args?.orderBy, undefined, runtime.tableIndex);
|
|
481
|
+
const orderSql = getCachedOrderByClause(table, args?.orderBy, undefined, runtime.tableIndex, dialect);
|
|
437
482
|
const projSig = projectionSignature(projection.sqlColumns, projection.includeHidden);
|
|
438
483
|
const signature = `${whereSql}|${orderSql}|${args?.take ?? ""}|${args?.skip ?? ""}|${distinctOn?.join(",") ?? ""}|${projSig}`;
|
|
439
|
-
const query = getCachedFindManyQuery(tableIndex, signature, () => buildFindManyQuery(table, whereSql, orderSql, args?.take, args?.skip, distinctOn, undefined, undefined, runtime.tableIndex, undefined, projection.sqlColumns, projection.includeHidden));
|
|
484
|
+
const query = getCachedFindManyQuery(tableIndex, signature, () => buildFindManyQuery(table, whereSql, orderSql, args?.take, args?.skip, distinctOn, undefined, undefined, runtime.tableIndex, undefined, projection.sqlColumns, projection.includeHidden, dialect));
|
|
440
485
|
const rows = await runQuery(executor, runtime, { operation: "select", tableAccessor }, query, params);
|
|
441
486
|
return projectFindRows(mapRowsToTs(tableIndex, table, rows), projection);
|
|
442
487
|
}
|
|
443
|
-
return executeFindManyWithRelations(executor, runtime, tableAccessor, table, tableIndex, { ...(args ?? {}), with: args
|
|
488
|
+
return executeFindManyWithRelations(executor, runtime, tableAccessor, table, tableIndex, { ...(args ?? {}), with: args?.with ?? {} }, whereSql, params, { useHasManyAggregate: true }, projection);
|
|
444
489
|
}
|
|
445
490
|
export async function findFirst(executor, runtime, tableAccessor, args) {
|
|
446
491
|
const dialect = runtime.dialect ?? postgresDialect;
|
|
@@ -454,20 +499,22 @@ export async function findFirst(executor, runtime, tableAccessor, args) {
|
|
|
454
499
|
if (compiledWhere.impossible || isImpossibleWhere(compiledWhere.sql)) {
|
|
455
500
|
return null;
|
|
456
501
|
}
|
|
457
|
-
const {
|
|
502
|
+
const { params } = compiledWhere;
|
|
503
|
+
const whereSql = appendUniquePredicate(compiledWhere.sql, args?.andSql);
|
|
458
504
|
const distinctOn = normalizeSelectColumns(args?.distinct);
|
|
459
505
|
validateDistinctOrderBy(distinctOn, args?.orderBy);
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
}
|
|
463
|
-
const orderSql = getCachedOrderByClause(table, args?.orderBy, undefined, runtime.tableIndex);
|
|
506
|
+
assertDistinctOnSupported(distinctOn, dialect);
|
|
507
|
+
const orderSql = getCachedOrderByClause(table, args?.orderBy, undefined, runtime.tableIndex, dialect);
|
|
464
508
|
const projSig = projectionSignature(projection.sqlColumns, projection.includeHidden);
|
|
465
509
|
const signature = `${whereSql}|${orderSql}|1|${args?.skip ?? ""}|${distinctOn?.join(",") ?? ""}|${projSig}`;
|
|
466
|
-
const query = getCachedFindManyQuery(tableIndex, signature, () => buildFindManyQuery(table, whereSql, orderSql, 1, args?.skip, distinctOn, undefined, undefined, runtime.tableIndex, undefined, projection.sqlColumns, projection.includeHidden));
|
|
510
|
+
const query = getCachedFindManyQuery(tableIndex, signature, () => buildFindManyQuery(table, whereSql, orderSql, 1, args?.skip, distinctOn, undefined, undefined, runtime.tableIndex, undefined, projection.sqlColumns, projection.includeHidden, dialect));
|
|
467
511
|
const rows = await runQuery(executor, runtime, { operation: "select", tableAccessor }, query, params);
|
|
468
512
|
if (rows.length === 0)
|
|
469
513
|
return null;
|
|
470
|
-
|
|
514
|
+
const row = rows[0];
|
|
515
|
+
if (row === undefined)
|
|
516
|
+
return null;
|
|
517
|
+
return projectFindRow(mapRowToTs(tableIndex, table, row), projection);
|
|
471
518
|
}
|
|
472
519
|
const compiledWhere = getCachedWhereClause(manifest, table, args?.where, dialect, 1, runtime.tableIndex);
|
|
473
520
|
if (compiledWhere.impossible || isImpossibleWhere(compiledWhere.sql)) {
|
|
@@ -475,7 +522,8 @@ export async function findFirst(executor, runtime, tableAccessor, args) {
|
|
|
475
522
|
}
|
|
476
523
|
const distinctOn = normalizeSelectColumns(args?.distinct);
|
|
477
524
|
validateDistinctOrderBy(distinctOn, args?.orderBy);
|
|
478
|
-
|
|
525
|
+
assertDistinctOnSupported(distinctOn, dialect);
|
|
526
|
+
const rows = await executeFindManyWithRelations(executor, runtime, tableAccessor, table, tableIndex, { ...args, with: args?.with ?? {}, take: 1 }, appendUniquePredicate(compiledWhere.sql, args?.andSql), compiledWhere.params, { useHasManyAggregate: false }, projection);
|
|
479
527
|
return rows[0] ?? null;
|
|
480
528
|
}
|
|
481
529
|
function extractScalarPkValue(table, id) {
|