mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-18 00:56:02 +00:00
introduced dbhandle instead of overwriting 3rd party client's fields
This commit is contained in:
@@ -24,7 +24,7 @@ class Analyser extends DatabaseAnalyser {
|
||||
|
||||
createQuery(resFileName, typeFields, replacements = {}) {
|
||||
let res = sql[resFileName];
|
||||
res = res.replace('#DATABASE#', this.pool.__dbgate_database_name__);
|
||||
res = res.replace('#DATABASE#', this.dbhan.database);
|
||||
return super.createQuery(res, typeFields, replacements);
|
||||
}
|
||||
|
||||
@@ -82,8 +82,8 @@ class Analyser extends DatabaseAnalyser {
|
||||
async _computeSingleObjectId() {
|
||||
const { pureName } = this.singleObjectFilter;
|
||||
const resId = await this.driver.query(
|
||||
this.pool,
|
||||
`SELECT uuid as id FROM system.tables WHERE database = '${this.pool.__dbgate_database_name__}' AND name='${pureName}'`
|
||||
this.dbhan,
|
||||
`SELECT uuid as id FROM system.tables WHERE database = '${this.dbhan.database}' AND name='${pureName}'`
|
||||
);
|
||||
this.singleObjectId = resId.rows[0]?.id;
|
||||
}
|
||||
|
||||
@@ -5,11 +5,11 @@ const _ = require('lodash');
|
||||
*
|
||||
* @param {import('dbgate-types').EngineDriver} driver
|
||||
*/
|
||||
function createOracleBulkInsertStream(driver, stream, pool, name, options) {
|
||||
const writable = createBulkInsertStreamBase(driver, stream, pool, name, options);
|
||||
function createOracleBulkInsertStream(driver, stream, dbhan, name, options) {
|
||||
const writable = createBulkInsertStreamBase(driver, stream, dbhan, name, options);
|
||||
|
||||
writable.send = async () => {
|
||||
await pool.insert({
|
||||
await dbhan.client.insert({
|
||||
table: name.pureName,
|
||||
values: writable.buffer,
|
||||
format: 'JSONEachRow',
|
||||
|
||||
@@ -5,7 +5,6 @@ const Analyser = require('./Analyser');
|
||||
const { createClient } = require('@clickhouse/client');
|
||||
const createBulkInsertStream = require('./createBulkInsertStream');
|
||||
|
||||
|
||||
/** @type {import('dbgate-types').EngineDriver} */
|
||||
const driver = {
|
||||
...driverBase,
|
||||
@@ -19,13 +18,15 @@ const driver = {
|
||||
database,
|
||||
});
|
||||
|
||||
client.__dbgate_database_name__ = database;
|
||||
return client;
|
||||
return {
|
||||
client,
|
||||
database,
|
||||
};
|
||||
},
|
||||
// called for retrieve data (eg. browse in data grid) and for update database
|
||||
async query(client, query, options) {
|
||||
async query(dbhan, query, options) {
|
||||
if (options?.discardResult) {
|
||||
await client.command({
|
||||
await dbhan.client.command({
|
||||
query,
|
||||
});
|
||||
return {
|
||||
@@ -33,7 +34,7 @@ const driver = {
|
||||
columns: [],
|
||||
};
|
||||
} else {
|
||||
const resultSet = await client.query({
|
||||
const resultSet = await dbhan.client.query({
|
||||
query,
|
||||
format: 'JSONCompactEachRowWithNamesAndTypes',
|
||||
});
|
||||
@@ -58,10 +59,10 @@ const driver = {
|
||||
}
|
||||
},
|
||||
// called in query console
|
||||
async stream(client, query, options) {
|
||||
async stream(dbhan, query, options) {
|
||||
try {
|
||||
if (!query.match(/^\s*SELECT/i)) {
|
||||
const resp = await client.command({
|
||||
const resp = await dbhan.client.command({
|
||||
query,
|
||||
});
|
||||
// console.log('RESP', resp);
|
||||
@@ -77,7 +78,7 @@ const driver = {
|
||||
return;
|
||||
}
|
||||
|
||||
const resultSet = await client.query({
|
||||
const resultSet = await dbhan.client.query({
|
||||
query,
|
||||
format: 'JSONCompactEachRowWithNamesAndTypes',
|
||||
});
|
||||
@@ -139,13 +140,13 @@ const driver = {
|
||||
}
|
||||
},
|
||||
// called when exporting table or view
|
||||
async readQuery(client, query, structure) {
|
||||
async readQuery(dbhan, query, structure) {
|
||||
const pass = new stream.PassThrough({
|
||||
objectMode: true,
|
||||
highWaterMark: 100,
|
||||
});
|
||||
|
||||
const resultSet = await client.query({
|
||||
const resultSet = await dbhan.client.query({
|
||||
query,
|
||||
format: 'JSONCompactEachRowWithNamesAndTypes',
|
||||
});
|
||||
@@ -191,12 +192,12 @@ const driver = {
|
||||
|
||||
return pass;
|
||||
},
|
||||
async writeTable(pool, name, options) {
|
||||
return createBulkInsertStream(this, stream, pool, name, options);
|
||||
async writeTable(dbhan, name, options) {
|
||||
return createBulkInsertStream(this, stream, dbhan, name, options);
|
||||
},
|
||||
// detect server version
|
||||
async getVersion(client) {
|
||||
const resultSet = await client.query({
|
||||
async getVersion(dbhan) {
|
||||
const resultSet = await dbhan.client.query({
|
||||
query: 'SELECT version() as version',
|
||||
format: 'JSONEachRow',
|
||||
});
|
||||
@@ -204,8 +205,8 @@ const driver = {
|
||||
return { version: dataset[0].version };
|
||||
},
|
||||
// list databases on server
|
||||
async listDatabases(client) {
|
||||
const resultSet = await client.query({
|
||||
async listDatabases(dbhan) {
|
||||
const resultSet = await dbhan.client.query({
|
||||
query: `SELECT name
|
||||
FROM system.databases
|
||||
WHERE name NOT IN ('system', 'information_schema', 'information_schema_ro', 'INFORMATION_SCHEMA')`,
|
||||
@@ -215,8 +216,8 @@ const driver = {
|
||||
return dataset;
|
||||
},
|
||||
|
||||
async close(client) {
|
||||
return client.close();
|
||||
async close(dbhan) {
|
||||
return dbhan.client.close();
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user