Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 9CF95200B79 for ; Tue, 23 Aug 2016 11:39:12 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 9BEB2160AAD; Tue, 23 Aug 2016 09:39:12 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id EA123160AC5 for ; Tue, 23 Aug 2016 11:39:11 +0200 (CEST) Received: (qmail 59432 invoked by uid 500); 23 Aug 2016 09:39:11 -0000 Mailing-List: contact commits-help@ignite.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ignite.apache.org Delivered-To: mailing list commits@ignite.apache.org Received: (qmail 59333 invoked by uid 99); 23 Aug 2016 09:39:11 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 23 Aug 2016 09:39:11 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id D94B6E35E8; Tue, 23 Aug 2016 09:39:10 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: vozerov@apache.org To: commits@ignite.apache.org Date: Tue, 23 Aug 2016 09:39:16 -0000 Message-Id: In-Reply-To: <31e9cbd6c2d343f391a61ad786778e5a@git.apache.org> References: <31e9cbd6c2d343f391a61ad786778e5a@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [07/12] ignite git commit: Review. archived-at: Tue, 23 Aug 2016 09:39:12 -0000 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-1 Commit: 4c960071b25fb2846e272923175740cb523729ab Parents: 59a734a Author: vozerov-gridgain Authored: Mon Aug 22 18:58:53 2016 +0300 Committer: vozerov-gridgain 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 val = parseInternal(sql, 0, false); + // TODO: The whole string could be escape sequence. Need to check it here, not simply pass false. + T2 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 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 parseInternal(String sql, int startPosition, boolean insideEscapeSeq) { + // TODO: Do not use T2, create separate class instead. + @NotNull private T2 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 res = parseEscapeSqeuence(sql, i); + T2 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 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); + } + } }