Ошибка в именовании таблиц liquibase с помощью hsqldb (в памяти). Требуется обходной путь - PullRequest
0 голосов
/ 21 августа 2010

Я использую liquibase в проекте, и я просто понимаю, что делает мою сборку неудачной. Я успешно использовал командную строку generateChangeLog для той же схемы в mysql и включил этот файл в мой файл журнала master-change-log.

В тестовой среде я использую hsqldb. Теперь все имена таблиц разделены дефисом, кроме языка. Так как моя сборка не удалась, я открыл mydb.script и все имена таблиц, разделенные дефисом, были написаны заглавными буквами, но язык выглядит следующим образом

CREATE MEMORY TABLE SOME_TABLE(ID BIGINT NOT NULL,OBJ_VESION INTEGER DEFAULT 0 NOT NULL,REQUESTER_PHONE VARCHAR(20),FORM_CODE VARCHAR(100),DATE_STARTED TIMESTAMP,DATE_ENDED TIMESTAMP,LAST_ACTIVITY TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,SOME_TABLE_STATUS VARCHAR(255),CONSTRAINT PK_INCOMING_MESSAGE_SESSION PRIMARY KEY(ID))  

CREATE MEMORY TABLE "language"(ID BIGINT NOT NULL,CODE VARCHAR(10),NAME VARCHAR(50),DESCRIPTION VARCHAR(255),CONSTRAINT PK_LANGUAGE PRIMARY KEY(ID))

и в файле журнала изменений они выглядят так

<changeSet author="highjo (generated)" id="1282409084036-10">
    <createTable tableName="some_table">
        <column name="id" type="BIGINT">
            <constraints nullable="false" primaryKey="true"/>
        </column>
        <column defaultValueNumeric="0" name="obj_vesion" type="INT">
            <constraints nullable="false"/>
        </column>
       <!-- ... -->
    </createTable>
</changeSet>
<changeSet author="highjo (generated)" id="1282409084036-11">
    <createTable tableName="language">
        <column name="id" type="BIGINT">
            <constraints nullable="false" primaryKey="true"/>
        </column>
        <column name="code" type="VARCHAR(10)"/>
        <!-- .... -->
    </createTable>
</changeSet>

как вы можете заметить, они все прописными буквами в файле журнала изменений. Я пытался изменить язык журнала изменений на заглавные, а в сценарии это прописные буквы только потому, что они по-прежнему имеют двойные кавычки. :(

Как можно это исправить? спасибо за чтение.

1 Ответ

0 голосов
/ 22 августа 2010

Я думаю, что причина в том, что язык указан в кавычках, потому что это зарезервированное слово в hsql, и поэтому liquibase его цитирует, чтобы SQL не ошибался.

Правила выхода могли измениться для liquibase 2.0, но если нет, вы могли бы проще переопределить метод escapeObject в пользовательском классе базы данных q и посмотреть, работает ли он.

Цитаты не должны иметь значения.Они не должны встречаться в самом имени таблицы.

...