Я нахожусь в своем остроумие, пытаясь проверить сложный sql-запрос. Идея состоит в том, чтобы использовать groovy для выполнения SQL-запроса, который вытащит некоторые данные из старой базы данных MS SQL и вернет его в формате, который может использовать мое приложение. Написание сценария groovy было достаточно простым, но тестирование это другое дело. В настоящее время я использую гиперзвуковой метод для создания встроенной памяти для тестирования. Когда мой тест запускается, я создаю таблицу и пытаюсь заполнить ее некоторыми тестовыми данными из XML-файла. Создание таблицы работает нормально, но вставка данных не выполняется: «пользователю не хватает привилегии или объекта, который не найден: GROUP».Состояние чувствительной к регистру столбца в HSQL
Проблема заключается в том, что hsql преобразует все мои имена столбцов в верхний регистр. Поэтому, хотя фактическое имя столбца является «Группой», оно преобразуется в «GROUP» для оператора insert. GROUP конфликтует с ключевым словом группы, поэтому запрос не выполняется.
У меня нет контроля над именем столбца в старой базе данных, поэтому мне нужно какое-то обходное решение. Есть ли способ настроить hsql для предотвращения преобразования имени столбца?
Update: Вот пример кода, который показывает, что я пытаюсь сделать в заводной:
Во-первых у меня есть метод инициализации, который создает таблицу в тестовой БД
Sql remoteDB;
...
remoteDB.execute(
"""create table INFO_GROUP(
"Group" varchar(2) not null primary key,
VALUE varchar(3) null,
GROUP_DATE datetime null,
COMMENT varchar(25) null
)""");
После создания таблицы я разбираю некоторые данные из XML-файла и вставляю его в таблицу, которую я создал:
groovy.sql.DataSet set = remoteDB.dataSet(tableName);
Node n = it;
Map<String,Object> m = n.attributes() ;
assert(set!=null);
set.add(m);
Проблема, которую я вижу, это последняя строка, где я вызываю set.add (m). Я получаю сообщение об ошибке:
Failed to execute: insert into INFO_GROUP (Group, VALUE, GROUP_DATE, COMMENT) values (?, ?, ?, ?) because: user lacks privilege or object not found: GROUP
HSQLDB сохраняет «Группу» при двойном кавычке. Оператор INSERT должен дважды указывать имя столбца «Группа», которое в этом случае не выполняется. Посмотрите, как вы можете заставить Groovy использовать правильную форму. – fredt
Groovy делегирует HSQL, поэтому для изменения формы мне нужно будет найти параметр в HSQLDB, который позволяет мне контролировать чувствительность к регистру имен столбцов. Кто-нибудь знает, как это сделать? – pbuchheit
Оказывается, Фредт имел правильную идею. Проблема была не в этом, это было отсутствие котировок. Как только я добавил код для переноса ключа «Group» на моей карте с двойными кавычками, проблема исчезла. Если вы опубликуете свой комментарий в качестве ответа fredt, я помечаю его как решение. Благодаря! – pbuchheit