xansql 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/Types/fields/Array.d.ts +7 -0
  2. package/Types/fields/Array.js +6 -0
  3. package/Types/fields/Array.js.map +1 -0
  4. package/Types/fields/Array.mjs +6 -0
  5. package/Types/fields/Array.mjs.map +1 -0
  6. package/Types/fields/Boolean.d.ts +8 -0
  7. package/Types/fields/Boolean.js +11 -0
  8. package/Types/fields/Boolean.js.map +1 -0
  9. package/Types/fields/Boolean.mjs +11 -0
  10. package/Types/fields/Boolean.mjs.map +1 -0
  11. package/Types/fields/Date.d.ts +10 -0
  12. package/Types/fields/Date.js +22 -0
  13. package/Types/fields/Date.js.map +1 -0
  14. package/Types/fields/Date.mjs +22 -0
  15. package/Types/fields/Date.mjs.map +1 -0
  16. package/Types/fields/Enum.d.ts +8 -0
  17. package/Types/fields/Enum.js +10 -0
  18. package/Types/fields/Enum.js.map +1 -0
  19. package/Types/fields/Enum.mjs +10 -0
  20. package/Types/fields/Enum.mjs.map +1 -0
  21. package/Types/fields/File.d.ts +7 -0
  22. package/Types/fields/File.js +6 -0
  23. package/Types/fields/File.js.map +1 -0
  24. package/Types/fields/File.mjs +6 -0
  25. package/Types/fields/File.mjs.map +1 -0
  26. package/Types/fields/IDField.d.ts +6 -0
  27. package/Types/fields/IDField.js +2 -0
  28. package/Types/fields/IDField.js.map +1 -0
  29. package/Types/fields/IDField.mjs +2 -0
  30. package/Types/fields/IDField.mjs.map +1 -0
  31. package/Types/fields/Number.d.ts +8 -0
  32. package/Types/fields/Number.js +11 -0
  33. package/Types/fields/Number.js.map +1 -0
  34. package/Types/fields/Number.mjs +11 -0
  35. package/Types/fields/Number.mjs.map +1 -0
  36. package/Types/fields/Object.d.ts +8 -0
  37. package/Types/fields/Object.js +11 -0
  38. package/Types/fields/Object.js.map +1 -0
  39. package/Types/fields/Object.mjs +11 -0
  40. package/Types/fields/Object.mjs.map +1 -0
  41. package/Types/fields/Record.d.ts +8 -0
  42. package/Types/fields/Record.js +11 -0
  43. package/Types/fields/Record.js.map +1 -0
  44. package/Types/fields/Record.mjs +11 -0
  45. package/Types/fields/Record.mjs.map +1 -0
  46. package/Types/fields/Schema.d.ts +16 -0
  47. package/Types/fields/Schema.js +34 -0
  48. package/Types/fields/Schema.js.map +1 -0
  49. package/Types/fields/Schema.mjs +34 -0
  50. package/Types/fields/Schema.mjs.map +1 -0
  51. package/Types/fields/String.d.ts +10 -0
  52. package/Types/fields/String.js +20 -0
  53. package/Types/fields/String.js.map +1 -0
  54. package/Types/fields/String.mjs +20 -0
  55. package/Types/fields/String.mjs.map +1 -0
  56. package/Types/fields/Tuple.d.ts +8 -0
  57. package/Types/fields/Tuple.js +11 -0
  58. package/Types/fields/Tuple.js.map +1 -0
  59. package/Types/fields/Tuple.mjs +11 -0
  60. package/Types/fields/Tuple.mjs.map +1 -0
  61. package/Types/fields/Union.d.ts +8 -0
  62. package/Types/fields/Union.js +11 -0
  63. package/Types/fields/Union.js.map +1 -0
  64. package/Types/fields/Union.mjs +11 -0
  65. package/Types/fields/Union.mjs.map +1 -0
  66. package/Types/index.d.ts +56 -0
  67. package/Types/index.js +129 -0
  68. package/Types/index.js.map +1 -0
  69. package/Types/index.mjs +129 -0
  70. package/Types/index.mjs.map +1 -0
  71. package/Types/types.d.ts +20 -0
  72. package/core/ExcuteMeta.d.ts +11 -0
  73. package/core/ExcuteMeta.js +22 -0
  74. package/core/ExcuteMeta.js.map +1 -0
  75. package/core/ExcuteMeta.mjs +22 -0
  76. package/core/ExcuteMeta.mjs.map +1 -0
  77. package/core/Xansql.d.ts +46 -0
  78. package/core/Xansql.js +132 -0
  79. package/core/Xansql.js.map +1 -0
  80. package/core/Xansql.mjs +132 -0
  81. package/core/Xansql.mjs.map +1 -0
  82. package/core/XansqlError.js +11 -0
  83. package/core/XansqlError.js.map +1 -0
  84. package/core/XansqlError.mjs +11 -0
  85. package/core/XansqlError.mjs.map +1 -0
  86. package/core/XansqlResult.d.ts +12 -0
  87. package/core/XansqlResult.js +32 -0
  88. package/core/XansqlResult.js.map +1 -0
  89. package/core/XansqlResult.mjs +32 -0
  90. package/core/XansqlResult.mjs.map +1 -0
  91. package/core/classes/EventManager.d.ts +72 -0
  92. package/core/classes/EventManager.js +21 -0
  93. package/core/classes/EventManager.js.map +1 -0
  94. package/core/classes/EventManager.mjs +21 -0
  95. package/core/classes/EventManager.mjs.map +1 -0
  96. package/core/classes/ForeignInfo.js +51 -0
  97. package/core/classes/ForeignInfo.js.map +1 -0
  98. package/core/classes/ForeignInfo.mjs +51 -0
  99. package/core/classes/ForeignInfo.mjs.map +1 -0
  100. package/core/classes/Migration/ForeingMigration.d.ts +12 -0
  101. package/core/classes/Migration/ForeingMigration.js +52 -0
  102. package/core/classes/Migration/ForeingMigration.js.map +1 -0
  103. package/core/classes/Migration/ForeingMigration.mjs +52 -0
  104. package/core/classes/Migration/ForeingMigration.mjs.map +1 -0
  105. package/core/classes/Migration/IndexMigration.d.ts +12 -0
  106. package/core/classes/Migration/IndexMigration.js +49 -0
  107. package/core/classes/Migration/IndexMigration.js.map +1 -0
  108. package/core/classes/Migration/IndexMigration.mjs +49 -0
  109. package/core/classes/Migration/IndexMigration.mjs.map +1 -0
  110. package/core/classes/Migration/TableMigration.d.ts +33 -0
  111. package/core/classes/Migration/TableMigration.js +215 -0
  112. package/core/classes/Migration/TableMigration.js.map +1 -0
  113. package/core/classes/Migration/TableMigration.mjs +215 -0
  114. package/core/classes/Migration/TableMigration.mjs.map +1 -0
  115. package/core/classes/Migration/index.d.ts +12 -0
  116. package/core/classes/Migration/index.js +189 -0
  117. package/core/classes/Migration/index.js.map +1 -0
  118. package/core/classes/Migration/index.mjs +189 -0
  119. package/core/classes/Migration/index.mjs.map +1 -0
  120. package/core/classes/ModelFormatter.js +166 -0
  121. package/core/classes/ModelFormatter.js.map +1 -0
  122. package/core/classes/ModelFormatter.mjs +166 -0
  123. package/core/classes/ModelFormatter.mjs.map +1 -0
  124. package/core/classes/TypesGenerator.d.ts +13 -0
  125. package/core/classes/TypesGenerator.js +170 -0
  126. package/core/classes/TypesGenerator.js.map +1 -0
  127. package/core/classes/TypesGenerator.mjs +170 -0
  128. package/core/classes/TypesGenerator.mjs.map +1 -0
  129. package/core/classes/XansqlConfig.js +33 -0
  130. package/core/classes/XansqlConfig.js.map +1 -0
  131. package/core/classes/XansqlConfig.mjs +33 -0
  132. package/core/classes/XansqlConfig.mjs.map +1 -0
  133. package/core/classes/XansqlFetch.js +304 -0
  134. package/core/classes/XansqlFetch.js.map +1 -0
  135. package/core/classes/XansqlFetch.mjs +304 -0
  136. package/core/classes/XansqlFetch.mjs.map +1 -0
  137. package/core/classes/XansqlTransaction.d.ts +13 -0
  138. package/core/classes/XansqlTransaction.js +46 -0
  139. package/core/classes/XansqlTransaction.js.map +1 -0
  140. package/core/classes/XansqlTransaction.mjs +46 -0
  141. package/core/classes/XansqlTransaction.mjs.map +1 -0
  142. package/core/type.d.ts +117 -0
  143. package/index.d.ts +3 -0
  144. package/index.js +1 -0
  145. package/index.js.map +1 -0
  146. package/index.mjs +1 -0
  147. package/index.mjs.map +1 -0
  148. package/model/Args/RelationExcuteArgs.js +5 -0
  149. package/model/Args/RelationExcuteArgs.js.map +1 -0
  150. package/model/Args/RelationExcuteArgs.mjs +5 -0
  151. package/model/Args/RelationExcuteArgs.mjs.map +1 -0
  152. package/model/Args/WhereArgs.js +226 -0
  153. package/model/Args/WhereArgs.js.map +1 -0
  154. package/model/Args/WhereArgs.mjs +226 -0
  155. package/model/Args/WhereArgs.mjs.map +1 -0
  156. package/model/Base.d.ts +26 -0
  157. package/model/Base.js +64 -0
  158. package/model/Base.js.map +1 -0
  159. package/model/Base.mjs +64 -0
  160. package/model/Base.mjs.map +1 -0
  161. package/model/Executer/Aggregate/SelectArgs.js +59 -0
  162. package/model/Executer/Aggregate/SelectArgs.js.map +1 -0
  163. package/model/Executer/Aggregate/SelectArgs.mjs +59 -0
  164. package/model/Executer/Aggregate/SelectArgs.mjs.map +1 -0
  165. package/model/Executer/Aggregate/index.js +59 -0
  166. package/model/Executer/Aggregate/index.js.map +1 -0
  167. package/model/Executer/Aggregate/index.mjs +59 -0
  168. package/model/Executer/Aggregate/index.mjs.map +1 -0
  169. package/model/Executer/Create/CreateDataArgs.js +145 -0
  170. package/model/Executer/Create/CreateDataArgs.js.map +1 -0
  171. package/model/Executer/Create/CreateDataArgs.mjs +145 -0
  172. package/model/Executer/Create/CreateDataArgs.mjs.map +1 -0
  173. package/model/Executer/Create/index.js +101 -0
  174. package/model/Executer/Create/index.js.map +1 -0
  175. package/model/Executer/Create/index.mjs +101 -0
  176. package/model/Executer/Create/index.mjs.map +1 -0
  177. package/model/Executer/Delete/index.js +112 -0
  178. package/model/Executer/Delete/index.js.map +1 -0
  179. package/model/Executer/Delete/index.mjs +112 -0
  180. package/model/Executer/Delete/index.mjs.map +1 -0
  181. package/model/Executer/Find/DistinctArgs.js +32 -0
  182. package/model/Executer/Find/DistinctArgs.js.map +1 -0
  183. package/model/Executer/Find/DistinctArgs.mjs +32 -0
  184. package/model/Executer/Find/DistinctArgs.mjs.map +1 -0
  185. package/model/Executer/Find/LimitArgs.js +31 -0
  186. package/model/Executer/Find/LimitArgs.js.map +1 -0
  187. package/model/Executer/Find/LimitArgs.mjs +31 -0
  188. package/model/Executer/Find/LimitArgs.mjs.map +1 -0
  189. package/model/Executer/Find/OrderByArgs.js +29 -0
  190. package/model/Executer/Find/OrderByArgs.js.map +1 -0
  191. package/model/Executer/Find/OrderByArgs.mjs +29 -0
  192. package/model/Executer/Find/OrderByArgs.mjs.map +1 -0
  193. package/model/Executer/Find/SelectArgs.js +119 -0
  194. package/model/Executer/Find/SelectArgs.js.map +1 -0
  195. package/model/Executer/Find/SelectArgs.mjs +119 -0
  196. package/model/Executer/Find/SelectArgs.mjs.map +1 -0
  197. package/model/Executer/Find/index.js +338 -0
  198. package/model/Executer/Find/index.js.map +1 -0
  199. package/model/Executer/Find/index.mjs +338 -0
  200. package/model/Executer/Find/index.mjs.map +1 -0
  201. package/model/Executer/Update/UpdateDataArgs.js +124 -0
  202. package/model/Executer/Update/UpdateDataArgs.js.map +1 -0
  203. package/model/Executer/Update/UpdateDataArgs.mjs +124 -0
  204. package/model/Executer/Update/UpdateDataArgs.mjs.map +1 -0
  205. package/model/Executer/Update/index.js +207 -0
  206. package/model/Executer/Update/index.js.map +1 -0
  207. package/model/Executer/Update/index.mjs +207 -0
  208. package/model/Executer/Update/index.mjs.map +1 -0
  209. package/model/include/ValueFormatter.js +99 -0
  210. package/model/include/ValueFormatter.js.map +1 -0
  211. package/model/include/ValueFormatter.mjs +99 -0
  212. package/model/include/ValueFormatter.mjs.map +1 -0
  213. package/model/index.d.ts +29 -0
  214. package/model/index.js +236 -0
  215. package/model/index.js.map +1 -0
  216. package/model/index.mjs +236 -0
  217. package/model/index.mjs.map +1 -0
  218. package/model/type.d.ts +106 -0
  219. package/package.json +32 -0
  220. package/readme.md +359 -0
  221. package/utils/chunker.js +53 -0
  222. package/utils/chunker.js.map +1 -0
  223. package/utils/chunker.mjs +53 -0
  224. package/utils/chunker.mjs.map +1 -0
  225. package/utils/index.js +49 -0
  226. package/utils/index.js.map +1 -0
  227. package/utils/index.mjs +49 -0
  228. package/utils/index.mjs.map +1 -0
  229. package/utils/sha256.js +66 -0
  230. package/utils/sha256.js.map +1 -0
  231. package/utils/sha256.mjs +66 -0
  232. package/utils/sha256.mjs.map +1 -0
