xansql 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/Types/fields/Array.d.ts +7 -0
  2. package/Types/fields/Array.js +6 -0
  3. package/Types/fields/Array.js.map +1 -0
  4. package/Types/fields/Array.mjs +6 -0
  5. package/Types/fields/Array.mjs.map +1 -0
  6. package/Types/fields/Boolean.d.ts +8 -0
  7. package/Types/fields/Boolean.js +11 -0
  8. package/Types/fields/Boolean.js.map +1 -0
  9. package/Types/fields/Boolean.mjs +11 -0
  10. package/Types/fields/Boolean.mjs.map +1 -0
  11. package/Types/fields/Date.d.ts +10 -0
  12. package/Types/fields/Date.js +22 -0
  13. package/Types/fields/Date.js.map +1 -0
  14. package/Types/fields/Date.mjs +22 -0
  15. package/Types/fields/Date.mjs.map +1 -0
  16. package/Types/fields/Enum.d.ts +8 -0
  17. package/Types/fields/Enum.js +10 -0
  18. package/Types/fields/Enum.js.map +1 -0
  19. package/Types/fields/Enum.mjs +10 -0
  20. package/Types/fields/Enum.mjs.map +1 -0
  21. package/Types/fields/File.d.ts +7 -0
  22. package/Types/fields/File.js +6 -0
  23. package/Types/fields/File.js.map +1 -0
  24. package/Types/fields/File.mjs +6 -0
  25. package/Types/fields/File.mjs.map +1 -0
  26. package/Types/fields/IDField.d.ts +6 -0
  27. package/Types/fields/IDField.js +2 -0
  28. package/Types/fields/IDField.js.map +1 -0
  29. package/Types/fields/IDField.mjs +2 -0
  30. package/Types/fields/IDField.mjs.map +1 -0
  31. package/Types/fields/Number.d.ts +8 -0
  32. package/Types/fields/Number.js +11 -0
  33. package/Types/fields/Number.js.map +1 -0
  34. package/Types/fields/Number.mjs +11 -0
  35. package/Types/fields/Number.mjs.map +1 -0
  36. package/Types/fields/Object.d.ts +8 -0
  37. package/Types/fields/Object.js +11 -0
  38. package/Types/fields/Object.js.map +1 -0
  39. package/Types/fields/Object.mjs +11 -0
  40. package/Types/fields/Object.mjs.map +1 -0
  41. package/Types/fields/Record.d.ts +8 -0
  42. package/Types/fields/Record.js +11 -0
  43. package/Types/fields/Record.js.map +1 -0
  44. package/Types/fields/Record.mjs +11 -0
  45. package/Types/fields/Record.mjs.map +1 -0
  46. package/Types/fields/Schema.d.ts +16 -0
  47. package/Types/fields/Schema.js +34 -0
  48. package/Types/fields/Schema.js.map +1 -0
  49. package/Types/fields/Schema.mjs +34 -0
  50. package/Types/fields/Schema.mjs.map +1 -0
  51. package/Types/fields/String.d.ts +10 -0
  52. package/Types/fields/String.js +20 -0
  53. package/Types/fields/String.js.map +1 -0
  54. package/Types/fields/String.mjs +20 -0
  55. package/Types/fields/String.mjs.map +1 -0
  56. package/Types/fields/Tuple.d.ts +8 -0
  57. package/Types/fields/Tuple.js +11 -0
  58. package/Types/fields/Tuple.js.map +1 -0
  59. package/Types/fields/Tuple.mjs +11 -0
  60. package/Types/fields/Tuple.mjs.map +1 -0
  61. package/Types/fields/Union.d.ts +8 -0
  62. package/Types/fields/Union.js +11 -0
  63. package/Types/fields/Union.js.map +1 -0
  64. package/Types/fields/Union.mjs +11 -0
  65. package/Types/fields/Union.mjs.map +1 -0
  66. package/Types/index.d.ts +56 -0
  67. package/Types/index.js +129 -0
  68. package/Types/index.js.map +1 -0
  69. package/Types/index.mjs +129 -0
  70. package/Types/index.mjs.map +1 -0
  71. package/Types/types.d.ts +20 -0
  72. package/core/ExcuteMeta.d.ts +11 -0
  73. package/core/ExcuteMeta.js +22 -0
  74. package/core/ExcuteMeta.js.map +1 -0
  75. package/core/ExcuteMeta.mjs +22 -0
  76. package/core/ExcuteMeta.mjs.map +1 -0
  77. package/core/Xansql.d.ts +46 -0
  78. package/core/Xansql.js +132 -0
  79. package/core/Xansql.js.map +1 -0
  80. package/core/Xansql.mjs +132 -0
  81. package/core/Xansql.mjs.map +1 -0
  82. package/core/XansqlError.js +11 -0
  83. package/core/XansqlError.js.map +1 -0
  84. package/core/XansqlError.mjs +11 -0
  85. package/core/XansqlError.mjs.map +1 -0
  86. package/core/XansqlResult.d.ts +12 -0
  87. package/core/XansqlResult.js +32 -0
  88. package/core/XansqlResult.js.map +1 -0
  89. package/core/XansqlResult.mjs +32 -0
  90. package/core/XansqlResult.mjs.map +1 -0
  91. package/core/classes/EventManager.d.ts +72 -0
  92. package/core/classes/EventManager.js +21 -0
  93. package/core/classes/EventManager.js.map +1 -0
  94. package/core/classes/EventManager.mjs +21 -0
  95. package/core/classes/EventManager.mjs.map +1 -0
  96. package/core/classes/ForeignInfo.js +51 -0
  97. package/core/classes/ForeignInfo.js.map +1 -0
  98. package/core/classes/ForeignInfo.mjs +51 -0
  99. package/core/classes/ForeignInfo.mjs.map +1 -0
  100. package/core/classes/Migration/ForeingMigration.d.ts +12 -0
  101. package/core/classes/Migration/ForeingMigration.js +52 -0
  102. package/core/classes/Migration/ForeingMigration.js.map +1 -0
  103. package/core/classes/Migration/ForeingMigration.mjs +52 -0
  104. package/core/classes/Migration/ForeingMigration.mjs.map +1 -0
  105. package/core/classes/Migration/IndexMigration.d.ts +12 -0
  106. package/core/classes/Migration/IndexMigration.js +49 -0
  107. package/core/classes/Migration/IndexMigration.js.map +1 -0
  108. package/core/classes/Migration/IndexMigration.mjs +49 -0
  109. package/core/classes/Migration/IndexMigration.mjs.map +1 -0
  110. package/core/classes/Migration/TableMigration.d.ts +33 -0
  111. package/core/classes/Migration/TableMigration.js +215 -0
  112. package/core/classes/Migration/TableMigration.js.map +1 -0
  113. package/core/classes/Migration/TableMigration.mjs +215 -0
  114. package/core/classes/Migration/TableMigration.mjs.map +1 -0
  115. package/core/classes/Migration/index.d.ts +12 -0
  116. package/core/classes/Migration/index.js +189 -0
  117. package/core/classes/Migration/index.js.map +1 -0
  118. package/core/classes/Migration/index.mjs +189 -0
  119. package/core/classes/Migration/index.mjs.map +1 -0
  120. package/core/classes/ModelFormatter.js +166 -0
  121. package/core/classes/ModelFormatter.js.map +1 -0
  122. package/core/classes/ModelFormatter.mjs +166 -0
  123. package/core/classes/ModelFormatter.mjs.map +1 -0
  124. package/core/classes/TypesGenerator.d.ts +13 -0
  125. package/core/classes/TypesGenerator.js +170 -0
  126. package/core/classes/TypesGenerator.js.map +1 -0
  127. package/core/classes/TypesGenerator.mjs +170 -0
  128. package/core/classes/TypesGenerator.mjs.map +1 -0
  129. package/core/classes/XansqlConfig.js +33 -0
  130. package/core/classes/XansqlConfig.js.map +1 -0
  131. package/core/classes/XansqlConfig.mjs +33 -0
  132. package/core/classes/XansqlConfig.mjs.map +1 -0
  133. package/core/classes/XansqlFetch.js +304 -0
  134. package/core/classes/XansqlFetch.js.map +1 -0
  135. package/core/classes/XansqlFetch.mjs +304 -0
  136. package/core/classes/XansqlFetch.mjs.map +1 -0
  137. package/core/classes/XansqlTransaction.d.ts +13 -0
  138. package/core/classes/XansqlTransaction.js +46 -0
  139. package/core/classes/XansqlTransaction.js.map +1 -0
  140. package/core/classes/XansqlTransaction.mjs +46 -0
  141. package/core/classes/XansqlTransaction.mjs.map +1 -0
  142. package/core/type.d.ts +117 -0
  143. package/index.d.ts +3 -0
  144. package/index.js +1 -0
  145. package/index.js.map +1 -0
  146. package/index.mjs +1 -0
  147. package/index.mjs.map +1 -0
  148. package/model/Args/RelationExcuteArgs.js +5 -0
  149. package/model/Args/RelationExcuteArgs.js.map +1 -0
  150. package/model/Args/RelationExcuteArgs.mjs +5 -0
  151. package/model/Args/RelationExcuteArgs.mjs.map +1 -0
  152. package/model/Args/WhereArgs.js +226 -0
  153. package/model/Args/WhereArgs.js.map +1 -0
  154. package/model/Args/WhereArgs.mjs +226 -0
  155. package/model/Args/WhereArgs.mjs.map +1 -0
  156. package/model/Base.d.ts +26 -0
  157. package/model/Base.js +64 -0
  158. package/model/Base.js.map +1 -0
  159. package/model/Base.mjs +64 -0
  160. package/model/Base.mjs.map +1 -0
  161. package/model/Executer/Aggregate/SelectArgs.js +59 -0
  162. package/model/Executer/Aggregate/SelectArgs.js.map +1 -0
  163. package/model/Executer/Aggregate/SelectArgs.mjs +59 -0
  164. package/model/Executer/Aggregate/SelectArgs.mjs.map +1 -0
  165. package/model/Executer/Aggregate/index.js +59 -0
  166. package/model/Executer/Aggregate/index.js.map +1 -0
  167. package/model/Executer/Aggregate/index.mjs +59 -0
  168. package/model/Executer/Aggregate/index.mjs.map +1 -0
  169. package/model/Executer/Create/CreateDataArgs.js +145 -0
  170. package/model/Executer/Create/CreateDataArgs.js.map +1 -0
  171. package/model/Executer/Create/CreateDataArgs.mjs +145 -0
  172. package/model/Executer/Create/CreateDataArgs.mjs.map +1 -0
  173. package/model/Executer/Create/index.js +101 -0
  174. package/model/Executer/Create/index.js.map +1 -0
  175. package/model/Executer/Create/index.mjs +101 -0
  176. package/model/Executer/Create/index.mjs.map +1 -0
  177. package/model/Executer/Delete/index.js +112 -0
  178. package/model/Executer/Delete/index.js.map +1 -0
  179. package/model/Executer/Delete/index.mjs +112 -0
  180. package/model/Executer/Delete/index.mjs.map +1 -0
  181. package/model/Executer/Find/DistinctArgs.js +32 -0
  182. package/model/Executer/Find/DistinctArgs.js.map +1 -0
  183. package/model/Executer/Find/DistinctArgs.mjs +32 -0
  184. package/model/Executer/Find/DistinctArgs.mjs.map +1 -0
  185. package/model/Executer/Find/LimitArgs.js +31 -0
  186. package/model/Executer/Find/LimitArgs.js.map +1 -0
  187. package/model/Executer/Find/LimitArgs.mjs +31 -0
  188. package/model/Executer/Find/LimitArgs.mjs.map +1 -0
  189. package/model/Executer/Find/OrderByArgs.js +29 -0
  190. package/model/Executer/Find/OrderByArgs.js.map +1 -0
  191. package/model/Executer/Find/OrderByArgs.mjs +29 -0
  192. package/model/Executer/Find/OrderByArgs.mjs.map +1 -0
  193. package/model/Executer/Find/SelectArgs.js +119 -0
  194. package/model/Executer/Find/SelectArgs.js.map +1 -0
  195. package/model/Executer/Find/SelectArgs.mjs +119 -0
  196. package/model/Executer/Find/SelectArgs.mjs.map +1 -0
  197. package/model/Executer/Find/index.js +338 -0
  198. package/model/Executer/Find/index.js.map +1 -0
  199. package/model/Executer/Find/index.mjs +338 -0
  200. package/model/Executer/Find/index.mjs.map +1 -0
  201. package/model/Executer/Update/UpdateDataArgs.js +124 -0
  202. package/model/Executer/Update/UpdateDataArgs.js.map +1 -0
  203. package/model/Executer/Update/UpdateDataArgs.mjs +124 -0
  204. package/model/Executer/Update/UpdateDataArgs.mjs.map +1 -0
  205. package/model/Executer/Update/index.js +207 -0
  206. package/model/Executer/Update/index.js.map +1 -0
  207. package/model/Executer/Update/index.mjs +207 -0
  208. package/model/Executer/Update/index.mjs.map +1 -0
  209. package/model/include/ValueFormatter.js +99 -0
  210. package/model/include/ValueFormatter.js.map +1 -0
  211. package/model/include/ValueFormatter.mjs +99 -0
  212. package/model/include/ValueFormatter.mjs.map +1 -0
  213. package/model/index.d.ts +29 -0
  214. package/model/index.js +236 -0
  215. package/model/index.js.map +1 -0
  216. package/model/index.mjs +236 -0
  217. package/model/index.mjs.map +1 -0
  218. package/model/type.d.ts +106 -0
  219. package/package.json +32 -0
  220. package/readme.md +359 -0
  221. package/utils/chunker.js +53 -0
  222. package/utils/chunker.js.map +1 -0
  223. package/utils/chunker.mjs +53 -0
  224. package/utils/chunker.mjs.map +1 -0
  225. package/utils/index.js +49 -0
  226. package/utils/index.js.map +1 -0
  227. package/utils/index.mjs +49 -0
  228. package/utils/index.mjs.map +1 -0
  229. package/utils/sha256.js +66 -0
  230. package/utils/sha256.js.map +1 -0
  231. package/utils/sha256.mjs +66 -0
  232. package/utils/sha256.mjs.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/model/Executer/Find/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport Foreign, { ForeignInfoType } from \"../../../core/classes/ForeignInfo\";\nimport ExecuteMeta from \"../../../core/ExcuteMeta\";\nimport { RowObject } from \"../../../core/type\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { chunkArray, chunkNumbers } from \"../../../utils/chunker\";\nimport RelationExecuteArgs from \"../../Args/RelationExcuteArgs\";\nimport WhereArgs from \"../../Args/WhereArgs\";\nimport { FindArgsAggregate, FindArgsType } from \"../../type\";\nimport AggregateExecuter from \"../Aggregate\";\nimport DistinctArgs from \"./DistinctArgs\";\nimport LimitArgs from \"./LimitArgs\";\nimport OrderByArgs from \"./OrderByArgs\";\nimport SelectArgs, { SelectArgsRelationInfo } from \"./SelectArgs\";\n\nclass FindExecuter {\n model: Model\n transformer: ((row: RowObject) => Promise<RowObject>) | null = null\n constructor(model: Model, transformer: ((row: RowObject) => Promise<RowObject>) | null = null) {\n this.model = model\n this.transformer = transformer\n }\n\n async execute(args: FindArgsType) {\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 Limit = new LimitArgs(model, args.limit || {})\n const OrderBy = new OrderByArgs(model, args.orderBy || {})\n const Distinct = new DistinctArgs(model, args.distinct || [], Where, args.orderBy)\n const isRelation = args instanceof RelationExecuteArgs\n\n let where_sql = Where.sql\n if (Distinct.sql) {\n where_sql = where_sql ? `${where_sql} AND ${Distinct.sql}` : `WHERE ${Distinct.sql}`\n }\n\n // batch execution with limit and offset\n let results: any[] = []\n\n if (!Limit.sql) {\n let executeId = undefined;\n if (typeof window !== \"undefined\") {\n executeId = ExecuteMeta.set({\n model,\n action: \"SELECT\",\n modelType: isRelation ? \"child\" : \"main\",\n args\n });\n }\n const sql = `SELECT ${Select.sql} FROM ${model.table} ${where_sql}${OrderBy.sql}`.trim()\n const executed = await xansql.execute(sql, executeId)\n if (executed?.results) {\n results = results.concat(executed.results)\n }\n } else {\n for (let { take, skip } of chunkNumbers(Limit.take)) {\n let executeId = undefined;\n if (typeof window !== \"undefined\") {\n executeId = ExecuteMeta.set({\n model,\n action: \"SELECT\",\n modelType: isRelation ? \"child\" : \"main\",\n args\n });\n }\n const batchLimitArgs = new LimitArgs(model, { take, skip: Limit.skip + skip })\n const sql = `SELECT ${Select.sql} FROM ${model.table} ${where_sql}${OrderBy.sql}${batchLimitArgs.sql}`.trim()\n const executed = await xansql.execute(sql, executeId)\n if (executed?.results) {\n results = results.concat(executed.results)\n }\n }\n }\n\n if (results?.length) {\n const is = Select.formatable_columns.length\n || Object.keys(Select.relations).length\n || Object.keys(args.aggregate || {}).length\n\n if (!is) return results\n\n const freses: { [col: string]: any[] } = {}\n let idsList: { [col: string]: number[] } = {}\n\n for (let column in Select.relations) {\n const relation = Select.relations[column]\n const ids: number[] = idsList[column] || []\n const foreign = relation.foreign\n if (!idsList[column]) {\n for (let r of results) {\n let id = r[foreign.relation.target]\n if (typeof id === \"number\" && !ids.includes(id)) {\n ids.push(id)\n }\n }\n idsList[column] = ids\n }\n\n const fres = await this.executeRelation(relation, ids)\n freses[column] = fres\n }\n\n const agg_reses: any = {}\n if (Object.keys(args.aggregate || {}).length) {\n const agg_results = await this.aggregate(model, args.aggregate || {}, results)\n for (let col in agg_results) {\n agg_reses[col] = agg_results[col]\n }\n }\n\n for (let { chunk } of chunkArray(results)) {\n for (let row of chunk) {\n // handle formattable columns\n this.formatFormadableColumns(row, Select.formatable_columns)\n row = this?.transformer ? await this.transformer(row) : row\n\n // handle aggregate\n if (Object.keys(agg_reses).length) {\n for (let col in agg_reses) {\n const aggres = agg_reses[col]\n if (!row.aggregate) {\n row.aggregate = {}\n }\n row.aggregate[col] = aggres.results.find((ar: any) => {\n let is = ar[aggres.foreign.relation.main] === row[aggres.foreign.relation.target]\n if (is) delete ar[aggres.foreign.relation.main]\n return is\n })\n }\n }\n\n // handle relations\n if (Object.keys(freses).length) {\n for (let col in freses) {\n const fres = freses[col]\n const relation = Select.relations[col]\n if (Foreign.isArray(model.schema[col])) {\n row[col] = fres.filter((fr: any) => {\n let is = fr[relation.foreign.relation.main] === row[relation.foreign.relation.target]\n if (is) delete fr[relation.foreign.relation.main]\n return is\n })\n } else {\n row[col] = fres.find((fr: any) => fr[relation.foreign.relation.main] === row[relation.foreign.relation.target]) || null\n }\n }\n }\n }\n }\n }\n return results;\n }\n\n\n private async executeRelation(relation: SelectArgsRelationInfo, ids: number[]) {\n let xansql = this.model.xansql\n let foreign = relation.foreign\n\n const table = foreign.table\n let FModel = xansql.getModel(table)\n const field = FModel.schema[foreign.column]\n let args = relation.args\n\n const chunkedIds = chunkArray(ids, 150)\n\n let fres: any[] = []\n\n for (let { chunk } of chunkedIds) {\n let sql = ''\n const limit = args.limit\n let where_sql = args.where\n let insql = `${foreign.relation.main} IN (${chunk.join(\",\")})`\n where_sql += where_sql ? ` AND ${insql}` : `WHERE ${insql}`\n\n if (!Foreign.isSchema(field)) {\n sql = `SELECT ${args.select.sql} FROM ${table} ${where_sql} ${args.orderBy} ${limit.sql}`.trim()\n } else {\n if (!limit.sql) {\n sql = `SELECT ${args.select.sql} FROM ${table} ${where_sql} ${args.orderBy}`.trim()\n } else {\n sql = `\n SELECT ${args.select.sql} FROM (\n SELECT\n ${args.select.sql},\n ROW_NUMBER() OVER (PARTITION BY ${table}.${foreign.relation.main} ${args.orderBy}) AS ${table}_rank\n FROM ${table}\n ${where_sql}\n ) AS ${table}\n WHERE ${table}_rank > ${limit.skip} AND ${table}_rank <= ${limit.take + limit.skip};\n `\n }\n }\n let executeId = undefined;\n if (typeof window !== \"undefined\") {\n executeId = ExecuteMeta.set({\n model: FModel,\n action: \"SELECT\",\n modelType: \"child\",\n args\n });\n }\n const res = (await xansql.execute(sql, executeId)).results\n if (res) {\n fres = fres.concat(res)\n }\n }\n\n // let insql = `${foreign.relation.main} IN (${ids.join(\",\")})`\n // where_sql += where_sql ? ` AND ${insql}` : `WHERE ${insql}`\n\n // if (!Foreign.isSchema(field)) {\n // sql = `SELECT ${args.select.sql} FROM ${table} ${where_sql} ${args.orderBy} ${limit.sql}`.trim()\n // } else {\n // sql = `\n // SELECT ${args.select.sql} FROM (\n // SELECT\n // ${args.select.sql},\n // ROW_NUMBER() OVER (PARTITION BY ${table}.${foreign.relation.main} ${args.orderBy}) AS ${table}_rank\n // FROM ${table}\n // ${where_sql}\n // ) AS ${table}\n // WHERE ${table}_rank > ${limit.skip} AND ${table}_rank <= ${limit.take + limit.skip};\n // `\n // }\n // const res = (await FModel.execute(sql)).results\n // fres = fres.concat(res)\n\n\n if (fres.length) {\n const is = args.select.formatable_columns.length\n || Object.keys(args.select.relations || {}).length\n || Object.keys(args.aggregate || {}).length\n\n if (!is) return fres\n\n const nested_freses: { [col: string]: any[] } = {}\n const idsList: { [col: string]: number[] } = {}\n // handle nested relations\n for (let col in args.select.relations) {\n const rel = args.select.relations[col]\n const ids: number[] = idsList[col] || []\n const foreign = rel.foreign\n if (!idsList[col]) {\n for (let r of fres) {\n let id = r[foreign.relation.target]\n if (typeof id === \"number\" && !ids.includes(id)) {\n ids.push(id)\n }\n }\n idsList[col] = ids\n }\n const nested_fres = await this.executeRelation(rel, ids)\n nested_freses[col] = nested_fres\n }\n // handle aggregate\n const agg_reses: any = {}\n if (Object.keys(args.aggregate || {}).length) {\n const agg_results = await this.aggregate(FModel, args.aggregate || {}, fres)\n for (let col in agg_results) {\n agg_reses[col] = agg_results[col]\n }\n }\n\n for (let { chunk } of chunkArray(fres)) {\n for (let row of chunk) {\n // handle formattable columns\n this.formatFormadableColumns(row, args.select.formatable_columns)\n row = this?.transformer ? await this.transformer(row) : row\n // handle aggregate\n if (Object.keys(agg_reses).length) {\n for (let col in agg_reses) {\n const aggres = agg_reses[col]\n if (!row.aggregate) {\n row.aggregate = {}\n }\n\n row.aggregate[col] = aggres.results.find((ar: any) => {\n let is = ar[aggres.foreign.relation.target] === row[aggres.foreign.relation.main]\n if (is) delete ar[aggres.foreign.relation.main]\n return is\n })\n }\n }\n\n // handle nested relations\n if (Object.keys(nested_freses).length) {\n for (let col in nested_freses) {\n const nested_fres = nested_freses[col]\n const rel: any = args.select.relations?.[col]\n if (Foreign.isArray(FModel.schema[col])) {\n row[col] = nested_fres.filter((fr: any) => {\n let is = fr[rel.foreign.relation.main] === row[rel.foreign.relation.target]\n if (is) delete fr[rel.foreign.relation.main]\n return is\n })\n } else {\n row[col] = nested_fres.find((fr: any) => fr[rel.foreign.relation.main] === row[rel.foreign.relation.target]) || null\n }\n }\n }\n }\n }\n }\n\n return fres\n }\n\n private formatFormadableColumns(row: any, columns: string[]) {\n for (let col of columns) {\n try {\n row[col] = JSON.parse(row[col])\n } catch (error) {\n row[col] = row[col]\n }\n }\n }\n\n private async aggregate(model: Model, aggregate: FindArgsAggregate, results: any[]) {\n const xansql = model.xansql\n const agg_results: {\n [column: string]: {\n results: any[],\n foreign: ForeignInfoType\n }\n } = {}\n for (let col in aggregate) {\n if (!(col in model.schema)) {\n throw new XansqlError({\n message: `Column ${col} not found in model ${model.table} for aggregate`,\n model: model.table,\n column: col\n })\n }\n const foreign = Foreign.get(model, col)\n if (!foreign) {\n throw new XansqlError({\n message: `Column ${col} is not a foreign column in ${model.table}, cannot aggregate on it.`,\n model: model.table,\n column: col\n })\n }\n if (!Foreign.isArray(model.schema[col])) {\n throw new XansqlError({\n message: `Column ${col} is not a relation column in ${model.table}, cannot aggregate on it.`,\n model: model.table,\n column: col\n })\n }\n\n const FModel = xansql.getModel(foreign.table)\n let ids: number[] = []\n for (let r of results) {\n let id = r[foreign.relation.target]\n if (typeof id === \"number\" && !ids.includes(id)) {\n ids.push(id)\n }\n }\n if (ids.length === 0) continue;\n const AggExecuter = new AggregateExecuter(FModel, false)\n const aggRes = await AggExecuter.execute({\n where: {\n [foreign.relation.main]: {\n in: ids\n }\n },\n groupBy: [foreign.relation.main],\n select: aggregate[col]\n })\n\n agg_results[col] = {\n results: aggRes,\n foreign\n }\n }\n return agg_results;\n }\n\n}\n\nexport default FindExecuter;"],"names":["SelectArgs","WhereArgs","LimitArgs","OrderByArgs","DistinctArgs","RelationExecuteArgs","ExecuteMeta","chunkNumbers","chunkArray","Foreign","XansqlError","AggregateExecuter"],"mappings":"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"}
