This is an automated email from the ASF dual-hosted git repository.
sunlan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new 784e40e Tweak window validation
784e40e is described below
commit 784e40eab20140b9e2db03b33f3eb4e535cd03fc
Author: Daniel Sun <[email protected]>
AuthorDate: Fri Jan 1 10:32:15 2021 +0800
Tweak window validation
---
.../ginq/provider/collection/GinqAstWalker.groovy | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git
a/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/GinqAstWalker.groovy
b/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/GinqAstWalker.groovy
index 635d91d..8f71520 100644
---
a/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/GinqAstWalker.groovy
+++
b/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/GinqAstWalker.groovy
@@ -218,13 +218,14 @@ class GinqAstWalker implements
GinqAstVisitor<Expression>, SyntaxErrorReportable
selectExpression.projectionExpr.visit(new GinqAstBaseVisitor() {
@Override
void visitMethodCallExpression(MethodCallExpression call) {
- if (call.methodAsString == 'over') {
+ if (isOverMethodCall(call)) {
useWindowFunction = true
return
}
super.visitMethodCallExpression(call)
}
+
})
return useWindowFunction
}
@@ -248,6 +249,16 @@ class GinqAstWalker implements GinqAstVisitor<Expression>,
SyntaxErrorReportable
return false
}
+ private static boolean isOverMethodCall(Expression expression) {
+ if (expression instanceof MethodCallExpression) {
+ return expression.methodAsString == 'over'
+ && expression.objectExpression instanceof
MethodCallExpression
+ && ((ArgumentListExpression)
expression.arguments).getExpressions().size() < 2
+ }
+
+ return false
+ }
+
private void addDummyGroupExpressionIfNecessary() {
if (currentGinqExpression.groupExpression) {
return
@@ -262,7 +273,7 @@ class GinqAstWalker implements GinqAstVisitor<Expression>,
SyntaxErrorReportable
hasAggFunctionInSelect = true
return
}
- if ('over' == call.methodAsString) {
+ if (isOverMethodCall(call)) {
return
}
@@ -652,7 +663,7 @@ class GinqAstWalker implements GinqAstVisitor<Expression>,
SyntaxErrorReportable
@Override
void visitMethodCallExpression(MethodCallExpression call) {
- if ('over' == call.methodAsString) {
+ if (isOverMethodCall(call)) {
hasOverMethodCallExpression = true
return
}
@@ -687,7 +698,7 @@ class GinqAstWalker implements GinqAstVisitor<Expression>,
SyntaxErrorReportable
}
if (expression instanceof MethodCallExpression) {
- if ('over' == expression.methodAsString) {
+ if (isOverMethodCall(expression)) {
if (expression.objectExpression instanceof
MethodCallExpression) {
VariableExpression wqVar =
varX(getWindowQueryableName())
@@ -833,6 +844,7 @@ class GinqAstWalker implements GinqAstVisitor<Expression>,
SyntaxErrorReportable
@Override
void visitMethodCallExpression(MethodCallExpression call) {
ignoredMethodCallExpressionList.remove(call)
+ super.visitMethodCallExpression(call)
}
})