From 4e6e0a79c48ad3277e8ddd32bbde05ca3cdb1ea6 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Mon, 3 Jun 2024 07:53:12 +0200 Subject: [PATCH] oracle version fallback --- .../src/backend/drivers.js | 70 +++++++++++-------- 1 file changed, 42 insertions(+), 28 deletions(-) diff --git a/plugins/dbgate-plugin-oracle/src/backend/drivers.js b/plugins/dbgate-plugin-oracle/src/backend/drivers.js index d9f7b897f..b034cc1db 100644 --- a/plugins/dbgate-plugin-oracle/src/backend/drivers.js +++ b/plugins/dbgate-plugin-oracle/src/backend/drivers.js @@ -205,36 +205,50 @@ const drivers = driverBases.map(driverBase => ({ //console.log('Rows selected: ' + numrows); //client.query(query); }, - async getVersion(client) { - //const { rows } = await this.query(client, "SELECT banner as version FROM v$version WHERE banner LIKE 'Oracle%'"); - const { rows } = await this.query(client, 'SELECT version as "version" FROM v$instance'); - const { version } = rows[0]; - - const isCockroach = false; //version.toLowerCase().includes('cockroachdb'); - const isRedshift = false; // version.toLowerCase().includes('redshift'); - const isOracle = true; - - const m = version.match(/([\d\.]+)/); - //console.log('M', m); - let versionText = null; - let versionMajor = null; - let versionMinor = null; - if (m) { - if (isOracle) versionText = `Oracle ${m[1]}`; - const numbers = m[1].split('.'); - if (numbers[0]) versionMajor = parseInt(numbers[0]); - if (numbers[1]) versionMinor = parseInt(numbers[1]); + async getVersionCore(client) { + try { + const { rows } = await this.query( + client, + 'SELECT version_full as "version" FROM product_component_version WHERE product LIKE \'Oracle%Database%\'' + ); + return rows[0].version; + } catch (e) { + const { rows } = await this.query(client, 'SELECT version as "version" FROM v$instance'); + return rows[0].version; } + }, + async getVersion(client) { + try { + //const { rows } = await this.query(client, "SELECT banner as version FROM v$version WHERE banner LIKE 'Oracle%'"); + // const { rows } = await this.query(client, 'SELECT version as "version" FROM v$instance'); + const version = await this.getVersionCore(client); - return { - version, - versionText, - isOracle, - isCockroach, - isRedshift, - versionMajor, - versionMinor, - }; + const m = version.match(/([\d\.]+)/); + //console.log('M', m); + let versionText = null; + let versionMajor = null; + let versionMinor = null; + if (m) { + versionText = `Oracle ${m[1]}`; + const numbers = m[1].split('.'); + if (numbers[0]) versionMajor = parseInt(numbers[0]); + if (numbers[1]) versionMinor = parseInt(numbers[1]); + } + + return { + version, + versionText, + versionMajor, + versionMinor, + }; + } catch (e) { + return { + version: '???', + versionText: 'Oracle ???', + versionMajor: 0, + versionMinor: 0, + }; + } }, async readQuery(client, sql, structure) { /*