xansql 1.0.3 → 1.0.4
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 +0 -1
- package/core/Xansql.cjs.map +1 -1
- package/core/Xansql.d.ts +0 -1
- package/core/Xansql.mjs +0 -1
- package/core/Xansql.mjs.map +1 -1
- package/core/XansqlError.cjs.map +1 -1
- package/core/XansqlError.mjs.map +1 -1
- package/core/classes/EventManager.cjs.map +1 -1
- package/core/classes/EventManager.mjs.map +1 -1
- package/core/classes/ForeignInfo.cjs.map +1 -1
- package/core/classes/ForeignInfo.mjs.map +1 -1
- package/core/classes/Migration/ForeingMigration.cjs.map +1 -1
- package/core/classes/Migration/ForeingMigration.mjs.map +1 -1
- package/core/classes/Migration/IndexMigration.cjs.map +1 -1
- package/core/classes/Migration/IndexMigration.mjs.map +1 -1
- package/core/classes/Migration/TableMigration.cjs.map +1 -1
- package/core/classes/Migration/TableMigration.mjs.map +1 -1
- package/core/classes/Migration/index.cjs.map +1 -1
- package/core/classes/Migration/index.mjs.map +1 -1
- package/core/classes/ModelFormatter.cjs.map +1 -1
- package/core/classes/ModelFormatter.mjs.map +1 -1
- package/core/classes/XansqlConfig.cjs.map +1 -1
- package/core/classes/XansqlConfig.mjs.map +1 -1
- package/core/classes/XansqlTransaction.cjs.map +1 -1
- package/core/classes/XansqlTransaction.mjs.map +1 -1
- package/dialect/MysqlDialect.cjs +10 -10
- package/dialect/MysqlDialect.cjs.map +1 -1
- package/dialect/MysqlDialect.mjs +10 -10
- package/dialect/MysqlDialect.mjs.map +1 -1
- package/dialect/PostgresDialect.cjs +41 -41
- package/dialect/PostgresDialect.cjs.map +1 -1
- package/dialect/PostgresDialect.mjs +41 -41
- package/dialect/PostgresDialect.mjs.map +1 -1
- package/dialect/SqliteDialect.cjs.map +1 -1
- package/dialect/SqliteDialect.mjs.map +1 -1
- package/dialect/XansqlBridge/FileInDirectory.cjs.map +1 -1
- package/dialect/XansqlBridge/FileInDirectory.mjs.map +1 -1
- package/dialect/XansqlBridge/XansqlBridgeServer.cjs +4 -3
- package/dialect/XansqlBridge/XansqlBridgeServer.cjs.map +1 -1
- package/dialect/XansqlBridge/XansqlBridgeServer.d.ts +2 -1
- package/dialect/XansqlBridge/XansqlBridgeServer.mjs +4 -3
- package/dialect/XansqlBridge/XansqlBridgeServer.mjs.map +1 -1
- package/dialect/XansqlBridge/base.cjs.map +1 -1
- package/dialect/XansqlBridge/base.mjs.map +1 -1
- package/dialect/XansqlBridge/index.cjs.map +1 -1
- package/dialect/XansqlBridge/index.mjs.map +1 -1
- package/dialect/XansqlBridge/types.d.ts +3 -6
- package/model/Args/RelationExcuteArgs.cjs.map +1 -1
- package/model/Args/RelationExcuteArgs.mjs.map +1 -1
- package/model/Args/WhereArgs.cjs.map +1 -1
- package/model/Args/WhereArgs.mjs.map +1 -1
- package/model/Base.cjs.map +1 -1
- package/model/Base.mjs.map +1 -1
- package/model/Executer/Aggregate/SelectArgs.cjs.map +1 -1
- package/model/Executer/Aggregate/SelectArgs.mjs.map +1 -1
- package/model/Executer/Aggregate/index.cjs.map +1 -1
- package/model/Executer/Aggregate/index.mjs.map +1 -1
- package/model/Executer/Create/CreateDataArgs.cjs.map +1 -1
- package/model/Executer/Create/CreateDataArgs.mjs.map +1 -1
- package/model/Executer/Create/index.cjs.map +1 -1
- package/model/Executer/Create/index.mjs.map +1 -1
- package/model/Executer/Delete/index.cjs.map +1 -1
- package/model/Executer/Delete/index.mjs.map +1 -1
- package/model/Executer/Find/DistinctArgs.cjs +5 -5
- package/model/Executer/Find/DistinctArgs.cjs.map +1 -1
- package/model/Executer/Find/DistinctArgs.mjs +5 -5
- package/model/Executer/Find/DistinctArgs.mjs.map +1 -1
- package/model/Executer/Find/LimitArgs.cjs.map +1 -1
- package/model/Executer/Find/LimitArgs.mjs.map +1 -1
- package/model/Executer/Find/OrderByArgs.cjs.map +1 -1
- package/model/Executer/Find/OrderByArgs.mjs.map +1 -1
- package/model/Executer/Find/SelectArgs.cjs.map +1 -1
- package/model/Executer/Find/SelectArgs.mjs.map +1 -1
- package/model/Executer/Find/index.cjs +9 -9
- package/model/Executer/Find/index.cjs.map +1 -1
- package/model/Executer/Find/index.mjs +9 -9
- package/model/Executer/Find/index.mjs.map +1 -1
- package/model/Executer/Update/UpdateDataArgs.cjs.map +1 -1
- package/model/Executer/Update/UpdateDataArgs.mjs.map +1 -1
- package/model/Executer/Update/index.cjs.map +1 -1
- package/model/Executer/Update/index.mjs.map +1 -1
- package/model/Schema.cjs.map +1 -1
- package/model/Schema.mjs.map +1 -1
- package/model/include/ValueFormatter.cjs.map +1 -1
- package/model/include/ValueFormatter.mjs.map +1 -1
- package/model/index.cjs.map +1 -1
- package/model/index.mjs.map +1 -1
- package/package.json +14 -2
- package/readme.md +359 -359
- package/utils/chunker.cjs.map +1 -1
- package/utils/chunker.mjs.map +1 -1
- package/utils/file.cjs.map +1 -1
- package/utils/file.mjs.map +1 -1
- package/utils/index.cjs.map +1 -1
- package/utils/index.mjs.map +1 -1
- package/utils/sha256.cjs.map +1 -1
- package/utils/sha256.mjs.map +1 -1
- package/xt/fields/Array.cjs.map +1 -1
- package/xt/fields/Array.mjs.map +1 -1
- package/xt/fields/Boolean.cjs.map +1 -1
- package/xt/fields/Boolean.mjs.map +1 -1
- package/xt/fields/Date.cjs.map +1 -1
- package/xt/fields/Date.mjs.map +1 -1
- package/xt/fields/Enum.cjs.map +1 -1
- package/xt/fields/Enum.mjs.map +1 -1
- package/xt/fields/File.cjs.map +1 -1
- package/xt/fields/File.mjs.map +1 -1
- package/xt/fields/IDField.cjs.map +1 -1
- package/xt/fields/IDField.mjs.map +1 -1
- package/xt/fields/Number.cjs.map +1 -1
- package/xt/fields/Number.mjs.map +1 -1
- package/xt/fields/Object.cjs.map +1 -1
- package/xt/fields/Object.mjs.map +1 -1
- package/xt/fields/Record.cjs.map +1 -1
- package/xt/fields/Record.mjs.map +1 -1
- package/xt/fields/Schema.cjs.map +1 -1
- package/xt/fields/Schema.mjs.map +1 -1
- package/xt/fields/String.cjs.map +1 -1
- package/xt/fields/String.mjs.map +1 -1
- package/xt/fields/Tuple.cjs.map +1 -1
- package/xt/fields/Tuple.mjs.map +1 -1
- package/xt/fields/Union.cjs.map +1 -1
- package/xt/fields/Union.mjs.map +1 -1
- package/xt/index.cjs.map +1 -1
- package/xt/index.mjs.map +1 -1
package/core/Xansql.cjs
CHANGED
|
@@ -12,7 +12,6 @@ var model_Schema = require('../model/Schema.cjs');
|
|
|
12
12
|
class Xansql {
|
|
13
13
|
constructor(config) {
|
|
14
14
|
this.ModelFactory = new Map();
|
|
15
|
-
this.XANFETCH_CONTENT_TYPE = 'application/octet-stream';
|
|
16
15
|
this._aliases = new Map();
|
|
17
16
|
this._timer = null;
|
|
18
17
|
this.XansqlConfig = new core_classes_XansqlConfig(this, config);
|
package/core/Xansql.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Xansql.cjs","sources":["../../src/core/Xansql.ts"],"sourcesContent":["import Model from \"../model\";\r\nimport { ExecuterResult, XansqlConfigType, XansqlConfigTypeRequired } from \"./types\";\r\nimport XansqlTransaction from \"./classes/XansqlTransaction\";\r\nimport XansqlConfig from \"./classes/XansqlConfig\";\r\nimport ModelFormatter from \"./classes/ModelFormatter\";\r\nimport XansqlMigration from \"./classes/Migration\";\r\nimport EventManager, { EventHandler, EventPayloads } from \"./classes/EventManager\";\r\nimport XansqlError from \"./XansqlError\";\r\nimport Schema from \"../model/Schema\";\r\nimport { XansqlModelHooks } from \"../model/types\";\r\n\r\nclass Xansql {\r\n readonly config: XansqlConfigTypeRequired;\r\n readonly ModelFactory = new Map<string, Model>()\r\n readonly XANFETCH_CONTENT_TYPE = 'application/octet-stream';\r\n private _aliases = new Map<string, string>();\r\n private ModelFormatter: ModelFormatter;\r\n private XansqlConfig: XansqlConfig;\r\n readonly XansqlTransaction: XansqlTransaction;\r\n readonly EventManager: EventManager\r\n\r\n // SQL Generator Instances can be added here\r\n readonly XansqlMigration: XansqlMigration\r\n\r\n constructor(config: XansqlConfigType) {\r\n this.XansqlConfig = new XansqlConfig(this, config);\r\n this.config = this.XansqlConfig.parse()\r\n this.XansqlTransaction = new XansqlTransaction(this);\r\n this.ModelFormatter = new ModelFormatter(this);\r\n\r\n this.XansqlMigration = new XansqlMigration(this);\r\n this.EventManager = new EventManager();\r\n }\r\n\r\n get dialect() {\r\n return this.config.dialect;\r\n }\r\n\r\n get models() {\r\n return this.ModelFormatter.format()\r\n }\r\n\r\n clone(config?: Partial<XansqlConfigType>) {\r\n const self = new XansqlClone({ ...this.config, ...(config || {}) });\r\n for (let [table, model] of this.ModelFactory) {\r\n const schema = new Schema(table, model.schema)\r\n for (let hook in model.hooks) {\r\n schema.addHook(hook as any, model.hooks[hook as keyof XansqlModelHooks] as any)\r\n }\r\n self.model(schema);\r\n }\r\n return self;\r\n }\r\n\r\n private makeAlias(table: string) {\r\n let wordLength = 1;\r\n table = table.toLowerCase().replace(/[^a-z0-9_]/g, '_')\r\n let alias = table.slice(0, wordLength)\r\n while (true) {\r\n if (!this._aliases.has(alias) || wordLength > table.length) break;\r\n wordLength++;\r\n alias = table.slice(0, wordLength);\r\n }\r\n if (this._aliases.has(alias)) {\r\n throw new XansqlError({\r\n message: `Cannot create alias for table ${table}, please rename the table to avoid conflicts.`,\r\n model: table,\r\n });\r\n }\r\n this._aliases.set(table, alias);\r\n return alias;\r\n }\r\n\r\n _timer: any = null;\r\n model(schema: Schema): Model {\r\n const model = new Model(schema.table, schema.schema);\r\n if (!model.IDColumn) {\r\n throw new XansqlError({\r\n message: `Model ${schema.table} must have an ID column.`,\r\n model: schema.table,\r\n });\r\n }\r\n if (this.ModelFactory.has(schema.table)) {\r\n throw new XansqlError({\r\n message: `Model for table ${schema.table} already exists.`,\r\n model: schema.table,\r\n });\r\n }\r\n model.alias = this.makeAlias(schema.table);\r\n model.xansql = this;\r\n model.hooks = schema.hooks;\r\n this.ModelFactory.set(schema.table, model);\r\n\r\n // this will delay the model formatting to allow multiple models to be added before formatting\r\n clearTimeout(this._timer);\r\n this._timer = setTimeout(() => {\r\n this.ModelFormatter.format()\r\n }, 5);\r\n return model\r\n }\r\n\r\n getModel(table: string): Model {\r\n if (!this.models.has(table)) {\r\n throw new XansqlError({\r\n message: `Model for table ${table} does not exist.`,\r\n model: table,\r\n });\r\n }\r\n return this.models.get(table) as Model;\r\n }\r\n\r\n async execute(sql: string): Promise<ExecuterResult> {\r\n sql = sql.trim().replace(/\\s+/g, ' ');\r\n return await this.dialect.execute(sql, this) as any\r\n }\r\n\r\n async getRawSchema() {\r\n return await this.dialect.getSchema(this);\r\n }\r\n\r\n async uploadFile(file: File) {\r\n if (!this.dialect.file?.upload) {\r\n throw new XansqlError(`File upload is not supported by the current dialect.`);\r\n }\r\n return await this.dialect.file.upload(file, this);\r\n }\r\n\r\n async deleteFile(filename: string) {\r\n if (!this.dialect.file?.delete) {\r\n throw new XansqlError(`File delete is not supported by the current dialect.`);\r\n }\r\n return await this.dialect.file.delete(filename, this);\r\n }\r\n\r\n async transaction(callback: () => Promise<any>) {\r\n return await this.XansqlTransaction.transaction(callback);\r\n }\r\n\r\n async migrate(force?: boolean) {\r\n return await this.XansqlMigration.migrate(force);\r\n }\r\n\r\n async generateMigration() {\r\n return await this.XansqlMigration.generate();\r\n }\r\n\r\n on<K extends keyof EventPayloads>(event: K, handler: EventHandler<K>) {\r\n this.EventManager.on(event, handler);\r\n }\r\n\r\n}\r\n\r\nclass XansqlClone extends Xansql { }\r\n\r\n\r\nexport default Xansql"],"names":["XansqlConfig","XansqlTransaction","ModelFormatter","XansqlMigration","EventManager","Schema","XansqlError","Model"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Xansql.cjs","sources":["../../src/core/Xansql.ts"],"sourcesContent":["import Model from \"../model\";\nimport { ExecuterResult, XansqlConfigType, XansqlConfigTypeRequired } from \"./types\";\nimport XansqlTransaction from \"./classes/XansqlTransaction\";\nimport XansqlConfig from \"./classes/XansqlConfig\";\nimport ModelFormatter from \"./classes/ModelFormatter\";\nimport XansqlMigration from \"./classes/Migration\";\nimport EventManager, { EventHandler, EventPayloads } from \"./classes/EventManager\";\nimport XansqlError from \"./XansqlError\";\nimport Schema from \"../model/Schema\";\nimport { XansqlModelHooks } from \"../model/types\";\n\nclass Xansql {\n readonly config: XansqlConfigTypeRequired;\n readonly ModelFactory = new Map<string, Model>()\n\n private _aliases = new Map<string, string>();\n private ModelFormatter: ModelFormatter;\n private XansqlConfig: XansqlConfig;\n readonly XansqlTransaction: XansqlTransaction;\n readonly EventManager: EventManager\n\n // SQL Generator Instances can be added here\n readonly XansqlMigration: XansqlMigration\n\n constructor(config: XansqlConfigType) {\n this.XansqlConfig = new XansqlConfig(this, config);\n this.config = this.XansqlConfig.parse()\n this.XansqlTransaction = new XansqlTransaction(this);\n this.ModelFormatter = new ModelFormatter(this);\n\n this.XansqlMigration = new XansqlMigration(this);\n this.EventManager = new EventManager();\n }\n\n get dialect() {\n return this.config.dialect;\n }\n\n get models() {\n return this.ModelFormatter.format()\n }\n\n clone(config?: Partial<XansqlConfigType>) {\n const self = new XansqlClone({ ...this.config, ...(config || {}) });\n for (let [table, model] of this.ModelFactory) {\n const schema = new Schema(table, model.schema)\n for (let hook in model.hooks) {\n schema.addHook(hook as any, model.hooks[hook as keyof XansqlModelHooks] as any)\n }\n self.model(schema);\n }\n return self;\n }\n\n private makeAlias(table: string) {\n let wordLength = 1;\n table = table.toLowerCase().replace(/[^a-z0-9_]/g, '_')\n let alias = table.slice(0, wordLength)\n while (true) {\n if (!this._aliases.has(alias) || wordLength > table.length) break;\n wordLength++;\n alias = table.slice(0, wordLength);\n }\n if (this._aliases.has(alias)) {\n throw new XansqlError({\n message: `Cannot create alias for table ${table}, please rename the table to avoid conflicts.`,\n model: table,\n });\n }\n this._aliases.set(table, alias);\n return alias;\n }\n\n _timer: any = null;\n model(schema: Schema): Model {\n const model = new Model(schema.table, schema.schema);\n if (!model.IDColumn) {\n throw new XansqlError({\n message: `Model ${schema.table} must have an ID column.`,\n model: schema.table,\n });\n }\n if (this.ModelFactory.has(schema.table)) {\n throw new XansqlError({\n message: `Model for table ${schema.table} already exists.`,\n model: schema.table,\n });\n }\n model.alias = this.makeAlias(schema.table);\n model.xansql = this;\n model.hooks = schema.hooks;\n this.ModelFactory.set(schema.table, model);\n\n // this will delay the model formatting to allow multiple models to be added before formatting\n clearTimeout(this._timer);\n this._timer = setTimeout(() => {\n this.ModelFormatter.format()\n }, 5);\n return model\n }\n\n getModel(table: string): Model {\n if (!this.models.has(table)) {\n throw new XansqlError({\n message: `Model for table ${table} does not exist.`,\n model: table,\n });\n }\n return this.models.get(table) as Model;\n }\n\n async execute(sql: string): Promise<ExecuterResult> {\n sql = sql.trim().replace(/\\s+/g, ' ');\n return await this.dialect.execute(sql, this) as any\n }\n\n async getRawSchema() {\n return await this.dialect.getSchema(this);\n }\n\n async uploadFile(file: File) {\n if (!this.dialect.file?.upload) {\n throw new XansqlError(`File upload is not supported by the current dialect.`);\n }\n return await this.dialect.file.upload(file, this);\n }\n\n async deleteFile(filename: string) {\n if (!this.dialect.file?.delete) {\n throw new XansqlError(`File delete is not supported by the current dialect.`);\n }\n return await this.dialect.file.delete(filename, this);\n }\n\n async transaction(callback: () => Promise<any>) {\n return await this.XansqlTransaction.transaction(callback);\n }\n\n async migrate(force?: boolean) {\n return await this.XansqlMigration.migrate(force);\n }\n\n async generateMigration() {\n return await this.XansqlMigration.generate();\n }\n\n on<K extends keyof EventPayloads>(event: K, handler: EventHandler<K>) {\n this.EventManager.on(event, handler);\n }\n\n}\n\nclass XansqlClone extends Xansql { }\n\n\nexport default Xansql"],"names":["XansqlConfig","XansqlTransaction","ModelFormatter","XansqlMigration","EventManager","Schema","XansqlError","Model"],"mappings":"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"}
|
package/core/Xansql.d.ts
CHANGED
|
@@ -7,7 +7,6 @@ import Schema from "../model/Schema";
|
|
|
7
7
|
declare class Xansql {
|
|
8
8
|
readonly config: XansqlConfigTypeRequired;
|
|
9
9
|
readonly ModelFactory: Map<string, Model>;
|
|
10
|
-
readonly XANFETCH_CONTENT_TYPE = "application/octet-stream";
|
|
11
10
|
private _aliases;
|
|
12
11
|
private ModelFormatter;
|
|
13
12
|
private XansqlConfig;
|
package/core/Xansql.mjs
CHANGED
|
@@ -10,7 +10,6 @@ import Schema from '../model/Schema.mjs';
|
|
|
10
10
|
class Xansql {
|
|
11
11
|
constructor(config) {
|
|
12
12
|
this.ModelFactory = new Map();
|
|
13
|
-
this.XANFETCH_CONTENT_TYPE = 'application/octet-stream';
|
|
14
13
|
this._aliases = new Map();
|
|
15
14
|
this._timer = null;
|
|
16
15
|
this.XansqlConfig = new XansqlConfig(this, config);
|
package/core/Xansql.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Xansql.mjs","sources":["../../src/core/Xansql.ts"],"sourcesContent":["import Model from \"../model\";\
|
|
1
|
+
{"version":3,"file":"Xansql.mjs","sources":["../../src/core/Xansql.ts"],"sourcesContent":["import Model from \"../model\";\nimport { ExecuterResult, XansqlConfigType, XansqlConfigTypeRequired } from \"./types\";\nimport XansqlTransaction from \"./classes/XansqlTransaction\";\nimport XansqlConfig from \"./classes/XansqlConfig\";\nimport ModelFormatter from \"./classes/ModelFormatter\";\nimport XansqlMigration from \"./classes/Migration\";\nimport EventManager, { EventHandler, EventPayloads } from \"./classes/EventManager\";\nimport XansqlError from \"./XansqlError\";\nimport Schema from \"../model/Schema\";\nimport { XansqlModelHooks } from \"../model/types\";\n\nclass Xansql {\n readonly config: XansqlConfigTypeRequired;\n readonly ModelFactory = new Map<string, Model>()\n\n private _aliases = new Map<string, string>();\n private ModelFormatter: ModelFormatter;\n private XansqlConfig: XansqlConfig;\n readonly XansqlTransaction: XansqlTransaction;\n readonly EventManager: EventManager\n\n // SQL Generator Instances can be added here\n readonly XansqlMigration: XansqlMigration\n\n constructor(config: XansqlConfigType) {\n this.XansqlConfig = new XansqlConfig(this, config);\n this.config = this.XansqlConfig.parse()\n this.XansqlTransaction = new XansqlTransaction(this);\n this.ModelFormatter = new ModelFormatter(this);\n\n this.XansqlMigration = new XansqlMigration(this);\n this.EventManager = new EventManager();\n }\n\n get dialect() {\n return this.config.dialect;\n }\n\n get models() {\n return this.ModelFormatter.format()\n }\n\n clone(config?: Partial<XansqlConfigType>) {\n const self = new XansqlClone({ ...this.config, ...(config || {}) });\n for (let [table, model] of this.ModelFactory) {\n const schema = new Schema(table, model.schema)\n for (let hook in model.hooks) {\n schema.addHook(hook as any, model.hooks[hook as keyof XansqlModelHooks] as any)\n }\n self.model(schema);\n }\n return self;\n }\n\n private makeAlias(table: string) {\n let wordLength = 1;\n table = table.toLowerCase().replace(/[^a-z0-9_]/g, '_')\n let alias = table.slice(0, wordLength)\n while (true) {\n if (!this._aliases.has(alias) || wordLength > table.length) break;\n wordLength++;\n alias = table.slice(0, wordLength);\n }\n if (this._aliases.has(alias)) {\n throw new XansqlError({\n message: `Cannot create alias for table ${table}, please rename the table to avoid conflicts.`,\n model: table,\n });\n }\n this._aliases.set(table, alias);\n return alias;\n }\n\n _timer: any = null;\n model(schema: Schema): Model {\n const model = new Model(schema.table, schema.schema);\n if (!model.IDColumn) {\n throw new XansqlError({\n message: `Model ${schema.table} must have an ID column.`,\n model: schema.table,\n });\n }\n if (this.ModelFactory.has(schema.table)) {\n throw new XansqlError({\n message: `Model for table ${schema.table} already exists.`,\n model: schema.table,\n });\n }\n model.alias = this.makeAlias(schema.table);\n model.xansql = this;\n model.hooks = schema.hooks;\n this.ModelFactory.set(schema.table, model);\n\n // this will delay the model formatting to allow multiple models to be added before formatting\n clearTimeout(this._timer);\n this._timer = setTimeout(() => {\n this.ModelFormatter.format()\n }, 5);\n return model\n }\n\n getModel(table: string): Model {\n if (!this.models.has(table)) {\n throw new XansqlError({\n message: `Model for table ${table} does not exist.`,\n model: table,\n });\n }\n return this.models.get(table) as Model;\n }\n\n async execute(sql: string): Promise<ExecuterResult> {\n sql = sql.trim().replace(/\\s+/g, ' ');\n return await this.dialect.execute(sql, this) as any\n }\n\n async getRawSchema() {\n return await this.dialect.getSchema(this);\n }\n\n async uploadFile(file: File) {\n if (!this.dialect.file?.upload) {\n throw new XansqlError(`File upload is not supported by the current dialect.`);\n }\n return await this.dialect.file.upload(file, this);\n }\n\n async deleteFile(filename: string) {\n if (!this.dialect.file?.delete) {\n throw new XansqlError(`File delete is not supported by the current dialect.`);\n }\n return await this.dialect.file.delete(filename, this);\n }\n\n async transaction(callback: () => Promise<any>) {\n return await this.XansqlTransaction.transaction(callback);\n }\n\n async migrate(force?: boolean) {\n return await this.XansqlMigration.migrate(force);\n }\n\n async generateMigration() {\n return await this.XansqlMigration.generate();\n }\n\n on<K extends keyof EventPayloads>(event: K, handler: EventHandler<K>) {\n this.EventManager.on(event, handler);\n }\n\n}\n\nclass XansqlClone extends Xansql { }\n\n\nexport default Xansql"],"names":["XansqlTransaction"],"mappings":"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"}
|
package/core/XansqlError.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XansqlError.cjs","sources":["../../src/core/XansqlError.ts"],"sourcesContent":["type XanErrorOption = {\
|
|
1
|
+
{"version":3,"file":"XansqlError.cjs","sources":["../../src/core/XansqlError.ts"],"sourcesContent":["type XanErrorOption = {\n model?: string;\n column?: string;\n message: string;\n}\n\n\nclass XansqlError extends Error {\n model?: string\n column?: string\n\n constructor(opt: XanErrorOption | string) {\n let model = typeof opt === 'string' ? undefined : opt.model;\n let column = typeof opt === 'string' ? undefined : opt.column;\n let message = typeof opt === 'string' ? (opt as string) : opt.message;\n super(message);\n this.name = \"XansqlError\";\n this.model = model;\n this.column = column;\n }\n}\n\nexport default XansqlError;"],"names":[],"mappings":";;AAOA,MAAM,WAAY,SAAQ,KAAK,CAAA;AAI5B,IAAA,WAAA,CAAY,GAA4B,EAAA;AACrC,QAAA,IAAI,KAAK,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,KAAK;AAC3D,QAAA,IAAI,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM;AAC7D,QAAA,IAAI,OAAO,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAI,GAAc,GAAG,GAAG,CAAC,OAAO;QACrE,KAAK,CAAC,OAAO,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,aAAa;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACvB;AACF;;;;"}
|
package/core/XansqlError.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XansqlError.mjs","sources":["../../src/core/XansqlError.ts"],"sourcesContent":["type XanErrorOption = {\
|
|
1
|
+
{"version":3,"file":"XansqlError.mjs","sources":["../../src/core/XansqlError.ts"],"sourcesContent":["type XanErrorOption = {\n model?: string;\n column?: string;\n message: string;\n}\n\n\nclass XansqlError extends Error {\n model?: string\n column?: string\n\n constructor(opt: XanErrorOption | string) {\n let model = typeof opt === 'string' ? undefined : opt.model;\n let column = typeof opt === 'string' ? undefined : opt.column;\n let message = typeof opt === 'string' ? (opt as string) : opt.message;\n super(message);\n this.name = \"XansqlError\";\n this.model = model;\n this.column = column;\n }\n}\n\nexport default XansqlError;"],"names":[],"mappings":"AAOA,MAAM,WAAY,SAAQ,KAAK,CAAA;AAI5B,IAAA,WAAA,CAAY,GAA4B,EAAA;AACrC,QAAA,IAAI,KAAK,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,KAAK;AAC3D,QAAA,IAAI,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM;AAC7D,QAAA,IAAI,OAAO,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAI,GAAc,GAAG,GAAG,CAAC,OAAO;QACrE,KAAK,CAAC,OAAO,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,aAAa;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACvB;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventManager.cjs","sources":["../../../src/core/classes/EventManager.ts"],"sourcesContent":["import Model from \"../../model\";\
|
|
1
|
+
{"version":3,"file":"EventManager.cjs","sources":["../../../src/core/classes/EventManager.ts"],"sourcesContent":["import Model from \"../../model\";\nimport { CreateArgsType, DeleteArgsType, FindArgsType, UpdateArgsType } from \"../../model/types\";\n\ntype Result = { [key: string]: any };\n\nexport type EventPayloads = {\n BEFORE_CREATE: { model: Model; args: CreateArgsType };\n BEFORE_UPDATE: { model: Model; args: UpdateArgsType };\n BEFORE_DELETE: { model: Model; args: DeleteArgsType };\n BEFORE_FIND: { model: Model; args: FindArgsType };\n BEFORE_AGGREGATE: { model: Model; args: any };\n\n CREATE: { model: Model; results: Result[]; args: CreateArgsType };\n UPDATE: { model: Model; results: Result[], args: UpdateArgsType };\n DELETE: { model: Model; results: Result[], args: DeleteArgsType };\n FIND: { model: Model; results: Result[], args: FindArgsType };\n AGGREGATE: { model: Model; results: any; args: any };\n\n};\n\n// correct type: handler only gets its OWN event payload\nexport type EventHandler<K extends keyof EventPayloads> = (payload: EventPayloads[K]) => void | Promise<void>;\n\nclass EventManager {\n private events: {\n [K in keyof EventPayloads]?: EventHandler<K>[];\n } = {};\n\n on<K extends keyof EventPayloads>(event: K, handler: EventHandler<K>) {\n if (!this.events[event]) {\n this.events[event] = [];\n }\n this.events[event]!.push(handler);\n return this;\n }\n\n async emit<K extends keyof EventPayloads>(event: K, payload: EventPayloads[K]) {\n const handlers = this.events[event];\n if (!handlers) return this;\n for (const handler of handlers) {\n await handler(payload);\n }\n return this;\n }\n}\n\nexport default EventManager;\n"],"names":[],"mappings":";;AAuBA,MAAM,YAAY,CAAA;AAAlB,IAAA,WAAA,GAAA;QACW,IAAA,CAAA,MAAM,GAEV,EAAE;IAkBT;IAhBG,EAAE,CAAgC,KAAQ,EAAE,OAAwB,EAAA;QACjE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QAC1B;QACA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC;AACjC,QAAA,OAAO,IAAI;IACd;AAEA,IAAA,MAAM,IAAI,CAAgC,KAAQ,EAAE,OAAyB,EAAA;QAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI;AAC1B,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC7B,YAAA,MAAM,OAAO,CAAC,OAAO,CAAC;QACzB;AACA,QAAA,OAAO,IAAI;IACd;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventManager.mjs","sources":["../../../src/core/classes/EventManager.ts"],"sourcesContent":["import Model from \"../../model\";\
|
|
1
|
+
{"version":3,"file":"EventManager.mjs","sources":["../../../src/core/classes/EventManager.ts"],"sourcesContent":["import Model from \"../../model\";\nimport { CreateArgsType, DeleteArgsType, FindArgsType, UpdateArgsType } from \"../../model/types\";\n\ntype Result = { [key: string]: any };\n\nexport type EventPayloads = {\n BEFORE_CREATE: { model: Model; args: CreateArgsType };\n BEFORE_UPDATE: { model: Model; args: UpdateArgsType };\n BEFORE_DELETE: { model: Model; args: DeleteArgsType };\n BEFORE_FIND: { model: Model; args: FindArgsType };\n BEFORE_AGGREGATE: { model: Model; args: any };\n\n CREATE: { model: Model; results: Result[]; args: CreateArgsType };\n UPDATE: { model: Model; results: Result[], args: UpdateArgsType };\n DELETE: { model: Model; results: Result[], args: DeleteArgsType };\n FIND: { model: Model; results: Result[], args: FindArgsType };\n AGGREGATE: { model: Model; results: any; args: any };\n\n};\n\n// correct type: handler only gets its OWN event payload\nexport type EventHandler<K extends keyof EventPayloads> = (payload: EventPayloads[K]) => void | Promise<void>;\n\nclass EventManager {\n private events: {\n [K in keyof EventPayloads]?: EventHandler<K>[];\n } = {};\n\n on<K extends keyof EventPayloads>(event: K, handler: EventHandler<K>) {\n if (!this.events[event]) {\n this.events[event] = [];\n }\n this.events[event]!.push(handler);\n return this;\n }\n\n async emit<K extends keyof EventPayloads>(event: K, payload: EventPayloads[K]) {\n const handlers = this.events[event];\n if (!handlers) return this;\n for (const handler of handlers) {\n await handler(payload);\n }\n return this;\n }\n}\n\nexport default EventManager;\n"],"names":[],"mappings":"AAuBA,MAAM,YAAY,CAAA;AAAlB,IAAA,WAAA,GAAA;QACW,IAAA,CAAA,MAAM,GAEV,EAAE;IAkBT;IAhBG,EAAE,CAAgC,KAAQ,EAAE,OAAwB,EAAA;QACjE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QAC1B;QACA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC;AACjC,QAAA,OAAO,IAAI;IACd;AAEA,IAAA,MAAM,IAAI,CAAgC,KAAQ,EAAE,OAAyB,EAAA;QAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI;AAC1B,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC7B,YAAA,MAAM,OAAO,CAAC,OAAO,CAAC;QACzB;AACA,QAAA,OAAO,IAAI;IACd;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ForeignInfo.cjs","sources":["../../../src/core/classes/ForeignInfo.ts"],"sourcesContent":["import Model from \"../../model\";\
|
|
1
|
+
{"version":3,"file":"ForeignInfo.cjs","sources":["../../../src/core/classes/ForeignInfo.ts"],"sourcesContent":["import Model from \"../../model\";\nimport XqlArray from \"../../xt/fields/Array\";\nimport XqlSchema from \"../../xt/fields/Schema\";\nimport { XqlFields } from \"../../xt/types\";\nimport XansqlError from \"../XansqlError\";\n\n\nexport type ForeignInfoType = {\n table: string\n column: string\n relation: {\n main: string\n target: string\n }\n sql: string\n}\n/**\n * Foreign Key Class\n * @description This class is used to handle foreign key relationships between models\n * @example\n * const foreignInfo = Foreign.info(model, column);\n * console.log(foreignInfo);\n */\nclass Foreign {\n\n static is(field: XqlFields) {\n return this.isArray(field) || this.isSchema(field)\n }\n\n static isArray(field: XqlFields) {\n return field instanceof XqlArray && this.isSchema((field as any).type)\n }\n\n static isSchema(field: XqlFields) {\n return field instanceof XqlSchema\n }\n\n static get(model: Model, column: string): ForeignInfoType {\n let table = model.table\n let schema = model.schema\n let field: any = schema[column]\n\n if (this.isArray(field)) {\n const foreignType = field.type as XqlSchema;\n return {\n table: foreignType.table,\n column: foreignType.column,\n relation: {\n main: foreignType.column,\n target: model.IDColumn,\n },\n sql: `${foreignType.table}.${foreignType.column} = ${model.table}.${model.IDColumn}`\n }\n } else if (this.isSchema(field)) {\n const FModel = model.xansql.getModel(field.table)\n return {\n table: field.table,\n column: field.column,\n relation: {\n main: FModel.IDColumn,\n target: column\n },\n sql: `${field.table}.${FModel.IDColumn} = ${model.table}.${column}`\n }\n }\n throw new XansqlError({\n message: `Field ${column} in model ${model.table} is not a foreign key.`,\n model: model.table,\n });\n }\n\n}\n\nexport default Foreign"],"names":["XqlArray","XqlSchema","XansqlError"],"mappings":";;;;;;AAgBA;;;;;;AAMG;AACH,MAAM,OAAO,CAAA;IAEV,OAAO,EAAE,CAAC,KAAgB,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACrD;IAEA,OAAO,OAAO,CAAC,KAAgB,EAAA;AAC5B,QAAA,OAAO,KAAK,YAAYA,eAAQ,IAAI,IAAI,CAAC,QAAQ,CAAE,KAAa,CAAC,IAAI,CAAC;IACzE;IAEA,OAAO,QAAQ,CAAC,KAAgB,EAAA;QAC7B,OAAO,KAAK,YAAYC,gBAAS;IACpC;AAEA,IAAA,OAAO,GAAG,CAAC,KAAY,EAAE,MAAc,EAAA;AACpC,QAAY,KAAK,CAAC;AAClB,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;AACzB,QAAA,IAAI,KAAK,GAAQ,MAAM,CAAC,MAAM,CAAC;AAE/B,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,IAAiB;YAC3C,OAAO;gBACJ,KAAK,EAAE,WAAW,CAAC,KAAK;gBACxB,MAAM,EAAE,WAAW,CAAC,MAAM;AAC1B,gBAAA,QAAQ,EAAE;oBACP,IAAI,EAAE,WAAW,CAAC,MAAM;oBACxB,MAAM,EAAE,KAAK,CAAC,QAAQ;AACxB,iBAAA;AACD,gBAAA,GAAG,EAAE,CAAA,EAAG,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,MAAM,CAAA,GAAA,EAAM,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAA;aACpF;QACJ;AAAO,aAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC9B,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YACjD,OAAO;gBACJ,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;AACpB,gBAAA,QAAQ,EAAE;oBACP,IAAI,EAAE,MAAM,CAAC,QAAQ;AACrB,oBAAA,MAAM,EAAE;AACV,iBAAA;AACD,gBAAA,GAAG,EAAE,CAAA,EAAG,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAC,QAAQ,MAAM,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA;aACnE;QACJ;QACA,MAAM,IAAIC,gBAAW,CAAC;AACnB,YAAA,OAAO,EAAE,CAAA,MAAA,EAAS,MAAM,aAAa,KAAK,CAAC,KAAK,CAAA,sBAAA,CAAwB;YACxE,KAAK,EAAE,KAAK,CAAC,KAAK;AACpB,SAAA,CAAC;IACL;AAEF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ForeignInfo.mjs","sources":["../../../src/core/classes/ForeignInfo.ts"],"sourcesContent":["import Model from \"../../model\";\
|
|
1
|
+
{"version":3,"file":"ForeignInfo.mjs","sources":["../../../src/core/classes/ForeignInfo.ts"],"sourcesContent":["import Model from \"../../model\";\nimport XqlArray from \"../../xt/fields/Array\";\nimport XqlSchema from \"../../xt/fields/Schema\";\nimport { XqlFields } from \"../../xt/types\";\nimport XansqlError from \"../XansqlError\";\n\n\nexport type ForeignInfoType = {\n table: string\n column: string\n relation: {\n main: string\n target: string\n }\n sql: string\n}\n/**\n * Foreign Key Class\n * @description This class is used to handle foreign key relationships between models\n * @example\n * const foreignInfo = Foreign.info(model, column);\n * console.log(foreignInfo);\n */\nclass Foreign {\n\n static is(field: XqlFields) {\n return this.isArray(field) || this.isSchema(field)\n }\n\n static isArray(field: XqlFields) {\n return field instanceof XqlArray && this.isSchema((field as any).type)\n }\n\n static isSchema(field: XqlFields) {\n return field instanceof XqlSchema\n }\n\n static get(model: Model, column: string): ForeignInfoType {\n let table = model.table\n let schema = model.schema\n let field: any = schema[column]\n\n if (this.isArray(field)) {\n const foreignType = field.type as XqlSchema;\n return {\n table: foreignType.table,\n column: foreignType.column,\n relation: {\n main: foreignType.column,\n target: model.IDColumn,\n },\n sql: `${foreignType.table}.${foreignType.column} = ${model.table}.${model.IDColumn}`\n }\n } else if (this.isSchema(field)) {\n const FModel = model.xansql.getModel(field.table)\n return {\n table: field.table,\n column: field.column,\n relation: {\n main: FModel.IDColumn,\n target: column\n },\n sql: `${field.table}.${FModel.IDColumn} = ${model.table}.${column}`\n }\n }\n throw new XansqlError({\n message: `Field ${column} in model ${model.table} is not a foreign key.`,\n model: model.table,\n });\n }\n\n}\n\nexport default Foreign"],"names":[],"mappings":";;;;AAgBA;;;;;;AAMG;AACH,MAAM,OAAO,CAAA;IAEV,OAAO,EAAE,CAAC,KAAgB,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACrD;IAEA,OAAO,OAAO,CAAC,KAAgB,EAAA;AAC5B,QAAA,OAAO,KAAK,YAAY,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAE,KAAa,CAAC,IAAI,CAAC;IACzE;IAEA,OAAO,QAAQ,CAAC,KAAgB,EAAA;QAC7B,OAAO,KAAK,YAAY,SAAS;IACpC;AAEA,IAAA,OAAO,GAAG,CAAC,KAAY,EAAE,MAAc,EAAA;AACpC,QAAY,KAAK,CAAC;AAClB,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;AACzB,QAAA,IAAI,KAAK,GAAQ,MAAM,CAAC,MAAM,CAAC;AAE/B,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,IAAiB;YAC3C,OAAO;gBACJ,KAAK,EAAE,WAAW,CAAC,KAAK;gBACxB,MAAM,EAAE,WAAW,CAAC,MAAM;AAC1B,gBAAA,QAAQ,EAAE;oBACP,IAAI,EAAE,WAAW,CAAC,MAAM;oBACxB,MAAM,EAAE,KAAK,CAAC,QAAQ;AACxB,iBAAA;AACD,gBAAA,GAAG,EAAE,CAAA,EAAG,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,MAAM,CAAA,GAAA,EAAM,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAA;aACpF;QACJ;AAAO,aAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC9B,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YACjD,OAAO;gBACJ,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;AACpB,gBAAA,QAAQ,EAAE;oBACP,IAAI,EAAE,MAAM,CAAC,QAAQ;AACrB,oBAAA,MAAM,EAAE;AACV,iBAAA;AACD,gBAAA,GAAG,EAAE,CAAA,EAAG,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAC,QAAQ,MAAM,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA;aACnE;QACJ;QACA,MAAM,IAAI,WAAW,CAAC;AACnB,YAAA,OAAO,EAAE,CAAA,MAAA,EAAS,MAAM,aAAa,KAAK,CAAC,KAAK,CAAA,sBAAA,CAAwB;YACxE,KAAK,EAAE,KAAK,CAAC,KAAK;AACpB,SAAA,CAAC;IACL;AAEF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ForeingMigration.cjs","sources":["../../../../src/core/classes/Migration/ForeingMigration.ts"],"sourcesContent":["import { quote } from \"../../../utils\";\
|
|
1
|
+
{"version":3,"file":"ForeingMigration.cjs","sources":["../../../../src/core/classes/Migration/ForeingMigration.ts"],"sourcesContent":["import { quote } from \"../../../utils\";\nimport Foreign from \"../ForeignInfo\";\nimport Xansql from \"../../Xansql\";\n\n\nclass ForeignKeyMigration {\n xansql: Xansql;\n\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n }\n\n identifier(table: string, column: string) {\n return `fk_${table}_${column}`;\n }\n\n foreigns() {\n const models = this.xansql.models;\n let statements: string[] = [];\n\n for (const model of models.values()) {\n const schema = model?.schema || {};\n for (const column in schema) {\n const field = schema[column];\n if (Foreign.isSchema(field)) {\n const fkSql = this.buildCreate(model.table, column);\n statements.push(fkSql);\n }\n }\n }\n\n return statements;\n }\n\n buildCreate(table: string, column: string, refTable: string = '', refColumn: string = '') {\n const engine = this.xansql.config.dialect.engine;\n const model = this.xansql.models.get(table);\n const schema = model?.schema || {};\n const field = schema[column];\n const meta = field.meta || {};\n const isOptional = meta.nullable || meta.optional;\n const fk = this.identifier(table, column);\n\n let sql = `CONSTRAINT ${fk} FOREIGN KEY (${quote(engine, column)}) REFERENCES ${quote(engine, refTable)}(${quote(engine, refColumn)})`;\n if (isOptional) {\n sql += ` ON DELETE SET NULL ON UPDATE CASCADE`;\n } else {\n sql += ` ON DELETE CASCADE ON UPDATE CASCADE`;\n }\n\n return sql;\n }\n\n buildDrop(table: string, column: string) {\n const engine = this.xansql.config.dialect.engine;\n const fkName = this.identifier(table, column);\n let sql = '';\n if (engine === 'postgresql' || engine === 'sqlite') {\n sql += `ALTER TABLE ${table} DROP CONSTRAINT IF EXISTS ${fkName};`;\n } else {\n sql += `ALTER TABLE ${table} DROP FOREIGN KEY IF EXISTS ${fkName};`;\n }\n return sql;\n }\n}\n\nexport default ForeignKeyMigration;"],"names":["Foreign","quote"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ForeingMigration.mjs","sources":["../../../../src/core/classes/Migration/ForeingMigration.ts"],"sourcesContent":["import { quote } from \"../../../utils\";\
|
|
1
|
+
{"version":3,"file":"ForeingMigration.mjs","sources":["../../../../src/core/classes/Migration/ForeingMigration.ts"],"sourcesContent":["import { quote } from \"../../../utils\";\nimport Foreign from \"../ForeignInfo\";\nimport Xansql from \"../../Xansql\";\n\n\nclass ForeignKeyMigration {\n xansql: Xansql;\n\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n }\n\n identifier(table: string, column: string) {\n return `fk_${table}_${column}`;\n }\n\n foreigns() {\n const models = this.xansql.models;\n let statements: string[] = [];\n\n for (const model of models.values()) {\n const schema = model?.schema || {};\n for (const column in schema) {\n const field = schema[column];\n if (Foreign.isSchema(field)) {\n const fkSql = this.buildCreate(model.table, column);\n statements.push(fkSql);\n }\n }\n }\n\n return statements;\n }\n\n buildCreate(table: string, column: string, refTable: string = '', refColumn: string = '') {\n const engine = this.xansql.config.dialect.engine;\n const model = this.xansql.models.get(table);\n const schema = model?.schema || {};\n const field = schema[column];\n const meta = field.meta || {};\n const isOptional = meta.nullable || meta.optional;\n const fk = this.identifier(table, column);\n\n let sql = `CONSTRAINT ${fk} FOREIGN KEY (${quote(engine, column)}) REFERENCES ${quote(engine, refTable)}(${quote(engine, refColumn)})`;\n if (isOptional) {\n sql += ` ON DELETE SET NULL ON UPDATE CASCADE`;\n } else {\n sql += ` ON DELETE CASCADE ON UPDATE CASCADE`;\n }\n\n return sql;\n }\n\n buildDrop(table: string, column: string) {\n const engine = this.xansql.config.dialect.engine;\n const fkName = this.identifier(table, column);\n let sql = '';\n if (engine === 'postgresql' || engine === 'sqlite') {\n sql += `ALTER TABLE ${table} DROP CONSTRAINT IF EXISTS ${fkName};`;\n } else {\n sql += `ALTER TABLE ${table} DROP FOREIGN KEY IF EXISTS ${fkName};`;\n }\n return sql;\n }\n}\n\nexport default ForeignKeyMigration;"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndexMigration.cjs","sources":["../../../../src/core/classes/Migration/IndexMigration.ts"],"sourcesContent":["import { quote } from \"../../../utils\";\
|
|
1
|
+
{"version":3,"file":"IndexMigration.cjs","sources":["../../../../src/core/classes/Migration/IndexMigration.ts"],"sourcesContent":["import { quote } from \"../../../utils\";\nimport Xansql from \"../../Xansql\";\n\n\nclass IndexMigration {\n xansql: Xansql;\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n }\n\n identifier(table: string, column: string) {\n const model = this.xansql.models.get(table);\n const field = model?.schema[column];\n const meta = field?.meta || {};\n return `${table}_${column}${meta.unique ? '_unique_index' : '_index'}`;\n }\n\n indexes() {\n const models = this.xansql.models;\n let statements: string[] = [];\n\n for (const model of models.values()) {\n const schema = model?.schema || {};\n for (const column in schema) {\n const field = schema[column];\n const meta = field.meta || {};\n if (meta.index) {\n const indexSql = this.buildCreate(model.table, column);\n statements.push(indexSql);\n }\n }\n }\n\n return statements\n }\n\n buildCreate(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 unique = meta.unique ? 'UNIQUE' : '';\n const indexName = this.identifier(table, column);\n let sql = `CREATE ${unique} INDEX ${indexName} ON ${quote(engine, table)} (${quote(engine, column)});`\n return sql;\n }\n\n buildDrop(table: string, column: string) {\n const engine = this.xansql.config.dialect.engine;\n const indexName = this.identifier(table, column);\n let sql = '';\n if (engine === 'postgresql' || engine === 'sqlite') {\n sql += `DROP INDEX IF EXISTS ${indexName};`;\n } else {\n sql += `DROP INDEX IF EXISTS ${indexName} ON ${table};`;\n }\n return sql;\n }\n}\n\nexport default IndexMigration;"],"names":["quote"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndexMigration.mjs","sources":["../../../../src/core/classes/Migration/IndexMigration.ts"],"sourcesContent":["import { quote } from \"../../../utils\";\
|
|
1
|
+
{"version":3,"file":"IndexMigration.mjs","sources":["../../../../src/core/classes/Migration/IndexMigration.ts"],"sourcesContent":["import { quote } from \"../../../utils\";\nimport Xansql from \"../../Xansql\";\n\n\nclass IndexMigration {\n xansql: Xansql;\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n }\n\n identifier(table: string, column: string) {\n const model = this.xansql.models.get(table);\n const field = model?.schema[column];\n const meta = field?.meta || {};\n return `${table}_${column}${meta.unique ? '_unique_index' : '_index'}`;\n }\n\n indexes() {\n const models = this.xansql.models;\n let statements: string[] = [];\n\n for (const model of models.values()) {\n const schema = model?.schema || {};\n for (const column in schema) {\n const field = schema[column];\n const meta = field.meta || {};\n if (meta.index) {\n const indexSql = this.buildCreate(model.table, column);\n statements.push(indexSql);\n }\n }\n }\n\n return statements\n }\n\n buildCreate(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 unique = meta.unique ? 'UNIQUE' : '';\n const indexName = this.identifier(table, column);\n let sql = `CREATE ${unique} INDEX ${indexName} ON ${quote(engine, table)} (${quote(engine, column)});`\n return sql;\n }\n\n buildDrop(table: string, column: string) {\n const engine = this.xansql.config.dialect.engine;\n const indexName = this.identifier(table, column);\n let sql = '';\n if (engine === 'postgresql' || engine === 'sqlite') {\n sql += `DROP INDEX IF EXISTS ${indexName};`;\n } else {\n sql += `DROP INDEX IF EXISTS ${indexName} ON ${table};`;\n }\n return sql;\n }\n}\n\nexport default IndexMigration;"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableMigration.cjs","sources":["../../../../src/core/classes/Migration/TableMigration.ts"],"sourcesContent":["import Model from \"../../../model\";\r\nimport XqlArray from \"../../../xt/fields/Array\";\r\nimport XqlBoolean from \"../../../xt/fields/Boolean\";\r\nimport XqlDate from \"../../../xt/fields/Date\";\r\nimport XqlEnum from \"../../../xt/fields/Enum\";\r\nimport XqlFile from \"../../../xt/fields/File\";\r\nimport XqlIDField from \"../../../xt/fields/IDField\";\r\nimport XqlNumber from \"../../../xt/fields/Number\";\r\nimport XqlObject from \"../../../xt/fields/Object\";\r\nimport XqlRecord from \"../../../xt/fields/Record\";\r\nimport XqlSchema from \"../../../xt/fields/Schema\";\r\nimport XqlString from \"../../../xt/fields/String\";\r\nimport XqlTuple from \"../../../xt/fields/Tuple\";\r\nimport XqlUnion from \"../../../xt/fields/Union\";\r\nimport { quote } from \"../../../utils\";\r\nimport Xansql from \"../../Xansql\";\r\nimport XansqlError from \"../../XansqlError\";\r\nimport Foreign from \"../ForeignInfo\";\r\nimport ForeignKeyMigration from \"./ForeingMigration\";\r\nimport IndexMigration from \"./IndexMigration\";\r\n\r\nclass Migration {\r\n xansql: Xansql;\r\n readonly ForeignKeyMigration: ForeignKeyMigration\r\n readonly IndexMigration: IndexMigration\r\n constructor(xansql: Xansql) {\r\n this.xansql = xansql;\r\n this.ForeignKeyMigration = new ForeignKeyMigration(xansql);\r\n this.IndexMigration = new IndexMigration(xansql);\r\n }\r\n\r\n statements() {\r\n const engine = this.xansql.config.dialect.engine;\r\n const models = this.xansql.models;\r\n\r\n const options: string[] = []\r\n const tables: ({ table: string, sql: string })[] = [];\r\n const indexes: ({ table: string, sql: string })[] = [];\r\n\r\n if (engine === 'sqlite') {\r\n options.push(`PRAGMA foreign_keys = ON;`);\r\n options.push(`PRAGMA journal_mode = WAL;`);\r\n options.push(`PRAGMA wal_autocheckpoint = 1000;`);\r\n options.push(`PRAGMA synchronous = NORMAL;`);\r\n } else if (engine === 'postgresql') {\r\n options.push(`SET client_min_messages TO WARNING;`);\r\n options.push(`SET standard_conforming_strings = ON;`);\r\n } else if (engine === 'mysql') {\r\n options.push(`SET sql_mode = 'STRICT_ALL_TABLES';`);\r\n options.push(`SET FOREIGN_KEY_CHECKS = 1;`);\r\n options.push(`SET sql_safe_updates = 1;`);\r\n }\r\n\r\n for (const table of models.keys()) {\r\n const model = models.get(table);\r\n const { sql, indexes: modelIndexes } = this.buildCreate(model!);\r\n indexes.push(...modelIndexes);\r\n tables.push({\r\n table,\r\n sql\r\n });\r\n }\r\n\r\n return {\r\n options,\r\n tables,\r\n indexes\r\n }\r\n }\r\n\r\n buildCreate(model: Model) {\r\n const engine = this.xansql.config.dialect.engine;\r\n let indexes: ({ table: string, sql: string })[] = [];\r\n const table = model.table;\r\n const schema = model?.schema || {};\r\n let sqls: string[] = [];\r\n\r\n for (const column in schema) {\r\n const field = schema[column];\r\n const meta = field.meta || {};\r\n const sql = this.buildColumn(table, column);\r\n sql && sqls.push(sql);\r\n\r\n if (Foreign.isSchema(field)) {\r\n const info = Foreign.get(model!, column)\r\n const fk = this.ForeignKeyMigration.buildCreate(table, column, info.table, info.relation.main);\r\n if (fk) {\r\n sqls.push(fk);\r\n }\r\n }\r\n\r\n if (meta.index && !meta.unique) {\r\n const indexSql = this.IndexMigration.buildCreate(table, column);\r\n indexes.push({ table, sql: indexSql });\r\n }\r\n }\r\n\r\n let sql = `CREATE TABLE IF NOT EXISTS ${quote(engine, table)} (${sqls.join(',')})`;\r\n if (engine === 'mysql') {\r\n sql += ` ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`;\r\n } else {\r\n sql += ` ;`;\r\n }\r\n\r\n return {\r\n sql,\r\n indexes\r\n }\r\n }\r\n\r\n buildDrop(model: any) {\r\n const engine = this.xansql.config.dialect.engine;\r\n const table = model.table;\r\n let sql = `DROP TABLE IF EXISTS ${quote(engine, table)};`;\r\n return sql;\r\n }\r\n\r\n buildColumn(table: string, column: string) {\r\n const engine = this.xansql.config.dialect.engine;\r\n const model = this.xansql.models.get(table);\r\n const field = model?.schema[column];\r\n const meta = field?.meta || {};\r\n const nullable = meta.nullable || meta.optional ? 'NULL' : 'NOT NULL';\r\n const unique = meta.unique ? 'UNIQUE' : '';\r\n const col = (column: string, sqlType: string) => {\r\n return ` ${quote(engine, column)} ${sqlType} ${nullable} ${unique}`.trim()\r\n };\r\n let sql = ''\r\n if (field instanceof XqlIDField) {\r\n if (engine === 'mysql') {\r\n sql += col(column, \"INT AUTO_INCREMENT PRIMARY KEY\");\r\n } else if (engine === 'postgresql') {\r\n sql += col(column, \"SERIAL PRIMARY KEY\")\r\n } else if (engine === 'sqlite') {\r\n sql += col(column, \"INTEGER PRIMARY KEY AUTOINCREMENT\")\r\n } else if (engine === 'mssql') {\r\n sql += col(column, \"INT IDENTITY(1,1) PRIMARY KEY\")\r\n }\r\n } else if (field instanceof XqlSchema) {\r\n if (engine === 'mysql') {\r\n sql += col(column, \"INT\")\r\n } else if (engine === 'postgresql' || engine === 'sqlite') {\r\n sql += col(column, \"INTEGER\")\r\n }\r\n } else if (field instanceof XqlString) {\r\n let length = meta.length || meta.max\r\n if (meta.text || length > 65535 || engine === 'sqlite') {\r\n sql += col(column, \"TEXT\")\r\n } else {\r\n sql += col(column, `VARCHAR(${length || 255})`)\r\n }\r\n } else if (field instanceof XqlFile) {\r\n sql += col(column, \"VARCHAR(255)\")\r\n } else if (field instanceof XqlNumber) {\r\n if (engine === \"mysql\") {\r\n if (meta.integer) {\r\n sql += col(column, \"INT\")\r\n } else if (meta.float) {\r\n sql += col(column, \"FLOAT\")\r\n } else {\r\n sql += col(column, \"DECIMAL(10, 2)\")\r\n }\r\n } else if (engine === \"postgresql\" || engine === \"sqlite\") {\r\n if (meta.integer) {\r\n sql += col(column, \"INTEGER\")\r\n } else if (meta.float) {\r\n sql += col(column, \"REAL\")\r\n } else {\r\n sql += col(column, engine === \"sqlite\" ? \"NUMERIC\" : \"NUMERIC(10, 2)\")\r\n }\r\n }\r\n } else if (field instanceof XqlBoolean) {\r\n if (engine === \"mysql\" || engine === \"postgresql\") {\r\n sql += col(column, \"BOOLEAN\")\r\n } else if (engine === \"sqlite\") {\r\n sql += col(column, \"INTEGER\") // SQLite has no BOOLEAN → use INTEGER (0/1)\r\n } else if (engine === \"mssql\") {\r\n sql += col(column, \"BIT\") // MSSQL uses BIT for boolean\r\n }\r\n } else if (field instanceof XqlDate) {\r\n if (engine === \"mysql\") {\r\n sql += col(column, \"DATETIME\")\r\n } else if (engine === \"postgresql\") {\r\n sql += col(column, \"TIMESTAMP\")\r\n } else if (engine === \"sqlite\") {\r\n sql += col(column, \"TEXT\") // store ISO string (SQLite has no native DATETIME)\r\n } else if (engine === \"mssql\") {\r\n sql += col(column, \"DATETIME2\")\r\n }\r\n } else if (field instanceof XqlEnum) {\r\n if (engine === \"mysql\") {\r\n sql += col(column, `ENUM(${(field as any).values.map((v: any) => quote(engine, v)).join(', ')})`)\r\n } else if (engine === \"postgresql\") {\r\n const enumName = `${column}_enum`;\r\n sql += `CREATE TYPE ${enumName} AS ENUM (${(field as any).values.map((v: any) => quote(engine, v)).join(', ')}); `\r\n sql += col(column, enumName)\r\n } else if (engine === \"sqlite\") {\r\n const values = (field as any).values.map((v: any) => quote(engine, v)).join(\", \");\r\n sql += `\"${column}\" TEXT CHECK(\"${column}\" IN (${values})) ${nullable} ${unique}, `\r\n } else if (engine === \"mssql\") {\r\n const values = (field as any).values.map((v: any) => quote(engine, v)).join(\", \");\r\n sql += `\"${column}\" NVARCHAR(255) CHECK(\"${column}\" IN (${values})) ${nullable} ${unique}, `\r\n }\r\n } else if (field instanceof XqlObject || field instanceof XqlRecord || field instanceof XqlTuple || field instanceof XqlUnion) {\r\n sql += col(column, \"TEXT\")\r\n } else if (field instanceof XqlArray) {\r\n const arrayType = (field as any).type;\r\n const isSchemaArray = arrayType instanceof XqlSchema;\r\n if (!isSchemaArray) {\r\n sql += col(column, \"TEXT\")\r\n }\r\n } else {\r\n throw new XansqlError({\r\n message: `Unsupported field type for column \"${column}\" in table \"${table}\".`,\r\n model: table,\r\n column\r\n });\r\n }\r\n return sql;\r\n }\r\n}\r\n\r\nexport default Migration"],"names":["ForeignKeyMigration","IndexMigration","Foreign","quote","XqlIDField","XqlSchema","XqlString","XqlFile","XqlNumber","XqlBoolean","XqlDate","XqlEnum","XqlObject","XqlRecord","XqlTuple","XqlUnion","XqlArray","XansqlError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TableMigration.cjs","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 { 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 } else if (engine === 'mssql') {\n sql += col(column, \"INT IDENTITY(1,1) PRIMARY KEY\")\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 } else if (engine === \"mssql\") {\n sql += col(column, \"BIT\") // MSSQL uses BIT for boolean\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 } else if (engine === \"mssql\") {\n sql += col(column, \"DATETIME2\")\n }\n } else if (field instanceof XqlEnum) {\n if (engine === \"mysql\") {\n sql += col(column, `ENUM(${(field as any).values.map((v: any) => quote(engine, v)).join(', ')})`)\n } else if (engine === \"postgresql\") {\n const enumName = `${column}_enum`;\n sql += `CREATE TYPE ${enumName} AS ENUM (${(field as any).values.map((v: any) => quote(engine, v)).join(', ')}); `\n sql += col(column, enumName)\n } else if (engine === \"sqlite\") {\n const values = (field as any).values.map((v: any) => quote(engine, v)).join(\", \");\n sql += `\"${column}\" TEXT CHECK(\"${column}\" IN (${values})) ${nullable} ${unique}, `\n } else if (engine === \"mssql\") {\n const values = (field as any).values.map((v: any) => quote(engine, v)).join(\", \");\n sql += `\"${column}\" NVARCHAR(255) 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":["ForeignKeyMigration","IndexMigration","Foreign","quote","XqlIDField","XqlSchema","XqlString","XqlFile","XqlNumber","XqlBoolean","XqlDate","XqlEnum","XqlObject","XqlRecord","XqlTuple","XqlUnion","XqlArray","XansqlError"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableMigration.mjs","sources":["../../../../src/core/classes/Migration/TableMigration.ts"],"sourcesContent":["import Model from \"../../../model\";\r\nimport XqlArray from \"../../../xt/fields/Array\";\r\nimport XqlBoolean from \"../../../xt/fields/Boolean\";\r\nimport XqlDate from \"../../../xt/fields/Date\";\r\nimport XqlEnum from \"../../../xt/fields/Enum\";\r\nimport XqlFile from \"../../../xt/fields/File\";\r\nimport XqlIDField from \"../../../xt/fields/IDField\";\r\nimport XqlNumber from \"../../../xt/fields/Number\";\r\nimport XqlObject from \"../../../xt/fields/Object\";\r\nimport XqlRecord from \"../../../xt/fields/Record\";\r\nimport XqlSchema from \"../../../xt/fields/Schema\";\r\nimport XqlString from \"../../../xt/fields/String\";\r\nimport XqlTuple from \"../../../xt/fields/Tuple\";\r\nimport XqlUnion from \"../../../xt/fields/Union\";\r\nimport { quote } from \"../../../utils\";\r\nimport Xansql from \"../../Xansql\";\r\nimport XansqlError from \"../../XansqlError\";\r\nimport Foreign from \"../ForeignInfo\";\r\nimport ForeignKeyMigration from \"./ForeingMigration\";\r\nimport IndexMigration from \"./IndexMigration\";\r\n\r\nclass Migration {\r\n xansql: Xansql;\r\n readonly ForeignKeyMigration: ForeignKeyMigration\r\n readonly IndexMigration: IndexMigration\r\n constructor(xansql: Xansql) {\r\n this.xansql = xansql;\r\n this.ForeignKeyMigration = new ForeignKeyMigration(xansql);\r\n this.IndexMigration = new IndexMigration(xansql);\r\n }\r\n\r\n statements() {\r\n const engine = this.xansql.config.dialect.engine;\r\n const models = this.xansql.models;\r\n\r\n const options: string[] = []\r\n const tables: ({ table: string, sql: string })[] = [];\r\n const indexes: ({ table: string, sql: string })[] = [];\r\n\r\n if (engine === 'sqlite') {\r\n options.push(`PRAGMA foreign_keys = ON;`);\r\n options.push(`PRAGMA journal_mode = WAL;`);\r\n options.push(`PRAGMA wal_autocheckpoint = 1000;`);\r\n options.push(`PRAGMA synchronous = NORMAL;`);\r\n } else if (engine === 'postgresql') {\r\n options.push(`SET client_min_messages TO WARNING;`);\r\n options.push(`SET standard_conforming_strings = ON;`);\r\n } else if (engine === 'mysql') {\r\n options.push(`SET sql_mode = 'STRICT_ALL_TABLES';`);\r\n options.push(`SET FOREIGN_KEY_CHECKS = 1;`);\r\n options.push(`SET sql_safe_updates = 1;`);\r\n }\r\n\r\n for (const table of models.keys()) {\r\n const model = models.get(table);\r\n const { sql, indexes: modelIndexes } = this.buildCreate(model!);\r\n indexes.push(...modelIndexes);\r\n tables.push({\r\n table,\r\n sql\r\n });\r\n }\r\n\r\n return {\r\n options,\r\n tables,\r\n indexes\r\n }\r\n }\r\n\r\n buildCreate(model: Model) {\r\n const engine = this.xansql.config.dialect.engine;\r\n let indexes: ({ table: string, sql: string })[] = [];\r\n const table = model.table;\r\n const schema = model?.schema || {};\r\n let sqls: string[] = [];\r\n\r\n for (const column in schema) {\r\n const field = schema[column];\r\n const meta = field.meta || {};\r\n const sql = this.buildColumn(table, column);\r\n sql && sqls.push(sql);\r\n\r\n if (Foreign.isSchema(field)) {\r\n const info = Foreign.get(model!, column)\r\n const fk = this.ForeignKeyMigration.buildCreate(table, column, info.table, info.relation.main);\r\n if (fk) {\r\n sqls.push(fk);\r\n }\r\n }\r\n\r\n if (meta.index && !meta.unique) {\r\n const indexSql = this.IndexMigration.buildCreate(table, column);\r\n indexes.push({ table, sql: indexSql });\r\n }\r\n }\r\n\r\n let sql = `CREATE TABLE IF NOT EXISTS ${quote(engine, table)} (${sqls.join(',')})`;\r\n if (engine === 'mysql') {\r\n sql += ` ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`;\r\n } else {\r\n sql += ` ;`;\r\n }\r\n\r\n return {\r\n sql,\r\n indexes\r\n }\r\n }\r\n\r\n buildDrop(model: any) {\r\n const engine = this.xansql.config.dialect.engine;\r\n const table = model.table;\r\n let sql = `DROP TABLE IF EXISTS ${quote(engine, table)};`;\r\n return sql;\r\n }\r\n\r\n buildColumn(table: string, column: string) {\r\n const engine = this.xansql.config.dialect.engine;\r\n const model = this.xansql.models.get(table);\r\n const field = model?.schema[column];\r\n const meta = field?.meta || {};\r\n const nullable = meta.nullable || meta.optional ? 'NULL' : 'NOT NULL';\r\n const unique = meta.unique ? 'UNIQUE' : '';\r\n const col = (column: string, sqlType: string) => {\r\n return ` ${quote(engine, column)} ${sqlType} ${nullable} ${unique}`.trim()\r\n };\r\n let sql = ''\r\n if (field instanceof XqlIDField) {\r\n if (engine === 'mysql') {\r\n sql += col(column, \"INT AUTO_INCREMENT PRIMARY KEY\");\r\n } else if (engine === 'postgresql') {\r\n sql += col(column, \"SERIAL PRIMARY KEY\")\r\n } else if (engine === 'sqlite') {\r\n sql += col(column, \"INTEGER PRIMARY KEY AUTOINCREMENT\")\r\n } else if (engine === 'mssql') {\r\n sql += col(column, \"INT IDENTITY(1,1) PRIMARY KEY\")\r\n }\r\n } else if (field instanceof XqlSchema) {\r\n if (engine === 'mysql') {\r\n sql += col(column, \"INT\")\r\n } else if (engine === 'postgresql' || engine === 'sqlite') {\r\n sql += col(column, \"INTEGER\")\r\n }\r\n } else if (field instanceof XqlString) {\r\n let length = meta.length || meta.max\r\n if (meta.text || length > 65535 || engine === 'sqlite') {\r\n sql += col(column, \"TEXT\")\r\n } else {\r\n sql += col(column, `VARCHAR(${length || 255})`)\r\n }\r\n } else if (field instanceof XqlFile) {\r\n sql += col(column, \"VARCHAR(255)\")\r\n } else if (field instanceof XqlNumber) {\r\n if (engine === \"mysql\") {\r\n if (meta.integer) {\r\n sql += col(column, \"INT\")\r\n } else if (meta.float) {\r\n sql += col(column, \"FLOAT\")\r\n } else {\r\n sql += col(column, \"DECIMAL(10, 2)\")\r\n }\r\n } else if (engine === \"postgresql\" || engine === \"sqlite\") {\r\n if (meta.integer) {\r\n sql += col(column, \"INTEGER\")\r\n } else if (meta.float) {\r\n sql += col(column, \"REAL\")\r\n } else {\r\n sql += col(column, engine === \"sqlite\" ? \"NUMERIC\" : \"NUMERIC(10, 2)\")\r\n }\r\n }\r\n } else if (field instanceof XqlBoolean) {\r\n if (engine === \"mysql\" || engine === \"postgresql\") {\r\n sql += col(column, \"BOOLEAN\")\r\n } else if (engine === \"sqlite\") {\r\n sql += col(column, \"INTEGER\") // SQLite has no BOOLEAN → use INTEGER (0/1)\r\n } else if (engine === \"mssql\") {\r\n sql += col(column, \"BIT\") // MSSQL uses BIT for boolean\r\n }\r\n } else if (field instanceof XqlDate) {\r\n if (engine === \"mysql\") {\r\n sql += col(column, \"DATETIME\")\r\n } else if (engine === \"postgresql\") {\r\n sql += col(column, \"TIMESTAMP\")\r\n } else if (engine === \"sqlite\") {\r\n sql += col(column, \"TEXT\") // store ISO string (SQLite has no native DATETIME)\r\n } else if (engine === \"mssql\") {\r\n sql += col(column, \"DATETIME2\")\r\n }\r\n } else if (field instanceof XqlEnum) {\r\n if (engine === \"mysql\") {\r\n sql += col(column, `ENUM(${(field as any).values.map((v: any) => quote(engine, v)).join(', ')})`)\r\n } else if (engine === \"postgresql\") {\r\n const enumName = `${column}_enum`;\r\n sql += `CREATE TYPE ${enumName} AS ENUM (${(field as any).values.map((v: any) => quote(engine, v)).join(', ')}); `\r\n sql += col(column, enumName)\r\n } else if (engine === \"sqlite\") {\r\n const values = (field as any).values.map((v: any) => quote(engine, v)).join(\", \");\r\n sql += `\"${column}\" TEXT CHECK(\"${column}\" IN (${values})) ${nullable} ${unique}, `\r\n } else if (engine === \"mssql\") {\r\n const values = (field as any).values.map((v: any) => quote(engine, v)).join(\", \");\r\n sql += `\"${column}\" NVARCHAR(255) CHECK(\"${column}\" IN (${values})) ${nullable} ${unique}, `\r\n }\r\n } else if (field instanceof XqlObject || field instanceof XqlRecord || field instanceof XqlTuple || field instanceof XqlUnion) {\r\n sql += col(column, \"TEXT\")\r\n } else if (field instanceof XqlArray) {\r\n const arrayType = (field as any).type;\r\n const isSchemaArray = arrayType instanceof XqlSchema;\r\n if (!isSchemaArray) {\r\n sql += col(column, \"TEXT\")\r\n }\r\n } else {\r\n throw new XansqlError({\r\n message: `Unsupported field type for column \"${column}\" in table \"${table}\".`,\r\n model: table,\r\n column\r\n });\r\n }\r\n return sql;\r\n }\r\n}\r\n\r\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;AAAO,iBAAA,IAAI,MAAM,KAAK,OAAO,EAAE;AAC5B,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,+BAA+B,CAAC;YACtD;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;AAAO,iBAAA,IAAI,MAAM,KAAK,OAAO,EAAE;gBAC5B,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;YAC5B;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;AAAO,iBAAA,IAAI,MAAM,KAAK,OAAO,EAAE;AAC5B,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC;YAClC;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,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,CAAC;YACpG;AAAO,iBAAA,IAAI,MAAM,KAAK,YAAY,EAAE;AACjC,gBAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,MAAM,OAAO;AACjC,gBAAA,GAAG,IAAI,CAAA,YAAA,EAAe,QAAQ,CAAA,UAAA,EAAc,KAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,GAAA,CAAK;AAClH,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,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACjF,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;AAAO,iBAAA,IAAI,MAAM,KAAK,OAAO,EAAE;gBAC5B,MAAM,MAAM,GAAI,KAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACjF,gBAAA,GAAG,IAAI,CAAA,CAAA,EAAI,MAAM,CAAA,uBAAA,EAA0B,MAAM,CAAA,MAAA,EAAS,MAAM,CAAA,GAAA,EAAM,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAA,EAAA,CAAI;YAC/F;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 { 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 } else if (engine === 'mssql') {\n sql += col(column, \"INT IDENTITY(1,1) PRIMARY KEY\")\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 } else if (engine === \"mssql\") {\n sql += col(column, \"BIT\") // MSSQL uses BIT for boolean\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 } else if (engine === \"mssql\") {\n sql += col(column, \"DATETIME2\")\n }\n } else if (field instanceof XqlEnum) {\n if (engine === \"mysql\") {\n sql += col(column, `ENUM(${(field as any).values.map((v: any) => quote(engine, v)).join(', ')})`)\n } else if (engine === \"postgresql\") {\n const enumName = `${column}_enum`;\n sql += `CREATE TYPE ${enumName} AS ENUM (${(field as any).values.map((v: any) => quote(engine, v)).join(', ')}); `\n sql += col(column, enumName)\n } else if (engine === \"sqlite\") {\n const values = (field as any).values.map((v: any) => quote(engine, v)).join(\", \");\n sql += `\"${column}\" TEXT CHECK(\"${column}\" IN (${values})) ${nullable} ${unique}, `\n } else if (engine === \"mssql\") {\n const values = (field as any).values.map((v: any) => quote(engine, v)).join(\", \");\n sql += `\"${column}\" NVARCHAR(255) 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/core/classes/Migration/index.ts"],"sourcesContent":["import XqlFile from \"../../../xt/fields/File\";\r\nimport Xansql from \"../../Xansql\";\r\nimport TableMigration from \"./TableMigration\";\r\nimport Foreign from \"../ForeignInfo\";\r\nimport { XansqlDialectSchemaType } from \"../../types\";\r\nimport { quote } from \"../../../utils\";\r\nimport XqlIDField from \"../../../xt/fields/IDField\";\r\n\r\nclass XansqlMigration {\r\n readonly xansql: Xansql\r\n readonly TableMigration: TableMigration\r\n\r\n constructor(xansql: Xansql) {\r\n this.xansql = xansql;\r\n this.TableMigration = new TableMigration(xansql);\r\n }\r\n\r\n async migrate(force?: boolean) {\r\n const xansql = this.xansql;\r\n const engine = xansql.config.dialect.engine;\r\n const { options, tables, indexes } = this.TableMigration.statements();\r\n if (force) {\r\n const models = Array.from(xansql.ModelFactory.values()).reverse();\r\n\r\n for (let model of models) {\r\n const fileWhere: any[] = [];\r\n for (let column in model.schema) {\r\n const field = model.schema[column];\r\n if (field instanceof XqlFile) {\r\n fileWhere.push({ [column]: { isNotNull: true } });\r\n }\r\n }\r\n\r\n if (Object.keys(fileWhere).length > 0) {\r\n try {\r\n await model.delete({\r\n where: fileWhere,\r\n select: { [model.IDColumn]: true }\r\n });\r\n } catch (error) { }\r\n }\r\n }\r\n\r\n for (let model of models) {\r\n const dsql = this.TableMigration.buildDrop(model);\r\n await xansql.execute(dsql);\r\n }\r\n }\r\n\r\n for (let option of options) {\r\n await xansql.execute(option);\r\n }\r\n\r\n for (let { table, sql } of tables) {\r\n await xansql.execute(sql);\r\n }\r\n\r\n for (let { sql, table } of indexes) {\r\n try {\r\n await xansql.execute(sql);\r\n } catch (error) { }\r\n }\r\n\r\n if (!force) {\r\n const raw_schema: XansqlDialectSchemaType = await xansql.getRawSchema() as any\r\n\r\n for (let { table } of tables) {\r\n const model = xansql.getModel(table);\r\n const model_columns = model.schema;\r\n const raw_columns = raw_schema[table] || [];\r\n\r\n for (let column in model_columns) {\r\n if (model_columns[column] instanceof XqlIDField) continue;\r\n const has_column = raw_columns.find((rc: any) => rc.name === column);\r\n if (!has_column && !Foreign.isArray(model_columns[column])) {\r\n const buildColumn = this.TableMigration.buildColumn(table, column);\r\n const sql = `ALTER TABLE ${quote(engine, table)} ADD COLUMN ${buildColumn};`;\r\n await xansql.execute(sql);\r\n }\r\n }\r\n\r\n for (let rc of raw_columns) {\r\n if (!(rc.name in model_columns)) {\r\n const sql = `ALTER TABLE ${quote(engine, table)} DROP COLUMN ${quote(engine, rc.name)};`;\r\n await xansql.execute(sql);\r\n }\r\n }\r\n\r\n for (let column in model_columns) {\r\n if (model_columns[column] instanceof XqlIDField || Foreign.isArray(model_columns[column])) continue;\r\n\r\n const has_column = raw_columns.find((rc: any) => rc.name === column);\r\n if (has_column) {\r\n const buildColumnSql = this.TableMigration.buildColumn(table, column).split(' ').slice(1).join(' ');\r\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();\r\n if (buildColumnSql !== raw_column_sql) {\r\n\r\n const buildColumn = this.TableMigration.buildColumn(table, column);\r\n const sql = `ALTER TABLE ${quote(engine, table)} ALTER COLUMN ${buildColumn};`;\r\n await xansql.execute(sql);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n async generate() {\r\n const xansql = this.xansql;\r\n const models = Array.from(xansql.ModelFactory.values());\r\n const raw_schema: XansqlDialectSchemaType = await xansql.getRawSchema() as any\r\n const tables = Object.keys(raw_schema);\r\n const migration_sql: string[] = [];\r\n\r\n for (let model of models) {\r\n if (!tables.includes(model.table)) {\r\n const { sql } = this.TableMigration.buildCreate(model);\r\n migration_sql.push(sql);\r\n } else {\r\n const model_columns = model.schema;\r\n const raw_columns = raw_schema[model.table] || [];\r\n\r\n for (let column in model_columns) {\r\n if (model_columns[column] instanceof XqlIDField) continue;\r\n const has_column = raw_columns.find((rc: any) => rc.name === column);\r\n if (!has_column && !Foreign.isArray(model_columns[column])) {\r\n const buildColumn = this.TableMigration.buildColumn(model.table, column);\r\n const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} ADD COLUMN ${buildColumn};`;\r\n migration_sql.push(sql);\r\n }\r\n }\r\n\r\n for (let rc of raw_columns) {\r\n if (!(rc.name in model_columns)) {\r\n const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} DROP COLUMN ${quote(xansql.config.dialect.engine, rc.name)};`;\r\n migration_sql.push(sql);\r\n }\r\n }\r\n\r\n for (let column in model_columns) {\r\n if (model_columns[column] instanceof XqlIDField || Foreign.isArray(model_columns[column])) continue;\r\n\r\n const has_column = raw_columns.find((rc: any) => rc.name === column);\r\n if (has_column) {\r\n const buildColumnSql = this.TableMigration.buildColumn(model.table, column).split(' ').slice(1).join(' ');\r\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();\r\n if (buildColumnSql !== raw_column_sql) {\r\n const buildColumn = this.TableMigration.buildColumn(model.table, column);\r\n const sql = `ALTER TABLE ${quote(xansql.config.dialect.engine, model.table)} ALTER COLUMN ${buildColumn};`;\r\n migration_sql.push(sql);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return migration_sql;\r\n\r\n }\r\n}\r\n\r\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 { 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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"}
|