提交 076e7531 authored 作者: Noel Grandin's avatar Noel Grandin

Merge branch 'igelbox-recursive-with-parameters'

......@@ -220,6 +220,7 @@ public class Parser {
private boolean recompileAlways;
private ArrayList<Parameter> indexedParameterList;
private int orderInFrom;
private ArrayList<Parameter> suppliedParameterList;
public Parser(Session session) {
this.database = session.getDatabase();
......@@ -311,7 +312,7 @@ public class Parser {
currentPrepared = null;
createView = null;
recompileAlways = false;
indexedParameterList = null;
indexedParameterList = suppliedParameterList;
read();
return parsePrepared();
}
......@@ -4757,7 +4758,7 @@ public class Parser {
}
int id = database.allocateObjectId();
TableView view = new TableView(schema, id, tempViewName, querySQL,
null, cols, session, true);
parameters, cols, session, true);
view.setTableExpression(true);
view.setTemporary(true);
session.addLocalTempTable(view);
......@@ -6099,6 +6100,10 @@ public class Parser {
this.rightsChecked = rightsChecked;
}
public void setSuppliedParameterList(ArrayList<Parameter> suppliedParameterList) {
this.suppliedParameterList = suppliedParameterList;
}
/**
* Parse a SQL code snippet that represents an expression.
*
......
......@@ -9,6 +9,7 @@ import java.util.ArrayList;
import java.util.HashSet;
import java.util.concurrent.TimeUnit;
import org.h2.api.ErrorCode;
import org.h2.command.Parser;
import org.h2.command.Prepared;
import org.h2.command.dml.Query;
import org.h2.command.dml.SelectUnion;
......@@ -184,7 +185,10 @@ public class ViewIndex extends BaseIndex implements SpatialIndex {
return new ViewCursor(this, recResult, first, last);
}
if (query == null) {
query = (Query) createSession.prepare(querySQL, true);
Parser parser = new Parser(createSession);
parser.setRightsChecked(true);
parser.setSuppliedParameterList(originalParameters);
query = (Query) parser.prepare(querySQL);
}
if (!query.isUnion()) {
throw DbException.get(ErrorCode.SYNTAX_ERROR_2,
......
......@@ -98,6 +98,9 @@ toolbar.autoComplete=Auto complete
toolbar.autoComplete.full=Full
toolbar.autoComplete.normal=Normal
toolbar.autoComplete.off=Off
toolbar.autoSelect=Auto select
toolbar.autoSelect.off=Off
toolbar.autoSelect.on=On
toolbar.cancelStatement=Cancel the current statement
toolbar.clear=Clear
toolbar.commit=Commit
......
......@@ -98,6 +98,9 @@ toolbar.autoComplete=Auto complete
toolbar.autoComplete.full=Total
toolbar.autoComplete.normal=Normal
toolbar.autoComplete.off=Desligado
toolbar.autoSelect=Auto seleção
toolbar.autoSelect.off=Desligado
toolbar.autoSelect.on=Ligado
toolbar.cancelStatement=Cancelar o comando que está em execução
toolbar.clear=Limpar
toolbar.commit=Commit
......
......@@ -128,6 +128,18 @@ Initial Developer: H2 Group
<option value="2">
${text.toolbar.autoComplete.full}
</option>
</select>&nbsp;
</td>
<td class="toolbar">
${text.toolbar.autoSelect}&nbsp;
<select name="autoSelect" size="1"
onchange="javascript:parent.h2query.setAutoSelect(this.value)">
<option value="0">
${text.toolbar.autoSelect.off}
</option>
<option selected="selected" value="1">
${text.toolbar.autoSelect.on}
</option>
</select>
</td>
<td class="toolbar">
......
......@@ -15,6 +15,7 @@ Initial Developer: H2 Group
var agent=navigator.userAgent.toLowerCase();
var is_opera = agent.indexOf("opera") >= 0;
var autoComplete = 0; // 0: off, 1: normal, 2: full
var autoSelect = 1; // 0: off, 1: on
var selectedRow = -1;
var lastList = '';
var lastQuery = null;
......@@ -294,6 +295,10 @@ function setAutoComplete(value) {
}
}
function setAutoSelect(value) {
autoSelect = value;
}
function manualAutoComplete() {
autoCompleteManual = true;
lastQuery = null;
......@@ -471,7 +476,13 @@ function submitSelected() {
var field = document.h2query.sql;
//alert('contents ' + field.selectionStart + ' ' + field.selectionEnd);
if (field.selectionStart == field.selectionEnd) {
return;
if (autoSelect == 0) {
return;
}
doAutoSelect();
if (field.selectionStart == field.selectionEnd) {
return;
}
}
var startPos = field.selectionStart;
var endPos = field.selectionEnd;
......@@ -480,6 +491,20 @@ function submitSelected() {
document.h2querysubmit.submit();
}
function doAutoSelect() {
var field = document.h2query.sql;
var position = field.selectionStart;
try {
var prevDoubleLine = field.value.lastIndexOf('\n\n',position - 1) + 2;
if (prevDoubleLine == 1) prevDoubleLine = 0;
var nextDoubleLine = field.value.indexOf('\n\n',position);
if (nextDoubleLine == -1) nextDoubleLine = field.value.length;
field.setSelectionRange(prevDoubleLine,nextDoubleLine);
} catch (e) {
field.selectionStart = field.selectionEnd = position;
}
}
//-->
</script>
</head>
......
......@@ -123,6 +123,21 @@ public class TestRecursiveQueries extends TestBase {
assertEquals(103, rs.getInt(1));
assertFalse(rs.next());
prep = conn.prepareStatement("with recursive t(n) as " +
"(select ? union all select n+? from t where n<?) " +
"select * from t");
prep.setInt(1, 10);
prep.setInt(2, 2);
prep.setInt(3, 14);
rs = prep.executeQuery();
assertResultSetOrdered(rs, new String[][]{{"10"}, {"12"}, {"14"}});
prep.setInt(1, 100);
prep.setInt(2, 3);
prep.setInt(3, 103);
rs = prep.executeQuery();
assertResultSetOrdered(rs, new String[][]{{"100"}, {"103"}});
conn.close();
deleteDb("recursiveQueries");
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论