From e60dc20866e02c3ecb788e9d5717ab6034ddc008 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 5 Jul 2013 09:56:23 +0200 Subject: [PATCH] [#2608] Error in code generator when the sqlite_sequence table is missing --- jOOQ-codegen-maven-example/.classpath | 1 + jOOQ-codegen-maven-example/pom.xml | 129 ++++++++++++++---- jOOQ-codegen-maven-example/sqlite/.gitignore | 1 + .../src/test/resources/{db.sql => db-h2.sql} | 0 .../src/test/resources/db-sqlite.sql | 7 + .../util/sqlite/SQLiteTableDefinition.java | 19 ++- ...GenerationTool SQLite test (xerial).launch | 41 ------ 7 files changed, 129 insertions(+), 69 deletions(-) create mode 100644 jOOQ-codegen-maven-example/sqlite/.gitignore rename jOOQ-codegen-maven-example/src/test/resources/{db.sql => db-h2.sql} (100%) create mode 100644 jOOQ-codegen-maven-example/src/test/resources/db-sqlite.sql delete mode 100644 jOOQ-test/launch/GenerationTool SQLite test (xerial).launch diff --git a/jOOQ-codegen-maven-example/.classpath b/jOOQ-codegen-maven-example/.classpath index ccf13871f4..ba44341a97 100644 --- a/jOOQ-codegen-maven-example/.classpath +++ b/jOOQ-codegen-maven-example/.classpath @@ -12,6 +12,7 @@ + diff --git a/jOOQ-codegen-maven-example/pom.xml b/jOOQ-codegen-maven-example/pom.xml index d72e3321d4..80a092725b 100644 --- a/jOOQ-codegen-maven-example/pom.xml +++ b/jOOQ-codegen-maven-example/pom.xml @@ -48,6 +48,11 @@ h2 1.3.168 + + org.xerial + sqlite-jdbc + 3.7.15-M1 + javax.persistence persistence-api @@ -156,39 +161,69 @@ sql-maven-plugin 1.5 + + + + ${maven.test.skip} + always + + + + + create-database-h2 + generate-test-sources + + execute + + + org.h2.Driver + jdbc:h2:~/maven-test + sa + + + true + + src/test/resources/db-h2.sql + + + + + + + com.h2database h2 1.3.168 + + org.xerial + sqlite-jdbc + 3.7.15-M1 + - - - - org.h2.Driver - jdbc:h2:~/maven-test - sa - - - ${maven.test.skip} - - - - - create-database - generate-test-sources - - execute - - - true - - src/test/resources/db.sql - - - - @@ -196,9 +231,10 @@ org.jooq jooq-codegen-maven 3.2.0-SNAPSHOT + - exec1 + generate-h2 generate-test-sources generate @@ -231,6 +267,40 @@ + + + generate-sqlite + generate-test-sources + + generate + + + + org.sqlite.JDBC + jdbc:sqlite:sqlite/2608.db + sa + + + + org.jooq.util.DefaultGenerator + + org.jooq.util.sqlite.SQLiteDatabase + .* + + true + + + false + true + true + + + org.jooq.maven.example.sqlite + target/generated-test-sources/jooq-sqlite + + + + @@ -238,6 +308,11 @@ h2 1.3.168 + + org.xerial + sqlite-jdbc + 3.7.15-M1 + diff --git a/jOOQ-codegen-maven-example/sqlite/.gitignore b/jOOQ-codegen-maven-example/sqlite/.gitignore new file mode 100644 index 0000000000..c10c22c310 --- /dev/null +++ b/jOOQ-codegen-maven-example/sqlite/.gitignore @@ -0,0 +1 @@ +/2608.db diff --git a/jOOQ-codegen-maven-example/src/test/resources/db.sql b/jOOQ-codegen-maven-example/src/test/resources/db-h2.sql similarity index 100% rename from jOOQ-codegen-maven-example/src/test/resources/db.sql rename to jOOQ-codegen-maven-example/src/test/resources/db-h2.sql diff --git a/jOOQ-codegen-maven-example/src/test/resources/db-sqlite.sql b/jOOQ-codegen-maven-example/src/test/resources/db-sqlite.sql new file mode 100644 index 0000000000..ded58a87bd --- /dev/null +++ b/jOOQ-codegen-maven-example/src/test/resources/db-sqlite.sql @@ -0,0 +1,7 @@ +DROP TABLE IF EXISTS test; + +CREATE TABLE test ( + x INT, + + CONSTRAINT pk_test PRIMARY KEY (x) +); \ No newline at end of file diff --git a/jOOQ-meta/src/main/java/org/jooq/util/sqlite/SQLiteTableDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/sqlite/SQLiteTableDefinition.java index ad879f64e7..cbb5282eed 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/sqlite/SQLiteTableDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/sqlite/SQLiteTableDefinition.java @@ -35,6 +35,8 @@ */ package org.jooq.util.sqlite; +import static org.jooq.util.sqlite.sqlite_master.SQLiteMaster.SQLITE_MASTER; + import java.sql.SQLException; import java.util.ArrayList; import java.util.List; @@ -45,6 +47,7 @@ import org.jooq.util.ColumnDefinition; import org.jooq.util.DefaultColumnDefinition; import org.jooq.util.DefaultDataTypeDefinition; import org.jooq.util.SchemaDefinition; +import org.jooq.util.sqlite.sqlite_master.SQLiteMaster; /** * SQLite table definition @@ -53,6 +56,8 @@ import org.jooq.util.SchemaDefinition; */ public class SQLiteTableDefinition extends AbstractTableDefinition { + private static Boolean existsSqliteSequence; + public SQLiteTableDefinition(SchemaDefinition schema, String name, String comment) { super(schema, name, comment); } @@ -74,7 +79,7 @@ public class SQLiteTableDefinition extends AbstractTableDefinition { // SQLite identities are primary keys whose tables are mentioned in // sqlite_sequence boolean pk = record.getValue("pk", Boolean.class); - boolean identity = pk && create() + boolean identity = pk && existsSqliteSequence() && create() .fetchOne("select count(*) from sqlite_sequence where name = ?", getName()) .getValue(0, Boolean.class); @@ -100,4 +105,16 @@ public class SQLiteTableDefinition extends AbstractTableDefinition { return result; } + + private boolean existsSqliteSequence() { + if (existsSqliteSequence == null) { + existsSqliteSequence = create() + .selectCount() + .from(SQLITE_MASTER) + .where(SQLiteMaster.NAME.lower().eq("sqlite_sequence")) + .fetchOne(0, boolean.class); + } + + return existsSqliteSequence; + } } diff --git a/jOOQ-test/launch/GenerationTool SQLite test (xerial).launch b/jOOQ-test/launch/GenerationTool SQLite test (xerial).launch deleted file mode 100644 index 78f5c3dcb9..0000000000 --- a/jOOQ-test/launch/GenerationTool SQLite test (xerial).launch +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -