From 62d776f5e8daee5798397f9ed133a98557543e28 Mon Sep 17 00:00:00 2001 From: Olleg Samoylov Date: Sat, 25 Nov 2017 04:23:25 +0300 Subject: [PATCH] Uppercase the SQL queries for MS SQL In cases when the MS SQL database is setup with a case sensitive collation, then it would not find the catalog objects referenced from the query. To fix, just use UPPERCASE names, as they do work in both case insensitive and case sensitive collations. In passing, add `system-index.txt` to `.gitignore` (generated by make). Fixes #651. --- .gitignore | 1 + src/sources/mssql/sql/list-all-columns.sql | 50 +++++++++++----------- 2 files changed, 26 insertions(+), 25 deletions(-) diff --git a/.gitignore b/.gitignore index 1fb6ad7..5e84101 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ web/howto/pgloader.1.html web/howto/quickstart.html web/howto/sqlite.html .DS_Store +system-index.txt diff --git a/src/sources/mssql/sql/list-all-columns.sql b/src/sources/mssql/sql/list-all-columns.sql index 057e9c2..c1b8445 100644 --- a/src/sources/mssql/sql/list-all-columns.sql +++ b/src/sources/mssql/sql/list-all-columns.sql @@ -4,31 +4,31 @@ -- filter-list-to-where-clause including -- excluding -- filter-list-to-where-clause excluding - select c.table_schema, - c.table_name, - c.column_name, - c.data_type, + select c.TABLE_SCHEMA, + c.TABLE_NAME, + c.COLUMN_NAME, + c.DATA_TYPE, CASE - WHEN c.column_default LIKE '((%' AND c.column_default LIKE '%))' THEN + WHEN c.COLUMN_DEFAULT LIKE '((%' AND c.COLUMN_DEFAULT LIKE '%))' THEN CASE - WHEN SUBSTRING(c.column_default,3,len(c.column_default)-4) = 'newid()' THEN 'generate_uuid_v4()' - WHEN SUBSTRING(c.column_default,3,len(c.column_default)-4) LIKE 'convert(%varchar%,getdate(),%)' THEN 'today' - WHEN SUBSTRING(c.column_default,3,len(c.column_default)-4) = 'getdate()' THEN 'CURRENT_TIMESTAMP' - WHEN SUBSTRING(c.column_default,3,len(c.column_default)-4) LIKE '''%''' THEN SUBSTRING(c.column_default,4,len(c.column_default)-6) - ELSE SUBSTRING(c.column_default,3,len(c.column_default)-4) + WHEN SUBSTRING(c.COLUMN_DEFAULT,3,len(c.COLUMN_DEFAULT)-4) = 'newid()' THEN 'generate_uuid_v4()' + WHEN SUBSTRING(c.COLUMN_DEFAULT,3,len(c.COLUMN_DEFAULT)-4) LIKE 'convert(%varchar%,getdate(),%)' THEN 'today' + WHEN SUBSTRING(c.COLUMN_DEFAULT,3,len(c.COLUMN_DEFAULT)-4) = 'getdate()' THEN 'CURRENT_TIMESTAMP' + WHEN SUBSTRING(c.COLUMN_DEFAULT,3,len(c.COLUMN_DEFAULT)-4) LIKE '''%''' THEN SUBSTRING(c.COLUMN_DEFAULT,4,len(c.COLUMN_DEFAULT)-6) + ELSE SUBSTRING(c.COLUMN_DEFAULT,3,len(c.COLUMN_DEFAULT)-4) END - WHEN c.column_default LIKE '(%' AND c.column_default LIKE '%)' THEN + WHEN c.COLUMN_DEFAULT LIKE '(%' AND c.COLUMN_DEFAULT LIKE '%)' THEN CASE - WHEN SUBSTRING(c.column_default,2,len(c.column_default)-2) = 'newid()' THEN 'generate_uuid_v4()' - WHEN SUBSTRING(c.column_default,2,len(c.column_default)-2) LIKE 'convert(%varchar%,getdate(),%)' THEN 'today' - WHEN SUBSTRING(c.column_default,2,len(c.column_default)-2) = 'getdate()' THEN 'CURRENT_TIMESTAMP' - WHEN SUBSTRING(c.column_default,2,len(c.column_default)-2) LIKE '''%''' THEN SUBSTRING(c.column_default,3,len(c.column_default)-4) - ELSE SUBSTRING(c.column_default,2,len(c.column_default)-2) + WHEN SUBSTRING(c.COLUMN_DEFAULT,2,len(c.COLUMN_DEFAULT)-2) = 'newid()' THEN 'generate_uuid_v4()' + WHEN SUBSTRING(c.COLUMN_DEFAULT,2,len(c.COLUMN_DEFAULT)-2) LIKE 'convert(%varchar%,getdate(),%)' THEN 'today' + WHEN SUBSTRING(c.COLUMN_DEFAULT,2,len(c.COLUMN_DEFAULT)-2) = 'getdate()' THEN 'CURRENT_TIMESTAMP' + WHEN SUBSTRING(c.COLUMN_DEFAULT,2,len(c.COLUMN_DEFAULT)-2) LIKE '''%''' THEN SUBSTRING(c.COLUMN_DEFAULT,3,len(c.COLUMN_DEFAULT)-4) + ELSE SUBSTRING(c.COLUMN_DEFAULT,2,len(c.COLUMN_DEFAULT)-2) END - ELSE c.column_default + ELSE c.COLUMN_DEFAULT END, - c.is_nullable, - COLUMNPROPERTY(object_id(c.table_name), c.column_name, 'IsIdentity'), + c.IS_NULLABLE, + COLUMNPROPERTY(object_id(c.TABLE_NAME), c.COLUMN_NAME, 'IsIdentity'), c.CHARACTER_MAXIMUM_LENGTH, c.NUMERIC_PRECISION, c.NUMERIC_PRECISION_RADIX, @@ -37,13 +37,13 @@ c.CHARACTER_SET_NAME, c.COLLATION_NAME - from information_schema.columns c - join information_schema.tables t - on c.table_schema = t.table_schema - and c.table_name = t.table_name + from INFORMATION_SCHEMA.COLUMNS c + join INFORMATION_SCHEMA.TABLES t + on c.TABLE_SCHEMA = t.TABLE_SCHEMA + and c.TABLE_NAME = t.TABLE_NAME - where c.table_catalog = '~a' - and t.table_type = '~a' + where c.TABLE_CATALOG = '~a' + and t.TABLE_TYPE = '~a' ~:[~*~;and (~{~a~^~&~10t or ~})~] ~:[~*~;and (~{~a~^~&~10t and ~})~]