You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2020/10/07 13:22:59 UTC

[groovy] branch GROOVY-8258 updated: GROOVY-8258: support dynamic column name

This is an automated email from the ASF dual-hosted git repository.

sunlan pushed a commit to branch GROOVY-8258
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/GROOVY-8258 by this push:
     new c76e2da  GROOVY-8258: support dynamic column name
c76e2da is described below

commit c76e2da603223dec22a613f3ea6bdb433b03cf5e
Author: Daniel Sun <su...@apache.org>
AuthorDate: Wed Oct 7 21:22:31 2020 +0800

    GROOVY-8258: support dynamic column name
---
 .../linq/provider/collection/GinqAstWalker.groovy  | 10 +++++++
 .../groovy/org/apache/groovy/linq/GinqTest.groovy  | 34 ++++++++++++++++++++++
 2 files changed, 44 insertions(+)

diff --git a/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/provider/collection/GinqAstWalker.groovy b/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/provider/collection/GinqAstWalker.groovy
index bd593dd..433c2e8 100644
--- a/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/provider/collection/GinqAstWalker.groovy
+++ b/subprojects/groovy-linq/src/main/groovy/org/apache/groovy/linq/provider/collection/GinqAstWalker.groovy
@@ -40,8 +40,10 @@ import org.codehaus.groovy.ast.expr.ClassExpression
 import org.codehaus.groovy.ast.expr.ConstantExpression
 import org.codehaus.groovy.ast.expr.Expression
 import org.codehaus.groovy.ast.expr.ExpressionTransformer
+import org.codehaus.groovy.ast.expr.GStringExpression
 import org.codehaus.groovy.ast.expr.ListExpression
 import org.codehaus.groovy.ast.expr.MethodCallExpression
+import org.codehaus.groovy.ast.expr.PropertyExpression
 import org.codehaus.groovy.ast.expr.TupleExpression
 import org.codehaus.groovy.ast.expr.VariableExpression
 import org.codehaus.groovy.control.SourceUnit
@@ -218,6 +220,14 @@ class GinqAstWalker implements GinqVisitor<Object>, SyntaxErrorReportable {
                 if (e instanceof CastExpression) {
                     elementExpression = e.expression
                     elementName = e.type.text
+                } else if (e instanceof PropertyExpression) {
+                    if (e.property instanceof ConstantExpression) {
+                        elementExpression = e
+                        elementName = e.property.text
+                    } else if (e.property instanceof GStringExpression) {
+                        elementExpression = e
+                        elementName = e.property
+                    }
                 } else {
                     elementExpression = e
                     elementName = e.text
diff --git a/subprojects/groovy-linq/src/test/groovy/org/apache/groovy/linq/GinqTest.groovy b/subprojects/groovy-linq/src/test/groovy/org/apache/groovy/linq/GinqTest.groovy
index edda315..8bf70dc 100644
--- a/subprojects/groovy-linq/src/test/groovy/org/apache/groovy/linq/GinqTest.groovy
+++ b/subprojects/groovy-linq/src/test/groovy/org/apache/groovy/linq/GinqTest.groovy
@@ -574,4 +574,38 @@ class GinqTest {
             }.toList()
         '''
     }
+
+    @Test
+    void "testGinq - nested from - 11"() {
+        assertScript '''
+            assert [[1, 2], [2, 3]] == GINQ {
+                from v in (
+                    from n in (
+                        from m in [1, 2, 3]
+                        select m, (m + 1) as v2
+                    )
+                    where n.v2 < 4
+                    select n.m, n.v2   // its column names are: m, v2
+                )
+                select v.m, v.v2
+            }.toList()
+        '''
+    }
+
+    @Test
+    void "testGinq - nested from - 12"() {
+        assertScript '''
+            assert [[1, 2], [2, 3]] == GINQ {
+                from v in (
+                    from n in (
+                        from m in [1, 2, 3]
+                        select m, (m + 1) as v2
+                    )
+                    where n.v2 < 4
+                    select n.m, n.v2
+                )
+                select v."${'m'}", v.v2   // dynamic column name
+            }.toList()
+        '''
+    }
 }