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.
Files changed (212) hide show
  1. package/core/Xansql.cjs +7 -8
  2. package/core/Xansql.cjs.map +1 -1
  3. package/core/Xansql.d.ts +2 -3
  4. package/core/Xansql.mjs +7 -8
  5. package/core/Xansql.mjs.map +1 -1
  6. package/core/classes/ForeignInfo.cjs +3 -2
  7. package/core/classes/ForeignInfo.cjs.map +1 -1
  8. package/core/classes/ForeignInfo.d.ts +1 -2
  9. package/core/classes/ForeignInfo.mjs +3 -2
  10. package/core/classes/ForeignInfo.mjs.map +1 -1
  11. package/core/classes/Migration/TableMigration.cjs +24 -15
  12. package/core/classes/Migration/TableMigration.cjs.map +1 -1
  13. package/core/classes/Migration/TableMigration.mjs +25 -16
  14. package/core/classes/Migration/TableMigration.mjs.map +1 -1
  15. package/core/classes/Migration/index.cjs +13 -10
  16. package/core/classes/Migration/index.cjs.map +1 -1
  17. package/core/classes/Migration/index.mjs +14 -11
  18. package/core/classes/Migration/index.mjs.map +1 -1
  19. package/core/classes/{ModelFormatter.cjs → ModelFactory.cjs} +82 -56
  20. package/core/classes/ModelFactory.cjs.map +1 -0
  21. package/core/classes/{ModelFormatter.d.ts → ModelFactory.d.ts} +7 -2
  22. package/core/classes/{ModelFormatter.mjs → ModelFactory.mjs} +82 -56
  23. package/core/classes/ModelFactory.mjs.map +1 -0
  24. package/core/types.d.ts +1 -1
  25. package/dialect/MysqlDialect.cjs +7 -4
  26. package/dialect/MysqlDialect.cjs.map +1 -1
  27. package/dialect/MysqlDialect.d.ts +7 -4
  28. package/dialect/MysqlDialect.mjs +7 -4
  29. package/dialect/MysqlDialect.mjs.map +1 -1
  30. package/dialect/PostgresDialect.cjs +5 -2
  31. package/dialect/PostgresDialect.cjs.map +1 -1
  32. package/dialect/PostgresDialect.d.ts +5 -2
  33. package/dialect/PostgresDialect.mjs +5 -2
  34. package/dialect/PostgresDialect.mjs.map +1 -1
  35. package/dialect/SqliteDialect.cjs +3 -2
  36. package/dialect/SqliteDialect.cjs.map +1 -1
  37. package/dialect/SqliteDialect.d.ts +3 -2
  38. package/dialect/SqliteDialect.mjs +3 -2
  39. package/dialect/SqliteDialect.mjs.map +1 -1
  40. package/dialect/XansqlBridge/XansqlBridgeServer.cjs.map +1 -1
  41. package/dialect/XansqlBridge/XansqlBridgeServer.mjs.map +1 -1
  42. package/dialect/XansqlBridge/base.cjs +10 -5
  43. package/dialect/XansqlBridge/base.cjs.map +1 -1
  44. package/dialect/XansqlBridge/base.mjs +10 -5
  45. package/dialect/XansqlBridge/base.mjs.map +1 -1
  46. package/model/Args/WhereArgs.cjs +5 -8
  47. package/model/Args/WhereArgs.cjs.map +1 -1
  48. package/model/Args/WhereArgs.mjs +6 -9
  49. package/model/Args/WhereArgs.mjs.map +1 -1
  50. package/model/Base.cjs +2 -1
  51. package/model/Base.cjs.map +1 -1
  52. package/model/Base.mjs +2 -1
  53. package/model/Base.mjs.map +1 -1
  54. package/model/Executer/Aggregate/SelectArgs.cjs +2 -1
  55. package/model/Executer/Aggregate/SelectArgs.cjs.map +1 -1
  56. package/model/Executer/Aggregate/SelectArgs.mjs +2 -1
  57. package/model/Executer/Aggregate/SelectArgs.mjs.map +1 -1
  58. package/model/Executer/Aggregate/index.cjs +4 -4
  59. package/model/Executer/Aggregate/index.cjs.map +1 -1
  60. package/model/Executer/Aggregate/index.mjs +4 -4
  61. package/model/Executer/Aggregate/index.mjs.map +1 -1
  62. package/model/Executer/Create/CreateDataArgs.cjs +9 -5
  63. package/model/Executer/Create/CreateDataArgs.cjs.map +1 -1
  64. package/model/Executer/Create/CreateDataArgs.mjs +10 -6
  65. package/model/Executer/Create/CreateDataArgs.mjs.map +1 -1
  66. package/model/Executer/Create/index.cjs +1 -1
  67. package/model/Executer/Create/index.cjs.map +1 -1
  68. package/model/Executer/Create/index.mjs +1 -1
  69. package/model/Executer/Create/index.mjs.map +1 -1
  70. package/model/Executer/Delete/index.cjs +2 -1
  71. package/model/Executer/Delete/index.cjs.map +1 -1
  72. package/model/Executer/Delete/index.mjs +2 -1
  73. package/model/Executer/Delete/index.mjs.map +1 -1
  74. package/model/Executer/Find/SelectArgs.cjs +3 -3
  75. package/model/Executer/Find/SelectArgs.cjs.map +1 -1
  76. package/model/Executer/Find/SelectArgs.mjs +3 -3
  77. package/model/Executer/Find/SelectArgs.mjs.map +1 -1
  78. package/model/Executer/Update/UpdateDataArgs.cjs +4 -4
  79. package/model/Executer/Update/UpdateDataArgs.cjs.map +1 -1
  80. package/model/Executer/Update/UpdateDataArgs.mjs +5 -5
  81. package/model/Executer/Update/UpdateDataArgs.mjs.map +1 -1
  82. package/model/Executer/Update/index.cjs +1 -1
  83. package/model/Executer/Update/index.cjs.map +1 -1
  84. package/model/Executer/Update/index.mjs +1 -1
  85. package/model/Executer/Update/index.mjs.map +1 -1
  86. package/model/include/ValueFormatter.cjs +72 -17
  87. package/model/include/ValueFormatter.cjs.map +1 -1
  88. package/model/include/ValueFormatter.d.ts +1 -1
  89. package/model/include/ValueFormatter.mjs +72 -17
  90. package/model/include/ValueFormatter.mjs.map +1 -1
  91. package/model/index.cjs +8 -7
  92. package/model/index.cjs.map +1 -1
  93. package/model/index.mjs +8 -7
  94. package/model/index.mjs.map +1 -1
  95. package/package.json +12 -7
  96. package/utils/index.cjs +5 -2
  97. package/utils/index.cjs.map +1 -1
  98. package/utils/index.d.ts +2 -1
  99. package/utils/index.mjs +5 -3
  100. package/utils/index.mjs.map +1 -1
  101. package/xt/additional/IP.cjs +22 -0
  102. package/xt/additional/IP.cjs.map +1 -0
  103. package/xt/additional/IP.d.ts +6 -0
  104. package/xt/additional/IP.mjs +20 -0
  105. package/xt/additional/IP.mjs.map +1 -0
  106. package/xt/additional/Name.cjs +21 -0
  107. package/xt/additional/Name.cjs.map +1 -0
  108. package/xt/additional/Name.d.ts +6 -0
  109. package/xt/additional/Name.mjs +19 -0
  110. package/xt/additional/Name.mjs.map +1 -0
  111. package/xt/additional/Password.cjs +25 -0
  112. package/xt/additional/Password.cjs.map +1 -0
  113. package/xt/additional/Password.d.ts +6 -0
  114. package/xt/additional/Password.mjs +23 -0
  115. package/xt/additional/Password.mjs.map +1 -0
  116. package/xt/additional/Phone.cjs +21 -0
  117. package/xt/additional/Phone.cjs.map +1 -0
  118. package/xt/additional/Phone.d.ts +6 -0
  119. package/xt/additional/Phone.mjs +19 -0
  120. package/xt/additional/Phone.mjs.map +1 -0
  121. package/xt/additional/Photo.cjs +21 -0
  122. package/xt/additional/Photo.cjs.map +1 -0
  123. package/xt/additional/Photo.d.ts +6 -0
  124. package/xt/additional/Photo.mjs +19 -0
  125. package/xt/additional/Photo.mjs.map +1 -0
  126. package/xt/additional/Slug.cjs +21 -0
  127. package/xt/additional/Slug.cjs.map +1 -0
  128. package/xt/additional/Slug.d.ts +6 -0
  129. package/xt/additional/Slug.mjs +19 -0
  130. package/xt/additional/Slug.mjs.map +1 -0
  131. package/xt/additional/Url.cjs +26 -0
  132. package/xt/additional/Url.cjs.map +1 -0
  133. package/xt/additional/Url.d.ts +6 -0
  134. package/xt/additional/Url.mjs +24 -0
  135. package/xt/additional/Url.mjs.map +1 -0
  136. package/xt/additional/Username.cjs +21 -0
  137. package/xt/additional/Username.cjs.map +1 -0
  138. package/xt/additional/Username.d.ts +6 -0
  139. package/xt/additional/Username.mjs +19 -0
  140. package/xt/additional/Username.mjs.map +1 -0
  141. package/xt/fields/Array.cjs +9 -2
  142. package/xt/fields/Array.cjs.map +1 -1
  143. package/xt/fields/Array.d.ts +2 -0
  144. package/xt/fields/Array.mjs +9 -2
  145. package/xt/fields/Array.mjs.map +1 -1
  146. package/xt/fields/Boolean.cjs +10 -5
  147. package/xt/fields/Boolean.cjs.map +1 -1
  148. package/xt/fields/Boolean.d.ts +2 -0
  149. package/xt/fields/Boolean.mjs +10 -5
  150. package/xt/fields/Boolean.mjs.map +1 -1
  151. package/xt/fields/Date.cjs +12 -12
  152. package/xt/fields/Date.cjs.map +1 -1
  153. package/xt/fields/Date.d.ts +2 -0
  154. package/xt/fields/Date.mjs +12 -12
  155. package/xt/fields/Date.mjs.map +1 -1
  156. package/xt/fields/Enum.cjs +10 -4
  157. package/xt/fields/Enum.cjs.map +1 -1
  158. package/xt/fields/Enum.d.ts +2 -0
  159. package/xt/fields/Enum.mjs +10 -4
  160. package/xt/fields/Enum.mjs.map +1 -1
  161. package/xt/fields/File.cjs +9 -2
  162. package/xt/fields/File.cjs.map +1 -1
  163. package/xt/fields/File.d.ts +2 -0
  164. package/xt/fields/File.mjs +9 -2
  165. package/xt/fields/File.mjs.map +1 -1
  166. package/xt/fields/IDField.cjs +8 -0
  167. package/xt/fields/IDField.cjs.map +1 -1
  168. package/xt/fields/IDField.d.ts +2 -0
  169. package/xt/fields/IDField.mjs +8 -0
  170. package/xt/fields/IDField.mjs.map +1 -1
  171. package/xt/fields/Number.cjs +10 -5
  172. package/xt/fields/Number.cjs.map +1 -1
  173. package/xt/fields/Number.d.ts +2 -0
  174. package/xt/fields/Number.mjs +10 -5
  175. package/xt/fields/Number.mjs.map +1 -1
  176. package/xt/fields/Object.cjs +10 -5
  177. package/xt/fields/Object.cjs.map +1 -1
  178. package/xt/fields/Object.d.ts +2 -0
  179. package/xt/fields/Object.mjs +10 -5
  180. package/xt/fields/Object.mjs.map +1 -1
  181. package/xt/fields/Record.cjs +10 -5
  182. package/xt/fields/Record.cjs.map +1 -1
  183. package/xt/fields/Record.d.ts +2 -0
  184. package/xt/fields/Record.mjs +10 -5
  185. package/xt/fields/Record.mjs.map +1 -1
  186. package/xt/fields/Schema.cjs +12 -1
  187. package/xt/fields/Schema.cjs.map +1 -1
  188. package/xt/fields/Schema.d.ts +4 -1
  189. package/xt/fields/Schema.mjs +12 -1
  190. package/xt/fields/Schema.mjs.map +1 -1
  191. package/xt/fields/String.cjs +12 -9
  192. package/xt/fields/String.cjs.map +1 -1
  193. package/xt/fields/String.d.ts +2 -0
  194. package/xt/fields/String.mjs +12 -9
  195. package/xt/fields/String.mjs.map +1 -1
  196. package/xt/fields/Tuple.cjs +10 -5
  197. package/xt/fields/Tuple.cjs.map +1 -1
  198. package/xt/fields/Tuple.d.ts +2 -0
  199. package/xt/fields/Tuple.mjs +10 -5
  200. package/xt/fields/Tuple.mjs.map +1 -1
  201. package/xt/fields/Union.cjs +10 -5
  202. package/xt/fields/Union.cjs.map +1 -1
  203. package/xt/fields/Union.d.ts +2 -0
  204. package/xt/fields/Union.mjs +10 -5
  205. package/xt/fields/Union.mjs.map +1 -1
  206. package/xt/index.cjs +16 -100
  207. package/xt/index.cjs.map +1 -1
  208. package/xt/index.d.ts +16 -9
  209. package/xt/index.mjs +16 -100
  210. package/xt/index.mjs.map +1 -1
  211. package/core/classes/ModelFormatter.cjs.map +0 -1
  212. 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
