You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 515dcdd
Browse filesBrowse the repository at this point in the historyBrowse files
Run the libSQL conformance suite itself, against the pinned sqld image,
45
+
with:
46
+
47
+
```bash
48
+
./mvnw -pl libsql-conformance -am verify
49
+
```
50
+
51
+
Last green result: 272 tests, 7 skipped, with `SavepointTest` included. The
52
+
parity queue (#54) closed at 268 tests, 7 skipped.
53
+
54
+
### Three-layer contract
55
+
56
+
When the layers disagree, the contract is:
57
+
58
+
1. Hrana 3 is the source of truth for transport, values, metadata,
59
+
batching, transactions, and error reporting. The protocol is specified
60
+
in [`../vendor/HRANA_3_SPEC.md`](../vendor/HRANA_3_SPEC.md); where
61
+
xerial behavior would require a primitive Hrana does not expose, the
62
+
Hrana behavior wins.
63
+
2.`java.sql` is the source of truth for the JDBC surface. Where JDBC
64
+
makes a feature optional or defines the observable behavior, the
65
+
driver follows `java.sql`, even when xerial chooses differently.
66
+
3. xerial is a behavioral reference and the conformance foundation, never
67
+
a copy target. Its tests define the selected subset and the control
68
+
probe; its driver internals, configuration surface, and native
69
+
behaviors are not reproduced.
70
+
71
+
### Compromise categories
72
+
73
+
Full parity is impossible without changing what the driver is: a remote
74
+
Hrana client with no local file, no shared connection, and no native
75
+
library. The rejected classes in the manifest group into four compromise
76
+
categories, each with a concrete example:
77
+
78
+
| Category | Why parity is impossible | Example |
79
+
|---|---|---|
80
+
| Native extension API | The test registers JVM callbacks or loads native code in-process; Hrana exposes no equivalent primitive, so this cannot be reversed without a new Hrana or native primitive. |`UDFTest` registers JVM user-defined functions through sqlite-jdbc's native extension API. |
81
+
| sqlite-jdbc configuration surface | The test exercises xerial's own configuration, `DataSource`, loading, or source conventions instead of portable JDBC over SQL; libSQL provides no counterpart. |`SQLiteConfigTest` tests the `SQLiteConfig` object, not the JDBC API. |
82
+
| Remote-model semantics | The test asserts local-file or in-process SQLite semantics (file locking and multi-connection waits, shared cache, native error wording and codes) that a single remote sqld server over Hrana cannot reproduce; see "Hrana over HTTP" in `../vendor/HRANA_3_SPEC.md` for the baton and stream-expiry model behind this. |`TransactionTest` asserts SQLite file-locking and multi-connection wait behavior. |
83
+
| Build-flag dependence | The test passes only when the server binary is built with a compile-time option that the pinned sqld image does not guarantee; this is addressable by pinning the server build, not by driver work. |`MathFunctionsTest` requires the server binary to be compiled with `SQLITE_ENABLE_MATH_FUNCTIONS`. |
84
+
85
+
The first three categories are permanent: the class stays upstream unless
86
+
the underlying Hrana, sqld, or sqlite-jdbc surface changes. Build-flag
87
+
dependence is the exception: the class stays upstream only until the sqld
88
+
build is pinned to enable the flag.
89
+
90
+
### Savepoint support
91
+
92
+
Savepoints were the last addressable JDBC-surface gap. The driver now
0 commit comments