@@ -0,0 +1,338 @@
1
+ import Foreign from'../../../core/classes/ForeignInfo.mjs';import ExecuteMeta from'../../../core/ExcuteMeta.mjs';import XansqlError from'../../../core/XansqlError.mjs';import {chunkNumbers,chunkArray}from'../../../utils/chunker.mjs';import RelationExecuteArgs from'../../Args/RelationExcuteArgs.mjs';import WhereArgs from'../../Args/WhereArgs.mjs';import AggregateExecuter from'../Aggregate/index.mjs';import DistinctArgs from'./DistinctArgs.mjs';import LimitArgs from'./LimitArgs.mjs';import OrderByArgs from'./OrderByArgs.mjs';import SelectArgs from'./SelectArgs.mjs';class FindExecuter {
2
+ constructor(model, transformer = null) {
3
+ this.transformer = null;
4
+ this.model = model;
5
+ this.transformer = transformer;
6
+ }
7
+ async execute(args) {
8
+ const xansql = this.model.xansql;
9
+ const model = this.model;
10
+ const Select = new SelectArgs(model, args.select || {});
11
+ const Where = new WhereArgs(model, args.where || {});
12
+ const Limit = new LimitArgs(model, args.limit || {});
13
+ const OrderBy = new OrderByArgs(model, args.orderBy || {});
14
+ const Distinct = new DistinctArgs(model, args.distinct || [], Where, args.orderBy);
15
+ const isRelation = args instanceof RelationExecuteArgs;
16
+ let where_sql = Where.sql;
17
+ if (Distinct.sql) {
18
+ where_sql = where_sql ? `${where_sql} AND ${Distinct.sql}` : `WHERE ${Distinct.sql}`;
19
+ }
20
+ // batch execution with limit and offset
21
+ let results = [];
22
+ if (!Limit.sql) {
23
+ let executeId = undefined;
24
+ if (typeof window !== "undefined") {
25
+ executeId = ExecuteMeta.set({
26
+ model,
27
+ action: "SELECT",
28
+ modelType: isRelation ? "child" : "main",
29
+ args
30
+ });
31
+ }
32
+ const sql = `SELECT ${Select.sql} FROM ${model.table} ${where_sql}${OrderBy.sql}`.trim();
33
+ const executed = await xansql.execute(sql, executeId);
34
+ if (executed === null || executed === void 0 ? void 0 : executed.results) {
35
+ results = results.concat(executed.results);
36
+ }
37
+ }
38
+ else {
39
+ for (let { take, skip } of chunkNumbers(Limit.take)) {
40
+ let executeId = undefined;
41
+ if (typeof window !== "undefined") {
42
+ executeId = ExecuteMeta.set({
43
+ model,
44
+ action: "SELECT",
45
+ modelType: isRelation ? "child" : "main",
46
+ args
47
+ });
48
+ }
49
+ const batchLimitArgs = new LimitArgs(model, { take, skip: Limit.skip + skip });
50
+ const sql = `SELECT ${Select.sql} FROM ${model.table} ${where_sql}${OrderBy.sql}${batchLimitArgs.sql}`.trim();
51
+ const executed = await xansql.execute(sql, executeId);
52
+ if (executed === null || executed === void 0 ? void 0 : executed.results) {
53
+ results = results.concat(executed.results);
54
+ }
55
+ }
56
+ }
57
+ if (results === null || results === void 0 ? void 0 : results.length) {
58
+ const is = Select.formatable_columns.length
59
+ || Object.keys(Select.relations).length
60
+ || Object.keys(args.aggregate || {}).length;
61
+ if (!is)
62
+ return results;
63
+ const freses = {};
64
+ let idsList = {};
65
+ for (let column in Select.relations) {
66
+ const relation = Select.relations[column];
67
+ const ids = idsList[column] || [];
68
+ const foreign = relation.foreign;
69
+ if (!idsList[column]) {
70
+ for (let r of results) {
71
+ let id = r[foreign.relation.target];
72
+ if (typeof id === "number" && !ids.includes(id)) {
73
+ ids.push(id);
74
+ }
75
+ }
76
+ idsList[column] = ids;
77
+ }
78
+ const fres = await this.executeRelation(relation, ids);
79
+ freses[column] = fres;
80
+ }
81
+ const agg_reses = {};
82
+ if (Object.keys(args.aggregate || {}).length) {
83
+ const agg_results = await this.aggregate(model, args.aggregate || {}, results);
84
+ for (let col in agg_results) {
85
+ agg_reses[col] = agg_results[col];
86
+ }
87
+ }
88
+ for (let { chunk } of chunkArray(results)) {
89
+ for (let row of chunk) {
90
+ // handle formattable columns
91
+ this.formatFormadableColumns(row, Select.formatable_columns);
92
+ row = (this === null || this === void 0 ? void 0 : this.transformer) ? await this.transformer(row) : row;
93
+ // handle aggregate
94
+ if (Object.keys(agg_reses).length) {
95
+ for (let col in agg_reses) {
96
+ const aggres = agg_reses[col];
97
+ if (!row.aggregate) {
98
+ row.aggregate = {};
99
+ }
100
+ row.aggregate[col] = aggres.results.find((ar) => {
101
+ let is = ar[aggres.foreign.relation.main] === row[aggres.foreign.relation.target];
102
+ if (is)
103
+ delete ar[aggres.foreign.relation.main];
104
+ return is;
105
+ });
106
+ }
107
+ }
108
+ // handle relations
109
+ if (Object.keys(freses).length) {
110
+ for (let col in freses) {
111
+ const fres = freses[col];
112
+ const relation = Select.relations[col];
113
+ if (Foreign.isArray(model.schema[col])) {
114
+ row[col] = fres.filter((fr) => {
115
+ let is = fr[relation.foreign.relation.main] === row[relation.foreign.relation.target];
116
+ if (is)
117
+ delete fr[relation.foreign.relation.main];
118
+ return is;
119
+ });
120
+ }
121
+ else {
122
+ row[col] = fres.find((fr) => fr[relation.foreign.relation.main] === row[relation.foreign.relation.target]) || null;
123
+ }
124
+ }
125
+ }
126
+ }
127
+ }
128
+ }
129
+ return results;
130
+ }
131
+ async executeRelation(relation, ids) {
132
+ var _a;
133
+ let xansql = this.model.xansql;
134
+ let foreign = relation.foreign;
135
+ const table = foreign.table;
136
+ let FModel = xansql.getModel(table);
137
+ const field = FModel.schema[foreign.column];
138
+ let args = relation.args;
139
+ const chunkedIds = chunkArray(ids, 150);
140
+ let fres = [];
141
+ for (let { chunk } of chunkedIds) {
142
+ let sql = '';
143
+ const limit = args.limit;
144
+ let where_sql = args.where;
145
+ let insql = `${foreign.relation.main} IN (${chunk.join(",")})`;
146
+ where_sql += where_sql ? ` AND ${insql}` : `WHERE ${insql}`;
147
+ if (!Foreign.isSchema(field)) {
148
+ sql = `SELECT ${args.select.sql} FROM ${table} ${where_sql} ${args.orderBy} ${limit.sql}`.trim();
149
+ }
150
+ else {
151
+ if (!limit.sql) {
152
+ sql = `SELECT ${args.select.sql} FROM ${table} ${where_sql} ${args.orderBy}`.trim();
153
+ }
154
+ else {
155
+ sql = `
156
+ SELECT ${args.select.sql} FROM (
157
+ SELECT
158
+ ${args.select.sql},
159
+ ROW_NUMBER() OVER (PARTITION BY ${table}.${foreign.relation.main} ${args.orderBy}) AS ${table}_rank
160
+ FROM ${table}
161
+ ${where_sql}
162
+ ) AS ${table}
163
+ WHERE ${table}_rank > ${limit.skip} AND ${table}_rank <= ${limit.take + limit.skip};
164
+ `;
165
+ }
166
+ }
167
+ let executeId = undefined;
168
+ if (typeof window !== "undefined") {
169
+ executeId = ExecuteMeta.set({
170
+ model: FModel,
171
+ action: "SELECT",
172
+ modelType: "child",
173
+ args
174
+ });
175
+ }
176
+ const res = (await xansql.execute(sql, executeId)).results;
177
+ if (res) {
178
+ fres = fres.concat(res);
179
+ }
180
+ }
181
+ // let insql = `${foreign.relation.main} IN (${ids.join(",")})`
182
+ // where_sql += where_sql ? ` AND ${insql}` : `WHERE ${insql}`
183
+ // if (!Foreign.isSchema(field)) {
184
+ // sql = `SELECT ${args.select.sql} FROM ${table} ${where_sql} ${args.orderBy} ${limit.sql}`.trim()
185
+ // } else {
186
+ // sql = `
187
+ // SELECT ${args.select.sql} FROM (
188
+ // SELECT
189
+ // ${args.select.sql},
190
+ // ROW_NUMBER() OVER (PARTITION BY ${table}.${foreign.relation.main} ${args.orderBy}) AS ${table}_rank
191
+ // FROM ${table}
192
+ // ${where_sql}
193
+ // ) AS ${table}
194
+ // WHERE ${table}_rank > ${limit.skip} AND ${table}_rank <= ${limit.take + limit.skip};
195
+ // `
196
+ // }
197
+ // const res = (await FModel.execute(sql)).results
198
+ // fres = fres.concat(res)
199
+ if (fres.length) {
200
+ const is = args.select.formatable_columns.length
201
+ || Object.keys(args.select.relations || {}).length
202
+ || Object.keys(args.aggregate || {}).length;
203
+ if (!is)
204
+ return fres;
205
+ const nested_freses = {};
206
+ const idsList = {};
207
+ // handle nested relations
208
+ for (let col in args.select.relations) {
209
+ const rel = args.select.relations[col];
210
+ const ids = idsList[col] || [];
211
+ const foreign = rel.foreign;
212
+ if (!idsList[col]) {
213
+ for (let r of fres) {
214
+ let id = r[foreign.relation.target];
215
+ if (typeof id === "number" && !ids.includes(id)) {
216
+ ids.push(id);
217
+ }
218
+ }
219
+ idsList[col] = ids;
220
+ }
221
+ const nested_fres = await this.executeRelation(rel, ids);
222
+ nested_freses[col] = nested_fres;
223
+ }
224
+ // handle aggregate
225
+ const agg_reses = {};
226
+ if (Object.keys(args.aggregate || {}).length) {
227
+ const agg_results = await this.aggregate(FModel, args.aggregate || {}, fres);
228
+ for (let col in agg_results) {
229
+ agg_reses[col] = agg_results[col];
230
+ }
231
+ }
232
+ for (let { chunk } of chunkArray(fres)) {
233
+ for (let row of chunk) {
234
+ // handle formattable columns
235
+ this.formatFormadableColumns(row, args.select.formatable_columns);
236
+ row = (this === null || this === void 0 ? void 0 : this.transformer) ? await this.transformer(row) : row;
237
+ // handle aggregate
238
+ if (Object.keys(agg_reses).length) {
239
+ for (let col in agg_reses) {
240
+ const aggres = agg_reses[col];
241
+ if (!row.aggregate) {
242
+ row.aggregate = {};
243
+ }
244
+ row.aggregate[col] = aggres.results.find((ar) => {
245
+ let is = ar[aggres.foreign.relation.target] === row[aggres.foreign.relation.main];
246
+ if (is)
247
+ delete ar[aggres.foreign.relation.main];
248
+ return is;
249
+ });
250
+ }
251
+ }
252
+ // handle nested relations
253
+ if (Object.keys(nested_freses).length) {
254
+ for (let col in nested_freses) {
255
+ const nested_fres = nested_freses[col];
256
+ const rel = (_a = args.select.relations) === null || _a === void 0 ? void 0 : _a[col];
257
+ if (Foreign.isArray(FModel.schema[col])) {
258
+ row[col] = nested_fres.filter((fr) => {
259
+ let is = fr[rel.foreign.relation.main] === row[rel.foreign.relation.target];
260
+ if (is)
261
+ delete fr[rel.foreign.relation.main];
262
+ return is;
263
+ });
264
+ }
265
+ else {
266
+ row[col] = nested_fres.find((fr) => fr[rel.foreign.relation.main] === row[rel.foreign.relation.target]) || null;
267
+ }
268
+ }
269
+ }
270
+ }
271
+ }
272
+ }
273
+ return fres;
274
+ }
275
+ formatFormadableColumns(row, columns) {
276
+ for (let col of columns) {
277
+ try {
278
+ row[col] = JSON.parse(row[col]);
279
+ }
280
+ catch (error) {
281
+ row[col] = row[col];
282
+ }
283
+ }
284
+ }
285
+ async aggregate(model, aggregate, results) {
286
+ const xansql = model.xansql;
287
+ const agg_results = {};
288
+ for (let col in aggregate) {
289
+ if (!(col in model.schema)) {
290
+ throw new XansqlError({
291
+ message: `Column ${col} not found in model ${model.table} for aggregate`,
292
+ model: model.table,
293
+ column: col
294
+ });
295
+ }
296
+ const foreign = Foreign.get(model, col);
297
+ if (!foreign) {
298
+ throw new XansqlError({
299
+ message: `Column ${col} is not a foreign column in ${model.table}, cannot aggregate on it.`,
300
+ model: model.table,
301
+ column: col
302
+ });
303
+ }
304
+ if (!Foreign.isArray(model.schema[col])) {
305
+ throw new XansqlError({
306
+ message: `Column ${col} is not a relation column in ${model.table}, cannot aggregate on it.`,
307
+ model: model.table,
308
+ column: col
309
+ });
310
+ }
311
+ const FModel = xansql.getModel(foreign.table);
312
+ let ids = [];
313
+ for (let r of results) {
314
+ let id = r[foreign.relation.target];
315
+ if (typeof id === "number" && !ids.includes(id)) {
316
+ ids.push(id);
317
+ }
318
+ }
319
+ if (ids.length === 0)
320
+ continue;
321
+ const AggExecuter = new AggregateExecuter(FModel, false);
322
+ const aggRes = await AggExecuter.execute({
323
+ where: {
324
+ [foreign.relation.main]: {
325
+ in: ids
326
+ }
327
+ },
328
+ groupBy: [foreign.relation.main],
329
+ select: aggregate[col]
330
+ });
331
+ agg_results[col] = {
332
+ results: aggRes,
333
+ foreign
334
+ };
335
+ }
336
+ return agg_results;
337
+ }
338
+ }export{FindExecuter as default};//# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/model/Executer/Find/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport Foreign, { ForeignInfoType } from \"../../../core/classes/ForeignInfo\";\nimport ExecuteMeta from \"../../../core/ExcuteMeta\";\nimport { RowObject } from \"../../../core/type\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { chunkArray, chunkNumbers } from \"../../../utils/chunker\";\nimport RelationExecuteArgs from \"../../Args/RelationExcuteArgs\";\nimport WhereArgs from \"../../Args/WhereArgs\";\nimport { FindArgsAggregate, FindArgsType } from \"../../type\";\nimport AggregateExecuter from \"../Aggregate\";\nimport DistinctArgs from \"./DistinctArgs\";\nimport LimitArgs from \"./LimitArgs\";\nimport OrderByArgs from \"./OrderByArgs\";\nimport SelectArgs, { SelectArgsRelationInfo } from \"./SelectArgs\";\n\nclass FindExecuter {\n model: Model\n transformer: ((row: RowObject) => Promise<RowObject>) | null = null\n constructor(model: Model, transformer: ((row: RowObject) => Promise<RowObject>) | null = null) {\n this.model = model\n this.transformer = transformer\n }\n\n async execute(args: FindArgsType) {\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 Limit = new LimitArgs(model, args.limit || {})\n const OrderBy = new OrderByArgs(model, args.orderBy || {})\n const Distinct = new DistinctArgs(model, args.distinct || [], Where, args.orderBy)\n const isRelation = args instanceof RelationExecuteArgs\n\n let where_sql = Where.sql\n if (Distinct.sql) {\n where_sql = where_sql ? `${where_sql} AND ${Distinct.sql}` : `WHERE ${Distinct.sql}`\n }\n\n // batch execution with limit and offset\n let results: any[] = []\n\n if (!Limit.sql) {\n let executeId = undefined;\n if (typeof window !== \"undefined\") {\n executeId = ExecuteMeta.set({\n model,\n action: \"SELECT\",\n modelType: isRelation ? \"child\" : \"main\",\n args\n });\n }\n const sql = `SELECT ${Select.sql} FROM ${model.table} ${where_sql}${OrderBy.sql}`.trim()\n const executed = await xansql.execute(sql, executeId)\n if (executed?.results) {\n results = results.concat(executed.results)\n }\n } else {\n for (let { take, skip } of chunkNumbers(Limit.take)) {\n let executeId = undefined;\n if (typeof window !== \"undefined\") {\n executeId = ExecuteMeta.set({\n model,\n action: \"SELECT\",\n modelType: isRelation ? \"child\" : \"main\",\n args\n });\n }\n const batchLimitArgs = new LimitArgs(model, { take, skip: Limit.skip + skip })\n const sql = `SELECT ${Select.sql} FROM ${model.table} ${where_sql}${OrderBy.sql}${batchLimitArgs.sql}`.trim()\n const executed = await xansql.execute(sql, executeId)\n if (executed?.results) {\n results = results.concat(executed.results)\n }\n }\n }\n\n if (results?.length) {\n const is = Select.formatable_columns.length\n || Object.keys(Select.relations).length\n || Object.keys(args.aggregate || {}).length\n\n if (!is) return results\n\n const freses: { [col: string]: any[] } = {}\n let idsList: { [col: string]: number[] } = {}\n\n for (let column in Select.relations) {\n const relation = Select.relations[column]\n const ids: number[] = idsList[column] || []\n const foreign = relation.foreign\n if (!idsList[column]) {\n for (let r of results) {\n let id = r[foreign.relation.target]\n if (typeof id === \"number\" && !ids.includes(id)) {\n ids.push(id)\n }\n }\n idsList[column] = ids\n }\n\n const fres = await this.executeRelation(relation, ids)\n freses[column] = fres\n }\n\n const agg_reses: any = {}\n if (Object.keys(args.aggregate || {}).length) {\n const agg_results = await this.aggregate(model, args.aggregate || {}, results)\n for (let col in agg_results) {\n agg_reses[col] = agg_results[col]\n }\n }\n\n for (let { chunk } of chunkArray(results)) {\n for (let row of chunk) {\n // handle formattable columns\n this.formatFormadableColumns(row, Select.formatable_columns)\n row = this?.transformer ? await this.transformer(row) : row\n\n // handle aggregate\n if (Object.keys(agg_reses).length) {\n for (let col in agg_reses) {\n const aggres = agg_reses[col]\n if (!row.aggregate) {\n row.aggregate = {}\n }\n row.aggregate[col] = aggres.results.find((ar: any) => {\n let is = ar[aggres.foreign.relation.main] === row[aggres.foreign.relation.target]\n if (is) delete ar[aggres.foreign.relation.main]\n return is\n })\n }\n }\n\n // handle relations\n if (Object.keys(freses).length) {\n for (let col in freses) {\n const fres = freses[col]\n const relation = Select.relations[col]\n if (Foreign.isArray(model.schema[col])) {\n row[col] = fres.filter((fr: any) => {\n let is = fr[relation.foreign.relation.main] === row[relation.foreign.relation.target]\n if (is) delete fr[relation.foreign.relation.main]\n return is\n })\n } else {\n row[col] = fres.find((fr: any) => fr[relation.foreign.relation.main] === row[relation.foreign.relation.target]) || null\n }\n }\n }\n }\n }\n }\n return results;\n }\n\n\n private async executeRelation(relation: SelectArgsRelationInfo, ids: number[]) {\n let xansql = this.model.xansql\n let foreign = relation.foreign\n\n const table = foreign.table\n let FModel = xansql.getModel(table)\n const field = FModel.schema[foreign.column]\n let args = relation.args\n\n const chunkedIds = chunkArray(ids, 150)\n\n let fres: any[] = []\n\n for (let { chunk } of chunkedIds) {\n let sql = ''\n const limit = args.limit\n let where_sql = args.where\n let insql = `${foreign.relation.main} IN (${chunk.join(\",\")})`\n where_sql += where_sql ? ` AND ${insql}` : `WHERE ${insql}`\n\n if (!Foreign.isSchema(field)) {\n sql = `SELECT ${args.select.sql} FROM ${table} ${where_sql} ${args.orderBy} ${limit.sql}`.trim()\n } else {\n if (!limit.sql) {\n sql = `SELECT ${args.select.sql} FROM ${table} ${where_sql} ${args.orderBy}`.trim()\n } else {\n sql = `\n SELECT ${args.select.sql} FROM (\n SELECT\n ${args.select.sql},\n ROW_NUMBER() OVER (PARTITION BY ${table}.${foreign.relation.main} ${args.orderBy}) AS ${table}_rank\n FROM ${table}\n ${where_sql}\n ) AS ${table}\n WHERE ${table}_rank > ${limit.skip} AND ${table}_rank <= ${limit.take + limit.skip};\n `\n }\n }\n let executeId = undefined;\n if (typeof window !== \"undefined\") {\n executeId = ExecuteMeta.set({\n model: FModel,\n action: \"SELECT\",\n modelType: \"child\",\n args\n });\n }\n const res = (await xansql.execute(sql, executeId)).results\n if (res) {\n fres = fres.concat(res)\n }\n }\n\n // let insql = `${foreign.relation.main} IN (${ids.join(\",\")})`\n // where_sql += where_sql ? ` AND ${insql}` : `WHERE ${insql}`\n\n // if (!Foreign.isSchema(field)) {\n // sql = `SELECT ${args.select.sql} FROM ${table} ${where_sql} ${args.orderBy} ${limit.sql}`.trim()\n // } else {\n // sql = `\n // SELECT ${args.select.sql} FROM (\n // SELECT\n // ${args.select.sql},\n // ROW_NUMBER() OVER (PARTITION BY ${table}.${foreign.relation.main} ${args.orderBy}) AS ${table}_rank\n // FROM ${table}\n // ${where_sql}\n // ) AS ${table}\n // WHERE ${table}_rank > ${limit.skip} AND ${table}_rank <= ${limit.take + limit.skip};\n // `\n // }\n // const res = (await FModel.execute(sql)).results\n // fres = fres.concat(res)\n\n\n if (fres.length) {\n const is = args.select.formatable_columns.length\n || Object.keys(args.select.relations || {}).length\n || Object.keys(args.aggregate || {}).length\n\n if (!is) return fres\n\n const nested_freses: { [col: string]: any[] } = {}\n const idsList: { [col: string]: number[] } = {}\n // handle nested relations\n for (let col in args.select.relations) {\n const rel = args.select.relations[col]\n const ids: number[] = idsList[col] || []\n const foreign = rel.foreign\n if (!idsList[col]) {\n for (let r of fres) {\n let id = r[foreign.relation.target]\n if (typeof id === \"number\" && !ids.includes(id)) {\n ids.push(id)\n }\n }\n idsList[col] = ids\n }\n const nested_fres = await this.executeRelation(rel, ids)\n nested_freses[col] = nested_fres\n }\n // handle aggregate\n const agg_reses: any = {}\n if (Object.keys(args.aggregate || {}).length) {\n const agg_results = await this.aggregate(FModel, args.aggregate || {}, fres)\n for (let col in agg_results) {\n agg_reses[col] = agg_results[col]\n }\n }\n\n for (let { chunk } of chunkArray(fres)) {\n for (let row of chunk) {\n // handle formattable columns\n this.formatFormadableColumns(row, args.select.formatable_columns)\n row = this?.transformer ? await this.transformer(row) : row\n // handle aggregate\n if (Object.keys(agg_reses).length) {\n for (let col in agg_reses) {\n const aggres = agg_reses[col]\n if (!row.aggregate) {\n row.aggregate = {}\n }\n\n row.aggregate[col] = aggres.results.find((ar: any) => {\n let is = ar[aggres.foreign.relation.target] === row[aggres.foreign.relation.main]\n if (is) delete ar[aggres.foreign.relation.main]\n return is\n })\n }\n }\n\n // handle nested relations\n if (Object.keys(nested_freses).length) {\n for (let col in nested_freses) {\n const nested_fres = nested_freses[col]\n const rel: any = args.select.relations?.[col]\n if (Foreign.isArray(FModel.schema[col])) {\n row[col] = nested_fres.filter((fr: any) => {\n let is = fr[rel.foreign.relation.main] === row[rel.foreign.relation.target]\n if (is) delete fr[rel.foreign.relation.main]\n return is\n })\n } else {\n row[col] = nested_fres.find((fr: any) => fr[rel.foreign.relation.main] === row[rel.foreign.relation.target]) || null\n }\n }\n }\n }\n }\n }\n\n return fres\n }\n\n private formatFormadableColumns(row: any, columns: string[]) {\n for (let col of columns) {\n try {\n row[col] = JSON.parse(row[col])\n } catch (error) {\n row[col] = row[col]\n }\n }\n }\n\n private async aggregate(model: Model, aggregate: FindArgsAggregate, results: any[]) {\n const xansql = model.xansql\n const agg_results: {\n [column: string]: {\n results: any[],\n foreign: ForeignInfoType\n }\n } = {}\n for (let col in aggregate) {\n if (!(col in model.schema)) {\n throw new XansqlError({\n message: `Column ${col} not found in model ${model.table} for aggregate`,\n model: model.table,\n column: col\n })\n }\n const foreign = Foreign.get(model, col)\n if (!foreign) {\n throw new XansqlError({\n message: `Column ${col} is not a foreign column in ${model.table}, cannot aggregate on it.`,\n model: model.table,\n column: col\n })\n }\n if (!Foreign.isArray(model.schema[col])) {\n throw new XansqlError({\n message: `Column ${col} is not a relation column in ${model.table}, cannot aggregate on it.`,\n model: model.table,\n column: col\n })\n }\n\n const FModel = xansql.getModel(foreign.table)\n let ids: number[] = []\n for (let r of results) {\n let id = r[foreign.relation.target]\n if (typeof id === \"number\" && !ids.includes(id)) {\n ids.push(id)\n }\n }\n if (ids.length === 0) continue;\n const AggExecuter = new AggregateExecuter(FModel, false)\n const aggRes = await AggExecuter.execute({\n where: {\n [foreign.relation.main]: {\n in: ids\n }\n },\n groupBy: [foreign.relation.main],\n select: aggregate[col]\n })\n\n agg_results[col] = {\n results: aggRes,\n foreign\n }\n }\n return agg_results;\n }\n\n}\n\nexport default FindExecuter;"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var ForeignInfo=require('../../../core/classes/ForeignInfo.js'),XansqlError=require('../../../core/XansqlError.js'),Date$1=require('../../../Types/fields/Date.js'),index=require('../../../utils/index.js'),ValueFormatter=require('../../include/ValueFormatter.js');class UpdateDataArgs {
2
+ constructor(model, data) {
3
+ /**
4
+ * Generate SQL for data
5
+ * For create mode: (col1, col2, col3) VALUES (val1, val2, val3)
6
+ * For update mode: col1 = val1, col2 = val2, col3 = val3
7
+ */
8
+ this.data = {};
9
+ this.files = {};
10
+ /**
11
+ * Get data object
12
+ * format: { col1: val1, col2: val2, col3: val3 }
13
+ */
14
+ this.relations = {};
15
+ this.errors = [];
16
+ for (let column in data) {
17
+ const field = model.schema[column];
18
+ let value = data[column];
19
+ try {
20
+ if (ForeignInfo.default.is(field)) {
21
+ if (ForeignInfo.default.isSchema(field)) {
22
+ if (index.isNumber(value)) {
23
+ this.data[column] = value;
24
+ }
25
+ else {
26
+ throw new XansqlError.default({
27
+ message: `Invalid value for foreign key column ${model.table}.${column}. Expected number (ID), got ${typeof value}`,
28
+ model: model.table,
29
+ column: column
30
+ });
31
+ }
32
+ }
33
+ else {
34
+ // relation operation
35
+ if (!index.isObject(value)) {
36
+ throw new XansqlError.default({
37
+ message: `Invalid value for relation column ${model.table}.${column}. Expected object for relation operations, got ${typeof value}`,
38
+ model: model.table,
39
+ column: column
40
+ });
41
+ }
42
+ if (value.delete && !index.isObject(value.delete.where)) {
43
+ throw new XansqlError.default({
44
+ message: `Invalid value for relation delete operation in column ${model.table}.${column}. 'where' field is required and must be an object.`,
45
+ model: model.table,
46
+ column: column
47
+ });
48
+ }
49
+ if (value.update && (!index.isObject(value.update.where) || !index.isObject(value.update.data))) {
50
+ throw new XansqlError.default({
51
+ message: `Invalid value for relation update operation in column ${model.table}.${column}. 'where' and 'data' fields are required and must be objects.`,
52
+ model: model.table,
53
+ column: column
54
+ });
55
+ }
56
+ if (value.create && (!index.isObject(value.create.data) && !index.isArray(value.create.data))) {
57
+ throw new XansqlError.default({
58
+ message: `Invalid value for relation create operation in column ${model.table}.${column}. 'data' field is required and must be an object or array.`,
59
+ model: model.table,
60
+ column: column
61
+ });
62
+ }
63
+ if (value.upsert && (!index.isObject(value.upsert.where) || !index.isObject(value.upsert.create) || !index.isObject(value.upsert.update))) {
64
+ throw new XansqlError.default({
65
+ message: `Invalid value for relation upsert operation in column ${model.table}.${column}. 'where', 'create', and 'update' fields are required and must be objects.`,
66
+ model: model.table,
67
+ column: column
68
+ });
69
+ }
70
+ const foreign = ForeignInfo.default.get(model, column);
71
+ this.relations[column] = {
72
+ args: value,
73
+ foreign
74
+ };
75
+ }
76
+ }
77
+ else {
78
+ // check is the field is IDField or created_at or updated_at
79
+ if (model.IDColumn === column || field instanceof Date$1.default && (field.meta.update || field.meta.create)) {
80
+ throw new XansqlError.default({
81
+ message: `Cannot set value for ${model.table}.${column}. It is automatically managed.`,
82
+ model: model.table,
83
+ column: column
84
+ });
85
+ }
86
+ if (value instanceof File) {
87
+ this.files[column] = value;
88
+ this.data[column] = "";
89
+ ValueFormatter.default.toSql(model, column, value); // for validation
90
+ }
91
+ else {
92
+ this.data[column] = ValueFormatter.default.toSql(model, column, value);
93
+ }
94
+ }
95
+ }
96
+ catch (error) {
97
+ if (error instanceof XansqlError.default) {
98
+ this.errors.push(error);
99
+ }
100
+ else {
101
+ throw error;
102
+ }
103
+ }
104
+ }
105
+ if (this.errors.length > 0) {
106
+ throw this.errors;
107
+ }
108
+ /**
109
+ * Auto add missing columns with null value for create mode
110
+ * Auto add updated_at column with current timestamp for update mode
111
+ * Skip foreign key columns which are not optional or nullable in create mode
112
+ * Skip ID column in create mode
113
+ * Skip created_at column in update mode
114
+ * Skip updated_at column in create mode
115
+ * Skip columns which are already set in data
116
+ */
117
+ for (let column in model.schema) {
118
+ const field = model.schema[column];
119
+ if (field instanceof Date$1.default && field.meta.update) {
120
+ this.data[column] = ValueFormatter.default.toSql(model, column, new Date());
121
+ }
122
+ }
123
+ }
124
+ }exports.default=UpdateDataArgs;//# sourceMappingURL=UpdateDataArgs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateDataArgs.js","sources":["../../../../src/model/Executer/Update/UpdateDataArgs.ts"],"sourcesContent":["import Model from \"../..\"\nimport Foreign, { ForeignInfoType } from \"../../../core/classes/ForeignInfo\"\nimport XansqlError from \"../../../core/XansqlError\"\nimport XqlDate from \"../../../Types/fields/Date\"\nimport { isArray, isNumber, isObject } from \"../../../utils\"\nimport ValueFormatter from \"../../include/ValueFormatter\"\nimport { DataArgsType, UpdateDataRelationArgs } from \"../../type\"\n\n\ntype DataObject = { [column: string]: any }\ntype RelationObject = {\n [column: string]: {\n args: UpdateDataRelationArgs\n foreign: ForeignInfoType;\n relations?: RelationObject\n }\n}\n\ntype Files = {\n [column: string]: File\n}\n\n\nclass UpdateDataArgs {\n\n /**\n * Generate SQL for data\n * For create mode: (col1, col2, col3) VALUES (val1, val2, val3)\n * For update mode: col1 = val1, col2 = val2, col3 = val3\n */\n readonly data: DataObject = {}\n\n readonly files: Files = {}\n /**\n * Get data object\n * format: { col1: val1, col2: val2, col3: val3 }\n */\n readonly relations: RelationObject = {}\n\n private errors: XansqlError[] = []\n\n constructor(model: Model, data: DataArgsType) {\n\n for (let column in data) {\n const field = model.schema[column]\n let value: any = data[column]\n try {\n\n if (Foreign.is(field)) {\n if (Foreign.isSchema(field)) {\n if (isNumber(value)) {\n this.data[column] = value\n } else {\n throw new XansqlError({\n message: `Invalid value for foreign key column ${model.table}.${column}. Expected number (ID), got ${typeof value}`,\n model: model.table,\n column: column\n });\n }\n } else {\n // relation operation\n if (!isObject(value)) {\n throw new XansqlError({\n message: `Invalid value for relation column ${model.table}.${column}. Expected object for relation operations, got ${typeof value}`,\n model: model.table,\n column: column\n });\n }\n\n if (value.delete && !isObject(value.delete.where)) {\n throw new XansqlError({\n message: `Invalid value for relation delete operation in column ${model.table}.${column}. 'where' field is required and must be an object.`,\n model: model.table,\n column: column\n });\n }\n\n if (value.update && (!isObject(value.update.where) || !isObject(value.update.data))) {\n throw new XansqlError({\n message: `Invalid value for relation update operation in column ${model.table}.${column}. 'where' and 'data' fields are required and must be objects.`,\n model: model.table,\n column: column\n });\n }\n\n if (value.create && (!isObject(value.create.data) && !isArray(value.create.data))) {\n throw new XansqlError({\n message: `Invalid value for relation create operation in column ${model.table}.${column}. 'data' field is required and must be an object or array.`,\n model: model.table,\n column: column\n });\n }\n\n if (value.upsert && (!isObject(value.upsert.where) || !isObject(value.upsert.create) || !isObject(value.upsert.update))) {\n throw new XansqlError({\n message: `Invalid value for relation upsert operation in column ${model.table}.${column}. 'where', 'create', and 'update' fields are required and must be objects.`,\n model: model.table,\n column: column\n });\n }\n\n const foreign = Foreign.get(model, column)\n this.relations[column] = {\n args: value,\n foreign\n }\n }\n } else {\n // check is the field is IDField or created_at or updated_at\n if (model.IDColumn === column || field instanceof XqlDate && (field.meta.update || field.meta.create)) {\n throw new XansqlError({\n message: `Cannot set value for ${model.table}.${column}. It is automatically managed.`,\n model: model.table,\n column: column\n });\n }\n\n if (value instanceof File) {\n this.files[column] = value\n this.data[column] = \"\"\n ValueFormatter.toSql(model, column, value) // for validation\n } else {\n this.data[column] = ValueFormatter.toSql(model, column, value)\n }\n }\n } catch (error) {\n if (error instanceof XansqlError) {\n this.errors.push(error);\n } else {\n throw error\n }\n }\n }\n\n if (this.errors.length > 0) {\n throw this.errors\n }\n\n /**\n * Auto add missing columns with null value for create mode\n * Auto add updated_at column with current timestamp for update mode\n * Skip foreign key columns which are not optional or nullable in create mode\n * Skip ID column in create mode\n * Skip created_at column in update mode\n * Skip updated_at column in create mode\n * Skip columns which are already set in data\n */\n for (let column in model.schema) {\n const field = model.schema[column]\n if (field instanceof XqlDate && field.meta.update) {\n this.data[column] = ValueFormatter.toSql(model, column, new Date())\n }\n }\n\n }\n\n}\n\nexport default UpdateDataArgs"],"names":["Foreign","isNumber","XansqlError","isObject","isArray","XqlDate","ValueFormatter"],"mappings":"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"}