KSQL-Treiber
Eigene Treiber für den KSQL-Port (TDS 7.4 mit dem KSQL-Profil) in acht Sprachen, je nach dem Vorbild des Microsoft-Treibers: dieselbe Schnittstelle, dieselben Schlüssel der Verbindungszeichenfolge, dieselbe Abbildung der Typen und Fehler — und dazu, was KSQL über SQL Server hinaus kann. Jeder arbeitet auch an SQL Server. Jeder Treiber spielt denselben sprachneutralen Prüfkatalog ab (KuonenSQL/tools/ksql-konformitaet/faelle.json, D36.1), einmal gegen den KSQL-Port und einmal gegen SQL Server 2025.
Vorbild: tedious und mssql · npm @kuonen/ksql (oben mssql), @kuonen/ksql/tedious (unten tedious) · Node.js 18+ (ES2022, ESM); Deno und Bun nicht geprüft · Quelle: Data/src/Kuonen.Data.Ksql.TypeScript
· Roadmap D36.3 ✅
Herunterladen und einbinden
- kuonen-ksql-2.0.0.tgz · 98 KB
SHA-256
5299388cb4426fde8e698c7127ac74aeaf41e20e2cd41bbf6c74ff78cdebd1cc
npm install ./kuonen-ksql-2.0.0.tgz
# dann im Code: import sql from '@kuonen/ksql'; (mssql-Schnittstelle)
# oder import { Connection } from '@kuonen/ksql/tedious';Gebautes JavaScript mit Typen (ESM und CommonJS), ohne Laufzeit-Abhängigkeiten; Node 18 oder neuer.
Aus dem Quellcode bauen
cd Data/src/Kuonen.Data.Ksql.TypeScript
npm install # nur TypeScript und die Typen von Node (Entwicklung)
npm run bauen # dist/*.js und dist/*.d.ts
npm pack # @kuonen-ksql-<Fassung>.tgzZur Laufzeit keine Fremdabhängigkeiten; TypeScript dient nur dem Bau. Node ab 22.6 führt den Quelltext auch ungebaut aus (--experimental-strip-types, ab Node 23.6 ohne Schalter).
Verbindungszeichenfolge
Server=127.0.0.1,1333;Database=master;User Id=sa;Password=<Ihr-Kennwort>;TrustServerCertificate=trueOhne Port gilt 1433 wie beim Vorbild; den KSQL-Port 1333 nennt man.
| Schlüssel | Bedeutung |
|---|---|
Server, Database, User Id, Password, Encrypt, TrustServerCertificate … | die Verbindungszeichenfolge mit den Schlüsseln der Microsoft-Treiber wie bei mssql |
Konfigurationsobjekt | wie tedious: server, authentication.options.userName/password, options.port, options.trustServerCertificate … |
options.valueFormat | native (Vorgabe, wie tedious) oder text (genaue Werte in der kanonischen Form des Prüfkatalogs) |
Port | ohne Angabe 1433 wie bei tedious; den KSQL-Port 1333 nennt man |
Beispiel: verbinden, abfragen, Parameter, Transaktion
import sql from '@kuonen/ksql';
const pool = await new sql.ConnectionPool('Server=127.0.0.1,1333;User Id=sa;Password=…;TrustServerCertificate=true').connect();
const { recordset } = await pool.query`SELECT name FROM sys.tables WHERE name LIKE ${'kk_%'}`;
const t = new sql.Transaction(pool);
await t.begin();
await t.request().input('id', sql.Int, 7).query('UPDATE konto SET saldo = saldo - 1 WHERE id = @id');
await t.commit();
try {
await pool.query('SELECT 1 / 0');
} catch (e) { // e.number 8134, e.sqlState '22012'
console.log(e.number, e.sqlState);
}Typen
| SQL- bzw. KSQL-Typ | im Treiber |
|---|---|
| Typen von SQL Server | wie tedious: Zahlen, Date, Buffer, bigint als Text; Parametertypen sql.Int, sql.VarChar(50), sql.Decimal(18, 4), sql.NVarChar(sql.MAX) … |
| BOOLEAN (auf der Leitung bit) | boolean; Parametertyp sql.Boolean bzw. TYPES.Boolean |
| INTERVAL, DECFLOAT, ROW, ARRAY, MULTISET | Text (1 year 2 mons, 1E+6144, (1,a), {1,2,3}); metadata.ksqlType ist true, metadata.typeName nennt den Typ der Norm; Parametertypen sql.Interval, sql.Decfloat |
| valueFormat: 'text' | alle Werte als genaue Texte (decimal(38), money, datetime2(7) ohne Rundung auf Millisekunden) |
Fehler und SQLSTATE
| Fall | Angaben |
|---|---|
| RequestError, ConnectionError (tedious und mssql) | number, state, class, lineNumber, serverName, procName wie dort |
| sqlState am KSQL-Port | der SQLSTATE vom Meldungsende (22012, 23000, 42000, 45000, eigene aus SIGNAL); message ohne den Zusatz „(SQLSTATE …)“ |
| sqlState an SQL Server | leer |
Unterschiede zu tedious und mssql
- Zwei Schichten in einem Paket: die Schnittstelle von tedious unter @kuonen/ksql/tedious, die von mssql als Standard-Export.
- connection.serverProgram ist am KSQL-Port „KuonenSQL“, connection.isKuonenSql folgt aus dem PRELOGIN.
- request.recordsAffected zählt wie RecordsAffected der Microsoft-Treiber (ohne Abfragen); rowCount zählt wie tedious.
- Nur ESM; kein CommonJS-Bau für require.
Was fehlt
- Encrypt=Strict (TDS 8.0), Windows- und Entra-Anmeldung, benannte Instanzen (SQL Browser), MARS.
- Tabellenwertparameter, Parameter vom Typ sql_variant und UDT, Always Encrypted.
- mssql: parseJSON, Table.fromRecordset, Ereignisse des Pools.
- Geprüft nur mit Node 25; Node 18/20/22, Deno und Bun nicht.
| Restzeile | Beschreibung | Stand |
|---|---|---|
D36.3f Rest aus D36.3d | (1) Der Prüfstand im Container lief nicht: das Abbild `node:22-bookworm-slim` liegt nicht lokal und wurde ohne Freigabe nicht geladen; nachholen mit `KUONENSQL_DOCKER_ABNAHME=1 node --test "Data/tests/Kuonen.Data.Ksql.TypeScript.Tests/konformitaet.test.ts"`. (2) Geprüft nur mit Node 25; Node 18/20/22, Deno und Bun nicht (lokal nicht installiert). (3) Nicht gebaut: Windows- und Entra-Anmeldung, MARS, Parameter vom Typ sql_variant und UDT, Always Encrypted. (4) TDS 8.0 an SQL Server nicht geprüft (Orakel ohne Zertifikat für TDS 8.0); der SQL Browser nur gegen einen nachgebauten, die Umleitung nur gegen einen falschen Server (der KSQL-Port leitet nur bei Lesezugriff auf eine Kopie um). **Erledigt 21.10.2026:** (1) Mit `KUONENSQL_DOCKER_ABNAHME=1` lief `konformitaet.test.ts` ganz durch: KSQL-Port, Orakel und der Prüfstand im Abbild `kuonen-ksql-treiber-node` (aus `node:22-bookworm-slim`, 0 abweichend) - 3 von 3. (2) Node 24.12 lokal: alle 76 Tests, 75 grün, 1 übersprungen (TDS 8 am Orakel); Node 22.23 im Container: die 48 Tests ohne Server grün (die mit Server brauchen dotnet, das Abbild hat keins). Rest in D36.3g. | ✅ |
D36.3g Rest aus D36.3f | (1) Node 18/20, Deno und Bun nicht geprüft; Node 22 nur ohne Server. (2) Nicht gebaut: Windows- und Entra-Anmeldung, MARS, Parameter vom Typ sql_variant und UDT, Always Encrypted. (3) TDS 8.0 an SQL Server nicht geprüft (Orakel ohne Zertifikat für TDS 8.0); der SQL Browser nur gegen einen nachgebauten, die Umleitung nur gegen einen falschen Server. | ⬜ |
Herkunft und Lizenz
Eigenbau: übernommen sind nur die Schnittstelle des Microsoft-Treibers und das am Orakel (SQL Server 2025) gemessene Verhalten, kein Code – auch nicht aus MIT- oder BSD-lizenzierten Quellen –, damit der Treiber uneingeschränkt KuonenSQL gehört. Der Code bleibt geschlossen; eine Veröffentlichung gibt es nur als eigenständigen Fork, den Marc Kuonen selbst anlegt.
Kein Code von tedious oder mssql. Das npm-Paket ist private und wird nicht veröffentlicht.