diff --git a/src/main/java/net/sf/jsqlparser/statement/create/table/CreateTable.java b/src/main/java/net/sf/jsqlparser/statement/create/table/CreateTable.java index 57d77715a..5fe540cac 100644 --- a/src/main/java/net/sf/jsqlparser/statement/create/table/CreateTable.java +++ b/src/main/java/net/sf/jsqlparser/statement/create/table/CreateTable.java @@ -36,6 +36,7 @@ public class CreateTable implements Statement { private Table table; + private Boolean unlogged; private List tableOptionsStrings; private List columnDefinitions; private List indexes; @@ -57,6 +58,13 @@ public void setTable(Table table) { this.table = table; } + /** + * Whether the table is unlogged or not (PostgreSQL 9.1+ feature) + */ + public Boolean isUnlogged() { return unlogged; } + + public void setUnlogged(Boolean unlogged) { this.unlogged = unlogged; } + /** * A list of {@link ColumnDefinition}s of this table. */ @@ -105,7 +113,7 @@ public void setSelect(Select select) { public String toString() { String sql = ""; - sql = "CREATE TABLE " + table; + sql = "CREATE " + (unlogged != null && unlogged ? "UNLOGGED " : "") + "TABLE " + table; if (select != null) { sql += " AS " + select.toString(); diff --git a/src/main/javacc/net/sf/jsqlparser/parser/JSqlParserCC.jj b/src/main/javacc/net/sf/jsqlparser/parser/JSqlParserCC.jj index 99a88f65d..30bb6e8f0 100644 --- a/src/main/javacc/net/sf/jsqlparser/parser/JSqlParserCC.jj +++ b/src/main/javacc/net/sf/jsqlparser/parser/JSqlParserCC.jj @@ -197,6 +197,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */ | | | +| } TOKEN : /* Numeric Constants */ @@ -2034,6 +2035,7 @@ CreateTable CreateTable(): // TODO: // [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] + [ { createTable.setUnlogged(true); } ] (CreateParameter())* table=Table() diff --git a/src/test/java/net/sf/jsqlparser/test/create/CreateTableTest.java b/src/test/java/net/sf/jsqlparser/test/create/CreateTableTest.java index 32dc8d70d..d0f633ebd 100644 --- a/src/test/java/net/sf/jsqlparser/test/create/CreateTableTest.java +++ b/src/test/java/net/sf/jsqlparser/test/create/CreateTableTest.java @@ -47,10 +47,11 @@ public void testCreateTableAsSelect2() throws JSQLParserException { } public void testCreateTable() throws JSQLParserException { - String statement = "CREATE TABLE mytab (mycol a (10, 20) c nm g, mycol2 mypar1 mypar2 (23,323,3) asdf ('23','123') dasd, " + String statement = "CREATE UNLOGGED TABLE mytab (mycol a (10, 20) c nm g, mycol2 mypar1 mypar2 (23,323,3) asdf ('23','123') dasd, " + "PRIMARY KEY (mycol2, mycol)) type = myisam"; CreateTable createTable = (CreateTable) parserManager.parse(new StringReader(statement)); assertEquals(2, createTable.getColumnDefinitions().size()); + assertTrue(createTable.isUnlogged()); assertEquals("mycol", ((ColumnDefinition) createTable.getColumnDefinitions().get(0)).getColumnName()); assertEquals("mycol2", ((ColumnDefinition) createTable.getColumnDefinitions().get(1)).getColumnName()); assertEquals("PRIMARY KEY", ((Index) createTable.getIndexes().get(0)).getType());