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"() {