rado 0.0.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Column.d.ts +13 -7
- package/dist/Column.js +7 -4
- package/dist/Cursor.d.ts +6 -5
- package/dist/Cursor.js +6 -5
- package/dist/Driver.d.ts +30 -4
- package/dist/Driver.js +117 -18
- package/dist/Formatter.d.ts +8 -2
- package/dist/Formatter.js +60 -17
- package/dist/Ops.js +9 -10
- package/dist/Query.d.ts +40 -18
- package/dist/Query.js +15 -0
- package/dist/Sanitizer.d.ts +1 -1
- package/dist/Schema.d.ts +23 -0
- package/dist/Schema.js +60 -0
- package/dist/Statement.d.ts +5 -2
- package/dist/Statement.js +2 -2
- package/dist/Table.d.ts +8 -10
- package/dist/Table.js +34 -18
- package/dist/Target.d.ts +4 -4
- package/dist/driver/better-sqlite3.d.ts +10 -5
- package/dist/driver/better-sqlite3.js +26 -24
- package/dist/driver/sql.js.d.ts +10 -5
- package/dist/driver/sql.js.js +35 -32
- package/dist/driver/sqlite3.d.ts +10 -3
- package/dist/driver/sqlite3.js +51 -46
- package/dist/sqlite/SqliteFormatter.d.ts +1 -1
- package/dist/sqlite/SqliteFormatter.js +1 -1
- package/dist/sqlite/SqliteSchema.d.ts +24 -0
- package/dist/sqlite/SqliteSchema.js +38 -0
- package/package.json +1 -1
package/dist/driver/sqlite3.js
CHANGED
|
@@ -1,62 +1,67 @@
|
|
|
1
1
|
// src/driver/sqlite3.ts
|
|
2
2
|
import { Driver } from "../Driver.js";
|
|
3
|
-
import { QueryType } from "../Query.js";
|
|
4
3
|
import { SqliteFormatter } from "../sqlite/SqliteFormatter.js";
|
|
4
|
+
import { SqliteSchema } from "../sqlite/SqliteSchema.js";
|
|
5
5
|
var Sqlite3Driver = class extends Driver.Async {
|
|
6
6
|
constructor(db) {
|
|
7
|
-
super();
|
|
7
|
+
super(new SqliteFormatter());
|
|
8
8
|
this.db = db;
|
|
9
9
|
}
|
|
10
|
-
formatter = new SqliteFormatter();
|
|
11
10
|
lock;
|
|
12
|
-
async
|
|
11
|
+
async executeQuery(query) {
|
|
13
12
|
await this.lock;
|
|
13
|
+
return super.executeQuery(query);
|
|
14
|
+
}
|
|
15
|
+
rows([sql, params]) {
|
|
16
|
+
return new Promise((resolve, reject) => {
|
|
17
|
+
const stmt = this.db.prepare(sql);
|
|
18
|
+
stmt.all(params, (err, rows) => {
|
|
19
|
+
if (err)
|
|
20
|
+
reject(err);
|
|
21
|
+
else
|
|
22
|
+
resolve(rows);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
async values(stmt) {
|
|
27
|
+
const rows = await this.rows(stmt);
|
|
28
|
+
return rows.map(Object.values);
|
|
29
|
+
}
|
|
30
|
+
execute([sql, params]) {
|
|
14
31
|
return new Promise((resolve, reject) => {
|
|
15
|
-
const [sql, params] = this.formatter.compile(query);
|
|
16
32
|
const stmt = this.db.prepare(sql);
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
resolve(query.singleResult ? res[0] : res);
|
|
24
|
-
});
|
|
25
|
-
} else if (query.type === QueryType.Raw) {
|
|
26
|
-
switch (query.expectedReturn) {
|
|
27
|
-
case "row":
|
|
28
|
-
return stmt.get(params, (err, row) => {
|
|
29
|
-
if (err)
|
|
30
|
-
reject(err);
|
|
31
|
-
else
|
|
32
|
-
resolve(row);
|
|
33
|
-
});
|
|
34
|
-
case "rows":
|
|
35
|
-
return stmt.all(params, (err, rows) => {
|
|
36
|
-
if (err)
|
|
37
|
-
reject(err);
|
|
38
|
-
else
|
|
39
|
-
resolve(rows);
|
|
40
|
-
});
|
|
41
|
-
default:
|
|
42
|
-
stmt.run(params, (err) => {
|
|
43
|
-
if (err)
|
|
44
|
-
reject(err);
|
|
45
|
-
else
|
|
46
|
-
resolve(void 0);
|
|
47
|
-
});
|
|
48
|
-
return void 0;
|
|
49
|
-
}
|
|
50
|
-
} else {
|
|
51
|
-
stmt.run(params, function(err) {
|
|
52
|
-
if (err)
|
|
53
|
-
reject(err);
|
|
54
|
-
else
|
|
55
|
-
resolve({ rowsAffected: this.changes });
|
|
56
|
-
});
|
|
57
|
-
}
|
|
33
|
+
stmt.run(params, (err) => {
|
|
34
|
+
if (err)
|
|
35
|
+
reject(err);
|
|
36
|
+
else
|
|
37
|
+
resolve();
|
|
38
|
+
});
|
|
58
39
|
});
|
|
59
40
|
}
|
|
41
|
+
mutate([sql, params]) {
|
|
42
|
+
return new Promise((resolve, reject) => {
|
|
43
|
+
const stmt = this.db.prepare(sql);
|
|
44
|
+
stmt.run(params, function(err) {
|
|
45
|
+
if (err)
|
|
46
|
+
reject(err);
|
|
47
|
+
else
|
|
48
|
+
resolve({ rowsAffected: this.changes });
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
async schemaInstructions(tableName) {
|
|
53
|
+
try {
|
|
54
|
+
const columnData = await this.rows(
|
|
55
|
+
SqliteSchema.tableData(tableName).compile(this.formatter)
|
|
56
|
+
);
|
|
57
|
+
const indexData = await this.rows(
|
|
58
|
+
SqliteSchema.indexData(tableName).compile(this.formatter)
|
|
59
|
+
);
|
|
60
|
+
return SqliteSchema.createInstructions(columnData, indexData);
|
|
61
|
+
} catch (e) {
|
|
62
|
+
return void 0;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
60
65
|
isolate() {
|
|
61
66
|
const connection = new Sqlite3Driver(this.db);
|
|
62
67
|
let release, trigger = new Promise((resolve) => {
|
|
@@ -2,7 +2,7 @@ import { Formatter } from '../Formatter';
|
|
|
2
2
|
import { Statement } from '../Statement';
|
|
3
3
|
export declare class SqliteFormatter extends Formatter {
|
|
4
4
|
escapeValue(value: any): string;
|
|
5
|
-
|
|
5
|
+
escapeIdentifier(input: string): string;
|
|
6
6
|
escapeString(input: string): string;
|
|
7
7
|
formatSqlAccess(on: Statement, field: string): Statement;
|
|
8
8
|
formatJsonAccess(on: Statement, field: string): Statement;
|
|
@@ -23,7 +23,7 @@ var SqliteFormatter = class extends Formatter {
|
|
|
23
23
|
return this.escapeString(value);
|
|
24
24
|
return "json(" + this.escapeString(JSON.stringify(value)) + ")";
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
escapeIdentifier(input) {
|
|
27
27
|
return escapeWithin(input, "`");
|
|
28
28
|
}
|
|
29
29
|
escapeString(input) {
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SchemaInstructions } from '../Schema';
|
|
2
|
+
import { Statement } from '../Statement';
|
|
3
|
+
export declare namespace SqliteSchema {
|
|
4
|
+
type Column = {
|
|
5
|
+
cid: number;
|
|
6
|
+
name: string;
|
|
7
|
+
type: string;
|
|
8
|
+
notnull: number;
|
|
9
|
+
dflt_value: string | null;
|
|
10
|
+
pk: number;
|
|
11
|
+
};
|
|
12
|
+
interface Index {
|
|
13
|
+
type: 'index';
|
|
14
|
+
name: string;
|
|
15
|
+
tbl_name: string;
|
|
16
|
+
rootpage: number;
|
|
17
|
+
sql: string;
|
|
18
|
+
}
|
|
19
|
+
function tableData(tableName: string): Statement;
|
|
20
|
+
function indexData(tableName: string): Statement;
|
|
21
|
+
function createInstructions(columnData: Array<Column>, indexData: Array<Index>): SchemaInstructions;
|
|
22
|
+
function columnInstruction(column: Column): [string, string];
|
|
23
|
+
function indexInstruction(index: Index): [string, string];
|
|
24
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// src/sqlite/SqliteSchema.ts
|
|
2
|
+
import { Statement, identifier } from "../Statement.js";
|
|
3
|
+
import { SqliteFormatter } from "./SqliteFormatter.js";
|
|
4
|
+
var SqliteSchema;
|
|
5
|
+
((SqliteSchema2) => {
|
|
6
|
+
const formatter = new SqliteFormatter();
|
|
7
|
+
function tableData(tableName) {
|
|
8
|
+
return Statement.tag`select * from pragma_table_info(${tableName}) order by cid`;
|
|
9
|
+
}
|
|
10
|
+
SqliteSchema2.tableData = tableData;
|
|
11
|
+
function indexData(tableName) {
|
|
12
|
+
return Statement.tag`select * from sqlite_master where type='index' and tbl_name=${tableName}`;
|
|
13
|
+
}
|
|
14
|
+
SqliteSchema2.indexData = indexData;
|
|
15
|
+
function createInstructions(columnData, indexData2) {
|
|
16
|
+
const columns = columnData.map(columnInstruction);
|
|
17
|
+
const indexes = indexData2.map(indexInstruction);
|
|
18
|
+
return {
|
|
19
|
+
columns: Object.fromEntries(columns),
|
|
20
|
+
indexes: Object.fromEntries(indexes)
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
SqliteSchema2.createInstructions = createInstructions;
|
|
24
|
+
function columnInstruction(column) {
|
|
25
|
+
return [
|
|
26
|
+
column.name,
|
|
27
|
+
identifier(column.name).add(column.type.toLowerCase()).addIf(column.pk === 1, "primary key").addIf(column.notnull === 1, "not null").addIf(column.dflt_value !== null, column.dflt_value).compile(formatter)[0]
|
|
28
|
+
];
|
|
29
|
+
}
|
|
30
|
+
SqliteSchema2.columnInstruction = columnInstruction;
|
|
31
|
+
function indexInstruction(index) {
|
|
32
|
+
return [index.name, index.sql];
|
|
33
|
+
}
|
|
34
|
+
SqliteSchema2.indexInstruction = indexInstruction;
|
|
35
|
+
})(SqliteSchema || (SqliteSchema = {}));
|
|
36
|
+
export {
|
|
37
|
+
SqliteSchema
|
|
38
|
+
};
|