@lunarhue/expo-wa-sqlite 0.0.1

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 (224) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/.lovely-docs.yaml +11 -0
  3. package/LICENSE +21 -0
  4. package/demo/next.config.mjs +17 -0
  5. package/demo/package.json +26 -0
  6. package/demo/scripts/copy-wasm.mjs +14 -0
  7. package/demo/src/app/layout.tsx +16 -0
  8. package/demo/src/app/page.tsx +16 -0
  9. package/demo/src/app/todos.tsx +118 -0
  10. package/demo/src/db/schema.ts +7 -0
  11. package/demo/tsconfig.json +18 -0
  12. package/lovely-docs/drizzle-orm/arktype.md +113 -0
  13. package/lovely-docs/drizzle-orm/batch-api.md +35 -0
  14. package/lovely-docs/drizzle-orm/cache.md +145 -0
  15. package/lovely-docs/drizzle-orm/check-migrations.md +52 -0
  16. package/lovely-docs/drizzle-orm/column_types/mysql-column-types.md +76 -0
  17. package/lovely-docs/drizzle-orm/column_types/postgresql_column_types.md +314 -0
  18. package/lovely-docs/drizzle-orm/column_types/singlestore-column-types.md +171 -0
  19. package/lovely-docs/drizzle-orm/column_types/sqlite_column_types.md +132 -0
  20. package/lovely-docs/drizzle-orm/column_types.md +76 -0
  21. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/case-insensitive-unique-email.md +113 -0
  22. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/conditional-filters-in-query.md +69 -0
  23. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/count-rows.md +76 -0
  24. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/cursor-based-pagination.md +142 -0
  25. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/d1_http_api_configuration.md +49 -0
  26. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/decrementing-a-value.md +36 -0
  27. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/empty-array-default-value.md +43 -0
  28. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/full-text-search-with-generated-columns.md +73 -0
  29. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/gel-auth-extension.md +89 -0
  30. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/include-or-exclude-columns.md +51 -0
  31. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/incrementing-a-value.md +36 -0
  32. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/limit-offset-pagination.md +104 -0
  33. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/mysql-local-setup.md +55 -0
  34. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/point-datatype-psql.md +79 -0
  35. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/postgis-geometry-point.md +115 -0
  36. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/postgresql-full-text-search.md +150 -0
  37. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/postgresql-local-setup.md +55 -0
  38. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/seeding-with-option.md +69 -0
  39. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/seeding-with-partially-exposed-schema.md +60 -0
  40. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/select-parent-rows-with-at-least-one-related-child-row.md +74 -0
  41. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/timestamp-default-value.md +93 -0
  42. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/toggling-a-boolean-field.md +20 -0
  43. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/update-many-with-different-values.md +50 -0
  44. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/upsert.md +169 -0
  45. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/vector-similarity-search.md +79 -0
  46. package/lovely-docs/drizzle-orm/common_patterns_&_recipes.md +787 -0
  47. package/lovely-docs/drizzle-orm/connect-aws-data-api-pg.md +47 -0
  48. package/lovely-docs/drizzle-orm/connect-bun-sql.md +35 -0
  49. package/lovely-docs/drizzle-orm/connect-bun-sqlite.md +42 -0
  50. package/lovely-docs/drizzle-orm/connect-cloudflare-d1.md +61 -0
  51. package/lovely-docs/drizzle-orm/connect-cloudflare-do.md +86 -0
  52. package/lovely-docs/drizzle-orm/connect-neon.md +72 -0
  53. package/lovely-docs/drizzle-orm/connect-nile.md +84 -0
  54. package/lovely-docs/drizzle-orm/connect-pglite.md +39 -0
  55. package/lovely-docs/drizzle-orm/connect-planetscale.md +37 -0
  56. package/lovely-docs/drizzle-orm/connect-prisma-postgres.md +48 -0
  57. package/lovely-docs/drizzle-orm/connect-sqlite-cloud.md +29 -0
  58. package/lovely-docs/drizzle-orm/connect-supabase.md +45 -0
  59. package/lovely-docs/drizzle-orm/connect-tidb-serverless.md +35 -0
  60. package/lovely-docs/drizzle-orm/connect-turso-database.md +28 -0
  61. package/lovely-docs/drizzle-orm/connect-turso.md +60 -0
  62. package/lovely-docs/drizzle-orm/connect-vercel-postgres.md +37 -0
  63. package/lovely-docs/drizzle-orm/connect-xata.md +29 -0
  64. package/lovely-docs/drizzle-orm/custom-migrations.md +40 -0
  65. package/lovely-docs/drizzle-orm/custom-types.md +137 -0
  66. package/lovely-docs/drizzle-orm/database-connection-overview.md +89 -0
  67. package/lovely-docs/drizzle-orm/database_setup_guides/bun-sql-existing.md +59 -0
  68. package/lovely-docs/drizzle-orm/database_setup_guides/bun-sqlite-existing.md +48 -0
  69. package/lovely-docs/drizzle-orm/database_setup_guides/bun-sqlite-new.md +34 -0
  70. package/lovely-docs/drizzle-orm/database_setup_guides/d1-new.md +74 -0
  71. package/lovely-docs/drizzle-orm/database_setup_guides/expo-sqlite-setup.md +169 -0
  72. package/lovely-docs/drizzle-orm/database_setup_guides/gel-existing-project.md +81 -0
  73. package/lovely-docs/drizzle-orm/database_setup_guides/get-started-bun-sql.md +29 -0
  74. package/lovely-docs/drizzle-orm/database_setup_guides/getting_started_with_gel.md +85 -0
  75. package/lovely-docs/drizzle-orm/database_setup_guides/mysql-existing-project.md +32 -0
  76. package/lovely-docs/drizzle-orm/database_setup_guides/mysql-setup.md +43 -0
  77. package/lovely-docs/drizzle-orm/database_setup_guides/neon-existing-project.md +39 -0
  78. package/lovely-docs/drizzle-orm/database_setup_guides/neon-setup.md +45 -0
  79. package/lovely-docs/drizzle-orm/database_setup_guides/nile-existing-project.md +66 -0
  80. package/lovely-docs/drizzle-orm/database_setup_guides/nile-setup.md +59 -0
  81. package/lovely-docs/drizzle-orm/database_setup_guides/op-sqlite_setup_guide.md +135 -0
  82. package/lovely-docs/drizzle-orm/database_setup_guides/pglite-existing-project.md +67 -0
  83. package/lovely-docs/drizzle-orm/database_setup_guides/pglite-setup.md +33 -0
  84. package/lovely-docs/drizzle-orm/database_setup_guides/planetscale-existing-project.md +70 -0
  85. package/lovely-docs/drizzle-orm/database_setup_guides/planetscale-setup.md +46 -0
  86. package/lovely-docs/drizzle-orm/database_setup_guides/postgresql-existing-project.md +57 -0
  87. package/lovely-docs/drizzle-orm/database_setup_guides/postgresql-setup.md +44 -0
  88. package/lovely-docs/drizzle-orm/database_setup_guides/singlestore-existing-project.md +22 -0
  89. package/lovely-docs/drizzle-orm/database_setup_guides/singlestore-setup.md +37 -0
  90. package/lovely-docs/drizzle-orm/database_setup_guides/sqlite-cloud-existing-project.md +52 -0
  91. package/lovely-docs/drizzle-orm/database_setup_guides/sqlite-cloud-setup.md +53 -0
  92. package/lovely-docs/drizzle-orm/database_setup_guides/sqlite-durable-objects-setup.md +163 -0
  93. package/lovely-docs/drizzle-orm/database_setup_guides/sqlite-existing-project.md +36 -0
  94. package/lovely-docs/drizzle-orm/database_setup_guides/sqlite-new.md +28 -0
  95. package/lovely-docs/drizzle-orm/database_setup_guides/supabase-existing-project.md +32 -0
  96. package/lovely-docs/drizzle-orm/database_setup_guides/tidb-existing-project.md +25 -0
  97. package/lovely-docs/drizzle-orm/database_setup_guides/tidb-serverless-setup.md +41 -0
  98. package/lovely-docs/drizzle-orm/database_setup_guides/turso-database-existing.md +61 -0
  99. package/lovely-docs/drizzle-orm/database_setup_guides/turso-database-setup.md +60 -0
  100. package/lovely-docs/drizzle-orm/database_setup_guides/turso-existing.md +74 -0
  101. package/lovely-docs/drizzle-orm/database_setup_guides/turso-new.md +78 -0
  102. package/lovely-docs/drizzle-orm/database_setup_guides/vercel-postgres-existing-project.md +71 -0
  103. package/lovely-docs/drizzle-orm/database_setup_guides/vercel-postgres-setup.md +46 -0
  104. package/lovely-docs/drizzle-orm/database_setup_guides/xata-existing-project.md +32 -0
  105. package/lovely-docs/drizzle-orm/database_setup_guides/xata-new.md +30 -0
  106. package/lovely-docs/drizzle-orm/database_setup_guides.md +144 -0
  107. package/lovely-docs/drizzle-orm/delete.md +57 -0
  108. package/lovely-docs/drizzle-orm/drizzle-config-file.md +252 -0
  109. package/lovely-docs/drizzle-orm/drizzle-kit-up.md +43 -0
  110. package/lovely-docs/drizzle-orm/dynamic-query-building.md +68 -0
  111. package/lovely-docs/drizzle-orm/eslint-plugin.md +76 -0
  112. package/lovely-docs/drizzle-orm/expo-sqlite.md +101 -0
  113. package/lovely-docs/drizzle-orm/export.md +88 -0
  114. package/lovely-docs/drizzle-orm/faq.md +28 -0
  115. package/lovely-docs/drizzle-orm/filter-and-conditional-operators.md +169 -0
  116. package/lovely-docs/drizzle-orm/gel-setup.md +37 -0
  117. package/lovely-docs/drizzle-orm/generate.md +119 -0
  118. package/lovely-docs/drizzle-orm/generated-columns.md +128 -0
  119. package/lovely-docs/drizzle-orm/getting_started/database_integrations/drizzle-with-turso.md +159 -0
  120. package/lovely-docs/drizzle-orm/getting_started/database_integrations/drizzle_with_nile_database.md +195 -0
  121. package/lovely-docs/drizzle-orm/getting_started/database_integrations/neon_postgres_integration.md +157 -0
  122. package/lovely-docs/drizzle-orm/getting_started/database_integrations/supabase_integration.md +150 -0
  123. package/lovely-docs/drizzle-orm/getting_started/database_integrations/vercel-postgres-setup.md +152 -0
  124. package/lovely-docs/drizzle-orm/getting_started/database_integrations/xata_integration.md +143 -0
  125. package/lovely-docs/drizzle-orm/getting_started/database_integrations.md +117 -0
  126. package/lovely-docs/drizzle-orm/getting_started/edge_functions_integration/drizzle_with_vercel_edge_functions.md +220 -0
  127. package/lovely-docs/drizzle-orm/getting_started/edge_functions_integration/netlify_edge_functions_with_neon_postgres.md +120 -0
  128. package/lovely-docs/drizzle-orm/getting_started/edge_functions_integration/netlify_edge_functions_with_supabase.md +94 -0
  129. package/lovely-docs/drizzle-orm/getting_started/edge_functions_integration/supabase_edge_functions_integration.md +116 -0
  130. package/lovely-docs/drizzle-orm/getting_started/edge_functions_integration.md +63 -0
  131. package/lovely-docs/drizzle-orm/getting_started/todo_app_with_neon_postgres.md +323 -0
  132. package/lovely-docs/drizzle-orm/getting_started.md +443 -0
  133. package/lovely-docs/drizzle-orm/graphql.md +107 -0
  134. package/lovely-docs/drizzle-orm/http-proxy-driver.md +138 -0
  135. package/lovely-docs/drizzle-orm/indexes-constraints.md +135 -0
  136. package/lovely-docs/drizzle-orm/insert.mdx.md +118 -0
  137. package/lovely-docs/drizzle-orm/joins.md +145 -0
  138. package/lovely-docs/drizzle-orm/kit-overview.md +81 -0
  139. package/lovely-docs/drizzle-orm/migrate.md +54 -0
  140. package/lovely-docs/drizzle-orm/migration_guides/migrate-from-sequelize.md +335 -0
  141. package/lovely-docs/drizzle-orm/migration_guides/migrate-from-typeorm.md +317 -0
  142. package/lovely-docs/drizzle-orm/migration_guides/migrate_from_prisma_to_drizzle.md +258 -0
  143. package/lovely-docs/drizzle-orm/migration_guides.md +201 -0
  144. package/lovely-docs/drizzle-orm/migrations.md +50 -0
  145. package/lovely-docs/drizzle-orm/mysql-setup.md +51 -0
  146. package/lovely-docs/drizzle-orm/op-sqlite-setup.md +80 -0
  147. package/lovely-docs/drizzle-orm/overview.md +69 -0
  148. package/lovely-docs/drizzle-orm/postgresql-setup.md +71 -0
  149. package/lovely-docs/drizzle-orm/postgresql_extensions.md +93 -0
  150. package/lovely-docs/drizzle-orm/prepared-statements.md +77 -0
  151. package/lovely-docs/drizzle-orm/prisma-extension.md +46 -0
  152. package/lovely-docs/drizzle-orm/pull.md +134 -0
  153. package/lovely-docs/drizzle-orm/push.md +129 -0
  154. package/lovely-docs/drizzle-orm/queries-and-crud.md +72 -0
  155. package/lovely-docs/drizzle-orm/quick-start.md +63 -0
  156. package/lovely-docs/drizzle-orm/react-native-sqlite-setup.md +1 -0
  157. package/lovely-docs/drizzle-orm/read-replicas.md +66 -0
  158. package/lovely-docs/drizzle-orm/relational-queries.md +271 -0
  159. package/lovely-docs/drizzle-orm/relations.md +194 -0
  160. package/lovely-docs/drizzle-orm/release_notes/live-queries.md +27 -0
  161. package/lovely-docs/drizzle-orm/release_notes/pglite_driver_support.md +14 -0
  162. package/lovely-docs/drizzle-orm/release_notes/v0.11.0_release.md +139 -0
  163. package/lovely-docs/drizzle-orm/release_notes/v0.16.2_release_notes.md +86 -0
  164. package/lovely-docs/drizzle-orm/release_notes/v0.23.2_release.md +5 -0
  165. package/lovely-docs/drizzle-orm/release_notes/v0.27.2_-_unique_constraints_support.md +66 -0
  166. package/lovely-docs/drizzle-orm/release_notes/v0.28.0_release_notes.md +80 -0
  167. package/lovely-docs/drizzle-orm/release_notes/v0.28.1_release.md +7 -0
  168. package/lovely-docs/drizzle-orm/release_notes/v0.28.2_release_notes.md +18 -0
  169. package/lovely-docs/drizzle-orm/release_notes/v0.28.3_release_notes.md +48 -0
  170. package/lovely-docs/drizzle-orm/release_notes/v0.28.4_release.md +8 -0
  171. package/lovely-docs/drizzle-orm/release_notes/v0.28.5_release_notes.md +7 -0
  172. package/lovely-docs/drizzle-orm/release_notes/v0.28.6_release_notes.md +54 -0
  173. package/lovely-docs/drizzle-orm/release_notes/v0.29.0_release_notes.md +143 -0
  174. package/lovely-docs/drizzle-orm/release_notes/v0.29.1_release_notes.md +72 -0
  175. package/lovely-docs/drizzle-orm/release_notes/v0.29.2_release_notes.md +95 -0
  176. package/lovely-docs/drizzle-orm/release_notes/v0.29.3_release.md +7 -0
  177. package/lovely-docs/drizzle-orm/release_notes/v0.29.4_release_notes.md +40 -0
  178. package/lovely-docs/drizzle-orm/release_notes/v0.29.5_release_notes.md +69 -0
  179. package/lovely-docs/drizzle-orm/release_notes/v0.30.0_release_notes.md +31 -0
  180. package/lovely-docs/drizzle-orm/release_notes/v0.30.10_release.md +18 -0
  181. package/lovely-docs/drizzle-orm/release_notes/v0.30.1_release_notes.md +16 -0
  182. package/lovely-docs/drizzle-orm/release_notes/v0.30.2_release_notes.md +7 -0
  183. package/lovely-docs/drizzle-orm/release_notes/v0.30.3_release_notes.md +8 -0
  184. package/lovely-docs/drizzle-orm/release_notes/v0.30.5_release_notes.md +20 -0
  185. package/lovely-docs/drizzle-orm/release_notes/v0.30.7_release.md +5 -0
  186. package/lovely-docs/drizzle-orm/release_notes/v0.30.8_release_notes.md +36 -0
  187. package/lovely-docs/drizzle-orm/release_notes/v0.30.9_release.md +29 -0
  188. package/lovely-docs/drizzle-orm/release_notes/v0.31.0_release_notes.md +186 -0
  189. package/lovely-docs/drizzle-orm/release_notes/v0.31.2_tidb_cloud_serverless_support.md +16 -0
  190. package/lovely-docs/drizzle-orm/release_notes/v0.31.3_release.md +19 -0
  191. package/lovely-docs/drizzle-orm/release_notes/v0.31.4_release.md +1 -0
  192. package/lovely-docs/drizzle-orm/release_notes/v0.32.0_release_notes.md +136 -0
  193. package/lovely-docs/drizzle-orm/release_notes/v0.32.1_release_notes.md +15 -0
  194. package/lovely-docs/drizzle-orm/release_notes/v0.32.2_release.md +13 -0
  195. package/lovely-docs/drizzle-orm/release_notes/xata-http-driver-support.md +27 -0
  196. package/lovely-docs/drizzle-orm/release_notes.md +25 -0
  197. package/lovely-docs/drizzle-orm/rls.mdx.md +385 -0
  198. package/lovely-docs/drizzle-orm/schema-declaration.md +239 -0
  199. package/lovely-docs/drizzle-orm/schemas.md +63 -0
  200. package/lovely-docs/drizzle-orm/seed-generators.md +220 -0
  201. package/lovely-docs/drizzle-orm/seed-limitations.md +3 -0
  202. package/lovely-docs/drizzle-orm/seed-overview.md +155 -0
  203. package/lovely-docs/drizzle-orm/seed-versioning.md +85 -0
  204. package/lovely-docs/drizzle-orm/select.md +411 -0
  205. package/lovely-docs/drizzle-orm/sequences.md +62 -0
  206. package/lovely-docs/drizzle-orm/serverless-performance.md +21 -0
  207. package/lovely-docs/drizzle-orm/set-operations.md +127 -0
  208. package/lovely-docs/drizzle-orm/singlestore-setup.md +57 -0
  209. package/lovely-docs/drizzle-orm/sql-template.md +127 -0
  210. package/lovely-docs/drizzle-orm/sqlite-setup.md +65 -0
  211. package/lovely-docs/drizzle-orm/studio.md +47 -0
  212. package/lovely-docs/drizzle-orm/transactions.md +83 -0
  213. package/lovely-docs/drizzle-orm/type-helpers-and-utilities.md +160 -0
  214. package/lovely-docs/drizzle-orm/typebox.md +110 -0
  215. package/lovely-docs/drizzle-orm/update.md +79 -0
  216. package/lovely-docs/drizzle-orm/upgrade-to-0.21.0.md +40 -0
  217. package/lovely-docs/drizzle-orm/valibot.md +115 -0
  218. package/lovely-docs/drizzle-orm/views.md +135 -0
  219. package/lovely-docs/drizzle-orm/why-drizzle.md +66 -0
  220. package/lovely-docs/drizzle-orm/zod.md +113 -0
  221. package/lovely-docs/drizzle-orm.md +60 -0
  222. package/package.json +24 -0
  223. package/src/index.ts +186 -0
  224. package/tsconfig.json +14 -0
