Review.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/4c960071 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/4c960071 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/4c960071 Branch: refs/heads/ignite-3716 Commit: 4c960071b25fb2846e272923175740cb523729ab Parents: 59a734a Author: vozerov-gridgain <[email protected]> Authored: Mon Aug 22 18:58:53 2016 +0300 Committer: vozerov-gridgain <[email protected]> Committed: Mon Aug 22 18:58:53 2016 +0300 ---------------------------------------------------------------------- .../odbc/escape/OdbcEscapeSequenceParser.java | 65 ++++++++++---------- 1 file changed, 34 insertions(+), 31 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/4c960071/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/escape/OdbcEscapeSequenceParser.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/escape/OdbcEscapeSequenceParser.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/escape/OdbcEscapeSequenceParser.java index cfaa7c0..911aede 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/escape/OdbcEscapeSequenceParser.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/escape/OdbcEscapeSequenceParser.java @@ -15,41 +15,15 @@ public class OdbcEscapeSequenceParser { * @param sql - sql query text * @return - processed sql query text */ + // TODO: Set static. public String parse(String sql) { - T2<Integer, String> val = parseInternal(sql, 0, false); + // TODO: The whole string could be escape sequence. Need to check it here, not simply pass false. + T2<Integer, String> val = parse0(sql, 0, false); return val.get2(); } /** - * Parse escape sequence using appropriate parser. - * Supports: - * - Scalar function escape sequence. Example: "{fn func(arg1, arg2)}" - * - * @param sql - sql query text - * @param startPosition - parser start position - * @return pair of end of processed sequence position and parse result - */ - private T2<Integer, String> parseEscapeSqeuence(String sql, int startPosition) { - assert sql.charAt(startPosition) == '{'; - - int pos = sql.indexOf(' ', startPosition + 1); - - if (pos == -1) - throw new IllegalStateException("Escape sequence parsing error at (" + startPosition + "): " + sql); - - String esType = sql.substring(startPosition + 1, pos); - - switch (esType) { - case "fn": - return parseInternal(sql, pos + 1, true); - - default: - throw new IllegalStateException("Unsupported escape sequence found at (" + startPosition + "): " + sql); - } - } - - /** * Process ODBC escape sequences in sql query. * * @param sql - sql query text @@ -57,7 +31,8 @@ public class OdbcEscapeSequenceParser { * @param insideEscapeSeq - inside escape sequence flag * @return pair of end of processed sequence position and parse result */ - @NotNull private T2<Integer, String> parseInternal(String sql, int startPosition, boolean insideEscapeSeq) { + // TODO: Do not use T2, create separate class instead. + @NotNull private T2<Integer, String> parse0(String sql, int startPosition, boolean insideEscapeSeq) { StringBuffer sb = null; int off = startPosition; @@ -68,6 +43,7 @@ public class OdbcEscapeSequenceParser { for (int i = startPosition; i < sql.length(); i++) { char ch = sql.charAt(i); + // TODO: This should be implemented as separate parsers. if ((ch == '\'' || ch == '"') && (i == 0 || sql.charAt(i - 1) != '\\')) { if (quoted == 0) quoted = ch; @@ -88,7 +64,7 @@ public class OdbcEscapeSequenceParser { } // Inner escape sequence starts else if (ch == '{') { - T2<Integer, String> res = parseEscapeSqeuence(sql, i); + T2<Integer, String> res = processEscapeSequence(sql, i); if (sb == null) sb = new StringBuffer(); @@ -123,4 +99,31 @@ public class OdbcEscapeSequenceParser { return new T2<>(seqEndPos, sb.toString()); } + /** + * Parse escape sequence using appropriate parser. + * Supports: + * - Scalar function escape sequence. Example: "{fn func(arg1, arg2)}" + * + * @param sql - sql query text + * @param startPosition - parser start position + * @return pair of end of processed sequence position and parse result + */ + private T2<Integer, String> processEscapeSequence(String sql, int startPosition) { + assert sql.charAt(startPosition) == '{'; + + int pos = sql.indexOf(' ', startPosition + 1); + + if (pos == -1) + throw new IllegalStateException("Escape sequence parsing error at (" + startPosition + "): " + sql); + + String esType = sql.substring(startPosition + 1, pos); + + switch (esType) { + case "fn": + return parse0(sql, pos + 1, true); + + default: + throw new IllegalStateException("Unsupported escape sequence found at (" + startPosition + "): " + sql); + } + } }
