HSQLDB: странное "уникальное ограничение или нарушение индекса" с данными, считанными из CSV
У меня есть инструмент, который читает файл 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 ответа
Проблема была во входном файле - он содержал 0x0D
как переводы строк, и как-то сломал HSQLDB. Я сообщу об этом, чтобы они могли проверить. По крайней мере, он должен отказаться от неверного ввода или лучше преобразовать переводы строки.
Пожалуйста, проверьте файлы.script и.log для базы данных. Это покажет, какие фактические определения таблиц находятся в базе данных. Если вы не можете найти причину, сообщите об ошибке в HSQLDB через Bug Tracker (см. Страницу "Поддержка") с примерами файлов данных. Ошибки исправляются быстро.