xansql 1.0.8 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/Xansql.cjs +7 -8
- package/core/Xansql.cjs.map +1 -1
- package/core/Xansql.d.ts +2 -3
- package/core/Xansql.mjs +7 -8
- package/core/Xansql.mjs.map +1 -1
- package/core/classes/ForeignInfo.cjs +3 -2
- package/core/classes/ForeignInfo.cjs.map +1 -1
- package/core/classes/ForeignInfo.d.ts +1 -2
- package/core/classes/ForeignInfo.mjs +3 -2
- package/core/classes/ForeignInfo.mjs.map +1 -1
- package/core/classes/Migration/TableMigration.cjs +24 -15
- package/core/classes/Migration/TableMigration.cjs.map +1 -1
- package/core/classes/Migration/TableMigration.mjs +25 -16
- package/core/classes/Migration/TableMigration.mjs.map +1 -1
- package/core/classes/Migration/index.cjs +13 -10
- package/core/classes/Migration/index.cjs.map +1 -1
- package/core/classes/Migration/index.mjs +14 -11
- package/core/classes/Migration/index.mjs.map +1 -1
- package/core/classes/{ModelFormatter.cjs → ModelFactory.cjs} +82 -56
- package/core/classes/ModelFactory.cjs.map +1 -0
- package/core/classes/{ModelFormatter.d.ts → ModelFactory.d.ts} +7 -2
- package/core/classes/{ModelFormatter.mjs → ModelFactory.mjs} +82 -56
- package/core/classes/ModelFactory.mjs.map +1 -0
- package/core/types.d.ts +1 -1
- package/dialect/MysqlDialect.cjs +7 -4
- package/dialect/MysqlDialect.cjs.map +1 -1
- package/dialect/MysqlDialect.d.ts +7 -4
- package/dialect/MysqlDialect.mjs +7 -4
- package/dialect/MysqlDialect.mjs.map +1 -1
- package/dialect/PostgresDialect.cjs +5 -2
- package/dialect/PostgresDialect.cjs.map +1 -1
- package/dialect/PostgresDialect.d.ts +5 -2
- package/dialect/PostgresDialect.mjs +5 -2
- package/dialect/PostgresDialect.mjs.map +1 -1
- package/dialect/SqliteDialect.cjs +3 -2
- package/dialect/SqliteDialect.cjs.map +1 -1
- package/dialect/SqliteDialect.d.ts +3 -2
- package/dialect/SqliteDialect.mjs +3 -2
- package/dialect/SqliteDialect.mjs.map +1 -1
- package/dialect/XansqlBridge/XansqlBridgeServer.cjs.map +1 -1
- package/dialect/XansqlBridge/XansqlBridgeServer.mjs.map +1 -1
- package/dialect/XansqlBridge/base.cjs +10 -5
- package/dialect/XansqlBridge/base.cjs.map +1 -1
- package/dialect/XansqlBridge/base.mjs +10 -5
- package/dialect/XansqlBridge/base.mjs.map +1 -1
- package/model/Args/WhereArgs.cjs +5 -8
- package/model/Args/WhereArgs.cjs.map +1 -1
- package/model/Args/WhereArgs.mjs +6 -9
- package/model/Args/WhereArgs.mjs.map +1 -1
- package/model/Base.cjs +2 -1
- package/model/Base.cjs.map +1 -1
- package/model/Base.mjs +2 -1
- package/model/Base.mjs.map +1 -1
- package/model/Executer/Aggregate/SelectArgs.cjs +2 -1
- package/model/Executer/Aggregate/SelectArgs.cjs.map +1 -1
- package/model/Executer/Aggregate/SelectArgs.mjs +2 -1
- package/model/Executer/Aggregate/SelectArgs.mjs.map +1 -1
- package/model/Executer/Aggregate/index.cjs +4 -4
- package/model/Executer/Aggregate/index.cjs.map +1 -1
- package/model/Executer/Aggregate/index.mjs +4 -4
- package/model/Executer/Aggregate/index.mjs.map +1 -1
- package/model/Executer/Create/CreateDataArgs.cjs +9 -5
- package/model/Executer/Create/CreateDataArgs.cjs.map +1 -1
- package/model/Executer/Create/CreateDataArgs.mjs +10 -6
- package/model/Executer/Create/CreateDataArgs.mjs.map +1 -1
- package/model/Executer/Create/index.cjs +1 -1
- package/model/Executer/Create/index.cjs.map +1 -1
- package/model/Executer/Create/index.mjs +1 -1
- package/model/Executer/Create/index.mjs.map +1 -1
- package/model/Executer/Delete/index.cjs +2 -1
- package/model/Executer/Delete/index.cjs.map +1 -1
- package/model/Executer/Delete/index.mjs +2 -1
- package/model/Executer/Delete/index.mjs.map +1 -1
- package/model/Executer/Find/SelectArgs.cjs +3 -3
- package/model/Executer/Find/SelectArgs.cjs.map +1 -1
- package/model/Executer/Find/SelectArgs.mjs +3 -3
- package/model/Executer/Find/SelectArgs.mjs.map +1 -1
- package/model/Executer/Update/UpdateDataArgs.cjs +4 -4
- package/model/Executer/Update/UpdateDataArgs.cjs.map +1 -1
- package/model/Executer/Update/UpdateDataArgs.mjs +5 -5
- package/model/Executer/Update/UpdateDataArgs.mjs.map +1 -1
- package/model/Executer/Update/index.cjs +1 -1
- package/model/Executer/Update/index.cjs.map +1 -1
- package/model/Executer/Update/index.mjs +1 -1
- package/model/Executer/Update/index.mjs.map +1 -1
- package/model/include/ValueFormatter.cjs +72 -17
- package/model/include/ValueFormatter.cjs.map +1 -1
- package/model/include/ValueFormatter.d.ts +1 -1
- package/model/include/ValueFormatter.mjs +72 -17
- package/model/include/ValueFormatter.mjs.map +1 -1
- package/model/index.cjs +8 -7
- package/model/index.cjs.map +1 -1
- package/model/index.mjs +8 -7
- package/model/index.mjs.map +1 -1
- package/package.json +12 -7
- package/utils/index.cjs +5 -2
- package/utils/index.cjs.map +1 -1
- package/utils/index.d.ts +2 -1
- package/utils/index.mjs +5 -3
- package/utils/index.mjs.map +1 -1
- package/xt/additional/IP.cjs +22 -0
- package/xt/additional/IP.cjs.map +1 -0
- package/xt/additional/IP.d.ts +6 -0
- package/xt/additional/IP.mjs +20 -0
- package/xt/additional/IP.mjs.map +1 -0
- package/xt/additional/Name.cjs +21 -0
- package/xt/additional/Name.cjs.map +1 -0
- package/xt/additional/Name.d.ts +6 -0
- package/xt/additional/Name.mjs +19 -0
- package/xt/additional/Name.mjs.map +1 -0
- package/xt/additional/Password.cjs +25 -0
- package/xt/additional/Password.cjs.map +1 -0
- package/xt/additional/Password.d.ts +6 -0
- package/xt/additional/Password.mjs +23 -0
- package/xt/additional/Password.mjs.map +1 -0
- package/xt/additional/Phone.cjs +21 -0
- package/xt/additional/Phone.cjs.map +1 -0
- package/xt/additional/Phone.d.ts +6 -0
- package/xt/additional/Phone.mjs +19 -0
- package/xt/additional/Phone.mjs.map +1 -0
- package/xt/additional/Photo.cjs +21 -0
- package/xt/additional/Photo.cjs.map +1 -0
- package/xt/additional/Photo.d.ts +6 -0
- package/xt/additional/Photo.mjs +19 -0
- package/xt/additional/Photo.mjs.map +1 -0
- package/xt/additional/Slug.cjs +21 -0
- package/xt/additional/Slug.cjs.map +1 -0
- package/xt/additional/Slug.d.ts +6 -0
- package/xt/additional/Slug.mjs +19 -0
- package/xt/additional/Slug.mjs.map +1 -0
- package/xt/additional/Url.cjs +26 -0
- package/xt/additional/Url.cjs.map +1 -0
- package/xt/additional/Url.d.ts +6 -0
- package/xt/additional/Url.mjs +24 -0
- package/xt/additional/Url.mjs.map +1 -0
- package/xt/additional/Username.cjs +21 -0
- package/xt/additional/Username.cjs.map +1 -0
- package/xt/additional/Username.d.ts +6 -0
- package/xt/additional/Username.mjs +19 -0
- package/xt/additional/Username.mjs.map +1 -0
- package/xt/fields/Array.cjs +9 -2
- package/xt/fields/Array.cjs.map +1 -1
- package/xt/fields/Array.d.ts +2 -0
- package/xt/fields/Array.mjs +9 -2
- package/xt/fields/Array.mjs.map +1 -1
- package/xt/fields/Boolean.cjs +10 -5
- package/xt/fields/Boolean.cjs.map +1 -1
- package/xt/fields/Boolean.d.ts +2 -0
- package/xt/fields/Boolean.mjs +10 -5
- package/xt/fields/Boolean.mjs.map +1 -1
- package/xt/fields/Date.cjs +12 -12
- package/xt/fields/Date.cjs.map +1 -1
- package/xt/fields/Date.d.ts +2 -0
- package/xt/fields/Date.mjs +12 -12
- package/xt/fields/Date.mjs.map +1 -1
- package/xt/fields/Enum.cjs +10 -4
- package/xt/fields/Enum.cjs.map +1 -1
- package/xt/fields/Enum.d.ts +2 -0
- package/xt/fields/Enum.mjs +10 -4
- package/xt/fields/Enum.mjs.map +1 -1
- package/xt/fields/File.cjs +9 -2
- package/xt/fields/File.cjs.map +1 -1
- package/xt/fields/File.d.ts +2 -0
- package/xt/fields/File.mjs +9 -2
- package/xt/fields/File.mjs.map +1 -1
- package/xt/fields/IDField.cjs +8 -0
- package/xt/fields/IDField.cjs.map +1 -1
- package/xt/fields/IDField.d.ts +2 -0
- package/xt/fields/IDField.mjs +8 -0
- package/xt/fields/IDField.mjs.map +1 -1
- package/xt/fields/Number.cjs +10 -5
- package/xt/fields/Number.cjs.map +1 -1
- package/xt/fields/Number.d.ts +2 -0
- package/xt/fields/Number.mjs +10 -5
- package/xt/fields/Number.mjs.map +1 -1
- package/xt/fields/Object.cjs +10 -5
- package/xt/fields/Object.cjs.map +1 -1
- package/xt/fields/Object.d.ts +2 -0
- package/xt/fields/Object.mjs +10 -5
- package/xt/fields/Object.mjs.map +1 -1
- package/xt/fields/Record.cjs +10 -5
- package/xt/fields/Record.cjs.map +1 -1
- package/xt/fields/Record.d.ts +2 -0
- package/xt/fields/Record.mjs +10 -5
- package/xt/fields/Record.mjs.map +1 -1
- package/xt/fields/Schema.cjs +12 -1
- package/xt/fields/Schema.cjs.map +1 -1
- package/xt/fields/Schema.d.ts +4 -1
- package/xt/fields/Schema.mjs +12 -1
- package/xt/fields/Schema.mjs.map +1 -1
- package/xt/fields/String.cjs +12 -9
- package/xt/fields/String.cjs.map +1 -1
- package/xt/fields/String.d.ts +2 -0
- package/xt/fields/String.mjs +12 -9
- package/xt/fields/String.mjs.map +1 -1
- package/xt/fields/Tuple.cjs +10 -5
- package/xt/fields/Tuple.cjs.map +1 -1
- package/xt/fields/Tuple.d.ts +2 -0
- package/xt/fields/Tuple.mjs +10 -5
- package/xt/fields/Tuple.mjs.map +1 -1
- package/xt/fields/Union.cjs +10 -5
- package/xt/fields/Union.cjs.map +1 -1
- package/xt/fields/Union.d.ts +2 -0
- package/xt/fields/Union.mjs +10 -5
- package/xt/fields/Union.mjs.map +1 -1
- package/xt/index.cjs +16 -100
- package/xt/index.cjs.map +1 -1
- package/xt/index.d.ts +16 -9
- package/xt/index.mjs +16 -100
- package/xt/index.mjs.map +1 -1
- package/core/classes/ModelFormatter.cjs.map +0 -1
- package/core/classes/ModelFormatter.mjs.map +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import XansqlError from '../../core/XansqlError.mjs';
|
|
2
|
+
import { iof } from '../../utils/index.mjs';
|
|
2
3
|
import XqlArray from '../../xt/fields/Array.mjs';
|
|
3
4
|
import XqlBoolean from '../../xt/fields/Boolean.mjs';
|
|
4
5
|
import XqlDate from '../../xt/fields/Date.mjs';
|
|
@@ -14,10 +15,6 @@ import XqlTuple from '../../xt/fields/Tuple.mjs';
|
|
|
14
15
|
import XqlUnion from '../../xt/fields/Union.mjs';
|
|
15
16
|
|
|
16
17
|
class ValueFormatter {
|
|
17
|
-
static iof(model, column, ...instances) {
|
|
18
|
-
const field = model.schema[column];
|
|
19
|
-
return instances.some(instance => field instanceof instance);
|
|
20
|
-
}
|
|
21
18
|
static escape(value) {
|
|
22
19
|
if (value == null)
|
|
23
20
|
return '';
|
|
@@ -45,27 +42,31 @@ class ValueFormatter {
|
|
|
45
42
|
});
|
|
46
43
|
try {
|
|
47
44
|
value = field.parse(value);
|
|
45
|
+
const meta = field.meta || {};
|
|
48
46
|
if (value === undefined || value === null) {
|
|
47
|
+
if (meta.unique) {
|
|
48
|
+
return '';
|
|
49
|
+
}
|
|
49
50
|
return 'NULL';
|
|
50
51
|
}
|
|
51
|
-
else if (
|
|
52
|
+
else if (iof(field, XqlIDField, XqlNumber, XqlSchema)) {
|
|
52
53
|
return value;
|
|
53
54
|
}
|
|
54
|
-
else if (
|
|
55
|
+
else if (iof(field, XqlFile)) {
|
|
55
56
|
return `'${value.name}'`;
|
|
56
57
|
}
|
|
57
|
-
else if (
|
|
58
|
+
else if (iof(field, XqlString, XqlEnum)) {
|
|
58
59
|
return `'${this.escape(value)}'`;
|
|
59
60
|
}
|
|
60
|
-
else if (
|
|
61
|
+
else if (iof(field, XqlObject, XqlRecord, XqlArray, XqlTuple, XqlUnion)) {
|
|
61
62
|
value = JSON.stringify(value);
|
|
62
63
|
return `'${this.escape(value)}'`;
|
|
63
64
|
}
|
|
64
|
-
else if (
|
|
65
|
-
if (value
|
|
65
|
+
else if (iof(field, XqlDate)) {
|
|
66
|
+
if (iof(value, String)) {
|
|
66
67
|
value = new Date(value);
|
|
67
68
|
}
|
|
68
|
-
if (!(value
|
|
69
|
+
if (!iof(value, Date) || isNaN(value.getTime())) {
|
|
69
70
|
throw new Error(`Invalid date value for column ${column}: ${value}`);
|
|
70
71
|
}
|
|
71
72
|
const pad = (n) => n.toString().padStart(2, '0');
|
|
@@ -79,13 +80,13 @@ class ValueFormatter {
|
|
|
79
80
|
value = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
|
80
81
|
return `'${value}'`;
|
|
81
82
|
}
|
|
82
|
-
else if (
|
|
83
|
+
else if (iof(model, column, XqlBoolean)) {
|
|
83
84
|
return value ? 1 : 0;
|
|
84
85
|
}
|
|
85
86
|
}
|
|
86
87
|
catch (error) {
|
|
87
88
|
throw new XansqlError({
|
|
88
|
-
message: `${
|
|
89
|
+
message: `${model.table}.${column}: ${error.message.toLowerCase()}`,
|
|
89
90
|
model: model.table,
|
|
90
91
|
column: column
|
|
91
92
|
});
|
|
@@ -97,20 +98,74 @@ class ValueFormatter {
|
|
|
97
98
|
throw new Error(`Column ${column} does not exist in model ${model.table}`);
|
|
98
99
|
if (value === null || value === undefined)
|
|
99
100
|
return null;
|
|
100
|
-
if (
|
|
101
|
+
if (iof(model, column, XqlIDField, XqlNumber, XqlString, XqlFile, XqlEnum)) {
|
|
101
102
|
return value;
|
|
102
103
|
}
|
|
103
|
-
else if (
|
|
104
|
+
else if (iof(model, column, XqlObject, XqlRecord, XqlArray, XqlTuple, XqlUnion)) {
|
|
104
105
|
return JSON.parse(value);
|
|
105
106
|
}
|
|
106
|
-
else if (
|
|
107
|
+
else if (iof(model, column, XqlDate)) {
|
|
107
108
|
return new Date(value);
|
|
108
109
|
}
|
|
109
|
-
else if (
|
|
110
|
+
else if (iof(model, column, XqlBoolean)) {
|
|
110
111
|
return Boolean(value);
|
|
111
112
|
}
|
|
112
113
|
return value;
|
|
113
114
|
}
|
|
115
|
+
static getDefaultSql(model, column) {
|
|
116
|
+
const field = model.schema[column];
|
|
117
|
+
if (!field)
|
|
118
|
+
throw new XansqlError({
|
|
119
|
+
message: `Column ${column} does not exist in model ${model.table}`,
|
|
120
|
+
model: model.table,
|
|
121
|
+
column
|
|
122
|
+
});
|
|
123
|
+
try {
|
|
124
|
+
let value = field.parse(undefined);
|
|
125
|
+
const meta = field.meta || {};
|
|
126
|
+
if (!meta.optional) {
|
|
127
|
+
return '';
|
|
128
|
+
}
|
|
129
|
+
if (value === undefined || value === null) {
|
|
130
|
+
return 'DEFAULT NULL';
|
|
131
|
+
}
|
|
132
|
+
else if (iof(field, XqlIDField, XqlNumber, XqlSchema)) {
|
|
133
|
+
return `DEFAULT ${value}`;
|
|
134
|
+
}
|
|
135
|
+
else if (iof(field, XqlString, XqlEnum, XqlFile)) {
|
|
136
|
+
return `DEFAULT '${this.escape(value)}'`;
|
|
137
|
+
}
|
|
138
|
+
else if (iof(field, XqlObject, XqlRecord, XqlArray, XqlTuple, XqlUnion)) {
|
|
139
|
+
value = JSON.stringify(value);
|
|
140
|
+
return `DEFAULT '${this.escape(value)}'`;
|
|
141
|
+
}
|
|
142
|
+
else if (iof(field, XqlDate)) {
|
|
143
|
+
const c = new Date();
|
|
144
|
+
let v;
|
|
145
|
+
if (c.toISOString() === value.toISOString()) {
|
|
146
|
+
v = `DEFAULT CURRENT_TIMESTAMP`;
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
v = `DEFAULT '${value}'`;
|
|
150
|
+
}
|
|
151
|
+
if (meta.update) {
|
|
152
|
+
v = ` ${v} ON UPDATE CURRENT_TIMESTAMP`;
|
|
153
|
+
}
|
|
154
|
+
return v;
|
|
155
|
+
}
|
|
156
|
+
else if (iof(field, XqlBoolean)) {
|
|
157
|
+
return value ? 'DEFAULT 1' : 'DEFAULT 0';
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
throw new XansqlError({
|
|
162
|
+
message: `Failed to generate default SQL for ${model.table}.${column}: ${error.message}`,
|
|
163
|
+
model: model.table,
|
|
164
|
+
column
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
return ''; // fallback: no default
|
|
168
|
+
}
|
|
114
169
|
}
|
|
115
170
|
|
|
116
171
|
export { ValueFormatter as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ValueFormatter.mjs","sources":["../../../src/model/include/ValueFormatter.ts"],"sourcesContent":["import Model from \"..\";\nimport XansqlError from \"../../core/XansqlError\";\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\";\n\nclass ValueFormatter {\n static iof(model: Model, column: string, ...instances: any[]) {\n const field = model.schema[column];\n return instances.some(instance => field instanceof instance);\n }\n\n private static escape(value: string) {\n if (value == null) return ''\n let s = String(value)\n\n // Standard SQL: escape single quotes by doubling them\n s = s.replace(/'/g, \"''\")\n\n // Guard against control chars and backslashes (safer across engines)\n s = s\n .replace(/\\\\/g, '\\\\\\\\') // backslash\n .replace(/\\x00/g, '\\\\0') // null byte\n .replace(/\\n/g, '\\\\n') // newline\n .replace(/\\r/g, '\\\\r') // carriage return\n .replace(/\\t/g, '\\\\t') // tab\n .replace(/\\x08/g, '\\\\b') // backspace\n .replace(/\\x1a/g, '\\\\Z') // Ctrl+Z (notably MySQL)\n\n return s\n }\n\n static toSql(model: Model, column: string, value: any) {\n const field = model.schema[column];\n if (!field) throw new XansqlError({\n message: `Column ${column} does not exist in model ${model.table}`,\n model: model.table,\n column: column\n });\n try {\n value = field.parse(value);\n if (value === undefined || value === null) {\n return 'NULL';\n } else if (this.iof(model, column, XqlIDField, XqlNumber, XqlSchema)) {\n return value\n } else if (this.iof(model, column, XqlFile)) {\n return `'${value.name}'`;\n } else if (this.iof(model, column, XqlString, XqlEnum)) {\n return `'${this.escape(value)}'`;\n } else if (this.iof(model, column, XqlObject, XqlRecord, XqlArray, XqlTuple, XqlUnion)) {\n value = JSON.stringify(value);\n return `'${this.escape(value)}'`;\n } else if (this.iof(model, column, XqlDate)) {\n if (value instanceof String) {\n value = new Date(value as any)\n }\n if (!(value instanceof Date) || isNaN(value.getTime())) {\n throw new Error(`Invalid date value for column ${column}: ${value}`);\n }\n\n const pad = (n: number) => n.toString().padStart(2, '0');\n let date = value as Date;\n const year = date.getUTCFullYear();\n const month = pad(date.getUTCMonth() + 1); // months are 0-indexed\n const day = pad(date.getUTCDate());\n const hours = pad(date.getUTCHours());\n const minutes = pad(date.getUTCMinutes());\n const seconds = pad(date.getUTCSeconds());\n value = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n return `'${value}'`;\n } else if (this.iof(model, column, XqlBoolean)) {\n return value ? 1 : 0;\n }\n } catch (error: any) {\n throw new XansqlError({\n message: `${error.message} (in column ${model.table}.${column})`,\n model: model.table,\n column: column\n });\n }\n }\n\n static fromSql(model: Model, column: string, value: any) {\n const field = model.schema[column];\n if (!field) throw new Error(`Column ${column} does not exist in model ${model.table}`);\n if (value === null || value === undefined) return null\n\n if (this.iof(model, column, XqlIDField, XqlNumber, XqlString, XqlFile, XqlEnum)) {\n return value\n } else if (this.iof(model, column, XqlObject, XqlRecord, XqlArray, XqlTuple, XqlUnion)) {\n return JSON.parse(value);\n } else if (this.iof(model, column, XqlDate)) {\n return new Date(value);\n } else if (this.iof(model, column, XqlBoolean)) {\n return Boolean(value);\n }\n\n return value;\n }\n\n}\n\nexport default ValueFormatter;"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ValueFormatter.mjs","sources":["../../../src/model/include/ValueFormatter.ts"],"sourcesContent":["import Model from \"..\";\nimport XansqlError from \"../../core/XansqlError\";\nimport { iof } from \"../../utils\";\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\";\n\nclass ValueFormatter {\n\n private static escape(value: string) {\n if (value == null) return ''\n let s = String(value)\n\n // Standard SQL: escape single quotes by doubling them\n s = s.replace(/'/g, \"''\")\n\n // Guard against control chars and backslashes (safer across engines)\n s = s\n .replace(/\\\\/g, '\\\\\\\\') // backslash\n .replace(/\\x00/g, '\\\\0') // null byte\n .replace(/\\n/g, '\\\\n') // newline\n .replace(/\\r/g, '\\\\r') // carriage return\n .replace(/\\t/g, '\\\\t') // tab\n .replace(/\\x08/g, '\\\\b') // backspace\n .replace(/\\x1a/g, '\\\\Z') // Ctrl+Z (notably MySQL)\n\n return s\n }\n\n static toSql(model: Model, column: string, value: any) {\n const field = model.schema[column];\n if (!field) throw new XansqlError({\n message: `Column ${column} does not exist in model ${model.table}`,\n model: model.table,\n column: column\n });\n try {\n value = field.parse(value);\n const meta = field.meta || {};\n if (value === undefined || value === null) {\n if (meta.unique) {\n return ''\n }\n return 'NULL';\n } else if (iof(field, XqlIDField, XqlNumber, XqlSchema)) {\n return value\n } else if (iof(field, XqlFile)) {\n return `'${value.name}'`;\n } else if (iof(field, XqlString, XqlEnum)) {\n return `'${this.escape(value)}'`;\n } else if (iof(field, XqlObject, XqlRecord, XqlArray, XqlTuple, XqlUnion)) {\n value = JSON.stringify(value);\n return `'${this.escape(value)}'`;\n } else if (iof(field, XqlDate)) {\n if (iof(value, String)) {\n value = new Date(value as any)\n }\n if (!iof(value, Date) || isNaN(value.getTime())) {\n throw new Error(`Invalid date value for column ${column}: ${value}`);\n }\n\n const pad = (n: number) => n.toString().padStart(2, '0');\n let date = value as Date;\n const year = date.getUTCFullYear();\n const month = pad(date.getUTCMonth() + 1); // months are 0-indexed\n const day = pad(date.getUTCDate());\n const hours = pad(date.getUTCHours());\n const minutes = pad(date.getUTCMinutes());\n const seconds = pad(date.getUTCSeconds());\n value = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n return `'${value}'`;\n } else if (iof(model, column, XqlBoolean)) {\n return value ? 1 : 0;\n }\n } catch (error: any) {\n throw new XansqlError({\n message: `${model.table}.${column}: ${error.message.toLowerCase()}`,\n model: model.table,\n column: column\n });\n }\n }\n\n static fromSql(model: Model, column: string, value: any) {\n const field = model.schema[column];\n if (!field) throw new Error(`Column ${column} does not exist in model ${model.table}`);\n if (value === null || value === undefined) return null\n\n if (iof(model, column, XqlIDField, XqlNumber, XqlString, XqlFile, XqlEnum)) {\n return value\n } else if (iof(model, column, XqlObject, XqlRecord, XqlArray, XqlTuple, XqlUnion)) {\n return JSON.parse(value);\n } else if (iof(model, column, XqlDate)) {\n return new Date(value);\n } else if (iof(model, column, XqlBoolean)) {\n return Boolean(value);\n }\n\n return value;\n }\n\n static getDefaultSql(model: Model, column: string) {\n const field = model.schema[column];\n if (!field) throw new XansqlError({\n message: `Column ${column} does not exist in model ${model.table}`,\n model: model.table,\n column\n });\n\n try {\n let value = field.parse(undefined);\n const meta = field.meta || {};\n if (!meta.optional) {\n return '';\n }\n\n if (value === undefined || value === null) {\n return 'DEFAULT NULL';\n } else if (iof(field, XqlIDField, XqlNumber, XqlSchema)) {\n return `DEFAULT ${value}`;\n } else if (iof(field, XqlString, XqlEnum, XqlFile)) {\n return `DEFAULT '${this.escape(value)}'`;\n } else if (iof(field, XqlObject, XqlRecord, XqlArray, XqlTuple, XqlUnion)) {\n value = JSON.stringify(value);\n return `DEFAULT '${this.escape(value)}'`;\n } else if (iof(field, XqlDate)) {\n const c = new Date()\n let v\n if (c.toISOString() === value.toISOString()) {\n v = `DEFAULT CURRENT_TIMESTAMP`;\n } else {\n v = `DEFAULT '${value}'`;\n }\n if (meta.update) {\n v = ` ${v} ON UPDATE CURRENT_TIMESTAMP`;\n }\n return v\n } else if (iof(field, XqlBoolean)) {\n return value ? 'DEFAULT 1' : 'DEFAULT 0';\n }\n } catch (error: any) {\n throw new XansqlError({\n message: `Failed to generate default SQL for ${model.table}.${column}: ${error.message}`,\n model: model.table,\n column\n });\n }\n\n return ''; // fallback: no default\n }\n\n\n}\n\nexport default ValueFormatter;"],"names":[],"mappings":"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"}
|
package/model/index.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var core_XansqlError = require('../core/XansqlError.cjs');
|
|
4
|
+
var utils_index = require('../utils/index.cjs');
|
|
4
5
|
var model_Args_RelationExcuteArgs = require('./Args/RelationExcuteArgs.cjs');
|
|
5
6
|
var model_Base = require('./Base.cjs');
|
|
6
7
|
var model_Executer_Aggregate_index = require('./Executer/Aggregate/index.cjs');
|
|
@@ -12,7 +13,7 @@ var model_Executer_Update_index = require('./Executer/Update/index.cjs');
|
|
|
12
13
|
class Model extends model_Base {
|
|
13
14
|
async create(args) {
|
|
14
15
|
const xansql = this.xansql;
|
|
15
|
-
const isRelArgs = args
|
|
16
|
+
const isRelArgs = utils_index.iof(args, model_Args_RelationExcuteArgs);
|
|
16
17
|
if (isRelArgs)
|
|
17
18
|
args = args.args;
|
|
18
19
|
try {
|
|
@@ -33,7 +34,7 @@ class Model extends model_Base {
|
|
|
33
34
|
if (!isRelArgs)
|
|
34
35
|
await xansql.XansqlTransaction.rollback();
|
|
35
36
|
let errors = {};
|
|
36
|
-
if (error
|
|
37
|
+
if (utils_index.iof(error, Array) && utils_index.iof(error[0], core_XansqlError)) {
|
|
37
38
|
for (let err of error) {
|
|
38
39
|
errors[err.column] = err.message;
|
|
39
40
|
}
|
|
@@ -46,7 +47,7 @@ class Model extends model_Base {
|
|
|
46
47
|
}
|
|
47
48
|
async update(args) {
|
|
48
49
|
const xansql = this.xansql;
|
|
49
|
-
const isRelArgs = args
|
|
50
|
+
const isRelArgs = utils_index.iof(args, model_Args_RelationExcuteArgs);
|
|
50
51
|
if (isRelArgs)
|
|
51
52
|
args = args.args;
|
|
52
53
|
try {
|
|
@@ -66,7 +67,7 @@ class Model extends model_Base {
|
|
|
66
67
|
if (!isRelArgs)
|
|
67
68
|
await xansql.XansqlTransaction.rollback();
|
|
68
69
|
let errors = {};
|
|
69
|
-
if (error
|
|
70
|
+
if (utils_index.iof(error, Array) && utils_index.iof(error[0], core_XansqlError)) {
|
|
70
71
|
for (let err of error) {
|
|
71
72
|
errors[err.column] = err.message;
|
|
72
73
|
}
|
|
@@ -79,7 +80,7 @@ class Model extends model_Base {
|
|
|
79
80
|
}
|
|
80
81
|
async delete(args) {
|
|
81
82
|
const xansql = this.xansql;
|
|
82
|
-
const isRelArgs = args
|
|
83
|
+
const isRelArgs = utils_index.iof(args, model_Args_RelationExcuteArgs);
|
|
83
84
|
if (isRelArgs)
|
|
84
85
|
args = args.args;
|
|
85
86
|
try {
|
|
@@ -102,7 +103,7 @@ class Model extends model_Base {
|
|
|
102
103
|
}
|
|
103
104
|
}
|
|
104
105
|
async find(args) {
|
|
105
|
-
const isRelArgs = args
|
|
106
|
+
const isRelArgs = utils_index.iof(args, model_Args_RelationExcuteArgs);
|
|
106
107
|
if (isRelArgs)
|
|
107
108
|
args = args.args;
|
|
108
109
|
args = await this.callHook("beforeFind", args) || args;
|
|
@@ -136,7 +137,7 @@ class Model extends model_Base {
|
|
|
136
137
|
}
|
|
137
138
|
// Helpers Methods
|
|
138
139
|
async aggregate(args) {
|
|
139
|
-
const isRelArgs = args
|
|
140
|
+
const isRelArgs = utils_index.iof(args, model_Args_RelationExcuteArgs);
|
|
140
141
|
if (isRelArgs)
|
|
141
142
|
args = args.args;
|
|
142
143
|
args = await this.callHook("beforeAggregate", args) || args;
|
package/model/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/model/index.ts"],"sourcesContent":["import XansqlError from \"../core/XansqlError\";\nimport RelationExecuteArgs from \"./Args/RelationExcuteArgs\";\nimport ModelBase from \"./Base\";\nimport AggregateExecuter from \"./Executer/Aggregate\";\nimport CreateExecuter from \"./Executer/Create\";\nimport DeleteExecuter from \"./Executer/Delete\";\nimport FindExecuter from \"./Executer/Find\";\nimport UpdateExecuter from \"./Executer/Update\";\nimport { AggregateArgsType, CreateArgsType, DeleteArgsType, FindArgsType, UpdateArgsType, WhereArgsType } from \"./types\";\n\nclass Model extends ModelBase {\n\n async create(args: CreateArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n args = await this.callHook(\"beforeCreate\", args) || args\n\n // event emit BEFORE_CREATE\n const executer = new CreateExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_CREATE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"CREATE\", { model: this, results, args });\n\n results = await this.callHook(\"afterCreate\", results, args) || results\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error: any) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n let errors: { [key: string]: string } = {}\n if (error instanceof Array && error[0] instanceof XansqlError) {\n for (let err of error) {\n errors[err.column] = err.message;\n }\n } else {\n errors[\"create\"] = error.message;\n }\n throw error\n }\n }\n\n async update(args: UpdateArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n\n args = await this.callHook(\"beforeUpdate\", args) || args\n const executer = new UpdateExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_UPDATE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"UPDATE\", { model: this, results, args });\n results = await this.callHook(\"afterUpdate\", results, args) || results\n\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error: any) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n let errors: { [key: string]: string } = {}\n if (error instanceof Array && error[0] instanceof XansqlError) {\n for (let err of error) {\n errors[err.column] = err.message;\n }\n } else {\n errors[\"update\"] = error.message;\n }\n throw errors\n }\n }\n\n async delete(args: DeleteArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n\n args = await this.callHook(\"beforeDelete\", args) || args\n const executer = new DeleteExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_DELETE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"DELETE\", { model: this, results, args });\n results = await this.callHook(\"afterDelete\", results, args) || results\n\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async find(args: FindArgsType): Promise<any[]> {\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n\n args = await this.callHook(\"beforeFind\", args) || args\n const executer = new FindExecuter(this, async (row: any) => {\n return await this.callHook('transform', row) || row\n });\n await this.xansql.EventManager.emit(\"BEFORE_FIND\", { model: this, args });\n let results = await executer.execute(args);\n await this.xansql.EventManager.emit(\"FIND\", { model: this, results: results, args });\n results = await this.callHook(\"afterFind\", results, args) || results\n return results\n }\n\n async findOne(args: FindArgsType): Promise<any | null> {\n const results = await this.find({\n ...args,\n limit: {\n take: 1,\n skip: 0\n }\n })\n return results.length ? results[0] : null\n }\n\n async findByID(id: number | string): Promise<any | null> {\n const results = await this.find({\n where: {\n [this.IDColumn]: id\n },\n limit: {\n take: 1,\n skip: 0\n }\n })\n return results.length ? results[0] : null\n }\n\n // Helpers Methods\n\n async aggregate(args: AggregateArgsType): Promise<any[]> {\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n args = await this.callHook(\"beforeAggregate\", args) || args\n const executer = new AggregateExecuter(this);\n await this.xansql.EventManager.emit(\"BEFORE_AGGREGATE\", { model: this, args });\n let results = await executer.execute(args);\n await this.xansql.EventManager.emit(\"AGGREGATE\", { model: this, results, args });\n\n results = await this.callHook(\"afterAggregate\", results, args) || results\n return results\n }\n\n\n async paginate(page: number, args?: Omit<FindArgsType, \"limit\"> & { perpage?: number }) {\n const perpage = args?.perpage || 20;\n const skip = (page - 1) * perpage;\n const results = await this.find({\n ...args,\n limit: {\n take: perpage,\n skip\n }\n })\n const total = await this.count(args?.where || {})\n return {\n page,\n perpage,\n pagecount: Math.ceil(total / perpage),\n rowcount: total,\n results\n }\n }\n\n async count(where: WhereArgsType): Promise<number> {\n const res: any[] = await this.aggregate({\n where,\n select: {\n [this.IDColumn]: {\n count: true\n }\n }\n })\n return res.length ? res[0][`count_${this.IDColumn}`] : 0\n }\n\n async min(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n min: true\n }\n }\n })\n return res.length ? res[0][`min_${column}`] : 0\n }\n\n async max(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n max: true\n }\n }\n })\n return res.length ? res[0][`max_${column}`] : 0\n }\n\n async sum(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n sum: true\n }\n }\n })\n return res.length ? res[0][`sum_${column}`] : 0\n }\n\n async avg(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n avg: true\n }\n }\n })\n return res.length ? res[0][`avg_${column}`] : 0\n }\n\n async exists(where: WhereArgsType): Promise<boolean> {\n return !!(await this.count({ where }))\n }\n\n async truncate() {\n await this.execute(`TRUNCATE TABLE ${this.table}`);\n }\n\n\n // end Helpers Methods\n // async createIndex(column: string) {\n // const { IndexMigration } = this.xansql.XansqlMigration.TableMigration;\n // const indexsql = IndexMigration.buildCreate(this.table, column);\n // try {\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexsql, executeId);\n // } catch (error) {\n // throw new Error(\"Index already exists\");\n // }\n // }\n\n // async dropIndex(column: string) {\n // const { IndexMigration } = this.xansql.XansqlMigration.TableMigration;\n // const indexsql = IndexMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexsql, executeId);\n // }\n\n // async addColumn(column: string) {\n // const { TableMigration } = this.xansql.XansqlMigration;\n // if (!(column in this.schema)) {\n // throw new Error(`Column ${column} already exists in table ${this.table}`);\n // }\n\n // const field = this.schema[column] as XqlFields;\n // if (!field) {\n // throw new Error(`Field definition for column ${column} is missing in schema for table ${this.table}`);\n // }\n // const sqlColumn = TableMigration.buildColumn(this.table, column);\n // let sql = `ALTER TABLE ${this.table} ADD COLUMN ${sqlColumn};`;\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // this.schema[column] = field;\n\n // // add foreign key if exists\n // const meta = field.meta || {};\n // if (Foreign.isSchema(field)) {\n // const info = Foreign.get(this, column)\n // const fkSql = TableMigration.ForeignKeyMigration.buildCreate(this.table, column, info.table, info.relation.main);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(`ALTER TABLE ${this.table} ADD ${fkSql};`, executeId);\n // }\n\n // // add index if exists\n // if (meta.index) {\n // const indexSql = TableMigration.IndexMigration.buildCreate(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexSql, executeId);\n // }\n\n // }\n\n // async renameColumn(oldColumn: string, newColumn: string) {\n // if (!(oldColumn in this.schema)) {\n // throw new Error(`Column ${oldColumn} does not exist in table ${this.table}`);\n // }\n // if (newColumn in this.schema) {\n // throw new Error(`Column ${newColumn} already exists in table ${this.table}`);\n // }\n // const engine = this.xansql.config.dialect.engine;\n // let sql = ``;\n\n // if (engine === 'mysql') {\n // sql = `ALTER TABLE ${this.table} CHANGE COLUMN ${oldColumn} ${newColumn} ${this.xansql.XansqlMigration.TableMigration.buildColumn(this.table, oldColumn)};`;\n // } else if (engine === 'postgresql') {\n // sql = `ALTER TABLE ${this.table} RENAME COLUMN ${oldColumn} TO ${newColumn};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming columns is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"RENAME_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // const field = this.schema[oldColumn];\n // delete this.schema[oldColumn];\n // this.schema[newColumn] = field;\n\n // // rename foreign key if exists\n // const fieldMeta = field.meta || {};\n // if (Foreign.isSchema(field)) {\n // const fkOld = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.identifier(this.table, oldColumn);\n // const fkNew = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.identifier(this.table, newColumn);\n // let fsql = ``;\n // if (engine === 'mysql') {\n // fsql = `ALTER TABLE ${this.table} DROP FOREIGN KEY ${fkOld}, ADD CONSTRAINT ${fkNew} FOREIGN KEY (${newColumn}) REFERENCES ${Foreign.get(this, newColumn).table}(${Foreign.get(this, newColumn).relation.main});`;\n // } else if (engine === 'postgresql') {\n // fsql = `ALTER TABLE ${this.table} RENAME CONSTRAINT ${fkOld} TO ${fkNew};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming foreign keys is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(fsql, executeId);\n // }\n\n // // rename index if exists\n // if (fieldMeta.index) {\n // const indexOld = this.xansql.XansqlMigration.TableMigration.IndexMigration.identifier(this.table, oldColumn);\n // const indexNew = this.xansql.XansqlMigration.TableMigration.IndexMigration.identifier(this.table, newColumn);\n // let isql = ``;\n // if (engine === 'mysql') {\n // isql = `ALTER TABLE ${this.table} DROP INDEX ${indexOld}, ADD INDEX ${indexNew} (${newColumn});`;\n // } else if (engine === 'postgresql') {\n // isql = `ALTER INDEX ${indexOld} RENAME TO ${indexNew};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming indexes is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(isql, executeId);\n // }\n // }\n\n // async dropColumn(column: string) {\n\n // let sql = `ALTER TABLE ${this.table} DROP COLUMN ${column};`;\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // const field = this.schema[column];\n // delete this.schema[column];\n // const fieldMeta = field.meta || {};\n\n // // drop foreign key if exists\n // if (Foreign.isSchema(field)) {\n // const fkSql = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(fkSql, executeId);\n // }\n\n // // drop index if exists\n // if (fieldMeta.index) {\n // const indexSql = this.xansql.XansqlMigration.TableMigration.IndexMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexSql, executeId);\n // }\n // }\n\n}\n\nexport default Model;\n"],"names":["ModelBase","RelationExecuteArgs","CreateExecuter","XansqlError","UpdateExecuter","DeleteExecuter","FindExecuter","AggregateExecuter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/model/index.ts"],"sourcesContent":["import XansqlError from \"../core/XansqlError\";\nimport { iof } from \"../utils\";\nimport RelationExecuteArgs from \"./Args/RelationExcuteArgs\";\nimport ModelBase from \"./Base\";\nimport AggregateExecuter from \"./Executer/Aggregate\";\nimport CreateExecuter from \"./Executer/Create\";\nimport DeleteExecuter from \"./Executer/Delete\";\nimport FindExecuter from \"./Executer/Find\";\nimport UpdateExecuter from \"./Executer/Update\";\nimport { AggregateArgsType, CreateArgsType, DeleteArgsType, FindArgsType, UpdateArgsType, WhereArgsType } from \"./types\";\n\nclass Model extends ModelBase {\n\n async create(args: CreateArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = iof(args, RelationExecuteArgs)\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n args = await this.callHook(\"beforeCreate\", args) || args\n\n // event emit BEFORE_CREATE\n const executer = new CreateExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_CREATE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"CREATE\", { model: this, results, args });\n\n results = await this.callHook(\"afterCreate\", results, args) || results\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error: any) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n let errors: { [key: string]: string } = {}\n if (iof(error, Array) && iof(error[0], XansqlError)) {\n for (let err of error) {\n errors[err.column] = err.message;\n }\n } else {\n errors[\"create\"] = error.message;\n }\n throw error\n }\n }\n\n async update(args: UpdateArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = iof(args, RelationExecuteArgs)\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n\n args = await this.callHook(\"beforeUpdate\", args) || args\n const executer = new UpdateExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_UPDATE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"UPDATE\", { model: this, results, args });\n results = await this.callHook(\"afterUpdate\", results, args) || results\n\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error: any) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n let errors: { [key: string]: string } = {}\n if (iof(error, Array) && iof(error[0], XansqlError)) {\n for (let err of error) {\n errors[err.column] = err.message;\n }\n } else {\n errors[\"update\"] = error.message;\n }\n throw errors\n }\n }\n\n async delete(args: DeleteArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = iof(args, RelationExecuteArgs)\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n\n args = await this.callHook(\"beforeDelete\", args) || args\n const executer = new DeleteExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_DELETE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"DELETE\", { model: this, results, args });\n results = await this.callHook(\"afterDelete\", results, args) || results\n\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async find(args: FindArgsType): Promise<any[]> {\n const isRelArgs = iof(args, RelationExecuteArgs)\n if (isRelArgs) args = (args as any).args\n\n args = await this.callHook(\"beforeFind\", args) || args\n const executer = new FindExecuter(this, async (row: any) => {\n return await this.callHook('transform', row) || row\n });\n await this.xansql.EventManager.emit(\"BEFORE_FIND\", { model: this, args });\n let results = await executer.execute(args);\n await this.xansql.EventManager.emit(\"FIND\", { model: this, results: results, args });\n results = await this.callHook(\"afterFind\", results, args) || results\n return results\n }\n\n async findOne(args: FindArgsType): Promise<any | null> {\n const results = await this.find({\n ...args,\n limit: {\n take: 1,\n skip: 0\n }\n })\n return results.length ? results[0] : null\n }\n\n async findByID(id: number | string): Promise<any | null> {\n const results = await this.find({\n where: {\n [this.IDColumn]: id\n },\n limit: {\n take: 1,\n skip: 0\n }\n })\n return results.length ? results[0] : null\n }\n\n // Helpers Methods\n\n async aggregate(args: AggregateArgsType): Promise<any[]> {\n const isRelArgs = iof(args, RelationExecuteArgs)\n if (isRelArgs) args = (args as any).args\n args = await this.callHook(\"beforeAggregate\", args) || args\n const executer = new AggregateExecuter(this);\n await this.xansql.EventManager.emit(\"BEFORE_AGGREGATE\", { model: this, args });\n let results = await executer.execute(args);\n await this.xansql.EventManager.emit(\"AGGREGATE\", { model: this, results, args });\n\n results = await this.callHook(\"afterAggregate\", results, args) || results\n return results\n }\n\n\n async paginate(page: number, args?: Omit<FindArgsType, \"limit\"> & { perpage?: number }) {\n const perpage = args?.perpage || 20;\n const skip = (page - 1) * perpage;\n const results = await this.find({\n ...args,\n limit: {\n take: perpage,\n skip\n }\n })\n const total = await this.count(args?.where || {})\n return {\n page,\n perpage,\n pagecount: Math.ceil(total / perpage),\n rowcount: total,\n results\n }\n }\n\n async count(where: WhereArgsType): Promise<number> {\n const res: any[] = await this.aggregate({\n where,\n select: {\n [this.IDColumn]: {\n count: true\n }\n }\n })\n return res.length ? res[0][`count_${this.IDColumn}`] : 0\n }\n\n async min(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n min: true\n }\n }\n })\n return res.length ? res[0][`min_${column}`] : 0\n }\n\n async max(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n max: true\n }\n }\n })\n return res.length ? res[0][`max_${column}`] : 0\n }\n\n async sum(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n sum: true\n }\n }\n })\n return res.length ? res[0][`sum_${column}`] : 0\n }\n\n async avg(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n avg: true\n }\n }\n })\n return res.length ? res[0][`avg_${column}`] : 0\n }\n\n async exists(where: WhereArgsType): Promise<boolean> {\n return !!(await this.count({ where }))\n }\n\n async truncate() {\n await this.execute(`TRUNCATE TABLE ${this.table}`);\n }\n\n\n // end Helpers Methods\n // async createIndex(column: string) {\n // const { IndexMigration } = this.xansql.XansqlMigration.TableMigration;\n // const indexsql = IndexMigration.buildCreate(this.table, column);\n // try {\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexsql, executeId);\n // } catch (error) {\n // throw new Error(\"Index already exists\");\n // }\n // }\n\n // async dropIndex(column: string) {\n // const { IndexMigration } = this.xansql.XansqlMigration.TableMigration;\n // const indexsql = IndexMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexsql, executeId);\n // }\n\n // async addColumn(column: string) {\n // const { TableMigration } = this.xansql.XansqlMigration;\n // if (!(column in this.schema)) {\n // throw new Error(`Column ${column} already exists in table ${this.table}`);\n // }\n\n // const field = this.schema[column] as XqlFields;\n // if (!field) {\n // throw new Error(`Field definition for column ${column} is missing in schema for table ${this.table}`);\n // }\n // const sqlColumn = TableMigration.buildColumn(this.table, column);\n // let sql = `ALTER TABLE ${this.table} ADD COLUMN ${sqlColumn};`;\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // this.schema[column] = field;\n\n // // add foreign key if exists\n // const meta = field.meta || {};\n // if (Foreign.isSchema(field)) {\n // const info = Foreign.get(this, column)\n // const fkSql = TableMigration.ForeignKeyMigration.buildCreate(this.table, column, info.table, info.relation.main);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(`ALTER TABLE ${this.table} ADD ${fkSql};`, executeId);\n // }\n\n // // add index if exists\n // if (meta.index) {\n // const indexSql = TableMigration.IndexMigration.buildCreate(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexSql, executeId);\n // }\n\n // }\n\n // async renameColumn(oldColumn: string, newColumn: string) {\n // if (!(oldColumn in this.schema)) {\n // throw new Error(`Column ${oldColumn} does not exist in table ${this.table}`);\n // }\n // if (newColumn in this.schema) {\n // throw new Error(`Column ${newColumn} already exists in table ${this.table}`);\n // }\n // const engine = this.xansql.config.dialect.engine;\n // let sql = ``;\n\n // if (engine === 'mysql') {\n // sql = `ALTER TABLE ${this.table} CHANGE COLUMN ${oldColumn} ${newColumn} ${this.xansql.XansqlMigration.TableMigration.buildColumn(this.table, oldColumn)};`;\n // } else if (engine === 'postgresql') {\n // sql = `ALTER TABLE ${this.table} RENAME COLUMN ${oldColumn} TO ${newColumn};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming columns is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"RENAME_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // const field = this.schema[oldColumn];\n // delete this.schema[oldColumn];\n // this.schema[newColumn] = field;\n\n // // rename foreign key if exists\n // const fieldMeta = field.meta || {};\n // if (Foreign.isSchema(field)) {\n // const fkOld = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.identifier(this.table, oldColumn);\n // const fkNew = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.identifier(this.table, newColumn);\n // let fsql = ``;\n // if (engine === 'mysql') {\n // fsql = `ALTER TABLE ${this.table} DROP FOREIGN KEY ${fkOld}, ADD CONSTRAINT ${fkNew} FOREIGN KEY (${newColumn}) REFERENCES ${Foreign.get(this, newColumn).table}(${Foreign.get(this, newColumn).relation.main});`;\n // } else if (engine === 'postgresql') {\n // fsql = `ALTER TABLE ${this.table} RENAME CONSTRAINT ${fkOld} TO ${fkNew};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming foreign keys is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(fsql, executeId);\n // }\n\n // // rename index if exists\n // if (fieldMeta.index) {\n // const indexOld = this.xansql.XansqlMigration.TableMigration.IndexMigration.identifier(this.table, oldColumn);\n // const indexNew = this.xansql.XansqlMigration.TableMigration.IndexMigration.identifier(this.table, newColumn);\n // let isql = ``;\n // if (engine === 'mysql') {\n // isql = `ALTER TABLE ${this.table} DROP INDEX ${indexOld}, ADD INDEX ${indexNew} (${newColumn});`;\n // } else if (engine === 'postgresql') {\n // isql = `ALTER INDEX ${indexOld} RENAME TO ${indexNew};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming indexes is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(isql, executeId);\n // }\n // }\n\n // async dropColumn(column: string) {\n\n // let sql = `ALTER TABLE ${this.table} DROP COLUMN ${column};`;\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // const field = this.schema[column];\n // delete this.schema[column];\n // const fieldMeta = field.meta || {};\n\n // // drop foreign key if exists\n // if (Foreign.isSchema(field)) {\n // const fkSql = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(fkSql, executeId);\n // }\n\n // // drop index if exists\n // if (fieldMeta.index) {\n // const indexSql = this.xansql.XansqlMigration.TableMigration.IndexMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexSql, executeId);\n // }\n // }\n\n}\n\nexport default Model;\n"],"names":["ModelBase","iof","RelationExecuteArgs","CreateExecuter","XansqlError","UpdateExecuter","DeleteExecuter","FindExecuter","AggregateExecuter"],"mappings":";;;;;;;;;;;;AAWA,MAAM,KAAM,SAAQA,UAAS,CAAA;IAE1B,MAAM,MAAM,CAAC,IAAoB,EAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;QAC1B,MAAM,SAAS,GAAGC,eAAG,CAAC,IAAI,EAAEC,6BAAmB,CAAC;AAChD,QAAA,IAAI,SAAS;AAAE,YAAA,IAAI,GAAI,IAAY,CAAC,IAAI;AAExC,QAAA,IAAI;AACD,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE;AACtD,YAAA,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,IAAI;;AAGxD,YAAA,MAAM,QAAQ,GAAG,IAAIC,2BAAc,CAAC,IAAI,CAAC;AACzC,YAAA,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACtE,IAAI,OAAO,GAAQ,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AAC/C,YAAA,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAExE,YAAA,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,OAAO;AACtE,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE;AACvD,YAAA,OAAO,OAAO;QACjB;QAAE,OAAO,KAAU,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE;YACzD,IAAI,MAAM,GAA8B,EAAE;AAC1C,YAAA,IAAIF,eAAG,CAAC,KAAK,EAAE,KAAK,CAAC,IAAIA,eAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAEG,gBAAW,CAAC,EAAE;AAClD,gBAAA,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE;oBACpB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO;gBACnC;YACH;iBAAO;AACJ,gBAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,OAAO;YACnC;AACA,YAAA,MAAM,KAAK;QACd;IACH;IAEA,MAAM,MAAM,CAAC,IAAoB,EAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;QAC1B,MAAM,SAAS,GAAGH,eAAG,CAAC,IAAI,EAAEC,6BAAmB,CAAC;AAChD,QAAA,IAAI,SAAS;AAAE,YAAA,IAAI,GAAI,IAAY,CAAC,IAAI;AAExC,QAAA,IAAI;AACD,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE;AAEtD,YAAA,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,IAAI;AACxD,YAAA,MAAM,QAAQ,GAAG,IAAIG,2BAAc,CAAC,IAAI,CAAC;AACzC,YAAA,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACtE,IAAI,OAAO,GAAQ,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AAC/C,YAAA,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxE,YAAA,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,OAAO;AAEtE,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE;AACvD,YAAA,OAAO,OAAO;QACjB;QAAE,OAAO,KAAU,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE;YACzD,IAAI,MAAM,GAA8B,EAAE;AAC1C,YAAA,IAAIJ,eAAG,CAAC,KAAK,EAAE,KAAK,CAAC,IAAIA,eAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAEG,gBAAW,CAAC,EAAE;AAClD,gBAAA,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE;oBACpB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO;gBACnC;YACH;iBAAO;AACJ,gBAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,OAAO;YACnC;AACA,YAAA,MAAM,MAAM;QACf;IACH;IAEA,MAAM,MAAM,CAAC,IAAoB,EAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;QAC1B,MAAM,SAAS,GAAGH,eAAG,CAAC,IAAI,EAAEC,6BAAmB,CAAC;AAChD,QAAA,IAAI,SAAS;AAAE,YAAA,IAAI,GAAI,IAAY,CAAC,IAAI;AAExC,QAAA,IAAI;AACD,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE;AAEtD,YAAA,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,IAAI;AACxD,YAAA,MAAM,QAAQ,GAAG,IAAII,2BAAc,CAAC,IAAI,CAAC;AACzC,YAAA,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACtE,IAAI,OAAO,GAAQ,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AAC/C,YAAA,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxE,YAAA,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,OAAO;AAEtE,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE;AACvD,YAAA,OAAO,OAAO;QACjB;QAAE,OAAO,KAAK,EAAE;AACb,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE;AACzD,YAAA,MAAM,KAAK;QACd;IACH;IAEA,MAAM,IAAI,CAAC,IAAkB,EAAA;QAC1B,MAAM,SAAS,GAAGL,eAAG,CAAC,IAAI,EAAEC,6BAAmB,CAAC;AAChD,QAAA,IAAI,SAAS;AAAE,YAAA,IAAI,GAAI,IAAY,CAAC,IAAI;AAExC,QAAA,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,IAAI;QACtD,MAAM,QAAQ,GAAG,IAAIK,yBAAY,CAAC,IAAI,EAAE,OAAO,GAAQ,KAAI;YACxD,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,GAAG;AACtD,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACzE,IAAI,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;QAC1C,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACpF,QAAA,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,OAAO;AACpE,QAAA,OAAO,OAAO;IACjB;IAEA,MAAM,OAAO,CAAC,IAAkB,EAAA;QAC7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACzB,IAAI,CAAA,EAAA,EACP,KAAK,EAAE;AACJ,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,IAAI,EAAE;AACR,aAAA,EAAA,CAAA,CACF;AACF,QAAA,OAAO,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IAC5C;IAEA,MAAM,QAAQ,CAAC,EAAmB,EAAA;AAC/B,QAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;AAC7B,YAAA,KAAK,EAAE;AACJ,gBAAA,CAAC,IAAI,CAAC,QAAQ,GAAG;AACnB,aAAA;AACD,YAAA,KAAK,EAAE;AACJ,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,IAAI,EAAE;AACR;AACH,SAAA,CAAC;AACF,QAAA,OAAO,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IAC5C;;IAIA,MAAM,SAAS,CAAC,IAAuB,EAAA;QACpC,MAAM,SAAS,GAAGN,eAAG,CAAC,IAAI,EAAEC,6BAAmB,CAAC;AAChD,QAAA,IAAI,SAAS;AAAE,YAAA,IAAI,GAAI,IAAY,CAAC,IAAI;AACxC,QAAA,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,IAAI;AAC3D,QAAA,MAAM,QAAQ,GAAG,IAAIM,8BAAiB,CAAC,IAAI,CAAC;AAC5C,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC9E,IAAI,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;QAC1C,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAEhF,QAAA,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,OAAO;AACzE,QAAA,OAAO,OAAO;IACjB;AAGA,IAAA,MAAM,QAAQ,CAAC,IAAY,EAAE,IAAyD,EAAA;AACnF,QAAA,MAAM,OAAO,GAAG,CAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJ,IAAI,CAAE,OAAO,KAAI,EAAE;QACnC,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,OAAO;QACjC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACzB,IAAI,CAAA,EAAA,EACP,KAAK,EAAE;AACJ,gBAAA,IAAI,EAAE,OAAO;gBACb;AACF,aAAA,EAAA,CAAA,CACF;AACF,QAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,KAAI,EAAE,CAAC;QACjD,OAAO;YACJ,IAAI;YACJ,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;AACrC,YAAA,QAAQ,EAAE,KAAK;YACf;SACF;IACJ;IAEA,MAAM,KAAK,CAAC,KAAoB,EAAA;AAC7B,QAAA,MAAM,GAAG,GAAU,MAAM,IAAI,CAAC,SAAS,CAAC;YACrC,KAAK;AACL,YAAA,MAAM,EAAE;AACL,gBAAA,CAAC,IAAI,CAAC,QAAQ,GAAG;AACd,oBAAA,KAAK,EAAE;AACT;AACH;AACH,SAAA,CAAC;QACF,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,MAAA,EAAS,IAAI,CAAC,QAAQ,CAAA,CAAE,CAAC,GAAG,CAAC;IAC3D;AAEA,IAAA,MAAM,GAAG,CAAC,MAAc,EAAE,KAAoB,EAAA;QAC3C,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;YAC3B,MAAM,IAAIJ,gBAAW,CAAC;AACnB,gBAAA,OAAO,EAAE,CAAA,QAAA,EAAW,MAAM,8BAA8B,IAAI,CAAC,KAAK,CAAA,CAAA,CAAG;gBACrE,KAAK,EAAE,IAAI,CAAC,KAAK;AACnB,aAAA,CAAC;QACL;AACA,QAAA,MAAM,GAAG,GAAU,MAAM,IAAI,CAAC,SAAS,CAAC;YACrC,KAAK;AACL,YAAA,MAAM,EAAE;gBACL,CAAC,MAAM,GAAG;AACP,oBAAA,GAAG,EAAE;AACP;AACH;AACH,SAAA,CAAC;AACF,QAAA,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,IAAA,EAAO,MAAM,CAAA,CAAE,CAAC,GAAG,CAAC;IAClD;AAEA,IAAA,MAAM,GAAG,CAAC,MAAc,EAAE,KAAoB,EAAA;QAC3C,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;YAC3B,MAAM,IAAIA,gBAAW,CAAC;AACnB,gBAAA,OAAO,EAAE,CAAA,QAAA,EAAW,MAAM,8BAA8B,IAAI,CAAC,KAAK,CAAA,CAAA,CAAG;gBACrE,KAAK,EAAE,IAAI,CAAC,KAAK;AACnB,aAAA,CAAC;QACL;AACA,QAAA,MAAM,GAAG,GAAU,MAAM,IAAI,CAAC,SAAS,CAAC;YACrC,KAAK;AACL,YAAA,MAAM,EAAE;gBACL,CAAC,MAAM,GAAG;AACP,oBAAA,GAAG,EAAE;AACP;AACH;AACH,SAAA,CAAC;AACF,QAAA,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,IAAA,EAAO,MAAM,CAAA,CAAE,CAAC,GAAG,CAAC;IAClD;AAEA,IAAA,MAAM,GAAG,CAAC,MAAc,EAAE,KAAoB,EAAA;QAC3C,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;YAC3B,MAAM,IAAIA,gBAAW,CAAC;AACnB,gBAAA,OAAO,EAAE,CAAA,QAAA,EAAW,MAAM,8BAA8B,IAAI,CAAC,KAAK,CAAA,CAAA,CAAG;gBACrE,KAAK,EAAE,IAAI,CAAC,KAAK;AACnB,aAAA,CAAC;QACL;AACA,QAAA,MAAM,GAAG,GAAU,MAAM,IAAI,CAAC,SAAS,CAAC;YACrC,KAAK;AACL,YAAA,MAAM,EAAE;gBACL,CAAC,MAAM,GAAG;AACP,oBAAA,GAAG,EAAE;AACP;AACH;AACH,SAAA,CAAC;AACF,QAAA,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,IAAA,EAAO,MAAM,CAAA,CAAE,CAAC,GAAG,CAAC;IAClD;AAEA,IAAA,MAAM,GAAG,CAAC,MAAc,EAAE,KAAoB,EAAA;QAC3C,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;YAC3B,MAAM,IAAIA,gBAAW,CAAC;AACnB,gBAAA,OAAO,EAAE,CAAA,QAAA,EAAW,MAAM,8BAA8B,IAAI,CAAC,KAAK,CAAA,CAAA,CAAG;gBACrE,KAAK,EAAE,IAAI,CAAC,KAAK;AACnB,aAAA,CAAC;QACL;AACA,QAAA,MAAM,GAAG,GAAU,MAAM,IAAI,CAAC,SAAS,CAAC;YACrC,KAAK;AACL,YAAA,MAAM,EAAE;gBACL,CAAC,MAAM,GAAG;AACP,oBAAA,GAAG,EAAE;AACP;AACH;AACH,SAAA,CAAC;AACF,QAAA,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,IAAA,EAAO,MAAM,CAAA,CAAE,CAAC,GAAG,CAAC;IAClD;IAEA,MAAM,MAAM,CAAC,KAAoB,EAAA;AAC9B,QAAA,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACzC;AAEA,IAAA,MAAM,QAAQ,GAAA;QACX,MAAM,IAAI,CAAC,OAAO,CAAC,CAAA,eAAA,EAAkB,IAAI,CAAC,KAAK,CAAA,CAAE,CAAC;IACrD;AAiOF;;;;"}
|
package/model/index.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import XansqlError from '../core/XansqlError.mjs';
|
|
2
|
+
import { iof } from '../utils/index.mjs';
|
|
2
3
|
import RelationExecuteArgs from './Args/RelationExcuteArgs.mjs';
|
|
3
4
|
import ModelBase from './Base.mjs';
|
|
4
5
|
import AggregateExecuter from './Executer/Aggregate/index.mjs';
|
|
@@ -10,7 +11,7 @@ import UpdateExecuter from './Executer/Update/index.mjs';
|
|
|
10
11
|
class Model extends ModelBase {
|
|
11
12
|
async create(args) {
|
|
12
13
|
const xansql = this.xansql;
|
|
13
|
-
const isRelArgs = args
|
|
14
|
+
const isRelArgs = iof(args, RelationExecuteArgs);
|
|
14
15
|
if (isRelArgs)
|
|
15
16
|
args = args.args;
|
|
16
17
|
try {
|
|
@@ -31,7 +32,7 @@ class Model extends ModelBase {
|
|
|
31
32
|
if (!isRelArgs)
|
|
32
33
|
await xansql.XansqlTransaction.rollback();
|
|
33
34
|
let errors = {};
|
|
34
|
-
if (error
|
|
35
|
+
if (iof(error, Array) && iof(error[0], XansqlError)) {
|
|
35
36
|
for (let err of error) {
|
|
36
37
|
errors[err.column] = err.message;
|
|
37
38
|
}
|
|
@@ -44,7 +45,7 @@ class Model extends ModelBase {
|
|
|
44
45
|
}
|
|
45
46
|
async update(args) {
|
|
46
47
|
const xansql = this.xansql;
|
|
47
|
-
const isRelArgs = args
|
|
48
|
+
const isRelArgs = iof(args, RelationExecuteArgs);
|
|
48
49
|
if (isRelArgs)
|
|
49
50
|
args = args.args;
|
|
50
51
|
try {
|
|
@@ -64,7 +65,7 @@ class Model extends ModelBase {
|
|
|
64
65
|
if (!isRelArgs)
|
|
65
66
|
await xansql.XansqlTransaction.rollback();
|
|
66
67
|
let errors = {};
|
|
67
|
-
if (error
|
|
68
|
+
if (iof(error, Array) && iof(error[0], XansqlError)) {
|
|
68
69
|
for (let err of error) {
|
|
69
70
|
errors[err.column] = err.message;
|
|
70
71
|
}
|
|
@@ -77,7 +78,7 @@ class Model extends ModelBase {
|
|
|
77
78
|
}
|
|
78
79
|
async delete(args) {
|
|
79
80
|
const xansql = this.xansql;
|
|
80
|
-
const isRelArgs = args
|
|
81
|
+
const isRelArgs = iof(args, RelationExecuteArgs);
|
|
81
82
|
if (isRelArgs)
|
|
82
83
|
args = args.args;
|
|
83
84
|
try {
|
|
@@ -100,7 +101,7 @@ class Model extends ModelBase {
|
|
|
100
101
|
}
|
|
101
102
|
}
|
|
102
103
|
async find(args) {
|
|
103
|
-
const isRelArgs = args
|
|
104
|
+
const isRelArgs = iof(args, RelationExecuteArgs);
|
|
104
105
|
if (isRelArgs)
|
|
105
106
|
args = args.args;
|
|
106
107
|
args = await this.callHook("beforeFind", args) || args;
|
|
@@ -134,7 +135,7 @@ class Model extends ModelBase {
|
|
|
134
135
|
}
|
|
135
136
|
// Helpers Methods
|
|
136
137
|
async aggregate(args) {
|
|
137
|
-
const isRelArgs = args
|
|
138
|
+
const isRelArgs = iof(args, RelationExecuteArgs);
|
|
138
139
|
if (isRelArgs)
|
|
139
140
|
args = args.args;
|
|
140
141
|
args = await this.callHook("beforeAggregate", args) || args;
|
package/model/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../src/model/index.ts"],"sourcesContent":["import XansqlError from \"../core/XansqlError\";\nimport RelationExecuteArgs from \"./Args/RelationExcuteArgs\";\nimport ModelBase from \"./Base\";\nimport AggregateExecuter from \"./Executer/Aggregate\";\nimport CreateExecuter from \"./Executer/Create\";\nimport DeleteExecuter from \"./Executer/Delete\";\nimport FindExecuter from \"./Executer/Find\";\nimport UpdateExecuter from \"./Executer/Update\";\nimport { AggregateArgsType, CreateArgsType, DeleteArgsType, FindArgsType, UpdateArgsType, WhereArgsType } from \"./types\";\n\nclass Model extends ModelBase {\n\n async create(args: CreateArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n args = await this.callHook(\"beforeCreate\", args) || args\n\n // event emit BEFORE_CREATE\n const executer = new CreateExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_CREATE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"CREATE\", { model: this, results, args });\n\n results = await this.callHook(\"afterCreate\", results, args) || results\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error: any) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n let errors: { [key: string]: string } = {}\n if (error instanceof Array && error[0] instanceof XansqlError) {\n for (let err of error) {\n errors[err.column] = err.message;\n }\n } else {\n errors[\"create\"] = error.message;\n }\n throw error\n }\n }\n\n async update(args: UpdateArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n\n args = await this.callHook(\"beforeUpdate\", args) || args\n const executer = new UpdateExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_UPDATE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"UPDATE\", { model: this, results, args });\n results = await this.callHook(\"afterUpdate\", results, args) || results\n\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error: any) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n let errors: { [key: string]: string } = {}\n if (error instanceof Array && error[0] instanceof XansqlError) {\n for (let err of error) {\n errors[err.column] = err.message;\n }\n } else {\n errors[\"update\"] = error.message;\n }\n throw errors\n }\n }\n\n async delete(args: DeleteArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n\n args = await this.callHook(\"beforeDelete\", args) || args\n const executer = new DeleteExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_DELETE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"DELETE\", { model: this, results, args });\n results = await this.callHook(\"afterDelete\", results, args) || results\n\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async find(args: FindArgsType): Promise<any[]> {\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n\n args = await this.callHook(\"beforeFind\", args) || args\n const executer = new FindExecuter(this, async (row: any) => {\n return await this.callHook('transform', row) || row\n });\n await this.xansql.EventManager.emit(\"BEFORE_FIND\", { model: this, args });\n let results = await executer.execute(args);\n await this.xansql.EventManager.emit(\"FIND\", { model: this, results: results, args });\n results = await this.callHook(\"afterFind\", results, args) || results\n return results\n }\n\n async findOne(args: FindArgsType): Promise<any | null> {\n const results = await this.find({\n ...args,\n limit: {\n take: 1,\n skip: 0\n }\n })\n return results.length ? results[0] : null\n }\n\n async findByID(id: number | string): Promise<any | null> {\n const results = await this.find({\n where: {\n [this.IDColumn]: id\n },\n limit: {\n take: 1,\n skip: 0\n }\n })\n return results.length ? results[0] : null\n }\n\n // Helpers Methods\n\n async aggregate(args: AggregateArgsType): Promise<any[]> {\n const isRelArgs = args instanceof RelationExecuteArgs\n if (isRelArgs) args = (args as any).args\n args = await this.callHook(\"beforeAggregate\", args) || args\n const executer = new AggregateExecuter(this);\n await this.xansql.EventManager.emit(\"BEFORE_AGGREGATE\", { model: this, args });\n let results = await executer.execute(args);\n await this.xansql.EventManager.emit(\"AGGREGATE\", { model: this, results, args });\n\n results = await this.callHook(\"afterAggregate\", results, args) || results\n return results\n }\n\n\n async paginate(page: number, args?: Omit<FindArgsType, \"limit\"> & { perpage?: number }) {\n const perpage = args?.perpage || 20;\n const skip = (page - 1) * perpage;\n const results = await this.find({\n ...args,\n limit: {\n take: perpage,\n skip\n }\n })\n const total = await this.count(args?.where || {})\n return {\n page,\n perpage,\n pagecount: Math.ceil(total / perpage),\n rowcount: total,\n results\n }\n }\n\n async count(where: WhereArgsType): Promise<number> {\n const res: any[] = await this.aggregate({\n where,\n select: {\n [this.IDColumn]: {\n count: true\n }\n }\n })\n return res.length ? res[0][`count_${this.IDColumn}`] : 0\n }\n\n async min(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n min: true\n }\n }\n })\n return res.length ? res[0][`min_${column}`] : 0\n }\n\n async max(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n max: true\n }\n }\n })\n return res.length ? res[0][`max_${column}`] : 0\n }\n\n async sum(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n sum: true\n }\n }\n })\n return res.length ? res[0][`sum_${column}`] : 0\n }\n\n async avg(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n avg: true\n }\n }\n })\n return res.length ? res[0][`avg_${column}`] : 0\n }\n\n async exists(where: WhereArgsType): Promise<boolean> {\n return !!(await this.count({ where }))\n }\n\n async truncate() {\n await this.execute(`TRUNCATE TABLE ${this.table}`);\n }\n\n\n // end Helpers Methods\n // async createIndex(column: string) {\n // const { IndexMigration } = this.xansql.XansqlMigration.TableMigration;\n // const indexsql = IndexMigration.buildCreate(this.table, column);\n // try {\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexsql, executeId);\n // } catch (error) {\n // throw new Error(\"Index already exists\");\n // }\n // }\n\n // async dropIndex(column: string) {\n // const { IndexMigration } = this.xansql.XansqlMigration.TableMigration;\n // const indexsql = IndexMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexsql, executeId);\n // }\n\n // async addColumn(column: string) {\n // const { TableMigration } = this.xansql.XansqlMigration;\n // if (!(column in this.schema)) {\n // throw new Error(`Column ${column} already exists in table ${this.table}`);\n // }\n\n // const field = this.schema[column] as XqlFields;\n // if (!field) {\n // throw new Error(`Field definition for column ${column} is missing in schema for table ${this.table}`);\n // }\n // const sqlColumn = TableMigration.buildColumn(this.table, column);\n // let sql = `ALTER TABLE ${this.table} ADD COLUMN ${sqlColumn};`;\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // this.schema[column] = field;\n\n // // add foreign key if exists\n // const meta = field.meta || {};\n // if (Foreign.isSchema(field)) {\n // const info = Foreign.get(this, column)\n // const fkSql = TableMigration.ForeignKeyMigration.buildCreate(this.table, column, info.table, info.relation.main);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(`ALTER TABLE ${this.table} ADD ${fkSql};`, executeId);\n // }\n\n // // add index if exists\n // if (meta.index) {\n // const indexSql = TableMigration.IndexMigration.buildCreate(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexSql, executeId);\n // }\n\n // }\n\n // async renameColumn(oldColumn: string, newColumn: string) {\n // if (!(oldColumn in this.schema)) {\n // throw new Error(`Column ${oldColumn} does not exist in table ${this.table}`);\n // }\n // if (newColumn in this.schema) {\n // throw new Error(`Column ${newColumn} already exists in table ${this.table}`);\n // }\n // const engine = this.xansql.config.dialect.engine;\n // let sql = ``;\n\n // if (engine === 'mysql') {\n // sql = `ALTER TABLE ${this.table} CHANGE COLUMN ${oldColumn} ${newColumn} ${this.xansql.XansqlMigration.TableMigration.buildColumn(this.table, oldColumn)};`;\n // } else if (engine === 'postgresql') {\n // sql = `ALTER TABLE ${this.table} RENAME COLUMN ${oldColumn} TO ${newColumn};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming columns is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"RENAME_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // const field = this.schema[oldColumn];\n // delete this.schema[oldColumn];\n // this.schema[newColumn] = field;\n\n // // rename foreign key if exists\n // const fieldMeta = field.meta || {};\n // if (Foreign.isSchema(field)) {\n // const fkOld = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.identifier(this.table, oldColumn);\n // const fkNew = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.identifier(this.table, newColumn);\n // let fsql = ``;\n // if (engine === 'mysql') {\n // fsql = `ALTER TABLE ${this.table} DROP FOREIGN KEY ${fkOld}, ADD CONSTRAINT ${fkNew} FOREIGN KEY (${newColumn}) REFERENCES ${Foreign.get(this, newColumn).table}(${Foreign.get(this, newColumn).relation.main});`;\n // } else if (engine === 'postgresql') {\n // fsql = `ALTER TABLE ${this.table} RENAME CONSTRAINT ${fkOld} TO ${fkNew};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming foreign keys is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(fsql, executeId);\n // }\n\n // // rename index if exists\n // if (fieldMeta.index) {\n // const indexOld = this.xansql.XansqlMigration.TableMigration.IndexMigration.identifier(this.table, oldColumn);\n // const indexNew = this.xansql.XansqlMigration.TableMigration.IndexMigration.identifier(this.table, newColumn);\n // let isql = ``;\n // if (engine === 'mysql') {\n // isql = `ALTER TABLE ${this.table} DROP INDEX ${indexOld}, ADD INDEX ${indexNew} (${newColumn});`;\n // } else if (engine === 'postgresql') {\n // isql = `ALTER INDEX ${indexOld} RENAME TO ${indexNew};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming indexes is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(isql, executeId);\n // }\n // }\n\n // async dropColumn(column: string) {\n\n // let sql = `ALTER TABLE ${this.table} DROP COLUMN ${column};`;\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // const field = this.schema[column];\n // delete this.schema[column];\n // const fieldMeta = field.meta || {};\n\n // // drop foreign key if exists\n // if (Foreign.isSchema(field)) {\n // const fkSql = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(fkSql, executeId);\n // }\n\n // // drop index if exists\n // if (fieldMeta.index) {\n // const indexSql = this.xansql.XansqlMigration.TableMigration.IndexMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexSql, executeId);\n // }\n // }\n\n}\n\nexport default Model;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/model/index.ts"],"sourcesContent":["import XansqlError from \"../core/XansqlError\";\nimport { iof } from \"../utils\";\nimport RelationExecuteArgs from \"./Args/RelationExcuteArgs\";\nimport ModelBase from \"./Base\";\nimport AggregateExecuter from \"./Executer/Aggregate\";\nimport CreateExecuter from \"./Executer/Create\";\nimport DeleteExecuter from \"./Executer/Delete\";\nimport FindExecuter from \"./Executer/Find\";\nimport UpdateExecuter from \"./Executer/Update\";\nimport { AggregateArgsType, CreateArgsType, DeleteArgsType, FindArgsType, UpdateArgsType, WhereArgsType } from \"./types\";\n\nclass Model extends ModelBase {\n\n async create(args: CreateArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = iof(args, RelationExecuteArgs)\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n args = await this.callHook(\"beforeCreate\", args) || args\n\n // event emit BEFORE_CREATE\n const executer = new CreateExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_CREATE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"CREATE\", { model: this, results, args });\n\n results = await this.callHook(\"afterCreate\", results, args) || results\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error: any) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n let errors: { [key: string]: string } = {}\n if (iof(error, Array) && iof(error[0], XansqlError)) {\n for (let err of error) {\n errors[err.column] = err.message;\n }\n } else {\n errors[\"create\"] = error.message;\n }\n throw error\n }\n }\n\n async update(args: UpdateArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = iof(args, RelationExecuteArgs)\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n\n args = await this.callHook(\"beforeUpdate\", args) || args\n const executer = new UpdateExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_UPDATE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"UPDATE\", { model: this, results, args });\n results = await this.callHook(\"afterUpdate\", results, args) || results\n\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error: any) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n let errors: { [key: string]: string } = {}\n if (iof(error, Array) && iof(error[0], XansqlError)) {\n for (let err of error) {\n errors[err.column] = err.message;\n }\n } else {\n errors[\"update\"] = error.message;\n }\n throw errors\n }\n }\n\n async delete(args: DeleteArgsType): Promise<any[]> {\n const xansql = this.xansql;\n const isRelArgs = iof(args, RelationExecuteArgs)\n if (isRelArgs) args = (args as any).args\n\n try {\n if (!isRelArgs) await xansql.XansqlTransaction.begin()\n\n args = await this.callHook(\"beforeDelete\", args) || args\n const executer = new DeleteExecuter(this);\n await xansql.EventManager.emit(\"BEFORE_DELETE\", { model: this, args });\n let results: any = await executer.execute(args);\n await xansql.EventManager.emit(\"DELETE\", { model: this, results, args });\n results = await this.callHook(\"afterDelete\", results, args) || results\n\n if (!isRelArgs) await xansql.XansqlTransaction.commit()\n return results\n } catch (error) {\n if (!isRelArgs) await xansql.XansqlTransaction.rollback()\n throw error\n }\n }\n\n async find(args: FindArgsType): Promise<any[]> {\n const isRelArgs = iof(args, RelationExecuteArgs)\n if (isRelArgs) args = (args as any).args\n\n args = await this.callHook(\"beforeFind\", args) || args\n const executer = new FindExecuter(this, async (row: any) => {\n return await this.callHook('transform', row) || row\n });\n await this.xansql.EventManager.emit(\"BEFORE_FIND\", { model: this, args });\n let results = await executer.execute(args);\n await this.xansql.EventManager.emit(\"FIND\", { model: this, results: results, args });\n results = await this.callHook(\"afterFind\", results, args) || results\n return results\n }\n\n async findOne(args: FindArgsType): Promise<any | null> {\n const results = await this.find({\n ...args,\n limit: {\n take: 1,\n skip: 0\n }\n })\n return results.length ? results[0] : null\n }\n\n async findByID(id: number | string): Promise<any | null> {\n const results = await this.find({\n where: {\n [this.IDColumn]: id\n },\n limit: {\n take: 1,\n skip: 0\n }\n })\n return results.length ? results[0] : null\n }\n\n // Helpers Methods\n\n async aggregate(args: AggregateArgsType): Promise<any[]> {\n const isRelArgs = iof(args, RelationExecuteArgs)\n if (isRelArgs) args = (args as any).args\n args = await this.callHook(\"beforeAggregate\", args) || args\n const executer = new AggregateExecuter(this);\n await this.xansql.EventManager.emit(\"BEFORE_AGGREGATE\", { model: this, args });\n let results = await executer.execute(args);\n await this.xansql.EventManager.emit(\"AGGREGATE\", { model: this, results, args });\n\n results = await this.callHook(\"afterAggregate\", results, args) || results\n return results\n }\n\n\n async paginate(page: number, args?: Omit<FindArgsType, \"limit\"> & { perpage?: number }) {\n const perpage = args?.perpage || 20;\n const skip = (page - 1) * perpage;\n const results = await this.find({\n ...args,\n limit: {\n take: perpage,\n skip\n }\n })\n const total = await this.count(args?.where || {})\n return {\n page,\n perpage,\n pagecount: Math.ceil(total / perpage),\n rowcount: total,\n results\n }\n }\n\n async count(where: WhereArgsType): Promise<number> {\n const res: any[] = await this.aggregate({\n where,\n select: {\n [this.IDColumn]: {\n count: true\n }\n }\n })\n return res.length ? res[0][`count_${this.IDColumn}`] : 0\n }\n\n async min(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n min: true\n }\n }\n })\n return res.length ? res[0][`min_${column}`] : 0\n }\n\n async max(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n max: true\n }\n }\n })\n return res.length ? res[0][`max_${column}`] : 0\n }\n\n async sum(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n sum: true\n }\n }\n })\n return res.length ? res[0][`sum_${column}`] : 0\n }\n\n async avg(column: string, where: WhereArgsType): Promise<number> {\n if (!(column in this.schema)) {\n throw new XansqlError({\n message: `Column \"${column}\" does not exist in table \"${this.table}\"`,\n model: this.table,\n });\n }\n const res: any[] = await this.aggregate({\n where,\n select: {\n [column]: {\n avg: true\n }\n }\n })\n return res.length ? res[0][`avg_${column}`] : 0\n }\n\n async exists(where: WhereArgsType): Promise<boolean> {\n return !!(await this.count({ where }))\n }\n\n async truncate() {\n await this.execute(`TRUNCATE TABLE ${this.table}`);\n }\n\n\n // end Helpers Methods\n // async createIndex(column: string) {\n // const { IndexMigration } = this.xansql.XansqlMigration.TableMigration;\n // const indexsql = IndexMigration.buildCreate(this.table, column);\n // try {\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexsql, executeId);\n // } catch (error) {\n // throw new Error(\"Index already exists\");\n // }\n // }\n\n // async dropIndex(column: string) {\n // const { IndexMigration } = this.xansql.XansqlMigration.TableMigration;\n // const indexsql = IndexMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexsql, executeId);\n // }\n\n // async addColumn(column: string) {\n // const { TableMigration } = this.xansql.XansqlMigration;\n // if (!(column in this.schema)) {\n // throw new Error(`Column ${column} already exists in table ${this.table}`);\n // }\n\n // const field = this.schema[column] as XqlFields;\n // if (!field) {\n // throw new Error(`Field definition for column ${column} is missing in schema for table ${this.table}`);\n // }\n // const sqlColumn = TableMigration.buildColumn(this.table, column);\n // let sql = `ALTER TABLE ${this.table} ADD COLUMN ${sqlColumn};`;\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // this.schema[column] = field;\n\n // // add foreign key if exists\n // const meta = field.meta || {};\n // if (Foreign.isSchema(field)) {\n // const info = Foreign.get(this, column)\n // const fkSql = TableMigration.ForeignKeyMigration.buildCreate(this.table, column, info.table, info.relation.main);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(`ALTER TABLE ${this.table} ADD ${fkSql};`, executeId);\n // }\n\n // // add index if exists\n // if (meta.index) {\n // const indexSql = TableMigration.IndexMigration.buildCreate(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexSql, executeId);\n // }\n\n // }\n\n // async renameColumn(oldColumn: string, newColumn: string) {\n // if (!(oldColumn in this.schema)) {\n // throw new Error(`Column ${oldColumn} does not exist in table ${this.table}`);\n // }\n // if (newColumn in this.schema) {\n // throw new Error(`Column ${newColumn} already exists in table ${this.table}`);\n // }\n // const engine = this.xansql.config.dialect.engine;\n // let sql = ``;\n\n // if (engine === 'mysql') {\n // sql = `ALTER TABLE ${this.table} CHANGE COLUMN ${oldColumn} ${newColumn} ${this.xansql.XansqlMigration.TableMigration.buildColumn(this.table, oldColumn)};`;\n // } else if (engine === 'postgresql') {\n // sql = `ALTER TABLE ${this.table} RENAME COLUMN ${oldColumn} TO ${newColumn};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming columns is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"RENAME_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // const field = this.schema[oldColumn];\n // delete this.schema[oldColumn];\n // this.schema[newColumn] = field;\n\n // // rename foreign key if exists\n // const fieldMeta = field.meta || {};\n // if (Foreign.isSchema(field)) {\n // const fkOld = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.identifier(this.table, oldColumn);\n // const fkNew = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.identifier(this.table, newColumn);\n // let fsql = ``;\n // if (engine === 'mysql') {\n // fsql = `ALTER TABLE ${this.table} DROP FOREIGN KEY ${fkOld}, ADD CONSTRAINT ${fkNew} FOREIGN KEY (${newColumn}) REFERENCES ${Foreign.get(this, newColumn).table}(${Foreign.get(this, newColumn).relation.main});`;\n // } else if (engine === 'postgresql') {\n // fsql = `ALTER TABLE ${this.table} RENAME CONSTRAINT ${fkOld} TO ${fkNew};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming foreign keys is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(fsql, executeId);\n // }\n\n // // rename index if exists\n // if (fieldMeta.index) {\n // const indexOld = this.xansql.XansqlMigration.TableMigration.IndexMigration.identifier(this.table, oldColumn);\n // const indexNew = this.xansql.XansqlMigration.TableMigration.IndexMigration.identifier(this.table, newColumn);\n // let isql = ``;\n // if (engine === 'mysql') {\n // isql = `ALTER TABLE ${this.table} DROP INDEX ${indexOld}, ADD INDEX ${indexNew} (${newColumn});`;\n // } else if (engine === 'postgresql') {\n // isql = `ALTER INDEX ${indexOld} RENAME TO ${indexNew};`;\n // } else if (engine === 'sqlite') {\n // throw new Error(`Renaming indexes is not supported in SQLite`);\n // }\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(isql, executeId);\n // }\n // }\n\n // async dropColumn(column: string) {\n\n // let sql = `ALTER TABLE ${this.table} DROP COLUMN ${column};`;\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"DROP_COLUMN\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(sql, executeId);\n // const field = this.schema[column];\n // delete this.schema[column];\n // const fieldMeta = field.meta || {};\n\n // // drop foreign key if exists\n // if (Foreign.isSchema(field)) {\n // const fkSql = this.xansql.XansqlMigration.TableMigration.ForeignKeyMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"ADD_FOREIGN_KEY\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(fkSql, executeId);\n // }\n\n // // drop index if exists\n // if (fieldMeta.index) {\n // const indexSql = this.xansql.XansqlMigration.TableMigration.IndexMigration.buildDrop(this.table, column);\n // let executeId = undefined;\n // if (typeof window !== \"undefined\") {\n // executeId = ExecuteMeta.set({\n // model: this,\n // action: \"CREATE_INDEX\",\n // modelType: \"main\",\n // args: {}\n // });\n // }\n // await this.xansql.execute(indexSql, executeId);\n // }\n // }\n\n}\n\nexport default Model;\n"],"names":[],"mappings":"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"}
|