Repository: cayenne Updated Branches: refs/heads/master a620461a4 -> 831442cb6
Unable to parse comma-separated array Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/831442cb Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/831442cb Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/831442cb Branch: refs/heads/master Commit: 831442cb699da149a90d613f9026285a6596d07b Parents: a620461 Author: Nikita Timofeev <stari...@gmail.com> Authored: Tue Oct 23 16:51:27 2018 +0300 Committer: Nikita Timofeev <stari...@gmail.com> Committed: Tue Oct 23 16:51:27 2018 +0300 ---------------------------------------------------------------------- .../template/parser/SQLTemplateParser.java | 23 ++++++++++---------- .../template/parser/SQLTemplateParser.jjt | 2 +- .../template/parser/SQLTemplateParserTest.java | 9 ++++++++ 3 files changed, 22 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/831442cb/cayenne-server/src/main/java/org/apache/cayenne/template/parser/SQLTemplateParser.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/template/parser/SQLTemplateParser.java b/cayenne-server/src/main/java/org/apache/cayenne/template/parser/SQLTemplateParser.java index 46ebe43..c2c98e5 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/template/parser/SQLTemplateParser.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/template/parser/SQLTemplateParser.java @@ -573,20 +573,13 @@ public class SQLTemplateParser/*@bgen(jjtree)*/implements SQLTemplateParserTreeC jj_consume_token(-1); throw new ParseException(); } - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case COMMA: - jj_consume_token(COMMA); - break; - default: - jj_la1[14] = jj_gen; - ; - } label_5: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case DOLLAR: case TRUE: case FALSE: + case COMMA: case SINGLE_QUOTED_STRING: case DOUBLE_QUOTED_STRING: case INT_LITERAL: @@ -594,10 +587,18 @@ public class SQLTemplateParser/*@bgen(jjtree)*/implements SQLTemplateParserTreeC ; break; default: - jj_la1[15] = jj_gen; + jj_la1[14] = jj_gen; break label_5; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case COMMA: + jj_consume_token(COMMA); + break; + default: + jj_la1[15] = jj_gen; + ; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case TRUE: case FALSE: case SINGLE_QUOTED_STRING: @@ -659,10 +660,10 @@ public class SQLTemplateParser/*@bgen(jjtree)*/implements SQLTemplateParserTreeC jj_la1_init_1(); } private static void jj_la1_init_0() { - jj_la1_0 = new int[] {0x320,0x320,0x0,0x40,0x90006e00,0x2000,0x90004e00,0x90004e00,0x90000c00,0x20000,0x90006e00,0x2000,0x90004e00,0x90000e00,0x2000,0x90000e00,0x90000e00,0x90000e00,}; + jj_la1_0 = new int[] {0x320,0x320,0x0,0x40,0x90006e00,0x2000,0x90004e00,0x90004e00,0x90000c00,0x20000,0x90006e00,0x2000,0x90004e00,0x90000e00,0x90002e00,0x2000,0x90000e00,0x90000e00,}; } private static void jj_la1_init_1() { - jj_la1_1 = new int[] {0xc0,0xc0,0xc0,0x0,0x3,0x0,0x3,0x3,0x3,0x0,0x3,0x0,0x3,0x3,0x0,0x3,0x3,0x3,}; + jj_la1_1 = new int[] {0xc0,0xc0,0xc0,0x0,0x3,0x0,0x3,0x3,0x3,0x0,0x3,0x0,0x3,0x3,0x3,0x0,0x3,0x3,}; } /** Constructor with InputStream. */ http://git-wip-us.apache.org/repos/asf/cayenne/blob/831442cb/cayenne-server/src/main/jjtree/org/apache/cayenne/template/parser/SQLTemplateParser.jjt ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/jjtree/org/apache/cayenne/template/parser/SQLTemplateParser.jjt b/cayenne-server/src/main/jjtree/org/apache/cayenne/template/parser/SQLTemplateParser.jjt index 5788e06..49a465e 100644 --- a/cayenne-server/src/main/jjtree/org/apache/cayenne/template/parser/SQLTemplateParser.jjt +++ b/cayenne-server/src/main/jjtree/org/apache/cayenne/template/parser/SQLTemplateParser.jjt @@ -222,7 +222,7 @@ void array() #Array : {} <LSBRACKET> ( ( scalar() | variable() ) - ( (<COMMA>)? ( scalar() | variable() )* ) + ( (<COMMA>)? ( scalar() | variable() ) )* )? <RSBRACKET> } http://git-wip-us.apache.org/repos/asf/cayenne/blob/831442cb/cayenne-server/src/test/java/org/apache/cayenne/template/parser/SQLTemplateParserTest.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/template/parser/SQLTemplateParserTest.java b/cayenne-server/src/test/java/org/apache/cayenne/template/parser/SQLTemplateParserTest.java index 36735ad..415d5bf 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/template/parser/SQLTemplateParserTest.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/template/parser/SQLTemplateParserTest.java @@ -186,6 +186,15 @@ public class SQLTemplateParserTest { } @Test + public void testMethodCallArray2() throws Exception { + String tpl = "$a.arrayMethod(['1', '2', '3'])"; + Context context = contextFactory.createContext(Collections.singletonMap("a", new TestBean(5))); + + String sql = parseString(tpl, context); + assertEquals("array_3", sql); + } + + @Test public void testMethodCallInt() throws Exception { String tpl = "$a.intMethod(42)"; Context context = contextFactory.createContext(Collections.singletonMap("a", new TestBean(5)));