sqlite WIP

This commit is contained in:
Jan Prochazka
2021-04-25 21:53:27 +02:00
parent 3c089a5b81
commit caa2d22dbd
6 changed files with 42 additions and 27 deletions

View File

@@ -4,6 +4,23 @@ class Analyser extends DatabaseAnalyser {
constructor(pool, driver) {
super(pool, driver);
}
async _runAnalysis() {
const tables = await this.driver.query(this.pool, "select * from sqlite_master where type='table'");
console.log('tables', tables);
const res = this.mergeAnalyseResult(
{
tables: tables.rows.map((x) => ({
pureName: x.name,
objectId: x.name,
})),
},
(x) => x.pureName
);
// console.log('MERGED', res);
return res;
}
}
module.exports = Analyser;

View File

@@ -3,28 +3,28 @@ const stream = require('stream');
const driverBase = require('../frontend/driver');
const Analyser = require('./Analyser');
let sqlite3;
let Database;
/** @type {import('dbgate-types').EngineDriver} */
const driver = {
...driverBase,
analyserClass: Analyser,
async connect({ server, port, user, password, database }) {
const pool = new NativePool({
server,
port,
user,
password,
database,
});
await pool.connect();
async connect({ databaseFile }) {
const pool = new Database(databaseFile);
return pool;
},
// @ts-ignore
async query(pool, sql) {
const stmt = pool.prepare(sql);
// stmt.raw();
const columns = stmt.columns();
const rows = stmt.all();
return {
rows: [],
columns: [],
rows,
columns: columns.map((col) => ({
columnName: col.name,
dataType: col.type,
})),
};
},
async stream(pool, sql, options) {
@@ -47,16 +47,13 @@ const driver = {
return createBulkInsertStreamBase(this, stream, pool, name, options);
},
async getVersion(pool) {
return { version: '1.0.0' };
},
async listDatabases(pool) {
return [{ name: 'db1' }, { name: 'db2' }];
return { version: 'SQLite 3' };
},
};
driver.initialize = (dbgateEnv) => {
if (dbgateEnv.nativeModules && dbgateEnv.nativeModules['better-sqlite3']) {
sqlite3 = dbgateEnv.nativeModules['better-sqlite3']();
Database = dbgateEnv.nativeModules['better-sqlite3']();
}
};

View File

@@ -3,4 +3,7 @@ const driver = require('./driver');
module.exports = {
packageName: 'dbgate-plugin-sqlite',
driver,
initialize(dbgateEnv) {
driver.initialize(dbgateEnv);
},
};