kysely 0.24.2 → 0.26.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 (351) hide show
  1. package/README.md +31 -567
  2. package/dist/cjs/dialect/database-introspector.d.ts +1 -1
  3. package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +2 -1
  4. package/dist/cjs/dialect/mysql/mysql-driver.js +5 -1
  5. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +1 -1
  6. package/dist/cjs/dialect/postgres/postgres-introspector.js +1 -1
  7. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -1
  8. package/dist/cjs/driver/database-connection.d.ts +6 -0
  9. package/dist/cjs/driver/driver.d.ts +1 -1
  10. package/dist/cjs/driver/runtime-driver.js +6 -6
  11. package/dist/cjs/dynamic/dynamic.d.ts +1 -1
  12. package/dist/cjs/dynamic/dynamic.js +1 -1
  13. package/dist/cjs/expression/expression-builder.d.ts +263 -109
  14. package/dist/cjs/expression/expression-builder.js +38 -7
  15. package/dist/cjs/expression/expression-wrapper.d.ts +296 -5
  16. package/dist/cjs/expression/expression-wrapper.js +70 -2
  17. package/dist/cjs/helpers/mysql.d.ts +3 -3
  18. package/dist/cjs/helpers/mysql.js +2 -2
  19. package/dist/cjs/helpers/postgres.d.ts +31 -19
  20. package/dist/cjs/helpers/postgres.js +30 -18
  21. package/dist/cjs/index.d.ts +10 -0
  22. package/dist/cjs/index.js +10 -0
  23. package/dist/cjs/kysely.d.ts +42 -15
  24. package/dist/cjs/kysely.js +41 -10
  25. package/dist/cjs/migration/file-migration-provider.js +2 -2
  26. package/dist/cjs/operation-node/aggregate-function-node.d.ts +3 -7
  27. package/dist/cjs/operation-node/aggregate-function-node.js +1 -1
  28. package/dist/cjs/operation-node/alter-column-node.d.ts +3 -5
  29. package/dist/cjs/operation-node/alter-column-node.js +2 -7
  30. package/dist/cjs/operation-node/alter-table-node.d.ts +3 -3
  31. package/dist/cjs/operation-node/alter-table-node.js +1 -2
  32. package/dist/cjs/operation-node/case-node.d.ts +19 -0
  33. package/dist/cjs/operation-node/case-node.js +42 -0
  34. package/dist/cjs/operation-node/column-definition-node.d.ts +1 -1
  35. package/dist/cjs/operation-node/constraint-node.d.ts +1 -1
  36. package/dist/cjs/operation-node/create-index-node.d.ts +4 -3
  37. package/dist/cjs/operation-node/create-index-node.js +6 -0
  38. package/dist/cjs/operation-node/create-schema-node.d.ts +1 -1
  39. package/dist/cjs/operation-node/create-table-node.d.ts +2 -2
  40. package/dist/cjs/operation-node/create-type-node.d.ts +1 -1
  41. package/dist/cjs/operation-node/create-view-node.d.ts +1 -1
  42. package/dist/cjs/operation-node/data-type-node.d.ts +2 -2
  43. package/dist/cjs/operation-node/drop-constraint-node.d.ts +1 -1
  44. package/dist/cjs/operation-node/drop-index-node.d.ts +1 -1
  45. package/dist/cjs/operation-node/drop-schema-node.d.ts +1 -1
  46. package/dist/cjs/operation-node/drop-table-node.d.ts +1 -1
  47. package/dist/cjs/operation-node/drop-type-node.d.ts +1 -1
  48. package/dist/cjs/operation-node/drop-view-node.d.ts +1 -1
  49. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +1 -1
  50. package/dist/cjs/operation-node/generated-node.d.ts +1 -1
  51. package/dist/cjs/operation-node/insert-query-node.d.ts +1 -1
  52. package/dist/cjs/operation-node/join-node.d.ts +1 -2
  53. package/dist/cjs/operation-node/join-node.js +0 -8
  54. package/dist/cjs/operation-node/json-operator-chain-node.d.ts +16 -0
  55. package/dist/cjs/operation-node/json-operator-chain-node.js +25 -0
  56. package/dist/cjs/operation-node/json-path-leg-node.d.ts +14 -0
  57. package/dist/cjs/operation-node/json-path-leg-node.js +19 -0
  58. package/dist/cjs/operation-node/json-path-node.d.ts +16 -0
  59. package/dist/cjs/operation-node/json-path-node.js +25 -0
  60. package/dist/cjs/operation-node/json-reference-node.d.ts +17 -0
  61. package/dist/cjs/operation-node/json-reference-node.js +25 -0
  62. package/dist/cjs/operation-node/on-conflict-node.d.ts +1 -1
  63. package/dist/cjs/operation-node/on-duplicate-key-node.d.ts +1 -1
  64. package/dist/cjs/operation-node/operation-node-transformer.d.ts +12 -0
  65. package/dist/cjs/operation-node/operation-node-transformer.js +53 -3
  66. package/dist/cjs/operation-node/operation-node-visitor.d.ts +12 -0
  67. package/dist/cjs/operation-node/operation-node-visitor.js +6 -0
  68. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  69. package/dist/cjs/operation-node/operator-node.d.ts +13 -9
  70. package/dist/cjs/operation-node/operator-node.js +12 -2
  71. package/dist/cjs/operation-node/query-node.d.ts +9 -10
  72. package/dist/cjs/operation-node/query-node.js +0 -8
  73. package/dist/cjs/operation-node/reference-node.d.ts +2 -2
  74. package/dist/cjs/operation-node/reference-node.js +1 -1
  75. package/dist/cjs/operation-node/references-node.d.ts +1 -1
  76. package/dist/cjs/operation-node/select-modifier-node.d.ts +1 -1
  77. package/dist/cjs/operation-node/select-query-node.d.ts +0 -1
  78. package/dist/cjs/operation-node/select-query-node.js +0 -8
  79. package/dist/cjs/operation-node/selection-node.d.ts +1 -1
  80. package/dist/cjs/operation-node/set-operation-node.d.ts +1 -1
  81. package/dist/cjs/operation-node/simple-reference-expression-node.d.ts +1 -1
  82. package/dist/cjs/operation-node/update-query-node.d.ts +1 -1
  83. package/dist/cjs/operation-node/values-node.d.ts +1 -1
  84. package/dist/cjs/operation-node/when-node.d.ts +14 -0
  85. package/dist/cjs/operation-node/when-node.js +24 -0
  86. package/dist/cjs/operation-node/with-node.d.ts +1 -1
  87. package/dist/cjs/parser/binary-operation-parser.d.ts +9 -11
  88. package/dist/cjs/parser/binary-operation-parser.js +40 -103
  89. package/dist/cjs/parser/coalesce-parser.d.ts +1 -1
  90. package/dist/cjs/parser/data-type-parser.d.ts +1 -1
  91. package/dist/cjs/parser/default-value-parser.d.ts +1 -1
  92. package/dist/cjs/parser/expression-parser.d.ts +6 -5
  93. package/dist/cjs/parser/group-by-parser.d.ts +2 -2
  94. package/dist/cjs/parser/insert-values-parser.d.ts +4 -4
  95. package/dist/cjs/parser/join-parser.d.ts +4 -4
  96. package/dist/cjs/parser/order-by-parser.d.ts +4 -3
  97. package/dist/cjs/parser/order-by-parser.js +5 -1
  98. package/dist/cjs/parser/partition-by-parser.d.ts +2 -2
  99. package/dist/cjs/parser/reference-parser.d.ts +16 -8
  100. package/dist/cjs/parser/reference-parser.js +43 -16
  101. package/dist/cjs/parser/returning-parser.d.ts +2 -2
  102. package/dist/cjs/parser/select-parser.d.ts +9 -9
  103. package/dist/cjs/parser/table-parser.d.ts +14 -13
  104. package/dist/cjs/parser/unary-operation-parser.d.ts +1 -1
  105. package/dist/cjs/parser/update-set-parser.d.ts +3 -3
  106. package/dist/cjs/parser/update-set-parser.js +1 -3
  107. package/dist/cjs/parser/value-parser.d.ts +4 -4
  108. package/dist/cjs/parser/with-parser.d.ts +14 -9
  109. package/dist/cjs/plugin/camel-case/camel-case.d.ts +1 -1
  110. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +42 -0
  111. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +32 -0
  112. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +22 -6
  113. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +5 -38
  114. package/dist/cjs/query-builder/aggregate-function-builder.js +4 -59
  115. package/dist/cjs/query-builder/case-builder.d.ts +111 -0
  116. package/dist/cjs/query-builder/case-builder.js +75 -0
  117. package/dist/cjs/query-builder/delete-query-builder.d.ts +130 -63
  118. package/dist/cjs/query-builder/delete-query-builder.js +42 -59
  119. package/dist/cjs/query-builder/delete-result.d.ts +1 -2
  120. package/dist/cjs/query-builder/delete-result.js +2 -8
  121. package/dist/cjs/query-builder/function-module.d.ts +78 -69
  122. package/dist/cjs/query-builder/function-module.js +12 -16
  123. package/dist/cjs/query-builder/having-interface.d.ts +2 -35
  124. package/dist/cjs/query-builder/insert-query-builder.d.ts +99 -47
  125. package/dist/cjs/query-builder/insert-query-builder.js +57 -26
  126. package/dist/cjs/query-builder/insert-result.d.ts +3 -4
  127. package/dist/cjs/query-builder/insert-result.js +5 -14
  128. package/dist/cjs/query-builder/join-builder.d.ts +2 -35
  129. package/dist/cjs/query-builder/join-builder.js +1 -56
  130. package/dist/cjs/query-builder/json-path-builder.d.ts +212 -0
  131. package/dist/cjs/query-builder/json-path-builder.js +191 -0
  132. package/dist/cjs/query-builder/no-result-error.d.ts +1 -1
  133. package/dist/cjs/query-builder/on-conflict-builder.d.ts +144 -73
  134. package/dist/cjs/query-builder/on-conflict-builder.js +2 -111
  135. package/dist/cjs/query-builder/over-builder.d.ts +2 -2
  136. package/dist/cjs/query-builder/over-builder.js +1 -1
  137. package/dist/cjs/query-builder/returning-interface.d.ts +1 -1
  138. package/dist/cjs/query-builder/select-query-builder.d.ts +184 -138
  139. package/dist/cjs/query-builder/select-query-builder.js +64 -130
  140. package/dist/cjs/query-builder/update-query-builder.d.ts +143 -71
  141. package/dist/cjs/query-builder/update-query-builder.js +47 -60
  142. package/dist/cjs/query-builder/update-result.d.ts +3 -3
  143. package/dist/cjs/query-builder/update-result.js +5 -9
  144. package/dist/cjs/query-builder/where-interface.d.ts +73 -38
  145. package/dist/cjs/query-compiler/compiled-query.d.ts +1 -1
  146. package/dist/cjs/query-compiler/compiled-query.js +2 -2
  147. package/dist/cjs/query-compiler/default-query-compiler.d.ts +12 -0
  148. package/dist/cjs/query-compiler/default-query-compiler.js +67 -5
  149. package/dist/cjs/query-compiler/query-compiler.d.ts +1 -1
  150. package/dist/cjs/query-creator.d.ts +4 -2
  151. package/dist/cjs/schema/alter-column-builder.d.ts +13 -7
  152. package/dist/cjs/schema/alter-column-builder.js +20 -22
  153. package/dist/cjs/schema/alter-table-builder.d.ts +0 -4
  154. package/dist/cjs/schema/alter-table-builder.js +2 -9
  155. package/dist/cjs/schema/column-definition-builder.d.ts +1 -1
  156. package/dist/cjs/schema/column-definition-builder.js +1 -2
  157. package/dist/cjs/schema/create-index-builder.d.ts +49 -7
  158. package/dist/cjs/schema/create-index-builder.js +52 -14
  159. package/dist/cjs/schema/create-table-builder.d.ts +2 -6
  160. package/dist/cjs/schema/create-table-builder.js +0 -6
  161. package/dist/cjs/schema/schema.d.ts +1 -2
  162. package/dist/cjs/schema/schema.js +2 -3
  163. package/dist/cjs/util/column-type.d.ts +21 -16
  164. package/dist/cjs/util/explainable.d.ts +1 -1
  165. package/dist/cjs/util/infer-result.d.ts +2 -2
  166. package/dist/cjs/util/log.d.ts +6 -6
  167. package/dist/cjs/util/log.js +4 -4
  168. package/dist/cjs/util/object-utils.d.ts +2 -1
  169. package/dist/cjs/util/require-all-props.d.ts +1 -1
  170. package/dist/cjs/util/type-utils.d.ts +54 -40
  171. package/dist/esm/dialect/database-introspector.d.ts +1 -1
  172. package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +2 -1
  173. package/dist/esm/dialect/mysql/mysql-driver.js +5 -1
  174. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +1 -1
  175. package/dist/esm/dialect/postgres/postgres-introspector.js +1 -1
  176. package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -1
  177. package/dist/esm/driver/database-connection.d.ts +6 -0
  178. package/dist/esm/driver/driver.d.ts +1 -1
  179. package/dist/esm/driver/runtime-driver.js +6 -6
  180. package/dist/esm/dynamic/dynamic.d.ts +1 -1
  181. package/dist/esm/dynamic/dynamic.js +1 -1
  182. package/dist/esm/expression/expression-builder.d.ts +263 -109
  183. package/dist/esm/expression/expression-builder.js +40 -9
  184. package/dist/esm/expression/expression-wrapper.d.ts +296 -5
  185. package/dist/esm/expression/expression-wrapper.js +67 -1
  186. package/dist/esm/helpers/mysql.d.ts +3 -3
  187. package/dist/esm/helpers/mysql.js +2 -2
  188. package/dist/esm/helpers/postgres.d.ts +31 -19
  189. package/dist/esm/helpers/postgres.js +30 -18
  190. package/dist/esm/index.d.ts +10 -0
  191. package/dist/esm/index.js +10 -0
  192. package/dist/esm/kysely.d.ts +42 -15
  193. package/dist/esm/kysely.js +42 -11
  194. package/dist/esm/operation-node/aggregate-function-node.d.ts +3 -7
  195. package/dist/esm/operation-node/aggregate-function-node.js +1 -1
  196. package/dist/esm/operation-node/alter-column-node.d.ts +3 -5
  197. package/dist/esm/operation-node/alter-column-node.js +2 -7
  198. package/dist/esm/operation-node/alter-table-node.d.ts +3 -3
  199. package/dist/esm/operation-node/alter-table-node.js +1 -2
  200. package/dist/esm/operation-node/case-node.d.ts +19 -0
  201. package/dist/esm/operation-node/case-node.js +40 -0
  202. package/dist/esm/operation-node/column-definition-node.d.ts +1 -1
  203. package/dist/esm/operation-node/constraint-node.d.ts +1 -1
  204. package/dist/esm/operation-node/create-index-node.d.ts +4 -3
  205. package/dist/esm/operation-node/create-index-node.js +6 -0
  206. package/dist/esm/operation-node/create-schema-node.d.ts +1 -1
  207. package/dist/esm/operation-node/create-table-node.d.ts +2 -2
  208. package/dist/esm/operation-node/create-type-node.d.ts +1 -1
  209. package/dist/esm/operation-node/create-view-node.d.ts +1 -1
  210. package/dist/esm/operation-node/data-type-node.d.ts +2 -2
  211. package/dist/esm/operation-node/drop-constraint-node.d.ts +1 -1
  212. package/dist/esm/operation-node/drop-index-node.d.ts +1 -1
  213. package/dist/esm/operation-node/drop-schema-node.d.ts +1 -1
  214. package/dist/esm/operation-node/drop-table-node.d.ts +1 -1
  215. package/dist/esm/operation-node/drop-type-node.d.ts +1 -1
  216. package/dist/esm/operation-node/drop-view-node.d.ts +1 -1
  217. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +1 -1
  218. package/dist/esm/operation-node/generated-node.d.ts +1 -1
  219. package/dist/esm/operation-node/insert-query-node.d.ts +1 -1
  220. package/dist/esm/operation-node/join-node.d.ts +1 -2
  221. package/dist/esm/operation-node/join-node.js +0 -8
  222. package/dist/esm/operation-node/json-operator-chain-node.d.ts +16 -0
  223. package/dist/esm/operation-node/json-operator-chain-node.js +23 -0
  224. package/dist/esm/operation-node/json-path-leg-node.d.ts +14 -0
  225. package/dist/esm/operation-node/json-path-leg-node.js +17 -0
  226. package/dist/esm/operation-node/json-path-node.d.ts +16 -0
  227. package/dist/esm/operation-node/json-path-node.js +23 -0
  228. package/dist/esm/operation-node/json-reference-node.d.ts +17 -0
  229. package/dist/esm/operation-node/json-reference-node.js +23 -0
  230. package/dist/esm/operation-node/on-conflict-node.d.ts +1 -1
  231. package/dist/esm/operation-node/on-duplicate-key-node.d.ts +1 -1
  232. package/dist/esm/operation-node/operation-node-transformer.d.ts +12 -0
  233. package/dist/esm/operation-node/operation-node-transformer.js +53 -3
  234. package/dist/esm/operation-node/operation-node-visitor.d.ts +12 -0
  235. package/dist/esm/operation-node/operation-node-visitor.js +6 -0
  236. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  237. package/dist/esm/operation-node/operator-node.d.ts +13 -9
  238. package/dist/esm/operation-node/operator-node.js +10 -1
  239. package/dist/esm/operation-node/query-node.d.ts +9 -10
  240. package/dist/esm/operation-node/query-node.js +0 -8
  241. package/dist/esm/operation-node/reference-node.d.ts +2 -2
  242. package/dist/esm/operation-node/reference-node.js +1 -1
  243. package/dist/esm/operation-node/references-node.d.ts +1 -1
  244. package/dist/esm/operation-node/select-modifier-node.d.ts +1 -1
  245. package/dist/esm/operation-node/select-query-node.d.ts +0 -1
  246. package/dist/esm/operation-node/select-query-node.js +0 -8
  247. package/dist/esm/operation-node/selection-node.d.ts +1 -1
  248. package/dist/esm/operation-node/set-operation-node.d.ts +1 -1
  249. package/dist/esm/operation-node/simple-reference-expression-node.d.ts +1 -1
  250. package/dist/esm/operation-node/update-query-node.d.ts +1 -1
  251. package/dist/esm/operation-node/values-node.d.ts +1 -1
  252. package/dist/esm/operation-node/when-node.d.ts +14 -0
  253. package/dist/esm/operation-node/when-node.js +22 -0
  254. package/dist/esm/operation-node/with-node.d.ts +1 -1
  255. package/dist/esm/parser/binary-operation-parser.d.ts +9 -11
  256. package/dist/esm/parser/binary-operation-parser.js +38 -99
  257. package/dist/esm/parser/coalesce-parser.d.ts +1 -1
  258. package/dist/esm/parser/data-type-parser.d.ts +1 -1
  259. package/dist/esm/parser/default-value-parser.d.ts +1 -1
  260. package/dist/esm/parser/expression-parser.d.ts +6 -5
  261. package/dist/esm/parser/group-by-parser.d.ts +2 -2
  262. package/dist/esm/parser/insert-values-parser.d.ts +4 -4
  263. package/dist/esm/parser/join-parser.d.ts +4 -4
  264. package/dist/esm/parser/order-by-parser.d.ts +4 -3
  265. package/dist/esm/parser/order-by-parser.js +3 -0
  266. package/dist/esm/parser/partition-by-parser.d.ts +2 -2
  267. package/dist/esm/parser/reference-parser.d.ts +16 -8
  268. package/dist/esm/parser/reference-parser.js +40 -15
  269. package/dist/esm/parser/returning-parser.d.ts +2 -2
  270. package/dist/esm/parser/select-parser.d.ts +9 -9
  271. package/dist/esm/parser/table-parser.d.ts +14 -13
  272. package/dist/esm/parser/unary-operation-parser.d.ts +1 -1
  273. package/dist/esm/parser/update-set-parser.d.ts +3 -3
  274. package/dist/esm/parser/update-set-parser.js +2 -4
  275. package/dist/esm/parser/value-parser.d.ts +4 -4
  276. package/dist/esm/parser/with-parser.d.ts +14 -9
  277. package/dist/esm/plugin/camel-case/camel-case.d.ts +1 -1
  278. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +42 -0
  279. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +29 -0
  280. package/dist/esm/plugin/with-schema/with-schema-transformer.js +22 -6
  281. package/dist/esm/query-builder/aggregate-function-builder.d.ts +5 -38
  282. package/dist/esm/query-builder/aggregate-function-builder.js +5 -60
  283. package/dist/esm/query-builder/case-builder.d.ts +111 -0
  284. package/dist/esm/query-builder/case-builder.js +69 -0
  285. package/dist/esm/query-builder/delete-query-builder.d.ts +130 -63
  286. package/dist/esm/query-builder/delete-query-builder.js +43 -60
  287. package/dist/esm/query-builder/delete-result.d.ts +1 -2
  288. package/dist/esm/query-builder/delete-result.js +2 -8
  289. package/dist/esm/query-builder/function-module.d.ts +78 -69
  290. package/dist/esm/query-builder/function-module.js +13 -17
  291. package/dist/esm/query-builder/having-interface.d.ts +2 -35
  292. package/dist/esm/query-builder/insert-query-builder.d.ts +99 -47
  293. package/dist/esm/query-builder/insert-query-builder.js +57 -26
  294. package/dist/esm/query-builder/insert-result.d.ts +3 -4
  295. package/dist/esm/query-builder/insert-result.js +5 -14
  296. package/dist/esm/query-builder/join-builder.d.ts +2 -35
  297. package/dist/esm/query-builder/join-builder.js +2 -57
  298. package/dist/esm/query-builder/json-path-builder.d.ts +212 -0
  299. package/dist/esm/query-builder/json-path-builder.js +186 -0
  300. package/dist/esm/query-builder/no-result-error.d.ts +1 -1
  301. package/dist/esm/query-builder/on-conflict-builder.d.ts +144 -73
  302. package/dist/esm/query-builder/on-conflict-builder.js +3 -112
  303. package/dist/esm/query-builder/over-builder.d.ts +2 -2
  304. package/dist/esm/query-builder/over-builder.js +1 -1
  305. package/dist/esm/query-builder/returning-interface.d.ts +1 -1
  306. package/dist/esm/query-builder/select-query-builder.d.ts +184 -138
  307. package/dist/esm/query-builder/select-query-builder.js +65 -131
  308. package/dist/esm/query-builder/update-query-builder.d.ts +143 -71
  309. package/dist/esm/query-builder/update-query-builder.js +48 -61
  310. package/dist/esm/query-builder/update-result.d.ts +3 -3
  311. package/dist/esm/query-builder/update-result.js +5 -9
  312. package/dist/esm/query-builder/where-interface.d.ts +73 -38
  313. package/dist/esm/query-compiler/compiled-query.d.ts +1 -1
  314. package/dist/esm/query-compiler/compiled-query.js +2 -2
  315. package/dist/esm/query-compiler/default-query-compiler.d.ts +12 -0
  316. package/dist/esm/query-compiler/default-query-compiler.js +67 -5
  317. package/dist/esm/query-compiler/query-compiler.d.ts +1 -1
  318. package/dist/esm/query-creator.d.ts +4 -2
  319. package/dist/esm/schema/alter-column-builder.d.ts +13 -7
  320. package/dist/esm/schema/alter-column-builder.js +20 -22
  321. package/dist/esm/schema/alter-table-builder.d.ts +0 -4
  322. package/dist/esm/schema/alter-table-builder.js +2 -9
  323. package/dist/esm/schema/column-definition-builder.d.ts +1 -1
  324. package/dist/esm/schema/column-definition-builder.js +1 -2
  325. package/dist/esm/schema/create-index-builder.d.ts +49 -7
  326. package/dist/esm/schema/create-index-builder.js +54 -16
  327. package/dist/esm/schema/create-table-builder.d.ts +2 -6
  328. package/dist/esm/schema/create-table-builder.js +0 -6
  329. package/dist/esm/schema/schema.d.ts +1 -2
  330. package/dist/esm/schema/schema.js +2 -3
  331. package/dist/esm/util/column-type.d.ts +21 -16
  332. package/dist/esm/util/explainable.d.ts +1 -1
  333. package/dist/esm/util/infer-result.d.ts +2 -2
  334. package/dist/esm/util/log.d.ts +6 -6
  335. package/dist/esm/util/log.js +4 -4
  336. package/dist/esm/util/object-utils.d.ts +2 -1
  337. package/dist/esm/util/require-all-props.d.ts +1 -1
  338. package/dist/esm/util/type-utils.d.ts +54 -40
  339. package/package.json +25 -23
  340. package/dist/cjs/query-builder/deprecated-having-expression-builder.d.ts +0 -62
  341. package/dist/cjs/query-builder/deprecated-having-expression-builder.js +0 -2
  342. package/dist/cjs/query-builder/deprecated-on-expression-builder.d.ts +0 -62
  343. package/dist/cjs/query-builder/deprecated-on-expression-builder.js +0 -2
  344. package/dist/cjs/query-builder/deprecated-where-expression-builder.d.ts +0 -62
  345. package/dist/cjs/query-builder/deprecated-where-expression-builder.js +0 -2
  346. package/dist/esm/query-builder/deprecated-having-expression-builder.d.ts +0 -62
  347. package/dist/esm/query-builder/deprecated-having-expression-builder.js +0 -2
  348. package/dist/esm/query-builder/deprecated-on-expression-builder.d.ts +0 -62
  349. package/dist/esm/query-builder/deprecated-on-expression-builder.js +0 -2
  350. package/dist/esm/query-builder/deprecated-where-expression-builder.d.ts +0 -62
  351. package/dist/esm/query-builder/deprecated-where-expression-builder.js +0 -2
