@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,79 @@
1
+ ## SQL Update
2
+
3
+ Basic update with `.set()` and `.where()`:
4
+ ```typescript
5
+ await db.update(users)
6
+ .set({ name: 'Mr. Dan' })
7
+ .where(eq(users.name, 'Dan'));
8
+ ```
9
+
10
+ Keys in the set object must match column names. `undefined` values are ignored; pass `null` to set a column to null. SQL expressions can be passed as values:
11
+ ```typescript
12
+ await db.update(users)
13
+ .set({ updatedAt: sql`NOW()` })
14
+ .where(eq(users.name, 'Dan'));
15
+ ```
16
+
17
+ ### Limit (MySQL, SQLite, SingleStore only)
18
+ ```typescript
19
+ await db.update(usersTable).set({ verified: true }).limit(2);
20
+ ```
21
+
22
+ ### Order By
23
+ ```typescript
24
+ import { asc, desc } from 'drizzle-orm';
25
+
26
+ await db.update(usersTable).set({ verified: true }).orderBy(usersTable.name);
27
+ await db.update(usersTable).set({ verified: true }).orderBy(desc(usersTable.name));
28
+ await db.update(usersTable).set({ verified: true }).orderBy(usersTable.name, usersTable.name2);
29
+ await db.update(usersTable).set({ verified: true }).orderBy(asc(usersTable.name), desc(usersTable.name2));
30
+ ```
31
+
32
+ ### Returning (PostgreSQL, SQLite only)
33
+ ```typescript
34
+ const updatedUserId: { updatedId: number }[] = await db.update(users)
35
+ .set({ name: 'Mr. Dan' })
36
+ .where(eq(users.name, 'Dan'))
37
+ .returning({ updatedId: users.id });
38
+ ```
39
+
40
+ ### WITH clause (CTE)
41
+ ```typescript
42
+ const averagePrice = db.$with('average_price').as(
43
+ db.select({ value: sql`avg(${products.price})`.as('value') }).from(products)
44
+ );
45
+
46
+ const result = await db.with(averagePrice)
47
+ .update(products)
48
+ .set({ cheap: true })
49
+ .where(lt(products.price, sql`(select * from ${averagePrice})`))
50
+ .returning({ id: products.id });
51
+ ```
52
+
53
+ ### Update ... FROM (PostgreSQL, SQLite only)
54
+ Join other tables to compute which rows to update and their new values:
55
+ ```typescript
56
+ await db
57
+ .update(users)
58
+ .set({ cityId: cities.id })
59
+ .from(cities)
60
+ .where(and(eq(cities.name, 'Seattle'), eq(users.name, 'John')));
61
+ ```
62
+
63
+ With table aliases:
64
+ ```typescript
65
+ const c = alias(cities, 'c');
66
+ await db
67
+ .update(users)
68
+ .set({ cityId: c.id })
69
+ .from(c);
70
+ ```
71
+
72
+ PostgreSQL only: return columns from joined tables:
73
+ ```typescript
74
+ const updatedUsers = await db
75
+ .update(users)
76
+ .set({ cityId: cities.id })
77
+ .from(cities)
78
+ .returning({ id: users.id, cityName: cities.name });
79
+ ```
@@ -0,0 +1,40 @@
1
+ ## Breaking Changes
2
+
3
+ **Dialect prefix removal**: Remove `:dialect` from drizzle-kit commands. Change `drizzle-kit push:mysql` to `drizzle-kit push`.
4
+
5
+ **drizzle.config.ts updates**:
6
+ - `dialect` is now mandatory: `"postgresql"`, `"mysql"`, or `"sqlite"`
7
+ - `driver` is optional, only use if: `aws-data-api`, `turso`, `d1-http` (WIP), or `expo`
8
+ - Replace `connectionString` or `uri` with `url` in `dbCredentials`
9
+ - New `migrations` object for custom table/schema:
10
+ ```ts
11
+ import { defineConfig } from "drizzle-kit"
12
+ export default defineConfig({
13
+ dialect: "sqlite",
14
+ driver: "turso",
15
+ dbCredentials: { url: "" },
16
+ migrations: { table: "migrations", schema: "public" }
17
+ })
18
+ ```
19
+
20
+ **Snapshot upgrade**: PostgreSQL and SQLite snapshots upgrade to version 6. Run `drizzle-kit up` to upgrade.
21
+
22
+ **Driver auto-selection** (when no driver specified):
23
+ - PostgreSQL: tries `pg` → `postgres` → `@vercel/postgres` → `@neondatabase/serverless`
24
+ - MySQL: tries `mysql2` → `@planetscale/database`
25
+ - SQLite: tries `@libsql/client` → `better-sqlite3`
26
+
27
+ **MySQL schemas removed**: Drizzle Kit no longer handles schema changes for additional schemas/databases.
28
+
29
+ ## New Features
30
+
31
+ **Pull relations**: Drizzle extracts foreign key information and generates `relations.ts` during introspection.
32
+
33
+ **Custom migration names**: Use `drizzle-kit generate --name init_db`
34
+
35
+ **New migrate command**: `drizzle-kit migrate` applies generated migrations directly. By default stores in `__drizzle_migrations` table (PostgreSQL: `drizzle` schema). Customize via `drizzle.config.ts`:
36
+ ```ts
37
+ export default defineConfig({
38
+ migrations: { table: "migrations", schema: "public" }
39
+ })
40
+ ```
@@ -0,0 +1,115 @@
1
+ ## Overview
2
+ `drizzle-valibot` is a plugin for Drizzle ORM that generates Valibot schemas from Drizzle ORM table definitions. Requires `drizzle-valibot@0.3.0+`, Drizzle ORM v0.36.0+, and Valibot v1.0.0-beta.7+.
3
+
4
+ ## Select Schema
5
+ Validates data queried from the database (useful for API responses).
6
+
7
+ ```ts
8
+ import { pgTable, text, integer } from 'drizzle-orm/pg-core';
9
+ import { createSelectSchema } from 'drizzle-valibot';
10
+ import { parse } from 'valibot';
11
+
12
+ const users = pgTable('users', {
13
+ id: integer().generatedAlwaysAsIdentity().primaryKey(),
14
+ name: text().notNull(),
15
+ age: integer().notNull()
16
+ });
17
+
18
+ const userSelectSchema = createSelectSchema(users);
19
+ const rows = await db.select().from(users).limit(1);
20
+ const parsed = parse(userSelectSchema, rows[0]); // { id: number; name: string; age: number }
21
+ ```
22
+
23
+ Works with views and enums:
24
+ ```ts
25
+ const roles = pgEnum('roles', ['admin', 'basic']);
26
+ const rolesSchema = createSelectSchema(roles);
27
+ const parsed = parse(rolesSchema, ...); // 'admin' | 'basic'
28
+
29
+ const usersView = pgView('users_view').as((qb) => qb.select().from(users).where(gt(users.age, 18)));
30
+ const usersViewSchema = createSelectSchema(usersView);
31
+ ```
32
+
33
+ ## Insert Schema
34
+ Validates data before inserting into the database (useful for API requests). Auto-generated columns are excluded.
35
+
36
+ ```ts
37
+ const userInsertSchema = createInsertSchema(users);
38
+ const user = { name: 'Jane', age: 30 };
39
+ const parsed = parse(userInsertSchema, user); // { name: string, age: number }
40
+ await db.insert(users).values(parsed);
41
+ ```
42
+
43
+ ## Update Schema
44
+ Validates data before updating in the database. All fields become optional, and generated columns cannot be updated.
45
+
46
+ ```ts
47
+ const userUpdateSchema = createUpdateSchema(users);
48
+ const user = { age: 35 };
49
+ const parsed = parse(userUpdateSchema, user); // { name?: string | undefined, age?: number | undefined }
50
+ await db.update(users).set(parsed).where(eq(users.name, 'Jane'));
51
+ ```
52
+
53
+ ## Refinements
54
+ All `createSelectSchema`, `createInsertSchema`, and `createUpdateSchema` functions accept an optional second parameter to extend, modify, or overwrite field schemas. Pass a callback function to extend/modify, or a Valibot schema to overwrite.
55
+
56
+ ```ts
57
+ const userSelectSchema = createSelectSchema(users, {
58
+ name: (schema) => pipe(schema, maxLength(20)), // Extends schema
59
+ bio: (schema) => pipe(schema, maxLength(1000)), // Extends before nullability
60
+ preferences: object({ theme: string() }) // Overwrites field including nullability
61
+ });
62
+ ```
63
+
64
+ ## Data Type Reference
65
+ Maps Drizzle ORM column types to Valibot schemas:
66
+
67
+ **Boolean**: `pg.boolean()` → `boolean()`
68
+
69
+ **Date**: `pg.date({ mode: 'date' })`, `pg.timestamp({ mode: 'date' })` → `date()`
70
+
71
+ **String**: `pg.text()`, `pg.varchar()`, `mysql.binary()`, etc. → `string()`
72
+
73
+ **Bit**: `pg.bit({ dimensions: ... })` → `pipe(string(), regex(/^[01]+$/), maxLength(dimensions))`
74
+
75
+ **UUID**: `pg.uuid()` → `pipe(string(), uuid())`
76
+
77
+ **Char**: `pg.char({ length: ... })` → `pipe(string(), length(length))`
78
+
79
+ **Varchar**: `pg.varchar({ length: ... })` → `pipe(string(), maxLength(length))`
80
+
81
+ **MySQL text variants**: `mysql.tinytext()` → `pipe(string(), maxLength(255))`, `mysql.text()` → `maxLength(65_535)`, `mysql.mediumtext()` → `maxLength(16_777_215)`, `mysql.longtext()` → `maxLength(4_294_967_295)`
82
+
83
+ **Enum**: `pg.text({ enum: [...] })` → `enum([...])`
84
+
85
+ **Integer types with range validation**:
86
+ - `mysql.tinyint()` → `pipe(number(), minValue(-128), maxValue(127), integer())`
87
+ - `mysql.tinyint({ unsigned: true })` → `pipe(number(), minValue(0), maxValue(255), integer())`
88
+ - `pg.smallint()` → `pipe(number(), minValue(-32_768), maxValue(32_767), integer())`
89
+ - `mysql.smallint({ unsigned: true })` → `pipe(number(), minValue(0), maxValue(65_535), integer())`
90
+ - `pg.real()`, `mysql.float()` → `pipe(number(), minValue(-8_388_608), maxValue(8_388_607))`
91
+ - `mysql.mediumint()` → `pipe(number(), minValue(-8_388_608), maxValue(8_388_607), integer())`
92
+ - `mysql.float({ unsigned: true })` → `pipe(number(), minValue(0), maxValue(16_777_215))`
93
+ - `mysql.mediumint({ unsigned: true })` → `pipe(number(), minValue(0), maxValue(16_777_215), integer())`
94
+ - `pg.integer()`, `mysql.int()` → `pipe(number(), minValue(-2_147_483_648), maxValue(2_147_483_647), integer())`
95
+ - `mysql.int({ unsigned: true })` → `pipe(number(), minValue(0), maxValue(4_294_967_295), integer())`
96
+ - `pg.doublePrecision()`, `mysql.double()` → `pipe(number(), minValue(-140_737_488_355_328), maxValue(140_737_488_355_327))`
97
+ - `mysql.double({ unsigned: true })` → `pipe(number(), minValue(0), maxValue(281_474_976_710_655))`
98
+ - `pg.bigint({ mode: 'number' })` → `pipe(number(), minValue(-9_007_199_254_740_991), maxValue(9_007_199_254_740_991), integer())`
99
+ - `mysql.serial()` → `pipe(number(), minValue(0), maxValue(9_007_199_254_740_991), integer())`
100
+ - `pg.bigint({ mode: 'bigint' })` → `pipe(bigint(), minValue(-9_223_372_036_854_775_808n), maxValue(9_223_372_036_854_775_807n))`
101
+ - `mysql.bigint({ mode: 'bigint', unsigned: true })` → `pipe(bigint(), minValue(0n), maxValue(18_446_744_073_709_551_615n))`
102
+
103
+ **Year**: `mysql.year()` → `pipe(number(), minValue(1_901), maxValue(2_155), integer())`
104
+
105
+ **Geometry**: `pg.point({ mode: 'tuple' })` → `tuple([number(), number()])`, `pg.point({ mode: 'xy' })` → `object({ x: number(), y: number() })`
106
+
107
+ **Vectors**: `pg.vector({ dimensions: ... })` → `pipe(array(number()), length(dimensions))`
108
+
109
+ **Line**: `pg.line({ mode: 'abc' })` → `object({ a: number(), b: number(), c: number() })`, `pg.line({ mode: 'tuple' })` → `tuple([number(), number(), number()])`
110
+
111
+ **JSON**: `pg.json()`, `pg.jsonb()`, `mysql.json()` → `union([union([string(), number(), boolean(), null_()]), array(any()), record(string(), any())])`
112
+
113
+ **Buffer**: `sqlite.blob({ mode: 'buffer' })` → `custom<Buffer>((v) => v instanceof Buffer)`
114
+
115
+ **Arrays**: `pg.dataType().array(...)` → `pipe(array(baseDataTypeSchema), length(size))`
@@ -0,0 +1,135 @@
1
+ ## Declaring Views
2
+
3
+ Views can be declared in three ways:
4
+ 1. **Inline query builder** - passed directly to `.as()`
5
+ 2. **Standalone query builder** - created separately and passed to `.as()`
6
+ 3. **Raw SQL** - using `sql` operator with explicit column schema
7
+
8
+ ### Basic Declaration (Inline Query Builder)
9
+
10
+ PostgreSQL:
11
+ ```ts
12
+ import { pgTable, pgView, serial, text, timestamp } from "drizzle-orm/pg-core";
13
+
14
+ export const user = pgTable("user", {
15
+ id: serial(),
16
+ name: text(),
17
+ email: text(),
18
+ password: text(),
19
+ role: text().$type<"admin" | "customer">(),
20
+ createdAt: timestamp("created_at"),
21
+ updatedAt: timestamp("updated_at"),
22
+ });
23
+
24
+ export const userView = pgView("user_view").as((qb) => qb.select().from(user));
25
+ export const customersView = pgView("customers_view").as((qb) =>
26
+ qb.select().from(user).where(eq(user.role, "customer"))
27
+ );
28
+ ```
29
+
30
+ MySQL and SQLite use `mysqlView` and `sqliteView` respectively with identical syntax.
31
+
32
+ ### Selecting Specific Columns
33
+
34
+ ```ts
35
+ export const customersView = pgView("customers_view").as((qb) => {
36
+ return qb
37
+ .select({
38
+ id: user.id,
39
+ name: user.name,
40
+ email: user.email,
41
+ })
42
+ .from(user);
43
+ });
44
+ ```
45
+
46
+ ### Standalone Query Builder
47
+
48
+ ```ts
49
+ import { pgTable, pgView, serial, text, timestamp, QueryBuilder } from "drizzle-orm/pg-core";
50
+
51
+ const qb = new QueryBuilder();
52
+
53
+ export const userView = pgView("user_view").as(qb.select().from(user));
54
+ export const customersView = pgView("customers_view").as(
55
+ qb.select().from(user).where(eq(user.role, "customer"))
56
+ );
57
+ ```
58
+
59
+ ### Raw SQL Declaration
60
+
61
+ When query builder syntax is insufficient, use `sql` operator with explicit column schema:
62
+
63
+ ```ts
64
+ const newYorkers = pgView('new_yorkers', {
65
+ id: serial('id').primaryKey(),
66
+ name: text('name').notNull(),
67
+ cityId: integer('city_id').notNull(),
68
+ }).as(sql`select * from ${users} where ${eq(users.cityId, 1)}`);
69
+ ```
70
+
71
+ ## Existing Views
72
+
73
+ For read-only access to existing database views, use `.existing()` to prevent migration generation:
74
+
75
+ ```ts
76
+ export const trimmedUser = pgView("trimmed_user", {
77
+ id: serial("id"),
78
+ name: text("name"),
79
+ email: text("email"),
80
+ }).existing();
81
+ ```
82
+
83
+ ## Materialized Views (PostgreSQL Only)
84
+
85
+ PostgreSQL supports materialized views that persist results in table-like form.
86
+
87
+ ```ts
88
+ const newYorkers = pgMaterializedView('new_yorkers').as((qb) =>
89
+ qb.select().from(users).where(eq(users.cityId, 1))
90
+ );
91
+ ```
92
+
93
+ Refresh at runtime:
94
+ ```ts
95
+ await db.refreshMaterializedView(newYorkers);
96
+ await db.refreshMaterializedView(newYorkers).concurrently();
97
+ await db.refreshMaterializedView(newYorkers).withNoData();
98
+ ```
99
+
100
+ ## Extended Configuration
101
+
102
+ Views support additional options via `.with()`, `.using()`, `.tablespace()`, and `.withNoData()`:
103
+
104
+ ```ts
105
+ const newYorkers = pgView('new_yorkers')
106
+ .with({
107
+ checkOption: 'cascaded',
108
+ securityBarrier: true,
109
+ securityInvoker: true,
110
+ })
111
+ .as((qb) => {
112
+ const sq = qb
113
+ .$with('sq')
114
+ .as(
115
+ qb.select({ userId: users.id, cityId: cities.id })
116
+ .from(users)
117
+ .leftJoin(cities, eq(cities.id, users.homeCity))
118
+ .where(sql`${users.age1} > 18`),
119
+ );
120
+ return qb.with(sq).select().from(sq).where(sql`${users.homeCity} = 1`);
121
+ });
122
+
123
+ const newYorkers2 = pgMaterializedView('new_yorkers')
124
+ .using('btree')
125
+ .with({
126
+ fillfactor: 90,
127
+ toast_tuple_target: 0.5,
128
+ autovacuum_enabled: true,
129
+ })
130
+ .tablespace('custom_tablespace')
131
+ .withNoData()
132
+ .as((qb) => { /* ... */ });
133
+ ```
134
+
135
+ **Supported databases**: PostgreSQL, SQLite, MySQL (not SingleStore)
@@ -0,0 +1,66 @@
1
+ ## Headless ORM Philosophy
2
+ Drizzle is a headless TypeScript ORM - a library and collection of opt-in tools that lets you build projects with it, not around it. Unlike data frameworks (Django-like, Spring-like), Drizzle doesn't force your project structure.
3
+
4
+ ## SQL-Like Query API
5
+ Drizzle embraces SQL at its core. If you know SQL, you know Drizzle - zero to minimal learning curve. It provides SQL schema declaration, SQL-like queries, automatic migrations, and a relational query API.
6
+
7
+ Example - SQL-like queries:
8
+ ```typescript
9
+ await db
10
+ .select()
11
+ .from(countries)
12
+ .leftJoin(cities, eq(cities.countryId, countries.id))
13
+ .where(eq(countries.id, 10))
14
+ ```
15
+
16
+ Schema definition:
17
+ ```typescript
18
+ export const countries = pgTable('countries', {
19
+ id: serial('id').primaryKey(),
20
+ name: varchar('name', { length: 256 }),
21
+ });
22
+
23
+ export const cities = pgTable('cities', {
24
+ id: serial('id').primaryKey(),
25
+ name: varchar('name', { length: 256 }),
26
+ countryId: integer('country_id').references(() => countries.id),
27
+ });
28
+ ```
29
+
30
+ Generated migration:
31
+ ```sql
32
+ CREATE TABLE IF NOT EXISTS "countries" (
33
+ "id" serial PRIMARY KEY NOT NULL,
34
+ "name" varchar(256)
35
+ );
36
+
37
+ CREATE TABLE IF NOT EXISTS "cities" (
38
+ "id" serial PRIMARY KEY NOT NULL,
39
+ "name" varchar(256),
40
+ "country_id" integer
41
+ );
42
+
43
+ ALTER TABLE "cities" ADD CONSTRAINT "cities_country_id_countries_id_fk" FOREIGN KEY ("country_id") REFERENCES "countries"("id") ON DELETE no action ON UPDATE no action;
44
+ ```
45
+
46
+ ## Relational Query API
47
+ For common scenarios where SQL-like queries aren't optimal, Drizzle provides a Queries API for fetching nested relational data conveniently and performantly. Always outputs exactly 1 SQL query, making it serverless-database friendly.
48
+
49
+ ```typescript
50
+ const result = await db.query.users.findMany({
51
+ with: {
52
+ posts: true
53
+ },
54
+ });
55
+ ```
56
+
57
+ ## Serverless-Ready Design
58
+ Drizzle has zero dependencies. It's dialect-specific, slim, performant, and serverless-ready by design. Supports PostgreSQL, MySQL, and SQLite through industry-standard database drivers.
59
+
60
+ ## Key Characteristics
61
+ - Lightweight, performant, typesafe
62
+ - Non-intrusive to project structure
63
+ - Both SQL-like and relational query APIs
64
+ - Zero dependencies
65
+ - Serverless-ready
66
+ - Full SQL dialect support
@@ -0,0 +1,113 @@
1
+ ## Overview
2
+ `drizzle-zod` is a plugin that generates Zod schemas from Drizzle ORM schemas for validation.
3
+
4
+ **Requirements:** drizzle-zod@0.6.0+, Drizzle ORM v0.36.0+, Zod v3.25.1+
5
+
6
+ ## Select Schema
7
+ Validates data queried from the database (API responses).
8
+
9
+ ```ts
10
+ import { pgTable, text, integer } from 'drizzle-orm/pg-core';
11
+ import { createSelectSchema } from 'drizzle-zod';
12
+
13
+ const users = pgTable('users', {
14
+ id: integer().generatedAlwaysAsIdentity().primaryKey(),
15
+ name: text().notNull(),
16
+ age: integer().notNull()
17
+ });
18
+
19
+ const userSelectSchema = createSelectSchema(users);
20
+ const rows = await db.select().from(users).limit(1);
21
+ const parsed = userSelectSchema.parse(rows[0]); // { id: number; name: string; age: number }
22
+ ```
23
+
24
+ Supports views and enums:
25
+ ```ts
26
+ const roles = pgEnum('roles', ['admin', 'basic']);
27
+ const rolesSchema = createSelectSchema(roles);
28
+
29
+ const usersView = pgView('users_view').as((qb) => qb.select().from(users).where(gt(users.age, 18)));
30
+ const usersViewSchema = createSelectSchema(usersView);
31
+ ```
32
+
33
+ ## Insert Schema
34
+ Validates data to be inserted (API requests).
35
+
36
+ ```ts
37
+ import { createInsertSchema } from 'drizzle-zod';
38
+
39
+ const userInsertSchema = createInsertSchema(users);
40
+ const user = { name: 'Jane', age: 30 };
41
+ const parsed = userInsertSchema.parse(user); // { name: string, age: number }
42
+ await db.insert(users).values(parsed);
43
+ ```
44
+
45
+ ## Update Schema
46
+ Validates data to be updated. Generated columns cannot be updated.
47
+
48
+ ```ts
49
+ import { createUpdateSchema } from 'drizzle-zod';
50
+
51
+ const userUpdateSchema = createUpdateSchema(users);
52
+ const user = { age: 35 };
53
+ const parsed = userUpdateSchema.parse(user); // { name?: string | undefined, age?: number | undefined }
54
+ await db.update(users).set(parsed).where(eq(users.name, 'Jane'));
55
+ ```
56
+
57
+ ## Refinements
58
+ Extend, modify, or overwrite field schemas via optional parameter:
59
+
60
+ ```ts
61
+ const userSelectSchema = createSelectSchema(users, {
62
+ name: (schema) => schema.max(20), // Extends schema
63
+ bio: (schema) => schema.max(1000), // Extends before nullability
64
+ preferences: z.object({ theme: z.string() }) // Overwrites field
65
+ });
66
+ ```
67
+
68
+ ## Factory Functions
69
+ `createSchemaFactory` for advanced use cases.
70
+
71
+ **Extended Zod instance:**
72
+ ```ts
73
+ import { createSchemaFactory } from 'drizzle-zod';
74
+ import { z } from '@hono/zod-openapi';
75
+
76
+ const { createInsertSchema } = createSchemaFactory({ zodInstance: z });
77
+ const userInsertSchema = createInsertSchema(users, {
78
+ name: (schema) => schema.openapi({ example: 'John' })
79
+ });
80
+ ```
81
+
82
+ **Type coercion:**
83
+ ```ts
84
+ const { createInsertSchema } = createSchemaFactory({
85
+ coerce: { date: true } // or coerce: true for all types
86
+ });
87
+ const userInsertSchema = createInsertSchema(users);
88
+ // createdAt: z.coerce.date()
89
+ ```
90
+
91
+ ## Data Type Reference
92
+ Comprehensive mapping of Drizzle column types to Zod schemas:
93
+
94
+ - **Boolean:** `pg.boolean()` → `z.boolean()`
95
+ - **Date:** `pg.date({ mode: 'date' })`, `pg.timestamp({ mode: 'date' })` → `z.date()`
96
+ - **String:** `pg.text()`, `pg.varchar()`, `mysql.binary()` → `z.string()`
97
+ - **UUID:** `pg.uuid()` → `z.string().uuid()`
98
+ - **Char:** `pg.char({ length: 10 })` → `z.string().length(10)`
99
+ - **Varchar:** `pg.varchar({ length: 100 })` → `z.string().max(100)`
100
+ - **MySQL text variants:** `tinytext` → `z.string().max(255)`, `text` → `z.string().max(65_535)`, `mediumtext` → `z.string().max(16_777_215)`, `longtext` → `z.string().max(4_294_967_295)`
101
+ - **Enum:** `pg.text({ enum: ['a', 'b'] })` → `z.enum(['a', 'b'])`
102
+ - **Bit:** `pg.bit({ dimensions: 8 })` → `z.string().regex(/^[01]+$/).max(8)`
103
+ - **Integer types:** `pg.smallint()` → `z.number().min(-32_768).max(32_767).int()`, `pg.integer()` → `z.number().min(-2_147_483_648).max(2_147_483_647).int()`, `mysql.tinyint()` → `z.number().min(-128).max(127).int()`, unsigned variants adjust min to 0
104
+ - **Float/Double:** `pg.real()`, `mysql.float()` → `z.number()` with appropriate bit limits
105
+ - **BigInt:** `pg.bigint({ mode: 'bigint' })` → `z.bigint().min(-9_223_372_036_854_775_808n).max(9_223_372_036_854_775_807n)`, unsigned → `z.bigint().min(0).max(18_446_744_073_709_551_615n)`
106
+ - **BigInt (number mode):** `pg.bigint({ mode: 'number' })` → `z.number().min(-9_007_199_254_740_991).max(9_007_199_254_740_991).int()`
107
+ - **Year:** `mysql.year()` → `z.number().min(1_901).max(2_155).int()`
108
+ - **Geometry:** `pg.point({ mode: 'tuple' })` → `z.tuple([z.number(), z.number()])`, `pg.point({ mode: 'xy' })` → `z.object({ x: z.number(), y: z.number() })`
109
+ - **Vector:** `pg.vector({ dimensions: 3 })` → `z.array(z.number()).length(3)`
110
+ - **Line:** `pg.line({ mode: 'abc' })` → `z.object({ a: z.number(), b: z.number(), c: z.number() })`, `pg.line({ mode: 'tuple' })` → `z.tuple([z.number(), z.number(), z.number()])`
111
+ - **JSON:** `pg.json()`, `pg.jsonb()` → `z.union([z.union([z.string(), z.number(), z.boolean(), z.null()]), z.record(z.any()), z.array(z.any())])`
112
+ - **Buffer:** `sqlite.blob({ mode: 'buffer' })` → `z.custom<Buffer>((v) => v instanceof Buffer)`
113
+ - **Array:** `pg.dataType().array(size)` → `z.array(baseDataTypeSchema).length(size)`
@@ -0,0 +1,60 @@
1
+ This is the complete Drizzle ORM documentation covering all aspects of the library. It includes:
2
+
3
+ **Core Concepts**: Drizzle is a headless TypeScript ORM with SQL-like and relational query APIs, zero dependencies, and serverless-ready design. It supports PostgreSQL, MySQL, SQLite, and SingleStore.
4
+
5
+ **Schema Definition**: Define tables using dialect-specific functions (pgTable, mysqlTable, sqliteTable) with typed columns. Supports constraints (NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK, DEFAULT), indexes, and relations. PostgreSQL supports schemas via pgSchema, MySQL schemas are databases, SQLite has no schemas.
6
+
7
+ **Column Types**: Comprehensive type system across all databases including numeric (int, serial, bigint, decimal, real), string (text, varchar, char), boolean, date/time (date, timestamp, time), JSON, arrays (PostgreSQL), and specialized types (UUID, point, geometry, vector, enum). Supports type inference with `.$type<T>()` and runtime defaults via `.$defaultFn()` and `.$onUpdate()`.
8
+
9
+ **Query APIs**: Two approaches - SQL-like syntax mirroring SQL (select/insert/update/delete with joins, filters, aggregations) and Relational Queries API for nested data fetching. Both are type-safe and generate exactly one SQL statement.
10
+
11
+ **Filtering & Operators**: Comparison (eq, ne, gt, gte, lt, lte), existence (exists, notExists), null checks (isNull, isNotNull), arrays (inArray, notInArray), ranges (between, notBetween), patterns (like, ilike), logical (not, and, or), and PostgreSQL-specific array operators (arrayContains, arrayContained, arrayOverlaps).
12
+
13
+ **Advanced Queries**: CTEs (WITH clauses), subqueries, aggregations (count, sum, avg, max, min with distinct variants), pagination (limit/offset and cursor-based), joins (left/right/inner/full/cross with lateral variants), set operations (UNION, INTERSECT, EXCEPT with ALL variants), and full-text search (PostgreSQL with tsvector/tsquery, weighted multi-column search, ranking).
14
+
15
+ **Mutations**: Insert (single/multiple rows, returning, $returningId for MySQL/SingleStore, onConflict/onDuplicate for upserts), update (with set, where, limit, orderBy, returning, FROM joins), delete (with where, limit, orderBy, returning). All support WITH clauses.
16
+
17
+ **Relationships**: Define one-to-one, one-to-many, and many-to-many relations using one() and many() operators. Relations are application-level abstractions independent from database foreign keys. Foreign key actions (CASCADE, RESTRICT, NO ACTION, SET NULL, SET DEFAULT) control delete/update behavior.
18
+
19
+ **Database Setup**: Comprehensive guides for 30+ platforms including PostgreSQL (node-postgres, postgres.js), MySQL (mysql2), SQLite (libsql, better-sqlite3, bun:sqlite, expo-sqlite, op-sqlite), serverless options (Neon, Supabase, Vercel Postgres, PlanetScale, Turso, Cloudflare D1), edge functions (Netlify, Supabase, Vercel), and specialized platforms (Xata, Nile, TiDB, PGLite, Prisma Postgres).
20
+
21
+ **Drizzle Kit**: CLI tool for migrations with commands: generate (create SQL from schema changes), migrate (apply migrations), push (sync schema directly), pull (introspect existing database), studio (local database browser), check (validate migration history), up (upgrade snapshots), export (output DDL). Configured via drizzle.config.ts with dialect, schema paths, database credentials, and optional filters.
22
+
23
+ **Migrations**: Six strategies - database-first (pull), codebase-first with direct push, SQL file generation with CLI/runtime application, manual application, or export for external tools. Supports custom migration names, empty migrations for manual SQL, and custom migrations table/schema configuration.
24
+
25
+ **Advanced Features**:
26
+ - Prepared statements for performance with placeholders
27
+ - Transactions with nested savepoints, rollback conditions, and dialect-specific isolation levels
28
+ - Read replicas with automatic routing via withReplicas()
29
+ - Row-Level Security (PostgreSQL) with policies, roles, and provider support (Neon, Supabase)
30
+ - Batch API for LibSQL, Neon, D1 (multiple statements in single call)
31
+ - Query caching with Upstash Redis or custom implementation
32
+ - Dynamic query building with .$dynamic() for reusable functions
33
+ - Sequences (PostgreSQL) for auto-incrementing IDs
34
+ - Generated columns (PostgreSQL STORED, MySQL/SQLite STORED/VIRTUAL)
35
+ - Views (inline/standalone/raw SQL, materialized views for PostgreSQL)
36
+ - Custom types via customType() with toDriver/fromDriver mapping
37
+ - HTTP proxy driver for custom database communication
38
+ - Logging configuration with DefaultLogger or custom Logger
39
+ - Multi-project schema namespacing with pgTableCreator
40
+ - Type helpers (InferSelectModel, InferInsertModel, getTableColumns, getTableConfig)
41
+ - Mock driver for testing
42
+
43
+ **Validation Plugins**: Generate validation schemas from Drizzle tables:
44
+ - Zod (createSelectSchema, createInsertSchema, createUpdateSchema with refinements)
45
+ - Valibot (same API as Zod)
46
+ - Typebox (same API)
47
+ - Arktype (same API)
48
+ - All support field refinements and comprehensive type mappings
49
+
50
+ **Patterns & Recipes**: Conditional filtering, counting rows, column selection, parent-child queries, pagination (limit/offset and cursor-based), incrementing/decrementing, toggling booleans, bulk updates with CASE, upserts, full-text search, vector similarity search, geospatial queries (point distance, rectangular boundaries, PostGIS), timestamp defaults, empty array defaults, case-insensitive unique emails, seeding with related entities.
51
+
52
+ **Seeding**: drizzle-seed for deterministic fake data generation with seedable pRNG. 30+ generators (numeric, string, person, location, business, geometric) with options for uniqueness, ranges, arrays. Supports weighted distributions, related entity creation, and versioning for reproducible outputs.
53
+
54
+ **Ecosystem**: GraphQL schema generation (drizzle-graphql), Prisma extension for native Drizzle integration, ESLint plugin with enforce-delete-with-where and enforce-update-with-where rules.
55
+
56
+ **Migration Guides**: Step-by-step guides from Prisma, Sequelize, and TypeORM to Drizzle with query pattern replacements.
57
+
58
+ **Getting Started**: Quick start with PostgreSQL, edge function integration (Netlify, Supabase, Vercel), database provider guides (Neon, Supabase, Turso, Vercel Postgres, Xata, Nile), and complete Next.js todo app tutorial.
59
+
60
+ **Release Notes**: Evolution from v0.11.0 through v0.32.2 documenting feature additions including schema constraints, query building, drivers, timestamp handling, advanced features (pg_vector, PostGIS, prepared statements, batch API, caching, dynamic queries, sequences, generated columns).
package/package.json ADDED
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "@lunarhue/expo-wa-sqlite",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "main": "src/index.ts",
6
+ "exports": {
7
+ ".": "./src/index.ts"
8
+ },
9
+ "dependencies": {
10
+ "@lunarhue/wa-sqlite": "1.0.14"
11
+ },
12
+ "peerDependencies": {
13
+ "drizzle-orm": "*",
14
+ "expo": "*",
15
+ "react": "*"
16
+ },
17
+ "devDependencies": {
18
+ "@types/react": "^19.2.14",
19
+ "typescript": "^5.3.3"
20
+ },
21
+ "scripts": {
22
+ "build": "tsc -p tsconfig.json"
23
+ }
24
+ }