@strapi/database 5.12.1 → 5.12.3

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 (321) hide show
  1. package/dist/connection.js +43 -0
  2. package/dist/connection.js.map +1 -0
  3. package/dist/connection.mjs +41 -0
  4. package/dist/connection.mjs.map +1 -0
  5. package/dist/dialects/dialect.js +54 -0
  6. package/dist/dialects/dialect.js.map +1 -0
  7. package/dist/dialects/dialect.mjs +52 -0
  8. package/dist/dialects/dialect.mjs.map +1 -0
  9. package/dist/dialects/index.js +44 -0
  10. package/dist/dialects/index.js.map +1 -0
  11. package/dist/dialects/index.mjs +42 -0
  12. package/dist/dialects/index.mjs.map +1 -0
  13. package/dist/dialects/mysql/constants.js +8 -0
  14. package/dist/dialects/mysql/constants.js.map +1 -0
  15. package/dist/dialects/mysql/constants.mjs +5 -0
  16. package/dist/dialects/mysql/constants.mjs.map +1 -0
  17. package/dist/dialects/mysql/database-inspector.js +35 -0
  18. package/dist/dialects/mysql/database-inspector.js.map +1 -0
  19. package/dist/dialects/mysql/database-inspector.mjs +33 -0
  20. package/dist/dialects/mysql/database-inspector.mjs.map +1 -0
  21. package/dist/dialects/mysql/index.js +75 -0
  22. package/dist/dialects/mysql/index.js.map +1 -0
  23. package/dist/dialects/mysql/index.mjs +73 -0
  24. package/dist/dialects/mysql/index.mjs.map +1 -0
  25. package/dist/dialects/mysql/schema-inspector.js +297 -0
  26. package/dist/dialects/mysql/schema-inspector.js.map +1 -0
  27. package/dist/dialects/mysql/schema-inspector.mjs +295 -0
  28. package/dist/dialects/mysql/schema-inspector.mjs.map +1 -0
  29. package/dist/dialects/postgresql/index.js +62 -0
  30. package/dist/dialects/postgresql/index.js.map +1 -0
  31. package/dist/dialects/postgresql/index.mjs +60 -0
  32. package/dist/dialects/postgresql/index.mjs.map +1 -0
  33. package/dist/dialects/postgresql/schema-inspector.js +316 -0
  34. package/dist/dialects/postgresql/schema-inspector.js.map +1 -0
  35. package/dist/dialects/postgresql/schema-inspector.mjs +314 -0
  36. package/dist/dialects/postgresql/schema-inspector.mjs.map +1 -0
  37. package/dist/dialects/sqlite/index.js +82 -0
  38. package/dist/dialects/sqlite/index.js.map +1 -0
  39. package/dist/dialects/sqlite/index.mjs +80 -0
  40. package/dist/dialects/sqlite/index.mjs.map +1 -0
  41. package/dist/dialects/sqlite/schema-inspector.js +211 -0
  42. package/dist/dialects/sqlite/schema-inspector.js.map +1 -0
  43. package/dist/dialects/sqlite/schema-inspector.mjs +209 -0
  44. package/dist/dialects/sqlite/schema-inspector.mjs.map +1 -0
  45. package/dist/entity-manager/entity-repository.js +139 -0
  46. package/dist/entity-manager/entity-repository.js.map +1 -0
  47. package/dist/entity-manager/entity-repository.mjs +137 -0
  48. package/dist/entity-manager/entity-repository.mjs.map +1 -0
  49. package/dist/entity-manager/index.js +1186 -0
  50. package/dist/entity-manager/index.js.map +1 -0
  51. package/dist/entity-manager/index.mjs +1184 -0
  52. package/dist/entity-manager/index.mjs.map +1 -0
  53. package/dist/entity-manager/morph-relations.js +73 -0
  54. package/dist/entity-manager/morph-relations.js.map +1 -0
  55. package/dist/entity-manager/morph-relations.mjs +69 -0
  56. package/dist/entity-manager/morph-relations.mjs.map +1 -0
  57. package/dist/entity-manager/regular-relations.js +247 -0
  58. package/dist/entity-manager/regular-relations.js.map +1 -0
  59. package/dist/entity-manager/regular-relations.mjs +242 -0
  60. package/dist/entity-manager/regular-relations.mjs.map +1 -0
  61. package/dist/entity-manager/relations-orderer.js +221 -0
  62. package/dist/entity-manager/relations-orderer.js.map +1 -0
  63. package/dist/entity-manager/relations-orderer.mjs +218 -0
  64. package/dist/entity-manager/relations-orderer.mjs.map +1 -0
  65. package/dist/errors/database.js +13 -0
  66. package/dist/errors/database.js.map +1 -0
  67. package/dist/errors/database.mjs +11 -0
  68. package/dist/errors/database.mjs.map +1 -0
  69. package/dist/errors/index.js +18 -0
  70. package/dist/errors/index.js.map +1 -0
  71. package/dist/errors/index.mjs +7 -0
  72. package/dist/errors/index.mjs.map +1 -0
  73. package/dist/errors/invalid-date.js +13 -0
  74. package/dist/errors/invalid-date.js.map +1 -0
  75. package/dist/errors/invalid-date.mjs +11 -0
  76. package/dist/errors/invalid-date.mjs.map +1 -0
  77. package/dist/errors/invalid-datetime.js +13 -0
  78. package/dist/errors/invalid-datetime.js.map +1 -0
  79. package/dist/errors/invalid-datetime.mjs +11 -0
  80. package/dist/errors/invalid-datetime.mjs.map +1 -0
  81. package/dist/errors/invalid-relation.js +13 -0
  82. package/dist/errors/invalid-relation.js.map +1 -0
  83. package/dist/errors/invalid-relation.mjs +11 -0
  84. package/dist/errors/invalid-relation.mjs.map +1 -0
  85. package/dist/errors/invalid-time.js +13 -0
  86. package/dist/errors/invalid-time.js.map +1 -0
  87. package/dist/errors/invalid-time.mjs +11 -0
  88. package/dist/errors/invalid-time.mjs.map +1 -0
  89. package/dist/errors/not-null.js +17 -0
  90. package/dist/errors/not-null.js.map +1 -0
  91. package/dist/errors/not-null.mjs +15 -0
  92. package/dist/errors/not-null.mjs.map +1 -0
  93. package/dist/fields/biginteger.js +9 -0
  94. package/dist/fields/biginteger.js.map +1 -0
  95. package/dist/fields/biginteger.mjs +7 -0
  96. package/dist/fields/biginteger.mjs.map +1 -0
  97. package/dist/fields/boolean.js +48 -0
  98. package/dist/fields/boolean.js.map +1 -0
  99. package/dist/fields/boolean.mjs +46 -0
  100. package/dist/fields/boolean.mjs.map +1 -0
  101. package/dist/fields/date.js +16 -0
  102. package/dist/fields/date.js.map +1 -0
  103. package/dist/fields/date.mjs +14 -0
  104. package/dist/fields/date.mjs.map +1 -0
  105. package/dist/fields/datetime.js +37 -0
  106. package/dist/fields/datetime.js.map +1 -0
  107. package/dist/fields/datetime.mjs +16 -0
  108. package/dist/fields/datetime.mjs.map +1 -0
  109. package/dist/fields/field.js +16 -0
  110. package/dist/fields/field.js.map +1 -0
  111. package/dist/fields/field.mjs +14 -0
  112. package/dist/fields/field.mjs.map +1 -0
  113. package/dist/fields/index.js +45 -0
  114. package/dist/fields/index.js.map +1 -0
  115. package/dist/fields/index.mjs +43 -0
  116. package/dist/fields/index.mjs.map +1 -0
  117. package/dist/fields/json.js +36 -0
  118. package/dist/fields/json.js.map +1 -0
  119. package/dist/fields/json.mjs +34 -0
  120. package/dist/fields/json.mjs.map +1 -0
  121. package/dist/fields/number.js +20 -0
  122. package/dist/fields/number.js.map +1 -0
  123. package/dist/fields/number.mjs +18 -0
  124. package/dist/fields/number.mjs.map +1 -0
  125. package/dist/fields/shared/parsers.js +91 -0
  126. package/dist/fields/shared/parsers.js.map +1 -0
  127. package/dist/fields/shared/parsers.mjs +68 -0
  128. package/dist/fields/shared/parsers.mjs.map +1 -0
  129. package/dist/fields/string.js +16 -0
  130. package/dist/fields/string.js.map +1 -0
  131. package/dist/fields/string.mjs +14 -0
  132. package/dist/fields/string.mjs.map +1 -0
  133. package/dist/fields/time.js +17 -0
  134. package/dist/fields/time.js.map +1 -0
  135. package/dist/fields/time.mjs +15 -0
  136. package/dist/fields/time.mjs.map +1 -0
  137. package/dist/fields/timestamp.js +37 -0
  138. package/dist/fields/timestamp.js.map +1 -0
  139. package/dist/fields/timestamp.mjs +16 -0
  140. package/dist/fields/timestamp.mjs.map +1 -0
  141. package/dist/index.js +33 -8569
  142. package/dist/index.js.map +1 -1
  143. package/dist/index.mjs +16 -8532
  144. package/dist/index.mjs.map +1 -1
  145. package/dist/lifecycles/index.js +73 -0
  146. package/dist/lifecycles/index.js.map +1 -0
  147. package/dist/lifecycles/index.mjs +71 -0
  148. package/dist/lifecycles/index.mjs.map +1 -0
  149. package/dist/lifecycles/subscribers/index.js +10 -0
  150. package/dist/lifecycles/subscribers/index.js.map +1 -0
  151. package/dist/lifecycles/subscribers/index.mjs +8 -0
  152. package/dist/lifecycles/subscribers/index.mjs.map +1 -0
  153. package/dist/lifecycles/subscribers/models-lifecycles.js +13 -0
  154. package/dist/lifecycles/subscribers/models-lifecycles.js.map +1 -0
  155. package/dist/lifecycles/subscribers/models-lifecycles.mjs +11 -0
  156. package/dist/lifecycles/subscribers/models-lifecycles.mjs.map +1 -0
  157. package/dist/lifecycles/subscribers/timestamps.js +55 -0
  158. package/dist/lifecycles/subscribers/timestamps.js.map +1 -0
  159. package/dist/lifecycles/subscribers/timestamps.mjs +53 -0
  160. package/dist/lifecycles/subscribers/timestamps.mjs.map +1 -0
  161. package/dist/metadata/index.js +24 -0
  162. package/dist/metadata/index.js.map +1 -0
  163. package/dist/metadata/index.mjs +16 -0
  164. package/dist/metadata/index.mjs.map +1 -0
  165. package/dist/metadata/metadata.js +100 -0
  166. package/dist/metadata/metadata.js.map +1 -0
  167. package/dist/metadata/metadata.mjs +98 -0
  168. package/dist/metadata/metadata.mjs.map +1 -0
  169. package/dist/metadata/relations.js +545 -0
  170. package/dist/metadata/relations.js.map +1 -0
  171. package/dist/metadata/relations.mjs +536 -0
  172. package/dist/metadata/relations.mjs.map +1 -0
  173. package/dist/migrations/common.js +8 -0
  174. package/dist/migrations/common.js.map +1 -0
  175. package/dist/migrations/common.mjs +6 -0
  176. package/dist/migrations/common.mjs.map +1 -0
  177. package/dist/migrations/index.js +39 -0
  178. package/dist/migrations/index.js.map +1 -0
  179. package/dist/migrations/index.mjs +37 -0
  180. package/dist/migrations/index.mjs.map +1 -0
  181. package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.js +179 -0
  182. package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.js.map +1 -0
  183. package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.mjs +177 -0
  184. package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.mjs.map +1 -0
  185. package/dist/migrations/internal-migrations/5.0.0-02-document-id.js +125 -0
  186. package/dist/migrations/internal-migrations/5.0.0-02-document-id.js.map +1 -0
  187. package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs +123 -0
  188. package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs.map +1 -0
  189. package/dist/migrations/internal-migrations/5.0.0-03-locale.js +41 -0
  190. package/dist/migrations/internal-migrations/5.0.0-03-locale.js.map +1 -0
  191. package/dist/migrations/internal-migrations/5.0.0-03-locale.mjs +39 -0
  192. package/dist/migrations/internal-migrations/5.0.0-03-locale.mjs.map +1 -0
  193. package/dist/migrations/internal-migrations/5.0.0-04-published-at.js +45 -0
  194. package/dist/migrations/internal-migrations/5.0.0-04-published-at.js.map +1 -0
  195. package/dist/migrations/internal-migrations/5.0.0-04-published-at.mjs +43 -0
  196. package/dist/migrations/internal-migrations/5.0.0-04-published-at.mjs.map +1 -0
  197. package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.js +43 -0
  198. package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.js.map +1 -0
  199. package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.mjs +41 -0
  200. package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.mjs.map +1 -0
  201. package/dist/migrations/internal-migrations/index.js +26 -0
  202. package/dist/migrations/internal-migrations/index.js.map +1 -0
  203. package/dist/migrations/internal-migrations/index.mjs +24 -0
  204. package/dist/migrations/internal-migrations/index.mjs.map +1 -0
  205. package/dist/migrations/internal.js +63 -0
  206. package/dist/migrations/internal.js.map +1 -0
  207. package/dist/migrations/internal.mjs +61 -0
  208. package/dist/migrations/internal.mjs.map +1 -0
  209. package/dist/migrations/logger.js +24 -0
  210. package/dist/migrations/logger.js.map +1 -0
  211. package/dist/migrations/logger.mjs +22 -0
  212. package/dist/migrations/logger.mjs.map +1 -0
  213. package/dist/migrations/storage.js +39 -0
  214. package/dist/migrations/storage.js.map +1 -0
  215. package/dist/migrations/storage.mjs +37 -0
  216. package/dist/migrations/storage.mjs.map +1 -0
  217. package/dist/migrations/users.js +87 -0
  218. package/dist/migrations/users.js.map +1 -0
  219. package/dist/migrations/users.mjs +85 -0
  220. package/dist/migrations/users.mjs.map +1 -0
  221. package/dist/query/helpers/join.js +127 -0
  222. package/dist/query/helpers/join.js.map +1 -0
  223. package/dist/query/helpers/join.mjs +122 -0
  224. package/dist/query/helpers/join.mjs.map +1 -0
  225. package/dist/query/helpers/order-by.js +167 -0
  226. package/dist/query/helpers/order-by.js.map +1 -0
  227. package/dist/query/helpers/order-by.mjs +163 -0
  228. package/dist/query/helpers/order-by.mjs.map +1 -0
  229. package/dist/query/helpers/populate/apply.js +592 -0
  230. package/dist/query/helpers/populate/apply.js.map +1 -0
  231. package/dist/query/helpers/populate/apply.mjs +590 -0
  232. package/dist/query/helpers/populate/apply.mjs.map +1 -0
  233. package/dist/query/helpers/populate/process.js +92 -0
  234. package/dist/query/helpers/populate/process.js.map +1 -0
  235. package/dist/query/helpers/populate/process.mjs +90 -0
  236. package/dist/query/helpers/populate/process.mjs.map +1 -0
  237. package/dist/query/helpers/search.js +67 -0
  238. package/dist/query/helpers/search.js.map +1 -0
  239. package/dist/query/helpers/search.mjs +65 -0
  240. package/dist/query/helpers/search.mjs.map +1 -0
  241. package/dist/query/helpers/streams/readable.js +131 -0
  242. package/dist/query/helpers/streams/readable.js.map +1 -0
  243. package/dist/query/helpers/streams/readable.mjs +129 -0
  244. package/dist/query/helpers/streams/readable.mjs.map +1 -0
  245. package/dist/query/helpers/transform.js +77 -0
  246. package/dist/query/helpers/transform.js.map +1 -0
  247. package/dist/query/helpers/transform.mjs +73 -0
  248. package/dist/query/helpers/transform.mjs.map +1 -0
  249. package/dist/query/helpers/where.js +372 -0
  250. package/dist/query/helpers/where.js.map +1 -0
  251. package/dist/query/helpers/where.mjs +369 -0
  252. package/dist/query/helpers/where.mjs.map +1 -0
  253. package/dist/query/query-builder.js +507 -0
  254. package/dist/query/query-builder.js.map +1 -0
  255. package/dist/query/query-builder.mjs +505 -0
  256. package/dist/query/query-builder.mjs.map +1 -0
  257. package/dist/repairs/index.js +13 -0
  258. package/dist/repairs/index.js.map +1 -0
  259. package/dist/repairs/index.mjs +11 -0
  260. package/dist/repairs/index.mjs.map +1 -0
  261. package/dist/repairs/operations/remove-orphan-morph-types.js +54 -0
  262. package/dist/repairs/operations/remove-orphan-morph-types.js.map +1 -0
  263. package/dist/repairs/operations/remove-orphan-morph-types.mjs +52 -0
  264. package/dist/repairs/operations/remove-orphan-morph-types.mjs.map +1 -0
  265. package/dist/schema/builder.js +354 -0
  266. package/dist/schema/builder.js.map +1 -0
  267. package/dist/schema/builder.mjs +352 -0
  268. package/dist/schema/builder.mjs.map +1 -0
  269. package/dist/schema/diff.js +379 -0
  270. package/dist/schema/diff.js.map +1 -0
  271. package/dist/schema/diff.mjs +377 -0
  272. package/dist/schema/diff.mjs.map +1 -0
  273. package/dist/schema/index.js +93 -0
  274. package/dist/schema/index.js.map +1 -0
  275. package/dist/schema/index.mjs +91 -0
  276. package/dist/schema/index.mjs.map +1 -0
  277. package/dist/schema/schema.js +266 -0
  278. package/dist/schema/schema.js.map +1 -0
  279. package/dist/schema/schema.mjs +264 -0
  280. package/dist/schema/schema.mjs.map +1 -0
  281. package/dist/schema/storage.js +58 -0
  282. package/dist/schema/storage.js.map +1 -0
  283. package/dist/schema/storage.mjs +56 -0
  284. package/dist/schema/storage.mjs.map +1 -0
  285. package/dist/transaction-context.js +65 -0
  286. package/dist/transaction-context.js.map +1 -0
  287. package/dist/transaction-context.mjs +63 -0
  288. package/dist/transaction-context.mjs.map +1 -0
  289. package/dist/utils/async-curry.js +19 -0
  290. package/dist/utils/async-curry.js.map +1 -0
  291. package/dist/utils/async-curry.mjs +17 -0
  292. package/dist/utils/async-curry.mjs.map +1 -0
  293. package/dist/utils/identifiers/hash.js +30 -0
  294. package/dist/utils/identifiers/hash.js.map +1 -0
  295. package/dist/utils/identifiers/hash.mjs +28 -0
  296. package/dist/utils/identifiers/hash.mjs.map +1 -0
  297. package/dist/utils/identifiers/index.js +414 -0
  298. package/dist/utils/identifiers/index.js.map +1 -0
  299. package/dist/utils/identifiers/index.mjs +411 -0
  300. package/dist/utils/identifiers/index.mjs.map +1 -0
  301. package/dist/utils/knex.js +21 -0
  302. package/dist/utils/knex.js.map +1 -0
  303. package/dist/utils/knex.mjs +18 -0
  304. package/dist/utils/knex.mjs.map +1 -0
  305. package/dist/utils/types.js +51 -0
  306. package/dist/utils/types.js.map +1 -0
  307. package/dist/utils/types.mjs +44 -0
  308. package/dist/utils/types.mjs.map +1 -0
  309. package/dist/validations/index.js +12 -0
  310. package/dist/validations/index.js.map +1 -0
  311. package/dist/validations/index.mjs +10 -0
  312. package/dist/validations/index.mjs.map +1 -0
  313. package/dist/validations/relations/bidirectional.js +64 -0
  314. package/dist/validations/relations/bidirectional.js.map +1 -0
  315. package/dist/validations/relations/bidirectional.mjs +62 -0
  316. package/dist/validations/relations/bidirectional.mjs.map +1 -0
  317. package/dist/validations/relations/index.js +13 -0
  318. package/dist/validations/relations/index.js.map +1 -0
  319. package/dist/validations/relations/index.mjs +11 -0
  320. package/dist/validations/relations/index.mjs.map +1 -0
  321. package/package.json +4 -4
