Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

@mikro-orm/sql

Package Overview
Dependencies
Maintainers
1
Versions
186
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@mikro-orm/sql - npm Package Compare versions

Comparing version
7.0.0-dev.225
to
7.0.0-dev.226
+23
-0
AbstractSqlDriver.d.ts

@@ -29,2 +29,7 @@ import { type AnyEntity, type Collection, type Configuration, type ConnectionType, type Constructor, type CountOptions, DatabaseDriver, type DeleteOptions, type Dictionary, type DriverMethodOptions, type EntityData, type EntityDictionary, type EntityField, EntityManagerType, type EntityMetadata, type EntityName, type EntityProperty, type FilterQuery, type FindOneOptions, type FindOptions, type LockOptions, type LoggingOptions, type NativeInsertUpdateManyOptions, type NativeInsertUpdateOptions, type ObjectQuery, type Options, type OrderDefinition, type PopulateOptions, type PopulatePath, type Primary, type QueryOrderMap, type QueryResult, RawQueryFragment, type StreamOptions, type Transaction, type UpsertManyOptions, type UpsertOptions } from '@mikro-orm/core';

private mapJoinedProps;
/**
* Maps a single property from a joined result row into the relation pojo.
* Handles polymorphic FKs, composite keys, Date parsing, and embedded objects.
*/
private mapJoinedProp;
count<T extends object>(entityName: EntityName<T>, where: any, options?: CountOptions<T>): Promise<number>;

@@ -44,2 +49,20 @@ nativeInsert<T extends object>(entityName: EntityName<T>, data: EntityDictionary<T>, options?: NativeInsertUpdateOptions<T>): Promise<QueryResult<T>>;

loadFromPivotTable<T extends object, O extends object>(prop: EntityProperty, owners: Primary<O>[][], where?: FilterQuery<any>, orderBy?: OrderDefinition<T>, ctx?: Transaction, options?: FindOptions<T, any, any, any>, pivotJoin?: boolean): Promise<Dictionary<T[]>>;
/**
* Load from a polymorphic M:N pivot table.
*/
protected loadFromPolymorphicPivotTable<T extends object, O extends object>(prop: EntityProperty, owners: Primary<O>[][], where?: FilterQuery<any>, orderBy?: OrderDefinition<T>, ctx?: Transaction, options?: FindOptions<T, any, any, any>, pivotJoin?: boolean): Promise<Dictionary<T[]>>;
/**
* Load from owner side of polymorphic M:N (e.g., Post -> Tags)
*/
protected loadPolymorphicPivotOwnerSide<T extends object, O extends object>(prop: EntityProperty, owners: Primary<O>[][], where: FilterQuery<any>, orderBy?: OrderDefinition<T>, ctx?: Transaction, options?: FindOptions<T, any, any, any>, pivotJoin?: boolean, inverseProp?: EntityProperty): Promise<Dictionary<T[]>>;
/**
* Load from inverse side of polymorphic M:N (e.g., Tag -> Posts)
* Uses single query with join via virtual relation on pivot.
*/
protected loadPolymorphicPivotInverseSide<T extends object, O extends object>(prop: EntityProperty, owners: Primary<O>[][], where: FilterQuery<any>, orderBy?: OrderDefinition<T>, ctx?: Transaction, options?: FindOptions<T, any, any, any>): Promise<Dictionary<T[]>>;
/**
* Build a map from owner PKs to their related entities from pivot table results.
*/
private buildPivotResultMap;
private wrapPopulateFilter;
private getPivotOrderBy;

@@ -46,0 +69,0 @@ execute<T extends QueryResult | EntityData<AnyEntity> | EntityData<AnyEntity>[] = EntityData<AnyEntity>[]>(query: string | NativeQueryBuilder | RawQueryFragment, params?: any[], method?: 'all' | 'get' | 'run', ctx?: Transaction, loggerContext?: LoggingOptions): Promise<T>;

+2
-2
{
"name": "@mikro-orm/sql",
"version": "7.0.0-dev.225",
"version": "7.0.0-dev.226",
"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.",

@@ -59,4 +59,4 @@ "type": "module",

"peerDependencies": {
"@mikro-orm/core": "7.0.0-dev.225"
"@mikro-orm/core": "7.0.0-dev.226"
}
}

@@ -20,4 +20,9 @@ import { type Dictionary, type EntityMetadata, type EntityProperty, type Primary, type Transaction } from '@mikro-orm/core';

private enqueueDelete;
/**
* Build the keys and data arrays for pivot table operations.
* Handles polymorphic M:N by prepending the discriminator column/value.
*/
private buildPivotKeysAndData;
private collectStatements;
execute(): Promise<void>;
}

