Skip to content

Commit 1b3c507

Browse files
committed
create view .. as (select ..) implemented
1 parent d82c7a1 commit 1b3c507

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

src/main/javacc/net/sf/jsqlparser/parser/JSqlParserCC.jj

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1843,7 +1843,12 @@ CreateView CreateView():
18431843
<K_VIEW> view=Table() { createView.setView(view); }
18441844
[ columnNames = ColumnsNamesList() { createView.setColumnNames(columnNames); } ]
18451845
<K_AS>
1846-
select=SelectBody() { createView.setSelectBody(select); }
1846+
(
1847+
LOOKAHEAD(3)
1848+
"(" select=SelectBody() ")" { createView.setSelectBody(select); }
1849+
|
1850+
select=SelectBody() { createView.setSelectBody(select); }
1851+
)
18471852
{ return createView; }
18481853
}
18491854

src/test/java/net/sf/jsqlparser/test/create/CreateViewTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package net.sf.jsqlparser.test.create;
22

33
import java.io.StringReader;
4+
import static junit.framework.Assert.assertEquals;
5+
import static junit.framework.Assert.assertFalse;
46

57
import junit.framework.TestCase;
68
import net.sf.jsqlparser.JSQLParserException;
@@ -47,6 +49,16 @@ public void testCreateViewWithColumnNames1() throws JSQLParserException {
4749
String stmt = "CREATE OR REPLACE VIEW view1(col1, col2) AS SELECT a, b FROM testtab";
4850
assertSqlCanBeParsedAndDeparsed(stmt);
4951
}
52+
53+
public void testCreateView5() throws JSQLParserException {
54+
String statement = "CREATE VIEW myview AS (SELECT * FROM mytab)";
55+
String statement2 = "CREATE VIEW myview AS SELECT * FROM mytab";
56+
CreateView createView = (CreateView) parserManager.parse(new StringReader(statement));
57+
assertFalse(createView.isOrReplace());
58+
assertEquals("myview", createView.getView().getName());
59+
assertEquals("mytab", ((Table) ((PlainSelect) createView.getSelectBody()).getFromItem()).getName());
60+
assertEquals(statement2, createView.toString());
61+
}
5062

5163
private void assertSqlCanBeParsedAndDeparsed(String statement) throws JSQLParserException {
5264
Statement parsed = parserManager.parse(new StringReader(statement));

0 commit comments

Comments
 (0)