From 7a9ecc93113437874e818748d6b201fba17de7f0 Mon Sep 17 00:00:00 2001 From: schuemie Date: Thu, 21 Feb 2019 06:52:15 +0100 Subject: [PATCH] Including schema in table name for SQL Server and PDW. Fixes #108 --- src/org/ohdsi/databases/RichConnection.java | 30 +++++++++---------- .../whiteRabbit/scan/SourceDataScan.java | 13 ++++---- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/org/ohdsi/databases/RichConnection.java b/src/org/ohdsi/databases/RichConnection.java index fff9cd22..a390dc5e 100644 --- a/src/org/ohdsi/databases/RichConnection.java +++ b/src/org/ohdsi/databases/RichConnection.java @@ -145,7 +145,7 @@ public List getTableNames(String database) { if (dbType == DbType.MYSQL) { query = "SHOW TABLES IN " + database; } else if (dbType == DbType.MSSQL || dbType == DbType.PDW) { - query = "SELECT name FROM " + database + ".sys.tables ORDER BY name"; + query = "SELECT CONCAT(schemas.name, '.', tables.name) FROM " + database + ".sys.tables INNER JOIN " + database + ".sys.schemas ON tables.schema_id = schemas.schema_id ORDER BY schemas.name, tables.name"; } else if (dbType == DbType.ORACLE) { query = "SELECT table_name FROM all_tables WHERE owner='" + database.toUpperCase() + "'"; } else if (dbType == DbType.POSTGRESQL || dbType == DbType.REDSHIFT) { @@ -161,19 +161,19 @@ public List getTableNames(String database) { return names; } - public List getFieldNames(String table) { - List names = new ArrayList(); - if (dbType == DbType.MSSQL || dbType == DbType.PDW) { - for (Row row : query("SELECT name FROM syscolumns WHERE id=OBJECT_ID('" + table + "')")) - names.add(row.get("name")); - } else if (dbType == DbType.MYSQL) - for (Row row : query("SHOW COLUMNS FROM " + table)) - names.add(row.get("COLUMN_NAME")); - else - throw new RuntimeException("DB type not supported"); - - return names; - } +// public List getFieldNames(String table) { +// List names = new ArrayList(); +// if (dbType == DbType.MSSQL || dbType == DbType.PDW) { +// for (Row row : query("SELECT name FROM syscolumns WHERE id=OBJECT_ID('" + table + "')")) +// names.add(row.get("name")); +// } else if (dbType == DbType.MYSQL) +// for (Row row : query("SHOW COLUMNS FROM " + table)) +// names.add(row.get("COLUMN_NAME")); +// else +// throw new RuntimeException("DB type not supported"); +// +// return names; +// } public ResultSet getMsAccessFieldNames(String table) { if (dbType == DbType.MSACCESS) { @@ -197,7 +197,7 @@ public long getTableSize(String tableName) { QueryResult qr = null; Long returnVal = null; if (dbType == DbType.MSSQL || dbType == DbType.PDW) - qr = query("SELECT COUNT_BIG(*) FROM [" + tableName + "];"); + qr = query("SELECT COUNT_BIG(*) FROM [" + tableName.replaceAll("\\.", "].[") + "];"); else if (dbType == DbType.MSACCESS) qr = query("SELECT COUNT(*) FROM [" + tableName + "];"); else diff --git a/src/org/ohdsi/whiteRabbit/scan/SourceDataScan.java b/src/org/ohdsi/whiteRabbit/scan/SourceDataScan.java index 08d6b443..a36c84a7 100644 --- a/src/org/ohdsi/whiteRabbit/scan/SourceDataScan.java +++ b/src/org/ohdsi/whiteRabbit/scan/SourceDataScan.java @@ -228,17 +228,19 @@ private QueryResult fetchRowsFromTable(RichConnection connection, String table, String query = null; if (sampleSize == -1) { - if (dbType == DbType.MSSQL || dbType == DbType.PDW || dbType == DbType.MSACCESS) + if (dbType == DbType.MSACCESS) query = "SELECT * FROM [" + table + "]"; + else if (dbType == DbType.MSSQL || dbType == DbType.PDW) + query = "SELECT * FROM [" + table.replaceAll("\\.", "].[") + "]"; else query = "SELECT * FROM " + table; } else { if (dbType == DbType.MSSQL) - query = "SELECT * FROM [" + table + "] TABLESAMPLE (" + sampleSize + " ROWS)"; + query = "SELECT * FROM [" + table.replaceAll("\\.", "].[") + "] TABLESAMPLE (" + sampleSize + " ROWS)"; else if (dbType == DbType.MYSQL) query = "SELECT * FROM " + table + " ORDER BY RAND() LIMIT " + sampleSize; else if (dbType == DbType.PDW) - query = "SELECT TOP " + sampleSize + " * FROM [" + table + "] ORDER BY RAND()"; + query = "SELECT TOP " + sampleSize + " * FROM [" + table.replaceAll("\\.", "].[") + "] ORDER BY RAND()"; else if (dbType == DbType.ORACLE) { if (sampleSize < rowCount) { double percentage = 100 * sampleSize / (double) rowCount; @@ -280,8 +282,9 @@ else if (dbType == DbType.MSSQL || dbType == DbType.PDW) { String trimmedDatabase = database; if (database.startsWith("[") && database.endsWith("]")) trimmedDatabase = database.substring(1, database.length() - 1); - query = "SELECT COLUMN_NAME,DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_CATALOG='" + trimmedDatabase + "' AND TABLE_NAME='" + table - + "';"; + String[] parts = table.split("\\."); + query = "SELECT COLUMN_NAME,DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_CATALOG='" + trimmedDatabase + "' AND TABLE_SCHEMA='" + parts[0] + + "' AND TABLE_NAME='" + parts[1] + "';"; } else if (dbType == DbType.MYSQL) query = "SELECT COLUMN_NAME,DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '" + database + "' AND TABLE_NAME = '" + table + "';";