qubu 0.6.1 → 0.6.3

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 (114) hide show
  1. package/dist/{complete-DP7pliuY.mjs → canonical-B5_ouh-c.mjs} +466 -241
  2. package/dist/codegen.d.mts +2 -2
  3. package/dist/codegen.mjs +180 -90
  4. package/dist/column-Cyc2CMnG.mjs +116 -0
  5. package/dist/column-DDRvD7SF.mjs +721 -0
  6. package/dist/{constraints-DM_tarXc.mjs → constraints-CAmi18Uk.mjs} +8 -3
  7. package/dist/core.d.mts +3 -3
  8. package/dist/core.mjs +4 -4
  9. package/dist/diff.d.mts +9 -9
  10. package/dist/diff.mjs +152 -102
  11. package/dist/{explain-CkIK13L_.mjs → explain-BIqEmZha.mjs} +1 -1
  12. package/dist/{expressions-BCjc08zw.mjs → expressions-_6JF_J77.mjs} +2 -1
  13. package/dist/index-CaxrMD1A.d.mts +1 -0
  14. package/dist/index.d.mts +2 -2
  15. package/dist/index.mjs +368 -74
  16. package/dist/introspection/mysql.d.mts +1 -1
  17. package/dist/introspection/mysql.mjs +156 -23
  18. package/dist/introspection/postgres.d.mts +6 -3
  19. package/dist/introspection/postgres.mjs +388 -53
  20. package/dist/introspection/sqlite.d.mts +1 -1
  21. package/dist/introspection/sqlite.mjs +198 -12
  22. package/dist/introspection.d.mts +26 -12
  23. package/dist/introspection.mjs +2 -672
  24. package/dist/mysql.d.mts +3 -3
  25. package/dist/mysql.mjs +6 -5
  26. package/dist/{errors-Dxv73YJu.mjs → omit-VEr9Ydux.mjs} +5 -1
  27. package/dist/{on-conflict-CnaY5qso.mjs → on-conflict-B2rFyHGF.mjs} +6 -8
  28. package/dist/on-duplicate-key-update-Czsw1Yq-.mjs +95 -0
  29. package/dist/{postgres-Dey7QXPL.mjs → postgres-hFhd0I9n.mjs} +4 -5
  30. package/dist/postgres.d.mts +2 -2
  31. package/dist/postgres.mjs +2 -2
  32. package/dist/{registry-oWDiqD7i.mjs → registry-BXE_4M9P.mjs} +1 -1
  33. package/dist/{relational-DSAJ-l58.mjs → relational-CoPBETjI.mjs} +3 -2
  34. package/dist/schema.d.mts +2 -2
  35. package/dist/schema.mjs +8 -8
  36. package/dist/{serialize-CE-gw5_s.mjs → serialize-CyobNEx-.mjs} +174 -30
  37. package/dist/serialize-Du2UPZMt.d.mts +92 -0
  38. package/dist/snapshot/mysql.d.mts +5 -5
  39. package/dist/snapshot/mysql.mjs +8 -8
  40. package/dist/snapshot/postgres.d.mts +3 -3
  41. package/dist/snapshot/postgres.mjs +9 -9
  42. package/dist/snapshot/sqlite.d.mts +3 -3
  43. package/dist/snapshot/sqlite.mjs +7 -7
  44. package/dist/snapshot-mIb-Zzb5.mjs +1489 -0
  45. package/dist/snapshot.d.mts +4 -5
  46. package/dist/snapshot.mjs +3 -4
  47. package/dist/{source-BDuUXmAk.mjs → source-DYSUqzvb.mjs} +2 -2
  48. package/dist/sqlite.d.mts +2 -2
  49. package/dist/sqlite.mjs +6 -6
  50. package/dist/{table-C1QGNe4P.mjs → table-B8zEq0az.mjs} +4 -4
  51. package/dist/{types-BLNRatG_.mjs → types-CYHpSPwj.mjs} +10 -5
  52. package/dist/{types-BEn0N_al.d.mts → types-CiMvKi5V.d.mts} +14 -4
  53. package/dist/{types-DUe6eeI0.d.mts → types-Dqr4o2I1.d.mts} +590 -168
  54. package/dist/value-CpaUFtjw.mjs +45 -0
  55. package/dist/vite/ambient.d.ts +2 -0
  56. package/dist/vite.d.mts +1 -1
  57. package/dist/vite.mjs +2 -0
  58. package/docs/dialects-and-execution.md +105 -26
  59. package/docs/getting-started.md +10 -10
  60. package/docs/guides/better-auth.md +16 -5
  61. package/docs/guides/compose-queries.md +21 -9
  62. package/docs/guides/drizzle.md +8 -3
  63. package/docs/guides/extensions/dialects.md +1 -1
  64. package/docs/guides/extensions/overview.md +1 -1
  65. package/docs/guides/extensions/sources-and-clauses.md +7 -3
  66. package/docs/guides/extensions/typed-expressions.md +26 -12
  67. package/docs/guides/extensions/unsafe-syntax.md +10 -6
  68. package/docs/guides/json.md +126 -8
  69. package/docs/guides/mutations.md +51 -6
  70. package/docs/guides/select/conditions.md +18 -11
  71. package/docs/guides/select/grouping-and-windows.md +5 -2
  72. package/docs/guides/select/ordering-and-pagination.md +5 -3
  73. package/docs/guides/select/overview.md +6 -3
  74. package/docs/guides/sql-templates.md +11 -5
  75. package/docs/guides/valtio-sync.md +11 -5
  76. package/docs/guides/vite-plugin.md +2 -2
  77. package/docs/index.md +25 -18
  78. package/docs/migrations/adapters.md +92 -27
  79. package/docs/migrations/artifacts-and-policy.md +49 -20
  80. package/docs/migrations/index.md +15 -8
  81. package/docs/migrations/lotta-adoption.md +16 -5
  82. package/docs/migrations/operations.md +29 -15
  83. package/docs/migrations/recovery.md +40 -17
  84. package/docs/query-model/fragments.md +33 -5
  85. package/docs/query-model/result-shapes.md +2 -2
  86. package/docs/query-model/source-scope.md +5 -3
  87. package/docs/reference/introspection-support.md +42 -37
  88. package/docs/reference/mysql-snapshot.md +19 -4
  89. package/docs/reference/postgres-snapshot.md +17 -4
  90. package/docs/reference/sqlite-snapshot.md +19 -2
  91. package/docs/reference/supported-surface.md +221 -84
  92. package/docs/schema/catalog-model.md +44 -14
  93. package/docs/schema/code-generation.md +40 -21
  94. package/docs/schema/columns-and-writes.md +21 -11
  95. package/docs/schema/constraints-and-indexes.md +12 -5
  96. package/docs/schema/ddl-emission.md +16 -5
  97. package/docs/schema/diff.md +13 -5
  98. package/docs/schema/introspection.md +64 -31
  99. package/docs/schema/migration-plans.md +18 -10
  100. package/docs/schema/snapshots.md +68 -30
  101. package/docs/schema/storage-and-schema-sql.md +16 -5
  102. package/docs/schema/tables-and-names.md +1 -1
  103. package/docs/sql-semantic-types.md +11 -8
  104. package/docs/troubleshooting.md +14 -6
  105. package/package.json +2 -1
  106. package/dist/canonical-DMvR9yBe.mjs +0 -972
  107. package/dist/column-BzN8KFJa.mjs +0 -364
  108. package/dist/column-CFvSbil0.mjs +0 -309
  109. package/dist/complete-types-CNMWBWap.d.mts +0 -371
  110. package/dist/index-CGui70hi.d.mts +0 -32
  111. package/dist/json-Db7XRD91.mjs +0 -169
  112. package/dist/omit-OxV58AwX.mjs +0 -5
  113. package/dist/serialize-OvXCLzjm.d.mts +0 -66
  114. package/dist/snapshot-DgsOhf_8.mjs +0 -354
