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()
+ '''
+ }
}