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

Bypassed null schemaName bug with special parseSelect() call

上级 4f2b713d
...@@ -1099,23 +1099,13 @@ public class Parser { ...@@ -1099,23 +1099,13 @@ public class Parser {
} }
private MergeUsing parseMergeUsing(Merge oldCommand, int start) { private MergeUsing parseMergeUsing(Merge oldCommand, int start) {
/* TODO: not sure why schema name is reset to null */
if(schemaName==null){
schemaName = session.getCurrentSchemaName();
}
String savedSchemaName = schemaName;
MergeUsing command = new MergeUsing(oldCommand); MergeUsing command = new MergeUsing(oldCommand);
currentPrepared = command; currentPrepared = command;
if (readIf("(")) { if (readIf("(")) {
/* a select query is supplied */ /* a select query is supplied */
if (isSelect()) { if (isSelect()) {
command.setQuery(parseSelect()); command.setQuery(parseSelectRetainingSchema());
// TODO: the schema name is sometimes reset in the parseSelect call - fix this by resetting it
if(schemaName==null){
schemaName = savedSchemaName;
}
read(")"); read(")");
} }
command.setQueryAlias(readFromAlias(null, Arrays.asList("ON"))); command.setQueryAlias(readFromAlias(null, Arrays.asList("ON")));
...@@ -1887,6 +1877,25 @@ public class Parser { ...@@ -1887,6 +1877,25 @@ public class Parser {
} }
return command; return command;
} }
private Query parseSelectRetainingSchema() {
// The parseSelect() method nulls the schema name sometimes - make sure it is reverted if nulled
String savedSchemaName = schemaName;
Throwable error=null;
Query command = null;
try{
command = parseSelect();
}
catch(Throwable e){
error = e;
throw e;
}
finally{
if(schemaName==null && error==null){
schemaName = savedSchemaName;
}
}
return command;
}
private Query parseSelect() { private Query parseSelect() {
int paramIndex = parameters.size(); int paramIndex = parameters.size();
...@@ -5177,17 +5186,13 @@ public class Parser { ...@@ -5177,17 +5186,13 @@ public class Parser {
try { try {
read("AS"); read("AS");
read("("); read("(");
Query withQuery = parseSelect(); Query withQuery = parseSelectRetainingSchema();
read(")"); read(")");
columnTemplateList = createQueryColumnTemplateList(cols, withQuery, querySQLOutput); columnTemplateList = createQueryColumnTemplateList(cols, withQuery, querySQLOutput);
} finally { } finally {
session.removeLocalTempTable(recursiveTable); session.removeLocalTempTable(recursiveTable);
} }
//TODO: Why and where is the schema name being reset I shouldn't have to do this
if(getSchema()==null){
schemaName = schema.getName();
}
TableView view = createTemporarySessionView(tempViewName, querySQLOutput[0], columnTemplateList,true/*allowRecursiveQueryDetection*/, true); TableView view = createTemporarySessionView(tempViewName, querySQLOutput[0], columnTemplateList,true/*allowRecursiveQueryDetection*/, true);
return view; return view;
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论