diff --git a/.gitignore b/.gitignore
index add0add..50f2fd9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@
node_modules
.DS_Store
release
+TeradataClient/target
diff --git a/TeradataClient/pom.xml b/TeradataClient/pom.xml
index 2483366..929111d 100644
--- a/TeradataClient/pom.xml
+++ b/TeradataClient/pom.xml
@@ -38,7 +38,7 @@
com.teradata.jdbc
terajdbc
- 17.20.00.12
+ 20.00.00.46
org.json
diff --git a/constants/constants.js b/constants/constants.js
index 1d3e3cc..3ea560b 100644
--- a/constants/constants.js
+++ b/constants/constants.js
@@ -2,6 +2,13 @@ const ERROR_MESSAGE = {
aborted: 'Query execution was aborted',
};
+const TABLE_KIND = {
+ regularTable: 'T',
+ noPiTable: 'O',
+ view: 'V',
+};
+
module.exports = {
ERROR_MESSAGE,
+ TABLE_KIND,
};
diff --git a/reverse_engineering/addons/TeradataClient.jar b/reverse_engineering/addons/TeradataClient.jar
index 39d7904..0da9f93 100644
Binary files a/reverse_engineering/addons/TeradataClient.jar and b/reverse_engineering/addons/TeradataClient.jar differ
diff --git a/reverse_engineering/api.js b/reverse_engineering/api.js
index 61a3e68..6a2b167 100644
--- a/reverse_engineering/api.js
+++ b/reverse_engineering/api.js
@@ -4,6 +4,7 @@ const connectionHelper = require('./helpers/connectionHelper');
const indexHelper = require('./helpers/indexHelper');
const udtHelper = require('./helpers/udtHelper');
const { prepareError } = require('./helpers/prepareError');
+const { TABLE_KIND } = require('../constants/constants');
const connect = async (connectionInfo, sshService, logger) => {
return await connectionHelper.connect(connectionInfo, sshService, logger);
@@ -62,10 +63,10 @@ const getDbCollectionsNames = async (connectionInfo, logger, callback, app) => {
const instance = connectionHelper.createInstance(connection, _);
log.info('Get table and database names');
- const tableNames = await instance.getDatabasesWithTableNames('T');
+ const tableNames = await instance.getDatabasesWithTableNames([TABLE_KIND.regularTable, TABLE_KIND.noPiTable]);
log.info('Get views and database names');
- const viewNames = getViewNames(await instance.getDatabasesWithTableNames('V'));
+ const viewNames = getViewNames(await instance.getDatabasesWithTableNames(TABLE_KIND.view));
const allDatabaseNames = [...Object.keys(tableNames), ...Object.keys(viewNames)];
diff --git a/reverse_engineering/helpers/connectionHelper.js b/reverse_engineering/helpers/connectionHelper.js
index 8eed43a..1981d25 100644
--- a/reverse_engineering/helpers/connectionHelper.js
+++ b/reverse_engineering/helpers/connectionHelper.js
@@ -506,7 +506,10 @@ const getIndexType = index => {
const filterUdt = object => object.Kind === 'U';
-const excludeSystemUdt = type => !SYSTEM_UDT.has(type['Table/View/Macro Dictionary Name']);
+const excludeSystemUdt = type => {
+ const creator = type['Creator SQL Name'].trim();
+ return !SYSTEM_UDT.has(type['Table/View/Macro Dictionary Name']) && creator !== 'DBC' && creator !== 'SYSUDTLIB';
+};
module.exports = {
connect,
diff --git a/reverse_engineering/helpers/queryHelper.js b/reverse_engineering/helpers/queryHelper.js
index 08671d8..02466b2 100644
--- a/reverse_engineering/helpers/queryHelper.js
+++ b/reverse_engineering/helpers/queryHelper.js
@@ -1,9 +1,18 @@
const cleanUpCommand = (command = '') => command.replaceAll(/\s+/g, ' ');
+const getTableKindClause = ({ tableType }) => {
+ if (Array.isArray(tableType)) {
+ const types = tableType.map(type => `'${type}'`).join(',');
+ return `IN (${types})`;
+ }
+
+ return `= '${tableType}'`;
+};
+
const getDatabaseAndTableNames = ({ tableType, systemDatabases }) => {
const command = `SELECT DatabaseName, TableName
FROM DBC.TablesV
- WHERE TableKind = '${tableType}'
+ WHERE TableKind ${getTableKindClause({ tableType })}
AND DatabaseName NOT IN (${systemDatabases.map(name => `'${name}'`).join(', ')})
ORDER BY DatabaseName, TableName;`;