@@ -0,0 +1,297 @@
1
+ 'use strict';
2
+
3
+ const SQL_QUERIES = {
4
+ TABLE_LIST: /* sql */ `
5
+ SELECT
6
+ t.table_name as table_name
7
+ FROM information_schema.tables t
8
+ WHERE table_type = 'BASE TABLE'
9
+ AND table_schema = schema();
10
+ `,
11
+ LIST_COLUMNS: /* sql */ `
12
+ SELECT
13
+ c.data_type as data_type,
14
+ c.column_name as column_name,
15
+ c.character_maximum_length as character_maximum_length,
16
+ c.column_default as column_default,
17
+ c.is_nullable as is_nullable,
18
+ c.column_type as column_type,
19
+ c.column_key as column_key
20
+ FROM information_schema.columns c
21
+ WHERE table_schema = database()
22
+ AND table_name = ?;
23
+ `,
24
+ INDEX_LIST: /* sql */ `
25
+ show index from ??;
26
+ `,
27
+ FOREIGN_KEY_LIST: /* sql */ `
28
+ SELECT
29
+ tc.constraint_name as constraint_name
30
+ FROM information_schema.table_constraints tc
31
+ WHERE tc.constraint_type = 'FOREIGN KEY'
32
+ AND tc.table_schema = database()
33
+ AND tc.table_name = ?;
34
+ `,
35
+ FOREIGN_KEY_REFERENCES: /* sql */ `
36
+ SELECT
37
+ kcu.constraint_name as constraint_name,
38
+ kcu.column_name as column_name,
39
+ kcu.referenced_table_name as referenced_table_name,
40
+ kcu.referenced_column_name as referenced_column_name
41
+ FROM information_schema.key_column_usage kcu
42
+ WHERE kcu.constraint_name in (?)
43
+ AND kcu.table_schema = database()
44
+ AND kcu.table_name = ?;
45
+ `,
46
+ FOREIGN_KEY_REFERENTIALS_CONSTRAINTS: /* sql */ `
47
+ SELECT
48
+ rc.constraint_name as constraint_name,
49
+ rc.update_rule as on_update,
50
+ rc.delete_rule as on_delete
51
+ FROM information_schema.referential_constraints AS rc
52
+ WHERE rc.constraint_name in (?)
53
+ AND rc.constraint_schema = database()
54
+ AND rc.table_name = ?;
55
+ `
56
+ };
57
+ const toStrapiType = (column)=>{
58
+ const rootType = column.data_type.toLowerCase().match(/[^(), ]+/)?.[0];
59
+ switch(rootType){
60
+ case 'int':
61
+ {
62
+ if (column.column_key === 'PRI') {
63
+ return {
64
+ type: 'increments',
65
+ args: [
66
+ {
67
+ primary: true,
68
+ primaryKey: true
69
+ }
70
+ ],
71
+ unsigned: false
72
+ };
73
+ }
74
+ return {
75
+ type: 'integer'
76
+ };
77
+ }
78
+ case 'decimal':
79
+ {
80
+ return {
81
+ type: 'decimal',
82
+ args: [
83
+ 10,
84
+ 2
85
+ ]
86
+ };
87
+ }
88
+ case 'double':
89
+ {
90
+ return {
91
+ type: 'double'
92
+ };
93
+ }
94
+ case 'bigint':
95
+ {
96
+ return {
97
+ type: 'bigInteger'
98
+ };
99
+ }
100
+ case 'enum':
101
+ {
102
+ return {
103
+ type: 'string'
104
+ };
105
+ }
106
+ case 'tinyint':
107
+ {
108
+ return {
109
+ type: 'boolean'
110
+ };
111
+ }
112
+ case 'longtext':
113
+ {
114
+ return {
115
+ type: 'text',
116
+ args: [
117
+ 'longtext'
118
+ ]
119
+ };
120
+ }
121
+ case 'varchar':
122
+ {
123
+ return {
124
+ type: 'string',
125
+ args: [
126
+ column.character_maximum_length
127
+ ]
128
+ };
129
+ }
130
+ case 'datetime':
131
+ {
132
+ return {
133
+ type: 'datetime',
134
+ args: [
135
+ {
136
+ useTz: false,
137
+ precision: 6
138
+ }
139
+ ]
140
+ };
141
+ }
142
+ case 'date':
143
+ {
144
+ return {
145
+ type: 'date'
146
+ };
147
+ }
148
+ case 'time':
149
+ {
150
+ return {
151
+ type: 'time',
152
+ args: [
153
+ {
154
+ precision: 3
155
+ }
156
+ ]
157
+ };
158
+ }
159
+ case 'timestamp':
160
+ {
161
+ return {
162
+ type: 'timestamp',
163
+ args: [
164
+ {
165
+ useTz: false,
166
+ precision: 6
167
+ }
168
+ ]
169
+ };
170
+ }
171
+ case 'json':
172
+ {
173
+ return {
174
+ type: 'jsonb'
175
+ };
176
+ }
177
+ default:
178
+ {
179
+ return {
180
+ type: 'specificType',
181
+ args: [
182
+ column.data_type
183
+ ]
184
+ };
185
+ }
186
+ }
187
+ };
188
+ class MysqlSchemaInspector {
189
+ async getSchema() {
190
+ const schema = {
191
+ tables: []
192
+ };
193
+ const tables = await this.getTables();
194
+ schema.tables = await Promise.all(tables.map(async (tableName)=>{
195
+ const columns = await this.getColumns(tableName);
196
+ const indexes = await this.getIndexes(tableName);
197
+ const foreignKeys = await this.getForeignKeys(tableName);
198
+ return {
199
+ name: tableName,
200
+ columns,
201
+ indexes,
202
+ foreignKeys
203
+ };
204
+ }));
205
+ return schema;
206
+ }
207
+ async getTables() {
208
+ const [rows] = await this.db.connection.raw(SQL_QUERIES.TABLE_LIST);
209
+ return rows.map((row)=>row.table_name);
210
+ }
211
+ async getColumns(tableName) {
212
+ const [rows] = await this.db.connection.raw(SQL_QUERIES.LIST_COLUMNS, [
213
+ tableName
214
+ ]);
215
+ return rows.map((row)=>{
216
+ const { type, args = [], ...rest } = toStrapiType(row);
217
+ return {
218
+ type,
219
+ args,
220
+ defaultTo: row.column_default,
221
+ name: row.column_name,
222
+ notNullable: row.is_nullable === 'NO',
223
+ unsigned: row.column_type.endsWith(' unsigned'),
224
+ ...rest
225
+ };
226
+ });
227
+ }
228
+ async getIndexes(tableName) {
229
+ const [rows] = await this.db.connection.raw(SQL_QUERIES.INDEX_LIST, [
230
+ tableName
231
+ ]);
232
+ const ret = {};
233
+ for (const index of rows){
234
+ if (index.Column_name === 'id') {
235
+ continue;
236
+ }
237
+ if (!ret[index.Key_name]) {
238
+ const indexInfo = {
239
+ columns: [
240
+ index.Column_name
241
+ ],
242
+ name: index.Key_name
243
+ };
244
+ if (!index.Non_unique || index.Non_unique === '0') {
245
+ indexInfo.type = 'unique';
246
+ }
247
+ ret[index.Key_name] = indexInfo;
248
+ } else {
249
+ ret[index.Key_name].columns.push(index.Column_name);
250
+ }
251
+ }
252
+ return Object.values(ret);
253
+ }
254
+ async getForeignKeys(tableName) {
255
+ const [rows] = await this.db.connection.raw(SQL_QUERIES.FOREIGN_KEY_LIST, [
256
+ tableName
257
+ ]);
258
+ const ret = {};
259
+ for (const fk of rows){
260
+ ret[fk.constraint_name] = {
261
+ name: fk.constraint_name,
262
+ columns: [],
263
+ referencedColumns: [],
264
+ referencedTable: null,
265
+ onUpdate: null,
266
+ onDelete: null
267
+ };
268
+ }
269
+ const contraintNames = Object.keys(ret);
270
+ if (contraintNames.length > 0) {
271
+ const [fkReferences] = await this.db.connection.raw(SQL_QUERIES.FOREIGN_KEY_REFERENCES, [
272
+ contraintNames,
273
+ tableName
274
+ ]);
275
+ for (const fkReference of fkReferences){
276
+ ret[fkReference.constraint_name].referencedTable = fkReference.referenced_table_name;
277
+ ret[fkReference.constraint_name].columns.push(fkReference.column_name);
278
+ ret[fkReference.constraint_name].referencedColumns.push(fkReference.referenced_column_name);
279
+ }
280
+ const [fkReferentialConstraints] = await this.db.connection.raw(SQL_QUERIES.FOREIGN_KEY_REFERENTIALS_CONSTRAINTS, [
281
+ contraintNames,
282
+ tableName
283
+ ]);
284
+ for (const fkReferentialConstraint of fkReferentialConstraints){
285
+ ret[fkReferentialConstraint.constraint_name].onUpdate = fkReferentialConstraint.on_update.toUpperCase();
286
+ ret[fkReferentialConstraint.constraint_name].onDelete = fkReferentialConstraint.on_delete.toUpperCase();
287
+ }
288
+ }
289
+ return Object.values(ret);
290
+ }
291
+ constructor(db){
292
+ this.db = db;
293
+ }
294
+ }
295
+
296
+ module.exports = MysqlSchemaInspector;
297
+ //# sourceMappingURL=schema-inspector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-inspector.js","sources":["../../../src/dialects/mysql/schema-inspector.ts"],"sourcesContent":["import type { Column, ForeignKey, Index, Schema } from '../../schema/types';\nimport type { SchemaInspector } from '../dialect';\nimport type { Database } from '../..';\n\ninterface RawTable {\n table_name: string;\n}\n\ninterface RawColumn {\n data_type: string;\n column_name: string;\n character_maximum_length: number;\n column_default: string;\n is_nullable: string;\n column_type: string;\n column_key: string;\n}\n\ninterface RawIndex {\n Key_name: string;\n Column_name: string;\n Non_unique: boolean | string;\n}\n\ninterface RawForeignKey {\n constraint_name: string;\n}\n\nconst SQL_QUERIES = {\n TABLE_LIST: /* sql */ `\n SELECT\n t.table_name as table_name\n FROM information_schema.tables t\n WHERE table_type = 'BASE TABLE'\n AND table_schema = schema();\n `,\n LIST_COLUMNS: /* sql */ `\n SELECT\n c.data_type as data_type,\n c.column_name as column_name,\n c.character_maximum_length as character_maximum_length,\n c.column_default as column_default,\n c.is_nullable as is_nullable,\n c.column_type as column_type,\n c.column_key as column_key\n FROM information_schema.columns c\n WHERE table_schema = database()\n AND table_name = ?;\n `,\n INDEX_LIST: /* sql */ `\n show index from ??;\n `,\n FOREIGN_KEY_LIST: /* sql */ `\n SELECT\n tc.constraint_name as constraint_name\n FROM information_schema.table_constraints tc\n WHERE tc.constraint_type = 'FOREIGN KEY'\n AND tc.table_schema = database()\n AND tc.table_name = ?;\n `,\n FOREIGN_KEY_REFERENCES: /* sql */ `\n SELECT\n kcu.constraint_name as constraint_name,\n kcu.column_name as column_name,\n kcu.referenced_table_name as referenced_table_name,\n kcu.referenced_column_name as referenced_column_name\n FROM information_schema.key_column_usage kcu\n WHERE kcu.constraint_name in (?)\n AND kcu.table_schema = database()\n AND kcu.table_name = ?;\n `,\n FOREIGN_KEY_REFERENTIALS_CONSTRAINTS: /* sql */ `\n SELECT\n rc.constraint_name as constraint_name,\n rc.update_rule as on_update,\n rc.delete_rule as on_delete\n FROM information_schema.referential_constraints AS rc\n WHERE rc.constraint_name in (?)\n AND rc.constraint_schema = database()\n AND rc.table_name = ?;\n `,\n};\n\nconst toStrapiType = (column: RawColumn) => {\n const rootType = column.data_type.toLowerCase().match(/[^(), ]+/)?.[0];\n\n switch (rootType) {\n case 'int': {\n if (column.column_key === 'PRI') {\n return { type: 'increments', args: [{ primary: true, primaryKey: true }], unsigned: false };\n }\n\n return { type: 'integer' };\n }\n case 'decimal': {\n return { type: 'decimal', args: [10, 2] };\n }\n case 'double': {\n return { type: 'double' };\n }\n case 'bigint': {\n return { type: 'bigInteger' };\n }\n case 'enum': {\n return { type: 'string' };\n }\n case 'tinyint': {\n return { type: 'boolean' };\n }\n case 'longtext': {\n return { type: 'text', args: ['longtext'] };\n }\n case 'varchar': {\n return { type: 'string', args: [column.character_maximum_length] };\n }\n case 'datetime': {\n return { type: 'datetime', args: [{ useTz: false, precision: 6 }] };\n }\n case 'date': {\n return { type: 'date' };\n }\n case 'time': {\n return { type: 'time', args: [{ precision: 3 }] };\n }\n case 'timestamp': {\n return { type: 'timestamp', args: [{ useTz: false, precision: 6 }] };\n }\n case 'json': {\n return { type: 'jsonb' };\n }\n default: {\n return { type: 'specificType', args: [column.data_type] };\n }\n }\n};\n\nexport default class MysqlSchemaInspector implements SchemaInspector {\n db: Database;\n\n constructor(db: Database) {\n this.db = db;\n }\n\n async getSchema() {\n const schema: Schema = { tables: [] };\n\n const tables = await this.getTables();\n\n schema.tables = await Promise.all(\n tables.map(async (tableName) => {\n const columns = await this.getColumns(tableName);\n const indexes = await this.getIndexes(tableName);\n const foreignKeys = await this.getForeignKeys(tableName);\n\n return {\n name: tableName,\n columns,\n indexes,\n foreignKeys,\n };\n })\n );\n\n return schema;\n }\n\n async getTables(): Promise<string[]> {\n const [rows] = await this.db.connection.raw<[RawTable[]]>(SQL_QUERIES.TABLE_LIST);\n\n return rows.map((row) => row.table_name);\n }\n\n async getColumns(tableName: string): Promise<Column[]> {\n const [rows] = await this.db.connection.raw<[RawColumn[]]>(SQL_QUERIES.LIST_COLUMNS, [\n tableName,\n ]);\n\n return rows.map((row) => {\n const { type, args = [], ...rest } = toStrapiType(row);\n\n return {\n type,\n args,\n defaultTo: row.column_default,\n name: row.column_name,\n notNullable: row.is_nullable === 'NO',\n unsigned: row.column_type.endsWith(' unsigned'),\n ...rest,\n };\n });\n }\n\n async getIndexes(tableName: string): Promise<Index[]> {\n const [rows] = await this.db.connection.raw<[RawIndex[]]>(SQL_QUERIES.INDEX_LIST, [tableName]);\n\n const ret: Record<RawIndex['Key_name'], Index> = {};\n\n for (const index of rows) {\n if (index.Column_name === 'id') {\n continue;\n }\n\n if (!ret[index.Key_name]) {\n const indexInfo: Index = {\n columns: [index.Column_name],\n name: index.Key_name,\n };\n if (!index.Non_unique || index.Non_unique === '0') {\n indexInfo.type = 'unique';\n }\n\n ret[index.Key_name] = indexInfo;\n } else {\n ret[index.Key_name].columns.push(index.Column_name);\n }\n }\n\n return Object.values(ret);\n }\n\n async getForeignKeys(tableName: string): Promise<ForeignKey[]> {\n const [rows] = await this.db.connection.raw<[RawForeignKey[]]>(SQL_QUERIES.FOREIGN_KEY_LIST, [\n tableName,\n ]);\n\n const ret: Record<RawForeignKey['constraint_name'], ForeignKey> = {};\n\n for (const fk of rows) {\n ret[fk.constraint_name] = {\n name: fk.constraint_name,\n columns: [],\n referencedColumns: [],\n referencedTable: null,\n onUpdate: null,\n onDelete: null,\n } as unknown as ForeignKey;\n }\n\n const contraintNames = Object.keys(ret);\n\n if (contraintNames.length > 0) {\n const [fkReferences] = await this.db.connection.raw(SQL_QUERIES.FOREIGN_KEY_REFERENCES, [\n contraintNames,\n tableName,\n ]);\n\n for (const fkReference of fkReferences) {\n ret[fkReference.constraint_name].referencedTable = fkReference.referenced_table_name;\n ret[fkReference.constraint_name].columns.push(fkReference.column_name);\n ret[fkReference.constraint_name].referencedColumns.push(fkReference.referenced_column_name);\n }\n\n const [fkReferentialConstraints] = await this.db.connection.raw(\n SQL_QUERIES.FOREIGN_KEY_REFERENTIALS_CONSTRAINTS,\n [contraintNames, tableName]\n );\n\n for (const fkReferentialConstraint of fkReferentialConstraints) {\n ret[fkReferentialConstraint.constraint_name].onUpdate =\n fkReferentialConstraint.on_update.toUpperCase();\n ret[fkReferentialConstraint.constraint_name].onDelete =\n fkReferentialConstraint.on_delete.toUpperCase();\n }\n }\n\n return Object.values(ret);\n }\n}\n"],"names":["SQL_QUERIES","TABLE_LIST","LIST_COLUMNS","INDEX_LIST","FOREIGN_KEY_LIST","FOREIGN_KEY_REFERENCES","FOREIGN_KEY_REFERENTIALS_CONSTRAINTS","toStrapiType","column","rootType","data_type","toLowerCase","match","column_key","type","args","primary","primaryKey","unsigned","character_maximum_length","useTz","precision","MysqlSchemaInspector","getSchema","schema","tables","getTables","Promise","all","map","tableName","columns","getColumns","indexes","getIndexes","foreignKeys","getForeignKeys","name","rows","db","connection","raw","row","table_name","rest","defaultTo","column_default","column_name","notNullable","is_nullable","column_type","endsWith","ret","index","Column_name","Key_name","indexInfo","Non_unique","push","Object","values","fk","constraint_name","referencedColumns","referencedTable","onUpdate","onDelete","contraintNames","keys","length","fkReferences","fkReference","referenced_table_name","referenced_column_name","fkReferentialConstraints","fkReferentialConstraint","on_update","toUpperCase","on_delete","constructor"],"mappings":"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"}
@@ -0,0 +1,295 @@
1
+ const SQL_QUERIES = {
2
+ TABLE_LIST: /* sql */ `
3
+ SELECT
4
+ t.table_name as table_name
5
+ FROM information_schema.tables t
6
+ WHERE table_type = 'BASE TABLE'
7
+ AND table_schema = schema();
8
+ `,
9
+ LIST_COLUMNS: /* sql */ `
10
+ SELECT
11
+ c.data_type as data_type,
12
+ c.column_name as column_name,
13
+ c.character_maximum_length as character_maximum_length,
14
+ c.column_default as column_default,
15
+ c.is_nullable as is_nullable,
16
+ c.column_type as column_type,
17
+ c.column_key as column_key
18
+ FROM information_schema.columns c
19
+ WHERE table_schema = database()
20
+ AND table_name = ?;
21
+ `,
22
+ INDEX_LIST: /* sql */ `
23
+ show index from ??;
24
+ `,
25
+ FOREIGN_KEY_LIST: /* sql */ `
26
+ SELECT
27
+ tc.constraint_name as constraint_name
28
+ FROM information_schema.table_constraints tc
29
+ WHERE tc.constraint_type = 'FOREIGN KEY'
30
+ AND tc.table_schema = database()
31
+ AND tc.table_name = ?;
32
+ `,
33
+ FOREIGN_KEY_REFERENCES: /* sql */ `
34
+ SELECT
35
+ kcu.constraint_name as constraint_name,
36
+ kcu.column_name as column_name,
37
+ kcu.referenced_table_name as referenced_table_name,
38
+ kcu.referenced_column_name as referenced_column_name
39
+ FROM information_schema.key_column_usage kcu
40
+ WHERE kcu.constraint_name in (?)
41
+ AND kcu.table_schema = database()
42
+ AND kcu.table_name = ?;
43
+ `,
44
+ FOREIGN_KEY_REFERENTIALS_CONSTRAINTS: /* sql */ `
45
+ SELECT
46
+ rc.constraint_name as constraint_name,
47
+ rc.update_rule as on_update,
48
+ rc.delete_rule as on_delete
49
+ FROM information_schema.referential_constraints AS rc
50
+ WHERE rc.constraint_name in (?)
51
+ AND rc.constraint_schema = database()
52
+ AND rc.table_name = ?;
53
+ `
54
+ };
55
+ const toStrapiType = (column)=>{
56
+ const rootType = column.data_type.toLowerCase().match(/[^(), ]+/)?.[0];
57
+ switch(rootType){
58
+ case 'int':
59
+ {
60
+ if (column.column_key === 'PRI') {
61
+ return {
62
+ type: 'increments',
63
+ args: [
64
+ {
65
+ primary: true,
66
+ primaryKey: true
67
+ }
68
+ ],
69
+ unsigned: false
70
+ };
71
+ }
72
+ return {
73
+ type: 'integer'
74
+ };
75
+ }
76
+ case 'decimal':
77
+ {
78
+ return {
79
+ type: 'decimal',
80
+ args: [
81
+ 10,
82
+ 2
83
+ ]
84
+ };
85
+ }
86
+ case 'double':
87
+ {
88
+ return {
89
+ type: 'double'
90
+ };
91
+ }
92
+ case 'bigint':
93
+ {
94
+ return {
95
+ type: 'bigInteger'
96
+ };
97
+ }
98
+ case 'enum':
99
+ {
100
+ return {
101
+ type: 'string'
102
+ };
103
+ }
104
+ case 'tinyint':
105
+ {
106
+ return {
107
+ type: 'boolean'
108
+ };
109
+ }
110
+ case 'longtext':
111
+ {
112
+ return {
113
+ type: 'text',
114
+ args: [
115
+ 'longtext'
116
+ ]
117
+ };
118
+ }
119
+ case 'varchar':
120
+ {
121
+ return {
122
+ type: 'string',
123
+ args: [
124
+ column.character_maximum_length
125
+ ]
126
+ };
127
+ }
128
+ case 'datetime':
129
+ {
130
+ return {
131
+ type: 'datetime',
132
+ args: [
133
+ {
134
+ useTz: false,
135
+ precision: 6
136
+ }
137
+ ]
138
+ };
139
+ }
140
+ case 'date':
141
+ {
142
+ return {
143
+ type: 'date'
144
+ };
145
+ }
146
+ case 'time':
147
+ {
148
+ return {
149
+ type: 'time',
150
+ args: [
151
+ {
152
+ precision: 3
153
+ }
154
+ ]
155
+ };
156
+ }
157
+ case 'timestamp':
158
+ {
159
+ return {
160
+ type: 'timestamp',
161
+ args: [
162
+ {
163
+ useTz: false,
164
+ precision: 6
165
+ }
166
+ ]
167
+ };
168
+ }
169
+ case 'json':
170
+ {
171
+ return {
172
+ type: 'jsonb'
173
+ };
174
+ }
175
+ default:
176
+ {
177
+ return {
178
+ type: 'specificType',
179
+ args: [
180
+ column.data_type
181
+ ]
182
+ };
183
+ }
184
+ }
185
+ };
186
+ class MysqlSchemaInspector {
187
+ async getSchema() {
188
+ const schema = {
189
+ tables: []
190
+ };
191
+ const tables = await this.getTables();
192
+ schema.tables = await Promise.all(tables.map(async (tableName)=>{
193
+ const columns = await this.getColumns(tableName);
194
+ const indexes = await this.getIndexes(tableName);
195
+ const foreignKeys = await this.getForeignKeys(tableName);
196
+ return {
197
+ name: tableName,
198
+ columns,
199
+ indexes,
200
+ foreignKeys
201
+ };
202
+ }));
203
+ return schema;
204
+ }
205
+ async getTables() {
206
+ const [rows] = await this.db.connection.raw(SQL_QUERIES.TABLE_LIST);
207
+ return rows.map((row)=>row.table_name);
208
+ }
209
+ async getColumns(tableName) {
210
+ const [rows] = await this.db.connection.raw(SQL_QUERIES.LIST_COLUMNS, [
211
+ tableName
212
+ ]);
213
+ return rows.map((row)=>{
214
+ const { type, args = [], ...rest } = toStrapiType(row);
215
+ return {
216
+ type,
217
+ args,
218
+ defaultTo: row.column_default,
219
+ name: row.column_name,
220
+ notNullable: row.is_nullable === 'NO',
221
+ unsigned: row.column_type.endsWith(' unsigned'),
222
+ ...rest
223
+ };
224
+ });
225
+ }
226
+ async getIndexes(tableName) {
227
+ const [rows] = await this.db.connection.raw(SQL_QUERIES.INDEX_LIST, [
228
+ tableName
229
+ ]);
230
+ const ret = {};
231
+ for (const index of rows){
232
+ if (index.Column_name === 'id') {
233
+ continue;
234
+ }
235
+ if (!ret[index.Key_name]) {
236
+ const indexInfo = {
237
+ columns: [
238
+ index.Column_name
239
+ ],
240
+ name: index.Key_name
241
+ };
242
+ if (!index.Non_unique || index.Non_unique === '0') {
243
+ indexInfo.type = 'unique';
244
+ }
245
+ ret[index.Key_name] = indexInfo;
246
+ } else {
247
+ ret[index.Key_name].columns.push(index.Column_name);
248
+ }
249
+ }
250
+ return Object.values(ret);
251
+ }
252
+ async getForeignKeys(tableName) {
253
+ const [rows] = await this.db.connection.raw(SQL_QUERIES.FOREIGN_KEY_LIST, [
254
+ tableName
255
+ ]);
256
+ const ret = {};
257
+ for (const fk of rows){
258
+ ret[fk.constraint_name] = {
259
+ name: fk.constraint_name,
260
+ columns: [],
261
+ referencedColumns: [],
262
+ referencedTable: null,
263
+ onUpdate: null,
264
+ onDelete: null
265
+ };
266
+ }
267
+ const contraintNames = Object.keys(ret);
268
+ if (contraintNames.length > 0) {
269
+ const [fkReferences] = await this.db.connection.raw(SQL_QUERIES.FOREIGN_KEY_REFERENCES, [
270
+ contraintNames,
271
+ tableName
272
+ ]);
273
+ for (const fkReference of fkReferences){
274
+ ret[fkReference.constraint_name].referencedTable = fkReference.referenced_table_name;
275
+ ret[fkReference.constraint_name].columns.push(fkReference.column_name);
276
+ ret[fkReference.constraint_name].referencedColumns.push(fkReference.referenced_column_name);
277
+ }
278
+ const [fkReferentialConstraints] = await this.db.connection.raw(SQL_QUERIES.FOREIGN_KEY_REFERENTIALS_CONSTRAINTS, [
279
+ contraintNames,
280
+ tableName
281
+ ]);
282
+ for (const fkReferentialConstraint of fkReferentialConstraints){
283
+ ret[fkReferentialConstraint.constraint_name].onUpdate = fkReferentialConstraint.on_update.toUpperCase();
284
+ ret[fkReferentialConstraint.constraint_name].onDelete = fkReferentialConstraint.on_delete.toUpperCase();
285
+ }
286
+ }
287
+ return Object.values(ret);
288
+ }
289
+ constructor(db){
290
+ this.db = db;
291
+ }
292
+ }
293
+
294
+ export { MysqlSchemaInspector as default };
295
+ //# sourceMappingURL=schema-inspector.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-inspector.mjs","sources":["../../../src/dialects/mysql/schema-inspector.ts"],"sourcesContent":["import type { Column, ForeignKey, Index, Schema } from '../../schema/types';\nimport type { SchemaInspector } from '../dialect';\nimport type { Database } from '../..';\n\ninterface RawTable {\n table_name: string;\n}\n\ninterface RawColumn {\n data_type: string;\n column_name: string;\n character_maximum_length: number;\n column_default: string;\n is_nullable: string;\n column_type: string;\n column_key: string;\n}\n\ninterface RawIndex {\n Key_name: string;\n Column_name: string;\n Non_unique: boolean | string;\n}\n\ninterface RawForeignKey {\n constraint_name: string;\n}\n\nconst SQL_QUERIES = {\n TABLE_LIST: /* sql */ `\n SELECT\n t.table_name as table_name\n FROM information_schema.tables t\n WHERE table_type = 'BASE TABLE'\n AND table_schema = schema();\n `,\n LIST_COLUMNS: /* sql */ `\n SELECT\n c.data_type as data_type,\n c.column_name as column_name,\n c.character_maximum_length as character_maximum_length,\n c.column_default as column_default,\n c.is_nullable as is_nullable,\n c.column_type as column_type,\n c.column_key as column_key\n FROM information_schema.columns c\n WHERE table_schema = database()\n AND table_name = ?;\n `,\n INDEX_LIST: /* sql */ `\n show index from ??;\n `,\n FOREIGN_KEY_LIST: /* sql */ `\n SELECT\n tc.constraint_name as constraint_name\n FROM information_schema.table_constraints tc\n WHERE tc.constraint_type = 'FOREIGN KEY'\n AND tc.table_schema = database()\n AND tc.table_name = ?;\n `,\n FOREIGN_KEY_REFERENCES: /* sql */ `\n SELECT\n kcu.constraint_name as constraint_name,\n kcu.column_name as column_name,\n kcu.referenced_table_name as referenced_table_name,\n kcu.referenced_column_name as referenced_column_name\n FROM information_schema.key_column_usage kcu\n WHERE kcu.constraint_name in (?)\n AND kcu.table_schema = database()\n AND kcu.table_name = ?;\n `,\n FOREIGN_KEY_REFERENTIALS_CONSTRAINTS: /* sql */ `\n SELECT\n rc.constraint_name as constraint_name,\n rc.update_rule as on_update,\n rc.delete_rule as on_delete\n FROM information_schema.referential_constraints AS rc\n WHERE rc.constraint_name in (?)\n AND rc.constraint_schema = database()\n AND rc.table_name = ?;\n `,\n};\n\nconst toStrapiType = (column: RawColumn) => {\n const rootType = column.data_type.toLowerCase().match(/[^(), ]+/)?.[0];\n\n switch (rootType) {\n case 'int': {\n if (column.column_key === 'PRI') {\n return { type: 'increments', args: [{ primary: true, primaryKey: true }], unsigned: false };\n }\n\n return { type: 'integer' };\n }\n case 'decimal': {\n return { type: 'decimal', args: [10, 2] };\n }\n case 'double': {\n return { type: 'double' };\n }\n case 'bigint': {\n return { type: 'bigInteger' };\n }\n case 'enum': {\n return { type: 'string' };\n }\n case 'tinyint': {\n return { type: 'boolean' };\n }\n case 'longtext': {\n return { type: 'text', args: ['longtext'] };\n }\n case 'varchar': {\n return { type: 'string', args: [column.character_maximum_length] };\n }\n case 'datetime': {\n return { type: 'datetime', args: [{ useTz: false, precision: 6 }] };\n }\n case 'date': {\n return { type: 'date' };\n }\n case 'time': {\n return { type: 'time', args: [{ precision: 3 }] };\n }\n case 'timestamp': {\n return { type: 'timestamp', args: [{ useTz: false, precision: 6 }] };\n }\n case 'json': {\n return { type: 'jsonb' };\n }\n default: {\n return { type: 'specificType', args: [column.data_type] };\n }\n }\n};\n\nexport default class MysqlSchemaInspector implements SchemaInspector {\n db: Database;\n\n constructor(db: Database) {\n this.db = db;\n }\n\n async getSchema() {\n const schema: Schema = { tables: [] };\n\n const tables = await this.getTables();\n\n schema.tables = await Promise.all(\n tables.map(async (tableName) => {\n const columns = await this.getColumns(tableName);\n const indexes = await this.getIndexes(tableName);\n const foreignKeys = await this.getForeignKeys(tableName);\n\n return {\n name: tableName,\n columns,\n indexes,\n foreignKeys,\n };\n })\n );\n\n return schema;\n }\n\n async getTables(): Promise<string[]> {\n const [rows] = await this.db.connection.raw<[RawTable[]]>(SQL_QUERIES.TABLE_LIST);\n\n return rows.map((row) => row.table_name);\n }\n\n async getColumns(tableName: string): Promise<Column[]> {\n const [rows] = await this.db.connection.raw<[RawColumn[]]>(SQL_QUERIES.LIST_COLUMNS, [\n tableName,\n ]);\n\n return rows.map((row) => {\n const { type, args = [], ...rest } = toStrapiType(row);\n\n return {\n type,\n args,\n defaultTo: row.column_default,\n name: row.column_name,\n notNullable: row.is_nullable === 'NO',\n unsigned: row.column_type.endsWith(' unsigned'),\n ...rest,\n };\n });\n }\n\n async getIndexes(tableName: string): Promise<Index[]> {\n const [rows] = await this.db.connection.raw<[RawIndex[]]>(SQL_QUERIES.INDEX_LIST, [tableName]);\n\n const ret: Record<RawIndex['Key_name'], Index> = {};\n\n for (const index of rows) {\n if (index.Column_name === 'id') {\n continue;\n }\n\n if (!ret[index.Key_name]) {\n const indexInfo: Index = {\n columns: [index.Column_name],\n name: index.Key_name,\n };\n if (!index.Non_unique || index.Non_unique === '0') {\n indexInfo.type = 'unique';\n }\n\n ret[index.Key_name] = indexInfo;\n } else {\n ret[index.Key_name].columns.push(index.Column_name);\n }\n }\n\n return Object.values(ret);\n }\n\n async getForeignKeys(tableName: string): Promise<ForeignKey[]> {\n const [rows] = await this.db.connection.raw<[RawForeignKey[]]>(SQL_QUERIES.FOREIGN_KEY_LIST, [\n tableName,\n ]);\n\n const ret: Record<RawForeignKey['constraint_name'], ForeignKey> = {};\n\n for (const fk of rows) {\n ret[fk.constraint_name] = {\n name: fk.constraint_name,\n columns: [],\n referencedColumns: [],\n referencedTable: null,\n onUpdate: null,\n onDelete: null,\n } as unknown as ForeignKey;\n }\n\n const contraintNames = Object.keys(ret);\n\n if (contraintNames.length > 0) {\n const [fkReferences] = await this.db.connection.raw(SQL_QUERIES.FOREIGN_KEY_REFERENCES, [\n contraintNames,\n tableName,\n ]);\n\n for (const fkReference of fkReferences) {\n ret[fkReference.constraint_name].referencedTable = fkReference.referenced_table_name;\n ret[fkReference.constraint_name].columns.push(fkReference.column_name);\n ret[fkReference.constraint_name].referencedColumns.push(fkReference.referenced_column_name);\n }\n\n const [fkReferentialConstraints] = await this.db.connection.raw(\n SQL_QUERIES.FOREIGN_KEY_REFERENTIALS_CONSTRAINTS,\n [contraintNames, tableName]\n );\n\n for (const fkReferentialConstraint of fkReferentialConstraints) {\n ret[fkReferentialConstraint.constraint_name].onUpdate =\n fkReferentialConstraint.on_update.toUpperCase();\n ret[fkReferentialConstraint.constraint_name].onDelete =\n fkReferentialConstraint.on_delete.toUpperCase();\n }\n }\n\n return Object.values(ret);\n }\n}\n"],"names":["SQL_QUERIES","TABLE_LIST","LIST_COLUMNS","INDEX_LIST","FOREIGN_KEY_LIST","FOREIGN_KEY_REFERENCES","FOREIGN_KEY_REFERENTIALS_CONSTRAINTS","toStrapiType","column","rootType","data_type","toLowerCase","match","column_key","type","args","primary","primaryKey","unsigned","character_maximum_length","useTz","precision","MysqlSchemaInspector","getSchema","schema","tables","getTables","Promise","all","map","tableName","columns","getColumns","indexes","getIndexes","foreignKeys","getForeignKeys","name","rows","db","connection","raw","row","table_name","rest","defaultTo","column_default","column_name","notNullable","is_nullable","column_type","endsWith","ret","index","Column_name","Key_name","indexInfo","Non_unique","push","Object","values","fk","constraint_name","referencedColumns","referencedTable","onUpdate","onDelete","contraintNames","keys","length","fkReferences","fkReference","referenced_table_name","referenced_column_name","fkReferentialConstraints","fkReferentialConstraint","on_update","toUpperCase","on_delete","constructor"],"mappings":"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"}