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

@@ -51,7 +51,7 @@
async function handleSubmit(e) { async function handleSubmit(e) {
axiosInstance.post('connections/save', { axiosInstance.post('connections/save', {
...e.detail, ...e.detail,
singleDatabase: e.detail.defaultDatabase ? e.detail.singleDatabase : false, singleDatabase: driver?.isFileDatabase || (e.detail.defaultDatabase ? e.detail.singleDatabase : false),
}); });
closeCurrentModal(); closeCurrentModal();
} }

View File

@@ -6,10 +6,11 @@
import WidgetsInnerContainer from './WidgetsInnerContainer.svelte'; import WidgetsInnerContainer from './WidgetsInnerContainer.svelte';
$: conid = _.get($currentDatabase, 'connection._id'); $: conid = _.get($currentDatabase, 'connection._id');
$: singleDatabase = _.get($currentDatabase, 'connection.singleDatabase');
$: database = _.get($currentDatabase, 'name'); $: database = _.get($currentDatabase, 'name');
</script> </script>
{#if conid && database} {#if conid && (database || singleDatabase)}
<SqlObjectList {conid} {database} /> <SqlObjectList {conid} {database} />
{:else} {:else}
<WidgetsInnerContainer> <WidgetsInnerContainer>

View File

@@ -8,14 +8,11 @@ class Analyser extends DatabaseAnalyser {
async _runAnalysis() { async _runAnalysis() {
const collections = await this.pool.__getDatabase().listCollections().toArray(); const collections = await this.pool.__getDatabase().listCollections().toArray();
const res = this.mergeAnalyseResult( const res = this.mergeAnalyseResult({
{
collections: collections.map((x) => ({ collections: collections.map((x) => ({
pureName: x.name, pureName: x.name,
})), })),
}, });
(x) => x.pureName
);
// console.log('MERGED', res); // console.log('MERGED', res);
return res; return res;
} }

View File

@@ -4,6 +4,23 @@ class Analyser extends DatabaseAnalyser {
constructor(pool, driver) { constructor(pool, driver) {
super(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; module.exports = Analyser;

View File

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