Embedded Swift support for SQLiteKit - #5
Draft
scottmarchant wants to merge 1 commit into
Draft
Conversation
scottmarchant
force-pushed
the
feat/embedded-support
branch
from
July 29, 2026 00:21
1921e84 to
339bacd
Compare
scottmarchant
force-pushed
the
feat/wasi-nio-free
branch
from
July 29, 2026 00:21
505c544 to
1927fd4
Compare
Motivation: Embedded Swift has no Codable, no reflection, no casts to a generic type, and no Foundation. A handful of SQLiteKit declarations depend on one of those and are the only thing standing between the SwiftNIO-free configuration and a `wasm32-unknown-wasip1-embedded` build. Modifications: Elide or substitute exactly those declarations. Every gate is `#if hasFeature(Embedded)` or `#if canImport(Foundation)`, so no other target changes. - `SQLiteConfiguration.Storage.memory` derives its identifier from system randomness where `Foundation.UUID` is unavailable. - `SQLiteDatabaseVersion`'s `isEqual(to:)`/`isOlder(than:)` use `as? Self`, a cast to a generic type Embedded Swift forbids; there the `SQLDatabaseReportedVersion` protocol's `stringValue`-based defaults apply. - Query logging omits the interpolated bind list under Embedded Swift, which has no reflection. - The `Decodable` row-decoding entry points in `SQLiteRow+SQLRow` are elided, matching SQLKit's `SQLRow` protocol on that target. - `SQLiteDataDecoder` and `SQLiteDataEncoder` get Embedded-only variants: the decoder becomes an API-compatible placeholder (there is no Codable engine to drive), and the encoder maps SQLKit's driver-neutral `SQLDataValue` cases straight onto `SQLiteData`, which is what replaces `Encodable`'s `encode(to:)` as the extraction path there. Result: SQLiteKit compiles for `wasm32-unknown-wasip1-embedded`. On every other target the generated symbol graph is unchanged — the same symbols with byte-identical `docComment` line counts — and `diagnose-api-breaking-changes` reports no differences. Building for the Embedded target additionally requires an Embedded-clean `apple/swift-log`; see the pull request description.
scottmarchant
force-pushed
the
feat/embedded-support
branch
from
July 29, 2026 03:24
339bacd to
c39806f
Compare
scottmarchant
force-pushed
the
feat/wasi-nio-free
branch
from
July 29, 2026 03:24
1927fd4 to
f0bff69
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Makes SQLiteKit compile under Embedded Swift. This builds on #4 (
feat/wasi-nio-free) and retargets tobase/vapor-mainonce that merges, so this diff shows only the Embedded work, which is purely additive. Research grade, lower priority than #4, and last in line of the three repos: it also depends on the sql-kit Embedded PR (PassiveLogic/sql-kit#4), because the EmbeddedSQLiteDataEncoderconsumes SQLKit'sSQLBindValueandSQLDataValue.Every gate is
#if hasFeature(Embedded)or#if canImport(Foundation):SQLiteConfiguration.Storage.memoryderives its identifier from system randomness whereFoundation.UUIDis unavailable.SQLiteDatabaseVersion'sisEqual(to:)/isOlder(than:)useas? Self, a cast to a generic type that Embedded Swift forbids; SQLKit'sstringValue-based protocol defaults apply there instead.Decodablerow-decoding entry points inSQLiteRow+SQLRoware elided, matching what SQLKit'sSQLRowprotocol exposes on that target.SQLiteDataDecoderbecomes an API-compatible placeholder (there is no Codable engine to drive it), andSQLiteDataEncodermaps SQLKit's driver-neutralSQLDataValuecases directly ontoSQLiteData.Two prerequisites outside this repo: the sql-kit Embedded PR above, and an Embedded-clean swift-log (upstream 1.14.0 does not compile under Embedded Swift; the build dies inside
Loggingbefore reaching SQLiteKit). The swift-log patch is verified against a local clone but not committed here, and the manifest still points at upstream.Verified locally: the Embedded build is green (
DEVELOPMENT-SNAPSHOT-2026-06-12-a-wasm32-unknown-wasip1-embedded, patched swift-log, sibling Embedded branches wired viaswift package edit --path). Native and regular WASI behavior is unchanged by construction, since every gate here is false off Embedded, and the parent PR's results (9 native tests, no API breakage, zero NIO on WASI) carry over.