@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,69 @@
1
+ ## Headless TypeScript ORM
2
+
3
+ Drizzle is a headless TypeScript ORM designed to let you build projects your way without forcing a specific structure. Unlike traditional data frameworks, Drizzle doesn't require building projects around it.
4
+
5
+ ### Core Philosophy
6
+
7
+ **SQL-like API**: If you know SQL, you know Drizzle. The library embraces SQL rather than abstracting it away, eliminating the double learning curve of learning both SQL and a framework API.
8
+
9
+ **Relational Query API**: For common scenarios where SQL-like queries aren't optimal, Drizzle provides a Queries API for fetching nested relational data conveniently. Drizzle always outputs exactly 1 SQL query, making it serverless-friendly.
10
+
11
+ ### Key Features
12
+
13
+ - **Dual Query APIs**: Both SQL-like and relational query interfaces
14
+ - **Schema Definition**: Define and manage database schemas in TypeScript
15
+ - **Automatic Migrations**: Generate migrations from schema changes
16
+ - **Zero Dependencies**: 31KB slim library, serverless-ready by design
17
+ - **Multi-Database Support**: PostgreSQL, MySQL, SQLite, SingleStore with native driver support
18
+ - **Type-Safe**: Full TypeScript support
19
+
20
+ ### Examples
21
+
22
+ Schema definition:
23
+ ```typescript
24
+ export const countries = pgTable('countries', {
25
+ id: serial('id').primaryKey(),
26
+ name: varchar('name', { length: 256 }),
27
+ });
28
+
29
+ export const cities = pgTable('cities', {
30
+ id: serial('id').primaryKey(),
31
+ name: varchar('name', { length: 256 }),
32
+ countryId: integer('country_id').references(() => countries.id),
33
+ });
34
+ ```
35
+
36
+ SQL-like query:
37
+ ```typescript
38
+ await db
39
+ .select()
40
+ .from(countries)
41
+ .leftJoin(cities, eq(cities.countryId, countries.id))
42
+ .where(eq(countries.id, 10))
43
+ ```
44
+
45
+ Relational query:
46
+ ```typescript
47
+ const result = await db.query.users.findMany({
48
+ with: {
49
+ posts: true
50
+ },
51
+ });
52
+ ```
53
+
54
+ Generated migration:
55
+ ```sql
56
+ CREATE TABLE IF NOT EXISTS "countries" (
57
+ "id" serial PRIMARY KEY NOT NULL,
58
+ "name" varchar(256)
59
+ );
60
+
61
+ CREATE TABLE IF NOT EXISTS "cities" (
62
+ "id" serial PRIMARY KEY NOT NULL,
63
+ "name" varchar(256),
64
+ "country_id" integer
65
+ );
66
+
67
+ ALTER TABLE "cities" ADD CONSTRAINT "cities_country_id_countries_id_fk"
68
+ FOREIGN KEY ("country_id") REFERENCES "countries"("id");
69
+ ```
@@ -0,0 +1,71 @@
1
+ ## PostgreSQL Setup
2
+
3
+ Drizzle supports PostgreSQL via two drivers: `node-postgres` (pg) and `postgres.js`.
4
+
5
+ ### Driver Differences
6
+ - **node-postgres**: Can install `pg-native` for ~10% speed boost; supports per-query type parsers without global patching
7
+ - **postgres.js**: Uses prepared statements by default (may need to opt out in AWS environments)
8
+
9
+ ### node-postgres Setup
10
+
11
+ Install packages:
12
+ ```
13
+ drizzle-orm pg
14
+ -D drizzle-kit @types/pg
15
+ ```
16
+
17
+ Initialize with connection string:
18
+ ```typescript
19
+ import { drizzle } from 'drizzle-orm/node-postgres';
20
+ const db = drizzle(process.env.DATABASE_URL);
21
+ const result = await db.execute('select 1');
22
+ ```
23
+
24
+ With config options:
25
+ ```typescript
26
+ const db = drizzle({
27
+ connection: {
28
+ connectionString: process.env.DATABASE_URL,
29
+ ssl: true
30
+ }
31
+ });
32
+ ```
33
+
34
+ With existing Pool:
35
+ ```typescript
36
+ import { Pool } from "pg";
37
+ const pool = new Pool({ connectionString: process.env.DATABASE_URL });
38
+ const db = drizzle({ client: pool });
39
+ ```
40
+
41
+ ### postgres.js Setup
42
+
43
+ Install packages:
44
+ ```
45
+ drizzle-orm postgres
46
+ -D drizzle-kit
47
+ ```
48
+
49
+ Initialize with connection string:
50
+ ```typescript
51
+ import { drizzle } from 'drizzle-orm/postgres-js';
52
+ const db = drizzle(process.env.DATABASE_URL);
53
+ const result = await db.execute('select 1');
54
+ ```
55
+
56
+ With config options:
57
+ ```typescript
58
+ const db = drizzle({
59
+ connection: {
60
+ url: process.env.DATABASE_URL,
61
+ ssl: true
62
+ }
63
+ });
64
+ ```
65
+
66
+ With existing client:
67
+ ```typescript
68
+ import postgres from 'postgres';
69
+ const queryClient = postgres(process.env.DATABASE_URL);
70
+ const db = drizzle({ client: queryClient });
71
+ ```
@@ -0,0 +1,93 @@
1
+ ## pg_vector
2
+
3
+ Vector similarity search extension for PostgreSQL. Store vectors alongside relational data with support for exact and approximate nearest neighbor search, multiple vector types (single-precision, half-precision, binary, sparse), and distance metrics (L2, inner product, cosine, L1, Hamming, Jaccard).
4
+
5
+ **Column Types:**
6
+ ```ts
7
+ const table = pgTable('table', {
8
+ embedding: vector({ dimensions: 3 })
9
+ })
10
+ ```
11
+
12
+ **Indexes:**
13
+ ```ts
14
+ const table = pgTable('items', {
15
+ embedding: vector({ dimensions: 3 })
16
+ }, (table) => [
17
+ index('l2_index').using('hnsw', table.embedding.op('vector_l2_ops')),
18
+ index('ip_index').using('hnsw', table.embedding.op('vector_ip_ops')),
19
+ index('cosine_index').using('hnsw', table.embedding.op('vector_cosine_ops')),
20
+ index('l1_index').using('hnsw', table.embedding.op('vector_l1_ops')),
21
+ index('hamming_index').using('hnsw', table.embedding.op('bit_hamming_ops')),
22
+ index('jaccard_index').using('hnsw', table.embedding.op('bit_jaccard_ops'))
23
+ ])
24
+ ```
25
+
26
+ **Helper Functions:**
27
+ ```ts
28
+ import { l2Distance, l1Distance, innerProduct, cosineDistance, hammingDistance, jaccardDistance } from 'drizzle-orm'
29
+
30
+ l2Distance(table.column, [3, 1, 2]) // <->
31
+ l1Distance(table.column, [3, 1, 2]) // <+>
32
+ innerProduct(table.column, [3, 1, 2]) // <#>
33
+ cosineDistance(table.column, [3, 1, 2]) // <=>
34
+ hammingDistance(table.column, '101') // <~>
35
+ jaccardDistance(table.column, '101') // <%>
36
+ ```
37
+
38
+ Custom distance functions can be created by replicating the pattern:
39
+ ```ts
40
+ export function l2Distance(
41
+ column: SQLWrapper | AnyColumn,
42
+ value: number[] | string[] | TypedQueryBuilder<any> | string,
43
+ ): SQL {
44
+ if (is(value, TypedQueryBuilder<any>) || typeof value === 'string') {
45
+ return sql`${column} <-> ${value}`;
46
+ }
47
+ return sql`${column} <-> ${JSON.stringify(value)}`;
48
+ }
49
+ ```
50
+
51
+ **Query Examples:**
52
+ ```ts
53
+ // Nearest neighbors
54
+ db.select().from(items).orderBy(l2Distance(items.embedding, [3,1,2])).limit(5)
55
+
56
+ // Distance calculation
57
+ db.select({ distance: l2Distance(items.embedding, [3,1,2]) }).from(items)
58
+
59
+ // Subquery distance
60
+ const subquery = db.select({ embedding: items.embedding }).from(items).where(eq(items.id, 1));
61
+ db.select().from(items).orderBy(l2Distance(items.embedding, subquery)).limit(5)
62
+
63
+ // Computed distance
64
+ db.select({ innerProduct: sql`(${innerProduct(items.embedding, [3,1,2])}) * -1` }).from(items)
65
+ ```
66
+
67
+ ## PostGIS
68
+
69
+ Geospatial extension for PostgreSQL. Adds support for storing, indexing, and querying geographic data.
70
+
71
+ **Column Types:**
72
+ ```ts
73
+ const items = pgTable('items', {
74
+ geo: geometry('geo', { type: 'point' }),
75
+ geoObj: geometry('geo_obj', { type: 'point', mode: 'xy' }),
76
+ geoSrid: geometry('geo_options', { type: 'point', mode: 'xy', srid: 4000 }),
77
+ });
78
+ ```
79
+
80
+ **Mode:** `tuple` (default, maps to [x,y]) or `xy` (maps to {x, y} object)
81
+
82
+ **Type:** Predefined `point` type available; any string can be used for other PostGIS types
83
+
84
+ **Indexes:**
85
+ ```ts
86
+ const table = pgTable('table', {
87
+ geo: geometry({ type: 'point' }),
88
+ }, (table) => [
89
+ index('custom_idx').using('gist', table.geo)
90
+ ])
91
+ ```
92
+
93
+ Note: Use `extensionsFilters` in drizzle config to exclude PostGIS tables from introspect/push commands.
@@ -0,0 +1,77 @@
1
+ ## Query Performance with Prepared Statements
2
+
3
+ Drizzle ORM is a thin TypeScript layer on top of SQL with minimal overhead. To achieve near-zero overhead, use prepared statements.
4
+
5
+ ### How Query Execution Works
6
+ When running a query:
7
+ 1. Query builder configurations are concatenated into an SQL string
8
+ 2. String and parameters are sent to the database driver
9
+ 3. Driver compiles SQL to binary executable format and sends to database
10
+
11
+ With prepared statements, SQL concatenation happens once on the Drizzle side, allowing the database driver to reuse the precompiled binary SQL instead of parsing the query repeatedly. This provides extreme performance benefits, especially for large SQL queries.
12
+
13
+ Different database drivers support prepared statements differently. Drizzle ORM can sometimes outperform even the better-sqlite3 driver.
14
+
15
+ ### Prepared Statement Usage
16
+
17
+ **PostgreSQL:**
18
+ ```typescript
19
+ const db = drizzle(...);
20
+ const prepared = db.select().from(customers).prepare("statement_name");
21
+ const res1 = await prepared.execute();
22
+ const res2 = await prepared.execute();
23
+ ```
24
+
25
+ **MySQL:**
26
+ ```typescript
27
+ const prepared = db.select().from(customers).prepare();
28
+ const res1 = await prepared.execute();
29
+ const res2 = await prepared.execute();
30
+ ```
31
+
32
+ **SQLite:**
33
+ ```typescript
34
+ const prepared = db.select().from(customers).prepare();
35
+ const res1 = prepared.all();
36
+ const res2 = prepared.all();
37
+ ```
38
+
39
+ **SingleStore:**
40
+ ```typescript
41
+ const prepared = db.select().from(customers).prepare();
42
+ const res1 = await prepared.execute();
43
+ const res2 = await prepared.execute();
44
+ ```
45
+
46
+ ### Placeholders for Dynamic Values
47
+
48
+ Use `sql.placeholder(...)` to embed dynamic runtime values:
49
+
50
+ ```typescript
51
+ import { sql } from "drizzle-orm";
52
+
53
+ // Simple placeholder
54
+ const p1 = db
55
+ .select()
56
+ .from(customers)
57
+ .where(eq(customers.id, sql.placeholder('id')))
58
+ .prepare("p1");
59
+
60
+ await p1.execute({ id: 10 }); // SELECT * FROM customers WHERE id = 10
61
+ await p1.execute({ id: 12 }); // SELECT * FROM customers WHERE id = 12
62
+
63
+ // Complex placeholder with SQL functions
64
+ const p2 = db
65
+ .select()
66
+ .from(customers)
67
+ .where(sql`lower(${customers.name}) like ${sql.placeholder('name')}`)
68
+ .prepare("p2");
69
+
70
+ await p2.execute({ name: '%an%' }); // SELECT * FROM customers WHERE lower(name) like '%an%'
71
+ ```
72
+
73
+ For SQLite, use `.get()` and `.all()` instead of `.execute()`:
74
+ ```typescript
75
+ p1.get({ id: 10 });
76
+ p2.all({ name: '%an%' });
77
+ ```
@@ -0,0 +1,46 @@
1
+ ## Drizzle Extension for Prisma
2
+
3
+ Allows using Drizzle alongside Prisma in existing projects by extending the Prisma client with Drizzle API, reusing the same DB connection.
4
+
5
+ ### Setup
6
+
7
+ 1. Install dependencies:
8
+ ```bash
9
+ npm install drizzle-orm
10
+ npm install -D drizzle-prisma-generator
11
+ ```
12
+
13
+ 2. Add generator to `schema.prisma`:
14
+ ```prisma
15
+ generator drizzle {
16
+ provider = "drizzle-prisma-generator"
17
+ output = "./drizzle"
18
+ }
19
+ ```
20
+
21
+ 3. Generate schema:
22
+ ```bash
23
+ prisma generate
24
+ ```
25
+
26
+ 4. Extend Prisma client (PostgreSQL example; also available for MySQL and SQLite):
27
+ ```ts
28
+ import { PrismaClient } from '@prisma/client';
29
+ import { drizzle } from 'drizzle-orm/prisma/pg';
30
+
31
+ const prisma = new PrismaClient().$extends(drizzle());
32
+ ```
33
+
34
+ 5. Use Drizzle queries via `prisma.$drizzle`:
35
+ ```ts
36
+ import { User } from './drizzle';
37
+
38
+ await prisma.$drizzle.insert().into(User).values({ email: 'sorenbs@drizzle.team', name: 'Søren' });
39
+ const users = await prisma.$drizzle.select().from(User);
40
+ ```
41
+
42
+ ### Limitations
43
+
44
+ - Relational queries not supported (Prisma driver limitation with array format results)
45
+ - SQLite: `.values()` not supported
46
+ - Prepared statements: `.prepare()` builds SQL on Drizzle side only, no Prisma API for prepared queries
@@ -0,0 +1,134 @@
1
+ ## Purpose
2
+ `drizzle-kit pull` introspects an existing database schema and generates a TypeScript Drizzle schema file (`schema.ts`). It's designed for database-first migration approaches where the database schema is managed outside the TypeScript project.
3
+
4
+ ## How It Works
5
+ 1. Pulls database schema (DDL) from an existing database
6
+ 2. Generates `schema.ts` file with Drizzle schema definitions
7
+ 3. Saves output to the `out` folder (default: `./drizzle`)
8
+
9
+ Example flow:
10
+ ```
11
+ Database: CREATE TABLE "users" ("id" SERIAL PRIMARY KEY, "name" TEXT, "email" TEXT UNIQUE);
12
+
13
+ Generated schema.ts:
14
+ import * as p from "drizzle-orm/pg-core";
15
+ export const users = p.pgTable("users", {
16
+ id: p.serial().primaryKey(),
17
+ name: p.text(),
18
+ email: p.text().unique(),
19
+ });
20
+ ```
21
+
22
+ ## Configuration
23
+ Requires `dialect` and database connection info via config file or CLI:
24
+
25
+ **Config file approach:**
26
+ ```ts
27
+ // drizzle.config.ts
28
+ import { defineConfig } from "drizzle-kit";
29
+ export default defineConfig({
30
+ dialect: "postgresql",
31
+ dbCredentials: {
32
+ url: "postgresql://user:password@host:port/dbname",
33
+ },
34
+ });
35
+ ```
36
+ ```shell
37
+ npx drizzle-kit pull
38
+ ```
39
+
40
+ **CLI approach:**
41
+ ```shell
42
+ npx drizzle-kit pull --dialect=postgresql --url=postgresql://user:password@host:port/dbname
43
+ ```
44
+
45
+ ## Multiple Config Files
46
+ Support for multiple configuration files in one project for different database stages:
47
+ ```shell
48
+ npx drizzle-kit pull --config=drizzle-dev.config.ts
49
+ npx drizzle-kit pull --config=drizzle-prod.config.ts
50
+ ```
51
+
52
+ ## Database Driver Specification
53
+ Drizzle Kit automatically picks the database driver based on `dialect`. For exceptions like AWS Data API, PGLite, and Cloudflare D1 HTTP, explicitly specify the `driver` param:
54
+
55
+ ```ts
56
+ // AWS Data API
57
+ export default defineConfig({
58
+ dialect: "postgresql",
59
+ driver: "aws-data-api",
60
+ dbCredentials: {
61
+ database: "database",
62
+ resourceArn: "resourceArn",
63
+ secretArn: "secretArn",
64
+ },
65
+ });
66
+
67
+ // PGLite
68
+ export default defineConfig({
69
+ dialect: "postgresql",
70
+ driver: "pglite",
71
+ dbCredentials: {
72
+ url: ":memory:" // or "./database/"
73
+ },
74
+ });
75
+
76
+ // Cloudflare D1 HTTP
77
+ export default defineConfig({
78
+ dialect: "sqlite",
79
+ driver: "d1-http",
80
+ dbCredentials: {
81
+ accountId: "accountId",
82
+ databaseId: "databaseId",
83
+ token: "token",
84
+ },
85
+ });
86
+ ```
87
+
88
+ Note: Expo SQLite and OP SQLite cannot be used with `pull` as they are on-device databases.
89
+
90
+ ## Filtering Tables, Schemas, and Extensions
91
+ Configure which tables, schemas, and extensions to manage:
92
+
93
+ ```ts
94
+ export default defineConfig({
95
+ dialect: "postgresql",
96
+ schema: "./src/schema.ts",
97
+ dbCredentials: {
98
+ url: "postgresql://user:password@host:port/dbname",
99
+ },
100
+ extensionsFilters: ["postgis"],
101
+ schemaFilter: ["public"],
102
+ tablesFilter: ["*"],
103
+ });
104
+ ```
105
+
106
+ | Option | Description |
107
+ |--------|-------------|
108
+ | `tablesFilter` | Glob-based table names filter, e.g. `["users", "user_info"]` or `"user*"`. Default: `"*"` |
109
+ | `schemaFilter` | Schema names filter, e.g. `["public", "drizzle"]`. Default: `["public"]` |
110
+ | `extensionsFilters` | List of installed database extensions, e.g. `["postgis"]`. Default: `[]` |
111
+
112
+ ## CLI Options
113
+ ```shell
114
+ npx drizzle-kit pull --dialect=postgresql --url=postgresql://user:password@host:port/dbname
115
+ npx drizzle-kit pull --dialect=postgresql --driver=pglite --url=database/
116
+ npx drizzle-kit pull --dialect=postgresql --tablesFilter='user*' --extensionsFilters=postgis --url=postgresql://user:password@host:port/dbname
117
+ ```
118
+
119
+ | Option | Required | Description |
120
+ |--------|----------|-------------|
121
+ | `dialect` | Yes | Database dialect (postgresql, mysql, sqlite, etc.) |
122
+ | `driver` | No | Driver exceptions (aws-data-api, pglite, d1-http) |
123
+ | `out` | No | Migrations output folder path, default: `./drizzle` |
124
+ | `url` | No | Database connection string |
125
+ | `user` | No | Database user |
126
+ | `password` | No | Database password |
127
+ | `host` | No | Host |
128
+ | `port` | No | Port |
129
+ | `database` | No | Database name |
130
+ | `config` | No | Configuration file path, default: `drizzle.config.ts` |
131
+ | `introspect-casing` | No | Strategy for JS keys creation: `preserve` or `camel` |
132
+ | `tablesFilter` | No | Table name filter |
133
+ | `schemaFilter` | No | Schema name filter, default: `["public"]` |
134
+ | `extensionsFilters` | No | Database extensions internal database filters |
@@ -0,0 +1,129 @@
1
+ ## Overview
2
+ `drizzle-kit push` applies schema changes directly to the database without generating SQL files. It implements a code-first migration approach by reading your Drizzle schema, comparing it to the database schema, generating SQL migrations, and applying them automatically.
3
+
4
+ ## How It Works
5
+ 1. Read Drizzle schema file(s) and create a JSON snapshot
6
+ 2. Introspect current database schema
7
+ 3. Generate SQL migrations based on differences
8
+ 4. Apply migrations to the database
9
+
10
+ ## Configuration
11
+ Configure via `drizzle.config.ts` or CLI options. Required: `dialect`, `schema` path, and database connection (`url` or `user:password@host:port/db`).
12
+
13
+ ```ts
14
+ // drizzle.config.ts
15
+ import { defineConfig } from "drizzle-kit";
16
+
17
+ export default defineConfig({
18
+ dialect: "postgresql",
19
+ schema: "./src/schema.ts",
20
+ dbCredentials: {
21
+ url: "postgresql://user:password@host:port/dbname",
22
+ },
23
+ });
24
+ ```
25
+
26
+ ```shell
27
+ npx drizzle-kit push
28
+ ```
29
+
30
+ Or via CLI:
31
+ ```shell
32
+ npx drizzle-kit push --dialect=postgresql --schema=./src/schema.ts --url=postgresql://user:password@host:port/dbname
33
+ ```
34
+
35
+ ## Schema Files
36
+ Use glob patterns for single or multiple schema files:
37
+ ```ts
38
+ schema: "./src/schema.ts" // single file
39
+ schema: "./src/**/*.schema.ts" // multiple files
40
+ ```
41
+
42
+ ## Multiple Config Files
43
+ Support different database stages or databases:
44
+ ```shell
45
+ npx drizzle-kit push --config=drizzle-dev.config.ts
46
+ npx drizzle-kit push --config=drizzle-prod.config.ts
47
+ ```
48
+
49
+ ## Database Drivers
50
+ Drizzle Kit automatically picks the driver based on `dialect`. For exceptions like `aws-data-api`, `pglight`, and `d1-http`, explicitly specify the `driver` parameter.
51
+
52
+ Note: Expo SQLite and OP SQLite (on-device databases) don't support `push`; use embedded migrations instead.
53
+
54
+ ## Filtering Tables, Schemas, and Extensions
55
+ ```ts
56
+ export default defineConfig({
57
+ dialect: "postgresql",
58
+ schema: "./src/schema.ts",
59
+ dbCredentials: { url: "..." },
60
+ tablesFilter: ["*"], // glob-based table filter, default "*"
61
+ schemaFilter: ["public"], // schema names, default ["public"]
62
+ extensionsFilters: ["postgis"], // installed extensions to ignore
63
+ });
64
+ ```
65
+
66
+ ## CLI-Only Options
67
+ - `--verbose`: Print all SQL statements before execution
68
+ - `--strict`: Ask for approval before executing SQL
69
+ - `--force`: Auto-accept data-loss statements
70
+
71
+ ```shell
72
+ npx drizzle-kit push --strict --verbose --force
73
+ ```
74
+
75
+ ## All Configuration Options
76
+ | Option | Required | Description |
77
+ |--------|----------|-------------|
78
+ | `dialect` | yes | Database dialect (postgresql, mysql, sqlite, etc.) |
79
+ | `schema` | yes | Path to schema file(s) or folder |
80
+ | `driver` | | Driver exception (aws-data-api, pglight, d1-http) |
81
+ | `tablesFilter` | | Table name filter |
82
+ | `schemaFilter` | | Schema names, default `["public"]` |
83
+ | `extensionsFilters` | | Database extensions to ignore |
84
+ | `url` | | Database connection string |
85
+ | `user` | | Database user |
86
+ | `password` | | Database password |
87
+ | `host` | | Host |
88
+ | `port` | | Port |
89
+ | `database` | | Database name |
90
+ | `config` | | Config file path, default `drizzle.config.ts` |
91
+
92
+ ## Example
93
+ ```ts
94
+ // drizzle.config.ts
95
+ import { defineConfig } from "drizzle-kit";
96
+
97
+ export default defineConfig({
98
+ dialect: "postgresql",
99
+ schema: "./src/schema.ts",
100
+ dbCredentials: {
101
+ url: "postgresql://user:password@host:port/dbname"
102
+ },
103
+ });
104
+ ```
105
+
106
+ ```ts
107
+ // src/schema.ts
108
+ import * as p from "drizzle-orm/pg-core";
109
+
110
+ export const users = p.pgTable("users", {
111
+ id: p.serial().primaryKey(),
112
+ name: p.text(),
113
+ })
114
+ ```
115
+
116
+ ```shell
117
+ npx drizzle-kit push
118
+ ```
119
+
120
+ Generates and applies:
121
+ ```sql
122
+ CREATE TABLE "users"(
123
+ id serial primary key,
124
+ name text
125
+ )
126
+ ```
127
+
128
+ ## Use Cases
129
+ Best for rapid prototyping and production applications. Pairs well with blue/green deployments and serverless databases (Planetscale, Neon, Turso).
@@ -0,0 +1,72 @@
1
+ ## SQL-like Syntax
2
+
3
+ Drizzle provides SQL-like query syntax that mirrors standard SQL, minimizing learning curve. You write queries that look like SQL and know exactly what SQL will be generated.
4
+
5
+ **Select with joins:**
6
+ ```typescript
7
+ await db
8
+ .select()
9
+ .from(posts)
10
+ .leftJoin(comments, eq(posts.id, comments.post_id))
11
+ .where(eq(posts.id, 10))
12
+ ```
13
+
14
+ **Insert:**
15
+ ```typescript
16
+ await db.insert(users).values({ email: 'user@gmail.com' })
17
+ ```
18
+
19
+ **Update:**
20
+ ```typescript
21
+ await db.update(users)
22
+ .set({ email: 'user@gmail.com' })
23
+ .where(eq(users.id, 1))
24
+ ```
25
+
26
+ **Delete:**
27
+ ```typescript
28
+ await db.delete(users).where(eq(users.id, 1))
29
+ ```
30
+
31
+ Supports select, insert, update, delete, aliases, WITH clauses, subqueries, and prepared statements.
32
+
33
+ ## Relational Queries API
34
+
35
+ For common scenarios with nested/relational data, use the Queries API for more convenient and performant fetching without manual joins or data mapping. Always outputs exactly one SQL query, safe for serverless databases.
36
+
37
+ ```typescript
38
+ const result = await db.query.users.findMany({
39
+ with: {
40
+ posts: true
41
+ },
42
+ });
43
+ ```
44
+
45
+ ## Advanced Composition
46
+
47
+ Queries can be composed and partitioned flexibly:
48
+
49
+ **Compose WHERE filters independently:**
50
+ ```typescript
51
+ async function getProductsBy({ name, category, maxPrice }) {
52
+ const filters: SQL[] = [];
53
+ if (name) filters.push(ilike(products.name, name));
54
+ if (category) filters.push(eq(products.category, category));
55
+ if (maxPrice) filters.push(lte(products.price, maxPrice));
56
+ return db.select().from(products).where(and(...filters));
57
+ }
58
+ ```
59
+
60
+ **Separate subqueries into variables:**
61
+ ```typescript
62
+ const subquery = db
63
+ .select()
64
+ .from(internalStaff)
65
+ .leftJoin(customUser, eq(internalStaff.userId, customUser.id))
66
+ .as('internal_staff');
67
+
68
+ const mainQuery = await db
69
+ .select()
70
+ .from(ticket)
71
+ .leftJoin(subquery, eq(subquery.internal_staff.userId, ticket.staffId));
72
+ ```