diff --git a/src/fqlite/export/SQLiteDatabaseCreator.java b/src/fqlite/export/SQLiteDatabaseCreator.java index 8ca7cd6..8adab25 100644 --- a/src/fqlite/export/SQLiteDatabaseCreator.java +++ b/src/fqlite/export/SQLiteDatabaseCreator.java @@ -121,7 +121,7 @@ public void createDatabaseAndSchema(List tables, TableDescripto // iterate over all Descriptor objects, extract the original SQL command and execute it for(TableDescriptor desc : tables) { - if (desc.sql.isEmpty() || desc.tblname.startsWith("sqlite_")) + if (desc.sql.isEmpty() || desc.tblname.startsWith("sqlite_") || desc.isVirtual()) continue; String stm = createTableSql(desc.tblname,desc.columnnames,desc.sqltypes, isWAL); diff --git a/src/fqlite/parser/SimpleSQLiteParser.java b/src/fqlite/parser/SimpleSQLiteParser.java index 29517f0..27c6017 100644 --- a/src/fqlite/parser/SimpleSQLiteParser.java +++ b/src/fqlite/parser/SimpleSQLiteParser.java @@ -371,8 +371,6 @@ private TableDescriptor parseCreateTable(String stmt) @Override public void enterColumn_name(SQLiteParser.Column_nameContext ctx) { - sqltypes_defined = false; - if(inForeignTable) { inForeignTable = false; @@ -383,10 +381,19 @@ private TableDescriptor parseCreateTable(String stmt) { return; } - cons=""; - String colname = ctx.getText(); + // Sanity check for duplicate column name + // TODO: This happens unfortunately in yet unhandled construct "CHECK(...)" + if(colnames.contains(colname)) + { + return; + } + + sqltypes_defined = false; + + cons=""; + //System.out.println("enterColumn_name()::colname =" + colname); if (!colname.equals("CONSTRAINT")) @@ -423,7 +430,8 @@ private TableDescriptor parseCreateTable(String stmt) value = value.trim(); // case: there is actually no type info given, but a NOT NULL constraint - if(value.equals("NOT")) + // or DEFAULT XXX + if(value.equals("NOT") || value.equals("DEFAULT")) value = "BLOB"; if(value.isEmpty()) value = "BLOB";