fix lowercase for tablelist do not always convert column names to lower

This commit is contained in:
Rinie Kervel
2022-11-07 12:09:50 +01:00
parent a0cefbc1ca
commit 48b1e28ee1
3 changed files with 26 additions and 32 deletions

View File

@@ -74,6 +74,7 @@ class Analyser extends DatabaseAnalyser {
); );
this.feedback({ analysingMessage: 'Loading columns' }); this.feedback({ analysingMessage: 'Loading columns' });
const columns = await this.driver.query(this.pool, this.createQuery('columns', ['tables', 'views'])); const columns = await this.driver.query(this.pool, this.createQuery('columns', ['tables', 'views']));
this.feedback({ analysingMessage: 'Loading primary keys' }); this.feedback({ analysingMessage: 'Loading primary keys' });
const pkColumns = await this.driver.query(this.pool, this.createQuery('primaryKeys', ['tables'])); const pkColumns = await this.driver.query(this.pool, this.createQuery('primaryKeys', ['tables']));

View File

@@ -16,17 +16,20 @@ pg.types.setTypeParser(1184, 'text', val => val); // timestamp
function extractOracleColumns(result) { function extractOracleColumns(result) {
if (!result /*|| !result.fields */) return []; if (!result /*|| !result.fields */) return [];
const res = result.map(fld => ({ const res = result.map(fld => ({
columnName: fld.name.toLowerCase(), columnName: fld.name, //columnName: fld.name.toLowerCase(),
})); }));
makeUniqueColumnNames(res); makeUniqueColumnNames(res);
return res; return res;
} }
function zipDataRow(rowArray, columns) { function zipDataRow(rowArray, columns) {
return _.zipObject( let obj = _.zipObject(
columns.map(x => x.columnName), columns.map(x => x.columnName),
rowArray rowArray
); );
//console.log('zipDataRow columns', columns);
//console.log('zipDataRow', obj);
return obj;
} }
/** @type {import('dbgate-types').EngineDriver} */ /** @type {import('dbgate-types').EngineDriver} */
@@ -101,6 +104,7 @@ const drivers = driverBases.map(driverBase => ({
return pool.end(); return pool.end();
}, },
async query(client, sql) { async query(client, sql) {
//console.log('query sql', sql);
if (sql == null) { if (sql == null) {
return { return {
rows: [], rows: [],
@@ -108,7 +112,7 @@ const drivers = driverBases.map(driverBase => ({
}; };
} }
try { try {
console.log('sql', 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);
@@ -130,14 +134,14 @@ finally {
rowMode: 'array', rowMode: 'array',
}); });
*/ */
//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 => {
//console.log('metadata', row); console.log('metadata', row);
if (!wasHeader) { if (!wasHeader) {
columns = extractOracleColumns(row); columns = extractOracleColumns(row);
if (columns && columns.length > 0) { if (columns && columns.length > 0) {
@@ -150,7 +154,14 @@ finally {
}); });
query.on('data', row => { query.on('data', row => {
//console.log('DATA', row); console.log('stream DATA');
if (!wasHeader) {
columns = extractOracleColumns(row);
if (columns && columns.length > 0) {
options.recordset(columns);
}
wasHeader = true;
}
options.row(zipDataRow(row, columns)); options.row(zipDataRow(row, columns));
}); });
@@ -203,7 +214,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 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');
@@ -289,7 +300,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;
}, },

View File

@@ -1,27 +1,9 @@
module.exports = ` module.exports = `
select infoTables.table_schema as "schema_name", infoTables.table_name as "pure_name"
from (
select select
sys_context('userenv', 'DB_NAME') table_catalog, owner "schema_name",
owner table_schema, table_name "pure_name"
table_name table_name,
case
when iot_type = 'Y' then 'IOT'
when temporary = 'Y' then 'TEMP'
else 'BASE TABLE'
end table_type
from from
all_tables all_tables
union all where TABLE_NAME =OBJECT_ID_CONDITION
select
sys_context('userenv', 'DB_NAME') table_catalog,
owner table_schema,
view_name table_name,
'VIEW' table_type
from
all_views
) infoTables
where infoTables.table_type not like '%VIEW%'
and table_name =OBJECT_ID_CONDITION
`; `;