@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,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.