提交 f21ea8cd authored 作者: Owner's avatar Owner

Issue#479 Changed asserts and refactored long parser method

上级 06f3ed29
...@@ -4858,9 +4858,18 @@ public class Parser { ...@@ -4858,9 +4858,18 @@ public class Parser {
} }
private Query parseWith() { private Query parseWith() {
List<TableView> viewsCreated = new ArrayList<TableView>();
readIf("RECURSIVE"); readIf("RECURSIVE");
do{ do{
viewsCreated.add(parseSingleCommonTableExression());
} while(readIf(","));
Query q = parseSelectUnion();
q.setPrepareAlways(true);
return q;
}
private TableView parseSingleCommonTableExression() {
String tempViewName = readIdentifierWithSchema(); String tempViewName = readIdentifierWithSchema();
Schema schema = getSchema(); Schema schema = getSchema();
Table recursiveTable; Table recursiveTable;
...@@ -4872,6 +4881,7 @@ public class Parser { ...@@ -4872,6 +4881,7 @@ public class Parser {
if(readIf("(")){ if(readIf("(")){
cols = parseColumnList(); cols = parseColumnList();
for (String c : cols) { for (String c : cols) {
// we dont really know the type of the column, so string will have to do
columns.add(new Column(c, Value.STRING)); columns.add(new Column(c, Value.STRING));
} }
} }
...@@ -4888,6 +4898,9 @@ public class Parser { ...@@ -4888,6 +4898,9 @@ public class Parser {
} }
session.removeLocalTempTable(old); session.removeLocalTempTable(old);
} }
// this table is created as a work around because recursive
// table expressions need to reference something that look like themselves
// to work (its removed after creation in this method)
CreateTableData data = new CreateTableData(); CreateTableData data = new CreateTableData();
data.id = database.allocateObjectId(); data.id = database.allocateObjectId();
data.columns = columns; data.columns = columns;
...@@ -4925,11 +4938,7 @@ public class Parser { ...@@ -4925,11 +4938,7 @@ public class Parser {
view.setTemporary(true); view.setTemporary(true);
session.addLocalTempTable(view); session.addLocalTempTable(view);
view.setOnCommitDrop(true); view.setOnCommitDrop(true);
} while(readIf(",")); return view;
Query q = parseSelectUnion();
q.setPrepareAlways(true);
return q;
} }
private CreateView parseCreateView(boolean force, boolean orReplace) { private CreateView parseCreateView(boolean force, boolean orReplace) {
......
...@@ -121,7 +121,7 @@ public class TestGeneralCommonTableQueries extends TestBase { ...@@ -121,7 +121,7 @@ public class TestGeneralCommonTableQueries extends TestBase {
assertTrue(rs.next()); assertTrue(rs.next());
assertEquals(3, rs.getInt("FIRST_COL")); assertEquals(3, rs.getInt("FIRST_COL"));
assertFalse(rs.next()); assertFalse(rs.next());
assertEquals("rsMeta0: columns=1",rs.getMetaData().toString()); assertEquals(rs.getMetaData().getColumnCount(),1);
assertEquals("FIRST_COL",rs.getMetaData().getColumnLabel(1)); assertEquals("FIRST_COL",rs.getMetaData().getColumnLabel(1));
conn.close(); conn.close();
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论