xansql 1.0.8 → 1.0.9
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/core/Xansql.cjs +7 -8
- package/core/Xansql.cjs.map +1 -1
- package/core/Xansql.d.ts +2 -3
- package/core/Xansql.mjs +7 -8
- package/core/Xansql.mjs.map +1 -1
- package/core/classes/ForeignInfo.cjs +3 -2
- package/core/classes/ForeignInfo.cjs.map +1 -1
- package/core/classes/ForeignInfo.d.ts +1 -2
- package/core/classes/ForeignInfo.mjs +3 -2
- package/core/classes/ForeignInfo.mjs.map +1 -1
- package/core/classes/Migration/TableMigration.cjs +24 -15
- package/core/classes/Migration/TableMigration.cjs.map +1 -1
- package/core/classes/Migration/TableMigration.mjs +25 -16
- package/core/classes/Migration/TableMigration.mjs.map +1 -1
- package/core/classes/Migration/index.cjs +13 -10
- package/core/classes/Migration/index.cjs.map +1 -1
- package/core/classes/Migration/index.mjs +14 -11
- package/core/classes/Migration/index.mjs.map +1 -1
- package/core/classes/{ModelFormatter.cjs → ModelFactory.cjs} +82 -56
- package/core/classes/ModelFactory.cjs.map +1 -0
- package/core/classes/{ModelFormatter.d.ts → ModelFactory.d.ts} +7 -2
- package/core/classes/{ModelFormatter.mjs → ModelFactory.mjs} +82 -56
- package/core/classes/ModelFactory.mjs.map +1 -0
- package/core/types.d.ts +1 -1
- package/dialect/MysqlDialect.cjs +7 -4
- package/dialect/MysqlDialect.cjs.map +1 -1
- package/dialect/MysqlDialect.d.ts +7 -4
- package/dialect/MysqlDialect.mjs +7 -4
- package/dialect/MysqlDialect.mjs.map +1 -1
- package/dialect/PostgresDialect.cjs +5 -2
- package/dialect/PostgresDialect.cjs.map +1 -1
- package/dialect/PostgresDialect.d.ts +5 -2
- package/dialect/PostgresDialect.mjs +5 -2
- package/dialect/PostgresDialect.mjs.map +1 -1
- package/dialect/SqliteDialect.cjs +3 -2
- package/dialect/SqliteDialect.cjs.map +1 -1
- package/dialect/SqliteDialect.d.ts +3 -2
- package/dialect/SqliteDialect.mjs +3 -2
- package/dialect/SqliteDialect.mjs.map +1 -1
- package/dialect/XansqlBridge/XansqlBridgeServer.cjs.map +1 -1
- package/dialect/XansqlBridge/XansqlBridgeServer.mjs.map +1 -1
- package/dialect/XansqlBridge/base.cjs +10 -5
- package/dialect/XansqlBridge/base.cjs.map +1 -1
- package/dialect/XansqlBridge/base.mjs +10 -5
- package/dialect/XansqlBridge/base.mjs.map +1 -1
- package/model/Args/WhereArgs.cjs +5 -8
- package/model/Args/WhereArgs.cjs.map +1 -1
- package/model/Args/WhereArgs.mjs +6 -9
- package/model/Args/WhereArgs.mjs.map +1 -1
- package/model/Base.cjs +2 -1
- package/model/Base.cjs.map +1 -1
- package/model/Base.mjs +2 -1
- package/model/Base.mjs.map +1 -1
- package/model/Executer/Aggregate/SelectArgs.cjs +2 -1
- package/model/Executer/Aggregate/SelectArgs.cjs.map +1 -1
- package/model/Executer/Aggregate/SelectArgs.mjs +2 -1
- package/model/Executer/Aggregate/SelectArgs.mjs.map +1 -1
- package/model/Executer/Aggregate/index.cjs +4 -4
- package/model/Executer/Aggregate/index.cjs.map +1 -1
- package/model/Executer/Aggregate/index.mjs +4 -4
- package/model/Executer/Aggregate/index.mjs.map +1 -1
- package/model/Executer/Create/CreateDataArgs.cjs +9 -5
- package/model/Executer/Create/CreateDataArgs.cjs.map +1 -1
- package/model/Executer/Create/CreateDataArgs.mjs +10 -6
- package/model/Executer/Create/CreateDataArgs.mjs.map +1 -1
- package/model/Executer/Create/index.cjs +1 -1
- package/model/Executer/Create/index.cjs.map +1 -1
- package/model/Executer/Create/index.mjs +1 -1
- package/model/Executer/Create/index.mjs.map +1 -1
- package/model/Executer/Delete/index.cjs +2 -1
- package/model/Executer/Delete/index.cjs.map +1 -1
- package/model/Executer/Delete/index.mjs +2 -1
- package/model/Executer/Delete/index.mjs.map +1 -1
- package/model/Executer/Find/SelectArgs.cjs +3 -3
- package/model/Executer/Find/SelectArgs.cjs.map +1 -1
- package/model/Executer/Find/SelectArgs.mjs +3 -3
- package/model/Executer/Find/SelectArgs.mjs.map +1 -1
- package/model/Executer/Update/UpdateDataArgs.cjs +4 -4
- package/model/Executer/Update/UpdateDataArgs.cjs.map +1 -1
- package/model/Executer/Update/UpdateDataArgs.mjs +5 -5
- package/model/Executer/Update/UpdateDataArgs.mjs.map +1 -1
- package/model/Executer/Update/index.cjs +1 -1
- package/model/Executer/Update/index.cjs.map +1 -1
- package/model/Executer/Update/index.mjs +1 -1
- package/model/Executer/Update/index.mjs.map +1 -1
- package/model/include/ValueFormatter.cjs +72 -17
- package/model/include/ValueFormatter.cjs.map +1 -1
- package/model/include/ValueFormatter.d.ts +1 -1
- package/model/include/ValueFormatter.mjs +72 -17
- package/model/include/ValueFormatter.mjs.map +1 -1
- package/model/index.cjs +8 -7
- package/model/index.cjs.map +1 -1
- package/model/index.mjs +8 -7
- package/model/index.mjs.map +1 -1
- package/package.json +12 -7
- package/utils/index.cjs +5 -2
- package/utils/index.cjs.map +1 -1
- package/utils/index.d.ts +2 -1
- package/utils/index.mjs +5 -3
- package/utils/index.mjs.map +1 -1
- package/xt/additional/IP.cjs +22 -0
- package/xt/additional/IP.cjs.map +1 -0
- package/xt/additional/IP.d.ts +6 -0
- package/xt/additional/IP.mjs +20 -0
- package/xt/additional/IP.mjs.map +1 -0
- package/xt/additional/Name.cjs +21 -0
- package/xt/additional/Name.cjs.map +1 -0
- package/xt/additional/Name.d.ts +6 -0
- package/xt/additional/Name.mjs +19 -0
- package/xt/additional/Name.mjs.map +1 -0
- package/xt/additional/Password.cjs +25 -0
- package/xt/additional/Password.cjs.map +1 -0
- package/xt/additional/Password.d.ts +6 -0
- package/xt/additional/Password.mjs +23 -0
- package/xt/additional/Password.mjs.map +1 -0
- package/xt/additional/Phone.cjs +21 -0
- package/xt/additional/Phone.cjs.map +1 -0
- package/xt/additional/Phone.d.ts +6 -0
- package/xt/additional/Phone.mjs +19 -0
- package/xt/additional/Phone.mjs.map +1 -0
- package/xt/additional/Photo.cjs +21 -0
- package/xt/additional/Photo.cjs.map +1 -0
- package/xt/additional/Photo.d.ts +6 -0
- package/xt/additional/Photo.mjs +19 -0
- package/xt/additional/Photo.mjs.map +1 -0
- package/xt/additional/Slug.cjs +21 -0
- package/xt/additional/Slug.cjs.map +1 -0
- package/xt/additional/Slug.d.ts +6 -0
- package/xt/additional/Slug.mjs +19 -0
- package/xt/additional/Slug.mjs.map +1 -0
- package/xt/additional/Url.cjs +26 -0
- package/xt/additional/Url.cjs.map +1 -0
- package/xt/additional/Url.d.ts +6 -0
- package/xt/additional/Url.mjs +24 -0
- package/xt/additional/Url.mjs.map +1 -0
- package/xt/additional/Username.cjs +21 -0
- package/xt/additional/Username.cjs.map +1 -0
- package/xt/additional/Username.d.ts +6 -0
- package/xt/additional/Username.mjs +19 -0
- package/xt/additional/Username.mjs.map +1 -0
- package/xt/fields/Array.cjs +9 -2
- package/xt/fields/Array.cjs.map +1 -1
- package/xt/fields/Array.d.ts +2 -0
- package/xt/fields/Array.mjs +9 -2
- package/xt/fields/Array.mjs.map +1 -1
- package/xt/fields/Boolean.cjs +10 -5
- package/xt/fields/Boolean.cjs.map +1 -1
- package/xt/fields/Boolean.d.ts +2 -0
- package/xt/fields/Boolean.mjs +10 -5
- package/xt/fields/Boolean.mjs.map +1 -1
- package/xt/fields/Date.cjs +12 -12
- package/xt/fields/Date.cjs.map +1 -1
- package/xt/fields/Date.d.ts +2 -0
- package/xt/fields/Date.mjs +12 -12
- package/xt/fields/Date.mjs.map +1 -1
- package/xt/fields/Enum.cjs +10 -4
- package/xt/fields/Enum.cjs.map +1 -1
- package/xt/fields/Enum.d.ts +2 -0
- package/xt/fields/Enum.mjs +10 -4
- package/xt/fields/Enum.mjs.map +1 -1
- package/xt/fields/File.cjs +9 -2
- package/xt/fields/File.cjs.map +1 -1
- package/xt/fields/File.d.ts +2 -0
- package/xt/fields/File.mjs +9 -2
- package/xt/fields/File.mjs.map +1 -1
- package/xt/fields/IDField.cjs +8 -0
- package/xt/fields/IDField.cjs.map +1 -1
- package/xt/fields/IDField.d.ts +2 -0
- package/xt/fields/IDField.mjs +8 -0
- package/xt/fields/IDField.mjs.map +1 -1
- package/xt/fields/Number.cjs +10 -5
- package/xt/fields/Number.cjs.map +1 -1
- package/xt/fields/Number.d.ts +2 -0
- package/xt/fields/Number.mjs +10 -5
- package/xt/fields/Number.mjs.map +1 -1
- package/xt/fields/Object.cjs +10 -5
- package/xt/fields/Object.cjs.map +1 -1
- package/xt/fields/Object.d.ts +2 -0
- package/xt/fields/Object.mjs +10 -5
- package/xt/fields/Object.mjs.map +1 -1
- package/xt/fields/Record.cjs +10 -5
- package/xt/fields/Record.cjs.map +1 -1
- package/xt/fields/Record.d.ts +2 -0
- package/xt/fields/Record.mjs +10 -5
- package/xt/fields/Record.mjs.map +1 -1
- package/xt/fields/Schema.cjs +12 -1
- package/xt/fields/Schema.cjs.map +1 -1
- package/xt/fields/Schema.d.ts +4 -1
- package/xt/fields/Schema.mjs +12 -1
- package/xt/fields/Schema.mjs.map +1 -1
- package/xt/fields/String.cjs +12 -9
- package/xt/fields/String.cjs.map +1 -1
- package/xt/fields/String.d.ts +2 -0
- package/xt/fields/String.mjs +12 -9
- package/xt/fields/String.mjs.map +1 -1
- package/xt/fields/Tuple.cjs +10 -5
- package/xt/fields/Tuple.cjs.map +1 -1
- package/xt/fields/Tuple.d.ts +2 -0
- package/xt/fields/Tuple.mjs +10 -5
- package/xt/fields/Tuple.mjs.map +1 -1
- package/xt/fields/Union.cjs +10 -5
- package/xt/fields/Union.cjs.map +1 -1
- package/xt/fields/Union.d.ts +2 -0
- package/xt/fields/Union.mjs +10 -5
- package/xt/fields/Union.mjs.map +1 -1
- package/xt/index.cjs +16 -100
- package/xt/index.cjs.map +1 -1
- package/xt/index.d.ts +16 -9
- package/xt/index.mjs +16 -100
- package/xt/index.mjs.map +1 -1
- package/core/classes/ModelFormatter.cjs.map +0 -1
- package/core/classes/ModelFormatter.mjs.map +0 -1
|
@@ -11,11 +11,12 @@ import XqlSchema from '../../../xt/fields/Schema.mjs';
|
|
|
11
11
|
import XqlString from '../../../xt/fields/String.mjs';
|
|
12
12
|
import XqlTuple from '../../../xt/fields/Tuple.mjs';
|
|
13
13
|
import XqlUnion from '../../../xt/fields/Union.mjs';
|
|
14
|
-
import { quote, escapeSqlValue } from '../../../utils/index.mjs';
|
|
14
|
+
import { quote, iof, escapeSqlValue } from '../../../utils/index.mjs';
|
|
15
15
|
import XansqlError from '../../XansqlError.mjs';
|
|
16
16
|
import Foreign from '../ForeignInfo.mjs';
|
|
17
17
|
import ForeignKeyMigration from './ForeingMigration.mjs';
|
|
18
18
|
import IndexMigration from './IndexMigration.mjs';
|
|
19
|
+
import ValueFormatter from '../../../model/include/ValueFormatter.mjs';
|
|
19
20
|
|
|
20
21
|
class Migration {
|
|
21
22
|
constructor(xansql) {
|
|
@@ -65,6 +66,7 @@ class Migration {
|
|
|
65
66
|
const table = model.table;
|
|
66
67
|
const schema = (model === null || model === void 0 ? void 0 : model.schema) || {};
|
|
67
68
|
let sqls = [];
|
|
69
|
+
let footers = [];
|
|
68
70
|
for (const column in schema) {
|
|
69
71
|
const field = schema[column];
|
|
70
72
|
const meta = field.meta || {};
|
|
@@ -74,7 +76,7 @@ class Migration {
|
|
|
74
76
|
const info = Foreign.get(model, column);
|
|
75
77
|
const fk = this.ForeignKeyMigration.buildCreate(table, column, info.table, info.relation.main);
|
|
76
78
|
if (fk) {
|
|
77
|
-
|
|
79
|
+
footers.push(fk);
|
|
78
80
|
}
|
|
79
81
|
}
|
|
80
82
|
if (meta.index && !meta.unique) {
|
|
@@ -82,6 +84,9 @@ class Migration {
|
|
|
82
84
|
indexes.push({ table, sql: indexSql });
|
|
83
85
|
}
|
|
84
86
|
}
|
|
87
|
+
if (footers.length > 0) {
|
|
88
|
+
sqls.push(footers.join(','));
|
|
89
|
+
}
|
|
85
90
|
let sql = `CREATE TABLE IF NOT EXISTS ${quote(engine, table)} (${sqls.join(',')})`;
|
|
86
91
|
if (engine === 'mysql') {
|
|
87
92
|
sql += ` ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`;
|
|
@@ -103,15 +108,19 @@ class Migration {
|
|
|
103
108
|
buildColumn(table, column) {
|
|
104
109
|
const engine = this.xansql.config.dialect.engine;
|
|
105
110
|
const model = this.xansql.models.get(table);
|
|
106
|
-
const field = model
|
|
107
|
-
const meta =
|
|
111
|
+
const field = model.schema[column];
|
|
112
|
+
const meta = field.meta || {};
|
|
108
113
|
const nullable = meta.nullable || meta.optional ? 'NULL' : 'NOT NULL';
|
|
109
114
|
const unique = meta.unique ? 'UNIQUE' : '';
|
|
115
|
+
let default_value = '';
|
|
116
|
+
if (meta.default !== undefined) {
|
|
117
|
+
default_value = ValueFormatter.getDefaultSql(model, column);
|
|
118
|
+
}
|
|
110
119
|
const col = (column, sqlType) => {
|
|
111
|
-
return ` ${quote(engine, column)} ${sqlType} ${nullable} ${unique}`.trim();
|
|
120
|
+
return ` ${quote(engine, column)} ${sqlType} ${nullable} ${default_value} ${unique}`.trim().replace(/ +/g, ' ');
|
|
112
121
|
};
|
|
113
122
|
let sql = '';
|
|
114
|
-
if (field
|
|
123
|
+
if (iof(field, XqlIDField)) {
|
|
115
124
|
if (engine === 'mysql') {
|
|
116
125
|
sql += col(column, "INT AUTO_INCREMENT PRIMARY KEY");
|
|
117
126
|
}
|
|
@@ -122,7 +131,7 @@ class Migration {
|
|
|
122
131
|
sql += col(column, "INTEGER PRIMARY KEY AUTOINCREMENT");
|
|
123
132
|
}
|
|
124
133
|
}
|
|
125
|
-
else if (field
|
|
134
|
+
else if (iof(field, XqlSchema)) {
|
|
126
135
|
if (engine === 'mysql') {
|
|
127
136
|
sql += col(column, "INT");
|
|
128
137
|
}
|
|
@@ -130,7 +139,7 @@ class Migration {
|
|
|
130
139
|
sql += col(column, "INTEGER");
|
|
131
140
|
}
|
|
132
141
|
}
|
|
133
|
-
else if (field
|
|
142
|
+
else if (iof(field, XqlString)) {
|
|
134
143
|
let length = meta.length || meta.max;
|
|
135
144
|
if (meta.text || length > 65535 || engine === 'sqlite') {
|
|
136
145
|
sql += col(column, "TEXT");
|
|
@@ -139,10 +148,10 @@ class Migration {
|
|
|
139
148
|
sql += col(column, `VARCHAR(${length || 255})`);
|
|
140
149
|
}
|
|
141
150
|
}
|
|
142
|
-
else if (field
|
|
151
|
+
else if (iof(field, XqlFile)) {
|
|
143
152
|
sql += col(column, "VARCHAR(255)");
|
|
144
153
|
}
|
|
145
|
-
else if (field
|
|
154
|
+
else if (iof(field, XqlNumber)) {
|
|
146
155
|
if (engine === "mysql") {
|
|
147
156
|
if (meta.integer) {
|
|
148
157
|
sql += col(column, "INT");
|
|
@@ -166,7 +175,7 @@ class Migration {
|
|
|
166
175
|
}
|
|
167
176
|
}
|
|
168
177
|
}
|
|
169
|
-
else if (field
|
|
178
|
+
else if (iof(field, XqlBoolean)) {
|
|
170
179
|
if (engine === "mysql" || engine === "postgresql") {
|
|
171
180
|
sql += col(column, "BOOLEAN");
|
|
172
181
|
}
|
|
@@ -174,7 +183,7 @@ class Migration {
|
|
|
174
183
|
sql += col(column, "INTEGER"); // SQLite has no BOOLEAN → use INTEGER (0/1)
|
|
175
184
|
}
|
|
176
185
|
}
|
|
177
|
-
else if (field
|
|
186
|
+
else if (iof(field, XqlDate)) {
|
|
178
187
|
if (engine === "mysql") {
|
|
179
188
|
sql += col(column, "DATETIME");
|
|
180
189
|
}
|
|
@@ -185,7 +194,7 @@ class Migration {
|
|
|
185
194
|
sql += col(column, "TEXT"); // store ISO string (SQLite has no native DATETIME)
|
|
186
195
|
}
|
|
187
196
|
}
|
|
188
|
-
else if (field
|
|
197
|
+
else if (iof(field, XqlEnum)) {
|
|
189
198
|
if (engine === "mysql") {
|
|
190
199
|
sql += col(column, `ENUM(${field.values.map((v) => `'${escapeSqlValue(v)}'`).join(', ')})`);
|
|
191
200
|
}
|
|
@@ -199,12 +208,12 @@ class Migration {
|
|
|
199
208
|
sql += `"${column}" TEXT CHECK("${column}" IN (${values})) ${nullable} ${unique}, `;
|
|
200
209
|
}
|
|
201
210
|
}
|
|
202
|
-
else if (field
|
|
211
|
+
else if (iof(field, XqlObject, XqlRecord, XqlTuple, XqlUnion)) {
|
|
203
212
|
sql += col(column, "TEXT");
|
|
204
213
|
}
|
|
205
|
-
else if (field
|
|
214
|
+
else if (iof(field, XqlArray)) {
|
|
206
215
|
const arrayType = field.type;
|
|
207
|
-
const isSchemaArray = arrayType
|
|
216
|
+
const isSchemaArray = iof(arrayType, XqlSchema);
|
|
208
217
|
if (!isSchemaArray) {
|
|
209
218
|
sql += col(column, "TEXT");
|
|
210
219
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableMigration.mjs","sources":["../../../../src/core/classes/Migration/TableMigration.ts"],"sourcesContent":["import Model from \"../../../model\";\nimport XqlArray from \"../../../xt/fields/Array\";\nimport XqlBoolean from \"../../../xt/fields/Boolean\";\nimport XqlDate from \"../../../xt/fields/Date\";\nimport XqlEnum from \"../../../xt/fields/Enum\";\nimport XqlFile from \"../../../xt/fields/File\";\nimport XqlIDField from \"../../../xt/fields/IDField\";\nimport XqlNumber from \"../../../xt/fields/Number\";\nimport XqlObject from \"../../../xt/fields/Object\";\nimport XqlRecord from \"../../../xt/fields/Record\";\nimport XqlSchema from \"../../../xt/fields/Schema\";\nimport XqlString from \"../../../xt/fields/String\";\nimport XqlTuple from \"../../../xt/fields/Tuple\";\nimport XqlUnion from \"../../../xt/fields/Union\";\nimport { escapeSqlValue, quote } from \"../../../utils\";\nimport Xansql from \"../../Xansql\";\nimport XansqlError from \"../../XansqlError\";\nimport Foreign from \"../ForeignInfo\";\nimport ForeignKeyMigration from \"./ForeingMigration\";\nimport IndexMigration from \"./IndexMigration\";\n\nclass Migration {\n xansql: Xansql;\n readonly ForeignKeyMigration: ForeignKeyMigration\n readonly IndexMigration: IndexMigration\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n this.ForeignKeyMigration = new ForeignKeyMigration(xansql);\n this.IndexMigration = new IndexMigration(xansql);\n }\n\n statements() {\n const engine = this.xansql.config.dialect.engine;\n const models = this.xansql.models;\n\n const options: string[] = []\n const tables: ({ table: string, sql: string })[] = [];\n const indexes: ({ table: string, sql: string })[] = [];\n\n if (engine === 'sqlite') {\n options.push(`PRAGMA foreign_keys = ON;`);\n options.push(`PRAGMA journal_mode = WAL;`);\n options.push(`PRAGMA wal_autocheckpoint = 1000;`);\n options.push(`PRAGMA synchronous = NORMAL;`);\n } else if (engine === 'postgresql') {\n options.push(`SET client_min_messages TO WARNING;`);\n options.push(`SET standard_conforming_strings = ON;`);\n } else if (engine === 'mysql') {\n options.push(`SET sql_mode = 'STRICT_ALL_TABLES';`);\n options.push(`SET FOREIGN_KEY_CHECKS = 1;`);\n options.push(`SET sql_safe_updates = 1;`);\n }\n\n for (const table of models.keys()) {\n const model = models.get(table);\n const { sql, indexes: modelIndexes } = this.buildCreate(model!);\n indexes.push(...modelIndexes);\n tables.push({\n table,\n sql\n });\n }\n\n return {\n options,\n tables,\n indexes\n }\n }\n\n buildCreate(model: Model) {\n const engine = this.xansql.config.dialect.engine;\n let indexes: ({ table: string, sql: string })[] = [];\n const table = model.table;\n const schema = model?.schema || {};\n let sqls: string[] = [];\n\n for (const column in schema) {\n const field = schema[column];\n const meta = field.meta || {};\n const sql = this.buildColumn(table, column);\n sql && sqls.push(sql);\n\n if (Foreign.isSchema(field)) {\n const info = Foreign.get(model!, column)\n const fk = this.ForeignKeyMigration.buildCreate(table, column, info.table, info.relation.main);\n if (fk) {\n sqls.push(fk);\n }\n }\n\n if (meta.index && !meta.unique) {\n const indexSql = this.IndexMigration.buildCreate(table, column);\n indexes.push({ table, sql: indexSql });\n }\n }\n\n let sql = `CREATE TABLE IF NOT EXISTS ${quote(engine, table)} (${sqls.join(',')})`;\n if (engine === 'mysql') {\n sql += ` ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`;\n } else {\n sql += ` ;`;\n }\n\n return {\n sql,\n indexes\n }\n }\n\n buildDrop(model: any) {\n const engine = this.xansql.config.dialect.engine;\n const table = model.table;\n let sql = `DROP TABLE IF EXISTS ${quote(engine, table)};`;\n return sql;\n }\n\n buildColumn(table: string, column: string) {\n const engine = this.xansql.config.dialect.engine;\n const model = this.xansql.models.get(table);\n const field = model?.schema[column];\n const meta = field?.meta || {};\n const nullable = meta.nullable || meta.optional ? 'NULL' : 'NOT NULL';\n const unique = meta.unique ? 'UNIQUE' : '';\n const col = (column: string, sqlType: string) => {\n return ` ${quote(engine, column)} ${sqlType} ${nullable} ${unique}`.trim()\n };\n let sql = ''\n if (field instanceof XqlIDField) {\n if (engine === 'mysql') {\n sql += col(column, \"INT AUTO_INCREMENT PRIMARY KEY\");\n } else if (engine === 'postgresql') {\n sql += col(column, \"SERIAL PRIMARY KEY\")\n } else if (engine === 'sqlite') {\n sql += col(column, \"INTEGER PRIMARY KEY AUTOINCREMENT\")\n }\n } else if (field instanceof XqlSchema) {\n if (engine === 'mysql') {\n sql += col(column, \"INT\")\n } else if (engine === 'postgresql' || engine === 'sqlite') {\n sql += col(column, \"INTEGER\")\n }\n } else if (field instanceof XqlString) {\n let length = meta.length || meta.max\n if (meta.text || length > 65535 || engine === 'sqlite') {\n sql += col(column, \"TEXT\")\n } else {\n sql += col(column, `VARCHAR(${length || 255})`)\n }\n } else if (field instanceof XqlFile) {\n sql += col(column, \"VARCHAR(255)\")\n } else if (field instanceof XqlNumber) {\n if (engine === \"mysql\") {\n if (meta.integer) {\n sql += col(column, \"INT\")\n } else if (meta.float) {\n sql += col(column, \"FLOAT\")\n } else {\n sql += col(column, \"DECIMAL(10, 2)\")\n }\n } else if (engine === \"postgresql\" || engine === \"sqlite\") {\n if (meta.integer) {\n sql += col(column, \"INTEGER\")\n } else if (meta.float) {\n sql += col(column, \"REAL\")\n } else {\n sql += col(column, engine === \"sqlite\" ? \"NUMERIC\" : \"NUMERIC(10, 2)\")\n }\n }\n } else if (field instanceof XqlBoolean) {\n if (engine === \"mysql\" || engine === \"postgresql\") {\n sql += col(column, \"BOOLEAN\")\n } else if (engine === \"sqlite\") {\n sql += col(column, \"INTEGER\") // SQLite has no BOOLEAN → use INTEGER (0/1)\n }\n } else if (field instanceof XqlDate) {\n if (engine === \"mysql\") {\n sql += col(column, \"DATETIME\")\n } else if (engine === \"postgresql\") {\n sql += col(column, \"TIMESTAMP\")\n } else if (engine === \"sqlite\") {\n sql += col(column, \"TEXT\") // store ISO string (SQLite has no native DATETIME)\n }\n } else if (field instanceof XqlEnum) {\n if (engine === \"mysql\") {\n sql += col(column, `ENUM(${(field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ')})`)\n } else if (engine === \"postgresql\") {\n const enumName = `${table}_${column}_enum`;\n sql += `CREATE TYPE ${enumName} AS ENUM (${(field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ')}); `\n sql += col(column, enumName)\n } else if (engine === \"sqlite\") {\n const values = (field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(\", \");\n sql += `\"${column}\" TEXT CHECK(\"${column}\" IN (${values})) ${nullable} ${unique}, `\n }\n } else if (field instanceof XqlObject || field instanceof XqlRecord || field instanceof XqlTuple || field instanceof XqlUnion) {\n sql += col(column, \"TEXT\")\n } else if (field instanceof XqlArray) {\n const arrayType = (field as any).type;\n const isSchemaArray = arrayType instanceof XqlSchema;\n if (!isSchemaArray) {\n sql += col(column, \"TEXT\")\n }\n } else {\n throw new XansqlError({\n message: `Unsupported field type for column \"${column}\" in table \"${table}\".`,\n model: table,\n column\n });\n }\n return sql;\n }\n}\n\nexport default Migration"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TableMigration.mjs","sources":["../../../../src/core/classes/Migration/TableMigration.ts"],"sourcesContent":["import Model from \"../../../model\";\nimport XqlArray from \"../../../xt/fields/Array\";\nimport XqlBoolean from \"../../../xt/fields/Boolean\";\nimport XqlDate from \"../../../xt/fields/Date\";\nimport XqlEnum from \"../../../xt/fields/Enum\";\nimport XqlFile from \"../../../xt/fields/File\";\nimport XqlIDField from \"../../../xt/fields/IDField\";\nimport XqlNumber from \"../../../xt/fields/Number\";\nimport XqlObject from \"../../../xt/fields/Object\";\nimport XqlRecord from \"../../../xt/fields/Record\";\nimport XqlSchema from \"../../../xt/fields/Schema\";\nimport XqlString from \"../../../xt/fields/String\";\nimport XqlTuple from \"../../../xt/fields/Tuple\";\nimport XqlUnion from \"../../../xt/fields/Union\";\nimport { escapeSqlValue, iof, quote } from \"../../../utils\";\nimport Xansql from \"../../Xansql\";\nimport XansqlError from \"../../XansqlError\";\nimport Foreign from \"../ForeignInfo\";\nimport ForeignKeyMigration from \"./ForeingMigration\";\nimport IndexMigration from \"./IndexMigration\";\nimport ValueFormatter from \"../../../model/include/ValueFormatter\";\n\nclass Migration {\n xansql: Xansql;\n readonly ForeignKeyMigration: ForeignKeyMigration\n readonly IndexMigration: IndexMigration\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n this.ForeignKeyMigration = new ForeignKeyMigration(xansql);\n this.IndexMigration = new IndexMigration(xansql);\n }\n\n statements() {\n const engine = this.xansql.config.dialect.engine;\n const models = this.xansql.models;\n\n const options: string[] = []\n const tables: ({ table: string, sql: string })[] = [];\n const indexes: ({ table: string, sql: string })[] = [];\n\n if (engine === 'sqlite') {\n options.push(`PRAGMA foreign_keys = ON;`);\n options.push(`PRAGMA journal_mode = WAL;`);\n options.push(`PRAGMA wal_autocheckpoint = 1000;`);\n options.push(`PRAGMA synchronous = NORMAL;`);\n } else if (engine === 'postgresql') {\n options.push(`SET client_min_messages TO WARNING;`);\n options.push(`SET standard_conforming_strings = ON;`);\n } else if (engine === 'mysql') {\n options.push(`SET sql_mode = 'STRICT_ALL_TABLES';`);\n options.push(`SET FOREIGN_KEY_CHECKS = 1;`);\n options.push(`SET sql_safe_updates = 1;`);\n }\n\n for (const table of models.keys()) {\n const model = models.get(table);\n const { sql, indexes: modelIndexes } = this.buildCreate(model!);\n indexes.push(...modelIndexes);\n tables.push({\n table,\n sql\n });\n }\n\n return {\n options,\n tables,\n indexes\n }\n }\n\n buildCreate(model: Model) {\n const engine = this.xansql.config.dialect.engine;\n let indexes: ({ table: string, sql: string })[] = [];\n const table = model.table;\n const schema = model?.schema || {};\n let sqls: string[] = [];\n let footers: string[] = [];\n\n for (const column in schema) {\n const field = schema[column];\n const meta = field.meta || {};\n const sql = this.buildColumn(table, column);\n sql && sqls.push(sql);\n\n if (Foreign.isSchema(field)) {\n const info = Foreign.get(model!, column)\n const fk = this.ForeignKeyMigration.buildCreate(table, column, info.table, info.relation.main);\n if (fk) {\n footers.push(fk);\n }\n }\n\n if (meta.index && !meta.unique) {\n const indexSql = this.IndexMigration.buildCreate(table, column);\n indexes.push({ table, sql: indexSql });\n }\n }\n if (footers.length > 0) {\n sqls.push(footers.join(','));\n }\n\n let sql = `CREATE TABLE IF NOT EXISTS ${quote(engine, table)} (${sqls.join(',')})`;\n if (engine === 'mysql') {\n sql += ` ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`;\n } else {\n sql += ` ;`;\n }\n\n return {\n sql,\n indexes\n }\n }\n\n buildDrop(model: any) {\n const engine = this.xansql.config.dialect.engine;\n const table = model.table;\n let sql = `DROP TABLE IF EXISTS ${quote(engine, table)};`;\n return sql;\n }\n\n buildColumn(table: string, column: string) {\n const engine = this.xansql.config.dialect.engine;\n const model = this.xansql.models.get(table) as Model;\n const field = model.schema[column];\n const meta = field.meta || {};\n const nullable = meta.nullable || meta.optional ? 'NULL' : 'NOT NULL';\n const unique = meta.unique ? 'UNIQUE' : '';\n let default_value = ''\n if (meta.default !== undefined) {\n default_value = ValueFormatter.getDefaultSql(model, column);\n }\n const col = (column: string, sqlType: string) => {\n return ` ${quote(engine, column)} ${sqlType} ${nullable} ${default_value} ${unique}`.trim().replace(/ +/g, ' ');\n };\n let sql = ''\n if (iof(field, XqlIDField)) {\n if (engine === 'mysql') {\n sql += col(column, \"INT AUTO_INCREMENT PRIMARY KEY\");\n } else if (engine === 'postgresql') {\n sql += col(column, \"SERIAL PRIMARY KEY\")\n } else if (engine === 'sqlite') {\n sql += col(column, \"INTEGER PRIMARY KEY AUTOINCREMENT\")\n }\n } else if (iof(field, XqlSchema)) {\n if (engine === 'mysql') {\n sql += col(column, \"INT\")\n } else if (engine === 'postgresql' || engine === 'sqlite') {\n sql += col(column, \"INTEGER\")\n }\n } else if (iof(field, XqlString)) {\n let length = meta.length || meta.max\n if (meta.text || length > 65535 || engine === 'sqlite') {\n sql += col(column, \"TEXT\")\n } else {\n sql += col(column, `VARCHAR(${length || 255})`)\n }\n } else if (iof(field, XqlFile)) {\n sql += col(column, \"VARCHAR(255)\")\n } else if (iof(field, XqlNumber)) {\n if (engine === \"mysql\") {\n if (meta.integer) {\n sql += col(column, \"INT\")\n } else if (meta.float) {\n sql += col(column, \"FLOAT\")\n } else {\n sql += col(column, \"DECIMAL(10, 2)\")\n }\n } else if (engine === \"postgresql\" || engine === \"sqlite\") {\n if (meta.integer) {\n sql += col(column, \"INTEGER\")\n } else if (meta.float) {\n sql += col(column, \"REAL\")\n } else {\n sql += col(column, engine === \"sqlite\" ? \"NUMERIC\" : \"NUMERIC(10, 2)\")\n }\n }\n } else if (iof(field, XqlBoolean)) {\n if (engine === \"mysql\" || engine === \"postgresql\") {\n sql += col(column, \"BOOLEAN\")\n } else if (engine === \"sqlite\") {\n sql += col(column, \"INTEGER\") // SQLite has no BOOLEAN → use INTEGER (0/1)\n }\n } else if (iof(field, XqlDate)) {\n if (engine === \"mysql\") {\n sql += col(column, \"DATETIME\")\n } else if (engine === \"postgresql\") {\n sql += col(column, \"TIMESTAMP\")\n } else if (engine === \"sqlite\") {\n sql += col(column, \"TEXT\") // store ISO string (SQLite has no native DATETIME)\n }\n } else if (iof(field, XqlEnum)) {\n if (engine === \"mysql\") {\n sql += col(column, `ENUM(${(field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ')})`)\n } else if (engine === \"postgresql\") {\n const enumName = `${table}_${column}_enum`;\n sql += `CREATE TYPE ${enumName} AS ENUM (${(field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ')}); `\n sql += col(column, enumName)\n } else if (engine === \"sqlite\") {\n const values = (field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(\", \");\n sql += `\"${column}\" TEXT CHECK(\"${column}\" IN (${values})) ${nullable} ${unique}, `\n }\n } else if (iof(field, XqlObject, XqlRecord, XqlTuple, XqlUnion)) {\n sql += col(column, \"TEXT\")\n } else if (iof(field, XqlArray)) {\n const arrayType = (field as any).type;\n const isSchemaArray = iof(arrayType, XqlSchema)\n if (!isSchemaArray) {\n sql += col(column, \"TEXT\")\n }\n } else {\n throw new XansqlError({\n message: `Unsupported field type for column \"${column}\" in table \"${table}\".`,\n model: table,\n column\n });\n }\n return sql;\n }\n}\n\nexport default Migration"],"names":[],"mappings":"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"}
|
|
@@ -16,12 +16,12 @@ class XansqlMigration {
|
|
|
16
16
|
const engine = xansql.config.dialect.engine;
|
|
17
17
|
const { options, tables, indexes } = this.TableMigration.statements();
|
|
18
18
|
if (force) {
|
|
19
|
-
const models = Array.from(xansql.
|
|
19
|
+
const models = Array.from(xansql.models.values()).reverse();
|
|
20
20
|
for (let model of models) {
|
|
21
21
|
const fileWhere = [];
|
|
22
22
|
for (let column in model.schema) {
|
|
23
23
|
const field = model.schema[column];
|
|
24
|
-
if (field
|
|
24
|
+
if (utils_index.iof(field, xt_fields_File)) {
|
|
25
25
|
fileWhere.push({ [column]: { isNotNull: true } });
|
|
26
26
|
}
|
|
27
27
|
}
|
|
@@ -37,16 +37,19 @@ class XansqlMigration {
|
|
|
37
37
|
}
|
|
38
38
|
for (let model of models) {
|
|
39
39
|
const dsql = this.TableMigration.buildDrop(model);
|
|
40
|
-
|
|
40
|
+
try {
|
|
41
|
+
await xansql.execute(dsql);
|
|
42
|
+
}
|
|
43
|
+
catch (error) { }
|
|
41
44
|
}
|
|
42
45
|
}
|
|
43
46
|
for (let option of options) {
|
|
44
47
|
await xansql.execute(option);
|
|
45
48
|
}
|
|
46
|
-
for (let {
|
|
49
|
+
for (let { sql } of tables) {
|
|
47
50
|
await xansql.execute(sql);
|
|
48
51
|
}
|
|
49
|
-
for (let { sql
|
|
52
|
+
for (let { sql } of indexes) {
|
|
50
53
|
try {
|
|
51
54
|
await xansql.execute(sql);
|
|
52
55
|
}
|
|
@@ -59,7 +62,7 @@ class XansqlMigration {
|
|
|
59
62
|
const model_columns = model.schema;
|
|
60
63
|
const raw_columns = raw_schema[table] || [];
|
|
61
64
|
for (let column in model_columns) {
|
|
62
|
-
if (model_columns[column]
|
|
65
|
+
if (utils_index.iof(model_columns[column], xt_fields_IDField))
|
|
63
66
|
continue;
|
|
64
67
|
const has_column = raw_columns.find((rc) => rc.name === column);
|
|
65
68
|
if (!has_column && !core_classes_ForeignInfo.isArray(model_columns[column])) {
|
|
@@ -75,7 +78,7 @@ class XansqlMigration {
|
|
|
75
78
|
}
|
|
76
79
|
}
|
|
77
80
|
for (let column in model_columns) {
|
|
78
|
-
if (model_columns[column]
|
|
81
|
+
if (utils_index.iof(model_columns[column], xt_fields_IDField) || core_classes_ForeignInfo.isArray(model_columns[column]))
|
|
79
82
|
continue;
|
|
80
83
|
const has_column = raw_columns.find((rc) => rc.name === column);
|
|
81
84
|
if (has_column) {
|
|
@@ -94,7 +97,7 @@ class XansqlMigration {
|
|
|
94
97
|
}
|
|
95
98
|
async generate() {
|
|
96
99
|
const xansql = this.xansql;
|
|
97
|
-
const models = Array.from(xansql.
|
|
100
|
+
const models = Array.from(xansql.models.values());
|
|
98
101
|
const raw_schema = await xansql.getRawSchema();
|
|
99
102
|
const tables = Object.keys(raw_schema);
|
|
100
103
|
const migration_sql = [];
|
|
@@ -107,7 +110,7 @@ class XansqlMigration {
|
|
|
107
110
|
const model_columns = model.schema;
|
|
108
111
|
const raw_columns = raw_schema[model.table] || [];
|
|
109
112
|
for (let column in model_columns) {
|
|
110
|
-
if (model_columns[column]
|
|
113
|
+
if (utils_index.iof(model_columns[column], xt_fields_IDField))
|
|
111
114
|
continue;
|
|
112
115
|
const has_column = raw_columns.find((rc) => rc.name === column);
|
|
113
116
|
if (!has_column && !core_classes_ForeignInfo.isArray(model_columns[column])) {
|
|
@@ -123,7 +126,7 @@ class XansqlMigration {
|
|
|
123
126
|
}
|
|
124
127
|
}
|
|
125
128
|
for (let column in model_columns) {
|
|
126
|
-
if (model_columns[column]
|
|
129
|
+
if (utils_index.iof(model_columns[column], xt_fields_IDField) || core_classes_ForeignInfo.isArray(model_columns[column]))
|
|
127
130
|
continue;
|
|
128
131
|
const has_column = raw_columns.find((rc) => rc.name === column);
|
|
129
132
|
if (has_column) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/core/classes/Migration/index.ts"],"sourcesContent":["import XqlFile from \"../../../xt/fields/File\";\nimport Xansql from \"../../Xansql\";\nimport TableMigration from \"./TableMigration\";\nimport Foreign from \"../ForeignInfo\";\nimport { XansqlDialectSchemaType } from \"../../types\";\nimport { quote } from \"../../../utils\";\nimport XqlIDField from \"../../../xt/fields/IDField\";\n\nclass XansqlMigration {\n readonly xansql: Xansql\n readonly TableMigration: TableMigration\n\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n this.TableMigration = new TableMigration(xansql);\n }\n\n async migrate(force?: boolean) {\n const xansql = this.xansql;\n const engine = xansql.config.dialect.engine;\n const { options, tables, indexes } = this.TableMigration.statements();\n if (force) {\n const models = Array.from(xansql.ModelFactory.values()).reverse();\n\n for (let model of models) {\n const fileWhere: any[] = [];\n for (let column in model.schema) {\n const field = model.schema[column];\n if (field instanceof XqlFile) {\n fileWhere.push({ [column]: { isNotNull: true } });\n }\n }\n\n if (Object.keys(fileWhere).length > 0) {\n try {\n await model.delete({\n where: fileWhere,\n select: { [model.IDColumn]: true }\n });\n } catch (error) { }\n }\n }\n\n for (let model of models) {\n const dsql = this.TableMigration.buildDrop(model);\n await xansql.execute(dsql);\n }\n }\n\n for (let option of options) {\n await xansql.execute(option);\n }\n\n for (let { table, sql } of tables) {\n await xansql.execute(sql);\n }\n\n for (let { sql, table } of indexes) {\n try {\n await xansql.execute(sql);\n } catch (error) { }\n }\n\n if (!force) {\n const raw_schema: XansqlDialectSchemaType = await xansql.getRawSchema() as any\n\n for (let { table } of tables) {\n const model = xansql.getModel(table);\n const model_columns = model.schema;\n const raw_columns = raw_schema[table] || [];\n\n for (let column in model_columns) {\n if (model_columns[column] instanceof XqlIDField) continue;\n const has_column = raw_columns.find((rc: any) => rc.name === column);\n if (!has_column && !Foreign.isArray(model_columns[column])) {\n const buildColumn = this.TableMigration.buildColumn(table, column);\n const sql = `ALTER TABLE ${quote(engine, table)} ADD COLUMN ${buildColumn};`;\n await xansql.execute(sql);\n }\n }\n\n for (let rc of raw_columns) {\n if (!(rc.name in model_columns)) {\n const sql = `ALTER TABLE ${quote(engine, table)} DROP COLUMN ${quote(engine, rc.name)};`;\n await xansql.execute(sql);\n }\n }\n\n for (let column in model_columns) {\n if (model_columns[column] instanceof XqlIDField || Foreign.isArray(model_columns[column])) continue;\n\n const has_column = raw_columns.find((rc: any) => rc.name === column);\n if (has_column) {\n const buildColumnSql = this.TableMigration.buildColumn(table, column).split(' ').slice(1).join(' ');\n const raw_column_sql = `${has_column.type.toUpperCase()} ${has_column.notnull ? 'NOT NULL' : 'NULL'}${has_column.default_value ? ' DEFAULT ' + has_column.default_value : ''}${has_column.unique ? \" UNIQUE\" : \"\"}`.trim();\n if (buildColumnSql !== raw_column_sql) {\n\n const buildColumn = this.TableMigration.buildColumn(table, column);\n const sql = `ALTER TABLE ${quote(engine, table)} ALTER COLUMN ${buildColumn};`;\n await xansql.execute(sql);\n }\n }\n }\n }\n }\n\n return true;\n }\n\n async generate() {\n const xansql = this.xansql;\n const models = Array.from(xansql.ModelFactory.values());\n const raw_schema: XansqlDialectSchemaType = await xansql.getRawSchema() as any\n const tables = Object.keys(raw_schema);\n const migration_sql: string[] = [];\n\n for (let model of models) {\n if (!tables.includes(model.table)) {\n const { sql } = this.TableMigration.buildCreate(model);\n migration_sql.push(sql);\n } else {\n const model_columns = model.schema;\n const raw_columns = raw_schema[model.table] || [];\n\n for (let column in model_columns) {\n if (model_columns[column] instanceof XqlIDField) continue;\n const has_column = raw_columns.find((rc: any) => rc.name === column);\n if (!has_column && !Foreign.isArray(model_columns[column])) {\n const buildColumn = this.TableMigration.buildColumn(model.table, column);\n const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} ADD COLUMN ${buildColumn};`;\n migration_sql.push(sql);\n }\n }\n\n for (let rc of raw_columns) {\n if (!(rc.name in model_columns)) {\n const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} DROP COLUMN ${quote(xansql.config.dialect.engine, rc.name)};`;\n migration_sql.push(sql);\n }\n }\n\n for (let column in model_columns) {\n if (model_columns[column] instanceof XqlIDField || Foreign.isArray(model_columns[column])) continue;\n\n const has_column = raw_columns.find((rc: any) => rc.name === column);\n if (has_column) {\n const buildColumnSql = this.TableMigration.buildColumn(model.table, column).split(' ').slice(1).join(' ');\n const raw_column_sql = `${has_column.type.toUpperCase()} ${has_column.notnull ? 'NOT NULL' : 'NULL'}${has_column.default_value ? ' DEFAULT ' + has_column.default_value : ''}${has_column.unique ? \" UNIQUE\" : \"\"}`.trim();\n if (buildColumnSql !== raw_column_sql) {\n const buildColumn = this.TableMigration.buildColumn(model.table, column);\n const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} ALTER COLUMN ${buildColumn};`;\n migration_sql.push(sql);\n }\n }\n }\n }\n }\n\n return migration_sql;\n\n }\n}\n\nexport default XansqlMigration;"],"names":["TableMigration","XqlFile","XqlIDField","Foreign","quote"],"mappings":";;;;;;;;AAQA,MAAM,eAAe,CAAA;AAIlB,IAAA,WAAA,CAAY,MAAc,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;QACpB,IAAI,CAAC,cAAc,GAAG,IAAIA,qCAAc,CAAC,MAAM,CAAC;IACnD;IAEA,MAAM,OAAO,CAAC,KAAe,EAAA;AAC1B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;QAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;AAC3C,QAAA,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;QACrE,IAAI,KAAK,EAAE;AACR,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;AAEjE,YAAA,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE;gBACvB,MAAM,SAAS,GAAU,EAAE;AAC3B,gBAAA,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE;oBAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AAClC,oBAAA,IAAI,KAAK,YAAYC,cAAO,EAAE;AAC3B,wBAAA,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;oBACpD;gBACH;gBAEA,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACpC,oBAAA,IAAI;wBACD,MAAM,KAAK,CAAC,MAAM,CAAC;AAChB,4BAAA,KAAK,EAAE,SAAS;4BAChB,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI;AAClC,yBAAA,CAAC;oBACL;AAAE,oBAAA,OAAO,KAAK,EAAE,EAAE;gBACrB;YACH;AAEA,YAAA,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE;gBACvB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC;AACjD,gBAAA,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;YAC7B;QACH;AAEA,QAAA,KAAK,IAAI,MAAM,IAAI,OAAO,EAAE;AACzB,YAAA,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAC/B;QAEA,KAAK,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,MAAM,EAAE;AAChC,YAAA,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;QAC5B;QAEA,KAAK,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE;AACjC,YAAA,IAAI;AACD,gBAAA,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;YAC5B;AAAE,YAAA,OAAO,KAAK,EAAE,EAAE;QACrB;QAEA,IAAI,CAAC,KAAK,EAAE;AACT,YAAA,MAAM,UAAU,GAA4B,MAAM,MAAM,CAAC,YAAY,EAAS;AAE9E,YAAA,KAAK,IAAI,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE;gBAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpC,gBAAA,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM;gBAClC,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE;AAE3C,gBAAA,KAAK,IAAI,MAAM,IAAI,aAAa,EAAE;AAC/B,oBAAA,IAAI,aAAa,CAAC,MAAM,CAAC,YAAYC,iBAAU;wBAAE;AACjD,oBAAA,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,EAAO,KAAK,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC;AACpE,oBAAA,IAAI,CAAC,UAAU,IAAI,CAACC,wBAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE;AACzD,wBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC;AAClE,wBAAA,MAAM,GAAG,GAAG,CAAA,YAAA,EAAeC,iBAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA,YAAA,EAAe,WAAW,CAAA,CAAA,CAAG;AAC5E,wBAAA,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;oBAC5B;gBACH;AAEA,gBAAA,KAAK,IAAI,EAAE,IAAI,WAAW,EAAE;oBACzB,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,aAAa,CAAC,EAAE;AAC9B,wBAAA,MAAM,GAAG,GAAG,CAAA,YAAA,EAAeA,iBAAK,CAAC,MAAM,EAAE,KAAK,CAAC,gBAAgBA,iBAAK,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG;AACxF,wBAAA,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;oBAC5B;gBACH;AAEA,gBAAA,KAAK,IAAI,MAAM,IAAI,aAAa,EAAE;AAC/B,oBAAA,IAAI,aAAa,CAAC,MAAM,CAAC,YAAYF,iBAAU,IAAIC,wBAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;wBAAE;AAE3F,oBAAA,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,EAAO,KAAK,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC;oBACpE,IAAI,UAAU,EAAE;wBACb,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;wBACnG,MAAM,cAAc,GAAG,CAAA,EAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA,CAAA,EAAI,UAAU,CAAC,OAAO,GAAG,UAAU,GAAG,MAAM,CAAA,EAAG,UAAU,CAAC,aAAa,GAAG,WAAW,GAAG,UAAU,CAAC,aAAa,GAAG,EAAE,CAAA,EAAG,UAAU,CAAC,MAAM,GAAG,SAAS,GAAG,EAAE,CAAA,CAAE,CAAC,IAAI,EAAE;AAC1N,wBAAA,IAAI,cAAc,KAAK,cAAc,EAAE;AAEpC,4BAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC;AAClE,4BAAA,MAAM,GAAG,GAAG,CAAA,YAAA,EAAeC,iBAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA,cAAA,EAAiB,WAAW,CAAA,CAAA,CAAG;AAC9E,4BAAA,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;wBAC5B;oBACH;gBACH;YACH;QACH;AAEA,QAAA,OAAO,IAAI;IACd;AAEA,IAAA,MAAM,QAAQ,GAAA;AACX,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;AAC1B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;AACvD,QAAA,MAAM,UAAU,GAA4B,MAAM,MAAM,CAAC,YAAY,EAAS;QAC9E,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;QACtC,MAAM,aAAa,GAAa,EAAE;AAElC,QAAA,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE;YACvB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAChC,gBAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC;AACtD,gBAAA,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;YAC1B;iBAAO;AACJ,gBAAA,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM;gBAClC,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;AAEjD,gBAAA,KAAK,IAAI,MAAM,IAAI,aAAa,EAAE;AAC/B,oBAAA,IAAI,aAAa,CAAC,MAAM,CAAC,YAAYF,iBAAU;wBAAE;AACjD,oBAAA,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,EAAO,KAAK,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC;AACpE,oBAAA,IAAI,CAAC,UAAU,IAAI,CAACC,wBAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE;AACzD,wBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC;wBACxE,MAAM,GAAG,GAAG,CAAA,YAAA,EAAeC,iBAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA,YAAA,EAAe,WAAW,GAAG;AACxG,wBAAA,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;oBAC1B;gBACH;AAEA,gBAAA,KAAK,IAAI,EAAE,IAAI,WAAW,EAAE;oBACzB,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,aAAa,CAAC,EAAE;AAC9B,wBAAA,MAAM,GAAG,GAAG,CAAA,YAAA,EAAeA,iBAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA,aAAA,EAAgBA,iBAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG;AAC1I,wBAAA,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;oBAC1B;gBACH;AAEA,gBAAA,KAAK,IAAI,MAAM,IAAI,aAAa,EAAE;AAC/B,oBAAA,IAAI,aAAa,CAAC,MAAM,CAAC,YAAYF,iBAAU,IAAIC,wBAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;wBAAE;AAE3F,oBAAA,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,EAAO,KAAK,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC;oBACpE,IAAI,UAAU,EAAE;AACb,wBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;wBACzG,MAAM,cAAc,GAAG,CAAA,EAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA,CAAA,EAAI,UAAU,CAAC,OAAO,GAAG,UAAU,GAAG,MAAM,CAAA,EAAG,UAAU,CAAC,aAAa,GAAG,WAAW,GAAG,UAAU,CAAC,aAAa,GAAG,EAAE,CAAA,EAAG,UAAU,CAAC,MAAM,GAAG,SAAS,GAAG,EAAE,CAAA,CAAE,CAAC,IAAI,EAAE;AAC1N,wBAAA,IAAI,cAAc,KAAK,cAAc,EAAE;AACpC,4BAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC;4BACxE,MAAM,GAAG,GAAG,CAAA,YAAA,EAAeC,iBAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA,cAAA,EAAiB,WAAW,GAAG;AAC1G,4BAAA,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;wBAC1B;oBACH;gBACH;YACH;QACH;AAEA,QAAA,OAAO,aAAa;IAEvB;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/core/classes/Migration/index.ts"],"sourcesContent":["import XqlFile from \"../../../xt/fields/File\";\nimport Xansql from \"../../Xansql\";\nimport TableMigration from \"./TableMigration\";\nimport Foreign from \"../ForeignInfo\";\nimport { XansqlDialectSchemaType } from \"../../types\";\nimport { iof, quote } from \"../../../utils\";\nimport XqlIDField from \"../../../xt/fields/IDField\";\n\nclass XansqlMigration {\n readonly xansql: Xansql\n readonly TableMigration: TableMigration\n\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n this.TableMigration = new TableMigration(xansql);\n }\n\n async migrate(force?: boolean) {\n const xansql = this.xansql;\n const engine = xansql.config.dialect.engine;\n const { options, tables, indexes } = this.TableMigration.statements();\n\n if (force) {\n const models = Array.from(xansql.models.values()).reverse();\n\n for (let model of models) {\n const fileWhere: any[] = [];\n for (let column in model.schema) {\n const field = model.schema[column];\n if (iof(field, XqlFile)) {\n fileWhere.push({ [column]: { isNotNull: true } });\n }\n }\n\n if (Object.keys(fileWhere).length > 0) {\n try {\n await model.delete({\n where: fileWhere,\n select: { [model.IDColumn]: true }\n });\n } catch (error) { }\n }\n }\n\n for (let model of models) {\n const dsql = this.TableMigration.buildDrop(model);\n try {\n await xansql.execute(dsql);\n } catch (error) { }\n }\n }\n\n for (let option of options) {\n await xansql.execute(option);\n }\n\n for (let { sql } of tables) {\n await xansql.execute(sql);\n }\n\n for (let { sql } of indexes) {\n try {\n await xansql.execute(sql);\n } catch (error) { }\n }\n\n if (!force) {\n const raw_schema: XansqlDialectSchemaType = await xansql.getRawSchema() as any\n\n for (let { table } of tables) {\n const model = xansql.getModel(table);\n const model_columns = model.schema;\n const raw_columns = raw_schema[table] || [];\n\n for (let column in model_columns) {\n if (iof(model_columns[column], XqlIDField)) continue;\n const has_column = raw_columns.find((rc: any) => rc.name === column);\n if (!has_column && !Foreign.isArray(model_columns[column])) {\n const buildColumn = this.TableMigration.buildColumn(table, column);\n const sql = `ALTER TABLE ${quote(engine, table)} ADD COLUMN ${buildColumn};`;\n await xansql.execute(sql);\n }\n }\n\n for (let rc of raw_columns) {\n if (!(rc.name in model_columns)) {\n const sql = `ALTER TABLE ${quote(engine, table)} DROP COLUMN ${quote(engine, rc.name)};`;\n await xansql.execute(sql);\n }\n }\n\n for (let column in model_columns) {\n if (iof(model_columns[column], XqlIDField) || Foreign.isArray(model_columns[column])) continue;\n\n const has_column = raw_columns.find((rc: any) => rc.name === column);\n if (has_column) {\n const buildColumnSql = this.TableMigration.buildColumn(table, column).split(' ').slice(1).join(' ');\n const raw_column_sql = `${has_column.type.toUpperCase()} ${has_column.notnull ? 'NOT NULL' : 'NULL'}${has_column.default_value ? ' DEFAULT ' + has_column.default_value : ''}${has_column.unique ? \" UNIQUE\" : \"\"}`.trim();\n if (buildColumnSql !== raw_column_sql) {\n\n const buildColumn = this.TableMigration.buildColumn(table, column);\n const sql = `ALTER TABLE ${quote(engine, table)} ALTER COLUMN ${buildColumn};`;\n await xansql.execute(sql);\n }\n }\n }\n }\n }\n\n return true;\n }\n\n async generate() {\n const xansql = this.xansql;\n const models = Array.from(xansql.models.values());\n const raw_schema: XansqlDialectSchemaType = await xansql.getRawSchema() as any\n const tables = Object.keys(raw_schema);\n const migration_sql: string[] = [];\n\n for (let model of models) {\n if (!tables.includes(model.table)) {\n const { sql } = this.TableMigration.buildCreate(model);\n migration_sql.push(sql);\n } else {\n const model_columns = model.schema;\n const raw_columns = raw_schema[model.table] || [];\n\n for (let column in model_columns) {\n if (iof(model_columns[column], XqlIDField)) continue;\n const has_column = raw_columns.find((rc: any) => rc.name === column);\n if (!has_column && !Foreign.isArray(model_columns[column])) {\n const buildColumn = this.TableMigration.buildColumn(model.table, column);\n const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} ADD COLUMN ${buildColumn};`;\n migration_sql.push(sql);\n }\n }\n\n for (let rc of raw_columns) {\n if (!(rc.name in model_columns)) {\n const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} DROP COLUMN ${quote(xansql.config.dialect.engine, rc.name)};`;\n migration_sql.push(sql);\n }\n }\n\n for (let column in model_columns) {\n if (iof(model_columns[column], XqlIDField) || Foreign.isArray(model_columns[column])) continue;\n\n const has_column = raw_columns.find((rc: any) => rc.name === column);\n if (has_column) {\n const buildColumnSql = this.TableMigration.buildColumn(model.table, column).split(' ').slice(1).join(' ');\n const raw_column_sql = `${has_column.type.toUpperCase()} ${has_column.notnull ? 'NOT NULL' : 'NULL'}${has_column.default_value ? ' DEFAULT ' + has_column.default_value : ''}${has_column.unique ? \" UNIQUE\" : \"\"}`.trim();\n if (buildColumnSql !== raw_column_sql) {\n const buildColumn = this.TableMigration.buildColumn(model.table, column);\n const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} ALTER COLUMN ${buildColumn};`;\n migration_sql.push(sql);\n }\n }\n }\n }\n }\n\n return migration_sql;\n\n }\n}\n\nexport default XansqlMigration;"],"names":["TableMigration","iof","XqlFile","XqlIDField","Foreign","quote"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import XqlFile from '../../../xt/fields/File.mjs';
|
|
2
2
|
import Migration from './TableMigration.mjs';
|
|
3
3
|
import Foreign from '../ForeignInfo.mjs';
|
|
4
|
-
import { quote } from '../../../utils/index.mjs';
|
|
4
|
+
import { iof, quote } from '../../../utils/index.mjs';
|
|
5
5
|
import XqlIDField from '../../../xt/fields/IDField.mjs';
|
|
6
6
|
|
|
7
7
|
class XansqlMigration {
|
|
@@ -14,12 +14,12 @@ class XansqlMigration {
|
|
|
14
14
|
const engine = xansql.config.dialect.engine;
|
|
15
15
|
const { options, tables, indexes } = this.TableMigration.statements();
|
|
16
16
|
if (force) {
|
|
17
|
-
const models = Array.from(xansql.
|
|
17
|
+
const models = Array.from(xansql.models.values()).reverse();
|
|
18
18
|
for (let model of models) {
|
|
19
19
|
const fileWhere = [];
|
|
20
20
|
for (let column in model.schema) {
|
|
21
21
|
const field = model.schema[column];
|
|
22
|
-
if (field
|
|
22
|
+
if (iof(field, XqlFile)) {
|
|
23
23
|
fileWhere.push({ [column]: { isNotNull: true } });
|
|
24
24
|
}
|
|
25
25
|
}
|
|
@@ -35,16 +35,19 @@ class XansqlMigration {
|
|
|
35
35
|
}
|
|
36
36
|
for (let model of models) {
|
|
37
37
|
const dsql = this.TableMigration.buildDrop(model);
|
|
38
|
-
|
|
38
|
+
try {
|
|
39
|
+
await xansql.execute(dsql);
|
|
40
|
+
}
|
|
41
|
+
catch (error) { }
|
|
39
42
|
}
|
|
40
43
|
}
|
|
41
44
|
for (let option of options) {
|
|
42
45
|
await xansql.execute(option);
|
|
43
46
|
}
|
|
44
|
-
for (let {
|
|
47
|
+
for (let { sql } of tables) {
|
|
45
48
|
await xansql.execute(sql);
|
|
46
49
|
}
|
|
47
|
-
for (let { sql
|
|
50
|
+
for (let { sql } of indexes) {
|
|
48
51
|
try {
|
|
49
52
|
await xansql.execute(sql);
|
|
50
53
|
}
|
|
@@ -57,7 +60,7 @@ class XansqlMigration {
|
|
|
57
60
|
const model_columns = model.schema;
|
|
58
61
|
const raw_columns = raw_schema[table] || [];
|
|
59
62
|
for (let column in model_columns) {
|
|
60
|
-
if (model_columns[column]
|
|
63
|
+
if (iof(model_columns[column], XqlIDField))
|
|
61
64
|
continue;
|
|
62
65
|
const has_column = raw_columns.find((rc) => rc.name === column);
|
|
63
66
|
if (!has_column && !Foreign.isArray(model_columns[column])) {
|
|
@@ -73,7 +76,7 @@ class XansqlMigration {
|
|
|
73
76
|
}
|
|
74
77
|
}
|
|
75
78
|
for (let column in model_columns) {
|
|
76
|
-
if (model_columns[column]
|
|
79
|
+
if (iof(model_columns[column], XqlIDField) || Foreign.isArray(model_columns[column]))
|
|
77
80
|
continue;
|
|
78
81
|
const has_column = raw_columns.find((rc) => rc.name === column);
|
|
79
82
|
if (has_column) {
|
|
@@ -92,7 +95,7 @@ class XansqlMigration {
|
|
|
92
95
|
}
|
|
93
96
|
async generate() {
|
|
94
97
|
const xansql = this.xansql;
|
|
95
|
-
const models = Array.from(xansql.
|
|
98
|
+
const models = Array.from(xansql.models.values());
|
|
96
99
|
const raw_schema = await xansql.getRawSchema();
|
|
97
100
|
const tables = Object.keys(raw_schema);
|
|
98
101
|
const migration_sql = [];
|
|
@@ -105,7 +108,7 @@ class XansqlMigration {
|
|
|
105
108
|
const model_columns = model.schema;
|
|
106
109
|
const raw_columns = raw_schema[model.table] || [];
|
|
107
110
|
for (let column in model_columns) {
|
|
108
|
-
if (model_columns[column]
|
|
111
|
+
if (iof(model_columns[column], XqlIDField))
|
|
109
112
|
continue;
|
|
110
113
|
const has_column = raw_columns.find((rc) => rc.name === column);
|
|
111
114
|
if (!has_column && !Foreign.isArray(model_columns[column])) {
|
|
@@ -121,7 +124,7 @@ class XansqlMigration {
|
|
|
121
124
|
}
|
|
122
125
|
}
|
|
123
126
|
for (let column in model_columns) {
|
|
124
|
-
if (model_columns[column]
|
|
127
|
+
if (iof(model_columns[column], XqlIDField) || Foreign.isArray(model_columns[column]))
|
|
125
128
|
continue;
|
|
126
129
|
const has_column = raw_columns.find((rc) => rc.name === column);
|
|
127
130
|
if (has_column) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../src/core/classes/Migration/index.ts"],"sourcesContent":["import XqlFile from \"../../../xt/fields/File\";\nimport Xansql from \"../../Xansql\";\nimport TableMigration from \"./TableMigration\";\nimport Foreign from \"../ForeignInfo\";\nimport { XansqlDialectSchemaType } from \"../../types\";\nimport { quote } from \"../../../utils\";\nimport XqlIDField from \"../../../xt/fields/IDField\";\n\nclass XansqlMigration {\n readonly xansql: Xansql\n readonly TableMigration: TableMigration\n\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n this.TableMigration = new TableMigration(xansql);\n }\n\n async migrate(force?: boolean) {\n const xansql = this.xansql;\n const engine = xansql.config.dialect.engine;\n const { options, tables, indexes } = this.TableMigration.statements();\n if (force) {\n const models = Array.from(xansql.ModelFactory.values()).reverse();\n\n for (let model of models) {\n const fileWhere: any[] = [];\n for (let column in model.schema) {\n const field = model.schema[column];\n if (field instanceof XqlFile) {\n fileWhere.push({ [column]: { isNotNull: true } });\n }\n }\n\n if (Object.keys(fileWhere).length > 0) {\n try {\n await model.delete({\n where: fileWhere,\n select: { [model.IDColumn]: true }\n });\n } catch (error) { }\n }\n }\n\n for (let model of models) {\n const dsql = this.TableMigration.buildDrop(model);\n await xansql.execute(dsql);\n }\n }\n\n for (let option of options) {\n await xansql.execute(option);\n }\n\n for (let { table, sql } of tables) {\n await xansql.execute(sql);\n }\n\n for (let { sql, table } of indexes) {\n try {\n await xansql.execute(sql);\n } catch (error) { }\n }\n\n if (!force) {\n const raw_schema: XansqlDialectSchemaType = await xansql.getRawSchema() as any\n\n for (let { table } of tables) {\n const model = xansql.getModel(table);\n const model_columns = model.schema;\n const raw_columns = raw_schema[table] || [];\n\n for (let column in model_columns) {\n if (model_columns[column] instanceof XqlIDField) continue;\n const has_column = raw_columns.find((rc: any) => rc.name === column);\n if (!has_column && !Foreign.isArray(model_columns[column])) {\n const buildColumn = this.TableMigration.buildColumn(table, column);\n const sql = `ALTER TABLE ${quote(engine, table)} ADD COLUMN ${buildColumn};`;\n await xansql.execute(sql);\n }\n }\n\n for (let rc of raw_columns) {\n if (!(rc.name in model_columns)) {\n const sql = `ALTER TABLE ${quote(engine, table)} DROP COLUMN ${quote(engine, rc.name)};`;\n await xansql.execute(sql);\n }\n }\n\n for (let column in model_columns) {\n if (model_columns[column] instanceof XqlIDField || Foreign.isArray(model_columns[column])) continue;\n\n const has_column = raw_columns.find((rc: any) => rc.name === column);\n if (has_column) {\n const buildColumnSql = this.TableMigration.buildColumn(table, column).split(' ').slice(1).join(' ');\n const raw_column_sql = `${has_column.type.toUpperCase()} ${has_column.notnull ? 'NOT NULL' : 'NULL'}${has_column.default_value ? ' DEFAULT ' + has_column.default_value : ''}${has_column.unique ? \" UNIQUE\" : \"\"}`.trim();\n if (buildColumnSql !== raw_column_sql) {\n\n const buildColumn = this.TableMigration.buildColumn(table, column);\n const sql = `ALTER TABLE ${quote(engine, table)} ALTER COLUMN ${buildColumn};`;\n await xansql.execute(sql);\n }\n }\n }\n }\n }\n\n return true;\n }\n\n async generate() {\n const xansql = this.xansql;\n const models = Array.from(xansql.ModelFactory.values());\n const raw_schema: XansqlDialectSchemaType = await xansql.getRawSchema() as any\n const tables = Object.keys(raw_schema);\n const migration_sql: string[] = [];\n\n for (let model of models) {\n if (!tables.includes(model.table)) {\n const { sql } = this.TableMigration.buildCreate(model);\n migration_sql.push(sql);\n } else {\n const model_columns = model.schema;\n const raw_columns = raw_schema[model.table] || [];\n\n for (let column in model_columns) {\n if (model_columns[column] instanceof XqlIDField) continue;\n const has_column = raw_columns.find((rc: any) => rc.name === column);\n if (!has_column && !Foreign.isArray(model_columns[column])) {\n const buildColumn = this.TableMigration.buildColumn(model.table, column);\n const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} ADD COLUMN ${buildColumn};`;\n migration_sql.push(sql);\n }\n }\n\n for (let rc of raw_columns) {\n if (!(rc.name in model_columns)) {\n const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} DROP COLUMN ${quote(xansql.config.dialect.engine, rc.name)};`;\n migration_sql.push(sql);\n }\n }\n\n for (let column in model_columns) {\n if (model_columns[column] instanceof XqlIDField || Foreign.isArray(model_columns[column])) continue;\n\n const has_column = raw_columns.find((rc: any) => rc.name === column);\n if (has_column) {\n const buildColumnSql = this.TableMigration.buildColumn(model.table, column).split(' ').slice(1).join(' ');\n const raw_column_sql = `${has_column.type.toUpperCase()} ${has_column.notnull ? 'NOT NULL' : 'NULL'}${has_column.default_value ? ' DEFAULT ' + has_column.default_value : ''}${has_column.unique ? \" UNIQUE\" : \"\"}`.trim();\n if (buildColumnSql !== raw_column_sql) {\n const buildColumn = this.TableMigration.buildColumn(model.table, column);\n const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} ALTER COLUMN ${buildColumn};`;\n migration_sql.push(sql);\n }\n }\n }\n }\n }\n\n return migration_sql;\n\n }\n}\n\nexport default XansqlMigration;"],"names":["TableMigration"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../src/core/classes/Migration/index.ts"],"sourcesContent":["import XqlFile from \"../../../xt/fields/File\";\nimport Xansql from \"../../Xansql\";\nimport TableMigration from \"./TableMigration\";\nimport Foreign from \"../ForeignInfo\";\nimport { XansqlDialectSchemaType } from \"../../types\";\nimport { iof, quote } from \"../../../utils\";\nimport XqlIDField from \"../../../xt/fields/IDField\";\n\nclass XansqlMigration {\n readonly xansql: Xansql\n readonly TableMigration: TableMigration\n\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n this.TableMigration = new TableMigration(xansql);\n }\n\n async migrate(force?: boolean) {\n const xansql = this.xansql;\n const engine = xansql.config.dialect.engine;\n const { options, tables, indexes } = this.TableMigration.statements();\n\n if (force) {\n const models = Array.from(xansql.models.values()).reverse();\n\n for (let model of models) {\n const fileWhere: any[] = [];\n for (let column in model.schema) {\n const field = model.schema[column];\n if (iof(field, XqlFile)) {\n fileWhere.push({ [column]: { isNotNull: true } });\n }\n }\n\n if (Object.keys(fileWhere).length > 0) {\n try {\n await model.delete({\n where: fileWhere,\n select: { [model.IDColumn]: true }\n });\n } catch (error) { }\n }\n }\n\n for (let model of models) {\n const dsql = this.TableMigration.buildDrop(model);\n try {\n await xansql.execute(dsql);\n } catch (error) { }\n }\n }\n\n for (let option of options) {\n await xansql.execute(option);\n }\n\n for (let { sql } of tables) {\n await xansql.execute(sql);\n }\n\n for (let { sql } of indexes) {\n try {\n await xansql.execute(sql);\n } catch (error) { }\n }\n\n if (!force) {\n const raw_schema: XansqlDialectSchemaType = await xansql.getRawSchema() as any\n\n for (let { table } of tables) {\n const model = xansql.getModel(table);\n const model_columns = model.schema;\n const raw_columns = raw_schema[table] || [];\n\n for (let column in model_columns) {\n if (iof(model_columns[column], XqlIDField)) continue;\n const has_column = raw_columns.find((rc: any) => rc.name === column);\n if (!has_column && !Foreign.isArray(model_columns[column])) {\n const buildColumn = this.TableMigration.buildColumn(table, column);\n const sql = `ALTER TABLE ${quote(engine, table)} ADD COLUMN ${buildColumn};`;\n await xansql.execute(sql);\n }\n }\n\n for (let rc of raw_columns) {\n if (!(rc.name in model_columns)) {\n const sql = `ALTER TABLE ${quote(engine, table)} DROP COLUMN ${quote(engine, rc.name)};`;\n await xansql.execute(sql);\n }\n }\n\n for (let column in model_columns) {\n if (iof(model_columns[column], XqlIDField) || Foreign.isArray(model_columns[column])) continue;\n\n const has_column = raw_columns.find((rc: any) => rc.name === column);\n if (has_column) {\n const buildColumnSql = this.TableMigration.buildColumn(table, column).split(' ').slice(1).join(' ');\n const raw_column_sql = `${has_column.type.toUpperCase()} ${has_column.notnull ? 'NOT NULL' : 'NULL'}${has_column.default_value ? ' DEFAULT ' + has_column.default_value : ''}${has_column.unique ? \" UNIQUE\" : \"\"}`.trim();\n if (buildColumnSql !== raw_column_sql) {\n\n const buildColumn = this.TableMigration.buildColumn(table, column);\n const sql = `ALTER TABLE ${quote(engine, table)} ALTER COLUMN ${buildColumn};`;\n await xansql.execute(sql);\n }\n }\n }\n }\n }\n\n return true;\n }\n\n async generate() {\n const xansql = this.xansql;\n const models = Array.from(xansql.models.values());\n const raw_schema: XansqlDialectSchemaType = await xansql.getRawSchema() as any\n const tables = Object.keys(raw_schema);\n const migration_sql: string[] = [];\n\n for (let model of models) {\n if (!tables.includes(model.table)) {\n const { sql } = this.TableMigration.buildCreate(model);\n migration_sql.push(sql);\n } else {\n const model_columns = model.schema;\n const raw_columns = raw_schema[model.table] || [];\n\n for (let column in model_columns) {\n if (iof(model_columns[column], XqlIDField)) continue;\n const has_column = raw_columns.find((rc: any) => rc.name === column);\n if (!has_column && !Foreign.isArray(model_columns[column])) {\n const buildColumn = this.TableMigration.buildColumn(model.table, column);\n const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} ADD COLUMN ${buildColumn};`;\n migration_sql.push(sql);\n }\n }\n\n for (let rc of raw_columns) {\n if (!(rc.name in model_columns)) {\n const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} DROP COLUMN ${quote(xansql.config.dialect.engine, rc.name)};`;\n migration_sql.push(sql);\n }\n }\n\n for (let column in model_columns) {\n if (iof(model_columns[column], XqlIDField) || Foreign.isArray(model_columns[column])) continue;\n\n const has_column = raw_columns.find((rc: any) => rc.name === column);\n if (has_column) {\n const buildColumnSql = this.TableMigration.buildColumn(model.table, column).split(' ').slice(1).join(' ');\n const raw_column_sql = `${has_column.type.toUpperCase()} ${has_column.notnull ? 'NOT NULL' : 'NULL'}${has_column.default_value ? ' DEFAULT ' + has_column.default_value : ''}${has_column.unique ? \" UNIQUE\" : \"\"}`.trim();\n if (buildColumnSql !== raw_column_sql) {\n const buildColumn = this.TableMigration.buildColumn(model.table, column);\n const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} ALTER COLUMN ${buildColumn};`;\n migration_sql.push(sql);\n }\n }\n }\n }\n }\n\n return migration_sql;\n\n }\n}\n\nexport default XansqlMigration;"],"names":["TableMigration"],"mappings":"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"}
|