xansql 1.0.8 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/core/Xansql.cjs +7 -8
  2. package/core/Xansql.cjs.map +1 -1
  3. package/core/Xansql.d.ts +2 -3
  4. package/core/Xansql.mjs +7 -8
  5. package/core/Xansql.mjs.map +1 -1
  6. package/core/classes/ForeignInfo.cjs +3 -2
  7. package/core/classes/ForeignInfo.cjs.map +1 -1
  8. package/core/classes/ForeignInfo.d.ts +1 -2
  9. package/core/classes/ForeignInfo.mjs +3 -2
  10. package/core/classes/ForeignInfo.mjs.map +1 -1
  11. package/core/classes/Migration/TableMigration.cjs +24 -15
  12. package/core/classes/Migration/TableMigration.cjs.map +1 -1
  13. package/core/classes/Migration/TableMigration.mjs +25 -16
  14. package/core/classes/Migration/TableMigration.mjs.map +1 -1
  15. package/core/classes/Migration/index.cjs +13 -10
  16. package/core/classes/Migration/index.cjs.map +1 -1
  17. package/core/classes/Migration/index.mjs +14 -11
  18. package/core/classes/Migration/index.mjs.map +1 -1
  19. package/core/classes/{ModelFormatter.cjs → ModelFactory.cjs} +82 -56
  20. package/core/classes/ModelFactory.cjs.map +1 -0
  21. package/core/classes/{ModelFormatter.d.ts → ModelFactory.d.ts} +7 -2
  22. package/core/classes/{ModelFormatter.mjs → ModelFactory.mjs} +82 -56
  23. package/core/classes/ModelFactory.mjs.map +1 -0
  24. package/core/types.d.ts +1 -1
  25. package/dialect/MysqlDialect.cjs +7 -4
  26. package/dialect/MysqlDialect.cjs.map +1 -1
  27. package/dialect/MysqlDialect.d.ts +7 -4
  28. package/dialect/MysqlDialect.mjs +7 -4
  29. package/dialect/MysqlDialect.mjs.map +1 -1
  30. package/dialect/PostgresDialect.cjs +5 -2
  31. package/dialect/PostgresDialect.cjs.map +1 -1
  32. package/dialect/PostgresDialect.d.ts +5 -2
  33. package/dialect/PostgresDialect.mjs +5 -2
  34. package/dialect/PostgresDialect.mjs.map +1 -1
  35. package/dialect/SqliteDialect.cjs +3 -2
  36. package/dialect/SqliteDialect.cjs.map +1 -1
  37. package/dialect/SqliteDialect.d.ts +3 -2
  38. package/dialect/SqliteDialect.mjs +3 -2
  39. package/dialect/SqliteDialect.mjs.map +1 -1
  40. package/dialect/XansqlBridge/XansqlBridgeServer.cjs.map +1 -1
  41. package/dialect/XansqlBridge/XansqlBridgeServer.mjs.map +1 -1
  42. package/dialect/XansqlBridge/base.cjs +10 -5
  43. package/dialect/XansqlBridge/base.cjs.map +1 -1
  44. package/dialect/XansqlBridge/base.mjs +10 -5
  45. package/dialect/XansqlBridge/base.mjs.map +1 -1
  46. package/model/Args/WhereArgs.cjs +5 -8
  47. package/model/Args/WhereArgs.cjs.map +1 -1
  48. package/model/Args/WhereArgs.mjs +6 -9
  49. package/model/Args/WhereArgs.mjs.map +1 -1
  50. package/model/Base.cjs +2 -1
  51. package/model/Base.cjs.map +1 -1
  52. package/model/Base.mjs +2 -1
  53. package/model/Base.mjs.map +1 -1
  54. package/model/Executer/Aggregate/SelectArgs.cjs +2 -1
  55. package/model/Executer/Aggregate/SelectArgs.cjs.map +1 -1
  56. package/model/Executer/Aggregate/SelectArgs.mjs +2 -1
  57. package/model/Executer/Aggregate/SelectArgs.mjs.map +1 -1
  58. package/model/Executer/Aggregate/index.cjs +4 -4
  59. package/model/Executer/Aggregate/index.cjs.map +1 -1
  60. package/model/Executer/Aggregate/index.mjs +4 -4
  61. package/model/Executer/Aggregate/index.mjs.map +1 -1
  62. package/model/Executer/Create/CreateDataArgs.cjs +9 -5
  63. package/model/Executer/Create/CreateDataArgs.cjs.map +1 -1
  64. package/model/Executer/Create/CreateDataArgs.mjs +10 -6
  65. package/model/Executer/Create/CreateDataArgs.mjs.map +1 -1
  66. package/model/Executer/Create/index.cjs +1 -1
  67. package/model/Executer/Create/index.cjs.map +1 -1
  68. package/model/Executer/Create/index.mjs +1 -1
  69. package/model/Executer/Create/index.mjs.map +1 -1
  70. package/model/Executer/Delete/index.cjs +2 -1
  71. package/model/Executer/Delete/index.cjs.map +1 -1
  72. package/model/Executer/Delete/index.mjs +2 -1
  73. package/model/Executer/Delete/index.mjs.map +1 -1
  74. package/model/Executer/Find/SelectArgs.cjs +3 -3
  75. package/model/Executer/Find/SelectArgs.cjs.map +1 -1
  76. package/model/Executer/Find/SelectArgs.mjs +3 -3
  77. package/model/Executer/Find/SelectArgs.mjs.map +1 -1
  78. package/model/Executer/Update/UpdateDataArgs.cjs +4 -4
  79. package/model/Executer/Update/UpdateDataArgs.cjs.map +1 -1
  80. package/model/Executer/Update/UpdateDataArgs.mjs +5 -5
  81. package/model/Executer/Update/UpdateDataArgs.mjs.map +1 -1
  82. package/model/Executer/Update/index.cjs +1 -1
  83. package/model/Executer/Update/index.cjs.map +1 -1
  84. package/model/Executer/Update/index.mjs +1 -1
  85. package/model/Executer/Update/index.mjs.map +1 -1
  86. package/model/include/ValueFormatter.cjs +72 -17
  87. package/model/include/ValueFormatter.cjs.map +1 -1
  88. package/model/include/ValueFormatter.d.ts +1 -1
  89. package/model/include/ValueFormatter.mjs +72 -17
  90. package/model/include/ValueFormatter.mjs.map +1 -1
  91. package/model/index.cjs +8 -7
  92. package/model/index.cjs.map +1 -1
  93. package/model/index.mjs +8 -7
  94. package/model/index.mjs.map +1 -1
  95. package/package.json +12 -7
  96. package/utils/index.cjs +5 -2
  97. package/utils/index.cjs.map +1 -1
  98. package/utils/index.d.ts +2 -1
  99. package/utils/index.mjs +5 -3
  100. package/utils/index.mjs.map +1 -1
  101. package/xt/additional/IP.cjs +22 -0
  102. package/xt/additional/IP.cjs.map +1 -0
  103. package/xt/additional/IP.d.ts +6 -0
  104. package/xt/additional/IP.mjs +20 -0
  105. package/xt/additional/IP.mjs.map +1 -0
  106. package/xt/additional/Name.cjs +21 -0
  107. package/xt/additional/Name.cjs.map +1 -0
  108. package/xt/additional/Name.d.ts +6 -0
  109. package/xt/additional/Name.mjs +19 -0
  110. package/xt/additional/Name.mjs.map +1 -0
  111. package/xt/additional/Password.cjs +25 -0
  112. package/xt/additional/Password.cjs.map +1 -0
  113. package/xt/additional/Password.d.ts +6 -0
  114. package/xt/additional/Password.mjs +23 -0
  115. package/xt/additional/Password.mjs.map +1 -0
  116. package/xt/additional/Phone.cjs +21 -0
  117. package/xt/additional/Phone.cjs.map +1 -0
  118. package/xt/additional/Phone.d.ts +6 -0
  119. package/xt/additional/Phone.mjs +19 -0
  120. package/xt/additional/Phone.mjs.map +1 -0
  121. package/xt/additional/Photo.cjs +21 -0
  122. package/xt/additional/Photo.cjs.map +1 -0
  123. package/xt/additional/Photo.d.ts +6 -0
  124. package/xt/additional/Photo.mjs +19 -0
  125. package/xt/additional/Photo.mjs.map +1 -0
  126. package/xt/additional/Slug.cjs +21 -0
  127. package/xt/additional/Slug.cjs.map +1 -0
  128. package/xt/additional/Slug.d.ts +6 -0
  129. package/xt/additional/Slug.mjs +19 -0
  130. package/xt/additional/Slug.mjs.map +1 -0
  131. package/xt/additional/Url.cjs +26 -0
  132. package/xt/additional/Url.cjs.map +1 -0
  133. package/xt/additional/Url.d.ts +6 -0
  134. package/xt/additional/Url.mjs +24 -0
  135. package/xt/additional/Url.mjs.map +1 -0
  136. package/xt/additional/Username.cjs +21 -0
  137. package/xt/additional/Username.cjs.map +1 -0
  138. package/xt/additional/Username.d.ts +6 -0
  139. package/xt/additional/Username.mjs +19 -0
  140. package/xt/additional/Username.mjs.map +1 -0
  141. package/xt/fields/Array.cjs +9 -2
  142. package/xt/fields/Array.cjs.map +1 -1
  143. package/xt/fields/Array.d.ts +2 -0
  144. package/xt/fields/Array.mjs +9 -2
  145. package/xt/fields/Array.mjs.map +1 -1
  146. package/xt/fields/Boolean.cjs +10 -5
  147. package/xt/fields/Boolean.cjs.map +1 -1
  148. package/xt/fields/Boolean.d.ts +2 -0
  149. package/xt/fields/Boolean.mjs +10 -5
  150. package/xt/fields/Boolean.mjs.map +1 -1
  151. package/xt/fields/Date.cjs +12 -12
  152. package/xt/fields/Date.cjs.map +1 -1
  153. package/xt/fields/Date.d.ts +2 -0
  154. package/xt/fields/Date.mjs +12 -12
  155. package/xt/fields/Date.mjs.map +1 -1
  156. package/xt/fields/Enum.cjs +10 -4
  157. package/xt/fields/Enum.cjs.map +1 -1
  158. package/xt/fields/Enum.d.ts +2 -0
  159. package/xt/fields/Enum.mjs +10 -4
  160. package/xt/fields/Enum.mjs.map +1 -1
  161. package/xt/fields/File.cjs +9 -2
  162. package/xt/fields/File.cjs.map +1 -1
  163. package/xt/fields/File.d.ts +2 -0
  164. package/xt/fields/File.mjs +9 -2
  165. package/xt/fields/File.mjs.map +1 -1
  166. package/xt/fields/IDField.cjs +8 -0
  167. package/xt/fields/IDField.cjs.map +1 -1
  168. package/xt/fields/IDField.d.ts +2 -0
  169. package/xt/fields/IDField.mjs +8 -0
  170. package/xt/fields/IDField.mjs.map +1 -1
  171. package/xt/fields/Number.cjs +10 -5
  172. package/xt/fields/Number.cjs.map +1 -1
  173. package/xt/fields/Number.d.ts +2 -0
  174. package/xt/fields/Number.mjs +10 -5
  175. package/xt/fields/Number.mjs.map +1 -1
  176. package/xt/fields/Object.cjs +10 -5
  177. package/xt/fields/Object.cjs.map +1 -1
  178. package/xt/fields/Object.d.ts +2 -0
  179. package/xt/fields/Object.mjs +10 -5
  180. package/xt/fields/Object.mjs.map +1 -1
  181. package/xt/fields/Record.cjs +10 -5
  182. package/xt/fields/Record.cjs.map +1 -1
  183. package/xt/fields/Record.d.ts +2 -0
  184. package/xt/fields/Record.mjs +10 -5
  185. package/xt/fields/Record.mjs.map +1 -1
  186. package/xt/fields/Schema.cjs +12 -1
  187. package/xt/fields/Schema.cjs.map +1 -1
  188. package/xt/fields/Schema.d.ts +4 -1
  189. package/xt/fields/Schema.mjs +12 -1
  190. package/xt/fields/Schema.mjs.map +1 -1
  191. package/xt/fields/String.cjs +12 -9
  192. package/xt/fields/String.cjs.map +1 -1
  193. package/xt/fields/String.d.ts +2 -0
  194. package/xt/fields/String.mjs +12 -9
  195. package/xt/fields/String.mjs.map +1 -1
  196. package/xt/fields/Tuple.cjs +10 -5
  197. package/xt/fields/Tuple.cjs.map +1 -1
  198. package/xt/fields/Tuple.d.ts +2 -0
  199. package/xt/fields/Tuple.mjs +10 -5
  200. package/xt/fields/Tuple.mjs.map +1 -1
  201. package/xt/fields/Union.cjs +10 -5
  202. package/xt/fields/Union.cjs.map +1 -1
  203. package/xt/fields/Union.d.ts +2 -0
  204. package/xt/fields/Union.mjs +10 -5
  205. package/xt/fields/Union.mjs.map +1 -1
  206. package/xt/index.cjs +16 -100
  207. package/xt/index.cjs.map +1 -1
  208. package/xt/index.d.ts +16 -9
  209. package/xt/index.mjs +16 -100
  210. package/xt/index.mjs.map +1 -1
  211. package/core/classes/ModelFormatter.cjs.map +0 -1
  212. package/core/classes/ModelFormatter.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"WhereArgs.cjs","sources":["../../../src/model/Args/WhereArgs.ts"],"sourcesContent":["import Model from \"..\";\nimport Foreign from \"../../core/classes/ForeignInfo\";\nimport XansqlError from \"../../core/XansqlError\";\nimport XqlArray from \"../../xt/fields/Array\";\nimport XqlObject from \"../../xt/fields/Object\";\nimport XqlRecord from \"../../xt/fields/Record\";\nimport XqlTuple from \"../../xt/fields/Tuple\";\nimport { escapeSqlValue, isArray, isObject } from \"../../utils\";\nimport ValueFormatter from \"../include/ValueFormatter\";\nimport { WhereArgsType, WhereSubCondition } from \"../types\";\n\ntype Meta = {\n parentTable: string\n}\n\nclass WhereArgs {\n private model: Model\n // private where: WhereArgsType\n // private meta: Meta | undefined\n readonly wheres: string[]\n readonly sql: string = ''\n private condition_keys = [\"equals\", \"not\", \"lt\", \"lte\", \"gt\", \"gte\", \"in\", \"notIn\", \"between\", \"notBetween\", \"contains\", \"notContains\", \"startsWith\", \"endsWith\", \"isNull\", \"isNotNull\", \"isEmpty\", \"isNotEmpty\", \"isTrue\", \"isFalse\"]\n\n constructor(model: Model, where: WhereArgsType | WhereArgsType[], meta?: Meta) {\n this.model = model\n\n let schema = model.schema\n let wheres: string[] = []\n\n if (Array.isArray(where)) {\n let _ors = []\n for (let w of where) {\n const whereArgs = new WhereArgs(model, w, meta)\n if (whereArgs.sql) {\n if (whereArgs.wheres.length > 1) {\n _ors.push(`(${whereArgs.wheres.join(\" AND \")})`)\n } else {\n _ors.push(`${whereArgs.wheres.join(\" AND \")}`)\n }\n }\n }\n\n if (_ors.length) {\n wheres.push(`(${_ors.join(\" OR \")})`)\n }\n } else {\n for (let column in where) {\n this.checkIsAllowed(column)\n const value: any = where[column]\n const field = schema[column]\n\n if (Foreign.is(field)) {\n if (!isArray(value) && !isObject(value)) {\n throw new XansqlError({\n message: `${column} must be an object or array in the WHERE clause, but received ${typeof value} in table ${model.table}`,\n model: model.table,\n column\n });\n } else if (isObject(value) && Object.keys(value).length === 0 || isArray(value) && value.length === 0) {\n // skip empty object\n continue;\n }\n\n if (Foreign.isSchema(field) && isObject(value) && Object.keys(value).some(k => this.condition_keys.includes(k))) {\n const v = this.condition(column, value as WhereSubCondition)\n wheres.push(v)\n continue\n }\n\n let foreign = Foreign.get(model, column)\n let FModel = model.xansql.getModel(foreign.table)\n if (meta && meta.parentTable === foreign.table) {\n throw new XansqlError({\n message: `Circular reference detected in WHERE clause for table ${model.table} on column ${column}`,\n model: model.table,\n column\n });\n }\n let _sql = ''\n if (Array.isArray(value) || isObject(value)) {\n const where = new WhereArgs(FModel, value, { parentTable: model.table })\n if (where.sql) {\n _sql = where.wheres.join(\" AND \")\n }\n } else {\n throw new XansqlError({\n message: `Invalid value for foreign key ${column} in WHERE clause of table ${model.table}`,\n model: model.table,\n column\n });\n }\n\n wheres.push(`EXISTS (SELECT 1 FROM ${foreign.table} WHERE ${foreign.sql} ${_sql ? ` AND ${_sql}` : \"\"})`)\n } else {\n let v = ''\n if (Array.isArray(value)) {\n const sub = value.map((_v: any) => {\n return isObject(_v)\n ? this.condition(column, _v)\n : `${model.table}.${column} = ${ValueFormatter.toSql(model, column, _v)}`\n })\n if (sub.length > 1) {\n v = `(${sub.join(\" OR \")})`\n } else {\n v = sub.join(\" OR \")\n }\n } else if (isObject(value)) {\n v = this.condition(column, value)\n } else {\n v = `${model.table}.${column} = ${ValueFormatter.toSql(model, column, value)}`\n }\n wheres.push(v)\n }\n }\n }\n\n this.wheres = wheres\n this.sql = this.wheres.length ? `WHERE ${this.wheres.join(\" AND \")} ` : \"\"\n }\n\n private condition(column: string, conditions: WhereSubCondition) {\n const model = this.model\n const generate = Object.keys(conditions).map((subKey) => {\n let value = (conditions as any)[subKey];\n if (isObject(value)) {\n throw new XansqlError({\n message: `Invalid value for where condition ${subKey} on column ${column} in table ${model.table}`,\n model: model.table,\n column\n });\n }\n let val: string = value;\n if (Array.isArray(val)) {\n if (['in', 'notIn'].includes(subKey)) {\n val = val.map((item) => ValueFormatter.toSql(model, column, item)).join(\", \");\n } else if (['between', 'notBetween'].includes(subKey)) {\n if (val.length !== 2) {\n throw new XansqlError({\n message: `The 'between' and 'notBetween' operators require an array of exactly two values for column ${column} in table ${model.table}.`,\n model: model.table,\n column\n });\n }\n val = val.map((item) => ValueFormatter.toSql(model, column, item)).join(\" AND \");\n } else {\n throw new XansqlError({\n message: `Array value is not supported for operator ${subKey} on column ${column} in table ${model.table}.`,\n model: model.table,\n column\n });\n }\n } else if (typeof val === 'boolean') {\n val = val ? \"1\" : \"0\";\n } else {\n val = ValueFormatter.toSql(model, column, val);\n }\n\n let col = model.table + \".\" + column;\n switch (subKey) {\n case 'equals':\n if (val === \"NULL\") return `${col} IS NULL`;\n return `${col} = ${val}`;\n case 'not':\n if (val === \"NULL\") return `${col} IS NOT NULL`;\n return `${col} != ${val}`;\n case 'lt':\n return `${col} < ${val}`;\n case 'lte':\n return `${col} <= ${val}`;\n case 'gt':\n return `${col} > ${val}`;\n case 'gte':\n return `${col} >= ${val}`;\n case 'in':\n if (val?.length === 0) {\n return `1 = 0`;\n } else if (!val.includes(\",\")) {\n return `${col} = ${val}`;\n }\n return `${col} IN (${val})`;\n case 'notIn':\n // handle empty array and val is a single value\n if (val.length === 0) {\n return `1 = 1`;\n } else if (!val.includes(\",\")) {\n return `${col} != ${val}`;\n }\n return `${col} NOT IN (${val})`;\n case 'between':\n return `${col} BETWEEN (${val})`;\n case 'notBetween':\n return `${col} NOT BETWEEN (${val})`;\n case 'contains':\n return `${col} LIKE '%${escapeSqlValue(value)}%'`;\n case 'notContains':\n return `${col} NOT LIKE '%${escapeSqlValue(value)}%'`;\n case 'startsWith':\n return `${col} LIKE '${escapeSqlValue(value)}%'`;\n case 'endsWith':\n return `${col} LIKE '%${escapeSqlValue(value)}'`;\n case 'isNull':\n return `${col} IS NULL`;\n case 'isNotNull':\n return `${col} IS NOT NULL`;\n case 'isEmpty':\n return `(${col} IS NULL OR LENGTH(${col}) = 0)`;\n case 'isNotEmpty':\n return `(WHERE ${col} IS NOT NULL AND LENGTH(${col}) > 0)`;\n case 'isTrue':\n return `${col} = TRUE`;\n case 'isFalse':\n return `${col} = FALSE`;\n default:\n throw new XansqlError({\n message: `Unknown where condition ${subKey} on column ${column} in table ${model.table}`,\n model: model.table,\n column\n });\n }\n });\n\n return `${generate.join(' AND ')}`;\n }\n\n private checkIsAllowed(column: string) {\n const xanv = this.model.schema[column]\n if (Foreign.isArray(xanv)) return true\n const isNotAllowed = xanv instanceof XqlArray\n || xanv instanceof XqlObject\n || xanv instanceof XqlRecord\n || xanv instanceof XqlTuple\n // || xanv instanceof XqlFile\n\n if (isNotAllowed) {\n throw new XansqlError({\n message: `Field ${column} of type ${xanv.constructor.name} is not allowed in WHERE clause in table ${this.model.table}`,\n model: this.model.table,\n column\n });\n }\n }\n}\n\nexport default WhereArgs;"],"names":["Foreign","isArray","isObject","XansqlError","ValueFormatter","escapeSqlValue","XqlArray","XqlObject","XqlRecord","XqlTuple"],"mappings":"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"}
