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)));

Reply via email to