@mikro-orm/sql 7.0.9 → 7.0.10-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/AbstractSqlConnection.d.ts +58 -94
  2. package/AbstractSqlConnection.js +238 -235
  3. package/AbstractSqlDriver.d.ts +155 -410
  4. package/AbstractSqlDriver.js +1968 -2096
  5. package/AbstractSqlPlatform.d.ts +75 -85
  6. package/AbstractSqlPlatform.js +162 -166
  7. package/PivotCollectionPersister.d.ts +15 -33
  8. package/PivotCollectionPersister.js +160 -158
  9. package/README.md +1 -1
  10. package/SqlEntityManager.d.ts +22 -67
  11. package/SqlEntityManager.js +38 -54
  12. package/SqlEntityRepository.d.ts +14 -14
  13. package/SqlEntityRepository.js +23 -23
  14. package/dialects/mssql/MsSqlNativeQueryBuilder.d.ts +12 -12
  15. package/dialects/mssql/MsSqlNativeQueryBuilder.js +201 -199
  16. package/dialects/mysql/BaseMySqlPlatform.d.ts +46 -65
  17. package/dialects/mysql/BaseMySqlPlatform.js +134 -137
  18. package/dialects/mysql/MySqlExceptionConverter.d.ts +6 -6
  19. package/dialects/mysql/MySqlExceptionConverter.js +77 -91
  20. package/dialects/mysql/MySqlNativeQueryBuilder.d.ts +3 -3
  21. package/dialects/mysql/MySqlNativeQueryBuilder.js +69 -66
  22. package/dialects/mysql/MySqlSchemaHelper.d.ts +39 -58
  23. package/dialects/mysql/MySqlSchemaHelper.js +319 -327
  24. package/dialects/oracledb/OracleDialect.d.ts +52 -81
  25. package/dialects/oracledb/OracleDialect.js +149 -155
  26. package/dialects/oracledb/OracleNativeQueryBuilder.d.ts +12 -12
  27. package/dialects/oracledb/OracleNativeQueryBuilder.js +243 -239
  28. package/dialects/postgresql/BasePostgreSqlPlatform.d.ts +106 -109
  29. package/dialects/postgresql/BasePostgreSqlPlatform.js +353 -354
  30. package/dialects/postgresql/FullTextType.d.ts +6 -10
  31. package/dialects/postgresql/FullTextType.js +51 -51
  32. package/dialects/postgresql/PostgreSqlExceptionConverter.d.ts +5 -5
  33. package/dialects/postgresql/PostgreSqlExceptionConverter.js +43 -55
  34. package/dialects/postgresql/PostgreSqlNativeQueryBuilder.d.ts +1 -1
  35. package/dialects/postgresql/PostgreSqlNativeQueryBuilder.js +4 -4
  36. package/dialects/postgresql/PostgreSqlSchemaHelper.d.ts +82 -117
  37. package/dialects/postgresql/PostgreSqlSchemaHelper.js +711 -747
  38. package/dialects/sqlite/BaseSqliteConnection.d.ts +5 -3
  39. package/dialects/sqlite/BaseSqliteConnection.js +19 -21
  40. package/dialects/sqlite/NodeSqliteDialect.d.ts +1 -1
  41. package/dialects/sqlite/NodeSqliteDialect.js +23 -23
  42. package/dialects/sqlite/SqliteDriver.d.ts +1 -1
  43. package/dialects/sqlite/SqliteDriver.js +3 -3
  44. package/dialects/sqlite/SqliteExceptionConverter.d.ts +6 -6
  45. package/dialects/sqlite/SqliteExceptionConverter.js +51 -67
  46. package/dialects/sqlite/SqliteNativeQueryBuilder.d.ts +2 -2
  47. package/dialects/sqlite/SqliteNativeQueryBuilder.js +7 -7
  48. package/dialects/sqlite/SqlitePlatform.d.ts +72 -63
  49. package/dialects/sqlite/SqlitePlatform.js +139 -139
  50. package/dialects/sqlite/SqliteSchemaHelper.d.ts +60 -77
  51. package/dialects/sqlite/SqliteSchemaHelper.js +522 -541
  52. package/package.json +2 -2
  53. package/plugin/index.d.ts +35 -42
  54. package/plugin/index.js +36 -43
  55. package/plugin/transformer.d.ts +94 -117
  56. package/plugin/transformer.js +881 -890
  57. package/query/ArrayCriteriaNode.d.ts +4 -4
  58. package/query/ArrayCriteriaNode.js +18 -18
  59. package/query/CriteriaNode.d.ts +25 -35
  60. package/query/CriteriaNode.js +123 -133
  61. package/query/CriteriaNodeFactory.d.ts +6 -49
  62. package/query/CriteriaNodeFactory.js +94 -97
  63. package/query/NativeQueryBuilder.d.ts +120 -120
  64. package/query/NativeQueryBuilder.js +501 -507
  65. package/query/ObjectCriteriaNode.d.ts +12 -12
  66. package/query/ObjectCriteriaNode.js +282 -298
  67. package/query/QueryBuilder.d.ts +905 -1557
  68. package/query/QueryBuilder.js +2192 -2322
  69. package/query/QueryBuilderHelper.d.ts +72 -153
  70. package/query/QueryBuilderHelper.js +1028 -1080
  71. package/query/ScalarCriteriaNode.d.ts +3 -3
  72. package/query/ScalarCriteriaNode.js +46 -53
  73. package/query/enums.d.ts +14 -14
  74. package/query/enums.js +14 -14
  75. package/query/raw.d.ts +6 -16
  76. package/query/raw.js +10 -10
  77. package/schema/DatabaseSchema.d.ts +50 -74
  78. package/schema/DatabaseSchema.js +327 -355
  79. package/schema/DatabaseTable.d.ts +73 -96
  80. package/schema/DatabaseTable.js +927 -1012
  81. package/schema/SchemaComparator.d.ts +66 -70
  82. package/schema/SchemaComparator.js +764 -790
  83. package/schema/SchemaHelper.d.ts +96 -121
  84. package/schema/SchemaHelper.js +668 -683
  85. package/schema/SqlSchemaGenerator.d.ts +59 -79
  86. package/schema/SqlSchemaGenerator.js +495 -525
  87. package/typings.d.ts +275 -405
