CAMEL-9461: sql-stored: add support for using new lines and whitespace
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/38c1f6f7 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/38c1f6f7 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/38c1f6f7 Branch: refs/heads/master Commit: 38c1f6f7f06163d3e58400a828ed532a5ab1d8d8 Parents: f1ff40a Author: Claus Ibsen <davscl...@apache.org> Authored: Fri Feb 19 13:35:45 2016 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Fri Feb 19 13:49:42 2016 +0100 ---------------------------------------------------------------------- .../stored/template/generated/SSPTParser.java | 20 +- .../template/generated/SSPTParserConstants.java | 22 +- .../generated/SSPTParserTokenManager.java | 210 +++++++++++++------ .../sql/stored/template/grammar/sspt.jj | 16 +- .../src/test/resources/sql/selectStored.sql | 8 +- 5 files changed, 182 insertions(+), 94 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/38c1f6f7/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParser.java ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParser.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParser.java index 066e5f2..da08c20 100644 --- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParser.java +++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParser.java @@ -15,13 +15,13 @@ public class SSPTParser implements SSPTParserConstants { Template template = new Template(); Object parameter = null; procedureName = jj_consume_token(IDENTIFIER); - jj_consume_token(1); + jj_consume_token(PROCEDURE_BEGIN); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 4: + case 2: case NUMBER: case IDENTIFIER: parameter = Parameter(); - template.addParameter(parameter); + template.addParameter(parameter); label_1: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { @@ -41,7 +41,7 @@ public class SSPTParser implements SSPTParserConstants { jj_la1[1] = jj_gen; ; } - jj_consume_token(2); + jj_consume_token(PROCEDURE_END); jj_consume_token(0); template.setProcedureName(procedureName.toString()); {if (true) return template;} @@ -56,7 +56,7 @@ public class SSPTParser implements SSPTParserConstants { param = InputParameter(); {if (true) return param;} break; - case 4: + case 2: param = OutParameter(); {if (true) return param;} break; @@ -73,7 +73,7 @@ public class SSPTParser implements SSPTParserConstants { String name; Token valueSrcToken; sqlTypeToken = ParameterSqlType(); - jj_consume_token(3); + jj_consume_token(1); valueSrcToken = InputParameterSrc(); int sqlType = ParseHelper.parseSqlType(sqlTypeToken); {if (true) return new InputParameter(createNextParameterName(),sqlType,valueSrcToken);} @@ -84,10 +84,10 @@ public class SSPTParser implements SSPTParserConstants { Token sqlTypeToken; String name; String outValueMapKey; - jj_consume_token(4); - jj_consume_token(3); + jj_consume_token(2); + jj_consume_token(1); sqlTypeToken = ParameterSqlType(); - jj_consume_token(3); + jj_consume_token(1); outValueMapKey = OutHeader(); {if (true) return new OutParameter(createNextParameterName(),ParseHelper.parseSqlType(sqlTypeToken),outValueMapKey);} throw new Error("Missing return statement in function"); @@ -152,7 +152,7 @@ public class SSPTParser implements SSPTParserConstants { jj_la1_init_0(); } private static void jj_la1_init_0() { - jj_la1_0 = new int[] {0x800,0x4030,0x4030,0x4020,0x3000,}; + jj_la1_0 = new int[] {0x200,0x400c,0x400c,0x4008,0x3000,}; } /** Constructor with InputStream. */ http://git-wip-us.apache.org/repos/asf/camel/blob/38c1f6f7/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParserConstants.java ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParserConstants.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParserConstants.java index dc48177..f0ba72c 100644 --- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParserConstants.java +++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParserConstants.java @@ -11,19 +11,23 @@ public interface SSPTParserConstants { /** End of File. */ int EOF = 0; /** RegularExpression Id. */ - int NUMBER = 5; + int NUMBER = 3; /** RegularExpression Id. */ - int DIGIT = 6; + int DIGIT = 4; /** RegularExpression Id. */ - int LETTER = 7; + int LETTER = 5; /** RegularExpression Id. */ - int SPECIAL = 8; + int SPECIAL = 6; /** RegularExpression Id. */ - int WHITESPACE = 9; + int WHITESPACE = 7; /** RegularExpression Id. */ - int COMMA = 10; + int COMMA = 8; /** RegularExpression Id. */ - int SEPARATOR = 11; + int SEPARATOR = 9; + /** RegularExpression Id. */ + int PROCEDURE_BEGIN = 10; + /** RegularExpression Id. */ + int PROCEDURE_END = 11; /** RegularExpression Id. */ int SIMPLE_EXP_TOKEN = 12; /** RegularExpression Id. */ @@ -37,8 +41,6 @@ public interface SSPTParserConstants { /** Literal token values. */ String[] tokenImage = { "<EOF>", - "\"(\"", - "\")\"", "\" \"", "\"OUT\"", "<NUMBER>", @@ -48,6 +50,8 @@ public interface SSPTParserConstants { "<WHITESPACE>", "\",\"", "<SEPARATOR>", + "<PROCEDURE_BEGIN>", + "<PROCEDURE_END>", "<SIMPLE_EXP_TOKEN>", "<PARAMETER_POS_TOKEN>", "<IDENTIFIER>", http://git-wip-us.apache.org/repos/asf/camel/blob/38c1f6f7/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParserTokenManager.java ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParserTokenManager.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParserTokenManager.java index 9d27a69..15a9347 100644 --- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParserTokenManager.java +++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParserTokenManager.java @@ -15,20 +15,20 @@ private final int jjStopStringLiteralDfa_0(int pos, long active0) switch (pos) { case 0: - if ((active0 & 0x10L) != 0L) + if ((active0 & 0x4L) != 0L) { jjmatchedKind = 14; - return 11; + return 14; } - if ((active0 & 0x8L) != 0L) - return 12; + if ((active0 & 0x2L) != 0L) + return 19; return -1; case 1: - if ((active0 & 0x10L) != 0L) + if ((active0 & 0x4L) != 0L) { jjmatchedKind = 14; jjmatchedPos = 1; - return 11; + return 14; } return -1; default : @@ -50,15 +50,11 @@ private int jjMoveStringLiteralDfa0_0() switch(curChar) { case 32: - return jjStartNfaWithStates_0(0, 3, 12); - case 40: - return jjStopAtPos(0, 1); - case 41: - return jjStopAtPos(0, 2); + return jjStartNfaWithStates_0(0, 1, 19); case 79: - return jjMoveStringLiteralDfa1_0(0x10L); + return jjMoveStringLiteralDfa1_0(0x4L); default : - return jjMoveNfa_0(7, 0); + return jjMoveNfa_0(10, 0); } } private int jjMoveStringLiteralDfa1_0(long active0) @@ -71,7 +67,7 @@ private int jjMoveStringLiteralDfa1_0(long active0) switch(curChar) { case 85: - return jjMoveStringLiteralDfa2_0(active0, 0x10L); + return jjMoveStringLiteralDfa2_0(active0, 0x4L); default : break; } @@ -89,8 +85,8 @@ private int jjMoveStringLiteralDfa2_0(long old0, long active0) switch(curChar) { case 84: - if ((active0 & 0x10L) != 0L) - return jjStartNfaWithStates_0(2, 4, 11); + if ((active0 & 0x4L) != 0L) + return jjStartNfaWithStates_0(2, 2, 14); break; default : break; @@ -108,7 +104,7 @@ private int jjStartNfaWithStates_0(int pos, int kind, int state) private int jjMoveNfa_0(int startState, int curPos) { int startsAt = 0; - jjnewStateCnt = 12; + jjnewStateCnt = 19; int i = 1; jjstateSet[0] = startState; int kind = 0x7fffffff; @@ -123,91 +119,164 @@ private int jjMoveNfa_0(int startState, int curPos) { switch(jjstateSet[--i]) { - case 7: + case 10: if ((0x3ff609c00000000L & l) != 0L) { if (kind > 14) kind = 14; - jjCheckNAdd(11); + jjCheckNAdd(14); + } + else if ((0x100002600L & l) != 0L) + { + if (kind > 7) + kind = 7; + jjCheckNAddStates(0, 5); } - else if ((0x100000600L & l) != 0L) - jjCheckNAddTwoStates(1, 2); else if (curChar == 58) - jjstateSet[jjnewStateCnt++] = 8; - else if (curChar == 44) + jjstateSet[jjnewStateCnt++] = 11; + else if (curChar == 41) { if (kind > 11) kind = 11; - jjCheckNAdd(3); + jjCheckNAdd(6); + } + else if (curChar == 40) + { + if (kind > 10) + kind = 10; + jjCheckNAdd(4); + } + else if (curChar == 44) + { + if (kind > 9) + kind = 9; + jjCheckNAdd(2); } if ((0x3ff000000000000L & l) != 0L) { - if (kind > 5) - kind = 5; + if (kind > 3) + kind = 3; jjCheckNAdd(0); } else if (curChar == 36) - jjstateSet[jjnewStateCnt++] = 4; + jjstateSet[jjnewStateCnt++] = 7; break; - case 12: - if ((0x100000600L & l) != 0L) - jjCheckNAddTwoStates(1, 2); - else if (curChar == 44) + case 19: + if ((0x100002600L & l) != 0L) + jjCheckNAddTwoStates(18, 5); + else if (curChar == 41) { if (kind > 11) kind = 11; - jjCheckNAdd(3); + jjCheckNAdd(6); + } + else if (curChar == 40) + { + if (kind > 10) + kind = 10; + jjCheckNAdd(4); + } + else if (curChar == 44) + { + if (kind > 9) + kind = 9; + jjCheckNAdd(2); } + if ((0x100002600L & l) != 0L) + jjCheckNAddTwoStates(17, 3); + if ((0x100002600L & l) != 0L) + jjCheckNAddTwoStates(16, 1); break; case 0: if ((0x3ff000000000000L & l) == 0L) break; - if (kind > 5) - kind = 5; + if (kind > 3) + kind = 3; jjCheckNAdd(0); break; case 1: - if ((0x100000600L & l) != 0L) - jjCheckNAddTwoStates(1, 2); + if (curChar != 44) + break; + kind = 9; + jjCheckNAdd(2); break; case 2: - if (curChar != 44) + if ((0x100002600L & l) == 0L) break; - kind = 11; - jjCheckNAdd(3); + if (kind > 9) + kind = 9; + jjCheckNAdd(2); break; case 3: - if ((0x100000600L & l) == 0L) + if (curChar != 40) + break; + kind = 10; + jjCheckNAdd(4); + break; + case 4: + if ((0x100002600L & l) == 0L) + break; + if (kind > 10) + kind = 10; + jjCheckNAdd(4); + break; + case 5: + if (curChar != 41) + break; + kind = 11; + jjCheckNAdd(6); + break; + case 6: + if ((0x100002600L & l) == 0L) break; if (kind > 11) kind = 11; - jjCheckNAdd(3); + jjCheckNAdd(6); break; - case 5: + case 8: if ((0x3ff609d00000000L & l) != 0L) - jjAddStates(0, 1); + jjAddStates(6, 7); break; - case 8: + case 11: if (curChar == 35) - jjCheckNAdd(9); + jjCheckNAdd(12); break; - case 9: + case 12: if ((0x3ff609c00000000L & l) == 0L) break; if (kind > 13) kind = 13; - jjCheckNAdd(9); + jjCheckNAdd(12); break; - case 10: + case 13: if (curChar == 58) - jjstateSet[jjnewStateCnt++] = 8; + jjstateSet[jjnewStateCnt++] = 11; break; - case 11: + case 14: if ((0x3ff609c00000000L & l) == 0L) break; if (kind > 14) kind = 14; - jjCheckNAdd(11); + jjCheckNAdd(14); + break; + case 15: + if ((0x100002600L & l) == 0L) + break; + if (kind > 7) + kind = 7; + jjCheckNAddStates(0, 5); + break; + case 16: + if ((0x100002600L & l) != 0L) + jjCheckNAddTwoStates(16, 1); + break; + case 17: + if ((0x100002600L & l) != 0L) + jjCheckNAddTwoStates(17, 3); + break; + case 18: + if ((0x100002600L & l) != 0L) + jjCheckNAddTwoStates(18, 5); break; default : break; } @@ -220,32 +289,32 @@ private int jjMoveNfa_0(int startState, int curPos) { switch(jjstateSet[--i]) { - case 7: - case 11: + case 10: + case 14: if ((0x2ffffffe87fffffeL & l) == 0L) break; if (kind > 14) kind = 14; - jjCheckNAdd(11); + jjCheckNAdd(14); break; - case 4: + case 7: if (curChar == 123) - jjCheckNAdd(5); + jjCheckNAdd(8); break; - case 5: + case 8: if ((0x2ffffffe87fffffeL & l) != 0L) - jjCheckNAddTwoStates(5, 6); + jjCheckNAddTwoStates(8, 9); break; - case 6: + case 9: if (curChar == 125 && kind > 12) kind = 12; break; - case 9: + case 12: if ((0x2ffffffe87fffffeL & l) == 0L) break; if (kind > 13) kind = 13; - jjstateSet[jjnewStateCnt++] = 9; + jjstateSet[jjnewStateCnt++] = 12; break; default : break; } @@ -270,19 +339,19 @@ private int jjMoveNfa_0(int startState, int curPos) kind = 0x7fffffff; } ++curPos; - if ((i = jjnewStateCnt) == (startsAt = 12 - (jjnewStateCnt = startsAt))) + if ((i = jjnewStateCnt) == (startsAt = 19 - (jjnewStateCnt = startsAt))) return curPos; try { curChar = input_stream.readChar(); } catch(java.io.IOException e) { return curPos; } } } static final int[] jjnextStates = { - 5, 6, + 16, 1, 17, 3, 18, 5, 8, 9, }; /** Token literal values. */ public static final String[] jjstrLiteralImages = { -"", "\50", "\51", "\40", "\117\125\124", null, null, null, null, null, null, +"", "\40", "\117\125\124", null, null, null, null, null, null, null, null, null, null, null, null, }; /** Lexer state names. */ @@ -290,8 +359,8 @@ public static final String[] lexStateNames = { "DEFAULT", }; protected SimpleCharStream input_stream; -private final int[] jjrounds = new int[12]; -private final int[] jjstateSet = new int[24]; +private final int[] jjrounds = new int[19]; +private final int[] jjstateSet = new int[38]; protected char curChar; /** Constructor. */ public SSPTParserTokenManager(SimpleCharStream stream){ @@ -318,7 +387,7 @@ private void ReInitRounds() { int i; jjround = 0x80000001; - for (i = 12; i-- > 0;) + for (i = 19; i-- > 0;) jjrounds[i] = 0x80000000; } @@ -442,4 +511,11 @@ private void jjCheckNAddTwoStates(int state1, int state2) jjCheckNAdd(state2); } +private void jjCheckNAddStates(int start, int end) +{ + do { + jjCheckNAdd(jjnextStates[start]); + } while (start++ != end); +} + } http://git-wip-us.apache.org/repos/asf/camel/blob/38c1f6f7/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/grammar/sspt.jj ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/grammar/sspt.jj b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/grammar/sspt.jj index da7af35..d078591 100644 --- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/grammar/sspt.jj +++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/grammar/sspt.jj @@ -45,9 +45,9 @@ public Template parse() : Object parameter = null; } { - (procedureName = <IDENTIFIER> "(" ( (parameter = Parameter() { template.addParameter(parameter);}) (<SEPARATOR> + (procedureName = <IDENTIFIER> <PROCEDURE_BEGIN> ( (parameter = Parameter() { template.addParameter(parameter);}) (<SEPARATOR> parameter - = Parameter(){template.addParameter(parameter);})*)? ")" <EOF>) + = Parameter(){template.addParameter(parameter);})*)? <PROCEDURE_END> <EOF>) { template.setProcedureName(procedureName.toString()); return template; @@ -133,7 +133,6 @@ TOKEN: { <NUMBER: (["0"-"9"])+> } - TOKEN: { <#DIGIT: (["0"-"9"])> } @@ -147,7 +146,7 @@ TOKEN: { } TOKEN: { - <#WHITESPACE: (" "|"\n"|"\t")> + <WHITESPACE: (" "|"\n"|"\r"|"\t")> } TOKEN: { @@ -158,6 +157,14 @@ TOKEN: { <SEPARATOR: ( ( <WHITESPACE> )* (<COMMA>) ( <WHITESPACE> )* )> } +TOKEN: { + <PROCEDURE_BEGIN: ( ( <WHITESPACE> )* "(" ( <WHITESPACE> )* )> +} + +TOKEN: { + <PROCEDURE_END: ( ( <WHITESPACE> )* ")" ( <WHITESPACE> )* )> +} + TOKEN : { <SIMPLE_EXP_TOKEN: "${"(<LETTER>|<DIGIT> | <SPECIAL> | " ")+ "}"> } @@ -166,7 +173,6 @@ TOKEN : { <PARAMETER_POS_TOKEN: ":#"(<LETTER>|<DIGIT>|<SPECIAL> )+> } - TOKEN : { <IDENTIFIER: ( <LETTER> | <DIGIT> | <SPECIAL> )+ > } http://git-wip-us.apache.org/repos/asf/camel/blob/38c1f6f7/components/camel-sql/src/test/resources/sql/selectStored.sql ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/test/resources/sql/selectStored.sql b/components/camel-sql/src/test/resources/sql/selectStored.sql index f881aa1..7430b7f 100644 --- a/components/camel-sql/src/test/resources/sql/selectStored.sql +++ b/components/camel-sql/src/test/resources/sql/selectStored.sql @@ -1,3 +1,5 @@ -SUBNUMBERS(INTEGER ${headers.num1}, - INTEGER ${headers.num2}, - OUT INTEGER resultofsub) \ No newline at end of file +SUBNUMBERS( + INTEGER ${headers.num1} , + INTEGER ${headers.num2} , + OUT INTEGER resultofsub +) \ No newline at end of file