Алиасирование столбцов в операторах SELECT не работает с SQuirrel SQL + Firebird
Я попытался добавить псевдоним столбца в инструкцию SELECT, используя SQuirrel SQL 3.4 + Firebird 1.5 + JDBC Jaybird 2.2. [0 | 1] (JVM 1.7.0_03), но не работает. Заголовок с псевдонимом появляется с исходным именем столбца. В другом инструменте (DBExpert) тот же оператор отлично работает.
Заявление: SELECT column1 AS alias1, column2 FROM table;
Имя ссылочных столбцов в SquirrelSQL: column1 - column2
Имя результирующих столбцов в DBExpert: alias1 - column2
Пробовал добавить 'и' вокруг псевдонима, но также не работает.
У кого-то есть идея?
Изменить: я обновил драйвер JDBC Jaybird до версии 2.2.1 (выпущен Sept/30), и проблема остается.
Изменить 2: проблема исправлена!
Проблема связана с настройками по умолчанию Squirrel SQL.
Чтобы исправить это, перейдите в "Файл" → "Глобальные настройки", на вкладке "Элементы управления типом данных" найдите "Общие (применительно ко всем типам)" и пометьте поле со списком "Использовать ярлыки столбцов вместо имен столбцов в заголовках результатов".
Смотрите скриншот: http://i1-win.softpedia-static.com/screenshots/SQuirrel-SQL-Client_4.png?1345342622
Enjoy.
Ответы
Ответ 1
Проблема связана с путаницей в спецификациях JDBC (по крайней мере, исторически) и с изменением Jaybird в отношении того, что он сообщает как columnNames и columnLabels в метаданных результатов. Насколько мне известно в JDBC 2.0 и ранее, различие между columnName и columnLabel не было четко определено, поэтому почти во всех случаях getColumnName()
возвращалось то же значение, что и getColumnLabel()
(то есть AS-псевдоним, если указан).
С JDBC 3.0 было сделано более четкое различие: columnName
должен был быть именем базового столбца в таблице (если таковой имеется), columnLabel
- это AS-псевдоним, если он указан, и в противном случае columnName
, Jaybird 2.1.6 и ранее использовали для возврата того же значения для getColumnLabel()
и getColumnName()
(т.е. columnLabel
), это было изменено в Jaybird 2.2.
По-видимому, Squirrel по умолчанию использует опцию columnName
, отличную от JDBC, вместо columnLabel
. Как вы уже выяснили: есть возможность заставить его использовать columnLabel
. Другой вариант, который у вас есть, - использовать Jaybird 2.2.1 или выше и добавить свойство соединения columnLabelForName=true
.
Ответ 2
В Squirrel это необходимо настроить на:
Файл > Глобальные настройки > Элементы управления типом данных > Проверка: Использовать метки столбцов вместо имен столбцов в заголовках результатов