diff --git a/packages/api/.env-covid b/packages/api/.env-covid
deleted file mode 100644
index f08ba1a05..000000000
--- a/packages/api/.env-covid
+++ /dev/null
@@ -1,14 +0,0 @@
-DEVMODE=1
-
-CONNECTIONS=mysql
-
-LABEL_mysql=MySql
-SERVER_mysql=dbgate.org
-USER_mysql=reader
-PASSWORD_mysql=CovidReader2020
-PORT_mysql=3326
-ENGINE_mysql=mysql@dbgate-plugin-mysql
-SINGLE_CONNECTION=mysql
-SINGLE_DATABASE=covid
-
-PERMISSIONS=files/charts/read
diff --git a/packages/api/.env-singledb b/packages/api/.env-singledb
new file mode 100644
index 000000000..136f6429f
--- /dev/null
+++ b/packages/api/.env-singledb
@@ -0,0 +1,15 @@
+DEVMODE=1
+
+CONNECTIONS=mysql
+
+LABEL_mysql=MySql localhost
+SERVER_mysql=localhost
+USER_mysql=root
+PASSWORD_mysql=test
+PORT_mysql=3307
+ENGINE_mysql=mysql@dbgate-plugin-mysql
+
+SINGLE_CONNECTION=mysql
+SINGLE_DATABASE=Chinook
+
+PERMISSIONS=files/charts/read
diff --git a/packages/api/package.json b/packages/api/package.json
index f59915ca0..f4ac19d0b 100644
--- a/packages/api/package.json
+++ b/packages/api/package.json
@@ -51,7 +51,9 @@
"scripts": {
"start": "env-cmd node src/index.js",
"start:portal": "env-cmd -f .env-portal node src/index.js",
- "start:covid": "env-cmd -f .env-covid node src/index.js",
+ "start:singledb": "env-cmd -f .env-singledb node src/index.js",
+ "start:filedb": "env-cmd node src/index.js /home/jena/test/chinook/Chinook.db",
+ "start:singleconn": "env-cmd node src/index.js --server localhost --user root --port 3307 --engine mysql@dbgate-plugin-mysql --password test",
"ts": "tsc",
"build": "webpack"
},
@@ -69,4 +71,4 @@
"optionalDependencies": {
"msnodesqlv8": "^2.0.10"
}
-}
+}
\ No newline at end of file
diff --git a/packages/api/src/controllers/config.js b/packages/api/src/controllers/config.js
index 4f6e05e33..f813912bd 100644
--- a/packages/api/src/controllers/config.js
+++ b/packages/api/src/controllers/config.js
@@ -7,6 +7,7 @@ const _ = require('lodash');
const currentVersion = require('../currentVersion');
const platformInfo = require('../utility/platformInfo');
+const connections = require('../controllers/connections');
module.exports = {
settingsValue: {},
@@ -21,30 +22,11 @@ module.exports = {
get_meta: 'get',
async get() {
- // const toolbarButtons = process.env.TOOLBAR;
- // const toolbar = toolbarButtons
- // ? toolbarButtons.split(',').map((name) => ({
- // name,
- // icon: process.env[`ICON_${name}`],
- // title: process.env[`TITLE_${name}`],
- // page: process.env[`PAGE_${name}`],
- // }))
- // : null;
- // const startupPages = process.env.STARTUP_PAGES ? process.env.STARTUP_PAGES.split(',') : [];
const permissions = process.env.PERMISSIONS ? process.env.PERMISSIONS.split(',') : null;
- const singleDatabase =
- process.env.SINGLE_CONNECTION && process.env.SINGLE_DATABASE
- ? {
- conid: process.env.SINGLE_CONNECTION,
- database: process.env.SINGLE_DATABASE,
- }
- : null;
return {
- runAsPortal: !!process.env.CONNECTIONS,
- // toolbar,
- // startupPages,
- singleDatabase,
+ runAsPortal: !!connections.portalConnections,
+ singleDatabase: connections.singleDatabase,
permissions,
...currentVersion,
};
diff --git a/packages/api/src/controllers/connections.js b/packages/api/src/controllers/connections.js
index d806543fa..db0c95dad 100644
--- a/packages/api/src/controllers/connections.js
+++ b/packages/api/src/controllers/connections.js
@@ -8,6 +8,32 @@ const socket = require('../utility/socket');
const { encryptConnection } = require('../utility/crypting');
const { handleProcessCommunication } = require('../utility/processComm');
+function getNamedArgs() {
+ const res = {};
+ for (let i = 0; i < process.argv.length; i++) {
+ const name = process.argv[i];
+ if (name.startsWith('--')) {
+ let value = process.argv[i + 1];
+ if (value && value.startsWith('--')) value = null;
+ res[name.substring(2)] = value == null ? true : value;
+ i++;
+ } else {
+ if (name.endsWith('.db') || name.endsWith('.sqlite') || name.endsWith('.sqlite3')) {
+ res.databaseFile = name;
+ res.engine = 'sqlite@dbgate-plugin-sqlite';
+ }
+ }
+ }
+ return res;
+}
+
+function getDatabaseFileLabel(databaseFile) {
+ if (!databaseFile) return databaseFile;
+ const m = databaseFile.match(/[\/]([^\/]+)$/);
+ if (m) return m[1];
+ return databaseFile;
+}
+
function getPortalCollections() {
if (process.env.CONNECTIONS) {
return _.compact(process.env.CONNECTIONS.split(',')).map(id => ({
@@ -24,13 +50,72 @@ function getPortalCollections() {
displayName: process.env[`LABEL_${id}`],
}));
}
+
+ const args = getNamedArgs();
+ if (args.databaseFile) {
+ return [
+ {
+ _id: 'argv',
+ databaseFile: args.databaseFile,
+ singleDatabase: true,
+ defaultDatabase: getDatabaseFileLabel(args.databaseFile),
+ engine: args.engine,
+ },
+ ];
+ }
+ if (args.databaseUrl) {
+ return [
+ {
+ _id: 'argv',
+ useDatabaseUrl: true,
+ ...args,
+ },
+ ];
+ }
+ if (args.server) {
+ return [
+ {
+ _id: 'argv',
+ ...args,
+ },
+ ];
+ }
+
return null;
}
const portalConnections = getPortalCollections();
+function getSingleDatabase() {
+ if (process.env.SINGLE_CONNECTION && process.env.SINGLE_DATABASE) {
+ // @ts-ignore
+ const connection = portalConnections.find(x => x._id == process.env.SINGLE_CONNECTION);
+ return {
+ connection,
+ name: process.env.SINGLE_DATABASE,
+ };
+ }
+ // @ts-ignore
+ const arg0 = (portalConnections || []).find(x => x._id == 'argv');
+ if (arg0) {
+ // @ts-ignore
+ if (arg0.singleDatabase) {
+ return {
+ connection: arg0,
+ // @ts-ignore
+ name: arg0.defaultDatabase,
+ };
+ }
+ }
+ return null;
+}
+
+const singleDatabase = getSingleDatabase();
+
module.exports = {
datastore: null,
opened: [],
+ singleDatabase,
+ portalConnections,
async _init() {
const dir = datadir();
diff --git a/packages/web/src/stores.ts b/packages/web/src/stores.ts
index 36e3880ba..1cb61f78b 100644
--- a/packages/web/src/stores.ts
+++ b/packages/web/src/stores.ts
@@ -120,6 +120,9 @@ let currentConfigValue = null;
currentConfigStore.subscribe(value => {
currentConfigValue = value;
invalidateCommands();
+ if (value.singleDatabase) {
+ currentDatabase.set(value.singleDatabase);
+ }
});
export const getCurrentConfig = () => currentConfigValue;
diff --git a/packages/web/src/widgets/DatabaseWidget.svelte b/packages/web/src/widgets/DatabaseWidget.svelte
index 56318bfdf..9b5ee19a9 100644
--- a/packages/web/src/widgets/DatabaseWidget.svelte
+++ b/packages/web/src/widgets/DatabaseWidget.svelte
@@ -1,7 +1,7 @@
-
-
-
+ {#if !$config?.singleDatabase}
+
+
+
+ {/if}