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)
             }
         })
 

Reply via email to