@mikro-orm/sql 7.1.12-dev.16 → 7.1.12-dev.17

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mikro-orm/sql",
3
- "version": "7.1.12-dev.16",
3
+ "version": "7.1.12-dev.17",
4
4
  "description": "TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, PostgreSQL and SQLite databases as well as usage with vanilla JavaScript.",
5
5
  "keywords": [
6
6
  "data-mapper",
@@ -53,7 +53,7 @@
53
53
  "@mikro-orm/core": "^7.1.11"
54
54
  },
55
55
  "peerDependencies": {
56
- "@mikro-orm/core": "7.1.12-dev.16"
56
+ "@mikro-orm/core": "7.1.12-dev.17"
57
57
  },
58
58
  "engines": {
59
59
  "node": ">= 22.17.0"
@@ -439,7 +439,7 @@ export declare class QueryBuilder<Entity extends object = AnyEntity, RootAlias e
439
439
  */
440
440
  join<Field extends QBField<Entity, RootAlias, Context>, Alias extends string>(field: Field, alias: Alias, cond?: JoinCondition<JoinedEntityType<Entity, Context, Field & string>, Alias>, type?: JoinType, path?: string, schema?: string): SelectQueryBuilder<Entity, RootAlias, ModifyHint<RootAlias, Context, Hint, Field> & {}, ModifyContext<Entity, Context, Field, Alias>, RawAliases, Fields, CTEs>;
441
441
  /**
442
- * Adds a JOIN clause to the query for a subquery.
442
+ * Adds a JOIN clause to the query for a subquery. Use `sql.ref('...')` to join a table or CTE by name.
443
443
  */
444
444
  join<Alias extends string>(field: RawQueryFragment | QueryBuilder<any>, alias: Alias, cond?: RawJoinCondition, type?: JoinType, path?: string, schema?: string): SelectQueryBuilder<Entity, RootAlias, Hint, ModifyContext<Entity, Context, string, Alias>, RawAliases, Fields, CTEs>;
445
445
  /**
@@ -447,7 +447,7 @@ export declare class QueryBuilder<Entity extends object = AnyEntity, RootAlias e
447
447
  */
448
448
  innerJoin<Field extends QBField<Entity, RootAlias, Context>, Alias extends string>(field: Field, alias: Alias, cond?: JoinCondition<JoinedEntityType<Entity, Context, Field & string>, Alias>, schema?: string): SelectQueryBuilder<Entity, RootAlias, ModifyHint<RootAlias, Context, Hint, Field> & {}, ModifyContext<Entity, Context, Field, Alias>, RawAliases, Fields, CTEs>;
449
449
  /**
450
- * Adds an INNER JOIN clause to the query for a subquery.
450
+ * Adds an INNER JOIN clause to the query for a subquery. Use `sql.ref('...')` to join a table or CTE by name.
451
451
  */
452
452
  innerJoin<Alias extends string>(field: RawQueryFragment | QueryBuilder<any>, alias: Alias, cond?: RawJoinCondition, schema?: string): SelectQueryBuilder<Entity, RootAlias, Hint, ModifyContext<Entity, Context, string, Alias>, RawAliases, Fields, CTEs>;
453
453
  innerJoinLateral<Alias extends string>(field: RawQueryFragment | QueryBuilder<any>, alias: Alias, cond?: RawJoinCondition, schema?: string): SelectQueryBuilder<Entity, RootAlias, Hint, ModifyContext<Entity, Context, string, Alias>, RawAliases, Fields, CTEs>;
@@ -456,7 +456,7 @@ export declare class QueryBuilder<Entity extends object = AnyEntity, RootAlias e
456
456
  */
457
457
  leftJoin<Field extends QBField<Entity, RootAlias, Context>, Alias extends string>(field: Field, alias: Alias, cond?: JoinCondition<JoinedEntityType<Entity, Context, Field & string>, Alias>, schema?: string): SelectQueryBuilder<Entity, RootAlias, ModifyHint<RootAlias, Context, Hint, Field> & {}, ModifyContext<Entity, Context, Field, Alias>, RawAliases, Fields, CTEs>;
458
458
  /**
459
- * Adds a LEFT JOIN clause to the query for a subquery.
459
+ * Adds a LEFT JOIN clause to the query for a subquery. Use `sql.ref('...')` to join a table or CTE by name.
460
460
  */
461
461
  leftJoin<Alias extends string>(field: RawQueryFragment | QueryBuilder<any>, alias: Alias, cond?: RawJoinCondition, schema?: string): SelectQueryBuilder<Entity, RootAlias, Hint, ModifyContext<Entity, Context, string, Alias>, RawAliases, Fields, CTEs>;
462
462
  leftJoinLateral<Alias extends string>(field: RawQueryFragment | QueryBuilder<any>, alias: Alias, cond?: RawJoinCondition, schema?: string): SelectQueryBuilder<Entity, RootAlias, Hint, ModifyContext<Entity, Context, string, Alias>, RawAliases, Fields, CTEs>;
@@ -1410,19 +1410,19 @@ export class QueryBuilder {
1410
1410
  prop.targetMeta = field.mainAlias.meta;
1411
1411
  field = field.getNativeQuery();
1412
1412
  }
1413
- if (isRaw(field)) {
1414
- field = this.platform.formatQuery(field.sql, field.params);
1415
- }
1416
1413
  const key = `${this.alias}.${prop.name}#${alias}`;
1417
- this.#state.joins[key] = {
1418
- prop,
1419
- alias,
1420
- type,
1421
- cond,
1422
- schema,
1423
- subquery: field.toString(),
1424
- ownerAlias: this.alias,
1425
- };
1414
+ const join = { prop, alias, type, cond, schema, ownerAlias: this.alias };
1415
+ // `sql.ref('...')` is a bare table/CTE reference, join it by name instead of wrapping it as a sub-query
1416
+ if (isRaw(field) && field.sql === '??' && field.params.length === 1) {
1417
+ join.table = String(field.params[0]);
1418
+ }
1419
+ else {
1420
+ if (isRaw(field)) {
1421
+ field = this.platform.formatQuery(field.sql, field.params);
1422
+ }
1423
+ join.subquery = field.toString();
1424
+ }
1425
+ this.#state.joins[key] = join;
1426
1426
  return { prop, key };
1427
1427
  }
1428
1428
  if (!subquery && type.includes('lateral')) {
@@ -248,7 +248,13 @@ export class QueryBuilderHelper {
248
248
  }[join.type] ?? join.type;
249
249
  const conditions = [];
250
250
  const params = [];
251
- schema = join.schema === '*' ? schema : (join.schema ?? schemaOverride);
251
+ if (join.prop.name === '__subquery__') {
252
+ // bare table/CTE references (`sql.ref()` joins) keep their literal name, only an explicit schema applies
253
+ schema = join.schema === '*' ? undefined : join.schema;
254
+ }
255
+ else {
256
+ schema = join.schema === '*' ? schema : (join.schema ?? schemaOverride);
257
+ }
252
258
  if (schema && schema !== this.#platform.getDefaultSchemaName()) {
253
259
  table = `${schema}.${table}`;
254
260
  }