xansql 1.0.7 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/Xansql.cjs +7 -8
- package/core/Xansql.cjs.map +1 -1
- package/core/Xansql.d.ts +2 -3
- package/core/Xansql.mjs +7 -8
- package/core/Xansql.mjs.map +1 -1
- package/core/classes/ForeignInfo.cjs +3 -2
- package/core/classes/ForeignInfo.cjs.map +1 -1
- package/core/classes/ForeignInfo.d.ts +1 -2
- package/core/classes/ForeignInfo.mjs +3 -2
- package/core/classes/ForeignInfo.mjs.map +1 -1
- package/core/classes/Migration/TableMigration.cjs +24 -15
- package/core/classes/Migration/TableMigration.cjs.map +1 -1
- package/core/classes/Migration/TableMigration.mjs +25 -16
- package/core/classes/Migration/TableMigration.mjs.map +1 -1
- package/core/classes/Migration/index.cjs +13 -10
- package/core/classes/Migration/index.cjs.map +1 -1
- package/core/classes/Migration/index.mjs +14 -11
- package/core/classes/Migration/index.mjs.map +1 -1
- package/core/classes/{ModelFormatter.cjs → ModelFactory.cjs} +82 -56
- package/core/classes/ModelFactory.cjs.map +1 -0
- package/core/classes/{ModelFormatter.d.ts → ModelFactory.d.ts} +7 -2
- package/core/classes/{ModelFormatter.mjs → ModelFactory.mjs} +82 -56
- package/core/classes/ModelFactory.mjs.map +1 -0
- package/core/types.d.ts +1 -1
- package/dialect/MysqlDialect.cjs +7 -4
- package/dialect/MysqlDialect.cjs.map +1 -1
- package/dialect/MysqlDialect.d.ts +7 -4
- package/dialect/MysqlDialect.mjs +7 -4
- package/dialect/MysqlDialect.mjs.map +1 -1
- package/dialect/PostgresDialect.cjs +5 -2
- package/dialect/PostgresDialect.cjs.map +1 -1
- package/dialect/PostgresDialect.d.ts +5 -2
- package/dialect/PostgresDialect.mjs +5 -2
- package/dialect/PostgresDialect.mjs.map +1 -1
- package/dialect/SqliteDialect.cjs +3 -2
- package/dialect/SqliteDialect.cjs.map +1 -1
- package/dialect/SqliteDialect.d.ts +3 -2
- package/dialect/SqliteDialect.mjs +3 -2
- package/dialect/SqliteDialect.mjs.map +1 -1
- package/dialect/XansqlBridge/XansqlBridgeServer.cjs.map +1 -1
- package/dialect/XansqlBridge/XansqlBridgeServer.mjs.map +1 -1
- package/dialect/XansqlBridge/base.cjs +10 -5
- package/dialect/XansqlBridge/base.cjs.map +1 -1
- package/dialect/XansqlBridge/base.mjs +10 -5
- package/dialect/XansqlBridge/base.mjs.map +1 -1
- package/model/Args/WhereArgs.cjs +5 -8
- package/model/Args/WhereArgs.cjs.map +1 -1
- package/model/Args/WhereArgs.mjs +6 -9
- package/model/Args/WhereArgs.mjs.map +1 -1
- package/model/Base.cjs +2 -1
- package/model/Base.cjs.map +1 -1
- package/model/Base.mjs +2 -1
- package/model/Base.mjs.map +1 -1
- package/model/Executer/Aggregate/SelectArgs.cjs +2 -1
- package/model/Executer/Aggregate/SelectArgs.cjs.map +1 -1
- package/model/Executer/Aggregate/SelectArgs.mjs +2 -1
- package/model/Executer/Aggregate/SelectArgs.mjs.map +1 -1
- package/model/Executer/Aggregate/index.cjs +4 -4
- package/model/Executer/Aggregate/index.cjs.map +1 -1
- package/model/Executer/Aggregate/index.mjs +4 -4
- package/model/Executer/Aggregate/index.mjs.map +1 -1
- package/model/Executer/Create/CreateDataArgs.cjs +9 -5
- package/model/Executer/Create/CreateDataArgs.cjs.map +1 -1
- package/model/Executer/Create/CreateDataArgs.mjs +10 -6
- package/model/Executer/Create/CreateDataArgs.mjs.map +1 -1
- package/model/Executer/Create/index.cjs +1 -1
- package/model/Executer/Create/index.cjs.map +1 -1
- package/model/Executer/Create/index.mjs +1 -1
- package/model/Executer/Create/index.mjs.map +1 -1
- package/model/Executer/Delete/index.cjs +2 -1
- package/model/Executer/Delete/index.cjs.map +1 -1
- package/model/Executer/Delete/index.mjs +2 -1
- package/model/Executer/Delete/index.mjs.map +1 -1
- package/model/Executer/Find/SelectArgs.cjs +3 -3
- package/model/Executer/Find/SelectArgs.cjs.map +1 -1
- package/model/Executer/Find/SelectArgs.mjs +3 -3
- package/model/Executer/Find/SelectArgs.mjs.map +1 -1
- package/model/Executer/Update/UpdateDataArgs.cjs +4 -4
- package/model/Executer/Update/UpdateDataArgs.cjs.map +1 -1
- package/model/Executer/Update/UpdateDataArgs.mjs +5 -5
- package/model/Executer/Update/UpdateDataArgs.mjs.map +1 -1
- package/model/Executer/Update/index.cjs +1 -1
- package/model/Executer/Update/index.cjs.map +1 -1
- package/model/Executer/Update/index.mjs +1 -1
- package/model/Executer/Update/index.mjs.map +1 -1
- package/model/include/ValueFormatter.cjs +72 -17
- package/model/include/ValueFormatter.cjs.map +1 -1
- package/model/include/ValueFormatter.d.ts +1 -1
- package/model/include/ValueFormatter.mjs +72 -17
- package/model/include/ValueFormatter.mjs.map +1 -1
- package/model/index.cjs +8 -7
- package/model/index.cjs.map +1 -1
- package/model/index.mjs +8 -7
- package/model/index.mjs.map +1 -1
- package/package.json +12 -7
- package/utils/index.cjs +5 -2
- package/utils/index.cjs.map +1 -1
- package/utils/index.d.ts +2 -1
- package/utils/index.mjs +5 -3
- package/utils/index.mjs.map +1 -1
- package/xt/additional/IP.cjs +22 -0
- package/xt/additional/IP.cjs.map +1 -0
- package/xt/additional/IP.d.ts +6 -0
- package/xt/additional/IP.mjs +20 -0
- package/xt/additional/IP.mjs.map +1 -0
- package/xt/additional/Name.cjs +21 -0
- package/xt/additional/Name.cjs.map +1 -0
- package/xt/additional/Name.d.ts +6 -0
- package/xt/additional/Name.mjs +19 -0
- package/xt/additional/Name.mjs.map +1 -0
- package/xt/additional/Password.cjs +25 -0
- package/xt/additional/Password.cjs.map +1 -0
- package/xt/additional/Password.d.ts +6 -0
- package/xt/additional/Password.mjs +23 -0
- package/xt/additional/Password.mjs.map +1 -0
- package/xt/additional/Phone.cjs +21 -0
- package/xt/additional/Phone.cjs.map +1 -0
- package/xt/additional/Phone.d.ts +6 -0
- package/xt/additional/Phone.mjs +19 -0
- package/xt/additional/Phone.mjs.map +1 -0
- package/xt/additional/Photo.cjs +21 -0
- package/xt/additional/Photo.cjs.map +1 -0
- package/xt/additional/Photo.d.ts +6 -0
- package/xt/additional/Photo.mjs +19 -0
- package/xt/additional/Photo.mjs.map +1 -0
- package/xt/additional/Slug.cjs +21 -0
- package/xt/additional/Slug.cjs.map +1 -0
- package/xt/additional/Slug.d.ts +6 -0
- package/xt/additional/Slug.mjs +19 -0
- package/xt/additional/Slug.mjs.map +1 -0
- package/xt/additional/Url.cjs +26 -0
- package/xt/additional/Url.cjs.map +1 -0
- package/xt/additional/Url.d.ts +6 -0
- package/xt/additional/Url.mjs +24 -0
- package/xt/additional/Url.mjs.map +1 -0
- package/xt/additional/Username.cjs +21 -0
- package/xt/additional/Username.cjs.map +1 -0
- package/xt/additional/Username.d.ts +6 -0
- package/xt/additional/Username.mjs +19 -0
- package/xt/additional/Username.mjs.map +1 -0
- package/xt/fields/Array.cjs +9 -2
- package/xt/fields/Array.cjs.map +1 -1
- package/xt/fields/Array.d.ts +2 -0
- package/xt/fields/Array.mjs +9 -2
- package/xt/fields/Array.mjs.map +1 -1
- package/xt/fields/Boolean.cjs +10 -5
- package/xt/fields/Boolean.cjs.map +1 -1
- package/xt/fields/Boolean.d.ts +2 -0
- package/xt/fields/Boolean.mjs +10 -5
- package/xt/fields/Boolean.mjs.map +1 -1
- package/xt/fields/Date.cjs +12 -12
- package/xt/fields/Date.cjs.map +1 -1
- package/xt/fields/Date.d.ts +2 -0
- package/xt/fields/Date.mjs +12 -12
- package/xt/fields/Date.mjs.map +1 -1
- package/xt/fields/Enum.cjs +10 -4
- package/xt/fields/Enum.cjs.map +1 -1
- package/xt/fields/Enum.d.ts +2 -0
- package/xt/fields/Enum.mjs +10 -4
- package/xt/fields/Enum.mjs.map +1 -1
- package/xt/fields/File.cjs +9 -2
- package/xt/fields/File.cjs.map +1 -1
- package/xt/fields/File.d.ts +2 -0
- package/xt/fields/File.mjs +9 -2
- package/xt/fields/File.mjs.map +1 -1
- package/xt/fields/IDField.cjs +8 -0
- package/xt/fields/IDField.cjs.map +1 -1
- package/xt/fields/IDField.d.ts +2 -0
- package/xt/fields/IDField.mjs +8 -0
- package/xt/fields/IDField.mjs.map +1 -1
- package/xt/fields/Number.cjs +10 -5
- package/xt/fields/Number.cjs.map +1 -1
- package/xt/fields/Number.d.ts +2 -0
- package/xt/fields/Number.mjs +10 -5
- package/xt/fields/Number.mjs.map +1 -1
- package/xt/fields/Object.cjs +10 -5
- package/xt/fields/Object.cjs.map +1 -1
- package/xt/fields/Object.d.ts +2 -0
- package/xt/fields/Object.mjs +10 -5
- package/xt/fields/Object.mjs.map +1 -1
- package/xt/fields/Record.cjs +10 -5
- package/xt/fields/Record.cjs.map +1 -1
- package/xt/fields/Record.d.ts +2 -0
- package/xt/fields/Record.mjs +10 -5
- package/xt/fields/Record.mjs.map +1 -1
- package/xt/fields/Schema.cjs +12 -1
- package/xt/fields/Schema.cjs.map +1 -1
- package/xt/fields/Schema.d.ts +4 -1
- package/xt/fields/Schema.mjs +12 -1
- package/xt/fields/Schema.mjs.map +1 -1
- package/xt/fields/String.cjs +12 -9
- package/xt/fields/String.cjs.map +1 -1
- package/xt/fields/String.d.ts +2 -0
- package/xt/fields/String.mjs +12 -9
- package/xt/fields/String.mjs.map +1 -1
- package/xt/fields/Tuple.cjs +10 -5
- package/xt/fields/Tuple.cjs.map +1 -1
- package/xt/fields/Tuple.d.ts +2 -0
- package/xt/fields/Tuple.mjs +10 -5
- package/xt/fields/Tuple.mjs.map +1 -1
- package/xt/fields/Union.cjs +10 -5
- package/xt/fields/Union.cjs.map +1 -1
- package/xt/fields/Union.d.ts +2 -0
- package/xt/fields/Union.mjs +10 -5
- package/xt/fields/Union.mjs.map +1 -1
- package/xt/index.cjs +17 -101
- package/xt/index.cjs.map +1 -1
- package/xt/index.d.ts +16 -9
- package/xt/index.mjs +17 -101
- package/xt/index.mjs.map +1 -1
- package/core/classes/ModelFormatter.cjs.map +0 -1
- package/core/classes/ModelFormatter.mjs.map +0 -1
package/core/Xansql.cjs
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var model_index = require('../model/index.cjs');
|
|
4
4
|
var core_classes_XansqlTransaction = require('./classes/XansqlTransaction.cjs');
|
|
5
5
|
var core_classes_XansqlConfig = require('./classes/XansqlConfig.cjs');
|
|
6
|
-
var
|
|
6
|
+
var core_classes_ModelFactory = require('./classes/ModelFactory.cjs');
|
|
7
7
|
var core_classes_Migration_index = require('./classes/Migration/index.cjs');
|
|
8
8
|
var core_classes_EventManager = require('./classes/EventManager.cjs');
|
|
9
9
|
var core_XansqlError = require('./XansqlError.cjs');
|
|
@@ -11,13 +11,12 @@ var model_Schema = require('../model/Schema.cjs');
|
|
|
11
11
|
|
|
12
12
|
class Xansql {
|
|
13
13
|
constructor(config) {
|
|
14
|
-
this.ModelFactory = new Map();
|
|
15
14
|
this._aliases = new Map();
|
|
16
15
|
this._timer = null;
|
|
17
16
|
this.XansqlConfig = new core_classes_XansqlConfig(this, config);
|
|
18
17
|
this.config = this.XansqlConfig.parse();
|
|
19
18
|
this.XansqlTransaction = new core_classes_XansqlTransaction(this);
|
|
20
|
-
this.
|
|
19
|
+
this.ModelFactory = new core_classes_ModelFactory(this);
|
|
21
20
|
this.XansqlMigration = new core_classes_Migration_index(this);
|
|
22
21
|
this.EventManager = new core_classes_EventManager();
|
|
23
22
|
}
|
|
@@ -25,11 +24,11 @@ class Xansql {
|
|
|
25
24
|
return this.config.dialect;
|
|
26
25
|
}
|
|
27
26
|
get models() {
|
|
28
|
-
return this.
|
|
27
|
+
return this.ModelFactory.models;
|
|
29
28
|
}
|
|
30
29
|
clone(config) {
|
|
31
30
|
const self = new XansqlClone(Object.assign(Object.assign({}, this.config), (config || {})));
|
|
32
|
-
for (let [table, model] of this.
|
|
31
|
+
for (let [table, model] of this.models) {
|
|
33
32
|
const schema = new model_Schema(table, model.schema);
|
|
34
33
|
for (let hook in model.hooks) {
|
|
35
34
|
schema.addHook(hook, model.hooks[hook]);
|
|
@@ -65,7 +64,7 @@ class Xansql {
|
|
|
65
64
|
model: schema.table,
|
|
66
65
|
});
|
|
67
66
|
}
|
|
68
|
-
if (this.ModelFactory.has(schema.table)) {
|
|
67
|
+
if (this.ModelFactory.models.has(schema.table)) {
|
|
69
68
|
throw new core_XansqlError({
|
|
70
69
|
message: `Model for table ${schema.table} already exists.`,
|
|
71
70
|
model: schema.table,
|
|
@@ -74,11 +73,11 @@ class Xansql {
|
|
|
74
73
|
model.alias = this.makeAlias(schema.table);
|
|
75
74
|
model.xansql = this;
|
|
76
75
|
model.hooks = schema.hooks;
|
|
77
|
-
this.ModelFactory.set(schema.table, model);
|
|
76
|
+
this.ModelFactory.models.set(schema.table, model);
|
|
78
77
|
// this will delay the model formatting to allow multiple models to be added before formatting
|
|
79
78
|
clearTimeout(this._timer);
|
|
80
79
|
this._timer = setTimeout(() => {
|
|
81
|
-
this.
|
|
80
|
+
this.ModelFactory.format();
|
|
82
81
|
}, 5);
|
|
83
82
|
return model;
|
|
84
83
|
}
|
package/core/Xansql.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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
|
|
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 ModelFactory from \"./classes/ModelFactory\";\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 private _aliases = new Map<string, string>();\n private ModelFactory: ModelFactory;\n private XansqlConfig: XansqlConfig;\n readonly config: XansqlConfigTypeRequired;\n readonly XansqlTransaction: XansqlTransaction;\n readonly EventManager: EventManager\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.ModelFactory = new ModelFactory(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.ModelFactory.models\n }\n\n clone(config?: Partial<XansqlConfigType>) {\n const self = new XansqlClone({ ...this.config, ...(config || {}) });\n for (let [table, model] of this.models) {\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.models.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.models.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.ModelFactory.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","ModelFactory","XansqlMigration","EventManager","Schema","XansqlError","Model"],"mappings":"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"}
|
package/core/Xansql.d.ts
CHANGED
|
@@ -5,11 +5,10 @@ import XansqlMigration from "./classes/Migration";
|
|
|
5
5
|
import EventManager, { EventHandler, EventPayloads } from "./classes/EventManager";
|
|
6
6
|
import Schema from "../model/Schema";
|
|
7
7
|
declare class Xansql {
|
|
8
|
-
readonly config: XansqlConfigTypeRequired;
|
|
9
|
-
readonly ModelFactory: Map<string, Model>;
|
|
10
8
|
private _aliases;
|
|
11
|
-
private
|
|
9
|
+
private ModelFactory;
|
|
12
10
|
private XansqlConfig;
|
|
11
|
+
readonly config: XansqlConfigTypeRequired;
|
|
13
12
|
readonly XansqlTransaction: XansqlTransaction;
|
|
14
13
|
readonly EventManager: EventManager;
|
|
15
14
|
readonly XansqlMigration: XansqlMigration;
|
package/core/Xansql.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import Model from '../model/index.mjs';
|
|
2
2
|
import XansqlTransection from './classes/XansqlTransaction.mjs';
|
|
3
3
|
import XansqlConfig from './classes/XansqlConfig.mjs';
|
|
4
|
-
import
|
|
4
|
+
import ModelFactgory from './classes/ModelFactory.mjs';
|
|
5
5
|
import XansqlMigration from './classes/Migration/index.mjs';
|
|
6
6
|
import EventManager from './classes/EventManager.mjs';
|
|
7
7
|
import XansqlError from './XansqlError.mjs';
|
|
@@ -9,13 +9,12 @@ import Schema from '../model/Schema.mjs';
|
|
|
9
9
|
|
|
10
10
|
class Xansql {
|
|
11
11
|
constructor(config) {
|
|
12
|
-
this.ModelFactory = new Map();
|
|
13
12
|
this._aliases = new Map();
|
|
14
13
|
this._timer = null;
|
|
15
14
|
this.XansqlConfig = new XansqlConfig(this, config);
|
|
16
15
|
this.config = this.XansqlConfig.parse();
|
|
17
16
|
this.XansqlTransaction = new XansqlTransection(this);
|
|
18
|
-
this.
|
|
17
|
+
this.ModelFactory = new ModelFactgory(this);
|
|
19
18
|
this.XansqlMigration = new XansqlMigration(this);
|
|
20
19
|
this.EventManager = new EventManager();
|
|
21
20
|
}
|
|
@@ -23,11 +22,11 @@ class Xansql {
|
|
|
23
22
|
return this.config.dialect;
|
|
24
23
|
}
|
|
25
24
|
get models() {
|
|
26
|
-
return this.
|
|
25
|
+
return this.ModelFactory.models;
|
|
27
26
|
}
|
|
28
27
|
clone(config) {
|
|
29
28
|
const self = new XansqlClone(Object.assign(Object.assign({}, this.config), (config || {})));
|
|
30
|
-
for (let [table, model] of this.
|
|
29
|
+
for (let [table, model] of this.models) {
|
|
31
30
|
const schema = new Schema(table, model.schema);
|
|
32
31
|
for (let hook in model.hooks) {
|
|
33
32
|
schema.addHook(hook, model.hooks[hook]);
|
|
@@ -63,7 +62,7 @@ class Xansql {
|
|
|
63
62
|
model: schema.table,
|
|
64
63
|
});
|
|
65
64
|
}
|
|
66
|
-
if (this.ModelFactory.has(schema.table)) {
|
|
65
|
+
if (this.ModelFactory.models.has(schema.table)) {
|
|
67
66
|
throw new XansqlError({
|
|
68
67
|
message: `Model for table ${schema.table} already exists.`,
|
|
69
68
|
model: schema.table,
|
|
@@ -72,11 +71,11 @@ class Xansql {
|
|
|
72
71
|
model.alias = this.makeAlias(schema.table);
|
|
73
72
|
model.xansql = this;
|
|
74
73
|
model.hooks = schema.hooks;
|
|
75
|
-
this.ModelFactory.set(schema.table, model);
|
|
74
|
+
this.ModelFactory.models.set(schema.table, model);
|
|
76
75
|
// this will delay the model formatting to allow multiple models to be added before formatting
|
|
77
76
|
clearTimeout(this._timer);
|
|
78
77
|
this._timer = setTimeout(() => {
|
|
79
|
-
this.
|
|
78
|
+
this.ModelFactory.format();
|
|
80
79
|
}, 5);
|
|
81
80
|
return model;
|
|
82
81
|
}
|
package/core/Xansql.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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
|
|
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 ModelFactory from \"./classes/ModelFactory\";\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 private _aliases = new Map<string, string>();\n private ModelFactory: ModelFactory;\n private XansqlConfig: XansqlConfig;\n readonly config: XansqlConfigTypeRequired;\n readonly XansqlTransaction: XansqlTransaction;\n readonly EventManager: EventManager\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.ModelFactory = new ModelFactory(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.ModelFactory.models\n }\n\n clone(config?: Partial<XansqlConfigType>) {\n const self = new XansqlClone({ ...this.config, ...(config || {}) });\n for (let [table, model] of this.models) {\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.models.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.models.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.ModelFactory.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","ModelFactory"],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var utils_index = require('../../utils/index.cjs');
|
|
3
4
|
var xt_fields_Array = require('../../xt/fields/Array.cjs');
|
|
4
5
|
var xt_fields_Schema = require('../../xt/fields/Schema.cjs');
|
|
5
6
|
var core_XansqlError = require('../XansqlError.cjs');
|
|
@@ -16,10 +17,10 @@ class Foreign {
|
|
|
16
17
|
return this.isArray(field) || this.isSchema(field);
|
|
17
18
|
}
|
|
18
19
|
static isArray(field) {
|
|
19
|
-
return field
|
|
20
|
+
return utils_index.iof(field, xt_fields_Array) && this.isSchema(field.type);
|
|
20
21
|
}
|
|
21
22
|
static isSchema(field) {
|
|
22
|
-
return field
|
|
23
|
+
return utils_index.iof(field, xt_fields_Schema);
|
|
23
24
|
}
|
|
24
25
|
static get(model, column) {
|
|
25
26
|
model.table;
|
|
@@ -1 +1 @@
|
|
|
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
|
|
1
|
+
{"version":3,"file":"ForeignInfo.cjs","sources":["../../../src/core/classes/ForeignInfo.ts"],"sourcesContent":["import Model from \"../../model\";\nimport { iof } from \"../../utils\";\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 iof(field, XqlArray) && this.isSchema((field as any).type)\n }\n\n static isSchema(field: XqlFields) {\n return iof(field, 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":["iof","XqlArray","XqlSchema","XansqlError"],"mappings":";;;;;;;AAiBA;;;;;;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,OAAOA,eAAG,CAAC,KAAK,EAAEC,eAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAE,KAAa,CAAC,IAAI,CAAC;IACpE;IAEA,OAAO,QAAQ,CAAC,KAAgB,EAAA;AAC7B,QAAA,OAAOD,eAAG,CAAC,KAAK,EAAEE,gBAAS,CAAC;IAC/B;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,5 +1,4 @@
|
|
|
1
1
|
import Model from "../../model";
|
|
2
|
-
import XqlSchema from "../../xt/fields/Schema";
|
|
3
2
|
import { XqlFields } from "../../xt/types";
|
|
4
3
|
export type ForeignInfoType = {
|
|
5
4
|
table: string;
|
|
@@ -20,7 +19,7 @@ export type ForeignInfoType = {
|
|
|
20
19
|
declare class Foreign {
|
|
21
20
|
static is(field: XqlFields): boolean;
|
|
22
21
|
static isArray(field: XqlFields): boolean;
|
|
23
|
-
static isSchema(field: XqlFields):
|
|
22
|
+
static isSchema(field: XqlFields): boolean;
|
|
24
23
|
static get(model: Model, column: string): ForeignInfoType;
|
|
25
24
|
}
|
|
26
25
|
export default Foreign;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { iof } from '../../utils/index.mjs';
|
|
1
2
|
import XqlArray from '../../xt/fields/Array.mjs';
|
|
2
3
|
import XqlSchema from '../../xt/fields/Schema.mjs';
|
|
3
4
|
import XansqlError from '../XansqlError.mjs';
|
|
@@ -14,10 +15,10 @@ class Foreign {
|
|
|
14
15
|
return this.isArray(field) || this.isSchema(field);
|
|
15
16
|
}
|
|
16
17
|
static isArray(field) {
|
|
17
|
-
return field
|
|
18
|
+
return iof(field, XqlArray) && this.isSchema(field.type);
|
|
18
19
|
}
|
|
19
20
|
static isSchema(field) {
|
|
20
|
-
return field
|
|
21
|
+
return iof(field, XqlSchema);
|
|
21
22
|
}
|
|
22
23
|
static get(model, column) {
|
|
23
24
|
model.table;
|
|
@@ -1 +1 @@
|
|
|
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
|
|
1
|
+
{"version":3,"file":"ForeignInfo.mjs","sources":["../../../src/core/classes/ForeignInfo.ts"],"sourcesContent":["import Model from \"../../model\";\nimport { iof } from \"../../utils\";\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 iof(field, XqlArray) && this.isSchema((field as any).type)\n }\n\n static isSchema(field: XqlFields) {\n return iof(field, 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":";;;;;AAiBA;;;;;;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,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAE,KAAa,CAAC,IAAI,CAAC;IACpE;IAEA,OAAO,QAAQ,CAAC,KAAgB,EAAA;AAC7B,QAAA,OAAO,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC;IAC/B;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;;;;"}
|
|
@@ -18,6 +18,7 @@ var core_XansqlError = require('../../XansqlError.cjs');
|
|
|
18
18
|
var core_classes_ForeignInfo = require('../ForeignInfo.cjs');
|
|
19
19
|
var core_classes_Migration_ForeingMigration = require('./ForeingMigration.cjs');
|
|
20
20
|
var core_classes_Migration_IndexMigration = require('./IndexMigration.cjs');
|
|
21
|
+
var model_include_ValueFormatter = require('../../../model/include/ValueFormatter.cjs');
|
|
21
22
|
|
|
22
23
|
class Migration {
|
|
23
24
|
constructor(xansql) {
|
|
@@ -67,6 +68,7 @@ class Migration {
|
|
|
67
68
|
const table = model.table;
|
|
68
69
|
const schema = (model === null || model === void 0 ? void 0 : model.schema) || {};
|
|
69
70
|
let sqls = [];
|
|
71
|
+
let footers = [];
|
|
70
72
|
for (const column in schema) {
|
|
71
73
|
const field = schema[column];
|
|
72
74
|
const meta = field.meta || {};
|
|
@@ -76,7 +78,7 @@ class Migration {
|
|
|
76
78
|
const info = core_classes_ForeignInfo.get(model, column);
|
|
77
79
|
const fk = this.ForeignKeyMigration.buildCreate(table, column, info.table, info.relation.main);
|
|
78
80
|
if (fk) {
|
|
79
|
-
|
|
81
|
+
footers.push(fk);
|
|
80
82
|
}
|
|
81
83
|
}
|
|
82
84
|
if (meta.index && !meta.unique) {
|
|
@@ -84,6 +86,9 @@ class Migration {
|
|
|
84
86
|
indexes.push({ table, sql: indexSql });
|
|
85
87
|
}
|
|
86
88
|
}
|
|
89
|
+
if (footers.length > 0) {
|
|
90
|
+
sqls.push(footers.join(','));
|
|
91
|
+
}
|
|
87
92
|
let sql = `CREATE TABLE IF NOT EXISTS ${utils_index.quote(engine, table)} (${sqls.join(',')})`;
|
|
88
93
|
if (engine === 'mysql') {
|
|
89
94
|
sql += ` ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`;
|
|
@@ -105,15 +110,19 @@ class Migration {
|
|
|
105
110
|
buildColumn(table, column) {
|
|
106
111
|
const engine = this.xansql.config.dialect.engine;
|
|
107
112
|
const model = this.xansql.models.get(table);
|
|
108
|
-
const field = model
|
|
109
|
-
const meta =
|
|
113
|
+
const field = model.schema[column];
|
|
114
|
+
const meta = field.meta || {};
|
|
110
115
|
const nullable = meta.nullable || meta.optional ? 'NULL' : 'NOT NULL';
|
|
111
116
|
const unique = meta.unique ? 'UNIQUE' : '';
|
|
117
|
+
let default_value = '';
|
|
118
|
+
if (meta.default !== undefined) {
|
|
119
|
+
default_value = model_include_ValueFormatter.getDefaultSql(model, column);
|
|
120
|
+
}
|
|
112
121
|
const col = (column, sqlType) => {
|
|
113
|
-
return ` ${utils_index.quote(engine, column)} ${sqlType} ${nullable} ${unique}`.trim();
|
|
122
|
+
return ` ${utils_index.quote(engine, column)} ${sqlType} ${nullable} ${default_value} ${unique}`.trim().replace(/ +/g, ' ');
|
|
114
123
|
};
|
|
115
124
|
let sql = '';
|
|
116
|
-
if (field
|
|
125
|
+
if (utils_index.iof(field, xt_fields_IDField)) {
|
|
117
126
|
if (engine === 'mysql') {
|
|
118
127
|
sql += col(column, "INT AUTO_INCREMENT PRIMARY KEY");
|
|
119
128
|
}
|
|
@@ -124,7 +133,7 @@ class Migration {
|
|
|
124
133
|
sql += col(column, "INTEGER PRIMARY KEY AUTOINCREMENT");
|
|
125
134
|
}
|
|
126
135
|
}
|
|
127
|
-
else if (field
|
|
136
|
+
else if (utils_index.iof(field, xt_fields_Schema)) {
|
|
128
137
|
if (engine === 'mysql') {
|
|
129
138
|
sql += col(column, "INT");
|
|
130
139
|
}
|
|
@@ -132,7 +141,7 @@ class Migration {
|
|
|
132
141
|
sql += col(column, "INTEGER");
|
|
133
142
|
}
|
|
134
143
|
}
|
|
135
|
-
else if (field
|
|
144
|
+
else if (utils_index.iof(field, xt_fields_String)) {
|
|
136
145
|
let length = meta.length || meta.max;
|
|
137
146
|
if (meta.text || length > 65535 || engine === 'sqlite') {
|
|
138
147
|
sql += col(column, "TEXT");
|
|
@@ -141,10 +150,10 @@ class Migration {
|
|
|
141
150
|
sql += col(column, `VARCHAR(${length || 255})`);
|
|
142
151
|
}
|
|
143
152
|
}
|
|
144
|
-
else if (field
|
|
153
|
+
else if (utils_index.iof(field, xt_fields_File)) {
|
|
145
154
|
sql += col(column, "VARCHAR(255)");
|
|
146
155
|
}
|
|
147
|
-
else if (field
|
|
156
|
+
else if (utils_index.iof(field, xt_fields_Number)) {
|
|
148
157
|
if (engine === "mysql") {
|
|
149
158
|
if (meta.integer) {
|
|
150
159
|
sql += col(column, "INT");
|
|
@@ -168,7 +177,7 @@ class Migration {
|
|
|
168
177
|
}
|
|
169
178
|
}
|
|
170
179
|
}
|
|
171
|
-
else if (field
|
|
180
|
+
else if (utils_index.iof(field, xt_fields_Boolean)) {
|
|
172
181
|
if (engine === "mysql" || engine === "postgresql") {
|
|
173
182
|
sql += col(column, "BOOLEAN");
|
|
174
183
|
}
|
|
@@ -176,7 +185,7 @@ class Migration {
|
|
|
176
185
|
sql += col(column, "INTEGER"); // SQLite has no BOOLEAN → use INTEGER (0/1)
|
|
177
186
|
}
|
|
178
187
|
}
|
|
179
|
-
else if (field
|
|
188
|
+
else if (utils_index.iof(field, xt_fields_Date)) {
|
|
180
189
|
if (engine === "mysql") {
|
|
181
190
|
sql += col(column, "DATETIME");
|
|
182
191
|
}
|
|
@@ -187,7 +196,7 @@ class Migration {
|
|
|
187
196
|
sql += col(column, "TEXT"); // store ISO string (SQLite has no native DATETIME)
|
|
188
197
|
}
|
|
189
198
|
}
|
|
190
|
-
else if (field
|
|
199
|
+
else if (utils_index.iof(field, xt_fields_Enum)) {
|
|
191
200
|
if (engine === "mysql") {
|
|
192
201
|
sql += col(column, `ENUM(${field.values.map((v) => `'${utils_index.escapeSqlValue(v)}'`).join(', ')})`);
|
|
193
202
|
}
|
|
@@ -201,12 +210,12 @@ class Migration {
|
|
|
201
210
|
sql += `"${column}" TEXT CHECK("${column}" IN (${values})) ${nullable} ${unique}, `;
|
|
202
211
|
}
|
|
203
212
|
}
|
|
204
|
-
else if (field
|
|
213
|
+
else if (utils_index.iof(field, xt_fields_Object, xt_fields_Record, xt_fields_Tuple, xt_fields_Union)) {
|
|
205
214
|
sql += col(column, "TEXT");
|
|
206
215
|
}
|
|
207
|
-
else if (field
|
|
216
|
+
else if (utils_index.iof(field, xt_fields_Array)) {
|
|
208
217
|
const arrayType = field.type;
|
|
209
|
-
const isSchemaArray = arrayType
|
|
218
|
+
const isSchemaArray = utils_index.iof(arrayType, xt_fields_Schema);
|
|
210
219
|
if (!isSchemaArray) {
|
|
211
220
|
sql += col(column, "TEXT");
|
|
212
221
|
}
|
|
@@ -1 +1 @@
|
|
|
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 { escapeSqlValue, quote } from \"../../../utils\";\nimport Xansql from \"../../Xansql\";\nimport XansqlError from \"../../XansqlError\";\nimport Foreign from \"../ForeignInfo\";\nimport ForeignKeyMigration from \"./ForeingMigration\";\nimport IndexMigration from \"./IndexMigration\";\n\nclass Migration {\n xansql: Xansql;\n readonly ForeignKeyMigration: ForeignKeyMigration\n readonly IndexMigration: IndexMigration\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n this.ForeignKeyMigration = new ForeignKeyMigration(xansql);\n this.IndexMigration = new IndexMigration(xansql);\n }\n\n statements() {\n const engine = this.xansql.config.dialect.engine;\n const models = this.xansql.models;\n\n const options: string[] = []\n const tables: ({ table: string, sql: string })[] = [];\n const indexes: ({ table: string, sql: string })[] = [];\n\n if (engine === 'sqlite') {\n options.push(`PRAGMA foreign_keys = ON;`);\n options.push(`PRAGMA journal_mode = WAL;`);\n options.push(`PRAGMA wal_autocheckpoint = 1000;`);\n options.push(`PRAGMA synchronous = NORMAL;`);\n } else if (engine === 'postgresql') {\n options.push(`SET client_min_messages TO WARNING;`);\n options.push(`SET standard_conforming_strings = ON;`);\n } else if (engine === 'mysql') {\n options.push(`SET sql_mode = 'STRICT_ALL_TABLES';`);\n options.push(`SET FOREIGN_KEY_CHECKS = 1;`);\n options.push(`SET sql_safe_updates = 1;`);\n }\n\n for (const table of models.keys()) {\n const model = models.get(table);\n const { sql, indexes: modelIndexes } = this.buildCreate(model!);\n indexes.push(...modelIndexes);\n tables.push({\n table,\n sql\n });\n }\n\n return {\n options,\n tables,\n indexes\n }\n }\n\n buildCreate(model: Model) {\n const engine = this.xansql.config.dialect.engine;\n let indexes: ({ table: string, sql: string })[] = [];\n const table = model.table;\n const schema = model?.schema || {};\n let sqls: string[] = [];\n\n for (const column in schema) {\n const field = schema[column];\n const meta = field.meta || {};\n const sql = this.buildColumn(table, column);\n sql && sqls.push(sql);\n\n if (Foreign.isSchema(field)) {\n const info = Foreign.get(model!, column)\n const fk = this.ForeignKeyMigration.buildCreate(table, column, info.table, info.relation.main);\n if (fk) {\n sqls.push(fk);\n }\n }\n\n if (meta.index && !meta.unique) {\n const indexSql = this.IndexMigration.buildCreate(table, column);\n indexes.push({ table, sql: indexSql });\n }\n }\n\n let sql = `CREATE TABLE IF NOT EXISTS ${quote(engine, table)} (${sqls.join(',')})`;\n if (engine === 'mysql') {\n sql += ` ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`;\n } else {\n sql += ` ;`;\n }\n\n return {\n sql,\n indexes\n }\n }\n\n buildDrop(model: any) {\n const engine = this.xansql.config.dialect.engine;\n const table = model.table;\n let sql = `DROP TABLE IF EXISTS ${quote(engine, table)};`;\n return sql;\n }\n\n buildColumn(table: string, column: string) {\n const engine = this.xansql.config.dialect.engine;\n const model = this.xansql.models.get(table);\n const field = model?.schema[column];\n const meta = field?.meta || {};\n const nullable = meta.nullable || meta.optional ? 'NULL' : 'NOT NULL';\n const unique = meta.unique ? 'UNIQUE' : '';\n const col = (column: string, sqlType: string) => {\n return ` ${quote(engine, column)} ${sqlType} ${nullable} ${unique}`.trim()\n };\n let sql = ''\n if (field instanceof XqlIDField) {\n if (engine === 'mysql') {\n sql += col(column, \"INT AUTO_INCREMENT PRIMARY KEY\");\n } else if (engine === 'postgresql') {\n sql += col(column, \"SERIAL PRIMARY KEY\")\n } else if (engine === 'sqlite') {\n sql += col(column, \"INTEGER PRIMARY KEY AUTOINCREMENT\")\n }\n } else if (field instanceof XqlSchema) {\n if (engine === 'mysql') {\n sql += col(column, \"INT\")\n } else if (engine === 'postgresql' || engine === 'sqlite') {\n sql += col(column, \"INTEGER\")\n }\n } else if (field instanceof XqlString) {\n let length = meta.length || meta.max\n if (meta.text || length > 65535 || engine === 'sqlite') {\n sql += col(column, \"TEXT\")\n } else {\n sql += col(column, `VARCHAR(${length || 255})`)\n }\n } else if (field instanceof XqlFile) {\n sql += col(column, \"VARCHAR(255)\")\n } else if (field instanceof XqlNumber) {\n if (engine === \"mysql\") {\n if (meta.integer) {\n sql += col(column, \"INT\")\n } else if (meta.float) {\n sql += col(column, \"FLOAT\")\n } else {\n sql += col(column, \"DECIMAL(10, 2)\")\n }\n } else if (engine === \"postgresql\" || engine === \"sqlite\") {\n if (meta.integer) {\n sql += col(column, \"INTEGER\")\n } else if (meta.float) {\n sql += col(column, \"REAL\")\n } else {\n sql += col(column, engine === \"sqlite\" ? \"NUMERIC\" : \"NUMERIC(10, 2)\")\n }\n }\n } else if (field instanceof XqlBoolean) {\n if (engine === \"mysql\" || engine === \"postgresql\") {\n sql += col(column, \"BOOLEAN\")\n } else if (engine === \"sqlite\") {\n sql += col(column, \"INTEGER\") // SQLite has no BOOLEAN → use INTEGER (0/1)\n }\n } else if (field instanceof XqlDate) {\n if (engine === \"mysql\") {\n sql += col(column, \"DATETIME\")\n } else if (engine === \"postgresql\") {\n sql += col(column, \"TIMESTAMP\")\n } else if (engine === \"sqlite\") {\n sql += col(column, \"TEXT\") // store ISO string (SQLite has no native DATETIME)\n }\n } else if (field instanceof XqlEnum) {\n if (engine === \"mysql\") {\n sql += col(column, `ENUM(${(field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ')})`)\n } else if (engine === \"postgresql\") {\n const enumName = `${table}_${column}_enum`;\n sql += `CREATE TYPE ${enumName} AS ENUM (${(field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ')}); `\n sql += col(column, enumName)\n } else if (engine === \"sqlite\") {\n const values = (field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(\", \");\n sql += `\"${column}\" TEXT CHECK(\"${column}\" IN (${values})) ${nullable} ${unique}, `\n }\n } else if (field instanceof XqlObject || field instanceof XqlRecord || field instanceof XqlTuple || field instanceof XqlUnion) {\n sql += col(column, \"TEXT\")\n } else if (field instanceof XqlArray) {\n const arrayType = (field as any).type;\n const isSchemaArray = arrayType instanceof XqlSchema;\n if (!isSchemaArray) {\n sql += col(column, \"TEXT\")\n }\n } else {\n throw new XansqlError({\n message: `Unsupported field type for column \"${column}\" in table \"${table}\".`,\n model: table,\n column\n });\n }\n return sql;\n }\n}\n\nexport default Migration"],"names":["ForeignKeyMigration","IndexMigration","Foreign","quote","XqlIDField","XqlSchema","XqlString","XqlFile","XqlNumber","XqlBoolean","XqlDate","XqlEnum","escapeSqlValue","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 { escapeSqlValue, iof, quote } from \"../../../utils\";\nimport Xansql from \"../../Xansql\";\nimport XansqlError from \"../../XansqlError\";\nimport Foreign from \"../ForeignInfo\";\nimport ForeignKeyMigration from \"./ForeingMigration\";\nimport IndexMigration from \"./IndexMigration\";\nimport ValueFormatter from \"../../../model/include/ValueFormatter\";\n\nclass Migration {\n xansql: Xansql;\n readonly ForeignKeyMigration: ForeignKeyMigration\n readonly IndexMigration: IndexMigration\n constructor(xansql: Xansql) {\n this.xansql = xansql;\n this.ForeignKeyMigration = new ForeignKeyMigration(xansql);\n this.IndexMigration = new IndexMigration(xansql);\n }\n\n statements() {\n const engine = this.xansql.config.dialect.engine;\n const models = this.xansql.models;\n\n const options: string[] = []\n const tables: ({ table: string, sql: string })[] = [];\n const indexes: ({ table: string, sql: string })[] = [];\n\n if (engine === 'sqlite') {\n options.push(`PRAGMA foreign_keys = ON;`);\n options.push(`PRAGMA journal_mode = WAL;`);\n options.push(`PRAGMA wal_autocheckpoint = 1000;`);\n options.push(`PRAGMA synchronous = NORMAL;`);\n } else if (engine === 'postgresql') {\n options.push(`SET client_min_messages TO WARNING;`);\n options.push(`SET standard_conforming_strings = ON;`);\n } else if (engine === 'mysql') {\n options.push(`SET sql_mode = 'STRICT_ALL_TABLES';`);\n options.push(`SET FOREIGN_KEY_CHECKS = 1;`);\n options.push(`SET sql_safe_updates = 1;`);\n }\n\n for (const table of models.keys()) {\n const model = models.get(table);\n const { sql, indexes: modelIndexes } = this.buildCreate(model!);\n indexes.push(...modelIndexes);\n tables.push({\n table,\n sql\n });\n }\n\n return {\n options,\n tables,\n indexes\n }\n }\n\n buildCreate(model: Model) {\n const engine = this.xansql.config.dialect.engine;\n let indexes: ({ table: string, sql: string })[] = [];\n const table = model.table;\n const schema = model?.schema || {};\n let sqls: string[] = [];\n let footers: string[] = [];\n\n for (const column in schema) {\n const field = schema[column];\n const meta = field.meta || {};\n const sql = this.buildColumn(table, column);\n sql && sqls.push(sql);\n\n if (Foreign.isSchema(field)) {\n const info = Foreign.get(model!, column)\n const fk = this.ForeignKeyMigration.buildCreate(table, column, info.table, info.relation.main);\n if (fk) {\n footers.push(fk);\n }\n }\n\n if (meta.index && !meta.unique) {\n const indexSql = this.IndexMigration.buildCreate(table, column);\n indexes.push({ table, sql: indexSql });\n }\n }\n if (footers.length > 0) {\n sqls.push(footers.join(','));\n }\n\n let sql = `CREATE TABLE IF NOT EXISTS ${quote(engine, table)} (${sqls.join(',')})`;\n if (engine === 'mysql') {\n sql += ` ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`;\n } else {\n sql += ` ;`;\n }\n\n return {\n sql,\n indexes\n }\n }\n\n buildDrop(model: any) {\n const engine = this.xansql.config.dialect.engine;\n const table = model.table;\n let sql = `DROP TABLE IF EXISTS ${quote(engine, table)};`;\n return sql;\n }\n\n buildColumn(table: string, column: string) {\n const engine = this.xansql.config.dialect.engine;\n const model = this.xansql.models.get(table) as Model;\n const field = model.schema[column];\n const meta = field.meta || {};\n const nullable = meta.nullable || meta.optional ? 'NULL' : 'NOT NULL';\n const unique = meta.unique ? 'UNIQUE' : '';\n let default_value = ''\n if (meta.default !== undefined) {\n default_value = ValueFormatter.getDefaultSql(model, column);\n }\n const col = (column: string, sqlType: string) => {\n return ` ${quote(engine, column)} ${sqlType} ${nullable} ${default_value} ${unique}`.trim().replace(/ +/g, ' ');\n };\n let sql = ''\n if (iof(field, XqlIDField)) {\n if (engine === 'mysql') {\n sql += col(column, \"INT AUTO_INCREMENT PRIMARY KEY\");\n } else if (engine === 'postgresql') {\n sql += col(column, \"SERIAL PRIMARY KEY\")\n } else if (engine === 'sqlite') {\n sql += col(column, \"INTEGER PRIMARY KEY AUTOINCREMENT\")\n }\n } else if (iof(field, XqlSchema)) {\n if (engine === 'mysql') {\n sql += col(column, \"INT\")\n } else if (engine === 'postgresql' || engine === 'sqlite') {\n sql += col(column, \"INTEGER\")\n }\n } else if (iof(field, XqlString)) {\n let length = meta.length || meta.max\n if (meta.text || length > 65535 || engine === 'sqlite') {\n sql += col(column, \"TEXT\")\n } else {\n sql += col(column, `VARCHAR(${length || 255})`)\n }\n } else if (iof(field, XqlFile)) {\n sql += col(column, \"VARCHAR(255)\")\n } else if (iof(field, XqlNumber)) {\n if (engine === \"mysql\") {\n if (meta.integer) {\n sql += col(column, \"INT\")\n } else if (meta.float) {\n sql += col(column, \"FLOAT\")\n } else {\n sql += col(column, \"DECIMAL(10, 2)\")\n }\n } else if (engine === \"postgresql\" || engine === \"sqlite\") {\n if (meta.integer) {\n sql += col(column, \"INTEGER\")\n } else if (meta.float) {\n sql += col(column, \"REAL\")\n } else {\n sql += col(column, engine === \"sqlite\" ? \"NUMERIC\" : \"NUMERIC(10, 2)\")\n }\n }\n } else if (iof(field, XqlBoolean)) {\n if (engine === \"mysql\" || engine === \"postgresql\") {\n sql += col(column, \"BOOLEAN\")\n } else if (engine === \"sqlite\") {\n sql += col(column, \"INTEGER\") // SQLite has no BOOLEAN → use INTEGER (0/1)\n }\n } else if (iof(field, XqlDate)) {\n if (engine === \"mysql\") {\n sql += col(column, \"DATETIME\")\n } else if (engine === \"postgresql\") {\n sql += col(column, \"TIMESTAMP\")\n } else if (engine === \"sqlite\") {\n sql += col(column, \"TEXT\") // store ISO string (SQLite has no native DATETIME)\n }\n } else if (iof(field, XqlEnum)) {\n if (engine === \"mysql\") {\n sql += col(column, `ENUM(${(field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ')})`)\n } else if (engine === \"postgresql\") {\n const enumName = `${table}_${column}_enum`;\n sql += `CREATE TYPE ${enumName} AS ENUM (${(field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(', ')}); `\n sql += col(column, enumName)\n } else if (engine === \"sqlite\") {\n const values = (field as any).values.map((v: any) => `'${escapeSqlValue(v)}'`).join(\", \");\n sql += `\"${column}\" TEXT CHECK(\"${column}\" IN (${values})) ${nullable} ${unique}, `\n }\n } else if (iof(field, XqlObject, XqlRecord, XqlTuple, XqlUnion)) {\n sql += col(column, \"TEXT\")\n } else if (iof(field, XqlArray)) {\n const arrayType = (field as any).type;\n const isSchemaArray = iof(arrayType, XqlSchema)\n if (!isSchemaArray) {\n sql += col(column, \"TEXT\")\n }\n } else {\n throw new XansqlError({\n message: `Unsupported field type for column \"${column}\" in table \"${table}\".`,\n model: table,\n column\n });\n }\n return sql;\n }\n}\n\nexport default Migration"],"names":["ForeignKeyMigration","IndexMigration","Foreign","quote","ValueFormatter","iof","XqlIDField","XqlSchema","XqlString","XqlFile","XqlNumber","XqlBoolean","XqlDate","XqlEnum","escapeSqlValue","XqlObject","XqlRecord","XqlTuple","XqlUnion","XqlArray","XansqlError"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAsBA,MAAM,SAAS,CAAA;AAIZ,IAAA,WAAA,CAAY,MAAc,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;QACpB,IAAI,CAAC,mBAAmB,GAAG,IAAIA,uCAAmB,CAAC,MAAM,CAAC;QAC1D,IAAI,CAAC,cAAc,GAAG,IAAIC,qCAAc,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;QACvB,IAAI,OAAO,GAAa,EAAE;AAE1B,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,IAAIC,wBAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBAC1B,MAAM,IAAI,GAAGA,wBAAO,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,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnB;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;AACA,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACrB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/B;AAEA,QAAA,IAAI,GAAG,GAAG,CAAA,2BAAA,EAA8BC,iBAAK,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,EAAwBA,iBAAK,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,CAAU;QACpD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AAClC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE;AAC7B,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;QAC1C,IAAI,aAAa,GAAG,EAAE;AACtB,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;YAC7B,aAAa,GAAGC,4BAAc,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC;QAC9D;AACA,QAAA,MAAM,GAAG,GAAG,CAAC,MAAc,EAAE,OAAe,KAAI;YAC7C,OAAO,CAAA,EAAA,EAAKD,iBAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAI,aAAa,IAAI,MAAM,CAAA,CAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AACnH,QAAA,CAAC;QACD,IAAI,GAAG,GAAG,EAAE;AACZ,QAAA,IAAIE,eAAG,CAAC,KAAK,EAAEC,iBAAU,CAAC,EAAE;AACzB,YAAA,IAAI,MAAM,KAAK,OAAO,EAAE;AACrB,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,gCAAgC,CAAC;YACvD;AAAO,iBAAA,IAAI,MAAM,KAAK,YAAY,EAAE;AACjC,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC;YAC3C;AAAO,iBAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;AAC7B,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,mCAAmC,CAAC;YAC1D;QACH;AAAO,aAAA,IAAID,eAAG,CAAC,KAAK,EAAEE,gBAAS,CAAC,EAAE;AAC/B,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,IAAIF,eAAG,CAAC,KAAK,EAAEG,gBAAS,CAAC,EAAE;YAC/B,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,IAAIH,eAAG,CAAC,KAAK,EAAEI,cAAO,CAAC,EAAE;AAC7B,YAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;QACrC;AAAO,aAAA,IAAIJ,eAAG,CAAC,KAAK,EAAEK,gBAAS,CAAC,EAAE;AAC/B,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,IAAIL,eAAG,CAAC,KAAK,EAAEM,iBAAU,CAAC,EAAE;YAChC,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,YAAY,EAAE;AAChD,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;YAChC;AAAO,iBAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;gBAC7B,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;YAChC;QACH;AAAO,aAAA,IAAIN,eAAG,CAAC,KAAK,EAAEO,cAAO,CAAC,EAAE;AAC7B,YAAA,IAAI,MAAM,KAAK,OAAO,EAAE;AACrB,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;YACjC;AAAO,iBAAA,IAAI,MAAM,KAAK,YAAY,EAAE;AACjC,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC;YAClC;AAAO,iBAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;gBAC7B,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YAC7B;QACH;AAAO,aAAA,IAAIP,eAAG,CAAC,KAAK,EAAEQ,cAAO,CAAC,EAAE;AAC7B,YAAA,IAAI,MAAM,KAAK,OAAO,EAAE;AACrB,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAA,KAAA,EAAS,KAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAA,CAAA,EAAIC,0BAAc,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,CAAC;YAC5G;AAAO,iBAAA,IAAI,MAAM,KAAK,YAAY,EAAE;AACjC,gBAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,MAAM,OAAO;AAC1C,gBAAA,GAAG,IAAI,CAAA,YAAA,EAAe,QAAQ,CAAA,UAAA,EAAc,KAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAA,CAAA,EAAIA,0BAAc,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,GAAA,CAAK;AAC1H,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;YAC/B;AAAO,iBAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;gBAC7B,MAAM,MAAM,GAAI,KAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAA,CAAA,EAAIA,0BAAc,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACzF,gBAAA,GAAG,IAAI,CAAA,CAAA,EAAI,MAAM,CAAA,cAAA,EAAiB,MAAM,CAAA,MAAA,EAAS,MAAM,CAAA,GAAA,EAAM,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAA,EAAA,CAAI;YACtF;QACH;AAAO,aAAA,IAAIT,eAAG,CAAC,KAAK,EAAEU,gBAAS,EAAEC,gBAAS,EAAEC,eAAQ,EAAEC,eAAQ,CAAC,EAAE;AAC9D,YAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;QAC7B;AAAO,aAAA,IAAIb,eAAG,CAAC,KAAK,EAAEc,eAAQ,CAAC,EAAE;AAC9B,YAAA,MAAM,SAAS,GAAI,KAAa,CAAC,IAAI;YACrC,MAAM,aAAa,GAAGd,eAAG,CAAC,SAAS,EAAEE,gBAAS,CAAC;YAC/C,IAAI,CAAC,aAAa,EAAE;AACjB,gBAAA,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;YAC7B;QACH;aAAO;YACJ,MAAM,IAAIa,gBAAW,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;;;;"}
|