HSQLDB: странное «уникальное ограничение или нарушение индекса» с данными, считанными из CSV - PullRequest
1 голос
/ 25 августа 2010

У меня есть инструмент, который читает файл CSV, выбирает из него с помощью HSQLDB и сохраняет результат как другой файл CSV. Подробнее здесь: http://ondra.zizka.cz/stranky/programovani/java/apps/CsvCruncher-csv-manipulation-sql.texy

Теперь, когда я использовал его для какой-то задачи, я получил:

java -jar CsvCruncher-1.0.jar result.csv foo.csv 'SELECT * FROM indata'

INFO:   SQL: CREATE TEXT TABLE indata ( xrelease VARCHAR(255), xtype VARCHAR(255), xartifact VARCHAR(255), xversion VARCHAR(255) )
INFO:   SQL: CREATE TEXT TABLE output ( XRELEASE VARCHAR(255), XTYPE VARCHAR(255), XARTIFACT VARCHAR(255), XVERSION VARCHAR(255) )
INFO:   User's SQL: INSERT INTO output (SELECT * FROM indata)
INFO: Database closed
Exception in thread "main" java.sql.SQLException: integrity constraint violation: unique constraint or index violation: SYS_IDX_10027
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source)
    at org.hsqldb.jdbc.JDBCPreparedStatement.executeUpdate(Unknown Source)
    at org.jboss.qa.cvscruncher.Cruncher.crunch(Cruncher.java:187)
    at org.jboss.qa.cvscruncher.App.main(App.java:26)
    at Crunch.main(Crunch.java:9)
Caused by: org.hsqldb.HsqlException: integrity constraint violation: unique constraint or index violation: SYS_IDX_10027
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.index.IndexAVL.insert(Unknown Source)
    at org.hsqldb.persist.RowStoreAVLDiskData.indexRow(Unknown Source)
    at org.hsqldb.Table.insertSingleRow(Unknown Source)
    at org.hsqldb.StatementDML.insertRowSet(Unknown Source)
    at org.hsqldb.StatementInsert.getResult(Unknown Source)
    at org.hsqldb.StatementDMQL.execute(Unknown Source)
    at org.hsqldb.Session.executeCompiledStatement(Unknown Source)
    at org.hsqldb.Session.execute(Unknown Source)
    ... 5 more

Как видно из журнала, индексы не созданы, по крайней мере, явно. Я попытался найти какое-то автоматически созданное ограничение в руководстве HSQLDB, не нашел.

Когда я делаю только SELECT 1 FROM indata, это нормально. Так что я думаю, что это что-то с самими данными. Для этого случая вот они: http://pastebin.com/8QiY2HXx (x для предотвращения столкновения ключевых слов).

Обновление:

Когда я выгружаю данные, считанные из CSV, это немного странно:

 -------
 XRELEASE: 5.1.0-SNAPSHOT
 XTYPE: DEP
 XARTIFACT: org.apache.maven:maven-ant-tasks
5XVERSION: 2.0.9
 -------
 XRELEASE: 5.1.0-SNAPSHOT
 XTYPE: DEP
 XARTIFACT: org.jboss.seam.integration:jboss-seam-int-microcontainer
5XVERSION: 5.1.0.CR1
 -------
 XRELEASE: 5.1.0-SNAPSHOT
 XTYPE: DEP
 XARTIFACT: org.jboss.seam.integration:jboss-seam-int-jbossas
5XVERSION: 5.1.0.CR1
 -------
...

Кажется, что столбец xversion как-то изменен. Код просто System.out.println(" "+ metaData.getColumnLabel(i) + ": "+ rs.getObject(i) );

Есть идеи, что может вызвать это?

Спасибо, Ондра

Ответы [ 2 ]

4 голосов
/ 26 августа 2010

Проблема была во входном файле - он содержал 0x0D как символы новой строки и каким-то образом сломал HSQLDB. Я сообщу об этом, чтобы они могли проверить. По крайней мере, он должен отказаться от неверного ввода или лучше преобразовать переводы строки.

2 голосов
/ 25 августа 2010

Пожалуйста, проверьте файлы .script и .log для базы данных.Это покажет, какие фактические определения таблиц находятся в базе данных.Если вы не можете найти причину, сообщите об ошибке в HSQLDB через Bug Tracker (см. Страницу «Поддержка») с примерами файлов данных.Ошибки исправляются быстро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...