@@ -0,0 +1,72 @@
1
+ ## Fixes
2
+
3
+ - **withReplica**: Fixed argument forwarding when using the withReplica feature
4
+ - **selectDistinctOn**: Fixed issue where selectDistinctOn was not working with multiple columns
5
+
6
+ ## New Features
7
+
8
+ ### Detailed JSDoc for Query Builders
9
+ JSDoc documentation is now available for all query builders across all dialects, providing hints and documentation links directly in IDEs.
10
+
11
+ ### Aggregate Function Helpers
12
+ New SQL helper functions for aggregation operations (typically used with GROUP BY):
13
+
14
+ ```ts
15
+ // count
16
+ await db.select({ value: count() }).from(users);
17
+ await db.select({ value: count(users.id) }).from(users);
18
+
19
+ // countDistinct
20
+ await db.select({ value: countDistinct(users.id) }).from(users);
21
+
22
+ // avg / avgDistinct
23
+ await db.select({ value: avg(users.id) }).from(users);
24
+ await db.select({ value: avgDistinct(users.id) }).from(users);
25
+
26
+ // sum / sumDistinct
27
+ await db.select({ value: sum(users.id) }).from(users);
28
+ await db.select({ value: sumDistinct(users.id) }).from(users);
29
+
30
+ // max / min
31
+ await db.select({ value: max(users.id) }).from(users);
32
+ await db.select({ value: min(users.id) }).from(users);
33
+ ```
34
+
35
+ These are equivalent to using `sql` template with `.mapWith()` for type mapping.
36
+
37
+ ### ESLint Drizzle Plugin
38
+ New package `eslint-plugin-drizzle` for enforcing best practices where type checking is insufficient.
39
+
40
+ **Installation**:
41
+ ```
42
+ npm install eslint eslint-plugin-drizzle
43
+ npm install @typescript-eslint/eslint-plugin @typescript-eslint/parser
44
+ ```
45
+
46
+ **Configuration** (`.eslintrc.yml`):
47
+ ```yaml
48
+ root: true
49
+ parser: '@typescript-eslint/parser'
50
+ parserOptions:
51
+ project: './tsconfig.json'
52
+ plugins:
53
+ - drizzle
54
+ rules:
55
+ 'drizzle/enforce-delete-with-where': "error"
56
+ 'drizzle/enforce-update-with-where': "error"
57
+ ```
58
+
59
+ Or use the `all`/`recommended` config:
60
+ ```yaml
61
+ extends:
62
+ - "plugin:drizzle/all"
63
+ ```
64
+
65
+ **Rules**:
66
+
67
+ 1. **enforce-delete-with-where**: Requires `.where()` clause in `.delete()` statements to prevent accidental deletion of all rows. Optionally configure `drizzleObjectName` to target specific objects:
68
+ ```json
69
+ "drizzle/enforce-delete-with-where": ["error", { "drizzleObjectName": ["db"] }]
70
+ ```
71
+
72
+ 2. **enforce-update-with-where**: Requires `.where()` clause in `.update()` statements to prevent accidental updates of all rows. Same `drizzleObjectName` option available.
@@ -0,0 +1,95 @@
1
+ ## Bug Fixes
2
+ - Improved planescale relational tests
3
+ - Fixed string escaping for empty PgArrays
4
+ - Fixed incorrect syntax for SQLite exists function
5
+ - Fixed date handling in AWS Data API
6
+ - Fixed Hermes mixins constructor issue
7
+
8
+ ## ESLint Plugin v0.2.3
9
+ - Added support for Drizzle objects retrieved from functions
10
+ - Improved error message context in suggestions
11
+
12
+ ## New: Expo SQLite Driver
13
+
14
+ Install packages:
15
+ ```bash
16
+ npm install drizzle-orm expo-sqlite@next
17
+ ```
18
+
19
+ Basic usage:
20
+ ```ts
21
+ import { drizzle } from "drizzle-orm/expo-sqlite";
22
+ import { openDatabaseSync } from "expo-sqlite";
23
+
24
+ const expoDb = openDatabaseSync("db.db");
25
+ const db = drizzle(expoDb);
26
+
27
+ await db.select().from(...);
28
+ // or
29
+ db.select().from(...).then(...);
30
+ // or
31
+ db.select().from(...).all();
32
+ ```
33
+
34
+ For migrations support, configure Babel and Metro:
35
+
36
+ **babel.config.js:**
37
+ ```ts
38
+ module.exports = function(api) {
39
+ api.cache(true);
40
+ return {
41
+ presets: ['babel-preset-expo'],
42
+ plugins: [["inline-import", { "extensions": [".sql"] }]]
43
+ };
44
+ };
45
+ ```
46
+
47
+ **metro.config.js:**
48
+ ```ts
49
+ const { getDefaultConfig } = require('expo/metro-config');
50
+ const config = getDefaultConfig(__dirname);
51
+ config.resolver.sourceExts.push('sql');
52
+ module.exports = config;
53
+ ```
54
+
55
+ **drizzle.config.ts:**
56
+ ```ts
57
+ import type { Config } from 'drizzle-kit';
58
+
59
+ export default {
60
+ schema: './db/schema.ts',
61
+ out: './drizzle',
62
+ dialect: 'sqlite',
63
+ driver: 'expo',
64
+ } satisfies Config;
65
+ ```
66
+
67
+ Generate migrations:
68
+ ```bash
69
+ npx drizzle-kit generate
70
+ ```
71
+
72
+ Use migrations in **App.tsx:**
73
+ ```ts
74
+ import { drizzle } from "drizzle-orm/expo-sqlite";
75
+ import { openDatabaseSync } from "expo-sqlite";
76
+ import { useMigrations } from 'drizzle-orm/expo-sqlite/migrator';
77
+ import migrations from './drizzle/migrations';
78
+
79
+ const expoDb = openDatabaseSync("db.db");
80
+ const db = drizzle(expoDb);
81
+
82
+ export default function App() {
83
+ const { success, error } = useMigrations(db, migrations);
84
+
85
+ if (error) {
86
+ return <View><Text>Migration error: {error.message}</Text></View>;
87
+ }
88
+
89
+ if (!success) {
90
+ return <View><Text>Migration is in progress...</Text></View>;
91
+ }
92
+
93
+ return ...your application component;
94
+ }
95
+ ```
@@ -0,0 +1,7 @@
1
+ ## v0.29.3 Release
2
+
3
+ **Fix:** Expo peer dependencies are now optional.
4
+
5
+ This release addresses an issue where Expo peer dependencies were required, which could cause problems for users not using Expo. The fix makes these dependencies optional, allowing developers to use DrizzleORM with Expo SQLite without unnecessary dependency constraints.
6
+
7
+ Related: Expo documentation and Expo SQLite integration guide.
@@ -0,0 +1,40 @@
1
+ ## Neon HTTP Batch Support
2
+
3
+ Added support for batching multiple queries in a single request using Neon's HTTP driver:
4
+
5
+ ```ts
6
+ import { neon } from '@neondatabase/serverless';
7
+ import { drizzle } from 'drizzle-orm/neon-http';
8
+ import { usersTable } from './schema';
9
+
10
+ const sql = neon(process.env.DRIZZLE_DATABASE_URL!);
11
+ const db = drizzle(sql);
12
+
13
+ const batchResponse = await db.batch([
14
+ db.insert(usersTable).values({ id: 1, name: 'John' }).returning({ id: usersTable.id }),
15
+ db.insert(usersTable).values({ id: 2, name: 'Dan' }),
16
+ db.query.usersTable.findMany({}),
17
+ db.query.usersTable.findFirst({}),
18
+ ]);
19
+ ```
20
+
21
+ The batch method returns a tuple with typed results for each query in the batch.
22
+
23
+ ## PlanetScale Client Instance Update
24
+
25
+ Updated PlanetScale integration to use `Client` instance instead of `connect()` function:
26
+
27
+ ```ts
28
+ import { Client } from '@planetscale/database';
29
+ import { drizzle } from 'drizzle-orm/planetscale-serverless';
30
+
31
+ const client = new Client({
32
+ host: process.env['DATABASE_HOST'],
33
+ username: process.env['DATABASE_USERNAME'],
34
+ password: process.env['DATABASE_PASSWORD'],
35
+ });
36
+
37
+ const db = drizzle(client);
38
+ ```
39
+
40
+ **Breaking change warning**: Version 0.30.0 will require `Client` instances and reject `connect()` results. A deprecation warning is shown in v0.29.4 when using `connect()`. Migrate now to avoid runtime errors.
@@ -0,0 +1,69 @@
1
+ ## WITH Statements for INSERT, UPDATE, DELETE
2
+
3
+ You can now use `WITH` (CTE) clauses with INSERT, UPDATE, and DELETE statements.
4
+
5
+ Example with DELETE:
6
+ ```ts
7
+ const averageAmount = db.$with('average_amount').as(
8
+ db.select({ value: sql`avg(${orders.amount})`.as('value') }).from(orders),
9
+ );
10
+
11
+ const result = await db
12
+ .with(averageAmount)
13
+ .delete(orders)
14
+ .where(gt(orders.amount, sql`(select * from ${averageAmount})`))
15
+ .returning({ id: orders.id });
16
+ ```
17
+
18
+ Generates:
19
+ ```sql
20
+ with "average_amount" as (select avg("amount") as "value" from "orders")
21
+ delete from "orders"
22
+ where "orders"."amount" > (select * from "average_amount")
23
+ returning "id";
24
+ ```
25
+
26
+ ## Custom Migrations Table and Schema
27
+
28
+ **Custom migrations table name** (all databases):
29
+ ```ts
30
+ await migrate(db, {
31
+ migrationsFolder: './drizzle',
32
+ migrationsTable: 'my_migrations',
33
+ });
34
+ ```
35
+
36
+ By default migrations are stored in `__drizzle_migrations` table (in `drizzle` schema for PostgreSQL).
37
+
38
+ **Custom migrations schema** (PostgreSQL only):
39
+ ```ts
40
+ await migrate(db, {
41
+ migrationsFolder: './drizzle',
42
+ migrationsSchema: 'custom',
43
+ });
44
+ ```
45
+
46
+ ## SQLite Proxy Batch and Relational Queries
47
+
48
+ SQLite proxy driver now supports:
49
+ - Relational queries: `.query.findFirst()` and `.query.findMany()`
50
+ - Batch requests via `db.batch([])`
51
+
52
+ Batch callback setup:
53
+ ```ts
54
+ import { drizzle } from 'drizzle-orm/sqlite-proxy';
55
+
56
+ type ResponseType = { rows: any[][] | any[] }[];
57
+
58
+ const db = drizzle(
59
+ async (sql, params, method) => {
60
+ // single query logic
61
+ },
62
+ async (queries: { sql: string; params: any[]; method: 'all' | 'run' | 'get' | 'values' }[]) => {
63
+ const result: ResponseType = await axios.post('http://localhost:3000/batch', { queries });
64
+ return result;
65
+ },
66
+ );
67
+ ```
68
+
69
+ Response must be an array of raw values in the same order as sent queries.
@@ -0,0 +1,31 @@
1
+ ## Breaking Changes: Postgres Timestamp Handling
2
+
3
+ The `postgres.js` driver instance has been modified to always return strings for dates. Drizzle then maps these to either strings or Date objects based on the selected `mode`. This is a breaking change that affects how timestamps are handled.
4
+
5
+ **Key Impact:**
6
+ - Timestamps with and without timezone now always use `.toISOString()` for mapping to the driver
7
+ - All `postgres.js` clients passed to Drizzle will have mutated behavior - dates will always be strings in responses
8
+ - If you were expecting specific timestamp responses, behavior has changed
9
+
10
+ **Parser Override for postgres.js:**
11
+ ```ts
12
+ const transparentParser = (val: any) => val;
13
+
14
+ // Override postgres.js default date parsers
15
+ for (const type of ['1184', '1082', '1083', '1114']) {
16
+ client.options.parsers[type as any] = transparentParser;
17
+ client.options.serializers[type as any] = transparentParser;
18
+ }
19
+ ```
20
+
21
+ The team notes this is not ideal since the driver client gets mutated. They're working with the `postgres.js` library creator to enable per-query mapping interceptors instead.
22
+
23
+ ## Fixes
24
+
25
+ Multiple timestamp and date-related issues resolved:
26
+ - Timestamp with mode string returning Date object instead of string
27
+ - Inconsistent date/datetime handling across drivers
28
+ - Type mismatches (columns showing string type but returning Date objects)
29
+ - PostgreSQL timezone-related conversion issues
30
+ - Millisecond loss during timestamp inserts
31
+ - Invalid dates from relational queries
@@ -0,0 +1,18 @@
1
+ ## New Features
2
+
3
+ ### `.if()` function for WHERE expressions
4
+
5
+ Conditional WHERE clauses using `.if()` method:
6
+
7
+ ```ts
8
+ await db
9
+ .select()
10
+ .from(posts)
11
+ .where(gt(posts.views, views).if(views > 100));
12
+ ```
13
+
14
+ The `.if()` function is available on all WHERE expressions and allows conditional filtering based on runtime values.
15
+
16
+ ## Bug Fixes
17
+
18
+ - Fixed internal mappings for sessions `.all()`, `.values()`, `.execute()` functions in AWS DataAPI
@@ -0,0 +1,16 @@
1
+ ## OP-SQLite Driver Support
2
+
3
+ New driver added for OP-SQLite. Initialize with:
4
+
5
+ ```ts
6
+ import { open } from '@op-engineering/op-sqlite';
7
+ import { drizzle } from 'drizzle-orm/op-sqlite';
8
+
9
+ const opsqlite = open({ name: 'myDB' });
10
+ const db = drizzle(opsqlite);
11
+ await db.select().from(users);
12
+ ```
13
+
14
+ ## Fixes
15
+
16
+ - Migration hook fixed for Expo driver
@@ -0,0 +1,7 @@
1
+ ## Improvements
2
+
3
+ LibSQL migrations now use batch execution instead of transactions. Batch operations execute multiple SQL statements sequentially within an implicit transaction - the backend commits all changes on success or rolls back completely on any failure.
4
+
5
+ ## Fixes
6
+
7
+ - Fixed findFirst query for bun:sqlite
@@ -0,0 +1,8 @@
1
+ ## New Features
2
+
3
+ - Added raw query support (`db.execute(...)`) to batch API in Neon HTTP driver
4
+
5
+ ## Fixes
6
+
7
+ - Fixed `@neondatabase/serverless` HTTP driver types issue
8
+ - Fixed sqlite-proxy driver `.run()` result
@@ -0,0 +1,20 @@
1
+ ## `$onUpdate` functionality for PostgreSQL, MySQL and SQLite
2
+
3
+ Adds dynamic update values to columns. The `$onUpdate()` function is called when a row is updated, and its returned value is used as the column value if none is provided. If no `default` or `$defaultFn` is set, the function is also called on insert.
4
+
5
+ Note: This is runtime-only behavior in drizzle-orm and does not affect drizzle-kit.
6
+
7
+ Example:
8
+ ```ts
9
+ const usersOnUpdate = pgTable('users_on_update', {
10
+ id: serial('id').primaryKey(),
11
+ name: text('name').notNull(),
12
+ updateCounter: integer('update_counter').default(sql`1`).$onUpdateFn(() => sql`update_counter + 1`),
13
+ updatedAt: timestamp('updated_at', { mode: 'date', precision: 3 }).$onUpdate(() => new Date()),
14
+ alwaysNull: text('always_null').$type<string | null>().$onUpdate(() => null),
15
+ });
16
+ ```
17
+
18
+ ## Fixes
19
+
20
+ - Insertions on columns with smallserial datatype are now correctly non-optional (issue #1848)
@@ -0,0 +1,5 @@
1
+ ## Fixes
2
+
3
+ - Added mappings for `@vercel/postgres` package. Vercel Postgres is a serverless PostgreSQL database service. To get started with Drizzle and Vercel Postgres, refer to the PostgreSQL getting started documentation section on Vercel Postgres.
4
+
5
+ - Fixed interval mapping for `neon` drivers (issue #1542). Neon is a serverless PostgreSQL platform. To get started with Drizzle and Neon, refer to the PostgreSQL getting started documentation section on Neon.
@@ -0,0 +1,36 @@
1
+ ## New Features
2
+
3
+ **Custom schema support for Postgres enums:**
4
+ ```ts
5
+ import { pgSchema } from 'drizzle-orm/pg-core';
6
+
7
+ const mySchema = pgSchema('mySchema');
8
+ const colors = mySchema.enum('colors', ['red', 'green', 'blue']);
9
+ ```
10
+
11
+ ## Fixes
12
+
13
+ **D1 migrate() function:** Changed to use batch API for better performance.
14
+
15
+ **Postgres `.onConflictDoUpdate` method:** Split `where` clause into `setWhere` and `targetWhere` to support both where cases in on conflict clause.
16
+ ```ts
17
+ await db.insert(employees)
18
+ .values({ employeeId: 123, name: 'John Doe' })
19
+ .onConflictDoUpdate({
20
+ target: employees.employeeId,
21
+ targetWhere: sql`name <> 'John Doe'`,
22
+ set: { name: sql`excluded.name` }
23
+ });
24
+
25
+ await db.insert(employees)
26
+ .values({ employeeId: 123, name: 'John Doe' })
27
+ .onConflictDoUpdate({
28
+ target: employees.employeeId,
29
+ set: { name: 'John Doe' },
30
+ setWhere: sql`name <> 'John Doe'`
31
+ });
32
+ ```
33
+
34
+ **Postgres `.onConflictDoNothing` method:** Fixed query generation for `where` clause placement.
35
+
36
+ **AWS Data API driver:** Fixed multiple issues including inserting and updating array values.
@@ -0,0 +1,29 @@
1
+ ## New Features
2
+
3
+ **Enhanced `.onConflictDoUpdate()` in SQLite**: Added `setWhere` and `targetWhere` fields to replace the single `where` field, enabling more granular control over conflict resolution:
4
+
5
+ ```ts
6
+ // Using targetWhere to filter which conflicts to handle
7
+ await db.insert(employees)
8
+ .values({ employeeId: 123, name: 'John Doe' })
9
+ .onConflictDoUpdate({
10
+ target: employees.employeeId,
11
+ targetWhere: sql`name <> 'John Doe'`,
12
+ set: { name: sql`excluded.name` }
13
+ });
14
+
15
+ // Using setWhere to conditionally apply updates
16
+ await db.insert(employees)
17
+ .values({ employeeId: 123, name: 'John Doe' })
18
+ .onConflictDoUpdate({
19
+ target: employees.employeeId,
20
+ set: { name: 'John Doe' },
21
+ setWhere: sql`name <> 'John Doe'`
22
+ });
23
+ ```
24
+
25
+ **Schema introspection**: Added `db._.fullSchema` to access schema information from Drizzle instances.
26
+
27
+ ## Fixes
28
+
29
+ - Fixed migrator in AWS Data API
@@ -0,0 +1,186 @@
1
+ ## Breaking Changes
2
+
3
+ **PostgreSQL indexes API was changed** to align with PostgreSQL documentation. The previous API didn't support SQL expressions in `.on()`, conflated `.using()` and `.on()`, and placed ordering modifiers on the index instead of per-column.
4
+
5
+ Previous API:
6
+ ```ts
7
+ index('name')
8
+ .on(table.column1, table.column2)
9
+ .using(sql``)
10
+ .asc() / .desc()
11
+ .nullsFirst() / .nullsLast()
12
+ .where(sql``)
13
+ ```
14
+
15
+ New API:
16
+ ```ts
17
+ // With .on()
18
+ index('name')
19
+ .on(table.column1.asc(), table.column2.nullsFirst())
20
+ .concurrently()
21
+ .where(sql``)
22
+ .with({ fillfactor: '70' })
23
+
24
+ // With .using()
25
+ index('name')
26
+ .using('btree', table.column1.asc(), sql`lower(${table.column2})`, table.column1.op('text_ops'))
27
+ .where(sql``)
28
+ .with({ fillfactor: '70' })
29
+ ```
30
+
31
+ Requires `drizzle-kit@0.22.0` or higher.
32
+
33
+ ## New Features
34
+
35
+ ### pg_vector extension support
36
+
37
+ Define vector indexes and use vector distance functions:
38
+
39
+ ```ts
40
+ const table = pgTable('items', {
41
+ embedding: vector('embedding', { dimensions: 3 })
42
+ }, (table) => ({
43
+ l2: index('l2_index').using('hnsw', table.embedding.op('vector_l2_ops')),
44
+ ip: index('ip_index').using('hnsw', table.embedding.op('vector_ip_ops')),
45
+ cosine: index('cosine_index').using('hnsw', table.embedding.op('vector_cosine_ops')),
46
+ l1: index('l1_index').using('hnsw', table.embedding.op('vector_l1_ops')),
47
+ hamming: index('hamming_index').using('hnsw', table.embedding.op('bit_hamming_ops')),
48
+ jaccard: index('jaccard_index').using('hnsw', table.embedding.op('bit_jaccard_ops'))
49
+ }))
50
+ ```
51
+
52
+ Helper functions for queries:
53
+ ```ts
54
+ import { l2Distance, l1Distance, innerProduct, cosineDistance, hammingDistance, jaccardDistance } from 'drizzle-orm'
55
+
56
+ l2Distance(table.column, [3, 1, 2]) // <->
57
+ l1Distance(table.column, [3, 1, 2]) // <+>
58
+ innerProduct(table.column, [3, 1, 2]) // <#>
59
+ cosineDistance(table.column, [3, 1, 2]) // <=>
60
+ hammingDistance(table.column, '101') // <~>
61
+ jaccardDistance(table.column, '101') // <%>
62
+ ```
63
+
64
+ Query examples:
65
+ ```ts
66
+ db.select().from(items).orderBy(l2Distance(items.embedding, [3,1,2]))
67
+ db.select({ distance: l2Distance(items.embedding, [3,1,2]) }).from(items)
68
+ const subquery = db.select({ embedding: items.embedding }).from(items).where(eq(items.id, 1));
69
+ db.select().from(items).orderBy(l2Distance(items.embedding, subquery)).limit(5)
70
+ ```
71
+
72
+ Custom distance functions can be created by replicating the pattern:
73
+ ```ts
74
+ export function l2Distance(column: SQLWrapper | AnyColumn, value: number[] | string[] | TypedQueryBuilder<any> | string): SQL {
75
+ if (is(value, TypedQueryBuilder<any>) || typeof value === 'string') {
76
+ return sql`${column} <-> ${value}`;
77
+ }
78
+ return sql`${column} <-> ${JSON.stringify(value)}`;
79
+ }
80
+ ```
81
+
82
+ ### New PostgreSQL types: point and line
83
+
84
+ **point** type with two modes:
85
+ ```ts
86
+ const items = pgTable('items', {
87
+ point: point('point'), // tuple mode: [1,2]
88
+ pointObj: point('point_xy', { mode: 'xy' }), // xy mode: { x: 1, y: 2 }
89
+ });
90
+ ```
91
+
92
+ **line** type with two modes:
93
+ ```ts
94
+ const items = pgTable('items', {
95
+ line: line('line'), // tuple mode: [1,2,3]
96
+ lineObj: line('line_abc', { mode: 'abc' }), // abc mode: { a: 1, b: 2, c: 3 }
97
+ });
98
+ ```
99
+
100
+ ### PostGIS extension support
101
+
102
+ **geometry** type from postgis:
103
+ ```ts
104
+ const items = pgTable('items', {
105
+ geo: geometry('geo', { type: 'point' }),
106
+ geoObj: geometry('geo_obj', { type: 'point', mode: 'xy' }),
107
+ geoSrid: geometry('geo_options', { type: 'point', mode: 'xy', srid: 4000 }),
108
+ });
109
+ ```
110
+
111
+ Modes: `tuple` (default, maps to [x,y]) and `xy` (maps to { x, y }). Type defaults to `point` but accepts any string.
112
+
113
+ ## Drizzle Kit v0.22.0 Updates
114
+
115
+ ### New type support
116
+ - `point` and `line` from PostgreSQL
117
+ - `vector` from pg_vector extension
118
+ - `geometry` from PostGIS extension
119
+
120
+ ### extensionsFilters config parameter
121
+
122
+ Skip tables created by extensions:
123
+ ```ts
124
+ export default defineConfig({
125
+ dialect: "postgresql",
126
+ extensionsFilters: ["postgis"], // skips geography_columns, geometry_columns, spatial_ref_sys
127
+ })
128
+ ```
129
+
130
+ ### SSL configuration improvements
131
+
132
+ Full SSL parameter support:
133
+ ```ts
134
+ // PostgreSQL
135
+ export default defineConfig({
136
+ dialect: "postgresql",
137
+ dbCredentials: {
138
+ ssl: true, // or "require" | "allow" | "prefer" | "verify-full" | node:tls options
139
+ }
140
+ })
141
+
142
+ // MySQL
143
+ export default defineConfig({
144
+ dialect: "mysql",
145
+ dbCredentials: {
146
+ ssl: "", // string | mysql2 SslOptions
147
+ }
148
+ })
149
+ ```
150
+
151
+ ### Normalized SQLite URLs
152
+
153
+ libsql and better-sqlite3 drivers now accept both file path patterns and normalize them correctly.
154
+
155
+ ### MySQL and SQLite index-as-expression behavior
156
+
157
+ Expressions are no longer escaped in strings, columns are properly handled:
158
+ ```ts
159
+ export const users = sqliteTable('users', {
160
+ id: integer('id').primaryKey(),
161
+ email: text('email').notNull(),
162
+ }, (table) => ({
163
+ emailUniqueIndex: uniqueIndex('emailUniqueIndex').on(sql`lower(${table.email})`),
164
+ }));
165
+
166
+ // Before: CREATE UNIQUE INDEX `emailUniqueIndex` ON `users` (`lower("users"."email")`);
167
+ // Now: CREATE UNIQUE INDEX `emailUniqueIndex` ON `users` (lower("email"));
168
+ ```
169
+
170
+ ### Index limitations
171
+
172
+ Must specify index name manually if using expressions:
173
+ ```ts
174
+ index().on(table.id, table.email) // auto-named, works
175
+ index('my_name').on(table.id, table.email) // works
176
+ index().on(sql`lower(${table.email})`) // error
177
+ index('my_name').on(sql`lower(${table.email})`) // works
178
+ ```
179
+
180
+ Push won't generate statements if these fields change in existing indexes: expressions in `.on()`/`.using()`, `.where()` statements, or `.op()` operator classes. For changes, comment out the index, push, uncomment and modify, then push again. Generate command has no such limitations.
181
+
182
+ ### Bug fixes
183
+ - Multiple constraints not added (only first generated)
184
+ - Drizzle Studio connection termination errors
185
+ - SQLite local migrations execution
186
+ - Unknown '--config' option errors
@@ -0,0 +1,16 @@
1
+ ## TiDB Cloud Serverless Driver Support
2
+
3
+ Added support for TiDB Cloud Serverless driver in v0.31.2.
4
+
5
+ **Usage:**
6
+
7
+ ```ts
8
+ import { connect } from '@tidbcloud/serverless';
9
+ import { drizzle } from 'drizzle-orm/tidb-serverless';
10
+
11
+ const client = connect({ url: '...' });
12
+ const db = drizzle(client);
13
+ await db.select().from(...);
14
+ ```
15
+
16
+ Initialize a TiDB Cloud Serverless client with a connection URL, pass it to `drizzle()` from the `tidb-serverless` module, then use standard Drizzle ORM queries.