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 6335819  GROOVY-8258: add more test cases
6335819 is described below

commit 6335819523306bc2222412ae3dfe75ab9359e32d
Author: Daniel Sun <[email protected]>
AuthorDate: Thu Oct 8 22:44:33 2020 +0800

    GROOVY-8258: add more test cases
---
 .../linq/provider/collection/GinqAstWalker.groovy  | 23 +++++++++++-----------
 .../groovy/org/apache/groovy/linq/GinqTest.groovy  | 13 ++++++++++++
 2 files changed, 24 insertions(+), 12 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 17556a7..0cfca3a 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
@@ -74,6 +74,7 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt
 @CompileStatic
 class GinqAstWalker implements GinqVisitor<Object>, SyntaxErrorReportable {
     private final SourceUnit sourceUnit
+    private GinqExpression currentGinqExpression
 
     GinqAstWalker(SourceUnit sourceUnit) {
         this.sourceUnit = sourceUnit
@@ -81,6 +82,7 @@ class GinqAstWalker implements GinqVisitor<Object>, 
SyntaxErrorReportable {
 
     @Override
     MethodCallExpression visitGinqExpression(GinqExpression ginqExpression) {
+        this.currentGinqExpression = ginqExpression
         FromExpression fromExpression = ginqExpression.getFromExpression()
         MethodCallExpression fromMethodCallExpression = 
this.visitFromExpression(fromExpression)
 
@@ -253,7 +255,10 @@ class GinqAstWalker implements GinqVisitor<Object>, 
SyntaxErrorReportable {
         List<Expression> argumentExpressionList = ((ArgumentListExpression) 
classifierExpr).getExpressions()
         ConstructorCallExpression namedListCtorCallExpression = 
constructNamedListCtorCallExpression(argumentExpressionList)
 
-        return callXWithLambda(groupMethodCallReceiver, "groupBy2", 
dataSourceExpression, namedListCtorCallExpression)
+        MethodCallExpression groupMethodCallExpression = 
callXWithLambda(groupMethodCallReceiver, "groupBy2", dataSourceExpression, 
namedListCtorCallExpression)
+
+        this.currentGinqExpression.putNodeMetaData(__GROUP_BY, true)
+        return groupMethodCallExpression
     }
 
     @Override
@@ -393,21 +398,14 @@ class GinqAstWalker implements GinqVisitor<Object>, 
SyntaxErrorReportable {
         return expression.accept(this)
     }
 
-    private static MethodCallExpression callXWithLambda(Expression receiver, 
String methodName, DataSourceExpression dataSourceExpression, Expression 
lambdaCode) {
-        LambdaExpression lambdaExpression = 
constructLambdaExpression(dataSourceExpression, lambdaCode, receiver)
+    private MethodCallExpression callXWithLambda(Expression receiver, String 
methodName, DataSourceExpression dataSourceExpression, Expression lambdaCode) {
+        LambdaExpression lambdaExpression = 
constructLambdaExpression(dataSourceExpression, lambdaCode)
 
         callXWithLambda(receiver, methodName, lambdaExpression)
     }
 
-    private static LambdaExpression 
constructLambdaExpression(DataSourceExpression dataSourceExpression, Expression 
lambdaCode) {
-        constructLambdaExpression(dataSourceExpression, lambdaCode, null)
-    }
-
-    private static LambdaExpression 
constructLambdaExpression(DataSourceExpression dataSourceExpression, Expression 
lambdaCode, Expression receiver) {
-        boolean isGroup = false
-        if (receiver instanceof MethodCallExpression && 
receiver.methodAsString.startsWith('groupBy')) {
-            isGroup = true
-        }
+    private LambdaExpression constructLambdaExpression(DataSourceExpression 
dataSourceExpression, Expression lambdaCode) {
+        boolean isGroup = currentGinqExpression.getNodeMetaData(__GROUP_BY) ?: 
false
 
         String lambdaParamName
         if (dataSourceExpression instanceof JoinExpression || isGroup) {
@@ -455,4 +453,5 @@ class GinqAstWalker implements GinqVisitor<Object>, 
SyntaxErrorReportable {
     private static final String __DATA_SOURCE_EXPRESSION = 
"__dataSourceExpression"
     private static final String __METHOD_CALL_RECEIVER = "__methodCallReceiver"
     private static final String __T = "__t"
+    private static final String __GROUP_BY = "__GROUP_BY"
 }
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 4fd36bc..18708d0 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
@@ -1261,6 +1261,19 @@ class GinqTest {
         '''
     }
 
+    @Test
+    void "testGinq - from groupBy select - 3"() {
+        assertScript '''
+            assert [[6, 3], [1, 2]] == GINQ {
+                from n in [1, 1, 3, 3, 6, 6, 6]
+                where n != 3
+                groupby n
+                orderby n in desc
+                select n, count()
+            }.toList()
+        '''
+    }
+
     @CompileDynamic
     @Test
     void "testGinq - query json - 1"() {

Reply via email to