@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.
- package/.claude/settings.local.json +9 -0
- package/.lovely-docs.yaml +11 -0
- package/LICENSE +21 -0
- package/demo/next.config.mjs +17 -0
- package/demo/package.json +26 -0
- package/demo/scripts/copy-wasm.mjs +14 -0
- package/demo/src/app/layout.tsx +16 -0
- package/demo/src/app/page.tsx +16 -0
- package/demo/src/app/todos.tsx +118 -0
- package/demo/src/db/schema.ts +7 -0
- package/demo/tsconfig.json +18 -0
- package/lovely-docs/drizzle-orm/arktype.md +113 -0
- package/lovely-docs/drizzle-orm/batch-api.md +35 -0
- package/lovely-docs/drizzle-orm/cache.md +145 -0
- package/lovely-docs/drizzle-orm/check-migrations.md +52 -0
- package/lovely-docs/drizzle-orm/column_types/mysql-column-types.md +76 -0
- package/lovely-docs/drizzle-orm/column_types/postgresql_column_types.md +314 -0
- package/lovely-docs/drizzle-orm/column_types/singlestore-column-types.md +171 -0
- package/lovely-docs/drizzle-orm/column_types/sqlite_column_types.md +132 -0
- package/lovely-docs/drizzle-orm/column_types.md +76 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/case-insensitive-unique-email.md +113 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/conditional-filters-in-query.md +69 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/count-rows.md +76 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/cursor-based-pagination.md +142 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/d1_http_api_configuration.md +49 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/decrementing-a-value.md +36 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/empty-array-default-value.md +43 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/full-text-search-with-generated-columns.md +73 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/gel-auth-extension.md +89 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/include-or-exclude-columns.md +51 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/incrementing-a-value.md +36 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/limit-offset-pagination.md +104 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/mysql-local-setup.md +55 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/point-datatype-psql.md +79 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/postgis-geometry-point.md +115 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/postgresql-full-text-search.md +150 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/postgresql-local-setup.md +55 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/seeding-with-option.md +69 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/seeding-with-partially-exposed-schema.md +60 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/select-parent-rows-with-at-least-one-related-child-row.md +74 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/timestamp-default-value.md +93 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/toggling-a-boolean-field.md +20 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/update-many-with-different-values.md +50 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/upsert.md +169 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes/vector-similarity-search.md +79 -0
- package/lovely-docs/drizzle-orm/common_patterns_&_recipes.md +787 -0
- package/lovely-docs/drizzle-orm/connect-aws-data-api-pg.md +47 -0
- package/lovely-docs/drizzle-orm/connect-bun-sql.md +35 -0
- package/lovely-docs/drizzle-orm/connect-bun-sqlite.md +42 -0
- package/lovely-docs/drizzle-orm/connect-cloudflare-d1.md +61 -0
- package/lovely-docs/drizzle-orm/connect-cloudflare-do.md +86 -0
- package/lovely-docs/drizzle-orm/connect-neon.md +72 -0
- package/lovely-docs/drizzle-orm/connect-nile.md +84 -0
- package/lovely-docs/drizzle-orm/connect-pglite.md +39 -0
- package/lovely-docs/drizzle-orm/connect-planetscale.md +37 -0
- package/lovely-docs/drizzle-orm/connect-prisma-postgres.md +48 -0
- package/lovely-docs/drizzle-orm/connect-sqlite-cloud.md +29 -0
- package/lovely-docs/drizzle-orm/connect-supabase.md +45 -0
- package/lovely-docs/drizzle-orm/connect-tidb-serverless.md +35 -0
- package/lovely-docs/drizzle-orm/connect-turso-database.md +28 -0
- package/lovely-docs/drizzle-orm/connect-turso.md +60 -0
- package/lovely-docs/drizzle-orm/connect-vercel-postgres.md +37 -0
- package/lovely-docs/drizzle-orm/connect-xata.md +29 -0
- package/lovely-docs/drizzle-orm/custom-migrations.md +40 -0
- package/lovely-docs/drizzle-orm/custom-types.md +137 -0
- package/lovely-docs/drizzle-orm/database-connection-overview.md +89 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/bun-sql-existing.md +59 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/bun-sqlite-existing.md +48 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/bun-sqlite-new.md +34 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/d1-new.md +74 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/expo-sqlite-setup.md +169 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/gel-existing-project.md +81 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/get-started-bun-sql.md +29 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/getting_started_with_gel.md +85 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/mysql-existing-project.md +32 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/mysql-setup.md +43 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/neon-existing-project.md +39 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/neon-setup.md +45 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/nile-existing-project.md +66 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/nile-setup.md +59 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/op-sqlite_setup_guide.md +135 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/pglite-existing-project.md +67 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/pglite-setup.md +33 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/planetscale-existing-project.md +70 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/planetscale-setup.md +46 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/postgresql-existing-project.md +57 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/postgresql-setup.md +44 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/singlestore-existing-project.md +22 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/singlestore-setup.md +37 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/sqlite-cloud-existing-project.md +52 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/sqlite-cloud-setup.md +53 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/sqlite-durable-objects-setup.md +163 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/sqlite-existing-project.md +36 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/sqlite-new.md +28 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/supabase-existing-project.md +32 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/tidb-existing-project.md +25 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/tidb-serverless-setup.md +41 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/turso-database-existing.md +61 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/turso-database-setup.md +60 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/turso-existing.md +74 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/turso-new.md +78 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/vercel-postgres-existing-project.md +71 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/vercel-postgres-setup.md +46 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/xata-existing-project.md +32 -0
- package/lovely-docs/drizzle-orm/database_setup_guides/xata-new.md +30 -0
- package/lovely-docs/drizzle-orm/database_setup_guides.md +144 -0
- package/lovely-docs/drizzle-orm/delete.md +57 -0
- package/lovely-docs/drizzle-orm/drizzle-config-file.md +252 -0
- package/lovely-docs/drizzle-orm/drizzle-kit-up.md +43 -0
- package/lovely-docs/drizzle-orm/dynamic-query-building.md +68 -0
- package/lovely-docs/drizzle-orm/eslint-plugin.md +76 -0
- package/lovely-docs/drizzle-orm/expo-sqlite.md +101 -0
- package/lovely-docs/drizzle-orm/export.md +88 -0
- package/lovely-docs/drizzle-orm/faq.md +28 -0
- package/lovely-docs/drizzle-orm/filter-and-conditional-operators.md +169 -0
- package/lovely-docs/drizzle-orm/gel-setup.md +37 -0
- package/lovely-docs/drizzle-orm/generate.md +119 -0
- package/lovely-docs/drizzle-orm/generated-columns.md +128 -0
- package/lovely-docs/drizzle-orm/getting_started/database_integrations/drizzle-with-turso.md +159 -0
- package/lovely-docs/drizzle-orm/getting_started/database_integrations/drizzle_with_nile_database.md +195 -0
- package/lovely-docs/drizzle-orm/getting_started/database_integrations/neon_postgres_integration.md +157 -0
- package/lovely-docs/drizzle-orm/getting_started/database_integrations/supabase_integration.md +150 -0
- package/lovely-docs/drizzle-orm/getting_started/database_integrations/vercel-postgres-setup.md +152 -0
- package/lovely-docs/drizzle-orm/getting_started/database_integrations/xata_integration.md +143 -0
- package/lovely-docs/drizzle-orm/getting_started/database_integrations.md +117 -0
- package/lovely-docs/drizzle-orm/getting_started/edge_functions_integration/drizzle_with_vercel_edge_functions.md +220 -0
- package/lovely-docs/drizzle-orm/getting_started/edge_functions_integration/netlify_edge_functions_with_neon_postgres.md +120 -0
- package/lovely-docs/drizzle-orm/getting_started/edge_functions_integration/netlify_edge_functions_with_supabase.md +94 -0
- package/lovely-docs/drizzle-orm/getting_started/edge_functions_integration/supabase_edge_functions_integration.md +116 -0
- package/lovely-docs/drizzle-orm/getting_started/edge_functions_integration.md +63 -0
- package/lovely-docs/drizzle-orm/getting_started/todo_app_with_neon_postgres.md +323 -0
- package/lovely-docs/drizzle-orm/getting_started.md +443 -0
- package/lovely-docs/drizzle-orm/graphql.md +107 -0
- package/lovely-docs/drizzle-orm/http-proxy-driver.md +138 -0
- package/lovely-docs/drizzle-orm/indexes-constraints.md +135 -0
- package/lovely-docs/drizzle-orm/insert.mdx.md +118 -0
- package/lovely-docs/drizzle-orm/joins.md +145 -0
- package/lovely-docs/drizzle-orm/kit-overview.md +81 -0
- package/lovely-docs/drizzle-orm/migrate.md +54 -0
- package/lovely-docs/drizzle-orm/migration_guides/migrate-from-sequelize.md +335 -0
- package/lovely-docs/drizzle-orm/migration_guides/migrate-from-typeorm.md +317 -0
- package/lovely-docs/drizzle-orm/migration_guides/migrate_from_prisma_to_drizzle.md +258 -0
- package/lovely-docs/drizzle-orm/migration_guides.md +201 -0
- package/lovely-docs/drizzle-orm/migrations.md +50 -0
- package/lovely-docs/drizzle-orm/mysql-setup.md +51 -0
- package/lovely-docs/drizzle-orm/op-sqlite-setup.md +80 -0
- package/lovely-docs/drizzle-orm/overview.md +69 -0
- package/lovely-docs/drizzle-orm/postgresql-setup.md +71 -0
- package/lovely-docs/drizzle-orm/postgresql_extensions.md +93 -0
- package/lovely-docs/drizzle-orm/prepared-statements.md +77 -0
- package/lovely-docs/drizzle-orm/prisma-extension.md +46 -0
- package/lovely-docs/drizzle-orm/pull.md +134 -0
- package/lovely-docs/drizzle-orm/push.md +129 -0
- package/lovely-docs/drizzle-orm/queries-and-crud.md +72 -0
- package/lovely-docs/drizzle-orm/quick-start.md +63 -0
- package/lovely-docs/drizzle-orm/react-native-sqlite-setup.md +1 -0
- package/lovely-docs/drizzle-orm/read-replicas.md +66 -0
- package/lovely-docs/drizzle-orm/relational-queries.md +271 -0
- package/lovely-docs/drizzle-orm/relations.md +194 -0
- package/lovely-docs/drizzle-orm/release_notes/live-queries.md +27 -0
- package/lovely-docs/drizzle-orm/release_notes/pglite_driver_support.md +14 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.11.0_release.md +139 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.16.2_release_notes.md +86 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.23.2_release.md +5 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.27.2_-_unique_constraints_support.md +66 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.28.0_release_notes.md +80 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.28.1_release.md +7 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.28.2_release_notes.md +18 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.28.3_release_notes.md +48 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.28.4_release.md +8 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.28.5_release_notes.md +7 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.28.6_release_notes.md +54 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.29.0_release_notes.md +143 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.29.1_release_notes.md +72 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.29.2_release_notes.md +95 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.29.3_release.md +7 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.29.4_release_notes.md +40 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.29.5_release_notes.md +69 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.30.0_release_notes.md +31 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.30.10_release.md +18 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.30.1_release_notes.md +16 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.30.2_release_notes.md +7 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.30.3_release_notes.md +8 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.30.5_release_notes.md +20 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.30.7_release.md +5 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.30.8_release_notes.md +36 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.30.9_release.md +29 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.31.0_release_notes.md +186 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.31.2_tidb_cloud_serverless_support.md +16 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.31.3_release.md +19 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.31.4_release.md +1 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.32.0_release_notes.md +136 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.32.1_release_notes.md +15 -0
- package/lovely-docs/drizzle-orm/release_notes/v0.32.2_release.md +13 -0
- package/lovely-docs/drizzle-orm/release_notes/xata-http-driver-support.md +27 -0
- package/lovely-docs/drizzle-orm/release_notes.md +25 -0
- package/lovely-docs/drizzle-orm/rls.mdx.md +385 -0
- package/lovely-docs/drizzle-orm/schema-declaration.md +239 -0
- package/lovely-docs/drizzle-orm/schemas.md +63 -0
- package/lovely-docs/drizzle-orm/seed-generators.md +220 -0
- package/lovely-docs/drizzle-orm/seed-limitations.md +3 -0
- package/lovely-docs/drizzle-orm/seed-overview.md +155 -0
- package/lovely-docs/drizzle-orm/seed-versioning.md +85 -0
- package/lovely-docs/drizzle-orm/select.md +411 -0
- package/lovely-docs/drizzle-orm/sequences.md +62 -0
- package/lovely-docs/drizzle-orm/serverless-performance.md +21 -0
- package/lovely-docs/drizzle-orm/set-operations.md +127 -0
- package/lovely-docs/drizzle-orm/singlestore-setup.md +57 -0
- package/lovely-docs/drizzle-orm/sql-template.md +127 -0
- package/lovely-docs/drizzle-orm/sqlite-setup.md +65 -0
- package/lovely-docs/drizzle-orm/studio.md +47 -0
- package/lovely-docs/drizzle-orm/transactions.md +83 -0
- package/lovely-docs/drizzle-orm/type-helpers-and-utilities.md +160 -0
- package/lovely-docs/drizzle-orm/typebox.md +110 -0
- package/lovely-docs/drizzle-orm/update.md +79 -0
- package/lovely-docs/drizzle-orm/upgrade-to-0.21.0.md +40 -0
- package/lovely-docs/drizzle-orm/valibot.md +115 -0
- package/lovely-docs/drizzle-orm/views.md +135 -0
- package/lovely-docs/drizzle-orm/why-drizzle.md +66 -0
- package/lovely-docs/drizzle-orm/zod.md +113 -0
- package/lovely-docs/drizzle-orm.md +60 -0
- package/package.json +24 -0
- package/src/index.ts +186 -0
- package/tsconfig.json +14 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
## MySQL Column Types Reference
|
|
2
|
+
|
|
3
|
+
All MySQL column types are natively supported. Custom types can be created if needed.
|
|
4
|
+
|
|
5
|
+
**Note:** Examples use TypeScript keys as column names; database aliases and casing strategies are available via the `casing` parameter.
|
|
6
|
+
|
|
7
|
+
### Numeric Types
|
|
8
|
+
|
|
9
|
+
**Integer types:**
|
|
10
|
+
- `int()` - signed integer
|
|
11
|
+
- `tinyint()` - tiny signed integer
|
|
12
|
+
- `smallint()` - small signed integer
|
|
13
|
+
- `mediumint()` - medium signed integer
|
|
14
|
+
- `bigint({ mode: 'number' | 'bigint', unsigned: true })` - large integer with optional unsigned flag
|
|
15
|
+
|
|
16
|
+
**Floating point types:**
|
|
17
|
+
- `real()`, `real({ precision: 1, scale: 1 })` - real number with optional precision/scale
|
|
18
|
+
- `decimal()`, `decimal({ precision: 1, scale: 1, mode: 'number' | 'bigint' })` - decimal with precision/scale and mode
|
|
19
|
+
- `double()`, `double({ precision: 1, scale: 1 })` - double precision float
|
|
20
|
+
- `float()` - single precision float
|
|
21
|
+
|
|
22
|
+
**Special:**
|
|
23
|
+
- `serial()` - alias for `BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE`
|
|
24
|
+
|
|
25
|
+
### Binary Types
|
|
26
|
+
|
|
27
|
+
- `binary()` - fixed-length byte string, right-padded with `0x00` on insert
|
|
28
|
+
- `varbinary({ length: 2 })` - variable-length byte string
|
|
29
|
+
|
|
30
|
+
### String Types
|
|
31
|
+
|
|
32
|
+
- `char()` - fixed-length character string
|
|
33
|
+
- `varchar({ length: 2, enum: ["value1", "value2"] })` - variable-length string with optional enum for type inference (no runtime validation)
|
|
34
|
+
- `text({ enum: ["value1", "value2"] })` - text with optional enum for type inference
|
|
35
|
+
|
|
36
|
+
### Boolean & Date/Time Types
|
|
37
|
+
|
|
38
|
+
- `boolean()` - boolean value
|
|
39
|
+
- `date()` - date only
|
|
40
|
+
- `datetime()`, `datetime({ mode: 'date' | 'string', fsp: 0..6 })` - date and time with optional fractional seconds precision
|
|
41
|
+
- `time()`, `time({ fsp: 0..6 })` - time only with optional fractional seconds
|
|
42
|
+
- `year()` - year value
|
|
43
|
+
- `timestamp()`, `timestamp({ mode: 'date' | 'string', fsp: 0..6 })` - timestamp with optional `defaultNow()`
|
|
44
|
+
|
|
45
|
+
### JSON & Enum
|
|
46
|
+
|
|
47
|
+
- `json()`, `json().$type<{ foo: string }>()` - JSON with optional type inference
|
|
48
|
+
- `mysqlEnum(['unknown', 'known', 'popular'])` - enum type
|
|
49
|
+
|
|
50
|
+
### Column Modifiers
|
|
51
|
+
|
|
52
|
+
**Type customization:**
|
|
53
|
+
```typescript
|
|
54
|
+
int().$type<UserId>() // branded types
|
|
55
|
+
json().$type<Data>() // type inference
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Constraints:**
|
|
59
|
+
- `.notNull()` - NOT NULL constraint
|
|
60
|
+
- `.primaryKey()` - PRIMARY KEY constraint
|
|
61
|
+
- `.autoincrement()` - AUTO_INCREMENT
|
|
62
|
+
|
|
63
|
+
**Defaults:**
|
|
64
|
+
- `.default(3)` - static default value
|
|
65
|
+
- `.$defaultFn(() => createId())` - runtime default function (insert only)
|
|
66
|
+
- `.$onUpdate(() => null)` - runtime update function (called on update, or insert if no default)
|
|
67
|
+
|
|
68
|
+
Example combining modifiers:
|
|
69
|
+
```typescript
|
|
70
|
+
const table = mysqlTable('table', {
|
|
71
|
+
id: int().primaryKey().autoincrement(),
|
|
72
|
+
name: varchar({ length: 255 }).notNull(),
|
|
73
|
+
createdAt: timestamp().defaultNow(),
|
|
74
|
+
data: json().$type<{ foo: string }>(),
|
|
75
|
+
});
|
|
76
|
+
```
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
## Integer Types
|
|
2
|
+
|
|
3
|
+
**integer** (int, int4): Signed 4-byte integer
|
|
4
|
+
```ts
|
|
5
|
+
import { integer, pgTable } from "drizzle-orm/pg-core";
|
|
6
|
+
export const table = pgTable('table', {
|
|
7
|
+
int: integer(),
|
|
8
|
+
int1: integer().default(10),
|
|
9
|
+
int2: integer().default(sql`'10'::int`)
|
|
10
|
+
});
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
**smallint** (int2): Signed 2-byte integer
|
|
14
|
+
```ts
|
|
15
|
+
import { smallint, pgTable } from "drizzle-orm/pg-core";
|
|
16
|
+
export const table = pgTable('table', {
|
|
17
|
+
smallint: smallint(),
|
|
18
|
+
smallint1: smallint().default(10)
|
|
19
|
+
});
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**bigint** (int8): Signed 8-byte integer. Use `mode: 'number'` for values between 2^31 and 2^53, otherwise defaults to `bigint` type.
|
|
23
|
+
```ts
|
|
24
|
+
import { bigint, pgTable } from "drizzle-orm/pg-core";
|
|
25
|
+
export const table = pgTable('table', {
|
|
26
|
+
bigint: bigint({ mode: 'number' }), // inferred as number
|
|
27
|
+
bigint2: bigint({ mode: 'bigint' }), // inferred as bigint
|
|
28
|
+
bigint3: bigint().default(10)
|
|
29
|
+
});
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Auto-Increment Integer Types
|
|
33
|
+
|
|
34
|
+
**serial** (serial4): Auto-incrementing 4-byte integer
|
|
35
|
+
```ts
|
|
36
|
+
import { serial, pgTable } from "drizzle-orm/pg-core";
|
|
37
|
+
export const table = pgTable('table', {
|
|
38
|
+
serial: serial()
|
|
39
|
+
});
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**smallserial** (serial2): Auto-incrementing 2-byte integer
|
|
43
|
+
```ts
|
|
44
|
+
import { smallserial, pgTable } from "drizzle-orm/pg-core";
|
|
45
|
+
export const table = pgTable('table', {
|
|
46
|
+
smallserial: smallserial()
|
|
47
|
+
});
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**bigserial** (serial8): Auto-incrementing 8-byte integer. Use `mode: 'number'` for values between 2^31 and 2^53.
|
|
51
|
+
```ts
|
|
52
|
+
import { bigserial, pgTable } from "drizzle-orm/pg-core";
|
|
53
|
+
export const table = pgTable('table', {
|
|
54
|
+
bigserial: bigserial({ mode: 'number' })
|
|
55
|
+
});
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Boolean
|
|
59
|
+
|
|
60
|
+
**boolean**: Standard SQL boolean type
|
|
61
|
+
```ts
|
|
62
|
+
import { boolean, pgTable } from "drizzle-orm/pg-core";
|
|
63
|
+
export const table = pgTable('table', {
|
|
64
|
+
boolean: boolean()
|
|
65
|
+
});
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Text Types
|
|
69
|
+
|
|
70
|
+
**text**: Variable-length unlimited character string. Can define `enum` config for type inference (doesn't check runtime values).
|
|
71
|
+
```ts
|
|
72
|
+
import { text, pgTable } from "drizzle-orm/pg-core";
|
|
73
|
+
export const table = pgTable('table', {
|
|
74
|
+
text: text(),
|
|
75
|
+
text2: text({ enum: ["value1", "value2"] }) // inferred as "value1" | "value2" | null
|
|
76
|
+
});
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**varchar** (character varying(n)): Variable-length string up to n characters. Length parameter is optional. Supports enum config.
|
|
80
|
+
```ts
|
|
81
|
+
import { varchar, pgTable } from "drizzle-orm/pg-core";
|
|
82
|
+
export const table = pgTable('table', {
|
|
83
|
+
varchar1: varchar(),
|
|
84
|
+
varchar2: varchar({ length: 256 }),
|
|
85
|
+
varchar3: varchar({ enum: ["value1", "value2"] })
|
|
86
|
+
});
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**char** (character(n)): Fixed-length, blank-padded string up to n characters. Length parameter is optional. Supports enum config.
|
|
90
|
+
```ts
|
|
91
|
+
import { char, pgTable } from "drizzle-orm/pg-core";
|
|
92
|
+
export const table = pgTable('table', {
|
|
93
|
+
char1: char(),
|
|
94
|
+
char2: char({ length: 256 }),
|
|
95
|
+
char3: char({ enum: ["value1", "value2"] })
|
|
96
|
+
});
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Numeric Types
|
|
100
|
+
|
|
101
|
+
**numeric** (decimal): Exact numeric with selectable precision. Can store up to 131072 digits before decimal and 16383 after. Supports `mode: 'number'` or `mode: 'bigint'`.
|
|
102
|
+
```ts
|
|
103
|
+
import { numeric, pgTable } from "drizzle-orm/pg-core";
|
|
104
|
+
export const table = pgTable('table', {
|
|
105
|
+
numeric1: numeric(),
|
|
106
|
+
numeric2: numeric({ precision: 100 }),
|
|
107
|
+
numeric3: numeric({ precision: 100, scale: 20 }),
|
|
108
|
+
numericNum: numeric({ mode: 'number' }),
|
|
109
|
+
numericBig: numeric({ mode: 'bigint' })
|
|
110
|
+
});
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**real** (float4): Single precision floating-point (4 bytes)
|
|
114
|
+
```ts
|
|
115
|
+
import { real, pgTable } from "drizzle-orm/pg-core";
|
|
116
|
+
export const table = pgTable('table', {
|
|
117
|
+
real1: real(),
|
|
118
|
+
real2: real().default(10.10),
|
|
119
|
+
real3: real().default(sql`'10.10'::real`)
|
|
120
|
+
});
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**doublePrecision** (double precision, float8): Double precision floating-point (8 bytes)
|
|
124
|
+
```ts
|
|
125
|
+
import { doublePrecision, pgTable } from "drizzle-orm/pg-core";
|
|
126
|
+
export const table = pgTable('table', {
|
|
127
|
+
double1: doublePrecision(),
|
|
128
|
+
double2: doublePrecision().default(10.10),
|
|
129
|
+
double3: doublePrecision().default(sql`'10.10'::double precision`)
|
|
130
|
+
});
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## JSON Types
|
|
134
|
+
|
|
135
|
+
**json**: Textual JSON data (RFC 7159). Use `.$type<T>()` for compile-time type inference without runtime checks.
|
|
136
|
+
```ts
|
|
137
|
+
import { json, pgTable } from "drizzle-orm/pg-core";
|
|
138
|
+
export const table = pgTable('table', {
|
|
139
|
+
json1: json(),
|
|
140
|
+
json2: json().default({ foo: "bar" }),
|
|
141
|
+
json3: json().$type<{ foo: string }>(),
|
|
142
|
+
json4: json().$type<string[]>()
|
|
143
|
+
});
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**jsonb**: Binary JSON data (decomposed). Same `.$type<T>()` support as json.
|
|
147
|
+
```ts
|
|
148
|
+
import { jsonb, pgTable } from "drizzle-orm/pg-core";
|
|
149
|
+
export const table = pgTable('table', {
|
|
150
|
+
jsonb1: jsonb(),
|
|
151
|
+
jsonb2: jsonb().default({ foo: "bar" }),
|
|
152
|
+
jsonb3: jsonb().$type<{ foo: string }>()
|
|
153
|
+
});
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Date/Time Types
|
|
157
|
+
|
|
158
|
+
**time**: Time of day with or without timezone. Options: `withTimezone`, `precision`.
|
|
159
|
+
```ts
|
|
160
|
+
import { time, pgTable } from "drizzle-orm/pg-core";
|
|
161
|
+
export const table = pgTable('table', {
|
|
162
|
+
time1: time(),
|
|
163
|
+
time2: time({ withTimezone: true }),
|
|
164
|
+
time3: time({ precision: 6 }),
|
|
165
|
+
time4: time({ precision: 6, withTimezone: true })
|
|
166
|
+
});
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**timestamp**: Date and time with or without timezone. Options: `precision`, `withTimezone`, `mode: 'date' | 'string'`. Default mode is 'date' which maps to JS Date. String mode passes raw dates without mapping.
|
|
170
|
+
```ts
|
|
171
|
+
import { timestamp, pgTable } from "drizzle-orm/pg-core";
|
|
172
|
+
export const table = pgTable('table', {
|
|
173
|
+
timestamp1: timestamp(),
|
|
174
|
+
timestamp2: timestamp({ precision: 6, withTimezone: true }),
|
|
175
|
+
timestamp3: timestamp().defaultNow(),
|
|
176
|
+
timestamp4: timestamp({ mode: "date" }),
|
|
177
|
+
timestamp5: timestamp({ mode: "string" })
|
|
178
|
+
});
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**date**: Calendar date (year, month, day). Supports `mode: 'date' | 'string'`.
|
|
182
|
+
```ts
|
|
183
|
+
import { date, pgTable } from "drizzle-orm/pg-core";
|
|
184
|
+
export const table = pgTable('table', {
|
|
185
|
+
date: date(),
|
|
186
|
+
date2: date({ mode: "date" }),
|
|
187
|
+
date3: date({ mode: "string" })
|
|
188
|
+
});
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
**interval**: Time span. Options: `fields`, `precision`.
|
|
192
|
+
```ts
|
|
193
|
+
import { interval, pgTable } from "drizzle-orm/pg-core";
|
|
194
|
+
export const table = pgTable('table', {
|
|
195
|
+
interval1: interval(),
|
|
196
|
+
interval2: interval({ fields: 'day' }),
|
|
197
|
+
interval3: interval({ fields: 'month', precision: 6 })
|
|
198
|
+
});
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Geometric Types
|
|
202
|
+
|
|
203
|
+
**point**: Geometric point. Two modes: `tuple` (default, maps to [x, y]) or `xy` (maps to { x, y }).
|
|
204
|
+
```ts
|
|
205
|
+
import { point, pgTable } from "drizzle-orm/pg-core";
|
|
206
|
+
export const table = pgTable('table', {
|
|
207
|
+
point: point(),
|
|
208
|
+
pointObj: point({ mode: 'xy' })
|
|
209
|
+
});
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
**line**: Geometric line. Two modes: `tuple` (default, maps to [a, b, c]) or `abc` (maps to { a, b, c } from equation Ax + By + C = 0).
|
|
213
|
+
```ts
|
|
214
|
+
import { line, pgTable } from "drizzle-orm/pg-core";
|
|
215
|
+
export const table = pgTable('table', {
|
|
216
|
+
line: line(),
|
|
217
|
+
lineObj: line({ mode: 'abc' })
|
|
218
|
+
});
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
## Enum Type
|
|
222
|
+
|
|
223
|
+
**pgEnum**: Enumerated types - static ordered set of values.
|
|
224
|
+
```ts
|
|
225
|
+
import { pgEnum, pgTable } from "drizzle-orm/pg-core";
|
|
226
|
+
export const moodEnum = pgEnum('mood', ['sad', 'ok', 'happy']);
|
|
227
|
+
export const table = pgTable('table', {
|
|
228
|
+
mood: moodEnum()
|
|
229
|
+
});
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Column Customization
|
|
233
|
+
|
|
234
|
+
**.$type<T>()**: Customize column data type for unknown or branded types.
|
|
235
|
+
```ts
|
|
236
|
+
type UserId = number & { __brand: 'user_id' };
|
|
237
|
+
const users = pgTable('users', {
|
|
238
|
+
id: serial().$type<UserId>().primaryKey(),
|
|
239
|
+
jsonField: json().$type<Data>()
|
|
240
|
+
});
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## Identity Columns
|
|
244
|
+
|
|
245
|
+
PostgreSQL identity columns auto-generate unique integer values using sequences. Requires drizzle-orm@0.32.0+ and drizzle-kit@0.23.0+.
|
|
246
|
+
|
|
247
|
+
**GENERATED ALWAYS AS IDENTITY**: Database always generates value, manual insertion/updates not allowed without OVERRIDING SYSTEM VALUE.
|
|
248
|
+
|
|
249
|
+
**GENERATED BY DEFAULT AS IDENTITY**: Database generates by default, but manual values can be inserted/updated.
|
|
250
|
+
|
|
251
|
+
```ts
|
|
252
|
+
import { pgTable, integer, text } from 'drizzle-orm/pg-core';
|
|
253
|
+
export const ingredients = pgTable("ingredients", {
|
|
254
|
+
id: integer().primaryKey().generatedAlwaysAsIdentity({ startWith: 1000 }),
|
|
255
|
+
name: text().notNull()
|
|
256
|
+
});
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
## Default Values
|
|
260
|
+
|
|
261
|
+
**DEFAULT clause**: Specifies default value for INSERT if not explicitly provided. Can be constant, expression, or NULL.
|
|
262
|
+
|
|
263
|
+
```ts
|
|
264
|
+
import { integer, pgTable, uuid } from "drizzle-orm/pg-core";
|
|
265
|
+
export const table = pgTable('table', {
|
|
266
|
+
integer1: integer().default(42),
|
|
267
|
+
integer2: integer().default(sql`'42'::integer`),
|
|
268
|
+
uuid1: uuid().defaultRandom(),
|
|
269
|
+
uuid2: uuid().default(sql`gen_random_uuid()`)
|
|
270
|
+
});
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
**$defaultFn() / $default()**: Generate defaults at runtime (uuid, cuid, cuid2, etc). Only affects runtime, not drizzle-kit.
|
|
274
|
+
```ts
|
|
275
|
+
import { text, pgTable } from "drizzle-orm/pg-core";
|
|
276
|
+
import { createId } from '@paralleldrive/cuid2';
|
|
277
|
+
export const table = pgTable('table', {
|
|
278
|
+
id: text().$defaultFn(() => createId())
|
|
279
|
+
});
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
**$onUpdateFn() / $onUpdate()**: Generate values at runtime on update. Called on insert if no default provided.
|
|
283
|
+
```ts
|
|
284
|
+
import { integer, timestamp, text, pgTable } from "drizzle-orm/pg-core";
|
|
285
|
+
export const table = pgTable('table', {
|
|
286
|
+
updateCounter: integer().default(sql`1`).$onUpdateFn((): SQL => sql`${table.update_counter} + 1`),
|
|
287
|
+
updatedAt: timestamp({ mode: 'date', precision: 3 }).$onUpdate(() => new Date()),
|
|
288
|
+
alwaysNull: text().$type<string | null>().$onUpdate(() => null)
|
|
289
|
+
});
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
## Constraints
|
|
293
|
+
|
|
294
|
+
**NOT NULL**: Column cannot contain NULL value.
|
|
295
|
+
```ts
|
|
296
|
+
import { integer, pgTable } from "drizzle-orm/pg-core";
|
|
297
|
+
export const table = pgTable('table', {
|
|
298
|
+
integer: integer().notNull()
|
|
299
|
+
});
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
**PRIMARY KEY**: Column(s) used as unique identifier for rows. Values must be unique and not null.
|
|
303
|
+
```ts
|
|
304
|
+
import { serial, pgTable } from "drizzle-orm/pg-core";
|
|
305
|
+
export const table = pgTable('table', {
|
|
306
|
+
id: serial().primaryKey()
|
|
307
|
+
});
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
## Notes
|
|
311
|
+
|
|
312
|
+
- Column names are generated from TypeScript keys by default. Use database aliases or `casing` parameter for custom mapping.
|
|
313
|
+
- Custom types can be created if native support is insufficient.
|
|
314
|
+
- For `timestamp with timezone`, values are stored in UTC and converted based on the Postgres instance timezone setting.
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
## SingleStore Column Types Reference
|
|
2
|
+
|
|
3
|
+
All SingleStore column types are natively supported. Custom types can be created if needed.
|
|
4
|
+
|
|
5
|
+
**Important**: Column names are generated from TypeScript keys unless database aliases are used. Use the `casing` parameter to define mapping strategy.
|
|
6
|
+
|
|
7
|
+
### Numeric Types
|
|
8
|
+
|
|
9
|
+
**Integer types**: `int()`, `tinyint()`, `smallint()`, `mediumint()`, `bigint()`
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
import { int, bigint, singlestoreTable } from "drizzle-orm/singlestore-core";
|
|
13
|
+
|
|
14
|
+
const table = singlestoreTable('table', {
|
|
15
|
+
int: int(),
|
|
16
|
+
bigint: bigint({ mode: 'number' }),
|
|
17
|
+
bigintUnsigned: bigint({ mode: 'number', unsigned: true })
|
|
18
|
+
});
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Floating point types**: `real()`, `decimal()`, `double()`, `float()`
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import { real, decimal, double, float, singlestoreTable } from "drizzle-orm/singlestore-core";
|
|
25
|
+
|
|
26
|
+
const table = singlestoreTable('table', {
|
|
27
|
+
real: real(),
|
|
28
|
+
realPrecision: real({ precision: 1 }),
|
|
29
|
+
realPrecisionScale: real({ precision: 1, scale: 1 }),
|
|
30
|
+
decimal: decimal(),
|
|
31
|
+
decimalNum: decimal({ scale: 30, mode: 'number' }),
|
|
32
|
+
decimalBig: decimal({ scale: 30, mode: 'bigint' }),
|
|
33
|
+
decimalPrecision: decimal({ precision: 1 }),
|
|
34
|
+
decimalPrecisionScale: decimal({ precision: 1, scale: 1 }),
|
|
35
|
+
double: double(),
|
|
36
|
+
doublePrecision: double({ precision: 1 }),
|
|
37
|
+
doublePrecisionScale: double({ precision: 1, scale: 1 }),
|
|
38
|
+
float: float()
|
|
39
|
+
});
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Serial**: `serial()` is an alias for `BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE`
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
import { serial, singlestoreTable } from "drizzle-orm/singlestore-core";
|
|
46
|
+
|
|
47
|
+
const table = singlestoreTable('table', {
|
|
48
|
+
serial: serial()
|
|
49
|
+
});
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Binary Types
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
import { binary, varbinary, singlestoreTable } from "drizzle-orm/singlestore-core";
|
|
56
|
+
|
|
57
|
+
const table = singlestoreTable('table', {
|
|
58
|
+
binary: binary(),
|
|
59
|
+
varbinary: varbinary({ length: 2 })
|
|
60
|
+
});
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### String Types
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
import { char, varchar, text, singlestoreTable } from "drizzle-orm/singlestore-core";
|
|
67
|
+
|
|
68
|
+
const table = singlestoreTable('table', {
|
|
69
|
+
char: char(),
|
|
70
|
+
varchar: varchar({ length: 2 }),
|
|
71
|
+
varcharEnum: varchar({ length: 6, enum: ["value1", "value2"] }),
|
|
72
|
+
text: text(),
|
|
73
|
+
textEnum: text({ enum: ["value1", "value2"] })
|
|
74
|
+
});
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
`varchar` and `text` support `{ enum: [...] }` config to infer insert/select types (no runtime validation).
|
|
78
|
+
|
|
79
|
+
### Boolean & Date/Time Types
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
import { boolean, date, datetime, time, year, timestamp, singlestoreTable } from "drizzle-orm/singlestore-core";
|
|
83
|
+
|
|
84
|
+
const table = singlestoreTable('table', {
|
|
85
|
+
boolean: boolean(),
|
|
86
|
+
date: date(),
|
|
87
|
+
datetime: datetime({ mode: 'date' | 'string' }),
|
|
88
|
+
time: time(),
|
|
89
|
+
year: year(),
|
|
90
|
+
timestamp: timestamp({ mode: 'date' | 'string' }),
|
|
91
|
+
timestampDefault: timestamp().defaultNow()
|
|
92
|
+
});
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### JSON Type
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
import { json, singlestoreTable } from "drizzle-orm/singlestore-core";
|
|
99
|
+
|
|
100
|
+
const table = singlestoreTable('table', {
|
|
101
|
+
json: json(),
|
|
102
|
+
jsonTyped: json().$type<{ foo: string }>(),
|
|
103
|
+
jsonArray: json().$type<string[]>()
|
|
104
|
+
});
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Use `.$type<T>()` for compile-time type inference (no runtime validation). Provides protection for defaults, insert and select schemas.
|
|
108
|
+
|
|
109
|
+
### Enum Type
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
import { singlestoreEnum, singlestoreTable } from "drizzle-orm/singlestore-core";
|
|
113
|
+
|
|
114
|
+
const table = singlestoreTable('table', {
|
|
115
|
+
popularity: singlestoreEnum(['unknown', 'known', 'popular'])
|
|
116
|
+
});
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Column Modifiers
|
|
120
|
+
|
|
121
|
+
**Custom type inference**:
|
|
122
|
+
```typescript
|
|
123
|
+
type UserId = number & { __brand: 'user_id' };
|
|
124
|
+
type Data = { foo: string; bar: number };
|
|
125
|
+
|
|
126
|
+
const users = singlestoreTable('users', {
|
|
127
|
+
id: int().$type<UserId>().primaryKey(),
|
|
128
|
+
jsonField: json().$type<Data>()
|
|
129
|
+
});
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**Not null**:
|
|
133
|
+
```typescript
|
|
134
|
+
int().notNull()
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Default value**:
|
|
138
|
+
```typescript
|
|
139
|
+
int().default(3)
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
**Runtime defaults** (not affecting drizzle-kit, only drizzle-orm):
|
|
143
|
+
```typescript
|
|
144
|
+
import { varchar, singlestoreTable } from "drizzle-orm/singlestore-core";
|
|
145
|
+
import { createId } from '@paralleldrive/cuid2';
|
|
146
|
+
|
|
147
|
+
const table = singlestoreTable('table', {
|
|
148
|
+
id: varchar({ length: 128 }).$defaultFn(() => createId())
|
|
149
|
+
});
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**Runtime update values**:
|
|
153
|
+
```typescript
|
|
154
|
+
import { text, singlestoreTable } from "drizzle-orm/singlestore-core";
|
|
155
|
+
|
|
156
|
+
const table = singlestoreTable('table', {
|
|
157
|
+
alwaysNull: text().$type<string | null>().$onUpdate(() => null)
|
|
158
|
+
});
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Called on insert (if no default) and on every update. Does not affect drizzle-kit.
|
|
162
|
+
|
|
163
|
+
**Primary key**:
|
|
164
|
+
```typescript
|
|
165
|
+
int().primaryKey()
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**Auto increment**:
|
|
169
|
+
```typescript
|
|
170
|
+
int().autoincrement()
|
|
171
|
+
```
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
## SQLite Column Types
|
|
2
|
+
|
|
3
|
+
SQLite has 5 native storage classes: NULL, INTEGER, REAL, TEXT, BLOB. Drizzle supports all of them with additional modes and customization options.
|
|
4
|
+
|
|
5
|
+
### Integer
|
|
6
|
+
Signed integer stored in 0-8 bytes depending on magnitude.
|
|
7
|
+
```typescript
|
|
8
|
+
import { integer, sqliteTable } from "drizzle-orm/sqlite-core";
|
|
9
|
+
|
|
10
|
+
const table = sqliteTable('table', {
|
|
11
|
+
id: integer(),
|
|
12
|
+
// modes: 'number' (default), 'boolean', 'timestamp_ms', 'timestamp' (Date)
|
|
13
|
+
id: integer({ mode: 'number' }).primaryKey({ autoIncrement: true })
|
|
14
|
+
});
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Real
|
|
18
|
+
8-byte IEEE floating point number.
|
|
19
|
+
```typescript
|
|
20
|
+
import { real, sqliteTable } from "drizzle-orm/sqlite-core";
|
|
21
|
+
const table = sqliteTable('table', { real: real() });
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Text
|
|
25
|
+
UTF-8/UTF-16 encoded string. Supports enum inference and JSON mode:
|
|
26
|
+
```typescript
|
|
27
|
+
import { text, sqliteTable } from "drizzle-orm/sqlite-core";
|
|
28
|
+
const table = sqliteTable('table', {
|
|
29
|
+
text: text(),
|
|
30
|
+
enumText: text({ enum: ["value1", "value2"] }), // infers union type
|
|
31
|
+
jsonText: text({ mode: 'json' }).$type<{ foo: string }>()
|
|
32
|
+
});
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Blob
|
|
36
|
+
Raw binary data. Supports multiple modes:
|
|
37
|
+
```typescript
|
|
38
|
+
import { blob, sqliteTable } from "drizzle-orm/sqlite-core";
|
|
39
|
+
const table = sqliteTable('table', {
|
|
40
|
+
blob: blob(),
|
|
41
|
+
buffer: blob({ mode: 'buffer' }),
|
|
42
|
+
bigint: blob({ mode: 'bigint' }),
|
|
43
|
+
json: blob({ mode: 'json' }).$type<{ foo: string }>()
|
|
44
|
+
});
|
|
45
|
+
```
|
|
46
|
+
Note: Use `text({ mode: 'json' })` instead of `blob({ mode: 'json' })` for JSON functions support.
|
|
47
|
+
|
|
48
|
+
### Boolean
|
|
49
|
+
SQLite has no native boolean type. Use `integer({ mode: 'boolean' })` to store as 0/1:
|
|
50
|
+
```typescript
|
|
51
|
+
const table = sqliteTable('table', {
|
|
52
|
+
id: integer({ mode: 'boolean' })
|
|
53
|
+
});
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Bigint
|
|
57
|
+
No native bigint in SQLite. Use `blob({ mode: 'bigint' })` to work with BigInt instances:
|
|
58
|
+
```typescript
|
|
59
|
+
const table = sqliteTable('table', {
|
|
60
|
+
id: blob({ mode: 'bigint' })
|
|
61
|
+
});
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Numeric
|
|
65
|
+
```typescript
|
|
66
|
+
import { numeric, sqliteTable } from "drizzle-orm/sqlite-core";
|
|
67
|
+
const table = sqliteTable('table', {
|
|
68
|
+
numeric: numeric(),
|
|
69
|
+
numericNum: numeric({ mode: 'number' }),
|
|
70
|
+
numericBig: numeric({ mode: 'bigint' })
|
|
71
|
+
});
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Customizing Data Type
|
|
75
|
+
Use `.$type<T>()` to customize column type for branded or unknown types:
|
|
76
|
+
```typescript
|
|
77
|
+
type UserId = number & { __brand: 'user_id' };
|
|
78
|
+
type Data = { foo: string; bar: number };
|
|
79
|
+
|
|
80
|
+
const users = sqliteTable('users', {
|
|
81
|
+
id: integer().$type<UserId>().primaryKey(),
|
|
82
|
+
jsonField: blob().$type<Data>()
|
|
83
|
+
});
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Not Null
|
|
87
|
+
```typescript
|
|
88
|
+
const table = sqliteTable('table', { numInt: integer().notNull() });
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Default Values
|
|
92
|
+
Static defaults:
|
|
93
|
+
```typescript
|
|
94
|
+
import { sql } from "drizzle-orm";
|
|
95
|
+
import { integer, sqliteTable } from "drizzle-orm/sqlite-core";
|
|
96
|
+
|
|
97
|
+
const table = sqliteTable('table', {
|
|
98
|
+
int1: integer().default(42),
|
|
99
|
+
int2: integer().default(sql`(abs(42))`)
|
|
100
|
+
});
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Special keywords:
|
|
104
|
+
```typescript
|
|
105
|
+
import { sql } from "drizzle-orm";
|
|
106
|
+
import { text, sqliteTable } from "drizzle-orm/sqlite-core";
|
|
107
|
+
|
|
108
|
+
const table = sqliteTable("table", {
|
|
109
|
+
time: text().default(sql`(CURRENT_TIME)`),
|
|
110
|
+
date: text().default(sql`(CURRENT_DATE)`),
|
|
111
|
+
timestamp: text().default(sql`(CURRENT_TIMESTAMP)`)
|
|
112
|
+
});
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Runtime defaults with `$defaultFn()` (runtime only, doesn't affect drizzle-kit):
|
|
116
|
+
```typescript
|
|
117
|
+
import { text, sqliteTable } from "drizzle-orm/sqlite-core";
|
|
118
|
+
import { createId } from '@paralleldrive/cuid2';
|
|
119
|
+
|
|
120
|
+
const table = sqliteTable('table', {
|
|
121
|
+
id: text().$defaultFn(() => createId())
|
|
122
|
+
});
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Runtime update values with `$onUpdateFn()` (called on update, or on insert if no default provided):
|
|
126
|
+
```typescript
|
|
127
|
+
const table = sqliteTable('table', {
|
|
128
|
+
alwaysNull: text().$type<string | null>().$onUpdate(() => null)
|
|
129
|
+
});
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Note: Column names are generated from TypeScript keys. Use database aliases or the `casing` parameter for custom mapping.
|