package/README.md CHANGED
@@ -1,13 +1,20 @@
1
1
  [![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-direct.svg)](https://stand-with-ukraine.pp.ua)
2
2
 
3
- [![Discord](https://img.shields.io/discord/890118421587578920)](https://discord.gg/xyBJ3GwvAm)
3
+ [![Discord](https://img.shields.io/discord/890118421587578920?logo=discord&style=flat)](https://discord.gg/xyBJ3GwvAm)
4
4
  [![Tests](https://github.com/koskimas/kysely/actions/workflows/test.yml/badge.svg)](https://github.com/koskimas/kysely)
5
+ [![License](https://img.shields.io/github/license/kysely-org/kysely?style=flat)](https://github.com/kysely-org/kysely/blob/master/LICENSE)
6
+ [![Issues](https://img.shields.io/github/issues-closed/kysely-org/kysely?logo=github)](https://github.com/kysely-org/kysely/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc)
7
+ [![Pull Requests](https://img.shields.io/github/issues-pr-closed/kysely-org/kysely?label=PRs&logo=github&style=flat)](https://github.com/kysely-org/kysely/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc)
8
+ [![Vulnerabilities](https://img.shields.io/snyk/vulnerabilities/github/kysely-org/kysely?style=flat&logo=snyk)](https://snyk.io/advisor/npm-package/kysely)
9
+ [![Downloads](https://img.shields.io/npm/dw/kysely?logo=npm)](https://www.npmjs.com/package/kysely)
10
+ [![Bundle Size](https://img.shields.io/bundlephobia/minzip/kysely?label=size&logo=npm)](https://bundlephobia.com/package/kysely)
11
+ [![Social](https://img.shields.io/twitter/follow/kysely_?style=social)](https://twitter.com/kysely_)
5
12
 
6
- # [Kysely](https://kysely-org.github.io/kysely/index.html)
13
+ # [Kysely](https://kysely.dev)
7
14
 
8
- Kysely (pronounce “Key-Seh-Lee”) is a type-safe and autocompletion-friendly typescript SQL query builder. Inspired by
9
- [knex](http://knexjs.org/). Mainly developed for [node.js](https://nodejs.org/en/) but also runs on [deno](https://deno.land/)
10
- and in the browser.
15
+ Kysely (pronounce “Key-Seh-Lee”) is a type-safe and autocompletion-friendly typescript SQL query builder.
16
+ Inspired by [knex](http://knexjs.org/). Mainly developed for [node.js](https://nodejs.org/en/) but also
17
+ runs on all other javascript environments like [deno](https://deno.land/).
11
18
 
12
19
  ![](https://github.com/koskimas/kysely/blob/master/assets/demo.gif)
13
20
 
@@ -24,573 +31,30 @@ Of course there are cases where things cannot be typed at compile time, and Kyse
24
31
  hatches for these situations. See the [sql template tag](https://kysely-org.github.io/kysely/interfaces/Sql.html)
25
32
  and the [DynamicModule](https://kysely-org.github.io/kysely/classes/DynamicModule.html#ref) for more info.
26
33
 
27
- All API documentation is written in the typing files and you can simply `cmd-click` on the module, class
28
- or method you're using to see it. The same documentation is also hosted [here](https://github.com/koskimas/kysely).
34
+ All API documentation is written in the typing files and you can simply hover over the module, class
35
+ or method you're using to see it in your IDE. The same documentation is also hosted [here](https://github.com/koskimas/kysely).
29
36
 
30
37
  If you start using Kysely and can't find something you'd want to use, please open an issue or join our
31
38
  [discord server](https://discord.gg/xyBJ3GwvAm).
32
39
 
33
- You can find a more thorough introduction [here](https://www.jakso.me/blog/kysely-a-type-safe-sql-query-builder-for-typescript).
40
+ # Getting started
34
41
 
35
- # Table of contents
42
+ Please visit our documentation site [kysely.dev](https://kysely.dev) to get started. We also have a comprehensive
43
+ API documentation hosted [here](https://kysely-org.github.io/kysely/) but you can access the same
44
+ documentation in your IDE by hovering over a class/method/property/whatever.
36
45
 
37
- - [Installation](#installation)
38
- - [3rd party dialects](#3rd-party-dialects)
39
- - [Minimal example](#minimal-example)
40
- - [Playground](#playground)
41
- - [Generating types](#generating-types)
42
- - [Query examples](#query-examples)
43
- - [Select queries](#select-queries)
44
- - [Stream select query results](#stream-select-query-results)
45
- - [Update queries](#update-queries)
46
- - [Insert queries](#insert-queries)
47
- - [Delete queries](#delete-queries)
48
- - [Recipes](#recipes)
49
- - [Migrations](#migrations)
50
- - [PostgreSQL migration example](#postgresql-migration-example)
51
- - [MySQL migration example](#mysql-migration-example)
52
- - [Deno](#deno)
53
- - [Browser](#browser)
54
- - [Why not just contribute to knex](#why-not-just-contribute-to-knex)
46
+ # Contributors
55
47
 
56
- # Installation
48
+ <p align="center">
49
+ <a href="https://github.com/kysely-org/kysely/graphs/contributors">
50
+ <img src="https://contrib.rocks/image?repo=kysely-org/kysely" />
51
+ </a>
52
+ </br>
53
+ <span>Want to contribute? Check out our <a href="./CONTRIBUTING.md" >contribution guidelines</a>.</span>
54
+ </p>
57
55
 
58
- Kysely currently works on PostgreSQL, MySQL and SQLite. You can install it using:
59
-
60
- ```
61
- # PostgreSQL
62
- npm install kysely pg
63
-
64
- # MySQL
65
- npm install kysely mysql2
66
-
67
- # SQLite
68
- npm install kysely better-sqlite3
69
- ```
70
-
71
- More dialects will be added soon. Kysely also has a simple interface
72
- for [3rd party dialects](https://kysely-org.github.io/kysely/interfaces/Dialect.html).
73
-
74
- ### 3rd party dialects
75
-
76
- - [AWS Data API](https://github.com/serverless-stack/kysely-data-api)
77
- - [PlanetScale Serverless Driver](https://github.com/depot/kysely-planetscale)
78
- - [SingleStore Data API](https://github.com/igalklebanov/kysely-singlestore)
79
- - [D1](https://github.com/aidenwallis/kysely-d1)
80
- - [SurrealDB](https://github.com/igalklebanov/kysely-surrealdb)
81
- - [sqld](https://github.com/libsql/kysely-libsql)
82
- - [Neon](https://github.com/seveibar/kysely-neon)
83
- - [AWS S3 Select](https://github.com/igalklebanov/kysely-s3-select)
84
-
85
- # Minimal example
86
-
87
- All you need to do is define an interface for each table in the database and pass those
88
- interfaces to the `Kysely` constructor:
89
-
90
- ```ts
91
- import { Pool } from 'pg'
92
- import {
93
- Kysely,
94
- PostgresDialect,
95
- Generated,
96
- ColumnType,
97
- Selectable,
98
- Insertable,
99
- Updateable,
100
- } from 'kysely'
101
-
102
- interface PersonTable {
103
- // Columns that are generated by the database should be marked
104
- // using the `Generated` type. This way they are automatically
105
- // made optional in inserts and updates.
106
- id: Generated<number>
107
-
108
- first_name: string
109
- gender: 'male' | 'female' | 'other'
110
-
111
- // If the column is nullable in the database, make its type nullable.
112
- // Don't use optional properties. Optionality is always determined
113
- // automatically by Kysely.
114
- last_name: string | null
115
-
116
- // You can specify a different type for each operation (select, insert and
117
- // update) using the `ColumnType<SelectType, InsertType, UpdateType>`
118
- // wrapper. Here we define a column `modified_at` that is selected as
119
- // a `Date`, can optionally be provided as a `string` in inserts and
120
- // can never be updated:
121
- modified_at: ColumnType<Date, string | undefined, never>
122
- }
123
-
124
- interface PetTable {
125
- id: Generated<number>
126
- name: string
127
- owner_id: number
128
- species: 'dog' | 'cat'
129
- }
130
-
131
- interface MovieTable {
132
- id: Generated<string>
133
- stars: number
134
- }
135
-
136
- // Keys of this interface are table names.
137
- interface Database {
138
- person: PersonTable
139
- pet: PetTable
140
- movie: MovieTable
141
- }
142
-
143
- // You'd create one of these when you start your app.
144
- const db = new Kysely<Database>({
145
- // Use MysqlDialect for MySQL and SqliteDialect for SQLite.
146
- dialect: new PostgresDialect({
147
- pool: new Pool({
148
- host: 'localhost',
149
- database: 'kysely_test'
150
- })
151
- })
152
- })
153
-
154
- async function demo() {
155
- const { id } = await db
156
- .insertInto('person')
157
- .values({ first_name: 'Jennifer', gender: 'female' })
158
- .returning('id')
159
- .executeTakeFirstOrThrow()
160
-
161
- await db
162
- .insertInto('pet')
163
- .values({ name: 'Catto', species: 'cat', owner_id: id })
164
- .execute()
165
-
166
- const person = await db
167
- .selectFrom('person')
168
- .innerJoin('pet', 'pet.owner_id', 'person.id')
169
- .select(['first_name', 'pet.name as pet_name'])
170
- .where('person.id', '=', id)
171
- .executeTakeFirst()
172
-
173
- if (person) {
174
- person.pet_name
175
- }
176
- }
177
- ```
178
-
179
- ```ts
180
- // You can extract the select, insert and update interfaces like this
181
- // if you want (you don't need to):
182
- type Person = Selectable<PersonTable>
183
- type InsertablePerson = Insertable<PersonTable>
184
- type UpdateablePerson = Updateable<PersonTable>
185
- ```
186
-
187
- # Playground
188
-
189
- [@wirekang](https://github.com/wirekang) has created a [playground for Kysely](https://wirekang.github.io/kysely-playground/?p=f&i=-NLp3n_P5fyeQKMQda8n). You can use to quickly test stuff out and for creating code examples for your issues, PRs and discord messages.
190
-
191
- # Generating types
192
-
193
- To work with Kysely, you're required to provide a database schema type definition to the Kysely constructor.
194
-
195
- In many cases, defining your database schema definitions manually is good enough.
196
-
197
- However, when building production applications, its best to stay aligned with the
198
- database schema, by automatically generating the database schema type definitions.
199
-
200
- There are several ways to do this using 3rd party libraries:
201
-
202
- - [kysely-codegen](https://github.com/RobinBlomberg/kysely-codegen) - This library
203
- generates Kysely database schema type definitions by connecting to and introspecting
204
- your database. This library works with all built-in dialects.
205
-
206
- - [prisma-kysely](https://github.com/valtyr/prisma-kysely) - This library generates
207
- Kysely database schema type definitions from your existing Prisma schemas.
208
-
209
- # Query examples
210
-
211
- ## Select queries
212
-
213
- You can find examples of select queries in the documentation of the
214
- [select method](https://kysely-org.github.io/kysely/classes/SelectQueryBuilder.html#select) and
215
- the [where method](https://kysely-org.github.io/kysely/classes/SelectQueryBuilder.html#where)
216
- among other places.
217
-
218
- ### Stream select query results
219
-
220
- *Currently only supported by `postgres` and `mysql` dialects.*
221
-
222
- ```ts
223
- import { Pool } from 'pg'
224
- // or `import * as Cursor from 'pg-cursor'` depending on your tsconfig
225
- import Cursor from 'pg-cursor'
226
- import { Kysely, PostgresDialect } from 'kysely'
227
-
228
- const db = new Kysely<Database>({
229
- // PostgresDialect requires the Cursor dependency
230
- dialect: new PostgresDialect({
231
- pool: new Pool({
232
- host: 'localhost',
233
- database: 'kysely_test'
234
- }),
235
- cursor: Cursor
236
- }),
237
- // MysqlDialect doesn't require any special configuration
238
- })
239
-
240
- async function demo() {
241
- for await (const adult of db.selectFrom('person')
242
- .selectAll()
243
- .where('age', '>', 18)
244
- .stream()
245
- ) {
246
- console.log(`Hello ${adult.first_name}!`)
247
-
248
- if (adult.first_name === 'John') {
249
- // After this line the db connection is released and no more
250
- // rows are streamed from the database to the client
251
- break;
252
- }
253
- }
254
- }
255
- ```
256
-
257
- ## Update queries
258
-
259
- See the [set method](https://kysely-org.github.io/kysely/classes/UpdateQueryBuilder.html#set) and the
260
- [updateTable method](https://kysely-org.github.io/kysely/classes/Kysely.html#updateTable)
261
- documentation.
262
-
263
- ## Insert queries
264
-
265
- See the [values method](https://kysely-org.github.io/kysely/classes/InsertQueryBuilder.html#values) and the
266
- [insertInto method](https://kysely-org.github.io/kysely/classes/Kysely.html#insertInto)
267
- documentation.
268
-
269
- ## Delete queries
270
-
271
- See the [deleteFrom method](https://kysely-org.github.io/kysely/classes/Kysely.html#deleteFrom)
272
- documentation.
273
-
274
- # Recipes
275
-
276
- The [recipes](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/) folder contains a bunch of small tutorials
277
- or "recipes" for common use cases.
278
-
279
- * [Expressions](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/expressions.md)
280
- * [Conditional selects](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/conditional-selects.md)
281
- * [Dealing with the `Type instantiation is excessively deep and possibly infinite` error](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/excessively-deep-types.md)
282
- * [Deduplicate joins](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/deduplicate-joins.md)
283
- * [Extending kysely](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/extending-kysely.md)
284
- * [Introspecting relation metadata](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/introspecting-relation-metadata.md)
285
- * [Raw SQL](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/raw-sql.md)
286
- * [Relations](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/relations.md)
287
- * [Schemas](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/schemas.md)
288
- * [Splitting build, compile and execute code](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/splitting-build-compile-and-execute-code.md)
289
-
290
- # Migrations
291
-
292
- Migration files should look like this:
293
-
294
- ```ts
295
- import { Kysely } from 'kysely'
296
-
297
- export async function up(db: Kysely<any>): Promise<void> {
298
- // Migration code
299
- }
300
-
301
- export async function down(db: Kysely<any>): Promise<void> {
302
- // Migration code
303
- }
304
- ```
305
-
306
- The `up` function is called when you update your database schema to the next version and `down`
307
- when you go back to previous version. The only argument for the functions is an instance of
308
- `Kysely<any>`. It's important to use `Kysely<any>` and not `Kysely<YourDatabase>`.
309
-
310
- Migrations should never depend on the current code of your app because they need to work even when the app
311
- changes. Migrations need to be "frozen in time".
312
-
313
- The migrations can use the [Kysely.schema](https://kysely-org.github.io/kysely/classes/SchemaModule.html)
314
- module to modify the schema. Migrations can also run normal queries to modify data.
315
-
316
- Execution order of the migrations is the alpabetical order of their names. An excellent way to name your
317
- migrations is to prefix them with an ISO 8601 date string. A date prefix works well in large teams
318
- where multiple team members may add migrations at the same time in parallel commits without knowing
319
- about the other migrations.
320
-
321
- You don't need to store your migrations as separate files if you don't want to. You can easily
322
- implement your own [MigrationProvider](https://kysely-org.github.io/kysely/interfaces/MigrationProvider.html)
323
- and give it to the [Migrator](https://kysely-org.github.io/kysely/classes/Migrator.html) class
324
- when you instantiate one.
325
-
326
- ### PostgreSQL migration example
327
-
328
- ```ts
329
- import { Kysely, sql } from 'kysely'
330
-
331
- export async function up(db: Kysely<any>): Promise<void> {
332
- await db.schema
333
- .createTable('person')
334
- .addColumn('id', 'serial', (col) => col.primaryKey())
335
- .addColumn('first_name', 'varchar', (col) => col.notNull())
336
- .addColumn('last_name', 'varchar')
337
- .addColumn('gender', 'varchar(50)', (col) => col.notNull())
338
- .addColumn('created_at', 'timestamp', (col) => col.defaultTo(sql`now()`).notNull())
339
- .execute()
340
-
341
- await db.schema
342
- .createTable('pet')
343
- .addColumn('id', 'serial', (col) => col.primaryKey())
344
- .addColumn('name', 'varchar', (col) => col.notNull().unique())
345
- .addColumn('owner_id', 'integer', (col) =>
346
- col.references('person.id').onDelete('cascade').notNull()
347
- )
348
- .addColumn('species', 'varchar', (col) => col.notNull())
349
- .execute()
350
-
351
- await db.schema
352
- .createIndex('pet_owner_id_index')
353
- .on('pet')
354
- .column('owner_id')
355
- .execute()
356
- }
357
-
358
- export async function down(db: Kysely<any>): Promise<void> {
359
- await db.schema.dropTable('pet').execute()
360
- await db.schema.dropTable('person').execute()
361
- }
362
- ```
363
-
364
- ### MySQL migration example
365
-
366
- ```ts
367
- import { Kysely } from 'kysely'
368
-
369
- export async function up(db: Kysely<any>): Promise<void> {
370
- await db.schema
371
- .createTable('person')
372
- .addColumn('id', 'integer', (col) => col.autoIncrement().primaryKey())
373
- .addColumn('first_name', 'varchar(255)', (col) => col.notNull())
374
- .addColumn('last_name', 'varchar(255)')
375
- .addColumn('gender', 'varchar(50)', (col) => col.notNull())
376
- .execute()
377
-
378
- await db.schema
379
- .createTable('pet')
380
- .addColumn('id', 'integer', (col) => col.autoIncrement().primaryKey())
381
- .addColumn('name', 'varchar(255)', (col) => col.notNull().unique())
382
- .addColumn('owner_id', 'integer', (col) => col.notNull())
383
- .addColumn('species', 'varchar(255)', (col) => col.notNull())
384
- .addForeignKeyConstraint(
385
- 'pet_owner_id_fk', ['owner_id'], 'person', ['id'],
386
- (cb) => cb.onDelete('cascade')
387
- )
388
- .execute()
389
-
390
- await db.schema
391
- .createIndex('pet_owner_id_index')
392
- .on('pet')
393
- .column('owner_id')
394
- .execute()
395
- }
396
-
397
- export async function down(db: Kysely<any>): Promise<void> {
398
- await db.schema.dropTable('pet').execute()
399
- await db.schema.dropTable('person').execute()
400
- }
401
- ```
402
-
403
- You can then use
404
-
405
- ```ts
406
- const migrator = new Migrator(migratorConfig);
407
- await migrator.migrateToLatest(pathToMigrationsFolder)
408
- ```
409
-
410
- to run all migrations that have not yet been run. See the
411
- [Migrator](https://kysely-org.github.io/kysely/classes/Migrator.html)
412
- class's documentation for more info.
413
-
414
- Kysely doesn't have a CLI for running migrations and probably never will. This is because Kysely's
415
- migrations are also written in typescript. To run the migrations, you need to first build the
416
- typescript code into javascript. A CLI would cause confusion over which migrations are being
417
- run, the typescript ones or the javascript ones. If we added support for both, the CLI would
418
- need to depend on a typescript compiler, which most production environments don't (and shouldn't)
419
- have. You will probably want to add a simple migration script to your projects like this:
420
-
421
- ```ts
422
- import * as path from 'path'
423
- import { Pool } from 'pg'
424
- import { promises as fs } from 'fs'
425
- import {
426
- Kysely,
427
- Migrator,
428
- PostgresDialect,
429
- FileMigrationProvider
430
- } from 'kysely'
431
-
432
- async function migrateToLatest() {
433
- const db = new Kysely<Database>({
434
- dialect: new PostgresDialect({
435
- pool: new Pool({
436
- host: 'localhost',
437
- database: 'kysely_test',
438
- })
439
- }),
440
- })
441
-
442
- const migrator = new Migrator({
443
- db,
444
- provider: new FileMigrationProvider({
445
- fs,
446
- path,
447
- migrationFolder: 'some/path/to/migrations',
448
- })
449
- })
450
-
451
- const { error, results } = await migrator.migrateToLatest()
452
-
453
- results?.forEach((it) => {
454
- if (it.status === 'Success') {
455
- console.log(`migration "${it.migrationName}" was executed successfully`)
456
- } else if (it.status === 'Error') {
457
- console.error(`failed to execute migration "${it.migrationName}"`)
458
- }
459
- })
460
-
461
- if (error) {
462
- console.error('failed to migrate')
463
- console.error(error)
464
- process.exit(1)
465
- }
466
-
467
- await db.destroy()
468
- }
469
-
470
- migrateToLatest()
471
- ```
472
-
473
- The migration methods use a lock on the database level and parallel calls are executed serially.
474
- This means that you can safely call `migrateToLatest` and other migration methods from multiple
475
- server instances simultaneously and the migrations are guaranteed to only be executed once. The
476
- locks are also automatically released if the migration process crashes or the connection to the
477
- database fails.
478
-
479
- # Deno
480
-
481
- Kysely doesn't include drivers for deno, but you can still use Kysely as a query builder
482
- or implement your own driver:
483
-
484
- ```ts
485
- // We use jsdeliver to get Kysely from npm.
486
- import {
487
- DummyDriver,
488
- Generated,
489
- Kysely,
490
- PostgresAdapter,
491
- PostgresIntrospector,
492
- PostgresQueryCompiler,
493
- } from 'https://cdn.jsdelivr.net/npm/kysely/dist/esm/index.js'
494
-
495
- interface Person {
496
- id: Generated<number>
497
- first_name: string
498
- last_name: string | null
499
- }
500
-
501
- interface Database {
502
- person: Person
503
- }
504
-
505
- const db = new Kysely<Database>({
506
- dialect: {
507
- createAdapter() {
508
- return new PostgresAdapter()
509
- },
510
- createDriver() {
511
- // You need a driver to be able to execute queries. In this example
512
- // we use the dummy driver that never does anything.
513
- return new DummyDriver()
514
- },
515
- createIntrospector(db: Kysely<unknown>) {
516
- return new PostgresIntrospector(db)
517
- },
518
- createQueryCompiler() {
519
- return new PostgresQueryCompiler()
520
- },
521
- },
522
- })
523
-
524
- const query = db.selectFrom('person').select('id')
525
- const sql = query.compile()
526
-
527
- console.log(sql.sql)
528
- ```
529
-
530
- # Browser
531
-
532
- Kysely also runs in the browser:
533
-
534
- ```ts
535
- import {
536
- Kysely,
537
- Generated,
538
- DummyDriver,
539
- SqliteAdapter,
540
- SqliteIntrospector,
541
- SqliteQueryCompiler,
542
- } from 'kysely'
543
-
544
- interface Person {
545
- id: Generated<number>
546
- first_name: string
547
- last_name: string | null
548
- }
549
-
550
- interface Database {
551
- person: Person
552
- }
553
-
554
- const db = new Kysely<Database>({
555
- dialect: {
556
- createAdapter() {
557
- return new SqliteAdapter()
558
- },
559
- createDriver() {
560
- return new DummyDriver()
561
- },
562
- createIntrospector(db: Kysely<unknown>) {
563
- return new SqliteIntrospector(db)
564
- },
565
- createQueryCompiler() {
566
- return new SqliteQueryCompiler()
567
- },
568
- },
569
- })
570
-
571
- window.addEventListener('load', () => {
572
- const sql = db.selectFrom('person').select('id').compile()
573
-
574
- const result = document.createElement('span')
575
- result.id = 'result'
576
- result.innerHTML = sql.sql
577
-
578
- document.body.appendChild(result)
579
- })
580
- ```
581
-
582
- # Why not just contribute to knex
583
-
584
- Kysely is very similar to knex, but it also attempts to fix things that I personally find not-so-good
585
- in knex. Bringing the type system and the changes to knex would mean very significant breaking changes
586
- that aren't possible at this point of the project. Knex was also originally written for javascript and
587
- the typescript typings were added afterwards. That always leads to compromises in the types. Designing
588
- a library for typescript from the ground up produces much better and simpler types.
589
-
590
- # How to contribute to Kysely
591
-
592
- See [CONTRIBUTING.md](./CONTRIBUTING.md).
593
-
594
- # Sponsors
595
-
596
- <a href="https://vercel.com/?utm_source=kysely&utm_campaign=oss"><img src="https://kysely.dev/img/powered-by-vercel.svg" alt="Powered by Vercel" /></a>
56
+ <p align="center">
57
+ <a href="https://vercel.com/?utm_source=kysely&utm_campaign=oss">
58
+ <img src="https://kysely.dev/img/powered-by-vercel.svg" alt="Powered by Vercel" />
59
+ </a>
60
+ </p>
@@ -30,7 +30,7 @@ export interface SchemaMetadata {
30
30
  export interface DatabaseMetadata {
31
31
  /**
32
32
  * The tables and views found in the database.
33
- * * The propery isView can be used to tell them apart.
33
+ * The propery isView can be used to tell them apart.
34
34
  */
35
35
  readonly tables: TableMetadata[];
36
36
  }
@@ -46,6 +46,7 @@ export interface MysqlStream<T> {
46
46
  }
47
47
  export interface MysqlOkPacket {
48
48
  affectedRows: number;
49
+ changedRows: number;
49
50
  insertId: number;
50
51
  }
51
- export declare type MysqlQueryResult = MysqlOkPacket | Record<string, unknown>[];
52
+ export type MysqlQueryResult = MysqlOkPacket | Record<string, unknown>[];
@@ -86,10 +86,13 @@ class MysqlConnection {
86
86
  try {
87
87
  const result = await this.#executeQuery(compiledQuery);
88
88
  if (isOkPacket(result)) {
89
- const { insertId, affectedRows } = result;
89
+ const { insertId, affectedRows, changedRows } = result;
90
90
  const numAffectedRows = affectedRows !== undefined && affectedRows !== null
91
91
  ? BigInt(affectedRows)
92
92
  : undefined;
93
+ const numChangedRows = changedRows !== undefined && changedRows !== null
94
+ ? BigInt(changedRows)
95
+ : undefined;
93
96
  return {
94
97
  insertId: insertId !== undefined &&
95
98
  insertId !== null &&
@@ -99,6 +102,7 @@ class MysqlConnection {
99
102
  // TODO: remove.
100
103
  numUpdatedOrDeletedRows: numAffectedRows,
101
104
  numAffectedRows,
105
+ numChangedRows,
102
106
  rows: [],
103
107
  };
104
108
  }
@@ -50,7 +50,7 @@ export interface PostgresCursor<T> {
50
50
  read(rowsCount: number): Promise<T[]>;
51
51
  close(): Promise<void>;
52
52
  }
53
- export declare type PostgresCursorConstructor = new <T>(sql: string, parameters: unknown[]) => PostgresCursor<T>;
53
+ export type PostgresCursorConstructor = new <T>(sql: string, parameters: unknown[]) => PostgresCursor<T>;
54
54
  export interface PostgresQueryResult<R> {
55
55
  command: 'UPDATE' | 'DELETE' | 'INSERT' | 'SELECT';
56
56
  rowCount: number;
@@ -50,7 +50,7 @@ class PostgresIntrospector {
50
50
  .as('auto_incrementing'),
51
51
  ])
52
52
  // r == normal table
53
- .where('c.relkind', 'in', ['r', 'v'])
53
+ .where((eb) => eb.or([eb('c.relkind', '=', 'r'), eb('c.relkind', '=', 'v')]))
54
54
  .where('ns.nspname', '!~', '^pg_')
55
55
  .where('ns.nspname', '!=', 'information_schema')
56
56
  // No system columns
@@ -14,7 +14,7 @@ class SqliteIntrospector {
14
14
  }
15
15
  async getTables(options = { withInternalKyselyTables: false }) {
16
16
  let query = this.#db
17
- .selectFrom('sqlite_schema')
17
+ .selectFrom('sqlite_master')
18
18
  .where('type', 'in', ['table', 'view'])
19
19
  .where('name', 'not like', 'sqlite_%')
20
20
  .select('name')