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 12:21:01 UTC

[groovy] branch GROOVY-8258 updated: GROOVY-8258: support renaming 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 1227e55  GROOVY-8258: support renaming column name
1227e55 is described below

commit 1227e559a1ec02e4fa38fa82f2976ba3402d6bf1
Author: Daniel Sun <su...@apache.org>
AuthorDate: Wed Oct 7 20:20:30 2020 +0800

    GROOVY-8258: support renaming column name
---
 .../linq/provider/collection/GinqAstWalker.groovy  | 23 +++++++++++++++++-----
 .../groovy/org/apache/groovy/linq/GinqTest.groovy  | 18 +++++++++++++++++
 2 files changed, 36 insertions(+), 5 deletions(-)

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 ff102fe..bd593dd 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
@@ -35,6 +35,7 @@ import org.apache.groovy.linq.dsl.expression.SimpleGinqExpression
 import org.apache.groovy.linq.dsl.expression.WhereExpression
 import org.codehaus.groovy.ast.ClassHelper
 import org.codehaus.groovy.ast.expr.ArgumentListExpression
+import org.codehaus.groovy.ast.expr.CastExpression
 import org.codehaus.groovy.ast.expr.ClassExpression
 import org.codehaus.groovy.ast.expr.ConstantExpression
 import org.codehaus.groovy.ast.expr.Expression
@@ -45,8 +46,6 @@ import org.codehaus.groovy.ast.expr.TupleExpression
 import org.codehaus.groovy.ast.expr.VariableExpression
 import org.codehaus.groovy.control.SourceUnit
 
-import java.util.stream.Collectors
-
 import static org.codehaus.groovy.ast.tools.GeneralUtils.args
 import static org.codehaus.groovy.ast.tools.GeneralUtils.callX
 import static org.codehaus.groovy.ast.tools.GeneralUtils.ctorX
@@ -211,9 +210,23 @@ class GinqAstWalker implements GinqVisitor<Object>, SyntaxErrorReportable {
         List<Expression> expressionList = ((TupleExpression) projectionExpr).getExpressions()
         Expression lambdaCode
         if (expressionList.size() > 1) {
-            List<Expression> nameExpressionList = expressionList.stream().map(e -> new ConstantExpression(e.text)).collect(Collectors.toList())
-            ListExpression nameListExpression = new ListExpression(nameExpressionList)
-            lambdaCode = ctorX(ClassHelper.make(NamedList.class), args(new ListExpression(expressionList), nameListExpression))
+            List<Expression> elementExpressionList = []
+            List<Expression> nameExpressionList = []
+            for (Expression e : expressionList) {
+                Expression elementExpression
+                String elementName
+                if (e instanceof CastExpression) {
+                    elementExpression = e.expression
+                    elementName = e.type.text
+                } else {
+                    elementExpression = e
+                    elementName = e.text
+                }
+                elementExpressionList << elementExpression
+                nameExpressionList << new ConstantExpression(elementName)
+            }
+
+            lambdaCode = ctorX(ClassHelper.make(NamedList.class), args(new ListExpression(elementExpressionList), new ListExpression(nameExpressionList)))
         } else {
             lambdaCode = expressionList.get(0)
         }
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 f394f25..124449b 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
@@ -503,4 +503,22 @@ class GinqTest {
         '''
     }
 
+    @Test
+    void "testGinq - nested from - 7"() {
+        assertScript '''
+            def nums1 = [1, 2, 3, 4, 5]
+            def nums2 = [1, 2, 3, 4, 5]
+            assert [[3, 3], [5, 5]] == GINQ {
+                from v in (
+                    from n1 in nums1
+                    innerJoin n2 in nums2
+                    on n1 == n2
+                    where n1 > 1 && n2 <= 5
+                    select n1 as vn1, n2 as vn2
+                )
+                where v.vn1 >= 3 && v.vn2 in [3, 5]
+                select v
+            }.toList()
+        '''
+    }
 }