@@ -3,143 +3,143 @@ import { SqliteNativeQueryBuilder } from './SqliteNativeQueryBuilder.js';
3
3
  import { SqliteSchemaHelper } from './SqliteSchemaHelper.js';
4
4
  import { SqliteExceptionConverter } from './SqliteExceptionConverter.js';
5
5
  export class SqlitePlatform extends AbstractSqlPlatform {
6
- schemaHelper = new SqliteSchemaHelper(this);
7
- exceptionConverter = new SqliteExceptionConverter();
8
- /** @internal */
9
- createNativeQueryBuilder() {
10
- return new SqliteNativeQueryBuilder(this);
11
- }
12
- usesDefaultKeyword() {
13
- return false;
14
- }
15
- usesReturningStatement() {
16
- return true;
17
- }
18
- usesEnumCheckConstraints() {
19
- return true;
20
- }
21
- getCurrentTimestampSQL(length) {
22
- return `(strftime('%s', 'now') * 1000)`;
23
- }
24
- getDateTimeTypeDeclarationSQL(column) {
25
- return 'datetime';
26
- }
27
- getBeginTransactionSQL(options) {
28
- return ['begin'];
29
- }
30
- getEnumTypeDeclarationSQL(column) {
31
- if (column.items?.every(item => typeof item === 'string')) {
32
- return 'text';
33
- }
34
- /* v8 ignore next */
35
- return this.getTinyIntTypeDeclarationSQL(column);
36
- }
37
- getTinyIntTypeDeclarationSQL(column) {
38
- return this.getIntegerTypeDeclarationSQL(column);
39
- }
40
- getSmallIntTypeDeclarationSQL(column) {
41
- return this.getIntegerTypeDeclarationSQL(column);
42
- }
43
- getIntegerTypeDeclarationSQL(column) {
44
- return 'integer';
45
- }
46
- getFloatDeclarationSQL() {
47
- return 'real';
48
- }
49
- getBooleanTypeDeclarationSQL() {
50
- return 'integer';
51
- }
52
- getCharTypeDeclarationSQL(column) {
53
- return 'text';
54
- }
55
- getVarcharTypeDeclarationSQL(column) {
56
- return 'text';
57
- }
58
- normalizeColumnType(type, options) {
59
- const simpleType = this.extractSimpleType(type);
60
- if (['varchar', 'text'].includes(simpleType)) {
61
- return this.getVarcharTypeDeclarationSQL(options);
62
- }
63
- return simpleType;
64
- }
65
- convertsJsonAutomatically() {
66
- return false;
67
- }
68
- /**
69
- * This is used to narrow the value of Date properties as they will be stored as timestamps in sqlite.
70
- * We use this method to convert Dates to timestamps when computing the changeset, so we have the right
71
- * data type in the payload as well as in original entity data. Without that, we would end up with diffs
72
- * including all Date properties, as we would be comparing Date object with timestamp.
73
- */
74
- processDateProperty(value) {
75
- if (value instanceof Date) {
76
- return +value;
77
- }
78
- return value;
79
- }
80
- getIndexName(tableName, columns, type) {
81
- if (type === 'primary') {
82
- return this.getDefaultPrimaryName(tableName, columns);
83
- }
84
- return super.getIndexName(tableName, columns, type);
85
- }
86
- supportsDeferredUniqueConstraints() {
87
- return false;
88
- }
89
- /**
90
- * SQLite supports schemas via ATTACH DATABASE. Returns true when there are
91
- * attached databases configured.
92
- */
93
- supportsSchemas() {
94
- const attachDatabases = this.config.get('attachDatabases');
95
- return !!attachDatabases?.length;
96
- }
97
- getDefaultSchemaName() {
98
- // Return 'main' only when schema support is active (i.e., databases are attached)
99
- return this.supportsSchemas() ? 'main' : undefined;
100
- }
101
- getFullTextWhereClause() {
102
- return `:column: match :query`;
103
- }
104
- escape(value) {
105
- if (value == null) {
106
- return 'null';
107
- }
108
- if (typeof value === 'boolean') {
109
- return value ? 'true' : 'false';
110
- }
111
- if (typeof value === 'number' || typeof value === 'bigint') {
112
- return '' + value;
113
- }
114
- if (value instanceof Date) {
115
- return '' + +value;
116
- }
117
- if (Array.isArray(value)) {
118
- return value.map(v => this.escape(v)).join(', ');
119
- }
120
- if (Buffer.isBuffer(value)) {
121
- return `X'${value.toString('hex')}'`;
122
- }
123
- return `'${String(value).replace(/'/g, "''")}'`;
124
- }
125
- convertVersionValue(value, prop) {
126
- if (prop.runtimeType === 'Date') {
127
- const ts = +value;
128
- const str = new Date(ts)
129
- .toISOString()
130
- .replace('T', ' ')
131
- .replace(/\.\d{3}Z$/, '');
132
- return { $in: [ts, str] };
133
- }
134
- return value;
135
- }
136
- getJsonArrayElementPropertySQL(alias, property, _type) {
137
- return `json_extract(${this.quoteIdentifier(alias)}.value, '$.${this.quoteJsonKey(property)}')`;
138
- }
139
- quoteValue(value) {
140
- if (value instanceof Date) {
141
- return '' + +value;
142
- }
143
- return super.quoteValue(value);
144
- }
6
+ schemaHelper = new SqliteSchemaHelper(this);
7
+ exceptionConverter = new SqliteExceptionConverter();
8
+ /** @internal */
9
+ createNativeQueryBuilder() {
10
+ return new SqliteNativeQueryBuilder(this);
11
+ }
12
+ usesDefaultKeyword() {
13
+ return false;
14
+ }
15
+ usesReturningStatement() {
16
+ return true;
17
+ }
18
+ usesEnumCheckConstraints() {
19
+ return true;
20
+ }
21
+ getCurrentTimestampSQL(length) {
22
+ return `(strftime('%s', 'now') * 1000)`;
23
+ }
24
+ getDateTimeTypeDeclarationSQL(column) {
25
+ return 'datetime';
26
+ }
27
+ getBeginTransactionSQL(options) {
28
+ return ['begin'];
29
+ }
30
+ getEnumTypeDeclarationSQL(column) {
31
+ if (column.items?.every(item => typeof item === 'string')) {
32
+ return 'text';
33
+ }
34
+ /* v8 ignore next */
35
+ return this.getTinyIntTypeDeclarationSQL(column);
36
+ }
37
+ getTinyIntTypeDeclarationSQL(column) {
38
+ return this.getIntegerTypeDeclarationSQL(column);
39
+ }
40
+ getSmallIntTypeDeclarationSQL(column) {
41
+ return this.getIntegerTypeDeclarationSQL(column);
42
+ }
43
+ getIntegerTypeDeclarationSQL(column) {
44
+ return 'integer';
45
+ }
46
+ getFloatDeclarationSQL() {
47
+ return 'real';
48
+ }
49
+ getBooleanTypeDeclarationSQL() {
50
+ return 'integer';
51
+ }
52
+ getCharTypeDeclarationSQL(column) {
53
+ return 'text';
54
+ }
55
+ getVarcharTypeDeclarationSQL(column) {
56
+ return 'text';
57
+ }
58
+ normalizeColumnType(type, options) {
59
+ const simpleType = this.extractSimpleType(type);
60
+ if (['varchar', 'text'].includes(simpleType)) {
61
+ return this.getVarcharTypeDeclarationSQL(options);
62
+ }
63
+ return simpleType;
64
+ }
65
+ convertsJsonAutomatically() {
66
+ return false;
67
+ }
68
+ /**
69
+ * This is used to narrow the value of Date properties as they will be stored as timestamps in sqlite.
70
+ * We use this method to convert Dates to timestamps when computing the changeset, so we have the right
71
+ * data type in the payload as well as in original entity data. Without that, we would end up with diffs
72
+ * including all Date properties, as we would be comparing Date object with timestamp.
73
+ */
74
+ processDateProperty(value) {
75
+ if (value instanceof Date) {
76
+ return +value;
77
+ }
78
+ return value;
79
+ }
80
+ getIndexName(tableName, columns, type) {
81
+ if (type === 'primary') {
82
+ return this.getDefaultPrimaryName(tableName, columns);
83
+ }
84
+ return super.getIndexName(tableName, columns, type);
85
+ }
86
+ supportsDeferredUniqueConstraints() {
87
+ return false;
88
+ }
89
+ /**
90
+ * SQLite supports schemas via ATTACH DATABASE. Returns true when there are
91
+ * attached databases configured.
92
+ */
93
+ supportsSchemas() {
94
+ const attachDatabases = this.config.get('attachDatabases');
95
+ return !!attachDatabases?.length;
96
+ }
97
+ getDefaultSchemaName() {
98
+ // Return 'main' only when schema support is active (i.e., databases are attached)
99
+ return this.supportsSchemas() ? 'main' : undefined;
100
+ }
101
+ getFullTextWhereClause() {
102
+ return `:column: match :query`;
103
+ }
104
+ escape(value) {
105
+ if (value == null) {
106
+ return 'null';
107
+ }
108
+ if (typeof value === 'boolean') {
109
+ return value ? 'true' : 'false';
110
+ }
111
+ if (typeof value === 'number' || typeof value === 'bigint') {
112
+ return '' + value;
113
+ }
114
+ if (value instanceof Date) {
115
+ return '' + +value;
116
+ }
117
+ if (Array.isArray(value)) {
118
+ return value.map(v => this.escape(v)).join(', ');
119
+ }
120
+ if (Buffer.isBuffer(value)) {
121
+ return `X'${value.toString('hex')}'`;
122
+ }
123
+ return `'${String(value).replace(/'/g, "''")}'`;
124
+ }
125
+ convertVersionValue(value, prop) {
126
+ if (prop.runtimeType === 'Date') {
127
+ const ts = +value;
128
+ const str = new Date(ts)
129
+ .toISOString()
130
+ .replace('T', ' ')
131
+ .replace(/\.\d{3}Z$/, '');
132
+ return { $in: [ts, str] };
133
+ }
134
+ return value;
135
+ }
136
+ getJsonArrayElementPropertySQL(alias, property, _type) {
137
+ return `json_extract(${this.quoteIdentifier(alias)}.value, '$.${this.quoteJsonKey(property)}')`;
138
+ }
139
+ quoteValue(value) {
140
+ if (value instanceof Date) {
141
+ return '' + +value;
142
+ }
143
+ return super.quoteValue(value);
144
+ }
145
145
  }
