mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-23 23:05:59 +00:00
oracle port config #496
This commit is contained in:
@@ -52,52 +52,10 @@ const drivers = driverBases.map(driverBase => ({
|
|||||||
authType,
|
authType,
|
||||||
socketPath,
|
socketPath,
|
||||||
}) {
|
}) {
|
||||||
let options = null;
|
client = await oracledb.getConnection({
|
||||||
|
user,
|
||||||
if (engine == 'redshift@dbgate-plugin-oracle') {
|
password,
|
||||||
let url = databaseUrl;
|
connectString: useDatabaseUrl ? databaseUrl : port ? `${server}:${port}` : server,
|
||||||
if (url && url.startsWith('jdbc:redshift://')) {
|
|
||||||
url = url.substring('jdbc:redshift://'.length);
|
|
||||||
}
|
|
||||||
if (user && password) {
|
|
||||||
url = `oracle://${user}:${password}@${url}`;
|
|
||||||
} else if (user) {
|
|
||||||
url = `oracle://${user}@${url}`;
|
|
||||||
} else {
|
|
||||||
url = `oracle://${url}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
options = {
|
|
||||||
connectionString: url,
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
options = useDatabaseUrl
|
|
||||||
? {
|
|
||||||
connectionString: databaseUrl,
|
|
||||||
}
|
|
||||||
: {
|
|
||||||
host: authType == 'socket' ? socketPath || driverBase.defaultSocketPath : server,
|
|
||||||
port: authType == 'socket' ? null : port,
|
|
||||||
user,
|
|
||||||
password,
|
|
||||||
database: database || 'oracle',
|
|
||||||
ssl,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// console.log('OPTIONS', options);
|
|
||||||
/*
|
|
||||||
const client = new pg.Client(options);
|
|
||||||
await client.connect();
|
|
||||||
|
|
||||||
if (isReadOnly) {
|
|
||||||
await this.query(client, 'SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY');
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
client = await oracledb.getConnection( {
|
|
||||||
user : options.user,
|
|
||||||
password : options.password,
|
|
||||||
connectString : options.host
|
|
||||||
});
|
});
|
||||||
return client;
|
return client;
|
||||||
},
|
},
|
||||||
@@ -105,28 +63,25 @@ const drivers = driverBases.map(driverBase => ({
|
|||||||
return pool.end();
|
return pool.end();
|
||||||
},
|
},
|
||||||
async query(client, sql) {
|
async query(client, sql) {
|
||||||
//console.log('query sql', sql);
|
//console.log('query sql', sql);
|
||||||
if (sql == null) {
|
if (sql == null) {
|
||||||
return {
|
return {
|
||||||
rows: [],
|
rows: [],
|
||||||
columns: [],
|
columns: [],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
//console.log('sql3', sql);
|
//console.log('sql3', sql);
|
||||||
const res = await client.execute(sql);
|
const res = await client.execute(sql);
|
||||||
//console.log('res', res);
|
//console.log('res', res);
|
||||||
const columns = extractOracleColumns(res.metaData);
|
const columns = extractOracleColumns(res.metaData);
|
||||||
//console.log('columns', columns);
|
//console.log('columns', columns);
|
||||||
return { rows: (res.rows || []).map(row => zipDataRow(row, columns)), columns };
|
return { rows: (res.rows || []).map(row => zipDataRow(row, columns)), columns };
|
||||||
}
|
} catch (err) {
|
||||||
catch(err) {
|
console.log('Error query', err, sql);
|
||||||
console.log('Error query', err, sql);
|
} finally {
|
||||||
}
|
//console.log('finally', sql);
|
||||||
finally {
|
}
|
||||||
//console.log('finally', sql);
|
|
||||||
}
|
|
||||||
|
|
||||||
},
|
},
|
||||||
stream(client, sql, options) {
|
stream(client, sql, options) {
|
||||||
/*
|
/*
|
||||||
@@ -137,8 +92,8 @@ finally {
|
|||||||
*/
|
*/
|
||||||
// console.log('queryStream', sql);
|
// console.log('queryStream', sql);
|
||||||
const query = client.queryStream(sql);
|
const query = client.queryStream(sql);
|
||||||
// const consumeStream = new Promise((resolve, reject) => {
|
// const consumeStream = new Promise((resolve, reject) => {
|
||||||
let rowcount = 0;
|
let rowcount = 0;
|
||||||
let wasHeader = false;
|
let wasHeader = false;
|
||||||
|
|
||||||
query.on('metadata', row => {
|
query.on('metadata', row => {
|
||||||
@@ -200,13 +155,12 @@ finally {
|
|||||||
});
|
});
|
||||||
options.done();
|
options.done();
|
||||||
});
|
});
|
||||||
query.on('close', function() {
|
query.on('close', function () {
|
||||||
//console.log("stream 'close' event");
|
//console.log("stream 'close' event");
|
||||||
// The underlying ResultSet has been closed, so the connection can now
|
// The underlying ResultSet has been closed, so the connection can now
|
||||||
// be closed, if desired. Note: do not close connections on 'end'.
|
// be closed, if desired. Note: do not close connections on 'end'.
|
||||||
//resolve(rowcount);
|
//resolve(rowcount);
|
||||||
;
|
});
|
||||||
});
|
|
||||||
//});
|
//});
|
||||||
|
|
||||||
//const numrows = await consumeStream;
|
//const numrows = await consumeStream;
|
||||||
@@ -215,7 +169,7 @@ finally {
|
|||||||
},
|
},
|
||||||
async getVersion(client) {
|
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 banner as version FROM v$version WHERE banner LIKE 'Oracle%'");
|
||||||
const { rows } = await this.query(client, "SELECT version as \"version\" FROM v$instance");
|
const { rows } = await this.query(client, 'SELECT version as "version" FROM v$instance');
|
||||||
const { version } = rows[0];
|
const { version } = rows[0];
|
||||||
|
|
||||||
const isCockroach = false; //version.toLowerCase().includes('cockroachdb');
|
const isCockroach = false; //version.toLowerCase().includes('cockroachdb');
|
||||||
@@ -245,7 +199,7 @@ finally {
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
async readQuery(client, sql, structure) {
|
async readQuery(client, sql, structure) {
|
||||||
/*
|
/*
|
||||||
const query = new pg.Query({
|
const query = new pg.Query({
|
||||||
text: sql,
|
text: sql,
|
||||||
rowMode: 'array',
|
rowMode: 'array',
|
||||||
@@ -267,10 +221,10 @@ finally {
|
|||||||
if (!wasHeader) {
|
if (!wasHeader) {
|
||||||
columns = extractOracleColumns(row);
|
columns = extractOracleColumns(row);
|
||||||
if (columns && columns.length > 0) {
|
if (columns && columns.length > 0) {
|
||||||
pass.write({
|
pass.write({
|
||||||
__isStreamHeader: true,
|
__isStreamHeader: true,
|
||||||
...(structure || { columns }),
|
...(structure || { columns }),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
wasHeader = true;
|
wasHeader = true;
|
||||||
}
|
}
|
||||||
@@ -301,7 +255,7 @@ finally {
|
|||||||
return createBulkInsertStreamBase(this, stream, pool, name, options);
|
return createBulkInsertStreamBase(this, stream, pool, name, options);
|
||||||
},
|
},
|
||||||
async listDatabases(client) {
|
async listDatabases(client) {
|
||||||
const { rows } = await this.query(client, 'SELECT instance_name AS \"name\" FROM v$instance');
|
const { rows } = await this.query(client, 'SELECT instance_name AS "name" FROM v$instance');
|
||||||
return rows;
|
return rows;
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -319,7 +273,7 @@ finally {
|
|||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
drivers.initialize = (dbgateEnv) => {
|
drivers.initialize = dbgateEnv => {
|
||||||
if (dbgateEnv.nativeModules && dbgateEnv.nativeModules.oracledb) {
|
if (dbgateEnv.nativeModules && dbgateEnv.nativeModules.oracledb) {
|
||||||
oracledb = dbgateEnv.nativeModules.oracledb();
|
oracledb = dbgateEnv.nativeModules.oracledb();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -118,11 +118,7 @@ const oracleDriverBase = {
|
|||||||
return ['databaseUrl', 'isReadOnly'].includes(field);
|
return ['databaseUrl', 'isReadOnly'].includes(field);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return ['user', 'password', 'defaultDatabase', 'singleDatabase', 'isReadOnly', 'server', 'port'].includes(field);
|
||||||
['authType', 'user', 'password', 'defaultDatabase', 'singleDatabase', 'isReadOnly'].includes(field) ||
|
|
||||||
(values.authType == 'socket' && ['socketPath'].includes(field)) ||
|
|
||||||
(values.authType != 'socket' && ['server', 'port'].includes(field))
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
beforeConnectionSave: connection => {
|
beforeConnectionSave: connection => {
|
||||||
@@ -166,17 +162,13 @@ $$ LANGUAGE plpgsql;`,
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
|
|
||||||
authTypeLabel: 'Connection mode',
|
|
||||||
defaultAuthTypeName: 'hostPort',
|
|
||||||
defaultSocketPath: '/var/run/oracledb',
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/** @type {import('dbgate-types').EngineDriver} */
|
/** @type {import('dbgate-types').EngineDriver} */
|
||||||
const oracleDriver = {
|
const oracleDriver = {
|
||||||
...oracleDriverBase,
|
...oracleDriverBase,
|
||||||
engine: 'oracle@dbgate-plugin-oracle',
|
engine: 'oracle@dbgate-plugin-oracle',
|
||||||
title: 'OracleDB',
|
title: 'OracleDB (BETA)',
|
||||||
defaultPort: 1521,
|
defaultPort: 1521,
|
||||||
dialect: {
|
dialect: {
|
||||||
...dialect,
|
...dialect,
|
||||||
@@ -198,5 +190,4 @@ const oracleDriver = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
module.exports = [oracleDriver];
|
module.exports = [oracleDriver];
|
||||||
|
|||||||
Reference in New Issue
Block a user