@@ -0,0 +1,101 @@
1
+ import CreateDataArgs from'./CreateDataArgs.mjs';import SelectArgs from'../Find/SelectArgs.mjs';import {chunkArray}from'../../../utils/chunker.mjs';import RelationExecuteArgs from'../../Args/RelationExcuteArgs.mjs';import ExecuteMeta from'../../../core/ExcuteMeta.mjs';class CreateExecuter {
2
+ constructor(model) {
3
+ this.model = model;
4
+ }
5
+ async execute(args) {
6
+ const xansql = this.model.xansql;
7
+ const model = this.model;
8
+ const createArgs = new CreateDataArgs(model, args.data);
9
+ const isRelation = args instanceof RelationExecuteArgs;
10
+ // only for validation
11
+ if (args.select)
12
+ new SelectArgs(model, args.select || {});
13
+ const insertIds = [];
14
+ let results = [];
15
+ for (let { chunk } of chunkArray(createArgs.values)) {
16
+ for (let arg of chunk) {
17
+ let insertId;
18
+ const fileColumns = Object.keys(arg.files);
19
+ const uploadedFileIds = [];
20
+ try {
21
+ if (fileColumns.length > 0) {
22
+ let executeId = undefined;
23
+ if (typeof window !== "undefined") {
24
+ executeId = ExecuteMeta.set({
25
+ model,
26
+ action: "UPLOAD_FILE",
27
+ modelType: isRelation ? "child" : "main",
28
+ args: arg
29
+ });
30
+ }
31
+ for (let file_col of fileColumns) {
32
+ const filemeta = await xansql.uploadFile(arg.files[file_col], executeId);
33
+ uploadedFileIds.push(filemeta.fileId);
34
+ arg.data[file_col] = `'${JSON.stringify(filemeta)}'`;
35
+ }
36
+ }
37
+ let executeId = undefined;
38
+ if (typeof window !== "undefined") {
39
+ executeId = ExecuteMeta.set({
40
+ model,
41
+ action: "INSERT",
42
+ modelType: isRelation ? "child" : "main",
43
+ args: arg
44
+ });
45
+ }
46
+ const keys = Object.keys(arg.data);
47
+ const sql = `INSERT INTO ${model.table} (${keys.join(", ")}) VALUES (${keys.map(k => arg.data[k]).join(", ")})`;
48
+ const created = await xansql.execute(sql, executeId);
49
+ insertId = created.insertId;
50
+ }
51
+ catch (error) {
52
+ if (fileColumns.length > 0) {
53
+ let executeId = undefined;
54
+ if (typeof window !== "undefined") {
55
+ executeId = ExecuteMeta.set({
56
+ model,
57
+ action: "DELETE_FILE",
58
+ modelType: isRelation ? "child" : "main",
59
+ args: arg
60
+ });
61
+ }
62
+ for (let fileId of uploadedFileIds) {
63
+ try {
64
+ await xansql.deleteFile(fileId, executeId);
65
+ }
66
+ catch (error) { }
67
+ }
68
+ throw error;
69
+ }
70
+ }
71
+ if (insertId) {
72
+ insertIds.push(insertId);
73
+ results.push({ [model.IDColumn]: insertId });
74
+ // execute relations
75
+ for (let rel_column in arg.relations) {
76
+ const relInfo = arg.relations[rel_column];
77
+ const foreign = relInfo.foreign;
78
+ const FModel = xansql.getModel(foreign.table);
79
+ for (let relData of relInfo.data) {
80
+ const fdata = Object.assign(Object.assign({}, relData), { [foreign.column]: insertId });
81
+ const rargs = new RelationExecuteArgs({
82
+ data: fdata
83
+ });
84
+ await FModel.create(rargs);
85
+ }
86
+ }
87
+ }
88
+ }
89
+ }
90
+ if (args.select) {
91
+ results = await model.find({
92
+ where: {
93
+ [model.IDColumn]: insertIds.length === 1 ? insertIds[0] : { in: insertIds }
94
+ },
95
+ limit: "all",
96
+ select: args.select
97
+ });
98
+ }
99
+ return results;
100
+ }
101
+ }export{CreateExecuter as default};//# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/model/Executer/Create/index.ts"],"sourcesContent":["import Model from \"../..\"\nimport CreateDataArgs from \"./CreateDataArgs\"\nimport { CreateArgsType } from \"../../type\"\nimport SelectArgs from \"../Find/SelectArgs\"\nimport { chunkArray } from \"../../../utils/chunker\"\nimport RelationExecuteArgs from \"../../Args/RelationExcuteArgs\"\nimport ExecuteMeta from \"../../../core/ExcuteMeta\"\n\nclass CreateExecuter {\n model: Model\n constructor(model: Model) {\n this.model = model\n }\n async execute(args: CreateArgsType) {\n const xansql = this.model.xansql\n const model = this.model\n const createArgs = new CreateDataArgs(model, args.data)\n const isRelation = args instanceof RelationExecuteArgs\n\n // only for validation\n if (args.select) new SelectArgs(model, args.select || {})\n\n const insertIds = []\n let results = []\n\n for (let { chunk } of chunkArray(createArgs.values)) {\n for (let arg of chunk) {\n let insertId\n const fileColumns = Object.keys(arg.files)\n const uploadedFileIds: string[] = []\n try {\n\n if (fileColumns.length > 0) {\n let executeId = undefined;\n if (typeof window !== \"undefined\") {\n executeId = ExecuteMeta.set({\n model,\n action: \"UPLOAD_FILE\",\n modelType: isRelation ? \"child\" : \"main\",\n args: arg\n });\n }\n for (let file_col of fileColumns) {\n const filemeta = await xansql.uploadFile(arg.files[file_col], executeId)\n uploadedFileIds.push(filemeta.fileId)\n arg.data[file_col] = `'${JSON.stringify(filemeta)}'`\n }\n }\n let executeId = undefined;\n if (typeof window !== \"undefined\") {\n executeId = ExecuteMeta.set({\n model,\n action: \"INSERT\",\n modelType: isRelation ? \"child\" : \"main\",\n args: arg\n });\n }\n const keys = Object.keys(arg.data)\n const sql = `INSERT INTO ${model.table} (${keys.join(\", \")}) VALUES (${keys.map(k => arg.data[k]).join(\", \")})`\n const created = await xansql.execute(sql, executeId)\n insertId = created.insertId\n } catch (error: any) {\n if (fileColumns.length > 0) {\n let executeId = undefined;\n if (typeof window !== \"undefined\") {\n executeId = ExecuteMeta.set({\n model,\n action: \"DELETE_FILE\",\n modelType: isRelation ? \"child\" : \"main\",\n args: arg\n });\n }\n for (let fileId of uploadedFileIds) {\n try {\n await xansql.deleteFile(fileId, executeId)\n } catch (error) { }\n }\n throw error\n }\n }\n if (insertId) {\n insertIds.push(insertId)\n results.push({ [model.IDColumn]: insertId })\n\n // execute relations\n for (let rel_column in arg.relations) {\n const relInfo = arg.relations[rel_column]\n const foreign = relInfo.foreign\n const FModel = xansql.getModel(foreign.table)\n for (let relData of relInfo.data) {\n const fdata = {\n ...relData,\n [foreign.column]: insertId\n }\n const rargs = new RelationExecuteArgs({\n data: fdata\n })\n await FModel.create(rargs as any)\n }\n }\n }\n }\n }\n\n if (args.select) {\n results = await model.find({\n where: {\n [model.IDColumn]: insertIds.length === 1 ? insertIds[0] : { in: insertIds }\n },\n limit: \"all\",\n select: args.select\n })\n }\n\n return results\n }\n\n}\n\nexport default CreateExecuter"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var WhereArgs=require('../../Args/WhereArgs.js'),RelationExcuteArgs=require('../../Args/RelationExcuteArgs.js'),ForeignInfo=require('../../../core/classes/ForeignInfo.js'),File=require('../../../Types/fields/File.js'),chunker=require('../../../utils/chunker.js'),ExcuteMeta=require('../../../core/ExcuteMeta.js'),XansqlError=require('../../../core/XansqlError.js');class DeleteExecuter {
2
+ constructor(model) {
3
+ this.model = model;
4
+ }
5
+ async execute(args) {
6
+ const xansql = this.model.xansql;
7
+ const model = this.model;
8
+ const isRelation = args instanceof RelationExcuteArgs.default;
9
+ if (!args.where || Object.keys(args.where).length === 0) {
10
+ throw new XansqlError.default({
11
+ message: `Delete operation on model ${model.table} requires a WHERE clause to prevent accidental deletion of all records.`,
12
+ model: model.table
13
+ });
14
+ }
15
+ let fileColumns = [];
16
+ let foreignFields = {};
17
+ for (let column in model.schema) {
18
+ const field = model.schema[column];
19
+ if (field instanceof File.default) {
20
+ fileColumns.push(column);
21
+ }
22
+ if (ForeignInfo.default.isArray(field)) {
23
+ foreignFields[column] = field;
24
+ }
25
+ }
26
+ const results = await model.find({
27
+ where: args.where,
28
+ limit: "all",
29
+ select: Object.assign({ [model.IDColumn]: true }, (args.select || {}))
30
+ });
31
+ if (results.length === 0) {
32
+ return [];
33
+ }
34
+ for (let column in foreignFields) {
35
+ const field = foreignFields[column];
36
+ const meta = field.meta || {};
37
+ const foreign = ForeignInfo.default.get(model, column);
38
+ const FModel = model.xansql.getModel(foreign.table);
39
+ if (meta.optional || meta.nullable) {
40
+ // update foreign column to null
41
+ await FModel.update(new RelationExcuteArgs.default({
42
+ data: { [foreign.column]: null },
43
+ where: { [foreign.column]: args.where }
44
+ }));
45
+ }
46
+ else {
47
+ // delete all foreign rows
48
+ await FModel.delete(new RelationExcuteArgs.default({
49
+ where: { [foreign.column]: args.where }
50
+ }));
51
+ }
52
+ }
53
+ let fileRows = [];
54
+ if (fileColumns.length) {
55
+ let fileWhere = [
56
+ ...fileColumns.map(col => ({ [col]: { isNotNull: true } }))
57
+ ];
58
+ if (Array.isArray(args.where)) {
59
+ fileWhere = [...args.where, ...fileWhere];
60
+ }
61
+ else {
62
+ fileWhere = [args.where, ...fileWhere];
63
+ }
64
+ fileRows = await model.find({
65
+ where: fileWhere,
66
+ limit: "all",
67
+ select: fileColumns.reduce((acc, col) => {
68
+ acc[col] = true;
69
+ return acc;
70
+ }, {})
71
+ });
72
+ }
73
+ let executeId = undefined;
74
+ if (typeof window !== "undefined") {
75
+ executeId = ExcuteMeta.default.set({
76
+ model,
77
+ action: "DELETE",
78
+ modelType: isRelation ? "child" : "main",
79
+ args
80
+ });
81
+ }
82
+ const Where = new WhereArgs.default(model, args.where);
83
+ const sql = `DELETE FROM ${model.table} ${Where.sql}`.trim();
84
+ const { affectedRows } = await xansql.execute(sql, executeId);
85
+ if (!affectedRows || affectedRows === 0) {
86
+ return [];
87
+ }
88
+ // delete files
89
+ if (fileColumns.length && fileRows.length) {
90
+ let executeId = undefined;
91
+ if (typeof window !== "undefined") {
92
+ executeId = ExcuteMeta.default.set({
93
+ model,
94
+ action: "DELETE_FILE",
95
+ modelType: isRelation ? "child" : "main",
96
+ args
97
+ });
98
+ }
99
+ for (let { chunk } of chunker.chunkArray(fileRows)) {
100
+ for (let row of chunk) {
101
+ for (let file_col of fileColumns) {
102
+ const filemeta = row[file_col];
103
+ if (filemeta) {
104
+ await xansql.deleteFile(filemeta.fileId, executeId);
105
+ }
106
+ }
107
+ }
108
+ }
109
+ }
110
+ return results;
111
+ }
112
+ }exports.default=DeleteExecuter;//# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/model/Executer/Delete/index.ts"],"sourcesContent":["import Model from \"../..\"\nimport WhereArgs from \"../../Args/WhereArgs\"\nimport { DeleteArgsType, WhereArgsType } from \"../../type\"\nimport RelationExecuteArgs from \"../../Args/RelationExcuteArgs\"\nimport Foreign from \"../../../core/classes/ForeignInfo\"\nimport XqlFile from \"../../../Types/fields/File\"\nimport { XqlFields } from \"../../../Types/types\"\nimport { chunkArray } from \"../../../utils/chunker\"\nimport ExecuteMeta from \"../../../core/ExcuteMeta\"\nimport XansqlError from \"../../../core/XansqlError\"\n\n\nclass DeleteExecuter {\n model: Model\n constructor(model: Model) {\n this.model = model\n }\n\n async execute(args: DeleteArgsType) {\n const xansql = this.model.xansql\n const model = this.model\n const isRelation = args instanceof RelationExecuteArgs\n if (!args.where || Object.keys(args.where).length === 0) {\n throw new XansqlError({\n message: `Delete operation on model ${model.table} requires a WHERE clause to prevent accidental deletion of all records.`,\n model: model.table\n })\n }\n\n let fileColumns: string[] = []\n let foreignFields: { [col: string]: XqlFields } = {}\n\n for (let column in model.schema) {\n const field = model.schema[column]\n if (field instanceof XqlFile) {\n fileColumns.push(column)\n }\n\n if (Foreign.isArray(field)) {\n foreignFields[column] = field\n }\n }\n\n const results = await model.find({\n where: args.where,\n limit: \"all\",\n select: {\n [model.IDColumn]: true,\n ...(args.select || {})\n }\n })\n\n if (results.length === 0) {\n return []\n }\n\n for (let column in foreignFields) {\n const field = foreignFields[column]\n const meta = field.meta || {}\n const foreign = Foreign.get(model, column)\n const FModel = model.xansql.getModel(foreign.table)\n if (meta.optional || meta.nullable) {\n // update foreign column to null\n await FModel.update(new RelationExecuteArgs({\n data: { [foreign.column]: null },\n where: { [foreign.column]: args.where }\n }) as any)\n } else {\n // delete all foreign rows\n await FModel.delete(new RelationExecuteArgs({\n where: { [foreign.column]: args.where }\n }) as any)\n }\n }\n\n let fileRows: any[] = []\n if (fileColumns.length) {\n let fileWhere: WhereArgsType = [\n ...fileColumns.map(col => ({ [col]: { isNotNull: true } }))\n ]\n if (Array.isArray(args.where)) {\n fileWhere = [...args.where, ...fileWhere]\n } else {\n fileWhere = [args.where, ...fileWhere]\n }\n\n fileRows = await model.find({\n where: fileWhere,\n limit: \"all\",\n select: fileColumns.reduce((acc, col) => {\n acc[col] = true\n return acc\n }, {} as any)\n })\n }\n\n let executeId = undefined;\n if (typeof window !== \"undefined\") {\n executeId = ExecuteMeta.set({\n model,\n action: \"DELETE\",\n modelType: isRelation ? \"child\" : \"main\",\n args\n });\n }\n\n const Where = new WhereArgs(model, args.where)\n const sql = `DELETE FROM ${model.table} ${Where.sql}`.trim()\n const { affectedRows } = await xansql.execute(sql, executeId)\n if (!affectedRows || affectedRows === 0) {\n return []\n }\n\n // delete files\n if (fileColumns.length && fileRows.length) {\n let executeId = undefined;\n if (typeof window !== \"undefined\") {\n executeId = ExecuteMeta.set({\n model,\n action: \"DELETE_FILE\",\n modelType: isRelation ? \"child\" : \"main\",\n args\n });\n }\n for (let { chunk } of chunkArray(fileRows)) {\n for (let row of chunk) {\n for (let file_col of fileColumns) {\n const filemeta = row[file_col]\n if (filemeta) {\n await xansql.deleteFile(filemeta.fileId, executeId)\n }\n }\n }\n }\n }\n\n return results\n }\n}\n\nexport default DeleteExecuter"],"names":["RelationExecuteArgs","XansqlError","XqlFile","Foreign","ExecuteMeta","WhereArgs","chunkArray"],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ import WhereArgs from'../../Args/WhereArgs.mjs';import RelationExecuteArgs from'../../Args/RelationExcuteArgs.mjs';import Foreign from'../../../core/classes/ForeignInfo.mjs';import XqlFile from'../../../Types/fields/File.mjs';import {chunkArray}from'../../../utils/chunker.mjs';import ExecuteMeta from'../../../core/ExcuteMeta.mjs';import XansqlError from'../../../core/XansqlError.mjs';class DeleteExecuter {
2
+ constructor(model) {
3
+ this.model = model;
4
+ }
5
+ async execute(args) {
6
+ const xansql = this.model.xansql;
7
+ const model = this.model;
8
+ const isRelation = args instanceof RelationExecuteArgs;
9
+ if (!args.where || Object.keys(args.where).length === 0) {
10
+ throw new XansqlError({
11
+ message: `Delete operation on model ${model.table} requires a WHERE clause to prevent accidental deletion of all records.`,
12
+ model: model.table
13
+ });
14
+ }
15
+ let fileColumns = [];
16
+ let foreignFields = {};
17
+ for (let column in model.schema) {
18
+ const field = model.schema[column];
19
+ if (field instanceof XqlFile) {
20
+ fileColumns.push(column);
21
+ }
22
+ if (Foreign.isArray(field)) {
23
+ foreignFields[column] = field;
24
+ }
25
+ }
26
+ const results = await model.find({
27
+ where: args.where,
28
+ limit: "all",
29
+ select: Object.assign({ [model.IDColumn]: true }, (args.select || {}))
30
+ });
31
+ if (results.length === 0) {
32
+ return [];
33
+ }
34
+ for (let column in foreignFields) {
35
+ const field = foreignFields[column];
36
+ const meta = field.meta || {};
37
+ const foreign = Foreign.get(model, column);
38
+ const FModel = model.xansql.getModel(foreign.table);
39
+ if (meta.optional || meta.nullable) {
40
+ // update foreign column to null
41
+ await FModel.update(new RelationExecuteArgs({
42
+ data: { [foreign.column]: null },
43
+ where: { [foreign.column]: args.where }
44
+ }));
45
+ }
46
+ else {
47
+ // delete all foreign rows
48
+ await FModel.delete(new RelationExecuteArgs({
49
+ where: { [foreign.column]: args.where }
50
+ }));
51
+ }
52
+ }
53
+ let fileRows = [];
54
+ if (fileColumns.length) {
55
+ let fileWhere = [
56
+ ...fileColumns.map(col => ({ [col]: { isNotNull: true } }))
57
+ ];
58
+ if (Array.isArray(args.where)) {
59
+ fileWhere = [...args.where, ...fileWhere];
60
+ }
61
+ else {
62
+ fileWhere = [args.where, ...fileWhere];
63
+ }
64
+ fileRows = await model.find({
65
+ where: fileWhere,
66
+ limit: "all",
67
+ select: fileColumns.reduce((acc, col) => {
68
+ acc[col] = true;
69
+ return acc;
70
+ }, {})
71
+ });
72
+ }
73
+ let executeId = undefined;
74
+ if (typeof window !== "undefined") {
75
+ executeId = ExecuteMeta.set({
76
+ model,
77
+ action: "DELETE",
78
+ modelType: isRelation ? "child" : "main",
79
+ args
80
+ });
81
+ }
82
+ const Where = new WhereArgs(model, args.where);
83
+ const sql = `DELETE FROM ${model.table} ${Where.sql}`.trim();
84
+ const { affectedRows } = await xansql.execute(sql, executeId);
85
+ if (!affectedRows || affectedRows === 0) {
86
+ return [];
87
+ }
88
+ // delete files
89
+ if (fileColumns.length && fileRows.length) {
90
+ let executeId = undefined;
91
+ if (typeof window !== "undefined") {
92
+ executeId = ExecuteMeta.set({
93
+ model,
94
+ action: "DELETE_FILE",
95
+ modelType: isRelation ? "child" : "main",
96
+ args
97
+ });
98
+ }
99
+ for (let { chunk } of chunkArray(fileRows)) {
100
+ for (let row of chunk) {
101
+ for (let file_col of fileColumns) {
102
+ const filemeta = row[file_col];
103
+ if (filemeta) {
104
+ await xansql.deleteFile(filemeta.fileId, executeId);
105
+ }
106
+ }
107
+ }
108
+ }
109
+ }
110
+ return results;
111
+ }
112
+ }export{DeleteExecuter as default};//# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/model/Executer/Delete/index.ts"],"sourcesContent":["import Model from \"../..\"\nimport WhereArgs from \"../../Args/WhereArgs\"\nimport { DeleteArgsType, WhereArgsType } from \"../../type\"\nimport RelationExecuteArgs from \"../../Args/RelationExcuteArgs\"\nimport Foreign from \"../../../core/classes/ForeignInfo\"\nimport XqlFile from \"../../../Types/fields/File\"\nimport { XqlFields } from \"../../../Types/types\"\nimport { chunkArray } from \"../../../utils/chunker\"\nimport ExecuteMeta from \"../../../core/ExcuteMeta\"\nimport XansqlError from \"../../../core/XansqlError\"\n\n\nclass DeleteExecuter {\n model: Model\n constructor(model: Model) {\n this.model = model\n }\n\n async execute(args: DeleteArgsType) {\n const xansql = this.model.xansql\n const model = this.model\n const isRelation = args instanceof RelationExecuteArgs\n if (!args.where || Object.keys(args.where).length === 0) {\n throw new XansqlError({\n message: `Delete operation on model ${model.table} requires a WHERE clause to prevent accidental deletion of all records.`,\n model: model.table\n })\n }\n\n let fileColumns: string[] = []\n let foreignFields: { [col: string]: XqlFields } = {}\n\n for (let column in model.schema) {\n const field = model.schema[column]\n if (field instanceof XqlFile) {\n fileColumns.push(column)\n }\n\n if (Foreign.isArray(field)) {\n foreignFields[column] = field\n }\n }\n\n const results = await model.find({\n where: args.where,\n limit: \"all\",\n select: {\n [model.IDColumn]: true,\n ...(args.select || {})\n }\n })\n\n if (results.length === 0) {\n return []\n }\n\n for (let column in foreignFields) {\n const field = foreignFields[column]\n const meta = field.meta || {}\n const foreign = Foreign.get(model, column)\n const FModel = model.xansql.getModel(foreign.table)\n if (meta.optional || meta.nullable) {\n // update foreign column to null\n await FModel.update(new RelationExecuteArgs({\n data: { [foreign.column]: null },\n where: { [foreign.column]: args.where }\n }) as any)\n } else {\n // delete all foreign rows\n await FModel.delete(new RelationExecuteArgs({\n where: { [foreign.column]: args.where }\n }) as any)\n }\n }\n\n let fileRows: any[] = []\n if (fileColumns.length) {\n let fileWhere: WhereArgsType = [\n ...fileColumns.map(col => ({ [col]: { isNotNull: true } }))\n ]\n if (Array.isArray(args.where)) {\n fileWhere = [...args.where, ...fileWhere]\n } else {\n fileWhere = [args.where, ...fileWhere]\n }\n\n fileRows = await model.find({\n where: fileWhere,\n limit: \"all\",\n select: fileColumns.reduce((acc, col) => {\n acc[col] = true\n return acc\n }, {} as any)\n })\n }\n\n let executeId = undefined;\n if (typeof window !== \"undefined\") {\n executeId = ExecuteMeta.set({\n model,\n action: \"DELETE\",\n modelType: isRelation ? \"child\" : \"main\",\n args\n });\n }\n\n const Where = new WhereArgs(model, args.where)\n const sql = `DELETE FROM ${model.table} ${Where.sql}`.trim()\n const { affectedRows } = await xansql.execute(sql, executeId)\n if (!affectedRows || affectedRows === 0) {\n return []\n }\n\n // delete files\n if (fileColumns.length && fileRows.length) {\n let executeId = undefined;\n if (typeof window !== \"undefined\") {\n executeId = ExecuteMeta.set({\n model,\n action: \"DELETE_FILE\",\n modelType: isRelation ? \"child\" : \"main\",\n args\n });\n }\n for (let { chunk } of chunkArray(fileRows)) {\n for (let row of chunk) {\n for (let file_col of fileColumns) {\n const filemeta = row[file_col]\n if (filemeta) {\n await xansql.deleteFile(filemeta.fileId, executeId)\n }\n }\n }\n }\n }\n\n return results\n }\n}\n\nexport default DeleteExecuter"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var XansqlError=require('../../../core/XansqlError.js');class DistinctArgs {
2
+ constructor(model, args, where, orderBy) {
3
+ /**
4
+ * SQL representation of the distinct clause
5
+ * format: WHERE id IN (SELECT MIN(id) FROM table GROUP BY col1) AND id IN (SELECT MAX(id) FROM table GROUP BY col2)
6
+ */
7
+ this.sql = '';
8
+ const distinct = args || [];
9
+ if (distinct && distinct.length) {
10
+ let dcols = [];
11
+ for (let col of distinct) {
12
+ if (!(col in model.schema)) {
13
+ throw new XansqlError.default({
14
+ message: `Column ${col} not found in model ${model.table} for distinct`,
15
+ model: model.table,
16
+ column: col
17
+ });
18
+ }
19
+ let MX = orderBy && orderBy[col] === "desc" ? "MAX" : "min";
20
+ dcols.push(`${model.table}.${model.IDColumn} IN (
21
+ SELECT ${MX}(${model.table}.${model.IDColumn})
22
+ FROM ${model.table}
23
+ ${where.sql}
24
+ GROUP BY ${col}
25
+ )`);
26
+ }
27
+ if (dcols.length) {
28
+ this.sql = `${dcols.join(" AND ")}`.trim();
29
+ }
30
+ }
31
+ }
32
+ }exports.default=DistinctArgs;//# sourceMappingURL=DistinctArgs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DistinctArgs.js","sources":["../../../../src/model/Executer/Find/DistinctArgs.ts"],"sourcesContent":["import Model from \"../..\"\nimport XansqlError from \"../../../core/XansqlError\"\nimport WhereArgs from \"../../Args/WhereArgs\"\nimport { DistinctArgsType, OrderByArgsType } from \"../../type\"\n\nclass DistinctArgs {\n /**\n * SQL representation of the distinct clause\n * format: WHERE id IN (SELECT MIN(id) FROM table GROUP BY col1) AND id IN (SELECT MAX(id) FROM table GROUP BY col2)\n */\n readonly sql: string = ''\n\n constructor(model: Model, args: DistinctArgsType, where: WhereArgs, orderBy?: OrderByArgsType) {\n const distinct = args || []\n if (distinct && distinct.length) {\n let dcols: string[] = []\n for (let col of distinct) {\n if (!(col in model.schema)) {\n throw new XansqlError({\n message: `Column ${col} not found in model ${model.table} for distinct`,\n model: model.table,\n column: col\n })\n };\n let MX = orderBy && orderBy[col] === \"desc\" ? \"MAX\" : \"min\"\n dcols.push(`${model.table}.${model.IDColumn} IN (\n SELECT ${MX}(${model.table}.${model.IDColumn})\n FROM ${model.table}\n ${where.sql}\n GROUP BY ${col}\n )`)\n }\n if (dcols.length) {\n this.sql = `${dcols.join(\" AND \")}`.trim()\n }\n }\n\n }\n}\nexport default DistinctArgs;\n"],"names":["XansqlError"],"mappings":"8HAKA,MAAM,YAAY,CAAA;AAOf,IAAA,WAAA,CAAY,KAAY,EAAE,IAAsB,EAAE,KAAgB,EAAE,OAAyB,EAAA;AAN7F;;;AAGG;QACM,IAAA,CAAA,GAAG,GAAW,EAAE;AAGtB,QAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;AAC3B,QAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE;YAC9B,IAAI,KAAK,GAAa,EAAE;AACxB,YAAA,KAAK,IAAI,GAAG,IAAI,QAAQ,EAAE;gBACvB,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;oBACzB,MAAM,IAAIA,mBAAW,CAAC;AACnB,wBAAA,OAAO,EAAE,CAAA,OAAA,EAAU,GAAG,uBAAuB,KAAK,CAAC,KAAK,CAAA,aAAA,CAAe;wBACvE,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,wBAAA,MAAM,EAAE;AACV,qBAAA,CAAC;gBACL;AACA,gBAAA,IAAI,EAAE,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,GAAG,KAAK,GAAG,KAAK;gBAC3D,KAAK,CAAC,IAAI,CAAC,CAAA,EAAG,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,KAAK,CAAC,QAAQ,CAAA;AAC/B,sBAAA,EAAA,EAAE,IAAI,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,KAAK,CAAC,QAAQ,CAAA;AACrC,oBAAA,EAAA,KAAK,CAAC,KAAK;AAChB,eAAA,EAAA,KAAK,CAAC,GAAG;2BACC,GAAG;AAChB,aAAA,CAAA,CAAC;YACN;AACA,YAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AACf,gBAAA,IAAI,CAAC,GAAG,GAAG,CAAA,EAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA,CAAE,CAAC,IAAI,EAAE;YAC7C;QACH;IAEH;AACF"}
@@ -0,0 +1,32 @@
1
+ import XansqlError from'../../../core/XansqlError.mjs';class DistinctArgs {
2
+ constructor(model, args, where, orderBy) {
3
+ /**
4
+ * SQL representation of the distinct clause
5
+ * format: WHERE id IN (SELECT MIN(id) FROM table GROUP BY col1) AND id IN (SELECT MAX(id) FROM table GROUP BY col2)
6
+ */
7
+ this.sql = '';
8
+ const distinct = args || [];
9
+ if (distinct && distinct.length) {
10
+ let dcols = [];
11
+ for (let col of distinct) {
12
+ if (!(col in model.schema)) {
13
+ throw new XansqlError({
14
+ message: `Column ${col} not found in model ${model.table} for distinct`,
15
+ model: model.table,
16
+ column: col
17
+ });
18
+ }
19
+ let MX = orderBy && orderBy[col] === "desc" ? "MAX" : "min";
20
+ dcols.push(`${model.table}.${model.IDColumn} IN (
21
+ SELECT ${MX}(${model.table}.${model.IDColumn})
22
+ FROM ${model.table}
23
+ ${where.sql}
24
+ GROUP BY ${col}
25
+ )`);
26
+ }
27
+ if (dcols.length) {
28
+ this.sql = `${dcols.join(" AND ")}`.trim();
29
+ }
30
+ }
31
+ }
32
+ }export{DistinctArgs as default};//# sourceMappingURL=DistinctArgs.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DistinctArgs.mjs","sources":["../../../../src/model/Executer/Find/DistinctArgs.ts"],"sourcesContent":["import Model from \"../..\"\nimport XansqlError from \"../../../core/XansqlError\"\nimport WhereArgs from \"../../Args/WhereArgs\"\nimport { DistinctArgsType, OrderByArgsType } from \"../../type\"\n\nclass DistinctArgs {\n /**\n * SQL representation of the distinct clause\n * format: WHERE id IN (SELECT MIN(id) FROM table GROUP BY col1) AND id IN (SELECT MAX(id) FROM table GROUP BY col2)\n */\n readonly sql: string = ''\n\n constructor(model: Model, args: DistinctArgsType, where: WhereArgs, orderBy?: OrderByArgsType) {\n const distinct = args || []\n if (distinct && distinct.length) {\n let dcols: string[] = []\n for (let col of distinct) {\n if (!(col in model.schema)) {\n throw new XansqlError({\n message: `Column ${col} not found in model ${model.table} for distinct`,\n model: model.table,\n column: col\n })\n };\n let MX = orderBy && orderBy[col] === \"desc\" ? \"MAX\" : \"min\"\n dcols.push(`${model.table}.${model.IDColumn} IN (\n SELECT ${MX}(${model.table}.${model.IDColumn})\n FROM ${model.table}\n ${where.sql}\n GROUP BY ${col}\n )`)\n }\n if (dcols.length) {\n this.sql = `${dcols.join(\" AND \")}`.trim()\n }\n }\n\n }\n}\nexport default DistinctArgs;\n"],"names":[],"mappings":"uDAKA,MAAM,YAAY,CAAA;AAOf,IAAA,WAAA,CAAY,KAAY,EAAE,IAAsB,EAAE,KAAgB,EAAE,OAAyB,EAAA;AAN7F;;;AAGG;QACM,IAAA,CAAA,GAAG,GAAW,EAAE;AAGtB,QAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;AAC3B,QAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE;YAC9B,IAAI,KAAK,GAAa,EAAE;AACxB,YAAA,KAAK,IAAI,GAAG,IAAI,QAAQ,EAAE;gBACvB,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;oBACzB,MAAM,IAAI,WAAW,CAAC;AACnB,wBAAA,OAAO,EAAE,CAAA,OAAA,EAAU,GAAG,uBAAuB,KAAK,CAAC,KAAK,CAAA,aAAA,CAAe;wBACvE,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,wBAAA,MAAM,EAAE;AACV,qBAAA,CAAC;gBACL;AACA,gBAAA,IAAI,EAAE,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,GAAG,KAAK,GAAG,KAAK;gBAC3D,KAAK,CAAC,IAAI,CAAC,CAAA,EAAG,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,KAAK,CAAC,QAAQ,CAAA;AAC/B,sBAAA,EAAA,EAAE,IAAI,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,KAAK,CAAC,QAAQ,CAAA;AACrC,oBAAA,EAAA,KAAK,CAAC,KAAK;AAChB,eAAA,EAAA,KAAK,CAAC,GAAG;2BACC,GAAG;AAChB,aAAA,CAAA,CAAC;YACN;AACA,YAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AACf,gBAAA,IAAI,CAAC,GAAG,GAAG,CAAA,EAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA,CAAE,CAAC,IAAI,EAAE;YAC7C;QACH;IAEH;AACF"}
@@ -0,0 +1,31 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var XansqlError=require('../../../core/XansqlError.js');class LimitArgs {
2
+ constructor(model, args) {
3
+ var _a, _b;
4
+ const xansql = model.xansql;
5
+ const maxLimit = xansql.config.maxLimit.find;
6
+ if (args === "all") {
7
+ this.take = 10000000; // set a very high limit for "all"
8
+ this.skip = 0;
9
+ this.sql = ``;
10
+ }
11
+ else {
12
+ let take = (_a = args.take) !== null && _a !== void 0 ? _a : maxLimit;
13
+ let skip = (_b = args.skip) !== null && _b !== void 0 ? _b : 0;
14
+ if (take < 0 || !Number.isInteger(take)) {
15
+ throw new XansqlError.default({
16
+ message: `Invalid take value in limit clause for model ${model.table}`,
17
+ model: model.table
18
+ });
19
+ }
20
+ if (skip < 0 || !Number.isInteger(skip)) {
21
+ throw new XansqlError.default({
22
+ message: `Invalid skip value in limit clause for model ${model.table}`,
23
+ model: model.table
24
+ });
25
+ }
26
+ this.take = take;
27
+ this.skip = skip;
28
+ this.sql = `LIMIT ${take} ${skip ? `OFFSET ${skip} ` : ""}`.trim();
29
+ }
30
+ }
31
+ }exports.default=LimitArgs;//# sourceMappingURL=LimitArgs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LimitArgs.js","sources":["../../../../src/model/Executer/Find/LimitArgs.ts"],"sourcesContent":["import Model from \"../..\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { LimitArgsType } from \"../../type\";\n\nclass LimitArgs {\n readonly take: number;\n readonly skip: number;\n\n /**\n * SQL representation of the limit clause\n * format: LIMIT take OFFSET skip\n */\n readonly sql: string;\n\n constructor(model: Model, args: LimitArgsType) {\n const xansql = model.xansql\n const maxLimit = xansql.config.maxLimit.find\n if (args === \"all\") {\n this.take = 10000000 // set a very high limit for \"all\"\n this.skip = 0\n this.sql = ``\n } else {\n let take = args.take ?? maxLimit\n let skip = args.skip ?? 0\n if (take < 0 || !Number.isInteger(take)) {\n throw new XansqlError({\n message: `Invalid take value in limit clause for model ${model.table}`,\n model: model.table\n })\n }\n if (skip < 0 || !Number.isInteger(skip)) {\n throw new XansqlError({\n message: `Invalid skip value in limit clause for model ${model.table}`,\n model: model.table\n })\n }\n\n this.take = take\n this.skip = skip\n this.sql = `LIMIT ${take} ${skip ? `OFFSET ${skip} ` : \"\"}`.trim()\n }\n }\n}\nexport default LimitArgs;\n"],"names":["XansqlError"],"mappings":"8HAIA,MAAM,SAAS,CAAA;IAUZ,WAAA,CAAY,KAAY,EAAE,IAAmB,EAAA;;AAC1C,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;QAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI;AAC5C,QAAA,IAAI,IAAI,KAAK,KAAK,EAAE;AACjB,YAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAA;AACpB,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,YAAA,IAAI,CAAC,GAAG,GAAG,CAAA,CAAE;QAChB;aAAO;YACJ,IAAI,IAAI,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,QAAQ;YAChC,IAAI,IAAI,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;AACzB,YAAA,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBACtC,MAAM,IAAIA,mBAAW,CAAC;AACnB,oBAAA,OAAO,EAAE,CAAA,6CAAA,EAAgD,KAAK,CAAC,KAAK,CAAA,CAAE;oBACtE,KAAK,EAAE,KAAK,CAAC;AACf,iBAAA,CAAC;YACL;AACA,YAAA,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBACtC,MAAM,IAAIA,mBAAW,CAAC;AACnB,oBAAA,OAAO,EAAE,CAAA,6CAAA,EAAgD,KAAK,CAAC,KAAK,CAAA,CAAE;oBACtE,KAAK,EAAE,KAAK,CAAC;AACf,iBAAA,CAAC;YACL;AAEA,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;YAChB,IAAI,CAAC,GAAG,GAAG,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA,EAAI,IAAI,GAAG,UAAU,IAAI,CAAA,CAAA,CAAG,GAAG,EAAE,CAAA,CAAE,CAAC,IAAI,EAAE;QACrE;IACH;AACF"}
@@ -0,0 +1,31 @@
1
+ import XansqlError from'../../../core/XansqlError.mjs';class LimitArgs {
2
+ constructor(model, args) {
3
+ var _a, _b;
4
+ const xansql = model.xansql;
5
+ const maxLimit = xansql.config.maxLimit.find;
6
+ if (args === "all") {
7
+ this.take = 10000000; // set a very high limit for "all"
8
+ this.skip = 0;
9
+ this.sql = ``;
10
+ }
11
+ else {
12
+ let take = (_a = args.take) !== null && _a !== void 0 ? _a : maxLimit;
13
+ let skip = (_b = args.skip) !== null && _b !== void 0 ? _b : 0;
14
+ if (take < 0 || !Number.isInteger(take)) {
15
+ throw new XansqlError({
16
+ message: `Invalid take value in limit clause for model ${model.table}`,
17
+ model: model.table
18
+ });
19
+ }
20
+ if (skip < 0 || !Number.isInteger(skip)) {
21
+ throw new XansqlError({
22
+ message: `Invalid skip value in limit clause for model ${model.table}`,
23
+ model: model.table
24
+ });
25
+ }
26
+ this.take = take;
27
+ this.skip = skip;
28
+ this.sql = `LIMIT ${take} ${skip ? `OFFSET ${skip} ` : ""}`.trim();
29
+ }
30
+ }
31
+ }export{LimitArgs as default};//# sourceMappingURL=LimitArgs.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LimitArgs.mjs","sources":["../../../../src/model/Executer/Find/LimitArgs.ts"],"sourcesContent":["import Model from \"../..\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { LimitArgsType } from \"../../type\";\n\nclass LimitArgs {\n readonly take: number;\n readonly skip: number;\n\n /**\n * SQL representation of the limit clause\n * format: LIMIT take OFFSET skip\n */\n readonly sql: string;\n\n constructor(model: Model, args: LimitArgsType) {\n const xansql = model.xansql\n const maxLimit = xansql.config.maxLimit.find\n if (args === \"all\") {\n this.take = 10000000 // set a very high limit for \"all\"\n this.skip = 0\n this.sql = ``\n } else {\n let take = args.take ?? maxLimit\n let skip = args.skip ?? 0\n if (take < 0 || !Number.isInteger(take)) {\n throw new XansqlError({\n message: `Invalid take value in limit clause for model ${model.table}`,\n model: model.table\n })\n }\n if (skip < 0 || !Number.isInteger(skip)) {\n throw new XansqlError({\n message: `Invalid skip value in limit clause for model ${model.table}`,\n model: model.table\n })\n }\n\n this.take = take\n this.skip = skip\n this.sql = `LIMIT ${take} ${skip ? `OFFSET ${skip} ` : \"\"}`.trim()\n }\n }\n}\nexport default LimitArgs;\n"],"names":[],"mappings":"uDAIA,MAAM,SAAS,CAAA;IAUZ,WAAA,CAAY,KAAY,EAAE,IAAmB,EAAA;;AAC1C,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;QAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI;AAC5C,QAAA,IAAI,IAAI,KAAK,KAAK,EAAE;AACjB,YAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAA;AACpB,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,YAAA,IAAI,CAAC,GAAG,GAAG,CAAA,CAAE;QAChB;aAAO;YACJ,IAAI,IAAI,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,QAAQ;YAChC,IAAI,IAAI,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;AACzB,YAAA,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBACtC,MAAM,IAAI,WAAW,CAAC;AACnB,oBAAA,OAAO,EAAE,CAAA,6CAAA,EAAgD,KAAK,CAAC,KAAK,CAAA,CAAE;oBACtE,KAAK,EAAE,KAAK,CAAC;AACf,iBAAA,CAAC;YACL;AACA,YAAA,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBACtC,MAAM,IAAI,WAAW,CAAC;AACnB,oBAAA,OAAO,EAAE,CAAA,6CAAA,EAAgD,KAAK,CAAC,KAAK,CAAA,CAAE;oBACtE,KAAK,EAAE,KAAK,CAAC;AACf,iBAAA,CAAC;YACL;AAEA,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;YAChB,IAAI,CAAC,GAAG,GAAG,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA,EAAI,IAAI,GAAG,UAAU,IAAI,CAAA,CAAA,CAAG,GAAG,EAAE,CAAA,CAAE,CAAC,IAAI,EAAE;QACrE;IACH;AACF"}
@@ -0,0 +1,29 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var XansqlError=require('../../../core/XansqlError.js');class OrderByArgs {
2
+ constructor(model, args) {
3
+ /**
4
+ * SQL representation of the order by clause
5
+ * format: ORDER BY col1 ASC, col2 DESC
6
+ */
7
+ this.sql = '';
8
+ const items = [];
9
+ for (let column in args) {
10
+ const val = args[column];
11
+ if (!(column in model.schema)) {
12
+ throw new XansqlError.default({
13
+ message: `Column ${column} not found in model ${model.table} for order by`,
14
+ model: model.table,
15
+ column: column
16
+ });
17
+ }
18
+ if (['asc', 'desc'].includes(val) === false) {
19
+ throw new XansqlError.default({
20
+ message: `Invalid order by direction for column ${column} in model ${model.table}. Expected 'asc' or 'desc', got '${val}'`,
21
+ model: model.table,
22
+ column: column
23
+ });
24
+ }
25
+ items.push(`${model.table}.${column} ${val.toUpperCase()}`);
26
+ }
27
+ this.sql = items.length ? `ORDER BY ${items.join(', ')} ` : "";
28
+ }
29
+ }exports.default=OrderByArgs;//# sourceMappingURL=OrderByArgs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrderByArgs.js","sources":["../../../../src/model/Executer/Find/OrderByArgs.ts"],"sourcesContent":["import Model from \"../..\"\nimport XansqlError from \"../../../core/XansqlError\"\nimport { OrderByArgsType } from \"../../type\"\n\nclass OrderByArgs {\n /**\n * SQL representation of the order by clause\n * format: ORDER BY col1 ASC, col2 DESC\n */\n readonly sql: string = ''\n\n constructor(model: Model, args: OrderByArgsType) {\n const items = []\n for (let column in args) {\n const val = args[column]\n if (!(column in model.schema)) {\n throw new XansqlError({\n message: `Column ${column} not found in model ${model.table} for order by`,\n model: model.table,\n column: column\n })\n };\n if (['asc', 'desc'].includes(val) === false) {\n throw new XansqlError({\n message: `Invalid order by direction for column ${column} in model ${model.table}. Expected 'asc' or 'desc', got '${val}'`,\n model: model.table,\n column: column\n })\n }\n items.push(`${model.table}.${column} ${val.toUpperCase()}`)\n }\n this.sql = items.length ? `ORDER BY ${items.join(', ')} ` : \"\"\n }\n}\n\nexport default OrderByArgs;"],"names":["XansqlError"],"mappings":"8HAIA,MAAM,WAAW,CAAA;IAOd,WAAA,CAAY,KAAY,EAAE,IAAqB,EAAA;AAN/C;;;AAGG;QACM,IAAA,CAAA,GAAG,GAAW,EAAE;QAGtB,MAAM,KAAK,GAAG,EAAE;AAChB,QAAA,KAAK,IAAI,MAAM,IAAI,IAAI,EAAE;AACtB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;YACxB,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;gBAC5B,MAAM,IAAIA,mBAAW,CAAC;AACnB,oBAAA,OAAO,EAAE,CAAA,OAAA,EAAU,MAAM,uBAAuB,KAAK,CAAC,KAAK,CAAA,aAAA,CAAe;oBAC1E,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,oBAAA,MAAM,EAAE;AACV,iBAAA,CAAC;YACL;AACA,YAAA,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE;gBAC1C,MAAM,IAAIA,mBAAW,CAAC;oBACnB,OAAO,EAAE,yCAAyC,MAAM,CAAA,UAAA,EAAa,KAAK,CAAC,KAAK,CAAA,iCAAA,EAAoC,GAAG,CAAA,CAAA,CAAG;oBAC1H,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,oBAAA,MAAM,EAAE;AACV,iBAAA,CAAC;YACL;AACA,YAAA,KAAK,CAAC,IAAI,CAAC,CAAA,EAAG,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,EAAI,GAAG,CAAC,WAAW,EAAE,CAAA,CAAE,CAAC;QAC9D;QACA,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,CAAA,SAAA,EAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE;IACjE;AACF"}
@@ -0,0 +1,29 @@
1
+ import XansqlError from'../../../core/XansqlError.mjs';class OrderByArgs {
2
+ constructor(model, args) {
3
+ /**
4
+ * SQL representation of the order by clause
5
+ * format: ORDER BY col1 ASC, col2 DESC
6
+ */
7
+ this.sql = '';
8
+ const items = [];
9
+ for (let column in args) {
10
+ const val = args[column];
11
+ if (!(column in model.schema)) {
12
+ throw new XansqlError({
13
+ message: `Column ${column} not found in model ${model.table} for order by`,
14
+ model: model.table,
15
+ column: column
16
+ });
17
+ }
18
+ if (['asc', 'desc'].includes(val) === false) {
19
+ throw new XansqlError({
20
+ message: `Invalid order by direction for column ${column} in model ${model.table}. Expected 'asc' or 'desc', got '${val}'`,
21
+ model: model.table,
22
+ column: column
23
+ });
24
+ }
25
+ items.push(`${model.table}.${column} ${val.toUpperCase()}`);
26
+ }
27
+ this.sql = items.length ? `ORDER BY ${items.join(', ')} ` : "";
28
+ }
29
+ }export{OrderByArgs as default};//# sourceMappingURL=OrderByArgs.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrderByArgs.mjs","sources":["../../../../src/model/Executer/Find/OrderByArgs.ts"],"sourcesContent":["import Model from \"../..\"\nimport XansqlError from \"../../../core/XansqlError\"\nimport { OrderByArgsType } from \"../../type\"\n\nclass OrderByArgs {\n /**\n * SQL representation of the order by clause\n * format: ORDER BY col1 ASC, col2 DESC\n */\n readonly sql: string = ''\n\n constructor(model: Model, args: OrderByArgsType) {\n const items = []\n for (let column in args) {\n const val = args[column]\n if (!(column in model.schema)) {\n throw new XansqlError({\n message: `Column ${column} not found in model ${model.table} for order by`,\n model: model.table,\n column: column\n })\n };\n if (['asc', 'desc'].includes(val) === false) {\n throw new XansqlError({\n message: `Invalid order by direction for column ${column} in model ${model.table}. Expected 'asc' or 'desc', got '${val}'`,\n model: model.table,\n column: column\n })\n }\n items.push(`${model.table}.${column} ${val.toUpperCase()}`)\n }\n this.sql = items.length ? `ORDER BY ${items.join(', ')} ` : \"\"\n }\n}\n\nexport default OrderByArgs;"],"names":[],"mappings":"uDAIA,MAAM,WAAW,CAAA;IAOd,WAAA,CAAY,KAAY,EAAE,IAAqB,EAAA;AAN/C;;;AAGG;QACM,IAAA,CAAA,GAAG,GAAW,EAAE;QAGtB,MAAM,KAAK,GAAG,EAAE;AAChB,QAAA,KAAK,IAAI,MAAM,IAAI,IAAI,EAAE;AACtB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;YACxB,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;gBAC5B,MAAM,IAAI,WAAW,CAAC;AACnB,oBAAA,OAAO,EAAE,CAAA,OAAA,EAAU,MAAM,uBAAuB,KAAK,CAAC,KAAK,CAAA,aAAA,CAAe;oBAC1E,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,oBAAA,MAAM,EAAE;AACV,iBAAA,CAAC;YACL;AACA,YAAA,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE;gBAC1C,MAAM,IAAI,WAAW,CAAC;oBACnB,OAAO,EAAE,yCAAyC,MAAM,CAAA,UAAA,EAAa,KAAK,CAAC,KAAK,CAAA,iCAAA,EAAoC,GAAG,CAAA,CAAA,CAAG;oBAC1H,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,oBAAA,MAAM,EAAE;AACV,iBAAA,CAAC;YACL;AACA,YAAA,KAAK,CAAC,IAAI,CAAC,CAAA,EAAG,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,EAAI,GAAG,CAAC,WAAW,EAAE,CAAA,CAAE,CAAC;QAC9D;QACA,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,CAAA,SAAA,EAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE;IACjE;AACF"}