- sqls.push(fk);
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 === null || model === void 0 ? void 0 : model.schema[column];
107
- const meta = (field === null || field === void 0 ? void 0 : field.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 instanceof XqlIDField) {
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 instanceof XqlSchema) {
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 instanceof XqlString) {
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 instanceof XqlFile) {
151
+ else if (iof(field, XqlFile)) {
143
152
  sql += col(column, "VARCHAR(255)");
144
153
  }
145
- else if (field instanceof XqlNumber) {
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 instanceof XqlBoolean) {
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 instanceof XqlDate) {
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 instanceof XqlEnum) {
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 instanceof XqlObject || field instanceof XqlRecord || field instanceof XqlTuple || field instanceof XqlUnion) {
211
+ else if (iof(field, XqlObject, XqlRecord, XqlTuple, XqlUnion)) {
203
212
  sql += col(column, "TEXT");
204
213
  }
205
- else if (field instanceof XqlArray) {
214
+ else if (iof(field, XqlArray)) {
206
215
  const arrayType = field.type;
207
- const isSchemaArray = arrayType instanceof XqlSchema;
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":";;;;;;;;;;;;;;;;;;;AAqBA,MAAM,SAAS,CAAA;AAIZ,IAAA,WAAA,CAAY,MAAc,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;QACpB,IAAI,CAAC,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC;QAC1D,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC;IACnD;IAEA,UAAU,GAAA;QACP,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;AAChD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;QAEjC,MAAM,OAAO,GAAa,EAAE;QAC5B,MAAM,MAAM,GAAuC,EAAE;QACrD,MAAM,OAAO,GAAuC,EAAE;AAEtD,QAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;AACtB,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,yBAAA,CAA2B,CAAC;AACzC,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,0BAAA,CAA4B,CAAC;AAC1C,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,iCAAA,CAAmC,CAAC;AACjD,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,4BAAA,CAA8B,CAAC;QAC/C;AAAO,aAAA,IAAI,MAAM,KAAK,YAAY,EAAE;AACjC,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,mCAAA,CAAqC,CAAC;AACnD,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,qCAAA,CAAuC,CAAC;QACxD;AAAO,aAAA,IAAI,MAAM,KAAK,OAAO,EAAE;AAC5B,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,mCAAA,CAAqC,CAAC;AACnD,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,2BAAA,CAA6B,CAAC;AAC3C,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,yBAAA,CAA2B,CAAC;QAC5C;QAEA,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE;YAChC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AAC/B,YAAA,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,KAAM,CAAC;AAC/D,YAAA,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC;gBACT,KAAK;gBACL;AACF,aAAA,CAAC;QACL;QAEA,OAAO;YACJ,OAAO;YACP,MAAM;YACN;SACF;IACJ;AAEA,IAAA,WAAW,CAAC,KAAY,EAAA;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;QAChD,IAAI,OAAO,GAAuC,EAAE;AACpD,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;AACzB,QAAA,MAAM,MAAM,GAAG,CAAA,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAA,MAAA,GAAL,KAAK,CAAE,MAAM,KAAI,EAAE;QAClC,IAAI,IAAI,GAAa,EAAE;AAEvB,QAAA,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE;AAC1B,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;AAC5B,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC;AAC3C,YAAA,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAErB,YAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,KAAM,EAAE,MAAM,CAAC;gBACxC,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC9F,IAAI,EAAE,EAAE;AACL,oBAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChB;YACH;YAEA,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC7B,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC;gBAC/D,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;YACzC;QACH;AAEA,QAAA,IAAI,GAAG,GAAG,CAAA,2BAAA,EAA8B,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;AAClF,QAAA,IAAI,MAAM,KAAK,OAAO,EAAE;YACrB,GAAG,IAAI,oEAAoE;QAC9E;aAAO;YACJ,GAAG,IAAI,IAAI;QACd;QAEA,OAAO;YACJ,GAAG;YACH;SACF;IACJ;AAEA,IAAA,SAAS,CAAC,KAAU,EAAA;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;AAChD,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;QACzB,IAAI,GAAG,GAAG,CAAA,qBAAA,EAAwB,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA,CAAA,CAAG;AACzD,QAAA,OAAO,GAAG;IACb;IAEA,WAAW,CAAC,KAAa,EAAE,MAAc,EAAA;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;AAChD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3C,QAAA,MAAM,KAAK,GAAG,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAA,MAAA,GAAL,KAAK,CAAE,MAAM,CAAC,MAAM,CAAC;AACnC,QAAA,MAAM,IAAI,GAAG,CAAA,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAA,MAAA,GAAL,KAAK,CAAE,IAAI,KAAI,EAAE;AAC9B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,GAAG,MAAM,GAAG,UAAU;AACrE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,GAAG,EAAE;AAC1C,QAAA,MAAM,GAAG,GAAG,CAAC,MAAc,EAAE,OAAe,KAAI;AAC7C,YAAA,OAAO,KAAK,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAI,MAAM,EAAE,CAAC,IAAI,EAAE;AAC9E,QAAA,CAAC;QACD,IAAI,GAAG,GAAG,EAAE;AACZ,QAAA,IAAI,KAAK,YAAY,UAAU,EAAE;AAC9B,YAAA,IAAI,MAAM,KAAK,OAAO,EAAE;AACrB,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,gCAAgC,CAAC;YACvD;AAAO,iBAAA,IAAI,MAAM,KAAK,YAAY,EAAE;AACjC,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC;YAC3C;AAAO,iBAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;AAC7B,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,mCAAmC,CAAC;YAC1D;QACH;AAAO,aAAA,IAAI,KAAK,YAAY,SAAS,EAAE;AACpC,YAAA,IAAI,MAAM,KAAK,OAAO,EAAE;AACrB,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;YAC5B;iBAAO,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,QAAQ,EAAE;AACxD,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;YAChC;QACH;AAAO,aAAA,IAAI,KAAK,YAAY,SAAS,EAAE;YACpC,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG;AACpC,YAAA,IAAI,IAAI,CAAC,IAAI,IAAI,MAAM,GAAG,KAAK,IAAI,MAAM,KAAK,QAAQ,EAAE;AACrD,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;YAC7B;iBAAO;gBACJ,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAA,QAAA,EAAW,MAAM,IAAI,GAAG,CAAA,CAAA,CAAG,CAAC;YAClD;QACH;AAAO,aAAA,IAAI,KAAK,YAAY,OAAO,EAAE;AAClC,YAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;QACrC;AAAO,aAAA,IAAI,KAAK,YAAY,SAAS,EAAE;AACpC,YAAA,IAAI,MAAM,KAAK,OAAO,EAAE;AACrB,gBAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACf,oBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;gBAC5B;AAAO,qBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACpB,oBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;gBAC9B;qBAAO;AACJ,oBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC;gBACvC;YACH;iBAAO,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,QAAQ,EAAE;AACxD,gBAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACf,oBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;gBAChC;AAAO,qBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACpB,oBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;gBAC7B;qBAAO;AACJ,oBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,QAAQ,GAAG,SAAS,GAAG,gBAAgB,CAAC;gBACzE;YACH;QACH;AAAO,aAAA,IAAI,KAAK,YAAY,UAAU,EAAE;YACrC,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,YAAY,EAAE;AAChD,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;YAChC;AAAO,iBAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;gBAC7B,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;YAChC;QACH;AAAO,aAAA,IAAI,KAAK,YAAY,OAAO,EAAE;AAClC,YAAA,IAAI,MAAM,KAAK,OAAO,EAAE;AACrB,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;YACjC;AAAO,iBAAA,IAAI,MAAM,KAAK,YAAY,EAAE;AACjC,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC;YAClC;AAAO,iBAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;gBAC7B,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YAC7B;QACH;AAAO,aAAA,IAAI,KAAK,YAAY,OAAO,EAAE;AAClC,YAAA,IAAI,MAAM,KAAK,OAAO,EAAE;AACrB,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAA,KAAA,EAAS,KAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAA,CAAA,EAAI,cAAc,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,CAAC;YAC5G;AAAO,iBAAA,IAAI,MAAM,KAAK,YAAY,EAAE;AACjC,gBAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,MAAM,OAAO;AAC1C,gBAAA,GAAG,IAAI,CAAA,YAAA,EAAe,QAAQ,CAAA,UAAA,EAAc,KAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAA,CAAA,EAAI,cAAc,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,GAAA,CAAK;AAC1H,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;YAC/B;AAAO,iBAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;gBAC7B,MAAM,MAAM,GAAI,KAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAA,CAAA,EAAI,cAAc,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACzF,gBAAA,GAAG,IAAI,CAAA,CAAA,EAAI,MAAM,CAAA,cAAA,EAAiB,MAAM,CAAA,MAAA,EAAS,MAAM,CAAA,GAAA,EAAM,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAA,EAAA,CAAI;YACtF;QACH;AAAO,aAAA,IAAI,KAAK,YAAY,SAAS,IAAI,KAAK,YAAY,SAAS,IAAI,KAAK,YAAY,QAAQ,IAAI,KAAK,YAAY,QAAQ,EAAE;AAC5H,YAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;QAC7B;AAAO,aAAA,IAAI,KAAK,YAAY,QAAQ,EAAE;AACnC,YAAA,MAAM,SAAS,GAAI,KAAa,CAAC,IAAI;AACrC,YAAA,MAAM,aAAa,GAAG,SAAS,YAAY,SAAS;YACpD,IAAI,CAAC,aAAa,EAAE;AACjB,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;YAC7B;QACH;aAAO;YACJ,MAAM,IAAI,WAAW,CAAC;AACnB,gBAAA,OAAO,EAAE,CAAA,mCAAA,EAAsC,MAAM,CAAA,YAAA,EAAe,KAAK,CAAA,EAAA,CAAI;AAC7E,gBAAA,KAAK,EAAE,KAAK;gBACZ;AACF,aAAA,CAAC;QACL;AACA,QAAA,OAAO,GAAG;IACb;AACF;;;;"}
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.ModelFactory.values()).reverse();
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 instanceof xt_fields_File) {
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
- await xansql.execute(dsql);
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 { table, sql } of tables) {
49
+ for (let { sql } of tables) {
47
50
  await xansql.execute(sql);
48
51
  }
49
- for (let { sql, table } of indexes) {
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] instanceof xt_fields_IDField)
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] instanceof xt_fields_IDField || core_classes_ForeignInfo.isArray(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.ModelFactory.values());
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] instanceof xt_fields_IDField)
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] instanceof xt_fields_IDField || core_classes_ForeignInfo.isArray(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":"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"}
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.ModelFactory.values()).reverse();
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 instanceof XqlFile) {
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
- await xansql.execute(dsql);
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 { table, sql } of tables) {
47
+ for (let { sql } of tables) {
45
48
  await xansql.execute(sql);
46
49
  }
47
- for (let { sql, table } of indexes) {
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] instanceof XqlIDField)
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] instanceof XqlIDField || Foreign.isArray(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.ModelFactory.values());
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] instanceof XqlIDField)
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] instanceof XqlIDField || Foreign.isArray(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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"}