@mikro-orm/sql 7.0.4 → 7.0.5-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 +1941 -2064
  5. package/AbstractSqlPlatform.d.ts +73 -83
  6. package/AbstractSqlPlatform.js +158 -162
  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 +194 -192
  16. package/dialects/mysql/BaseMySqlPlatform.d.ts +45 -64
  17. package/dialects/mysql/BaseMySqlPlatform.js +131 -134
  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 -39
  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 +236 -232
  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 -102
  37. package/dialects/postgresql/PostgreSqlSchemaHelper.js +705 -733
  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 -70
  51. package/dialects/sqlite/SqliteSchemaHelper.js +520 -533
  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 +118 -118
  64. package/query/NativeQueryBuilder.js +480 -484
  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 -1079
  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 -73
  78. package/schema/DatabaseSchema.js +307 -331
  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 +740 -766
  83. package/schema/SchemaHelper.d.ts +95 -109
  84. package/schema/SchemaHelper.js +659 -675
  85. package/schema/SqlSchemaGenerator.d.ts +58 -78
  86. package/schema/SqlSchemaGenerator.js +501 -535
  87. package/typings.d.ts +266 -380
@@ -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,74 +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[]): Promise<Table[]>;
15
- getNamespaces(connection: AbstractSqlConnection): Promise<string[]>;
16
- private getIgnoredViewsCondition;
17
- getListViewsSQL(): string;
18
- loadViews(schema: DatabaseSchema, connection: AbstractSqlConnection, schemaName?: string): Promise<void>;
19
- getDropDatabaseSQL(name: string): string;
20
- loadInformationSchema(
21
- schema: DatabaseSchema,
22
- connection: AbstractSqlConnection,
23
- tables: Table[],
24
- schemas?: string[],
25
- ): Promise<void>;
26
- createTable(table: DatabaseTable, alter?: boolean): string[];
27
- createTableColumn(column: Column, table: DatabaseTable, _changedProperties?: Set<string>): string | undefined;
28
- getAddColumnsSQL(table: DatabaseTable, columns: Column[], diff?: TableDifference): string[];
29
- dropForeignKey(tableName: string, constraintName: string): string;
30
- getDropColumnsSQL(tableName: string, columns: Column[], schemaName?: string): string;
31
- getCreateIndexSQL(tableName: string, index: IndexDef): string;
32
- private parseTableDefinition;
33
- /**
34
- * Returns schema prefix for pragma and sqlite_master queries.
35
- * Returns empty string for main database (no prefix needed).
36
- */
37
- private getSchemaPrefix;
38
- /**
39
- * Returns all database names excluding 'temp'.
40
- */
41
- private getDatabaseList;
42
- /**
43
- * Extracts the SELECT part from a CREATE VIEW statement.
44
- */
45
- private extractViewDefinition;
46
- private getColumns;
47
- /**
48
- * SQLite strips outer parentheses from expression defaults (`DEFAULT (expr)` → `expr` in pragma).
49
- * We need to add them back so they match what we generate in DDL.
50
- */
51
- private wrapExpressionDefault;
52
- private getEnumDefinitions;
53
- getPrimaryKeys(
54
- connection: AbstractSqlConnection,
55
- indexes: IndexDef[],
56
- tableName: string,
57
- schemaName?: string,
58
- ): Promise<string[]>;
59
- private getIndexes;
60
- private getChecks;
61
- private getColumnDefinitions;
62
- private getForeignKeys;
63
- getManagementDbName(): string;
64
- getCreateDatabaseSQL(name: string): string;
65
- databaseExists(connection: Connection, name: string): Promise<boolean>;
66
- /**
67
- * Implicit indexes will be ignored when diffing
68
- */
69
- isImplicitIndex(name: string): boolean;
70
- dropIndex(table: string, index: IndexDef, oldIndexName?: string): string;
71
- /**
72
- * SQLite does not support schema-qualified table names in REFERENCES clauses.
73
- * Foreign key references can only point to tables in the same database.
74
- */
75
- getReferencedTableName(referencedTableName: string, schema?: string): string;
76
- alterTable(diff: TableDifference, safe?: boolean): string[];
77
- 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[]): Promise<Table[]>;
15
+ getNamespaces(connection: AbstractSqlConnection): Promise<string[]>;
16
+ private getIgnoredViewsCondition;
17
+ getListViewsSQL(): string;
18
+ loadViews(schema: DatabaseSchema, connection: AbstractSqlConnection, schemaName?: string): Promise<void>;
19
+ getDropDatabaseSQL(name: string): string;
20
+ loadInformationSchema(schema: DatabaseSchema, connection: AbstractSqlConnection, tables: Table[], schemas?: string[]): 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): 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;
78
68
  }