런타임 및 드라이버 지원
현재 상태
섹션 제목: “현재 상태”현재 지원 매트릭스는 지원 manifest에서 읽은 revision별 증거와 label을 표시합니다. 각 label과 증거는 매트릭스가 기록한 정확한 database, driver, profile, runtime, capability tuple과 해당 revision의 실행 workflow에만 적용됩니다. 인접한 서버 버전·runtime·profile·로컬 binding 또는 package 설치로 인증을 추론하지 마세요. 정확한 tuple의 revision별 workflow evidence를 확인해야 합니다. 최종 exact-SHA Runtime, Documentation, Release gate와 명시적인 release 승인은 별도 요구사항입니다.
증거 label
섹션 제목: “증거 label”- Official — 지정한 database, driver, profile, runtime, capability tuple을 정확한 실행 증거가 다룹니다.
- Conditional — 이름을 지정한 조건에서만 증거가 적용됩니다.
- Pending — 현재 구현 revision에 대한 새로운 성공 gate가 없습니다.
- Historical — 과거 exact revision이 조합을 실행했지만 현재 tree를 증명하지 않습니다.
- Compatible — public API가 동작할 수 있지만 정확한 인증 target을 주장하지 않습니다.
- Custom — 사용자가 제공한
QueryExecutor또는ConnectionProvider입니다. - Unsupported — 필요한 SQLBraid capability가 의도적으로 없습니다.
현재 매트릭스
섹션 제목: “현재 매트릭스”| 대상 | 데이터베이스 | 드라이버 | 런타임 | 상태 | 정확한 숫자 | JSON | 시간 | 트랜잭션 | 스트리밍 |
|---|---|---|---|---|---|---|---|---|---|
| better-sqlite3-node-22-18-0 | sqlite better-sqlite3 bundled SQLite | better-sqlite3@13.0.3 | node@22.18.0 | 호환 가능 | string · lossless · better-sqlite3-exact-string / string · unsupported · better-sqlite3-exact-string | — | — | 트랜잭션: 보장됨; 세이브포인트: 보장됨 | — |
| bun-sql-mariadb | mariadb 11.8.9 community | bun-sql@1.3.14 | bun@1.3.14 | 공식 | string · guarded · bun-sql-mariadb-1.3.14 / string · unsupported · bun-sql-mariadb-1.3.14 | 지원하지 않음 / 보장됨 | 값 검사 (네이티브 Date 편의 변환은 소수초 정밀도나 시간대 식별을 보존하지 않음) / 지원하지 않음 | 트랜잭션: 보장됨; 세이브포인트: 보장됨; 읽기 전용 트랜잭션: 값 검사 (이 백엔드에서 검증된 네이티브 격리 수준과 읽기 전용 매핑만 지원); Read uncommitted 격리: 값 검사 (이 백엔드에서 검증된 네이티브 격리 수준과 읽기 전용 매핑만 지원); Read committed 격리: 값 검사 (이 백엔드에서 검증된 네이티브 격리 수준과 읽기 전용 매핑만 지원); Repeatable read 격리: 값 검사 (이 백엔드에서 검증된 네이티브 격리 수준과 읽기 전용 매핑만 지원); Serializable 격리: 값 검사 (이 백엔드에서 검증된 네이티브 격리 수준과 읽기 전용 매핑만 지원) | 지원하지 않음 |
| bun-sql-mysql | mysql 8.4.2 community | bun-sql@1.3.14 | bun@1.3.14 | 공식 | string · guarded · bun-sql-mysql-1.3.14 / string · unsupported · bun-sql-mysql-1.3.14 | 값 검사 (네이티브 JSON 파싱은 숫자 무손실 표현이 아님) / 지원하지 않음 | 값 검사 (네이티브 Date 편의 변환은 소수초 정밀도나 시간대 식별을 보존하지 않음) / 지원하지 않음 | 트랜잭션: 보장됨; 세이브포인트: 보장됨; 읽기 전용 트랜잭션: 값 검사 (이 백엔드에서 검증된 네이티브 격리 수준과 읽기 전용 매핑만 지원); Read uncommitted 격리: 값 검사 (이 백엔드에서 검증된 네이티브 격리 수준과 읽기 전용 매핑만 지원); Read committed 격리: 값 검사 (이 백엔드에서 검증된 네이티브 격리 수준과 읽기 전용 매핑만 지원); Repeatable read 격리: 값 검사 (이 백엔드에서 검증된 네이티브 격리 수준과 읽기 전용 매핑만 지원); Serializable 격리: 값 검사 (이 백엔드에서 검증된 네이티브 격리 수준과 읽기 전용 매핑만 지원) | 지원하지 않음 |
| bun-sql-postgres | postgres 16.4 alpine | bun-sql@1.3.14 | bun@1.3.14 | 공식 | string · guarded · bun-sql-postgres-1.3.14 / string · lossless · bun-sql-postgres-1.3.14 | 값 검사 (네이티브 JSON 파싱은 숫자 무손실 표현이 아님) / 지원하지 않음 | 값 검사 (네이티브 Date 편의 변환은 소수초 정밀도나 시간대 식별을 보존하지 않음) / 지원하지 않음 | 트랜잭션: 보장됨; 세이브포인트: 보장됨; 읽기 전용 트랜잭션: 값 검사 (이 백엔드에서 검증된 네이티브 격리 수준과 읽기 전용 매핑만 지원); Read uncommitted 격리: 값 검사 (이 백엔드에서 검증된 네이티브 격리 수준과 읽기 전용 매핑만 지원); Read committed 격리: 값 검사 (이 백엔드에서 검증된 네이티브 격리 수준과 읽기 전용 매핑만 지원); Repeatable read 격리: 값 검사 (이 백엔드에서 검증된 네이티브 격리 수준과 읽기 전용 매핑만 지원); Serializable 격리: 값 검사 (이 백엔드에서 검증된 네이티브 격리 수준과 읽기 전용 매핑만 지원) | 지원하지 않음 |
| bun-sql-sqlite | sqlite 3.53.0 bun-embedded | bun-sql@1.3.14 | bun@1.3.14 | 공식 | string · guarded · bun-sql-sqlite-1.3.14 / string · unsupported · bun-sql-sqlite-1.3.14 | 지원하지 않음 / 보장됨 | 지원하지 않음 / 보장됨 | 트랜잭션: 보장됨; 세이브포인트: 보장됨; 읽기 전용 트랜잭션: 지원하지 않음; Read uncommitted 격리: 지원하지 않음; Read committed 격리: 지원하지 않음; Repeatable read 격리: 지원하지 않음; Serializable 격리: 보장됨 | 지원하지 않음 |
| d1-cloudflare-workerd-2026-07-30 | sqlite Cloudflare D1 managed SQLite (version unreported) | cloudflare-d1@1.20260730.1 | workerd@1.20260730.1 | 호환 가능 | string · guarded · d1-guarded-safe-integer / string · unsupported · d1-guarded-safe-integer | 보장됨 | 보장됨 | 읽기 전용 트랜잭션: 지원하지 않음; Read uncommitted 격리: 지원하지 않음; Read committed 격리: 지원하지 않음; Repeatable read 격리: 지원하지 않음; Serializable 격리: 지원하지 않음; 트랜잭션: 지원하지 않음; 세이브포인트: 지원하지 않음 | 지원하지 않음 |
| libsql-local-node-22-18-0 | sqlite libSQL local SQLite | libsql@0.18.0 | node@22.18.0 | 호환 가능 | string · lossless · libsql-exact-string / string · unsupported · libsql-exact-string | — | — | 트랜잭션: 보장됨; 세이브포인트: 보장됨 | — |
| mariadb-connector-node-11-8-9 | mariadb 11.8.9 community | mariadb@3.5.4 | node@22.18.0 | 공식 | string · guarded · mariadb-lossless-text / string · guarded · mariadb-lossless-text | 보장됨 | 보장됨 | 읽기 전용 트랜잭션: 보장됨; Read uncommitted 격리: 보장됨; Read committed 격리: 보장됨; Repeatable read 격리: 보장됨; Serializable 격리: 보장됨; 트랜잭션: 보장됨; 세이브포인트: 보장됨 | 보장됨 |
| mssql-tedious-developer-node-2022-cu18 | mssql 2022-CU18 Developer | tedious@20.0.0 | node@22.18.0 | 공식 | string · guarded · mssql-tedious / string · unsupported · mssql-tedious | 보장됨 | 값 검사 (SQL Server 시간 텍스트 캐스트 경로) | 읽기 전용 트랜잭션: 지원하지 않음; Read uncommitted 격리: 보장됨; Read committed 격리: 보장됨; Repeatable read 격리: 보장됨; Serializable 격리: 보장됨; 트랜잭션: 보장됨; 세이브포인트: 보장됨 | 보장됨 |
| mysql-mysql2-deno-2-9-3 | mysql 8.4.2 community | mysql2@3.24.4 | deno@2.9.3 | 공식 | string · guarded · mysql2-lossless-text / string · lossless · mysql2-lossless-text | 보장됨 | 보장됨 | 읽기 전용 트랜잭션: 보장됨; Read uncommitted 격리: 보장됨; Read committed 격리: 보장됨; Repeatable read 격리: 보장됨; Serializable 격리: 보장됨; 트랜잭션: 보장됨; 세이브포인트: 보장됨 | 보장됨 |
| mysql-mysql2-node-8-4-2 | mysql 8.4.2 community | mysql2@3.24.4 | node@22.18.0 | 공식 | string · guarded · mysql2-lossless-text / string · lossless · mysql2-lossless-text | 보장됨 | 보장됨 | 읽기 전용 트랜잭션: 보장됨; Read uncommitted 격리: 보장됨; Read committed 격리: 보장됨; Repeatable read 격리: 보장됨; Serializable 격리: 보장됨; 트랜잭션: 보장됨; 세이브포인트: 보장됨 | 보장됨 |
| oracle-oracledb-thin-node-23-9 | oracle 23.9 Free | node-oracledb@7.0.1 | node@22.18.0 | 공식 | string · unsupported · oracle-thin / string · lossless · oracle-thin | 보장됨 / 값 검사 (Oracle JSON_SERIALIZE 텍스트 경로) | 값 검사 (Oracle Date 밀리초 정밀도) / 값 검사 (Oracle 시간 텍스트 캐스트 경로) | 읽기 전용 트랜잭션: 보장됨; Read uncommitted 격리: 지원하지 않음; Read committed 격리: 보장됨; Repeatable read 격리: 지원하지 않음; Serializable 격리: 보장됨; 트랜잭션: 보장됨; 세이브포인트: 보장됨 | 보장됨 |
| postgres-current | postgres 18.6 alpine | pg@8.23.0 | node@22.18.0 | 공식 | string · lossless · pg-lossless-text / string · lossless · pg-lossless-text | 보장됨 | 보장됨 | — | — |
| postgres-pg-deno-2-9-3 | postgres 16.4 alpine | pg@8.23.0 | deno@2.9.3 | 공식 | string · lossless · pg-lossless-text / string · lossless · pg-lossless-text | 보장됨 | 보장됨 | 읽기 전용 트랜잭션: 보장됨; Read uncommitted 격리: 값 검사 (PostgreSQL READ UNCOMMITTED는 READ COMMITTED 의미론 사용); Read committed 격리: 보장됨; Repeatable read 격리: 보장됨; Serializable 격리: 보장됨; 트랜잭션: 보장됨; 세이브포인트: 보장됨 | 보장됨 |
| postgres-pg-node-16-4 | postgres 16.4 alpine | pg@8.23.0 | node@22.18.0 | 공식 | string · lossless · pg-lossless-text / string · lossless · pg-lossless-text | 보장됨 | 보장됨 | 읽기 전용 트랜잭션: 보장됨; Read uncommitted 격리: 값 검사 (PostgreSQL READ UNCOMMITTED는 READ COMMITTED 의미론 사용); Read committed 격리: 보장됨; Repeatable read 격리: 보장됨; Serializable 격리: 보장됨; 트랜잭션: 보장됨; 세이브포인트: 보장됨 | 보장됨 |
| sqlite-node-sqlite-deno-2-9-3 | sqlite 3.53.2 Deno bundled SQLite | node-sqlite@2.9.3 | deno@2.9.3 | 공식 | string · lossless · sqlite-exact-string / string · unsupported · sqlite-exact-string | 보장됨 | 보장됨 | 읽기 전용 트랜잭션: 지원하지 않음; Read uncommitted 격리: 지원하지 않음; Read committed 격리: 지원하지 않음; Repeatable read 격리: 지원하지 않음; Serializable 격리: 보장됨; 트랜잭션: 보장됨; 세이브포인트: 보장됨 | 보장됨 |
| sqlite-wasm-browser-3-53-4 | sqlite 3.53.4 official SQLite WASM OO1 | sqlite-wasm@3.53.4-build1 | browser@153.0.8010.12 | 공식 | string · lossless · sqlite-wasm-exact-string / string · unsupported · sqlite-wasm-exact-string | 보장됨 | 보장됨 | 읽기 전용 트랜잭션: 지원하지 않음; Read uncommitted 격리: 지원하지 않음; Read committed 격리: 지원하지 않음; Repeatable read 격리: 지원하지 않음; Serializable 격리: 보장됨; 트랜잭션: 보장됨; 세이브포인트: 보장됨 | 보장됨 |
| sqlite-node-sqlite-node-22-18-0 | sqlite 3.50.2 Node bundled SQLite | node-sqlite@22.18.0 | node@22.18.0 | 공식 | string · lossless · sqlite-exact-string / string · unsupported · sqlite-exact-string | 보장됨 | 보장됨 | 읽기 전용 트랜잭션: 지원하지 않음; Read uncommitted 격리: 지원하지 않음; Read committed 격리: 지원하지 않음; Repeatable read 격리: 지원하지 않음; Serializable 격리: 보장됨; 트랜잭션: 보장됨; 세이브포인트: 보장됨 | 보장됨 |
매트릭스는 기계 판독 support target과 capability 조건에서 생성됩니다. 모든 adapter가 모든 작업을 제공한다는 약속이 아니라 증거 표시입니다.
Capability 어휘
섹션 제목: “Capability 어휘”Dialect, driver, runtime, host, database version, representation profile, capability는 별도 축입니다. 정식 capability 식별자는 다음과 같습니다.
sql.native-transparency sql.generated-structureresult.rows result.commandresult.multiple-sets result.standard-schemanumeric.exact-integer numeric.exact-decimalnumeric.approximate-float numeric.approximate-specialnumeric.bind-exact numeric.aggregatenumeric.command-metadata numeric.special-valuesnumeric.scale-greater-than-precisionnumeric.negative-scaledata.json-parsed data.json-lossless-textdata.binary data.uuiddata.temporal-native data.temporal-losslessdata.timezonemetadata.command-safedml.insert-returning dml.update-returningdml.delete-returning dml.merge-returningdml.upsert-returningsession.pinnedstatement.prepare statement.cancelstatement.stream statement.bulkexecution.bulk-fidelitytransaction transaction.savepointtransaction.read-onlytransaction.isolation.read-uncommittedtransaction.isolation.read-committedtransaction.isolation.repeatable-readtransaction.isolation.serializableroutine.call routine.outroutine.inout routine.result-setsroutine.out-cursor routine.return-valuemetadata.identity metadata.generatedmetadata.routines metadata.typesexecution.prepared, execution.stream, routine.resultsets,
routine.return-status 같은 폐기된 alias를 추가하지 마세요.
statementBinding.describe()와 describeBulk()는 lease 획득 전에 논리
RenderedStatement/RenderedBulk를 검증합니다. Provider와 lease는 동일한
불변 binding adapter identity를 노출해야 합니다. Prepared shape는 논리
result kind, canonical segments, dialect, 순서 있는 hint/direction/output
metadata이며 물리 placeholder 표기는 shape를 바꾸지 않습니다.
db.session(callback)은 하나의 물리 provider lease를 고정하고 중첩 session은
재사용합니다. db.tx(callback)은 그 lease를 사용하거나 root lease를 얻으며,
중첩 transaction은 advertised savepoint를 사용합니다. 명시적 transaction
option은 고정된 read-uncommitted, read-committed, repeatable-read,
serializable isolation과 readOnly만 사용합니다. 잘못된 runtime option은
획득 전에 TypeError / BRAID_TX_OPTIONS_INVALID로 실패하고, 유효하지만
지원하지 않는 option은 UnsupportedFeatureError /
BRAID_TX_OPTION_UNSUPPORTED를 사용하며, 중첩 명시 option은
BRAID_TX_OPTIONS_NESTED를 사용합니다.
이미 abort된 AbortSignal은 자신의 reason을 보존합니다. 활성 signal에는
실제 adapter cancellation 경로가 필요하며, 없으면 I/O 전에
UnsupportedFeatureError, feature statement.cancel,
BRAID_CANCEL_UNSUPPORTED로 실패합니다. 사용할 수 없는 session 또는
transaction primitive는 각각 BRAID_SESSION_UNSUPPORTED 또는
BRAID_TX_UNSUPPORTED를 사용합니다.
Oracle의 guarded oracle.connection-break 조건은 즉시 중단이나 timeout을
보장하지 않는 cooperative 동작입니다. 문서화된 DBMS_SESSION.SLEEP raw
probe는 sleep이 끝날 때만 ORA-01013으로 거부될 수 있으며, 어댑터는
settlement까지 물리 lease를 유지합니다.
Driver/runtime 경계
섹션 제목: “Driver/runtime 경계”First-party root는 PostgreSQL, MySQL, MariaDB, SQLite, Oracle, SQL Server입니다.
Driver subpath가 protocol과 cleanup을 소유합니다: pg, mysql2, MariaDB
Connector/Node.js, node:sqlite, SQLite WASM, D1, node-oracledb Thin,
Tedious. Bun은 명시적으로 사용자가 선택하는
dialect: "postgres" | "mysql" | "mariadb" | "sqlite" 하나의 SQL adapter
family를 사용하며 connection에서 SQL 의미를 추론하지 않습니다. Bun 1.3.14는
active cancellation을 지원하지 않아 BRAID_CANCEL_UNSUPPORTED를 사용하며
stream/routine carrier도 지원하지 않습니다. result.rows/result.command
metadata는 bun-sql.result-kind-metadata 조건에서만 guarded됩니다.
MySQL/MariaDB에서는 command가 null이고 affectedRows가 0이므로 빈
SELECT와 영향 행이 0인 DML/DDL은 실행 후에만
BRAID_RESULT_KIND_AMBIGUOUS로 실패할 수 있습니다. Deno는 public driver
API가 동작하는 기존 first-party adapter를 재사용하며 Deno 전용 dialect를
만들지 않습니다.
stream, routine, output, hint, bulk, transaction, cancellation 지원이 없으면
명시적인 UnsupportedFeatureError로 실패해야 합니다. SQLBraid는 streaming을
흉내 내려고 paginate하거나 routine carrier를 추측하거나 hint를 무시하거나
숨은 transaction을 만들거나 검증되지 않은 tuple을 승격하지 않습니다. D1의
managed SQLite version은 공개되지 않았으므로 local Worker binding 검사는
version 인증이 아닙니다.
정확한 숫자, JSON/temporal, container 동작은 별도 증거 경계입니다. 정확한
DB integer와 decimal은 canonical string이고 근사 IEEE 값은 number입니다.
Profile과 codegen descriptor는 일치해야 합니다. Metadata는 positive open-world
증거이므로 누락된 사실이 SQL invalid를 뜻하지 않습니다. Bun 1.3.14는
PostgreSQL/MySQL/MariaDB에 { bigint: true }, SQLite에
{ safeIntegers: true }를 사용합니다. Column metadata가 없으므로
integral 및 integral-approximate Number row는 ambiguous로 거부되고,
PostgreSQL decimal은 string입니다. MySQL/MariaDB DECIMAL과 binary 출력은
타입 정보 없는 같은 byte carrier라 거부하며 CAST(... AS CHAR) 또는
HEX(...)를 직접 작성해야 합니다. SQLite native decimal은 지원하지 않습니다.
MariaDB/SQLite JSON은 text이며 PostgreSQL/MySQL native JSON은 중첩 숫자가
반올림될 수 있습니다. Bun SQLite의 결과 종류는 bun-sql.sqlite-result-parser
조건에서 guarded입니다. Bun이 서로 다른 따옴표가 섞인 SQL literal을 잘못
분류할 수 있으므로 JSON은 bind하세요. SQLBraid가 SQL을 재작성하지 않습니다.
증거 추가
섹션 제목: “증거 추가”지원 추가에는 정확한 version/profile tuple, 실제 engine 실행 범위, 기계 판독 target 조건, 새 clean revision이 필요합니다. Release 결정에는 translation freshness, package/export 검사와 immutable release dry-run도 필요합니다. 과거 실행 링크나 설명글만으로는 라벨을 승격할 수 없습니다. 이 페이지는 npm/tag/Pages 발행을 의미하지 않습니다.