提交 695b8413 authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Add strict parameter to Parser.readIfMore() and use this method in more places

上级 b92a913e
...@@ -794,8 +794,7 @@ public class Parser { ...@@ -794,8 +794,7 @@ public class Parser {
do { do {
Column column = readTableColumn(filter); Column column = readTableColumn(filter);
columns.add(column); columns.add(column);
} while (readIf(",")); } while (readIfMore(true));
read(")");
read("="); read("=");
Expression expression = readExpression(); Expression expression = readExpression();
if (columns.size() == 1) { if (columns.size() == 1) {
...@@ -906,8 +905,7 @@ public class Parser { ...@@ -906,8 +905,7 @@ public class Parser {
column.sortType |= SortOrder.NULLS_LAST; column.sortType |= SortOrder.NULLS_LAST;
} }
} }
} while (readIf(",")); } while (readIfMore(true));
read(")");
return columns.toArray(new IndexColumn[0]); return columns.toArray(new IndexColumn[0]);
} }
...@@ -916,7 +914,7 @@ public class Parser { ...@@ -916,7 +914,7 @@ public class Parser {
do { do {
String columnName = readColumnIdentifier(); String columnName = readColumnIdentifier();
columns.add(columnName); columns.add(columnName);
} while (readIfMore()); } while (readIfMore(false));
return columns.toArray(new String[0]); return columns.toArray(new String[0]);
} }
...@@ -931,7 +929,7 @@ public class Parser { ...@@ -931,7 +929,7 @@ public class Parser {
column.getSQL()); column.getSQL());
} }
columns.add(column); columns.add(column);
} while (readIfMore()); } while (readIfMore(false));
} }
return columns.toArray(new Column[0]); return columns.toArray(new Column[0]);
} }
...@@ -944,9 +942,16 @@ public class Parser { ...@@ -944,9 +942,16 @@ public class Parser {
return table.getColumn(id); return table.getColumn(id);
} }
private boolean readIfMore() { /**
* Read comma or closing brace.
*
* @param strict
* if {@code false} additional comma before brace is allowed
* @return {@code true} if comma is read, {@code false} if brace is read
*/
private boolean readIfMore(boolean strict) {
if (readIf(",")) { if (readIf(",")) {
return !readIf(")"); return strict || !readIf(")");
} }
read(")"); read(")");
return false; return false;
...@@ -1110,7 +1115,7 @@ public class Parser { ...@@ -1110,7 +1115,7 @@ public class Parser {
} else { } else {
values.add(readExpression()); values.add(readExpression());
} }
} while (readIfMore()); } while (readIfMore(false));
} }
command.addRow(values.toArray(new Expression[0])); command.addRow(values.toArray(new Expression[0]));
} while (readIf(",")); } while (readIf(","));
...@@ -1281,7 +1286,7 @@ public class Parser { ...@@ -1281,7 +1286,7 @@ public class Parser {
} else { } else {
values.add(readExpression()); values.add(readExpression());
} }
} while (readIfMore()); } while (readIfMore(false));
} }
command.addRow(values.toArray(new Expression[0])); command.addRow(values.toArray(new Expression[0]));
// the following condition will allow (..),; and (..); // the following condition will allow (..),; and (..);
...@@ -1340,7 +1345,7 @@ public class Parser { ...@@ -1340,7 +1345,7 @@ public class Parser {
} else { } else {
values.add(readExpression()); values.add(readExpression());
} }
} while (readIfMore()); } while (readIfMore(false));
} }
command.addRow(values.toArray(new Expression[0])); command.addRow(values.toArray(new Expression[0]));
} while (readIf(",")); } while (readIf(","));
...@@ -1476,8 +1481,7 @@ public class Parser { ...@@ -1476,8 +1481,7 @@ public class Parser {
String indexName = readIdentifierWithSchema(); String indexName = readIdentifierWithSchema();
Index index = table.getIndex(indexName); Index index = table.getIndex(indexName);
indexNames.add(index.getName()); indexNames.add(index.getName());
} while (readIf(",")); } while (readIfMore(true));
read(")");
} }
return IndexHints.createUseIndexHints(indexNames); return IndexHints.createUseIndexHints(indexNames);
} }
...@@ -1503,8 +1507,7 @@ public class Parser { ...@@ -1503,8 +1507,7 @@ public class Parser {
ArrayList<String> derivedColumnNames = New.arrayList(); ArrayList<String> derivedColumnNames = New.arrayList();
do { do {
derivedColumnNames.add(readAliasIdentifier()); derivedColumnNames.add(readAliasIdentifier());
} while (readIf(",")); } while (readIfMore(true));
read(")");
return derivedColumnNames; return derivedColumnNames;
} }
return null; return null;
...@@ -2722,8 +2725,7 @@ public class Parser { ...@@ -2722,8 +2725,7 @@ public class Parser {
ArrayList<Expression> params = New.arrayList(); ArrayList<Expression> params = New.arrayList();
do { do {
params.add(readExpression()); params.add(readExpression());
} while (readIf(",")); } while (readIfMore(true));
read(")");
Expression filterCondition; Expression filterCondition;
if (readIf("FILTER")) { if (readIf("FILTER")) {
read("("); read("(");
...@@ -2894,8 +2896,7 @@ public class Parser { ...@@ -2894,8 +2896,7 @@ public class Parser {
read("="); read("=");
function.setParameter(i, readExpression()); function.setParameter(i, readExpression());
i++; i++;
} while (readIf(",")); } while (readIfMore(true));
read(")");
TableFunction tf = (TableFunction) function; TableFunction tf = (TableFunction) function;
tf.setColumns(columns); tf.setColumns(columns);
break; break;
...@@ -2915,8 +2916,7 @@ public class Parser { ...@@ -2915,8 +2916,7 @@ public class Parser {
int i = 0; int i = 0;
do { do {
function.setParameter(i++, readExpression()); function.setParameter(i++, readExpression());
} while (readIf(",")); } while (readIfMore(true));
read(")");
} }
} }
function.doneWithParameters(); function.doneWithParameters();
...@@ -4513,13 +4513,12 @@ public class Parser { ...@@ -4513,13 +4513,12 @@ public class Parser {
String enumerator0 = readString(); String enumerator0 = readString();
enumeratorList.add(enumerator0); enumeratorList.add(enumerator0);
original += "'" + enumerator0 + "'"; original += "'" + enumerator0 + "'";
while (readIf(",")) { while (readIfMore(true)) {
original += ','; original += ',';
String enumeratorN = readString(); String enumeratorN = readString();
original += "'" + enumeratorN + "'"; original += "'" + enumeratorN + "'";
enumeratorList.add(enumeratorN); enumeratorList.add(enumeratorN);
} }
read(")");
original += ')'; original += ')';
enumerators = enumeratorList.toArray(new String[0]); enumerators = enumeratorList.toArray(new String[0]);
} }
...@@ -4839,10 +4838,7 @@ public class Parser { ...@@ -4839,10 +4838,7 @@ public class Parser {
columns.set(i, column); columns.set(i, column);
row.add(expr); row.add(expr);
i++; i++;
} while (multiColumn && readIf(",")); } while (multiColumn && readIfMore(true));
if (multiColumn) {
read(")");
}
rows.add(row); rows.add(row);
} while (readIf(",")); } while (readIf(","));
int columnCount = columns.size(); int columnCount = columns.size();
...@@ -6346,8 +6342,7 @@ public class Parser { ...@@ -6346,8 +6342,7 @@ public class Parser {
command.setIfNotExists(false); command.setIfNotExists(false);
do { do {
parseTableColumnDefinition(command, schema, tableName); parseTableColumnDefinition(command, schema, tableName);
} while (readIf(",")); } while (readIfMore(true));
read(")");
} else { } else {
boolean ifNotExists = readIfNotExists(); boolean ifNotExists = readIfNotExists();
command.setIfNotExists(ifNotExists); command.setIfNotExists(ifNotExists);
...@@ -6598,7 +6593,7 @@ public class Parser { ...@@ -6598,7 +6593,7 @@ public class Parser {
if (!readIf(")")) { if (!readIf(")")) {
do { do {
parseTableColumnDefinition(command, schema, tableName); parseTableColumnDefinition(command, schema, tableName);
} while (readIfMore()); } while (readIfMore(false));
} }
} }
// Allows "COMMENT='comment'" in DDL statements (MySQL syntax) // Allows "COMMENT='comment'" in DDL statements (MySQL syntax)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论