@@ -1,10 +1,10 @@
1
1
  # Introspection support
2
2
 
3
- > Look up which catalog facts each adapter reads, which versions it accepts, and which database features remain outside Snapshot v1.
3
+ > Check supported database versions, catalog objects, and snapshot-mapping limits.
4
4
 
5
5
  The optional `qubu/introspection` entrypoint reads one selected database
6
6
  namespace through a user-owned `CatalogConnection`. It returns normalized
7
- catalog data and can map that data to canonical Snapshot v1 or v2. The
7
+ catalog data and can map that data to canonical Snapshot v1. The
8
8
  application owns the driver and connection lifecycle. Snapshot diffing,
9
9
  migration planning, and DDL emission are separate Qubu capabilities; see the
10
10
  [ownership map](supported-surface.md#ownership-boundary).
@@ -46,7 +46,7 @@ SQL.
46
46
  ## PostgreSQL complete catalog surface
47
47
 
48
48
  The PostgreSQL reader also fills the complete normalized catalog used by
49
- Snapshot v2. It keeps PostgreSQL OIDs in current-run physical references and
49
+ Snapshot v1. It keeps PostgreSQL OIDs in current-run physical references and
50
50
  keeps decompiler output such as `pg_get_viewdef`, `pg_get_triggerdef`, and
51
51
  `pg_get_functiondef` as tagged SQL data. It does not evaluate that text.
52
52
 
@@ -55,9 +55,9 @@ The query and normalization layout follows the catalog-oriented parts of the
55
55
  while Qubu keeps the result as typed data instead of generating TypeScript
56
56
  declarations.
57
57
 
58
- Use `mapCatalogToCompleteSnapshot()` for this object set. Use
59
- `mapCatalogToSnapshot()` when a caller explicitly needs the existing table-only
60
- Snapshot v1.
58
+ Use `mapCatalogToSnapshot()` or its explicit
59
+ `mapCatalogToCompleteSnapshot()` alias for this object set. Both produce the
60
+ canonical Snapshot v1 shape.
61
61
 
62
62
  ## SQLite complete catalog surface
63
63
 
@@ -67,29 +67,31 @@ table-valued PRAGMAs `database_list`, `table_list`, `table_xinfo`,
67
67
  receives bound namespace or object parameters through the caller's
68
68
  `CatalogConnection`. The reader does not interpolate a database name into SQL.
69
69
 
70
- SQLite views and triggers become typed complete catalog objects when their
71
- CREATE SQL has a recoverable definition and target. Their SQL remains tagged
72
- opaque data with a `sqlite` dialect and a catalog reference. Generated column
73
- expressions, declared storage types, SQLite affinity, rowid aliases, and
70
+ SQLite views and triggers become typed catalog objects when Qubu can recover
71
+ their definition and target from CREATE SQL. Their SQL remains opaque data,
72
+ tagged with the `sqlite` dialect and a catalog reference.
73
+
74
+ Generated column expressions, declared storage types, SQLite affinity, rowid aliases, and
74
75
  `AUTOINCREMENT` are kept as column or identity dialect extensions. User indexes
75
- retain ordered column or expression terms and partial predicates. Inline UNIQUE
76
- constraints are recovered from their internal indexes with deterministic Qubu
76
+ retain ordered column or expression terms and partial predicates.
77
+
78
+ Inline UNIQUE constraints are recovered from their internal indexes with deterministic Qubu
77
79
  names, so SQLite's `sqlite_autoindex_*` names do not become persisted logical
78
80
  IDs.
79
81
 
80
82
  SQLite virtual tables and shadow tables remain typed deferred objects with an
81
- `unmodeled-object` diagnostic. A selected attached database can expose table
82
- PRAGMA rows, but its schema SQL is outside the fixed `main` and `temp`
83
+ `unmodeled-object` diagnostic.
84
+
85
+ A selected attached database can expose table PRAGMA rows, but its schema SQL is outside the fixed `main` and `temp`
83
86
  statements. Qubu marks that result as limited and keeps other attached
84
87
  databases as opaque boundary records. It never combines attached databases into
85
88
  the selected namespace. SQLite does not provide the PostgreSQL object families
86
89
  such as routines, materialized views, policies, or ownership, so the reader
87
90
  does not fabricate them.
88
91
 
89
- `mapCatalogToCompleteSnapshot()` retains the typed views, triggers, deferred
90
- objects, opaque boundaries, and dialect extensions in Snapshot v2. The existing
91
- `mapCatalogToSnapshot()` still maps only tables and preserves Snapshot v1
92
- behavior.
92
+ `mapCatalogToSnapshot()` delegates to `mapCatalogToCompleteSnapshot()` and
93
+ retains typed views, triggers, deferred objects, opaque boundaries, and dialect
94
+ extensions in Snapshot v1.
93
95
 
94
96
  The query and normalization seams follow the catalog-reading portions of the
95
97
  [Drizzle SQLite introspector](https://github.com/drizzle-team/drizzle-orm/blob/main/drizzle-kit/src/introspect-sqlite.ts).
@@ -102,21 +104,28 @@ strict Snapshot v1 result through a separate controlled printer.
102
104
 
103
105
  The MySQL reader accepts MySQL 8.0.16 and later within the MySQL 8 series. It
104
106
  rejects MariaDB and older MySQL versions instead of applying MySQL catalog
105
- rules to a different product or server version. It reads `INFORMATION_SCHEMA`
106
- rows for one selected database and retains database-provided SQL as tagged,
107
+ rules to a different product or server version.
108
+
109
+ It reads `INFORMATION_SCHEMA` rows for one selected database and retains database-provided SQL as tagged,
107
110
  unevaluated MySQL data.
108
111
 
109
- MySQL has typed complete records for views, routines and their parameters,
110
- triggers, partitions, collations used by selected tables or columns, and
111
- comments. View definitions come from `INFORMATION_SCHEMA.VIEWS`; each view's
112
+ MySQL has typed records for:
113
+
114
+ - Views.
115
+ - Routines and their parameters.
116
+ - Triggers and partitions.
117
+ - Collations used by selected tables or columns.
118
+ - Comments.
119
+
120
+ View definitions come from `INFORMATION_SCHEMA.VIEWS`; each view's
112
121
  columns are joined back to the matching `COLUMNS` rows by physical table name,
113
- so the complete Snapshot v2 cross-reference points at the view's own column
122
+ so the complete Snapshot v1 cross-reference points at the view's own column
114
123
  IDs. Missing view definitions or unresolved trigger, partition, or other
115
124
  object references become deferred records with diagnostics.
116
125
 
117
126
  Scheduled events are retained as `CatalogOpaqueObject` records. Their event
118
127
  metadata and definition remain opaque, and the reader emits an
119
- `unmodeled-object` warning. Snapshot v2 keeps these records in
128
+ `unmodeled-object` warning. Snapshot v1 keeps these records in
120
129
  `opaqueObjects`; they are not treated as typed routines, triggers, or
121
130
  migration operations.
122
131
 
@@ -132,13 +141,12 @@ The query and normalization layout follows the catalog-reading portions of the
132
141
  while Qubu keeps the result as typed data instead of generating TypeScript
133
142
  declarations.
134
143
 
135
- Use `mapCatalogToCompleteSnapshot()` to retain these typed MySQL families and
136
- the opaque or deferred boundaries in Snapshot v2. Use `mapCatalogToSnapshot()`
137
- when a caller explicitly needs the existing table-only Snapshot v1.
144
+ Use `mapCatalogToSnapshot()` or `mapCatalogToCompleteSnapshot()` to retain these
145
+ typed MySQL families and the opaque or deferred boundaries in Snapshot v1.
138
146
 
139
147
  ## Snapshot v1 surface
140
148
 
141
- The mapper can emit these facts in canonical Snapshot v1:
149
+ The mapper emits these facts in canonical Snapshot v1:
142
150
 
143
151
  - one namespace and ordinary tables;
144
152
  - exact dialect-native column storage;
@@ -156,20 +164,17 @@ canonical content, not an identity or rename marker.
156
164
 
157
165
  ## Deferred and limited features
158
166
 
159
- The following remain catalog facts or diagnostics rather than fabricated
160
- Snapshot v1 objects:
167
+ Supported object families become typed Snapshot v1 records, as described in
168
+ the database sections above. Limits still apply to individual features:
161
169
 
162
- - views and materialized views;
163
- - sequences, enums, domains, routines, triggers, policies, extensions,
164
- collations, comments, and partition metadata;
165
- - PostgreSQL identity sequence options that have no typed Snapshot v1 field;
170
+ - PostgreSQL identity sequence options that have no typed field;
166
171
  - SQLite virtual/shadow tables, attached namespaces, and unrecoverable
167
172
  generated or expression definitions;
168
173
  - MySQL/MariaDB differences, prefix indexes, invisible indexes, and advanced
169
174
  functional, full-text, or spatial index semantics.
170
175
 
171
- Use the complete catalog and Snapshot v2 mapper to retain supported PostgreSQL
172
- and MySQL families. MySQL scheduled events stay opaque, and MySQL sequences,
176
+ Use the Snapshot v1 mapper to retain supported PostgreSQL and MySQL families.
177
+ MySQL scheduled events stay opaque, and MySQL sequences,
173
178
  materialized views, row-level security (RLS) policies, extension objects, and
174
179
  ownership stay unsupported or deferred. When a row cannot be normalized safely, the reader
175
180
  keeps a typed deferred or opaque record and emits a diagnostic instead of
@@ -1,8 +1,6 @@
1
1
  # MySQL snapshot support
2
2
 
3
- > Use this matrix before selecting `mysqlSnapshotAdapter`; it records the
4
- > MySQL facts Qubu v1 can encode and the combinations that need a later server
5
- > version or engine policy.
3
+ > Check which MySQL schema features the Snapshot v1 adapter can save.
6
4
 
7
5
  Import the adapter from the MySQL snapshot subpath:
8
6
 
@@ -21,7 +19,7 @@ to this adapter.
21
19
 
22
20
  | Schema fact | MySQL v1 behavior |
23
21
  | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
24
- | Portable storage | Maps `integer` to `INT`, `numeric` to `DECIMAL`, `text` to `TEXT`, `boolean` to `BOOLEAN`, `date` to `DATE`, `timestamp` to `DATETIME`, `uuid` to `CHAR(36)`, `json` to `JSON`, `bigint` to `BIGINT`, and `binary` to `VARBINARY`. |
22
+ | Portable storage | Uses the mappings below. |
25
23
  | Native storage | Preserves a non-empty declaration tagged `mysql` exactly. Native declarations owned by another dialect fail. |
26
24
  | Literals | Encodes `NULL`, finite numbers, strings, booleans, and `bigint` without query parameters. Strings use SQL quote doubling. |
27
25
  | Defaults | Canonical literals, branded deterministic expressions, and explicit external behavior are retained. Default expressions cannot reference columns or parameters. |
@@ -34,6 +32,23 @@ to this adapter.
34
32
  | Indexes | Ordered terms, expressions, uniqueness, and candidate-key evidence are retained. Partial predicates, included columns, and `NULLS FIRST/LAST` are diagnosed. Algorithm, locking, access method, parser, and key-block options live under `dialect`. |
35
33
  | Names | Table, column, constraint, and index names are checked against MySQL's 64-character identifier limit. Table names are database-scoped; index names are table-scoped. |
36
34
 
35
+ ## Portable storage types
36
+
37
+ | Qubu storage | Database declaration |
38
+ | ------------ | -------------------- |
39
+ | `integer` | `INT` |
40
+ | `numeric` | `DECIMAL` |
41
+ | `text` | `TEXT` |
42
+ | `boolean` | `BOOLEAN` |
43
+ | `date` | `DATE` |
44
+ | `timestamp` | `DATETIME` |
45
+ | `uuid` | `CHAR(36)` |
46
+ | `json` | `JSON` |
47
+ | `bigint` | `BIGINT` |
48
+ | `binary` | `VARBINARY` |
49
+
50
+ ## Diagnostics
51
+
37
52
  Capability checks run before common traversal. Use the non-throwing form when
38
53
  a schema may include a MySQL engine or version-specific feature:
39
54
 
@@ -1,8 +1,6 @@
1
1
  # PostgreSQL snapshot support
2
2
 
3
- > Use this matrix before selecting `postgresSnapshotAdapter`; it records the
4
- > PostgreSQL facts Qubu v1 can encode and the cases that need a later server
5
- > version policy.
3
+ > Check which PostgreSQL schema features the Snapshot v1 adapter can save.
6
4
 
7
5
  Import the adapter from the PostgreSQL snapshot subpath:
8
6
 
@@ -24,7 +22,7 @@ snapshot metadata and `unsafeSchemaSql()` use `postgresql` consistently.
24
22
 
25
23
  | Schema fact | PostgreSQL v1 behavior |
26
24
  | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
27
- | Portable storage | Emits PostgreSQL declarations: `INTEGER`, `NUMERIC`, `TEXT`, `BOOLEAN`, `DATE`, `TIMESTAMP`, `UUID`, `JSONB`, `BIGINT`, and `BYTEA`. |
25
+ | Portable storage | Uses the mappings below. |
28
26
  | Native storage | Preserves a non-empty declaration tagged `postgresql` exactly. Other dialect tags fail. |
29
27
  | Literals | Encodes finite numbers, strings, booleans, `bigint`, and `NULL` without query parameters. |
30
28
  | Defaults | Canonical literals, branded deterministic expressions, and explicit external behavior are retained. Column references in defaults fail. |
@@ -41,6 +39,21 @@ deterministic data for the `qubu/snapshot` decoder. The package-wide
41
39
  [ownership map](supported-surface.md#ownership-boundary) shows the separate
42
40
  schema and application boundaries.
43
41
 
42
+ ## Portable storage types
43
+
44
+ | Qubu storage | Database declaration |
45
+ | ------------ | -------------------- |
46
+ | `integer` | `INTEGER` |
47
+ | `numeric` | `NUMERIC` |
48
+ | `text` | `TEXT` |
49
+ | `boolean` | `BOOLEAN` |
50
+ | `date` | `DATE` |
51
+ | `timestamp` | `TIMESTAMP` |
52
+ | `uuid` | `UUID` |
53
+ | `json` | `JSONB` |
54
+ | `bigint` | `BIGINT` |
55
+ | `binary` | `BYTEA` |
56
+
44
57
  ## Diagnostics
45
58
 
46
59
  Use the non-throwing form when a schema may contain a server-specific feature:
@@ -1,6 +1,6 @@
1
1
  # SQLite snapshot support
2
2
 
3
- > Use this matrix to decide which SQLite schema facts Qubu v1 can serialize and which combinations must be diagnosed before a snapshot is written.
3
+ > Check which SQLite schema features the Snapshot v1 adapter can save.
4
4
 
5
5
  Import the adapter from the SQLite snapshot subpath:
6
6
 
@@ -20,7 +20,7 @@ to distinguish it from the query renderer. A dialect-tagged
20
20
 
21
21
  | Schema fact | SQLite v1 behavior |
22
22
  | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
23
- | Portable storage | Maps `integer`, `boolean`, and `bigint` to `INTEGER`; `text`, `date`, `timestamp`, `uuid`, and `json` to `TEXT`; `numeric` to `NUMERIC`; and `binary` to `BLOB`. The snapshot also records SQLite's derived affinity. |
23
+ | Portable storage | Uses the mappings below. SQLite affinity is also recorded. |
24
24
  | Native storage | Preserves a non-empty declaration tagged `sqlite` exactly and records its affinity using SQLite's ordered declared-type rules. Other dialect tags fail. |
25
25
  | Literals | Encodes `NULL`, finite numbers, strings, `bigint`, and booleans as parameter-free SQL. Boolean literals use `1` and `0`; strings retain SQL escaping. |
26
26
  | Defaults | Canonical literals, branded deterministic expressions, and explicit external behavior are retained. Default expressions cannot reference columns or parameters. |
@@ -32,6 +32,23 @@ to distinguish it from the query renderer. A dialect-tagged
32
32
  | Indexes | Ordered terms, expressions, uniqueness, predicates for partial indexes, and candidate-key evidence are retained. Included columns are diagnosed as unsupported. The typed SQLite index extension is encoded under `dialect`. |
33
33
  | Namespaces | An optional unqualified namespace is retained; Qubu does not attach or inspect SQLite databases. |
34
34
 
35
+ ## Portable storage types
36
+
37
+ | Qubu storage | Database declaration |
38
+ | ------------ | -------------------- |
39
+ | `integer` | `INTEGER` |
40
+ | `numeric` | `NUMERIC` |
41
+ | `text` | `TEXT` |
42
+ | `boolean` | `INTEGER` |
43
+ | `date` | `TEXT` |
44
+ | `timestamp` | `TEXT` |
45
+ | `uuid` | `TEXT` |
46
+ | `json` | `TEXT` |
47
+ | `bigint` | `INTEGER` |
48
+ | `binary` | `BLOB` |
49
+
50
+ ## Diagnostics
51
+
35
52
  Capability checks run before common traversal. Use the non-throwing form when a
36
53
  schema may include a feature that depends on a SQLite version or table shape:
37
54