Skip to content
This repository was archived by the owner on Oct 18, 2023. It is now read-only.

Commit 35afd51

Browse files
bors[bot]penberg
andauthored
Merge #70
70: Fix JavaScript client r=penberg a=penberg Co-authored-by: Pekka Enberg <[email protected]>
2 parents a87ce5e + 2ac32b3 commit 35afd51

File tree

7 files changed

+692
-1609
lines changed

7 files changed

+692
-1609
lines changed

packages/libsql-client/package-lock.json

Lines changed: 646 additions & 1579 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/libsql-client/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,14 @@
2828
"lib/**/*"
2929
],
3030
"devDependencies": {
31+
"@types/better-sqlite3": "^7.6.3",
3132
"@types/jest": "^29.2.5",
3233
"jest": "^29.3.1",
3334
"ts-jest": "^29.0.3",
3435
"typescript": "^4.9.4"
3536
},
3637
"dependencies": {
37-
"cross-fetch": "^3.1.5",
38-
"sqlite3": "^5.1.2"
38+
"better-sqlite3": "^8.0.1",
39+
"cross-fetch": "^3.1.5"
3940
}
4041
}
Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
import { connect } from "../";
22

33
test("execute", async () => {
4-
const config = { url: "file::memory:" };
4+
const url = process.env.DB_URL ?? "file::memory:";
5+
const config = { url };
56
const db = connect(config);
6-
await db.execute("CREATE TABLE users (email TEXT)");
7-
const stmt = db.execute("SELECT * FROM users");
8-
// TODO: check results
7+
await db.execute("CREATE TABLE IF NOT EXISTS users (email TEXT)");
8+
await db.execute("DELETE FROM users");
9+
await db.execute("INSERT INTO users (email) VALUES ('[email protected]')");
10+
await db.execute("INSERT INTO users (email) VALUES ('[email protected]')");
11+
const rs = await db.execute("SELECT * FROM users");
12+
expect(rs.columns).toEqual(['email']);
13+
expect(rs.rows).toEqual([['[email protected]'], ['[email protected]']]);
914
});

packages/libsql-client/src/lib/driver/HttpDriver.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,9 @@ export class HttpDriver implements Driver {
1717
method: 'POST',
1818
body: JSON.stringify(query),
1919
});
20-
const results = await response.json() as Row[][];
20+
const results = await response.json() as any[];
2121
return results.map(rs => {
22-
return {
23-
results: rs,
24-
success: true,
25-
meta: {
26-
duration: 0,
27-
},
28-
};
22+
return rs.results as ResultSet;
2923
});
3024
}
31-
3225
}
Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import * as sqlite3 from "sqlite3";
1+
import DatabaseConstructor, {Database} from "better-sqlite3";
22
import { ResultSet } from "../libsql-js";
33
import { Driver } from "./Driver";
44

55
export class SqliteDriver implements Driver {
6-
db: sqlite3.Database;
6+
db: Database;
77
constructor(url: string) {
8-
this.db = new sqlite3.Database(url, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE | sqlite3.OPEN_FULLMUTEX | sqlite3.OPEN_URI);
8+
this.db = new DatabaseConstructor(url.substring(5))
99
}
1010
async transaction(sqls: string[]): Promise<ResultSet[]> {
1111
const result = [];
@@ -17,17 +17,29 @@ export class SqliteDriver implements Driver {
1717
}
1818
async execute(sql: string): Promise<ResultSet> {
1919
return await new Promise(resolve => {
20-
this.db.all(sql, (err, rows) => {
21-
// FIXME: error handling
22-
const rs = {
23-
results: rows,
24-
success: true,
25-
meta: {
26-
duration: 0,
27-
},
28-
};
29-
resolve(rs);
30-
})
20+
const stmt = this.db.prepare(sql);
21+
var columns: string[];
22+
var rows: any[];
23+
if (stmt.reader) {
24+
columns = stmt.columns().map(c => c.name);
25+
rows = stmt.all().map(row => {
26+
return columns.map(column => row[column]);
27+
});
28+
} else {
29+
columns = [];
30+
rows = [];
31+
stmt.run();
32+
}
33+
// FIXME: error handling
34+
const rs = {
35+
columns,
36+
rows,
37+
success: true,
38+
meta: {
39+
duration: 0,
40+
},
41+
};
42+
resolve(rs);
3143
});
3244
}
3345
}

packages/libsql-client/src/lib/libsql-js.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,14 @@ export type Row = Record<string, string | number | boolean | null>;
1515
* A SQL query result set.
1616
*/
1717
export type ResultSet = {
18+
/**
19+
* Query result columns.
20+
*/
21+
columns: string[] | null;
1822
/**
1923
* Query results.
2024
*/
21-
results: Row[] | null;
25+
rows: Row[] | null;
2226
/**
2327
* Was the query successful?
2428
*/

packages/libsql-client/tsconfig.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"target": "es5",
44
"module": "commonjs",
55
"moduleResolution": "node",
6+
"esModuleInterop": true,
67
"declaration": true,
78
"outDir": "./lib",
89
"strict": true

0 commit comments

Comments
 (0)