1
+ {"version":3,"file":"WhereArgs.cjs","sources":["../../../src/model/Args/WhereArgs.ts"],"sourcesContent":["import Model from \"..\";\nimport Foreign from \"../../core/classes/ForeignInfo\";\nimport XansqlError from \"../../core/XansqlError\";\nimport XqlArray from \"../../xt/fields/Array\";\nimport XqlObject from \"../../xt/fields/Object\";\nimport XqlRecord from \"../../xt/fields/Record\";\nimport XqlTuple from \"../../xt/fields/Tuple\";\nimport { escapeSqlValue, iof, isArray, isObject } from \"../../utils\";\nimport ValueFormatter from \"../include/ValueFormatter\";\nimport { WhereArgsType, WhereSubCondition } from \"../types\";\nimport XqlFile from \"../../xt/fields/File\";\n\ntype Meta = {\n parentTable: string\n}\n\nclass WhereArgs {\n private model: Model\n // private where: WhereArgsType\n // private meta: Meta | undefined\n readonly wheres: string[]\n readonly sql: string = ''\n private condition_keys = [\"equals\", \"not\", \"lt\", \"lte\", \"gt\", \"gte\", \"in\", \"notIn\", \"between\", \"notBetween\", \"contains\", \"notContains\", \"startsWith\", \"endsWith\", \"isNull\", \"isNotNull\", \"isEmpty\", \"isNotEmpty\", \"isTrue\", \"isFalse\"]\n\n constructor(model: Model, where: WhereArgsType | WhereArgsType[], meta?: Meta) {\n this.model = model\n\n let schema = model.schema\n let wheres: string[] = []\n\n if (Array.isArray(where)) {\n let _ors = []\n for (let w of where) {\n const whereArgs = new WhereArgs(model, w, meta)\n if (whereArgs.sql) {\n if (whereArgs.wheres.length > 1) {\n _ors.push(`(${whereArgs.wheres.join(\" AND \")})`)\n } else {\n _ors.push(`${whereArgs.wheres.join(\" AND \")}`)\n }\n }\n }\n\n if (_ors.length) {\n wheres.push(`(${_ors.join(\" OR \")})`)\n }\n } else {\n for (let column in where) {\n this.checkIsAllowed(column)\n const value: any = where[column]\n const field = schema[column]\n\n if (Foreign.is(field)) {\n if (!isArray(value) && !isObject(value)) {\n throw new XansqlError({\n message: `${column} must be an object or array in the WHERE clause, but received ${typeof value} in table ${model.table}`,\n model: model.table,\n column\n });\n } else if (isObject(value) && Object.keys(value).length === 0 || isArray(value) && value.length === 0) {\n // skip empty object\n continue;\n }\n\n if (Foreign.isSchema(field) && isObject(value) && Object.keys(value).some(k => this.condition_keys.includes(k))) {\n const v = this.condition(column, value as WhereSubCondition)\n wheres.push(v)\n continue\n }\n\n let foreign = Foreign.get(model, column)\n let FModel = model.xansql.getModel(foreign.table)\n if (meta && meta.parentTable === foreign.table) {\n throw new XansqlError({\n message: `Circular reference detected in WHERE clause for table ${model.table} on column ${column}`,\n model: model.table,\n column\n });\n }\n let _sql = ''\n if (Array.isArray(value) || isObject(value)) {\n const where = new WhereArgs(FModel, value, { parentTable: model.table })\n if (where.sql) {\n _sql = where.wheres.join(\" AND \")\n }\n } else {\n throw new XansqlError({\n message: `Invalid value for foreign key ${column} in WHERE clause of table ${model.table}`,\n model: model.table,\n column\n });\n }\n\n wheres.push(`EXISTS (SELECT 1 FROM ${foreign.table} WHERE ${foreign.sql} ${_sql ? ` AND ${_sql}` : \"\"})`)\n } else {\n let v = ''\n if (Array.isArray(value)) {\n const sub = value.map((_v: any) => {\n return isObject(_v)\n ? this.condition(column, _v)\n : `${model.table}.${column} = ${ValueFormatter.toSql(model, column, _v)}`\n })\n if (sub.length > 1) {\n v = `(${sub.join(\" OR \")})`\n } else {\n v = sub.join(\" OR \")\n }\n } else if (isObject(value)) {\n v = this.condition(column, value)\n } else {\n v = `${model.table}.${column} = ${ValueFormatter.toSql(model, column, value)}`\n }\n wheres.push(v)\n }\n }\n }\n\n this.wheres = wheres\n this.sql = this.wheres.length ? `WHERE ${this.wheres.join(\" AND \")} ` : \"\"\n }\n\n private condition(column: string, conditions: WhereSubCondition) {\n const model = this.model\n const generate = Object.keys(conditions).map((subKey) => {\n let value = (conditions as any)[subKey];\n if (isObject(value)) {\n throw new XansqlError({\n message: `Invalid value for where condition ${subKey} on column ${column} in table ${model.table}`,\n model: model.table,\n column\n });\n }\n let val: string = value;\n if (Array.isArray(val)) {\n if (['in', 'notIn'].includes(subKey)) {\n val = val.map((item) => ValueFormatter.toSql(model, column, item)).join(\", \");\n } else if (['between', 'notBetween'].includes(subKey)) {\n if (val.length !== 2) {\n throw new XansqlError({\n message: `The 'between' and 'notBetween' operators require an array of exactly two values for column ${column} in table ${model.table}.`,\n model: model.table,\n column\n });\n }\n val = val.map((item) => ValueFormatter.toSql(model, column, item)).join(\" AND \");\n } else {\n throw new XansqlError({\n message: `Array value is not supported for operator ${subKey} on column ${column} in table ${model.table}.`,\n model: model.table,\n column\n });\n }\n } else if (typeof val === 'boolean') {\n val = val ? \"1\" : \"0\";\n } else {\n val = ValueFormatter.toSql(model, column, val);\n }\n\n let col = model.table + \".\" + column;\n switch (subKey) {\n case 'equals':\n if (val === \"NULL\") return `${col} IS NULL`;\n return `${col} = ${val}`;\n case 'not':\n if (val === \"NULL\") return `${col} IS NOT NULL`;\n return `${col} != ${val}`;\n case 'lt':\n return `${col} < ${val}`;\n case 'lte':\n return `${col} <= ${val}`;\n case 'gt':\n return `${col} > ${val}`;\n case 'gte':\n return `${col} >= ${val}`;\n case 'in':\n if (val?.length === 0) {\n return `1 = 0`;\n } else if (!val.includes(\",\")) {\n return `${col} = ${val}`;\n }\n return `${col} IN (${val})`;\n case 'notIn':\n // handle empty array and val is a single value\n if (val.length === 0) {\n return `1 = 1`;\n } else if (!val.includes(\",\")) {\n return `${col} != ${val}`;\n }\n return `${col} NOT IN (${val})`;\n case 'between':\n return `${col} BETWEEN (${val})`;\n case 'notBetween':\n return `${col} NOT BETWEEN (${val})`;\n case 'contains':\n return `${col} LIKE '%${escapeSqlValue(value)}%'`;\n case 'notContains':\n return `${col} NOT LIKE '%${escapeSqlValue(value)}%'`;\n case 'startsWith':\n return `${col} LIKE '${escapeSqlValue(value)}%'`;\n case 'endsWith':\n return `${col} LIKE '%${escapeSqlValue(value)}'`;\n case 'isNull':\n return `${col} IS NULL`;\n case 'isNotNull':\n return `${col} IS NOT NULL`;\n case 'isEmpty':\n return `(${col} IS NULL OR LENGTH(${col}) = 0)`;\n case 'isNotEmpty':\n return `(WHERE ${col} IS NOT NULL AND LENGTH(${col}) > 0)`;\n case 'isTrue':\n return `${col} = TRUE`;\n case 'isFalse':\n return `${col} = FALSE`;\n default:\n throw new XansqlError({\n message: `Unknown where condition ${subKey} on column ${column} in table ${model.table}`,\n model: model.table,\n column\n });\n }\n });\n\n return `${generate.join(' AND ')}`;\n }\n\n private checkIsAllowed(column: string) {\n const field = this.model.schema[column]\n if (Foreign.isArray(field)) return true\n const isNotAllowed = iof(field, XqlArray, XqlObject, XqlRecord, XqlTuple, XqlFile)\n\n if (isNotAllowed) {\n throw new XansqlError({\n message: `Field ${column} of type ${field.constructor.name} is not allowed in WHERE clause in table ${this.model.table}`,\n model: this.model.table,\n column\n });\n }\n }\n}\n\nexport default WhereArgs;"],"names":["Foreign","isArray","isObject","XansqlError","ValueFormatter","escapeSqlValue","iof","XqlArray","XqlObject","XqlRecord","XqlTuple","XqlFile"],"mappings":"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"}
@@ -4,8 +4,9 @@ import XqlArray from '../../xt/fields/Array.mjs';
4
4
  import XqlObject from '../../xt/fields/Object.mjs';
