Алиасирование столбцов в операторах 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 это необходимо настроить на:

Файл > Глобальные настройки > Элементы управления типом данных > Проверка: Использовать метки столбцов вместо имен столбцов в заголовках результатов