@@ -86,6 +86,3 @@ class InsertStatement {

createInsertStatement(prop, fks, pks) {
const data = prop.owner ? [...fks, ...pks] : [...pks, ...fks];
const keys = prop.owner
? [...prop.inverseJoinColumns, ...prop.joinColumns]
: [...prop.joinColumns, ...prop.inverseJoinColumns];
const { data, keys } = this.buildPivotKeysAndData(prop, fks, pks);
return new InsertStatement(keys, data, this.order++);

@@ -95,3 +92,4 @@ }

if (deleteDiff === true) {
const statement = new DeleteStatement(prop.joinColumns, pks);
const { data, keys } = this.buildPivotKeysAndData(prop, [], pks, true);
const statement = new DeleteStatement(keys, data);
this.deletes.set(statement.getHash(), statement);

@@ -101,6 +99,3 @@ return;

for (const fks of deleteDiff) {
const data = prop.owner ? [...fks, ...pks] : [...pks, ...fks];
const keys = prop.owner
? [...prop.inverseJoinColumns, ...prop.joinColumns]
: [...prop.joinColumns, ...prop.inverseJoinColumns];
const { data, keys } = this.buildPivotKeysAndData(prop, fks, pks);
const statement = new DeleteStatement(keys, data);

@@ -110,2 +105,25 @@ this.deletes.set(statement.getHash(), statement);

}
/**
* Build the keys and data arrays for pivot table operations.
* Handles polymorphic M:N by prepending the discriminator column/value.
*/
buildPivotKeysAndData(prop, fks, pks, deleteAll = false) {
let data;
let keys;
if (deleteAll) {
data = pks;
keys = prop.joinColumns;
}
else {
data = prop.owner ? [...fks, ...pks] : [...pks, ...fks];
keys = prop.owner
? [...prop.inverseJoinColumns, ...prop.joinColumns]
: [...prop.joinColumns, ...prop.inverseJoinColumns];
}
if (prop.polymorphic && prop.discriminatorColumn && prop.discriminatorValue) {
data = [prop.discriminatorValue, ...data];
keys = [prop.discriminatorColumn, ...keys];
}
return { data, keys };
}
collectStatements(statements) {

@@ -112,0 +130,0 @@ const items = [];

@@ -666,4 +666,10 @@ import { type AnyEntity, type AutoPath, type ConnectionType, type Dictionary, type EntityData, type EntityKey, type EntityManager, type EntityMetadata, type EntityName, type EntityProperty, type ExpandProperty, type FilterObject, type FilterOptions, type FilterValue, type FlushMode, type GroupOperator, type Loaded, LockMode, type LoggingOptions, type MetadataStorage, type ObjectQuery, PopulateHint, type PopulateOptions, type PopulatePath, QueryFlag, type QueryOrderKeysFlat, type QueryOrderMap, type QueryResult, RawQueryFragment, type Raw, type RequiredEntityData, type Scalar, type Subquery, type Transaction } from '@mikro-orm/core';

/**
* Registers a join for a specific polymorphic target type.
* Used by the driver to create per-target LEFT JOINs for JOINED loading.
* @internal
*/
addPolymorphicJoin(prop: EntityProperty, targetMeta: EntityMetadata, ownerAlias: string, alias: string, type: JoinType, path: string, schema?: string): void;
/**
* @internal
*/
getAliasMap(): Dictionary<EntityName>;

@@ -670,0 +676,0 @@ /**

@@ -1,2 +0,2 @@

import { ALIAS_REPLACEMENT, ALIAS_REPLACEMENT_RE, ArrayType, inspect, isRaw, LockMode, OptimisticLockError, QueryOperator, QueryOrderNumeric, raw, Raw, ReferenceKind, Utils, ValidationError, } from '@mikro-orm/core';
import { ALIAS_REPLACEMENT, ALIAS_REPLACEMENT_RE, ArrayType, inspect, isRaw, LockMode, OptimisticLockError, QueryOperator, QueryOrderNumeric, raw, Raw, QueryHelper, ReferenceKind, Utils, ValidationError, } from '@mikro-orm/core';
import { JoinType, QueryType } from './enums.js';

@@ -136,2 +136,10 @@ import { NativeQueryBuilder } from './NativeQueryBuilder.js';

cond = Utils.merge(cond, prop.where);
// For inverse side of polymorphic relations, add discriminator condition
if (!prop.owner && prop2.polymorphic && prop2.discriminatorColumn && prop2.discriminatorMap) {
const ownerMeta = this.aliasMap[ownerAlias]?.meta ?? this.metadata.get(this.entityName);
const discriminatorValue = QueryHelper.findDiscriminatorValue(prop2.discriminatorMap, ownerMeta.class);
if (discriminatorValue) {
cond[`${alias}.${prop2.discriminatorColumn}`] = discriminatorValue;
}
}
return {

@@ -148,3 +156,5 @@ prop, type, cond, ownerAlias, alias, table, schema,

joinColumns: prop.referencedColumnNames,
primaryKeys: prop.fieldNames,
// For polymorphic relations, fieldNames includes the discriminator column which is not
// part of the join condition - use joinColumns (the FK columns only) instead
primaryKeys: prop.polymorphic ? prop.joinColumns : prop.fieldNames,
};

@@ -223,2 +233,11 @@ }

}
// For polymorphic relations, add discriminator condition to filter by target entity type
if (join.prop.polymorphic && join.prop.discriminatorColumn && join.prop.discriminatorMap) {
const discriminatorValue = QueryHelper.findDiscriminatorValue(join.prop.discriminatorMap, join.prop.targetMeta.class);
if (discriminatorValue) {
const discriminatorCol = this.platform.quoteIdentifier(`${join.ownerAlias}.${join.prop.discriminatorColumn}`);
conditions.push(`${discriminatorCol} = ?`);
params.push(discriminatorValue);
}
}
let sql = method + ' ';

@@ -225,0 +244,0 @@ if (join.nested) {

@@ -106,3 +106,3 @@ import { DecimalType, EntitySchema, RawQueryFragment, ReferenceKind, t, Type, UnknownType, Utils, } from '@mikro-orm/core';

});
if ([ReferenceKind.MANY_TO_ONE, ReferenceKind.ONE_TO_ONE].includes(prop.kind)) {
if ([ReferenceKind.MANY_TO_ONE, ReferenceKind.ONE_TO_ONE].includes(prop.kind) && !prop.polymorphic) {
const constraintName = this.getIndexName(prop.foreignKeyName ?? true, prop.fieldNames, 'foreign');

@@ -109,0 +109,0 @@ let schema = prop.targetMeta.root.schema === '*' ? this.schema : (prop.targetMeta.root.schema ?? config.get('schema', this.platform.getDefaultSchemaName()));

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display