5
5
  import XqlRecord from '../../xt/fields/Record.mjs';
6
6
  import XqlTuple from '../../xt/fields/Tuple.mjs';
7
- import { isArray, isObject, escapeSqlValue } from '../../utils/index.mjs';
7
+ import { isArray, isObject, escapeSqlValue, iof } from '../../utils/index.mjs';
8
8
  import ValueFormatter from '../include/ValueFormatter.mjs';
9
+ import XqlFile from '../../xt/fields/File.mjs';
9
10
 
10
11
  class WhereArgs {
11
12
  constructor(model, where, meta) {
@@ -216,17 +217,13 @@ class WhereArgs {
216
217
  return `${generate.join(' AND ')}`;
217
218
  }
218
219
  checkIsAllowed(column) {
219
- const xanv = this.model.schema[column];
220
- if (Foreign.isArray(xanv))
220
+ const field = this.model.schema[column];
221
+ if (Foreign.isArray(field))
221
222
  return true;
222
- const isNotAllowed = xanv instanceof XqlArray
223
- || xanv instanceof XqlObject
224
- || xanv instanceof XqlRecord
225
- || xanv instanceof XqlTuple;
226
- // || xanv instanceof XqlFile
223
+ const isNotAllowed = iof(field, XqlArray, XqlObject, XqlRecord, XqlTuple, XqlFile);
227
224
  if (isNotAllowed) {
228
225
  throw new XansqlError({
229
- message: `Field ${column} of type ${xanv.constructor.name} is not allowed in WHERE clause in table ${this.model.table}`,
226
+ message: `Field ${column} of type ${field.constructor.name} is not allowed in WHERE clause in table ${this.model.table}`,
230
227
  model: this.model.table,
231
228
  column
232
229
  });
@@ -1 +1 @@
1
- {"version":3,"file":"WhereArgs.mjs","sources":["../../../src/model/Args/WhereArgs.ts"],"sourcesContent":["import Model from \"..\";\nimport Foreign from \"../../core/classes/ForeignInfo\";\nimport XansqlError from \"../../core/XansqlError\";\nimport XqlArray from \"../../xt/fields/Array\";\nimport XqlObject from \"../../xt/fields/Object\";\nimport XqlRecord from \"../../xt/fields/Record\";\nimport XqlTuple from \"../../xt/fields/Tuple\";\nimport { escapeSqlValue, isArray, isObject } from \"../../utils\";\nimport ValueFormatter from \"../include/ValueFormatter\";\nimport { WhereArgsType, WhereSubCondition } from \"../types\";\n\ntype Meta = {\n parentTable: string\n}\n\nclass WhereArgs {\n private model: Model\n // private where: WhereArgsType\n // private meta: Meta | undefined\n readonly wheres: string[]\n readonly sql: string = ''\n private condition_keys = [\"equals\", \"not\", \"lt\", \"lte\", \"gt\", \"gte\", \"in\", \"notIn\", \"between\", \"notBetween\", \"contains\", \"notContains\", \"startsWith\", \"endsWith\", \"isNull\", \"isNotNull\", \"isEmpty\", \"isNotEmpty\", \"isTrue\", \"isFalse\"]\n\n constructor(model: Model, where: WhereArgsType | WhereArgsType[], meta?: Meta) {\n this.model = model\n\n let schema = model.schema\n let wheres: string[] = []\n\n if (Array.isArray(where)) {\n let _ors = []\n for (let w of where) {\n const whereArgs = new WhereArgs(model, w, meta)\n if (whereArgs.sql) {\n if (whereArgs.wheres.length > 1) {\n _ors.push(`(${whereArgs.wheres.join(\" AND \")})`)\n } else {\n _ors.push(`${whereArgs.wheres.join(\" AND \")}`)\n }\n }\n }\n\n if (_ors.length) {\n wheres.push(`(${_ors.join(\" OR \")})`)\n }\n } else {\n for (let column in where) {\n this.checkIsAllowed(column)\n const value: any = where[column]\n const field = schema[column]\n\n if (Foreign.is(field)) {\n if (!isArray(value) && !isObject(value)) {\n throw new XansqlError({\n message: `${column} must be an object or array in the WHERE clause, but received ${typeof value} in table ${model.table}`,\n model: model.table,\n column\n });\n } else if (isObject(value) && Object.keys(value).length === 0 || isArray(value) && value.length === 0) {\n // skip empty object\n continue;\n }\n\n if (Foreign.isSchema(field) && isObject(value) && Object.keys(value).some(k => this.condition_keys.includes(k))) {\n const v = this.condition(column, value as WhereSubCondition)\n wheres.push(v)\n continue\n }\n\n let foreign = Foreign.get(model, column)\n let FModel = model.xansql.getModel(foreign.table)\n if (meta && meta.parentTable === foreign.table) {\n throw new XansqlError({\n message: `Circular reference detected in WHERE clause for table ${model.table} on column ${column}`,\n model: model.table,\n column\n });\n }\n let _sql = ''\n if (Array.isArray(value) || isObject(value)) {\n const where = new WhereArgs(FModel, value, { parentTable: model.table })\n if (where.sql) {\n _sql = where.wheres.join(\" AND \")\n }\n } else {\n throw new XansqlError({\n message: `Invalid value for foreign key ${column} in WHERE clause of table ${model.table}`,\n model: model.table,\n column\n });\n }\n\n wheres.push(`EXISTS (SELECT 1 FROM ${foreign.table} WHERE ${foreign.sql} ${_sql ? ` AND ${_sql}` : \"\"})`)\n } else {\n let v = ''\n if (Array.isArray(value)) {\n const sub = value.map((_v: any) => {\n return isObject(_v)\n ? this.condition(column, _v)\n : `${model.table}.${column} = ${ValueFormatter.toSql(model, column, _v)}`\n })\n if (sub.length > 1) {\n v = `(${sub.join(\" OR \")})`\n } else {\n v = sub.join(\" OR \")\n }\n } else if (isObject(value)) {\n v = this.condition(column, value)\n } else {\n v = `${model.table}.${column} = ${ValueFormatter.toSql(model, column, value)}`\n }\n wheres.push(v)\n }\n }\n }\n\n this.wheres = wheres\n this.sql = this.wheres.length ? `WHERE ${this.wheres.join(\" AND \")} ` : \"\"\n }\n\n private condition(column: string, conditions: WhereSubCondition) {\n const model = this.model\n const generate = Object.keys(conditions).map((subKey) => {\n let value = (conditions as any)[subKey];\n if (isObject(value)) {\n throw new XansqlError({\n message: `Invalid value for where condition ${subKey} on column ${column} in table ${model.table}`,\n model: model.table,\n column\n });\n }\n let val: string = value;\n if (Array.isArray(val)) {\n if (['in', 'notIn'].includes(subKey)) {\n val = val.map((item) => ValueFormatter.toSql(model, column, item)).join(\", \");\n } else if (['between', 'notBetween'].includes(subKey)) {\n if (val.length !== 2) {\n throw new XansqlError({\n message: `The 'between' and 'notBetween' operators require an array of exactly two values for column ${column} in table ${model.table}.`,\n model: model.table,\n column\n });\n }\n val = val.map((item) => ValueFormatter.toSql(model, column, item)).join(\" AND \");\n } else {\n throw new XansqlError({\n message: `Array value is not supported for operator ${subKey} on column ${column} in table ${model.table}.`,\n model: model.table,\n column\n });\n }\n } else if (typeof val === 'boolean') {\n val = val ? \"1\" : \"0\";\n } else {\n val = ValueFormatter.toSql(model, column, val);\n }\n\n let col = model.table + \".\" + column;\n switch (subKey) {\n case 'equals':\n if (val === \"NULL\") return `${col} IS NULL`;\n return `${col} = ${val}`;\n case 'not':\n if (val === \"NULL\") return `${col} IS NOT NULL`;\n return `${col} != ${val}`;\n case 'lt':\n return `${col} < ${val}`;\n case 'lte':\n return `${col} <= ${val}`;\n case 'gt':\n return `${col} > ${val}`;\n case 'gte':\n return `${col} >= ${val}`;\n case 'in':\n if (val?.length === 0) {\n return `1 = 0`;\n } else if (!val.includes(\",\")) {\n return `${col} = ${val}`;\n }\n return `${col} IN (${val})`;\n case 'notIn':\n // handle empty array and val is a single value\n if (val.length === 0) {\n return `1 = 1`;\n } else if (!val.includes(\",\")) {\n return `${col} != ${val}`;\n }\n return `${col} NOT IN (${val})`;\n case 'between':\n return `${col} BETWEEN (${val})`;\n case 'notBetween':\n return `${col} NOT BETWEEN (${val})`;\n case 'contains':\n return `${col} LIKE '%${escapeSqlValue(value)}%'`;\n case 'notContains':\n return `${col} NOT LIKE '%${escapeSqlValue(value)}%'`;\n case 'startsWith':\n return `${col} LIKE '${escapeSqlValue(value)}%'`;\n case 'endsWith':\n return `${col} LIKE '%${escapeSqlValue(value)}'`;\n case 'isNull':\n return `${col} IS NULL`;\n case 'isNotNull':\n return `${col} IS NOT NULL`;\n case 'isEmpty':\n return `(${col} IS NULL OR LENGTH(${col}) = 0)`;\n case 'isNotEmpty':\n return `(WHERE ${col} IS NOT NULL AND LENGTH(${col}) > 0)`;\n case 'isTrue':\n return `${col} = TRUE`;\n case 'isFalse':\n return `${col} = FALSE`;\n default:\n throw new XansqlError({\n message: `Unknown where condition ${subKey} on column ${column} in table ${model.table}`,\n model: model.table,\n column\n });\n }\n });\n\n return `${generate.join(' AND ')}`;\n }\n\n private checkIsAllowed(column: string) {\n const xanv = this.model.schema[column]\n if (Foreign.isArray(xanv)) return true\n const isNotAllowed = xanv instanceof XqlArray\n || xanv instanceof XqlObject\n || xanv instanceof XqlRecord\n || xanv instanceof XqlTuple\n // || xanv instanceof XqlFile\n\n if (isNotAllowed) {\n throw new XansqlError({\n message: `Field ${column} of type ${xanv.constructor.name} is not allowed in WHERE clause in table ${this.model.table}`,\n model: this.model.table,\n column\n });\n }\n }\n}\n\nexport default WhereArgs;"],"names":[],"mappings":";;;;;;;;;AAeA,MAAM,SAAS,CAAA;AAQZ,IAAA,WAAA,CAAY,KAAY,EAAE,KAAsC,EAAE,IAAW,EAAA;QAHpE,IAAA,CAAA,GAAG,GAAW,EAAE;AACjB,QAAA,IAAA,CAAA,cAAc,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC;AAGnO,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAElB,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;QACzB,IAAI,MAAM,GAAa,EAAE;AAEzB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACvB,IAAI,IAAI,GAAG,EAAE;AACb,YAAA,KAAK,IAAI,CAAC,IAAI,KAAK,EAAE;gBAClB,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC;AAC/C,gBAAA,IAAI,SAAS,CAAC,GAAG,EAAE;oBAChB,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,wBAAA,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA,CAAA,CAAG,CAAC;oBACnD;yBAAO;AACJ,wBAAA,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA,CAAE,CAAC;oBACjD;gBACH;YACH;AAEA,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACd,gBAAA,MAAM,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA,CAAA,CAAG,CAAC;YACxC;QACH;aAAO;AACJ,YAAA,KAAK,IAAI,MAAM,IAAI,KAAK,EAAE;AACvB,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AAC3B,gBAAA,MAAM,KAAK,GAAQ,KAAK,CAAC,MAAM,CAAC;AAChC,gBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;AAE5B,gBAAA,IAAI,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;AACpB,oBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;wBACtC,MAAM,IAAI,WAAW,CAAC;4BACnB,OAAO,EAAE,CAAA,EAAG,MAAM,CAAA,8DAAA,EAAiE,OAAO,KAAK,CAAA,UAAA,EAAa,KAAK,CAAC,KAAK,CAAA,CAAE;4BACzH,KAAK,EAAE,KAAK,CAAC,KAAK;4BAClB;AACF,yBAAA,CAAC;oBACL;yBAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;wBAEpG;oBACH;AAEA,oBAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;wBAC9G,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAA0B,CAAC;AAC5D,wBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;wBACd;oBACH;oBAEA,IAAI,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC;AACxC,oBAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;oBACjD,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC,KAAK,EAAE;wBAC7C,MAAM,IAAI,WAAW,CAAC;AACnB,4BAAA,OAAO,EAAE,CAAA,sDAAA,EAAyD,KAAK,CAAC,KAAK,CAAA,WAAA,EAAc,MAAM,CAAA,CAAE;4BACnG,KAAK,EAAE,KAAK,CAAC,KAAK;4BAClB;AACF,yBAAA,CAAC;oBACL;oBACA,IAAI,IAAI,GAAG,EAAE;AACb,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC1C,wBAAA,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;AACxE,wBAAA,IAAI,KAAK,CAAC,GAAG,EAAE;4BACZ,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;wBACpC;oBACH;yBAAO;wBACJ,MAAM,IAAI,WAAW,CAAC;AACnB,4BAAA,OAAO,EAAE,CAAA,8BAAA,EAAiC,MAAM,6BAA6B,KAAK,CAAC,KAAK,CAAA,CAAE;4BAC1F,KAAK,EAAE,KAAK,CAAC,KAAK;4BAClB;AACF,yBAAA,CAAC;oBACL;oBAEA,MAAM,CAAC,IAAI,CAAC,CAAA,sBAAA,EAAyB,OAAO,CAAC,KAAK,CAAA,OAAA,EAAU,OAAO,CAAC,GAAG,CAAA,CAAA,EAAI,IAAI,GAAG,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAE,GAAG,EAAE,CAAA,CAAA,CAAG,CAAC;gBAC5G;qBAAO;oBACJ,IAAI,CAAC,GAAG,EAAE;AACV,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;wBACvB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAO,KAAI;4BAC/B,OAAO,QAAQ,CAAC,EAAE;kCACb,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE;AAC3B,kCAAE,CAAA,EAAG,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,GAAA,EAAM,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE;AAC/E,wBAAA,CAAC,CAAC;AACF,wBAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;4BACjB,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA,CAAA,CAAG;wBAC9B;6BAAO;AACJ,4BAAA,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;wBACvB;oBACH;AAAO,yBAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;wBACzB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC;oBACpC;yBAAO;AACJ,wBAAA,CAAC,GAAG,CAAA,EAAG,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,GAAA,EAAM,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;oBACjF;AACA,oBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBACjB;YACH;QACH;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;QACpB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAA,MAAA,EAAS,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA,CAAA,CAAG,GAAG,EAAE;IAC7E;IAEQ,SAAS,CAAC,MAAc,EAAE,UAA6B,EAAA;AAC5D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;AACrD,YAAA,IAAI,KAAK,GAAI,UAAkB,CAAC,MAAM,CAAC;AACvC,YAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;gBAClB,MAAM,IAAI,WAAW,CAAC;oBACnB,OAAO,EAAE,qCAAqC,MAAM,CAAA,WAAA,EAAc,MAAM,CAAA,UAAA,EAAa,KAAK,CAAC,KAAK,CAAA,CAAE;oBAClG,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB;AACF,iBAAA,CAAC;YACL;YACA,IAAI,GAAG,GAAW,KAAK;AACvB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACrB,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;oBACnC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBAChF;qBAAO,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACpD,oBAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;wBACnB,MAAM,IAAI,WAAW,CAAC;AACnB,4BAAA,OAAO,EAAE,CAAA,2FAAA,EAA8F,MAAM,aAAa,KAAK,CAAC,KAAK,CAAA,CAAA,CAAG;4BACxI,KAAK,EAAE,KAAK,CAAC,KAAK;4BAClB;AACF,yBAAA,CAAC;oBACL;oBACA,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;gBACnF;qBAAO;oBACJ,MAAM,IAAI,WAAW,CAAC;wBACnB,OAAO,EAAE,6CAA6C,MAAM,CAAA,WAAA,EAAc,MAAM,CAAA,UAAA,EAAa,KAAK,CAAC,KAAK,CAAA,CAAA,CAAG;wBAC3G,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB;AACF,qBAAA,CAAC;gBACL;YACH;AAAO,iBAAA,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE;gBAClC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;YACxB;iBAAO;gBACJ,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC;YACjD;YAEA,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,GAAG,GAAG,GAAG,MAAM;YACpC,QAAQ,MAAM;AACX,gBAAA,KAAK,QAAQ;oBACV,IAAI,GAAG,KAAK,MAAM;wBAAE,OAAO,CAAA,EAAG,GAAG,CAAA,QAAA,CAAU;AAC3C,oBAAA,OAAO,CAAA,EAAG,GAAG,CAAA,GAAA,EAAM,GAAG,EAAE;AAC3B,gBAAA,KAAK,KAAK;oBACP,IAAI,GAAG,KAAK,MAAM;wBAAE,OAAO,CAAA,EAAG,GAAG,CAAA,YAAA,CAAc;AAC/C,oBAAA,OAAO,CAAA,EAAG,GAAG,CAAA,IAAA,EAAO,GAAG,EAAE;AAC5B,gBAAA,KAAK,IAAI;AACN,oBAAA,OAAO,CAAA,EAAG,GAAG,CAAA,GAAA,EAAM,GAAG,EAAE;AAC3B,gBAAA,KAAK,KAAK;AACP,oBAAA,OAAO,CAAA,EAAG,GAAG,CAAA,IAAA,EAAO,GAAG,EAAE;AAC5B,gBAAA,KAAK,IAAI;AACN,oBAAA,OAAO,CAAA,EAAG,GAAG,CAAA,GAAA,EAAM,GAAG,EAAE;AAC3B,gBAAA,KAAK,KAAK;AACP,oBAAA,OAAO,CAAA,EAAG,GAAG,CAAA,IAAA,EAAO,GAAG,EAAE;AAC5B,gBAAA,KAAK,IAAI;oBACN,IAAI,CAAA,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,MAAA,GAAA,MAAA,GAAH,GAAG,CAAE,MAAM,MAAK,CAAC,EAAE;AACpB,wBAAA,OAAO,OAAO;oBACjB;yBAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC5B,wBAAA,OAAO,CAAA,EAAG,GAAG,CAAA,GAAA,EAAM,GAAG,EAAE;oBAC3B;AACA,oBAAA,OAAO,CAAA,EAAG,GAAG,CAAA,KAAA,EAAQ,GAAG,GAAG;AAC9B,gBAAA,KAAK,OAAO;;AAET,oBAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AACnB,wBAAA,OAAO,OAAO;oBACjB;yBAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC5B,wBAAA,OAAO,CAAA,EAAG,GAAG,CAAA,IAAA,EAAO,GAAG,EAAE;oBAC5B;AACA,oBAAA,OAAO,CAAA,EAAG,GAAG,CAAA,SAAA,EAAY,GAAG,GAAG;AAClC,gBAAA,KAAK,SAAS;AACX,oBAAA,OAAO,CAAA,EAAG,GAAG,CAAA,UAAA,EAAa,GAAG,GAAG;AACnC,gBAAA,KAAK,YAAY;AACd,oBAAA,OAAO,CAAA,EAAG,GAAG,CAAA,cAAA,EAAiB,GAAG,GAAG;AACvC,gBAAA,KAAK,UAAU;oBACZ,OAAO,CAAA,EAAG,GAAG,CAAA,QAAA,EAAW,cAAc,CAAC,KAAK,CAAC,IAAI;AACpD,gBAAA,KAAK,aAAa;oBACf,OAAO,CAAA,EAAG,GAAG,CAAA,YAAA,EAAe,cAAc,CAAC,KAAK,CAAC,IAAI;AACxD,gBAAA,KAAK,YAAY;oBACd,OAAO,CAAA,EAAG,GAAG,CAAA,OAAA,EAAU,cAAc,CAAC,KAAK,CAAC,IAAI;AACnD,gBAAA,KAAK,UAAU;oBACZ,OAAO,CAAA,EAAG,GAAG,CAAA,QAAA,EAAW,cAAc,CAAC,KAAK,CAAC,GAAG;AACnD,gBAAA,KAAK,QAAQ;oBACV,OAAO,CAAA,EAAG,GAAG,CAAA,QAAA,CAAU;AAC1B,gBAAA,KAAK,WAAW;oBACb,OAAO,CAAA,EAAG,GAAG,CAAA,YAAA,CAAc;AAC9B,gBAAA,KAAK,SAAS;AACX,oBAAA,OAAO,CAAA,CAAA,EAAI,GAAG,CAAA,mBAAA,EAAsB,GAAG,QAAQ;AAClD,gBAAA,KAAK,YAAY;AACd,oBAAA,OAAO,CAAA,OAAA,EAAU,GAAG,CAAA,wBAAA,EAA2B,GAAG,QAAQ;AAC7D,gBAAA,KAAK,QAAQ;oBACV,OAAO,CAAA,EAAG,GAAG,CAAA,OAAA,CAAS;AACzB,gBAAA,KAAK,SAAS;oBACX,OAAO,CAAA,EAAG,GAAG,CAAA,QAAA,CAAU;AAC1B,gBAAA;oBACG,MAAM,IAAI,WAAW,CAAC;wBACnB,OAAO,EAAE,2BAA2B,MAAM,CAAA,WAAA,EAAc,MAAM,CAAA,UAAA,EAAa,KAAK,CAAC,KAAK,CAAA,CAAE;wBACxF,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB;AACF,qBAAA,CAAC;;AAEX,QAAA,CAAC,CAAC;QAEF,OAAO,CAAA,EAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;IACrC;AAEQ,IAAA,cAAc,CAAC,MAAc,EAAA;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AACtC,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI;AACtC,QAAA,MAAM,YAAY,GAAG,IAAI,YAAY;AAC/B,eAAA,IAAI,YAAY;AAChB,eAAA,IAAI,YAAY;eAChB,IAAI,YAAY,QAAQ;;QAG9B,IAAI,YAAY,EAAE;YACf,MAAM,IAAI,WAAW,CAAC;AACnB,gBAAA,OAAO,EAAE,CAAA,MAAA,EAAS,MAAM,CAAA,SAAA,EAAY,IAAI,CAAC,WAAW,CAAC,IAAI,4CAA4C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAA,CAAE;AACvH,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;gBACvB;AACF,aAAA,CAAC;QACL;IACH;AACF;;;;"}
1
+ {"version":3,"file":"WhereArgs.mjs","sources":["../../../src/model/Args/WhereArgs.ts"],"sourcesContent":["import Model from \"..\";\nimport Foreign from \"../../core/classes/ForeignInfo\";\nimport XansqlError from \"../../core/XansqlError\";\nimport XqlArray from \"../../xt/fields/Array\";\nimport XqlObject from \"../../xt/fields/Object\";\nimport XqlRecord from \"../../xt/fields/Record\";\nimport XqlTuple from \"../../xt/fields/Tuple\";\nimport { escapeSqlValue, iof, isArray, isObject } from \"../../utils\";\nimport ValueFormatter from \"../include/ValueFormatter\";\nimport { WhereArgsType, WhereSubCondition } from \"../types\";\nimport XqlFile from \"../../xt/fields/File\";\n\ntype Meta = {\n parentTable: string\n}\n\nclass WhereArgs {\n private model: Model\n // private where: WhereArgsType\n // private meta: Meta | undefined\n readonly wheres: string[]\n readonly sql: string = ''\n private condition_keys = [\"equals\", \"not\", \"lt\", \"lte\", \"gt\", \"gte\", \"in\", \"notIn\", \"between\", \"notBetween\", \"contains\", \"notContains\", \"startsWith\", \"endsWith\", \"isNull\", \"isNotNull\", \"isEmpty\", \"isNotEmpty\", \"isTrue\", \"isFalse\"]\n\n constructor(model: Model, where: WhereArgsType | WhereArgsType[], meta?: Meta) {\n this.model = model\n\n let schema = model.schema\n let wheres: string[] = []\n\n if (Array.isArray(where)) {\n let _ors = []\n for (let w of where) {\n const whereArgs = new WhereArgs(model, w, meta)\n if (whereArgs.sql) {\n if (whereArgs.wheres.length > 1) {\n _ors.push(`(${whereArgs.wheres.join(\" AND \")})`)\n } else {\n _ors.push(`${whereArgs.wheres.join(\" AND \")}`)\n }\n }\n }\n\n if (_ors.length) {\n wheres.push(`(${_ors.join(\" OR \")})`)\n }\n } else {\n for (let column in where) {\n this.checkIsAllowed(column)\n const value: any = where[column]\n const field = schema[column]\n\n if (Foreign.is(field)) {\n if (!isArray(value) && !isObject(value)) {\n throw new XansqlError({\n message: `${column} must be an object or array in the WHERE clause, but received ${typeof value} in table ${model.table}`,\n model: model.table,\n column\n });\n } else if (isObject(value) && Object.keys(value).length === 0 || isArray(value) && value.length === 0) {\n // skip empty object\n continue;\n }\n\n if (Foreign.isSchema(field) && isObject(value) && Object.keys(value).some(k => this.condition_keys.includes(k))) {\n const v = this.condition(column, value as WhereSubCondition)\n wheres.push(v)\n continue\n }\n\n let foreign = Foreign.get(model, column)\n let FModel = model.xansql.getModel(foreign.table)\n if (meta && meta.parentTable === foreign.table) {\n throw new XansqlError({\n message: `Circular reference detected in WHERE clause for table ${model.table} on column ${column}`,\n model: model.table,\n column\n });\n }\n let _sql = ''\n if (Array.isArray(value) || isObject(value)) {\n const where = new WhereArgs(FModel, value, { parentTable: model.table })\n if (where.sql) {\n _sql = where.wheres.join(\" AND \")\n }\n } else {\n throw new XansqlError({\n message: `Invalid value for foreign key ${column} in WHERE clause of table ${model.table}`,\n model: model.table,\n column\n });\n }\n\n wheres.push(`EXISTS (SELECT 1 FROM ${foreign.table} WHERE ${foreign.sql} ${_sql ? ` AND ${_sql}` : \"\"})`)\n } else {\n let v = ''\n if (Array.isArray(value)) {\n const sub = value.map((_v: any) => {\n return isObject(_v)\n ? this.condition(column, _v)\n : `${model.table}.${column} = ${ValueFormatter.toSql(model, column, _v)}`\n })\n if (sub.length > 1) {\n v = `(${sub.join(\" OR \")})`\n } else {\n v = sub.join(\" OR \")\n }\n } else if (isObject(value)) {\n v = this.condition(column, value)\n } else {\n v = `${model.table}.${column} = ${ValueFormatter.toSql(model, column, value)}`\n }\n wheres.push(v)\n }\n }\n }\n\n this.wheres = wheres\n this.sql = this.wheres.length ? `WHERE ${this.wheres.join(\" AND \")} ` : \"\"\n }\n\n private condition(column: string, conditions: WhereSubCondition) {\n const model = this.model\n const generate = Object.keys(conditions).map((subKey) => {\n let value = (conditions as any)[subKey];\n if (isObject(value)) {\n throw new XansqlError({\n message: `Invalid value for where condition ${subKey} on column ${column} in table ${model.table}`,\n model: model.table,\n column\n });\n }\n let val: string = value;\n if (Array.isArray(val)) {\n if (['in', 'notIn'].includes(subKey)) {\n val = val.map((item) => ValueFormatter.toSql(model, column, item)).join(\", \");\n } else if (['between', 'notBetween'].includes(subKey)) {\n if (val.length !== 2) {\n throw new XansqlError({\n message: `The 'between' and 'notBetween' operators require an array of exactly two values for column ${column} in table ${model.table}.`,\n model: model.table,\n column\n });\n }\n val = val.map((item) => ValueFormatter.toSql(model, column, item)).join(\" AND \");\n } else {\n throw new XansqlError({\n message: `Array value is not supported for operator ${subKey} on column ${column} in table ${model.table}.`,\n model: model.table,\n column\n });\n }\n } else if (typeof val === 'boolean') {\n val = val ? \"1\" : \"0\";\n } else {\n val = ValueFormatter.toSql(model, column, val);\n }\n\n let col = model.table + \".\" + column;\n switch (subKey) {\n case 'equals':\n if (val === \"NULL\") return `${col} IS NULL`;\n return `${col} = ${val}`;\n case 'not':\n if (val === \"NULL\") return `${col} IS NOT NULL`;\n return `${col} != ${val}`;\n case 'lt':\n return `${col} < ${val}`;\n case 'lte':\n return `${col} <= ${val}`;\n case 'gt':\n return `${col} > ${val}`;\n case 'gte':\n return `${col} >= ${val}`;\n case 'in':\n if (val?.length === 0) {\n return `1 = 0`;\n } else if (!val.includes(\",\")) {\n return `${col} = ${val}`;\n }\n return `${col} IN (${val})`;\n case 'notIn':\n // handle empty array and val is a single value\n if (val.length === 0) {\n return `1 = 1`;\n } else if (!val.includes(\",\")) {\n return `${col} != ${val}`;\n }\n return `${col} NOT IN (${val})`;\n case 'between':\n return `${col} BETWEEN (${val})`;\n case 'notBetween':\n return `${col} NOT BETWEEN (${val})`;\n case 'contains':\n return `${col} LIKE '%${escapeSqlValue(value)}%'`;\n case 'notContains':\n return `${col} NOT LIKE '%${escapeSqlValue(value)}%'`;\n case 'startsWith':\n return `${col} LIKE '${escapeSqlValue(value)}%'`;\n case 'endsWith':\n return `${col} LIKE '%${escapeSqlValue(value)}'`;\n case 'isNull':\n return `${col} IS NULL`;\n case 'isNotNull':\n return `${col} IS NOT NULL`;\n case 'isEmpty':\n return `(${col} IS NULL OR LENGTH(${col}) = 0)`;\n case 'isNotEmpty':\n return `(WHERE ${col} IS NOT NULL AND LENGTH(${col}) > 0)`;\n case 'isTrue':\n return `${col} = TRUE`;\n case 'isFalse':\n return `${col} = FALSE`;\n default:\n throw new XansqlError({\n message: `Unknown where condition ${subKey} on column ${column} in table ${model.table}`,\n model: model.table,\n column\n });\n }\n });\n\n return `${generate.join(' AND ')}`;\n }\n\n private checkIsAllowed(column: string) {\n const field = this.model.schema[column]\n if (Foreign.isArray(field)) return true\n const isNotAllowed = iof(field, XqlArray, XqlObject, XqlRecord, XqlTuple, XqlFile)\n\n if (isNotAllowed) {\n throw new XansqlError({\n message: `Field ${column} of type ${field.constructor.name} is not allowed in WHERE clause in table ${this.model.table}`,\n model: this.model.table,\n column\n });\n }\n }\n}\n\nexport default WhereArgs;"],"names":[],"mappings":"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"}
package/model/Base.cjs CHANGED
@@ -3,6 +3,7 @@
3
3
  var tslib = require('tslib');
4
4
  var core_classes_ForeignInfo = require('../core/classes/ForeignInfo.cjs');
5
5
  var core_XansqlError = require('../core/XansqlError.cjs');
6
+ var utils_index = require('../utils/index.cjs');
6
7
  var xt_fields_IDField = require('../xt/fields/IDField.cjs');
7
8
 
8
9
  class ModelBase {
@@ -17,7 +18,7 @@ class ModelBase {
17
18
  this.schema = schema;
18
19
  for (let column in schema) {
19
20
  const field = schema[column];
20
- if (field instanceof xt_fields_IDField) {
21
+ if (utils_index.iof(field, xt_fields_IDField)) {
21
22
  if (this.IDColumn) {
22
23
  throw new core_XansqlError({
23
24
  message: `Model ${this.table} has multiple ID columns (${this.IDColumn} and ${column})`,
@@ -1 +1 @@
1
- {"version":3,"file":"Base.cjs","sources":["../../src/model/Base.ts"],"sourcesContent":["import { EventHandler, EventPayloads } from \"../core/classes/EventManager\";\nimport Foreign from \"../core/classes/ForeignInfo\";\nimport Xansql from \"../core/Xansql\";\nimport XansqlError from \"../core/XansqlError\";\nimport XqlIDField from \"../xt/fields/IDField\";\nimport { XansqlSchemaObject } from \"../xt/types\";\nimport { XansqlModelHookNames, XansqlModelHooks } from \"./types\";\n\ntype Relation = {\n type: \"array\" | \"schema\",\n column: string,\n}\n\nabstract class ModelBase {\n readonly schema: XansqlSchemaObject;\n readonly table: string;\n readonly IDColumn: string = '';\n readonly columns: string[] = [];\n readonly relations: Relation[] = [];\n hooks: XansqlModelHooks = {};\n xansql: Xansql = null as any;\n alias: string = '';\n\n constructor(table: string, schema: XansqlSchemaObject) {\n this.table = table;\n this.schema = schema;\n for (let column in schema) {\n const field = schema[column];\n if (field instanceof XqlIDField) {\n if (this.IDColumn) {\n throw new XansqlError({\n message: `Model ${this.table} has multiple ID columns (${this.IDColumn} and ${column})`,\n model: this.table,\n });\n }\n this.IDColumn = column;\n }\n\n if (Foreign.isArray(field)) {\n this.relations.push({ type: \"array\", column });\n } else {\n if (Foreign.isSchema(field)) {\n this.relations.push({ type: \"schema\", column });\n }\n this.columns.push(column);\n }\n }\n if (!this.IDColumn) {\n throw new XansqlError({\n message: `Schema ${this.table} must have an id column`,\n model: this.table,\n });\n }\n }\n\n async execute(sql: string) {\n const xansql = this.xansql;\n return await xansql.execute(sql) as any\n }\n\n isIDColumn(column: string): boolean {\n return column === this.IDColumn;\n }\n\n protected async callHook(hook: XansqlModelHookNames, ...args: any): Promise<any> {\n const xansql = this.xansql;\n const config = xansql.config;\n\n const modelHooks: any = this.hooks || {}\n const configHooks: any = config.hooks || {}\n let returnValue = null;\n\n if (hook in modelHooks!) {\n returnValue = await modelHooks[hook].apply(this, args);\n }\n\n if (hook in configHooks!) {\n returnValue = await configHooks[hook].apply(null, [this, ...args]);\n }\n\n return returnValue;\n }\n\n on<K extends keyof EventPayloads>(event: K, handler: EventHandler<K>) {\n this.xansql.EventManager.on(event, ({ model, ...rest }: any) => {\n handler.apply(this, rest as any);\n });\n }\n\n}\n\nexport default ModelBase;"],"names":["XqlIDField","XansqlError","Foreign","__rest"],"mappings":"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"}
1
+ {"version":3,"file":"Base.cjs","sources":["../../src/model/Base.ts"],"sourcesContent":["import { EventHandler, EventPayloads } from \"../core/classes/EventManager\";\nimport Foreign from \"../core/classes/ForeignInfo\";\nimport Xansql from \"../core/Xansql\";\nimport XansqlError from \"../core/XansqlError\";\nimport { iof } from \"../utils\";\nimport XqlIDField from \"../xt/fields/IDField\";\nimport { XansqlSchemaObject } from \"../xt/types\";\nimport { XansqlModelHookNames, XansqlModelHooks } from \"./types\";\n\ntype Relation = {\n type: \"array\" | \"schema\",\n column: string,\n}\n\nabstract class ModelBase {\n readonly schema: XansqlSchemaObject;\n readonly table: string;\n readonly IDColumn: string = '';\n readonly columns: string[] = [];\n readonly relations: Relation[] = [];\n hooks: XansqlModelHooks = {};\n xansql: Xansql = null as any;\n alias: string = '';\n\n constructor(table: string, schema: XansqlSchemaObject) {\n this.table = table;\n this.schema = schema;\n for (let column in schema) {\n const field = schema[column];\n if (iof(field, XqlIDField)) {\n if (this.IDColumn) {\n throw new XansqlError({\n message: `Model ${this.table} has multiple ID columns (${this.IDColumn} and ${column})`,\n model: this.table,\n });\n }\n this.IDColumn = column;\n }\n\n if (Foreign.isArray(field)) {\n this.relations.push({ type: \"array\", column });\n } else {\n if (Foreign.isSchema(field)) {\n this.relations.push({ type: \"schema\", column });\n }\n this.columns.push(column);\n }\n }\n if (!this.IDColumn) {\n throw new XansqlError({\n message: `Schema ${this.table} must have an id column`,\n model: this.table,\n });\n }\n }\n\n async execute(sql: string) {\n const xansql = this.xansql;\n return await xansql.execute(sql) as any\n }\n\n isIDColumn(column: string): boolean {\n return column === this.IDColumn;\n }\n\n protected async callHook(hook: XansqlModelHookNames, ...args: any): Promise<any> {\n const xansql = this.xansql;\n const config = xansql.config;\n\n const modelHooks: any = this.hooks || {}\n const configHooks: any = config.hooks || {}\n let returnValue = null;\n\n if (hook in modelHooks!) {\n returnValue = await modelHooks[hook].apply(this, args);\n }\n\n if (hook in configHooks!) {\n returnValue = await configHooks[hook].apply(null, [this, ...args]);\n }\n\n return returnValue;\n }\n\n on<K extends keyof EventPayloads>(event: K, handler: EventHandler<K>) {\n this.xansql.EventManager.on(event, ({ model, ...rest }: any) => {\n handler.apply(this, rest as any);\n });\n }\n\n}\n\nexport default ModelBase;"],"names":["iof","XqlIDField","XansqlError","Foreign","__rest"],"mappings":"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"}
package/model/Base.mjs CHANGED
@@ -1,6 +1,7 @@
1
1
  import { __rest } from 'tslib';
2
2
  import Foreign from '../core/classes/ForeignInfo.mjs';
3
3
  import XansqlError from '../core/XansqlError.mjs';
4
+ import { iof } from '../utils/index.mjs';
4
5
  import XqlIDField from '../xt/fields/IDField.mjs';
5
6
 
6
7
  class ModelBase {
@@ -15,7 +16,7 @@ class ModelBase {
15
16
  this.schema = schema;
16
17
  for (let column in schema) {
17
18
  const field = schema[column];
18
- if (field instanceof XqlIDField) {
19
+ if (iof(field, XqlIDField)) {
19
20
  if (this.IDColumn) {
20
21
  throw new XansqlError({
21
22
  message: `Model ${this.table} has multiple ID columns (${this.IDColumn} and ${column})`,
@@ -1 +1 @@
1
- {"version":3,"file":"Base.mjs","sources":["../../src/model/Base.ts"],"sourcesContent":["import { EventHandler, EventPayloads } from \"../core/classes/EventManager\";\nimport Foreign from \"../core/classes/ForeignInfo\";\nimport Xansql from \"../core/Xansql\";\nimport XansqlError from \"../core/XansqlError\";\nimport XqlIDField from \"../xt/fields/IDField\";\nimport { XansqlSchemaObject } from \"../xt/types\";\nimport { XansqlModelHookNames, XansqlModelHooks } from \"./types\";\n\ntype Relation = {\n type: \"array\" | \"schema\",\n column: string,\n}\n\nabstract class ModelBase {\n readonly schema: XansqlSchemaObject;\n readonly table: string;\n readonly IDColumn: string = '';\n readonly columns: string[] = [];\n readonly relations: Relation[] = [];\n hooks: XansqlModelHooks = {};\n xansql: Xansql = null as any;\n alias: string = '';\n\n constructor(table: string, schema: XansqlSchemaObject) {\n this.table = table;\n this.schema = schema;\n for (let column in schema) {\n const field = schema[column];\n if (field instanceof XqlIDField) {\n if (this.IDColumn) {\n throw new XansqlError({\n message: `Model ${this.table} has multiple ID columns (${this.IDColumn} and ${column})`,\n model: this.table,\n });\n }\n this.IDColumn = column;\n }\n\n if (Foreign.isArray(field)) {\n this.relations.push({ type: \"array\", column });\n } else {\n if (Foreign.isSchema(field)) {\n this.relations.push({ type: \"schema\", column });\n }\n this.columns.push(column);\n }\n }\n if (!this.IDColumn) {\n throw new XansqlError({\n message: `Schema ${this.table} must have an id column`,\n model: this.table,\n });\n }\n }\n\n async execute(sql: string) {\n const xansql = this.xansql;\n return await xansql.execute(sql) as any\n }\n\n isIDColumn(column: string): boolean {\n return column === this.IDColumn;\n }\n\n protected async callHook(hook: XansqlModelHookNames, ...args: any): Promise<any> {\n const xansql = this.xansql;\n const config = xansql.config;\n\n const modelHooks: any = this.hooks || {}\n const configHooks: any = config.hooks || {}\n let returnValue = null;\n\n if (hook in modelHooks!) {\n returnValue = await modelHooks[hook].apply(this, args);\n }\n\n if (hook in configHooks!) {\n returnValue = await configHooks[hook].apply(null, [this, ...args]);\n }\n\n return returnValue;\n }\n\n on<K extends keyof EventPayloads>(event: K, handler: EventHandler<K>) {\n this.xansql.EventManager.on(event, ({ model, ...rest }: any) => {\n handler.apply(this, rest as any);\n });\n }\n\n}\n\nexport default ModelBase;"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Base.mjs","sources":["../../src/model/Base.ts"],"sourcesContent":["import { EventHandler, EventPayloads } from \"../core/classes/EventManager\";\nimport Foreign from \"../core/classes/ForeignInfo\";\nimport Xansql from \"../core/Xansql\";\nimport XansqlError from \"../core/XansqlError\";\nimport { iof } from \"../utils\";\nimport XqlIDField from \"../xt/fields/IDField\";\nimport { XansqlSchemaObject } from \"../xt/types\";\nimport { XansqlModelHookNames, XansqlModelHooks } from \"./types\";\n\ntype Relation = {\n type: \"array\" | \"schema\",\n column: string,\n}\n\nabstract class ModelBase {\n readonly schema: XansqlSchemaObject;\n readonly table: string;\n readonly IDColumn: string = '';\n readonly columns: string[] = [];\n readonly relations: Relation[] = [];\n hooks: XansqlModelHooks = {};\n xansql: Xansql = null as any;\n alias: string = '';\n\n constructor(table: string, schema: XansqlSchemaObject) {\n this.table = table;\n this.schema = schema;\n for (let column in schema) {\n const field = schema[column];\n if (iof(field, XqlIDField)) {\n if (this.IDColumn) {\n throw new XansqlError({\n message: `Model ${this.table} has multiple ID columns (${this.IDColumn} and ${column})`,\n model: this.table,\n });\n }\n this.IDColumn = column;\n }\n\n if (Foreign.isArray(field)) {\n this.relations.push({ type: \"array\", column });\n } else {\n if (Foreign.isSchema(field)) {\n this.relations.push({ type: \"schema\", column });\n }\n this.columns.push(column);\n }\n }\n if (!this.IDColumn) {\n throw new XansqlError({\n message: `Schema ${this.table} must have an id column`,\n model: this.table,\n });\n }\n }\n\n async execute(sql: string) {\n const xansql = this.xansql;\n return await xansql.execute(sql) as any\n }\n\n isIDColumn(column: string): boolean {\n return column === this.IDColumn;\n }\n\n protected async callHook(hook: XansqlModelHookNames, ...args: any): Promise<any> {\n const xansql = this.xansql;\n const config = xansql.config;\n\n const modelHooks: any = this.hooks || {}\n const configHooks: any = config.hooks || {}\n let returnValue = null;\n\n if (hook in modelHooks!) {\n returnValue = await modelHooks[hook].apply(this, args);\n }\n\n if (hook in configHooks!) {\n returnValue = await configHooks[hook].apply(null, [this, ...args]);\n }\n\n return returnValue;\n }\n\n on<K extends keyof EventPayloads>(event: K, handler: EventHandler<K>) {\n this.xansql.EventManager.on(event, ({ model, ...rest }: any) => {\n handler.apply(this, rest as any);\n });\n }\n\n}\n\nexport default ModelBase;"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
 
3
3
  var core_classes_ForeignInfo = require('../../../core/classes/ForeignInfo.cjs');
4
4
  var core_XansqlError = require('../../../core/XansqlError.cjs');
5
+ var utils_index = require('../../../utils/index.cjs');
5
6
  var xt_fields_IDField = require('../../../xt/fields/IDField.cjs');
6
7
  var xt_fields_Number = require('../../../xt/fields/Number.cjs');
7
8
 
@@ -35,7 +36,7 @@ class SelectArgs {
35
36
  columnFormat(column, columnArg) {
36
37
  let model = this.model;
37
38
  const field = model.schema[column];
38
- const isNumber = field instanceof xt_fields_Number || field instanceof xt_fields_IDField;
39
+ const isNumber = utils_index.iof(field, xt_fields_Number, xt_fields_IDField);
39
40
  let sql = [];
40
41
  for (let func in columnArg) {
41
42
  const funcArg = columnArg[func];
@@ -1 +1 @@
1
- {"version":3,"file":"SelectArgs.cjs","sources":["../../../../src/model/Executer/Aggregate/SelectArgs.ts"],"sourcesContent":["import Model from \"../..\";\nimport Foreign from \"../../../core/classes/ForeignInfo\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport XqlIDField from \"../../../xt/fields/IDField\";\nimport XqlNumber from \"../../../xt/fields/Number\";\nimport { AggregateSelectArgsColumnType, AggregateSelectArgsType } from \"../../types\";\n\nclass SelectArgs {\n model: Model\n\n readonly sql: string;\n\n constructor(model: Model, args: AggregateSelectArgsType) {\n this.model = model\n const sqls = []\n\n for (let column in args) {\n const field = model.schema[column];\n if (!field) {\n throw new XansqlError({\n message: `Column ${column} not found in model ${model.table} for aggregate select`,\n model: model.table,\n column: column\n });\n }\n if (Foreign.is(field)) {\n throw new XansqlError({\n message: `Cannot perform aggregate functions on foreign key column ${column} in model ${model.table}`,\n model: model.table,\n column: column\n });\n } else {\n const columnArg = args[column] as AggregateSelectArgsColumnType\n sqls.push(this.columnFormat(column, columnArg))\n }\n }\n\n this.sql = sqls.join(\", \")\n }\n\n columnFormat(column: string, columnArg: AggregateSelectArgsColumnType) {\n let model = this.model\n const field = model.schema[column];\n const isNumber = field instanceof XqlNumber || field instanceof XqlIDField\n let sql = []\n for (let func in columnArg) {\n const funcArg = columnArg[func as keyof AggregateSelectArgsColumnType]\n const isObject = funcArg && typeof funcArg === \"object\"\n // apply distinct\n let col = column\n if (isObject && funcArg.distinct === true) {\n col = `DISTINCT ${col}`\n }\n\n let _sql = `${func.toUpperCase()}(${col})`\n\n // make to integer for all as REAL\n if (!isNumber) {\n _sql = `CAST(${_sql} AS REAL)`\n }\n\n if (isObject && funcArg?.round !== undefined) {\n _sql = `ROUND(${_sql}, ${funcArg.round})`\n }\n\n if (isObject && funcArg.alias) {\n _sql += ` AS ${funcArg.alias}`\n } else {\n _sql += ` AS ${func}_${column}`\n }\n\n sql.push(_sql)\n }\n return sql.join(\", \")\n }\n\n}\n\nexport default SelectArgs;"],"names":["XansqlError","Foreign","XqlNumber","XqlIDField"],"mappings":";;;;;;;AAOA,MAAM,UAAU,CAAA;IAKb,WAAA,CAAY,KAAY,EAAE,IAA6B,EAAA;AACpD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,MAAM,IAAI,GAAG,EAAE;AAEf,QAAA,KAAK,IAAI,MAAM,IAAI,IAAI,EAAE;YACtB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;YAClC,IAAI,CAAC,KAAK,EAAE;gBACT,MAAM,IAAIA,gBAAW,CAAC;AACnB,oBAAA,OAAO,EAAE,CAAA,OAAA,EAAU,MAAM,uBAAuB,KAAK,CAAC,KAAK,CAAA,qBAAA,CAAuB;oBAClF,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,oBAAA,MAAM,EAAE;AACV,iBAAA,CAAC;YACL;AACA,YAAA,IAAIC,wBAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;gBACpB,MAAM,IAAID,gBAAW,CAAC;AACnB,oBAAA,OAAO,EAAE,CAAA,yDAAA,EAA4D,MAAM,aAAa,KAAK,CAAC,KAAK,CAAA,CAAE;oBACrG,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,oBAAA,MAAM,EAAE;AACV,iBAAA,CAAC;YACL;iBAAO;AACJ,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAkC;AAC/D,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAClD;QACH;QAEA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;IAEA,YAAY,CAAC,MAAc,EAAE,SAAwC,EAAA;AAClE,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;QACtB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QAClC,MAAM,QAAQ,GAAG,KAAK,YAAYE,gBAAS,IAAI,KAAK,YAAYC,iBAAU;QAC1E,IAAI,GAAG,GAAG,EAAE;AACZ,QAAA,KAAK,IAAI,IAAI,IAAI,SAAS,EAAE;AACzB,YAAA,MAAM,OAAO,GAAG,SAAS,CAAC,IAA2C,CAAC;YACtE,MAAM,QAAQ,GAAG,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;;YAEvD,IAAI,GAAG,GAAG,MAAM;YAChB,IAAI,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE;AACxC,gBAAA,GAAG,GAAG,CAAA,SAAA,EAAY,GAAG,CAAA,CAAE;YAC1B;YAEA,IAAI,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,WAAW,EAAE,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,CAAG;;YAG1C,IAAI,CAAC,QAAQ,EAAE;AACZ,gBAAA,IAAI,GAAG,CAAA,KAAA,EAAQ,IAAI,CAAA,SAAA,CAAW;YACjC;AAEA,YAAA,IAAI,QAAQ,IAAI,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,KAAK,MAAK,SAAS,EAAE;gBAC3C,IAAI,GAAG,SAAS,IAAI,CAAA,EAAA,EAAK,OAAO,CAAC,KAAK,GAAG;YAC5C;AAEA,YAAA,IAAI,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE;AAC5B,gBAAA,IAAI,IAAI,CAAA,IAAA,EAAO,OAAO,CAAC,KAAK,EAAE;YACjC;iBAAO;AACJ,gBAAA,IAAI,IAAI,CAAA,IAAA,EAAO,IAAI,CAAA,CAAA,EAAI,MAAM,EAAE;YAClC;AAEA,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjB;AACA,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB;AAEF;;;;"}
1
+ {"version":3,"file":"SelectArgs.cjs","sources":["../../../../src/model/Executer/Aggregate/SelectArgs.ts"],"sourcesContent":["import Model from \"../..\";\nimport Foreign from \"../../../core/classes/ForeignInfo\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { iof } from \"../../../utils\";\nimport XqlIDField from \"../../../xt/fields/IDField\";\nimport XqlNumber from \"../../../xt/fields/Number\";\nimport { AggregateSelectArgsColumnType, AggregateSelectArgsType } from \"../../types\";\n\nclass SelectArgs {\n model: Model\n\n readonly sql: string;\n\n constructor(model: Model, args: AggregateSelectArgsType) {\n this.model = model\n const sqls = []\n\n for (let column in args) {\n const field = model.schema[column];\n if (!field) {\n throw new XansqlError({\n message: `Column ${column} not found in model ${model.table} for aggregate select`,\n model: model.table,\n column: column\n });\n }\n if (Foreign.is(field)) {\n throw new XansqlError({\n message: `Cannot perform aggregate functions on foreign key column ${column} in model ${model.table}`,\n model: model.table,\n column: column\n });\n } else {\n const columnArg = args[column] as AggregateSelectArgsColumnType\n sqls.push(this.columnFormat(column, columnArg))\n }\n }\n\n this.sql = sqls.join(\", \")\n }\n\n columnFormat(column: string, columnArg: AggregateSelectArgsColumnType) {\n let model = this.model\n const field = model.schema[column];\n const isNumber = iof(field, XqlNumber, XqlIDField)\n let sql = []\n for (let func in columnArg) {\n const funcArg = columnArg[func as keyof AggregateSelectArgsColumnType]\n const isObject = funcArg && typeof funcArg === \"object\"\n // apply distinct\n let col = column\n if (isObject && funcArg.distinct === true) {\n col = `DISTINCT ${col}`\n }\n\n let _sql = `${func.toUpperCase()}(${col})`\n\n // make to integer for all as REAL\n if (!isNumber) {\n _sql = `CAST(${_sql} AS REAL)`\n }\n\n if (isObject && funcArg?.round !== undefined) {\n _sql = `ROUND(${_sql}, ${funcArg.round})`\n }\n\n if (isObject && funcArg.alias) {\n _sql += ` AS ${funcArg.alias}`\n } else {\n _sql += ` AS ${func}_${column}`\n }\n\n sql.push(_sql)\n }\n return sql.join(\", \")\n }\n\n}\n\nexport default SelectArgs;"],"names":["XansqlError","Foreign","iof","XqlNumber","XqlIDField"],"mappings":";;;;;;;;AAQA,MAAM,UAAU,CAAA;IAKb,WAAA,CAAY,KAAY,EAAE,IAA6B,EAAA;AACpD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,MAAM,IAAI,GAAG,EAAE;AAEf,QAAA,KAAK,IAAI,MAAM,IAAI,IAAI,EAAE;YACtB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;YAClC,IAAI,CAAC,KAAK,EAAE;gBACT,MAAM,IAAIA,gBAAW,CAAC;AACnB,oBAAA,OAAO,EAAE,CAAA,OAAA,EAAU,MAAM,uBAAuB,KAAK,CAAC,KAAK,CAAA,qBAAA,CAAuB;oBAClF,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,oBAAA,MAAM,EAAE;AACV,iBAAA,CAAC;YACL;AACA,YAAA,IAAIC,wBAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;gBACpB,MAAM,IAAID,gBAAW,CAAC;AACnB,oBAAA,OAAO,EAAE,CAAA,yDAAA,EAA4D,MAAM,aAAa,KAAK,CAAC,KAAK,CAAA,CAAE;oBACrG,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,oBAAA,MAAM,EAAE;AACV,iBAAA,CAAC;YACL;iBAAO;AACJ,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAkC;AAC/D,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAClD;QACH;QAEA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;IAEA,YAAY,CAAC,MAAc,EAAE,SAAwC,EAAA;AAClE,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;QACtB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QAClC,MAAM,QAAQ,GAAGE,eAAG,CAAC,KAAK,EAAEC,gBAAS,EAAEC,iBAAU,CAAC;QAClD,IAAI,GAAG,GAAG,EAAE;AACZ,QAAA,KAAK,IAAI,IAAI,IAAI,SAAS,EAAE;AACzB,YAAA,MAAM,OAAO,GAAG,SAAS,CAAC,IAA2C,CAAC;YACtE,MAAM,QAAQ,GAAG,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;;YAEvD,IAAI,GAAG,GAAG,MAAM;YAChB,IAAI,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE;AACxC,gBAAA,GAAG,GAAG,CAAA,SAAA,EAAY,GAAG,CAAA,CAAE;YAC1B;YAEA,IAAI,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,WAAW,EAAE,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,CAAG;;YAG1C,IAAI,CAAC,QAAQ,EAAE;AACZ,gBAAA,IAAI,GAAG,CAAA,KAAA,EAAQ,IAAI,CAAA,SAAA,CAAW;YACjC;AAEA,YAAA,IAAI,QAAQ,IAAI,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,KAAK,MAAK,SAAS,EAAE;gBAC3C,IAAI,GAAG,SAAS,IAAI,CAAA,EAAA,EAAK,OAAO,CAAC,KAAK,GAAG;YAC5C;AAEA,YAAA,IAAI,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE;AAC5B,gBAAA,IAAI,IAAI,CAAA,IAAA,EAAO,OAAO,CAAC,KAAK,EAAE;YACjC;iBAAO;AACJ,gBAAA,IAAI,IAAI,CAAA,IAAA,EAAO,IAAI,CAAA,CAAA,EAAI,MAAM,EAAE;YAClC;AAEA,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjB;AACA,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB;AAEF;;;;"}
@@ -1,5 +1,6 @@
1
1
  import Foreign from '../../../core/classes/ForeignInfo.mjs';
2
2
  import XansqlError from '../../../core/XansqlError.mjs';
3
+ import { iof } from '../../../utils/index.mjs';
3
4
  import XqlIDField from '../../../xt/fields/IDField.mjs';
4
5
  import XqlNumber from '../../../xt/fields/Number.mjs';
5
6
 
@@ -33,7 +34,7 @@ class SelectArgs {
33
34
  columnFormat(column, columnArg) {
34
35
  let model = this.model;
35
36
  const field = model.schema[column];
36
- const isNumber = field instanceof XqlNumber || field instanceof XqlIDField;
37
+ const isNumber = iof(field, XqlNumber, XqlIDField);
37
38
  let sql = [];
38
39
  for (let func in columnArg) {
39
40
  const funcArg = columnArg[func];
@@ -1 +1 @@
1
- {"version":3,"file":"SelectArgs.mjs","sources":["../../../../src/model/Executer/Aggregate/SelectArgs.ts"],"sourcesContent":["import Model from \"../..\";\nimport Foreign from \"../../../core/classes/ForeignInfo\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport XqlIDField from \"../../../xt/fields/IDField\";\nimport XqlNumber from \"../../../xt/fields/Number\";\nimport { AggregateSelectArgsColumnType, AggregateSelectArgsType } from \"../../types\";\n\nclass SelectArgs {\n model: Model\n\n readonly sql: string;\n\n constructor(model: Model, args: AggregateSelectArgsType) {\n this.model = model\n const sqls = []\n\n for (let column in args) {\n const field = model.schema[column];\n if (!field) {\n throw new XansqlError({\n message: `Column ${column} not found in model ${model.table} for aggregate select`,\n model: model.table,\n column: column\n });\n }\n if (Foreign.is(field)) {\n throw new XansqlError({\n message: `Cannot perform aggregate functions on foreign key column ${column} in model ${model.table}`,\n model: model.table,\n column: column\n });\n } else {\n const columnArg = args[column] as AggregateSelectArgsColumnType\n sqls.push(this.columnFormat(column, columnArg))\n }\n }\n\n this.sql = sqls.join(\", \")\n }\n\n columnFormat(column: string, columnArg: AggregateSelectArgsColumnType) {\n let model = this.model\n const field = model.schema[column];\n const isNumber = field instanceof XqlNumber || field instanceof XqlIDField\n let sql = []\n for (let func in columnArg) {\n const funcArg = columnArg[func as keyof AggregateSelectArgsColumnType]\n const isObject = funcArg && typeof funcArg === \"object\"\n // apply distinct\n let col = column\n if (isObject && funcArg.distinct === true) {\n col = `DISTINCT ${col}`\n }\n\n let _sql = `${func.toUpperCase()}(${col})`\n\n // make to integer for all as REAL\n if (!isNumber) {\n _sql = `CAST(${_sql} AS REAL)`\n }\n\n if (isObject && funcArg?.round !== undefined) {\n _sql = `ROUND(${_sql}, ${funcArg.round})`\n }\n\n if (isObject && funcArg.alias) {\n _sql += ` AS ${funcArg.alias}`\n } else {\n _sql += ` AS ${func}_${column}`\n }\n\n sql.push(_sql)\n }\n return sql.join(\", \")\n }\n\n}\n\nexport default SelectArgs;"],"names":[],"mappings":";;;;;AAOA,MAAM,UAAU,CAAA;IAKb,WAAA,CAAY,KAAY,EAAE,IAA6B,EAAA;AACpD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,MAAM,IAAI,GAAG,EAAE;AAEf,QAAA,KAAK,IAAI,MAAM,IAAI,IAAI,EAAE;YACtB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;YAClC,IAAI,CAAC,KAAK,EAAE;gBACT,MAAM,IAAI,WAAW,CAAC;AACnB,oBAAA,OAAO,EAAE,CAAA,OAAA,EAAU,MAAM,uBAAuB,KAAK,CAAC,KAAK,CAAA,qBAAA,CAAuB;oBAClF,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,oBAAA,MAAM,EAAE;AACV,iBAAA,CAAC;YACL;AACA,YAAA,IAAI,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;gBACpB,MAAM,IAAI,WAAW,CAAC;AACnB,oBAAA,OAAO,EAAE,CAAA,yDAAA,EAA4D,MAAM,aAAa,KAAK,CAAC,KAAK,CAAA,CAAE;oBACrG,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,oBAAA,MAAM,EAAE;AACV,iBAAA,CAAC;YACL;iBAAO;AACJ,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAkC;AAC/D,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAClD;QACH;QAEA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;IAEA,YAAY,CAAC,MAAc,EAAE,SAAwC,EAAA;AAClE,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;QACtB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QAClC,MAAM,QAAQ,GAAG,KAAK,YAAY,SAAS,IAAI,KAAK,YAAY,UAAU;QAC1E,IAAI,GAAG,GAAG,EAAE;AACZ,QAAA,KAAK,IAAI,IAAI,IAAI,SAAS,EAAE;AACzB,YAAA,MAAM,OAAO,GAAG,SAAS,CAAC,IAA2C,CAAC;YACtE,MAAM,QAAQ,GAAG,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;;YAEvD,IAAI,GAAG,GAAG,MAAM;YAChB,IAAI,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE;AACxC,gBAAA,GAAG,GAAG,CAAA,SAAA,EAAY,GAAG,CAAA,CAAE;YAC1B;YAEA,IAAI,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,WAAW,EAAE,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,CAAG;;YAG1C,IAAI,CAAC,QAAQ,EAAE;AACZ,gBAAA,IAAI,GAAG,CAAA,KAAA,EAAQ,IAAI,CAAA,SAAA,CAAW;YACjC;AAEA,YAAA,IAAI,QAAQ,IAAI,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,KAAK,MAAK,SAAS,EAAE;gBAC3C,IAAI,GAAG,SAAS,IAAI,CAAA,EAAA,EAAK,OAAO,CAAC,KAAK,GAAG;YAC5C;AAEA,YAAA,IAAI,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE;AAC5B,gBAAA,IAAI,IAAI,CAAA,IAAA,EAAO,OAAO,CAAC,KAAK,EAAE;YACjC;iBAAO;AACJ,gBAAA,IAAI,IAAI,CAAA,IAAA,EAAO,IAAI,CAAA,CAAA,EAAI,MAAM,EAAE;YAClC;AAEA,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjB;AACA,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB;AAEF;;;;"}
1
+ {"version":3,"file":"SelectArgs.mjs","sources":["../../../../src/model/Executer/Aggregate/SelectArgs.ts"],"sourcesContent":["import Model from \"../..\";\nimport Foreign from \"../../../core/classes/ForeignInfo\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { iof } from \"../../../utils\";\nimport XqlIDField from \"../../../xt/fields/IDField\";\nimport XqlNumber from \"../../../xt/fields/Number\";\nimport { AggregateSelectArgsColumnType, AggregateSelectArgsType } from \"../../types\";\n\nclass SelectArgs {\n model: Model\n\n readonly sql: string;\n\n constructor(model: Model, args: AggregateSelectArgsType) {\n this.model = model\n const sqls = []\n\n for (let column in args) {\n const field = model.schema[column];\n if (!field) {\n throw new XansqlError({\n message: `Column ${column} not found in model ${model.table} for aggregate select`,\n model: model.table,\n column: column\n });\n }\n if (Foreign.is(field)) {\n throw new XansqlError({\n message: `Cannot perform aggregate functions on foreign key column ${column} in model ${model.table}`,\n model: model.table,\n column: column\n });\n } else {\n const columnArg = args[column] as AggregateSelectArgsColumnType\n sqls.push(this.columnFormat(column, columnArg))\n }\n }\n\n this.sql = sqls.join(\", \")\n }\n\n columnFormat(column: string, columnArg: AggregateSelectArgsColumnType) {\n let model = this.model\n const field = model.schema[column];\n const isNumber = iof(field, XqlNumber, XqlIDField)\n let sql = []\n for (let func in columnArg) {\n const funcArg = columnArg[func as keyof AggregateSelectArgsColumnType]\n const isObject = funcArg && typeof funcArg === \"object\"\n // apply distinct\n let col = column\n if (isObject && funcArg.distinct === true) {\n col = `DISTINCT ${col}`\n }\n\n let _sql = `${func.toUpperCase()}(${col})`\n\n // make to integer for all as REAL\n if (!isNumber) {\n _sql = `CAST(${_sql} AS REAL)`\n }\n\n if (isObject && funcArg?.round !== undefined) {\n _sql = `ROUND(${_sql}, ${funcArg.round})`\n }\n\n if (isObject && funcArg.alias) {\n _sql += ` AS ${funcArg.alias}`\n } else {\n _sql += ` AS ${func}_${column}`\n }\n\n sql.push(_sql)\n }\n return sql.join(\", \")\n }\n\n}\n\nexport default SelectArgs;"],"names":[],"mappings":";;;;;;AAQA,MAAM,UAAU,CAAA;IAKb,WAAA,CAAY,KAAY,EAAE,IAA6B,EAAA;AACpD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,MAAM,IAAI,GAAG,EAAE;AAEf,QAAA,KAAK,IAAI,MAAM,IAAI,IAAI,EAAE;YACtB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;YAClC,IAAI,CAAC,KAAK,EAAE;gBACT,MAAM,IAAI,WAAW,CAAC;AACnB,oBAAA,OAAO,EAAE,CAAA,OAAA,EAAU,MAAM,uBAAuB,KAAK,CAAC,KAAK,CAAA,qBAAA,CAAuB;oBAClF,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,oBAAA,MAAM,EAAE;AACV,iBAAA,CAAC;YACL;AACA,YAAA,IAAI,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;gBACpB,MAAM,IAAI,WAAW,CAAC;AACnB,oBAAA,OAAO,EAAE,CAAA,yDAAA,EAA4D,MAAM,aAAa,KAAK,CAAC,KAAK,CAAA,CAAE;oBACrG,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,oBAAA,MAAM,EAAE;AACV,iBAAA,CAAC;YACL;iBAAO;AACJ,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAkC;AAC/D,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAClD;QACH;QAEA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;IAEA,YAAY,CAAC,MAAc,EAAE,SAAwC,EAAA;AAClE,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;QACtB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC;QAClD,IAAI,GAAG,GAAG,EAAE;AACZ,QAAA,KAAK,IAAI,IAAI,IAAI,SAAS,EAAE;AACzB,YAAA,MAAM,OAAO,GAAG,SAAS,CAAC,IAA2C,CAAC;YACtE,MAAM,QAAQ,GAAG,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;;YAEvD,IAAI,GAAG,GAAG,MAAM;YAChB,IAAI,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE;AACxC,gBAAA,GAAG,GAAG,CAAA,SAAA,EAAY,GAAG,CAAA,CAAE;YAC1B;YAEA,IAAI,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,WAAW,EAAE,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,CAAG;;YAG1C,IAAI,CAAC,QAAQ,EAAE;AACZ,gBAAA,IAAI,GAAG,CAAA,KAAA,EAAQ,IAAI,CAAA,SAAA,CAAW;YACjC;AAEA,YAAA,IAAI,QAAQ,IAAI,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,KAAK,MAAK,SAAS,EAAE;gBAC3C,IAAI,GAAG,SAAS,IAAI,CAAA,EAAA,EAAK,OAAO,CAAC,KAAK,GAAG;YAC5C;AAEA,YAAA,IAAI,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE;AAC5B,gBAAA,IAAI,IAAI,CAAA,IAAA,EAAO,OAAO,CAAC,KAAK,EAAE;YACjC;iBAAO;AACJ,gBAAA,IAAI,IAAI,CAAA,IAAA,EAAO,IAAI,CAAA,CAAA,EAAI,MAAM,EAAE;YAClC;AAEA,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjB;AACA,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB;AAEF;;;;"}
@@ -42,11 +42,11 @@ class AggregateExecuter {
42
42
  groupBySql = ` GROUP BY ${args.groupBy.join(", ")} `;
43
43
  }
44
44
  sql += `${select.sql} FROM ${model.table} ${Where.sql}${groupBySql}${OrderBy.sql}${LimitSql}`.trim();
45
- const { results } = await model.execute(sql);
45
+ const res = await model.execute(sql);
46
46
  // remove groupBy columns from results
47
- if (this.removeGroupByColumns && results.length && args.groupBy && args.groupBy.length) {
47
+ if (this.removeGroupByColumns && (res === null || res === void 0 ? void 0 : res.results.length) && args.groupBy && args.groupBy.length) {
48
48
  const groupBySet = new Set(args.groupBy);
49
- for (let { chunk } of utils_chunker.chunkArray(results)) {
49
+ for (let { chunk } of utils_chunker.chunkArray(res === null || res === void 0 ? void 0 : res.results)) {
50
50
  for (let row of chunk) {
51
51
  for (let column of groupBySet) {
52
52
  delete row[column];
@@ -54,7 +54,7 @@ class AggregateExecuter {
54
54
  }
55
55
  }
56
56
  }
57
- return results;
57
+ return res === null || res === void 0 ? void 0 : res.results;
58
58
  }
59
59
  }
60
60
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/model/Executer/Aggregate/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { chunkArray } from \"../../../utils/chunker\";\nimport WhereArgs from \"../../Args/WhereArgs\";\nimport { AggregateArgsType } from \"../../types\";\nimport LimitArgs from \"../Find/LimitArgs\";\nimport OrderByArgs from \"../Find/OrderByArgs\";\nimport SelectArgs from \"./SelectArgs\";\n\nclass AggregateExecuter {\n\n private model: Model\n private removeGroupByColumns: boolean\n constructor(model: Model, removeGroupByColumns: boolean = true) {\n this.model = model\n this.removeGroupByColumns = removeGroupByColumns\n }\n\n async execute(args: AggregateArgsType) {\n const xansql = this.model.xansql\n const model = this.model\n const select = new SelectArgs(model, args.select || {})\n const Where = new WhereArgs(model, args.where || {})\n const OrderBy = new OrderByArgs(model, args.orderBy || {})\n let LimitSql = \"\"\n\n if (args.groupBy && args.groupBy.length) {\n LimitSql = (new LimitArgs(model, args.limit || {})).sql\n }\n\n if (!LimitSql && Object.keys(args.limit || {}).length) {\n LimitSql = (new LimitArgs(model, args.limit || {})).sql\n }\n\n let sql = `SELECT `\n let groupBySql = \"\"\n if (args.groupBy && args.groupBy.length) {\n // check column is exists\n for (let column of args.groupBy) {\n if (!model.schema[column]) {\n throw new XansqlError({\n message: `Column ${column} not found in model ${model.table} for groupBy`,\n model: model.table,\n column: column\n });\n }\n }\n sql += args.groupBy.join(\", \") + \", \"\n groupBySql = ` GROUP BY ${args.groupBy.join(\", \")} `\n }\n sql += `${select.sql} FROM ${model.table} ${Where.sql}${groupBySql}${OrderBy.sql}${LimitSql}`.trim()\n const { results } = await model.execute(sql)\n\n // remove groupBy columns from results\n if (this.removeGroupByColumns && results.length && args.groupBy && args.groupBy.length) {\n const groupBySet = new Set(args.groupBy)\n for (let { chunk } of chunkArray(results)) {\n for (let row of chunk) {\n for (let column of groupBySet) {\n delete (row as any)[column]\n }\n }\n }\n }\n\n return results\n }\n}\n\nexport default AggregateExecuter"],"names":["SelectArgs","WhereArgs","OrderByArgs","LimitArgs","XansqlError","chunkArray"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/model/Executer/Aggregate/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { chunkArray } from \"../../../utils/chunker\";\nimport WhereArgs from \"../../Args/WhereArgs\";\nimport { AggregateArgsType } from \"../../types\";\nimport LimitArgs from \"../Find/LimitArgs\";\nimport OrderByArgs from \"../Find/OrderByArgs\";\nimport SelectArgs from \"./SelectArgs\";\n\nclass AggregateExecuter {\n\n private model: Model\n private removeGroupByColumns: boolean\n constructor(model: Model, removeGroupByColumns: boolean = true) {\n this.model = model\n this.removeGroupByColumns = removeGroupByColumns\n }\n\n async execute(args: AggregateArgsType) {\n const xansql = this.model.xansql\n const model = this.model\n const select = new SelectArgs(model, args.select || {})\n const Where = new WhereArgs(model, args.where || {})\n const OrderBy = new OrderByArgs(model, args.orderBy || {})\n let LimitSql = \"\"\n\n if (args.groupBy && args.groupBy.length) {\n LimitSql = (new LimitArgs(model, args.limit || {})).sql\n }\n\n if (!LimitSql && Object.keys(args.limit || {}).length) {\n LimitSql = (new LimitArgs(model, args.limit || {})).sql\n }\n\n let sql = `SELECT `\n let groupBySql = \"\"\n if (args.groupBy && args.groupBy.length) {\n // check column is exists\n for (let column of args.groupBy) {\n if (!model.schema[column]) {\n throw new XansqlError({\n message: `Column ${column} not found in model ${model.table} for groupBy`,\n model: model.table,\n column: column\n });\n }\n }\n sql += args.groupBy.join(\", \") + \", \"\n groupBySql = ` GROUP BY ${args.groupBy.join(\", \")} `\n }\n sql += `${select.sql} FROM ${model.table} ${Where.sql}${groupBySql}${OrderBy.sql}${LimitSql}`.trim()\n const res = await model.execute(sql)\n\n // remove groupBy columns from results\n if (this.removeGroupByColumns && res?.results.length && args.groupBy && args.groupBy.length) {\n const groupBySet = new Set(args.groupBy)\n for (let { chunk } of chunkArray(res?.results)) {\n for (let row of chunk) {\n for (let column of groupBySet) {\n delete (row as any)[column]\n }\n }\n }\n }\n\n return res?.results\n }\n}\n\nexport default AggregateExecuter"],"names":["SelectArgs","WhereArgs","OrderByArgs","LimitArgs","XansqlError","chunkArray"],"mappings":"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"}
@@ -40,11 +40,11 @@ class AggregateExecuter {
40
40
  groupBySql = ` GROUP BY ${args.groupBy.join(", ")} `;
41
41
  }
42
42
  sql += `${select.sql} FROM ${model.table} ${Where.sql}${groupBySql}${OrderBy.sql}${LimitSql}`.trim();
43
- const { results } = await model.execute(sql);
43
+ const res = await model.execute(sql);
44
44
  // remove groupBy columns from results
45
- if (this.removeGroupByColumns && results.length && args.groupBy && args.groupBy.length) {
45
+ if (this.removeGroupByColumns && (res === null || res === void 0 ? void 0 : res.results.length) && args.groupBy && args.groupBy.length) {
46
46
  const groupBySet = new Set(args.groupBy);
47
- for (let { chunk } of chunkArray(results)) {
47
+ for (let { chunk } of chunkArray(res === null || res === void 0 ? void 0 : res.results)) {
48
48
  for (let row of chunk) {
49
49
  for (let column of groupBySet) {
50
50
  delete row[column];
@@ -52,7 +52,7 @@ class AggregateExecuter {
52
52
  }
53
53
  }
54
54
  }
55
- return results;
55
+ return res === null || res === void 0 ? void 0 : res.results;
56
56
  }
57
57
  }
58
58
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../src/model/Executer/Aggregate/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { chunkArray } from \"../../../utils/chunker\";\nimport WhereArgs from \"../../Args/WhereArgs\";\nimport { AggregateArgsType } from \"../../types\";\nimport LimitArgs from \"../Find/LimitArgs\";\nimport OrderByArgs from \"../Find/OrderByArgs\";\nimport SelectArgs from \"./SelectArgs\";\n\nclass AggregateExecuter {\n\n private model: Model\n private removeGroupByColumns: boolean\n constructor(model: Model, removeGroupByColumns: boolean = true) {\n this.model = model\n this.removeGroupByColumns = removeGroupByColumns\n }\n\n async execute(args: AggregateArgsType) {\n const xansql = this.model.xansql\n const model = this.model\n const select = new SelectArgs(model, args.select || {})\n const Where = new WhereArgs(model, args.where || {})\n const OrderBy = new OrderByArgs(model, args.orderBy || {})\n let LimitSql = \"\"\n\n if (args.groupBy && args.groupBy.length) {\n LimitSql = (new LimitArgs(model, args.limit || {})).sql\n }\n\n if (!LimitSql && Object.keys(args.limit || {}).length) {\n LimitSql = (new LimitArgs(model, args.limit || {})).sql\n }\n\n let sql = `SELECT `\n let groupBySql = \"\"\n if (args.groupBy && args.groupBy.length) {\n // check column is exists\n for (let column of args.groupBy) {\n if (!model.schema[column]) {\n throw new XansqlError({\n message: `Column ${column} not found in model ${model.table} for groupBy`,\n model: model.table,\n column: column\n });\n }\n }\n sql += args.groupBy.join(\", \") + \", \"\n groupBySql = ` GROUP BY ${args.groupBy.join(\", \")} `\n }\n sql += `${select.sql} FROM ${model.table} ${Where.sql}${groupBySql}${OrderBy.sql}${LimitSql}`.trim()\n const { results } = await model.execute(sql)\n\n // remove groupBy columns from results\n if (this.removeGroupByColumns && results.length && args.groupBy && args.groupBy.length) {\n const groupBySet = new Set(args.groupBy)\n for (let { chunk } of chunkArray(results)) {\n for (let row of chunk) {\n for (let column of groupBySet) {\n delete (row as any)[column]\n }\n }\n }\n }\n\n return results\n }\n}\n\nexport default AggregateExecuter"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/model/Executer/Aggregate/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { chunkArray } from \"../../../utils/chunker\";\nimport WhereArgs from \"../../Args/WhereArgs\";\nimport { AggregateArgsType } from \"../../types\";\nimport LimitArgs from \"../Find/LimitArgs\";\nimport OrderByArgs from \"../Find/OrderByArgs\";\nimport SelectArgs from \"./SelectArgs\";\n\nclass AggregateExecuter {\n\n private model: Model\n private removeGroupByColumns: boolean\n constructor(model: Model, removeGroupByColumns: boolean = true) {\n this.model = model\n this.removeGroupByColumns = removeGroupByColumns\n }\n\n async execute(args: AggregateArgsType) {\n const xansql = this.model.xansql\n const model = this.model\n const select = new SelectArgs(model, args.select || {})\n const Where = new WhereArgs(model, args.where || {})\n const OrderBy = new OrderByArgs(model, args.orderBy || {})\n let LimitSql = \"\"\n\n if (args.groupBy && args.groupBy.length) {\n LimitSql = (new LimitArgs(model, args.limit || {})).sql\n }\n\n if (!LimitSql && Object.keys(args.limit || {}).length) {\n LimitSql = (new LimitArgs(model, args.limit || {})).sql\n }\n\n let sql = `SELECT `\n let groupBySql = \"\"\n if (args.groupBy && args.groupBy.length) {\n // check column is exists\n for (let column of args.groupBy) {\n if (!model.schema[column]) {\n throw new XansqlError({\n message: `Column ${column} not found in model ${model.table} for groupBy`,\n model: model.table,\n column: column\n });\n }\n }\n sql += args.groupBy.join(\", \") + \", \"\n groupBySql = ` GROUP BY ${args.groupBy.join(\", \")} `\n }\n sql += `${select.sql} FROM ${model.table} ${Where.sql}${groupBySql}${OrderBy.sql}${LimitSql}`.trim()\n const res = await model.execute(sql)\n\n // remove groupBy columns from results\n if (this.removeGroupByColumns && res?.results.length && args.groupBy && args.groupBy.length) {\n const groupBySet = new Set(args.groupBy)\n for (let { chunk } of chunkArray(res?.results)) {\n for (let row of chunk) {\n for (let column of groupBySet) {\n delete (row as any)[column]\n }\n }\n }\n }\n\n return res?.results\n }\n}\n\nexport default AggregateExecuter"],"names":[],"mappings":"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"}
@@ -84,14 +84,14 @@ class CreateDataArgs {
84
84
  }
85
85
  else {
86
86
  // check is the field is IDField or created_at or updated_at
87
- if (model.IDColumn === column || field instanceof xt_fields_Date && (field.meta.update || field.meta.create)) {
87
+ if (model.IDColumn === column || utils_index.iof(field, xt_fields_Date) && (field.meta.update || (field.meta.create || field.meta.update))) {
88
88
  throw new core_XansqlError({
89
89
  message: `Cannot set value for ${model.table}.${column}. It is automatically managed.`,
90
90
  model: model.table,
91
91
  column: column
92
92
  });
93
93
  }
94
- if (value instanceof File) {
94
+ if (utils_index.iof(value, File)) {
95
95
  this.files[column] = value;
96
96
  this.data[column] = '';
97
97
  model_include_ValueFormatter.toSql(model, column, value); // for validation
@@ -102,7 +102,7 @@ class CreateDataArgs {
102
102
  }
103
103
  }
104
104
  catch (error) {
105
- if (error instanceof core_XansqlError) {
105
+ if (utils_index.iof(error, core_XansqlError)) {
106
106
  this.errors.push(error);
107
107
  }
108
108
  else {
@@ -135,9 +135,13 @@ class CreateDataArgs {
135
135
  column: column
136
136
  }));
137
137
  }
138
- continue;
139
138
  }
140
- this.data[column] = model_include_ValueFormatter.toSql(model, column, null);
139
+ else if (utils_index.iof(field, xt_fields_Date) && (field.meta.create || field.meta.update)) {
140
+ this.data[column] = model_include_ValueFormatter.toSql(model, column, new Date());
141
+ }
142
+ else {
143
+ this.data[column] = model_include_ValueFormatter.toSql(model, column, null);
144
+ }
141
145
  }
142
146
  // generate sql
143
147
  // const keys = Object.keys(this.data)