@@ -5,81 +5,64 @@ import type { Column, IndexDef, Table, TableDifference } from '../../typings.js'
5
5
  import type { DatabaseTable } from '../../schema/DatabaseTable.js';
6
6
  import type { DatabaseSchema } from '../../schema/DatabaseSchema.js';
7
7
  export declare class SqliteSchemaHelper extends SchemaHelper {
8
- disableForeignKeysSQL(): string;
9
- enableForeignKeysSQL(): string;
10
- supportsSchemaConstraints(): boolean;
11
- getCreateNamespaceSQL(name: string): string;
12
- getDropNamespaceSQL(name: string): string;
13
- getListTablesSQL(): string;
14
- getAllTables(connection: AbstractSqlConnection, schemas?: string[], ctx?: Transaction): Promise<Table[]>;
15
- getNamespaces(connection: AbstractSqlConnection, ctx?: Transaction): Promise<string[]>;
16
- private getIgnoredViewsCondition;
17
- getListViewsSQL(): string;
18
- loadViews(
19
- schema: DatabaseSchema,
20
- connection: AbstractSqlConnection,
21
- schemaName?: string,
22
- ctx?: Transaction,
23
- ): Promise<void>;
24
- getDropDatabaseSQL(name: string): string;
25
- loadInformationSchema(
26
- schema: DatabaseSchema,
27
- connection: AbstractSqlConnection,
28
- tables: Table[],
29
- schemas?: string[],
30
- ctx?: Transaction,
31
- ): Promise<void>;
32
- createTable(table: DatabaseTable, alter?: boolean): string[];
33
- createTableColumn(column: Column, table: DatabaseTable, _changedProperties?: Set<string>): string | undefined;
34
- getAddColumnsSQL(table: DatabaseTable, columns: Column[], diff?: TableDifference): string[];
35
- dropForeignKey(tableName: string, constraintName: string): string;
36
- getDropColumnsSQL(tableName: string, columns: Column[], schemaName?: string): string;
37
- getCreateIndexSQL(tableName: string, index: IndexDef): string;
38
- private parseTableDefinition;
39
- /**
40
- * Returns schema prefix for pragma and sqlite_master queries.
41
- * Returns empty string for main database (no prefix needed).
42
- */
43
- private getSchemaPrefix;
44
- /**
45
- * Returns all database names excluding 'temp'.
46
- */
47
- private getDatabaseList;
48
- /**
49
- * Extracts the SELECT part from a CREATE VIEW statement.
50
- */
51
- private extractViewDefinition;
52
- private getColumns;
53
- /**
54
- * SQLite strips outer parentheses from expression defaults (`DEFAULT (expr)` → `expr` in pragma).
55
- * We need to add them back so they match what we generate in DDL.
56
- */
57
- private wrapExpressionDefault;
58
- private getEnumDefinitions;
59
- getPrimaryKeys(
60
- connection: AbstractSqlConnection,
61
- indexes: IndexDef[],
62
- tableName: string,
63
- schemaName?: string,
64
- ctx?: Transaction,
65
- ): Promise<string[]>;
66
- private getIndexes;
67
- private getChecks;
68
- private getColumnDefinitions;
69
- private getForeignKeys;
70
- getManagementDbName(): string;
71
- getCreateDatabaseSQL(name: string): string;
72
- databaseExists(connection: Connection, name: string): Promise<boolean>;
73
- /**
74
- * Implicit indexes will be ignored when diffing
75
- */
76
- isImplicitIndex(name: string): boolean;
77
- dropIndex(table: string, index: IndexDef, oldIndexName?: string): string;
78
- /**
79
- * SQLite does not support schema-qualified table names in REFERENCES clauses.
80
- * Foreign key references can only point to tables in the same database.
81
- */
82
- getReferencedTableName(referencedTableName: string, schema?: string): string;
83
- alterTable(diff: TableDifference, safe?: boolean): string[];
84
- private getAlterTempTableSQL;
8
+ disableForeignKeysSQL(): string;
9
+ enableForeignKeysSQL(): string;
10
+ supportsSchemaConstraints(): boolean;
11
+ getCreateNamespaceSQL(name: string): string;
12
+ getDropNamespaceSQL(name: string): string;
13
+ getListTablesSQL(): string;
14
+ getAllTables(connection: AbstractSqlConnection, schemas?: string[], ctx?: Transaction): Promise<Table[]>;
15
+ getNamespaces(connection: AbstractSqlConnection, ctx?: Transaction): Promise<string[]>;
16
+ private getIgnoredViewsCondition;
17
+ getListViewsSQL(): string;
18
+ loadViews(schema: DatabaseSchema, connection: AbstractSqlConnection, schemaName?: string, ctx?: Transaction): Promise<void>;
19
+ getDropDatabaseSQL(name: string): string;
20
+ loadInformationSchema(schema: DatabaseSchema, connection: AbstractSqlConnection, tables: Table[], schemas?: string[], ctx?: Transaction): Promise<void>;
21
+ createTable(table: DatabaseTable, alter?: boolean): string[];
22
+ createTableColumn(column: Column, table: DatabaseTable, _changedProperties?: Set<string>): string | undefined;
23
+ getAddColumnsSQL(table: DatabaseTable, columns: Column[], diff?: TableDifference): string[];
24
+ dropForeignKey(tableName: string, constraintName: string): string;
25
+ getDropColumnsSQL(tableName: string, columns: Column[], schemaName?: string): string;
26
+ getCreateIndexSQL(tableName: string, index: IndexDef): string;
27
+ private parseTableDefinition;
28
+ /**
29
+ * Returns schema prefix for pragma and sqlite_master queries.
30
+ * Returns empty string for main database (no prefix needed).
31
+ */
32
+ private getSchemaPrefix;
33
+ /**
34
+ * Returns all database names excluding 'temp'.
35
+ */
36
+ private getDatabaseList;
37
+ /**
38
+ * Extracts the SELECT part from a CREATE VIEW statement.
39
+ */
40
+ private extractViewDefinition;
41
+ private getColumns;
42
+ /**
43
+ * SQLite strips outer parentheses from expression defaults (`DEFAULT (expr)` → `expr` in pragma).
44
+ * We need to add them back so they match what we generate in DDL.
45
+ */
46
+ private wrapExpressionDefault;
47
+ private getEnumDefinitions;
48
+ getPrimaryKeys(connection: AbstractSqlConnection, indexes: IndexDef[], tableName: string, schemaName?: string, ctx?: Transaction): Promise<string[]>;
49
+ private getIndexes;
50
+ private getChecks;
51
+ private getColumnDefinitions;
52
+ private getForeignKeys;
53
+ getManagementDbName(): string;
54
+ getCreateDatabaseSQL(name: string): string;
55
+ databaseExists(connection: Connection, name: string): Promise<boolean>;
56
+ /**
57
+ * Implicit indexes will be ignored when diffing
58
+ */
59
+ isImplicitIndex(name: string): boolean;
60
+ dropIndex(table: string, index: IndexDef, oldIndexName?: string): string;
61
+ /**
62
+ * SQLite does not support schema-qualified table names in REFERENCES clauses.
63
+ * Foreign key references can only point to tables in the same database.
64
+ */
65
+ getReferencedTableName(referencedTableName: string, schema?: string): string;
66
+ alterTable(diff: TableDifference, safe?: boolean): string[];
67
+ private getAlterTempTableSQL;
85
68
  }