@@ -113,9 +113,17 @@ public <S> T visit(Function function, S context) {
113113 if (function .getParameters () != null ) {
114114 subExpressions .addAll (function .getParameters ());
115115 }
116+ if (function .getNamedParameters () != null ) {
117+ subExpressions .addAll (function .getNamedParameters ());
118+ }
116119 if (function .getChainedParameters () != null ) {
117120 subExpressions .addAll (function .getChainedParameters ());
118121 }
122+ // an attribute name is not a column reference, only an attribute expression is visited
123+ if (function .getAttribute () instanceof Expression
124+ && function .getAttribute () != function .getAttributeColumn ()) {
125+ subExpressions .add ((Expression ) function .getAttribute ());
126+ }
119127 if (function .getKeep () != null ) {
120128 subExpressions .add (function .getKeep ());
121129 }
@@ -284,7 +292,8 @@ public <S> T visit(IsUnknownExpression isUnknownExpression, S context) {
284292
285293 @ Override
286294 public <S > T visit (LikeExpression likeExpression , S context ) {
287- return visitBinaryExpression (likeExpression , context );
295+ return visitExpressions (likeExpression , context , likeExpression .getLeftExpression (),
296+ likeExpression .getRightExpression (), likeExpression .getEscape ());
288297 }
289298
290299 @ Override
@@ -319,7 +328,11 @@ public <S> T visit(ContainedBy containedBy, S context) {
319328
320329 @ Override
321330 public <S > T visit (Column column , S context ) {
322- return applyExpression (column , context );
331+ T result = applyExpression (column , context );
332+ if (column .getArrayConstructor () != null ) {
333+ column .getArrayConstructor ().accept (this , context );
334+ }
335+ return result ;
323336 }
324337
325338 @ Override
@@ -358,12 +371,14 @@ public <S> T visit(ExistsExpression existsExpression, S context) {
358371
359372 @ Override
360373 public <S > T visit (MemberOfExpression memberOfExpression , S context ) {
361- return memberOfExpression .getRightExpression ().accept (this , context );
374+ return visitExpressions (memberOfExpression , context ,
375+ memberOfExpression .getLeftExpression (), memberOfExpression .getRightExpression ());
362376 }
363377
364378 @ Override
365379 public <S > T visit (AnyComparisonExpression anyComparisonExpression , S context ) {
366- return applyExpression (anyComparisonExpression , context );
380+ return visitExpressions (anyComparisonExpression , context ,
381+ anyComparisonExpression .getSelect ());
367382 }
368383
369384 @ Override
@@ -535,7 +550,10 @@ protected <S> T visitBinaryExpression(BinaryExpression binaryExpression, S conte
535550
536551 @ Override
537552 public <S > T visit (JsonExpression jsonExpr , S context ) {
538- return jsonExpr .getExpression ().accept (this , context );
553+ ArrayList <Expression > subExpressions = new ArrayList <>();
554+ subExpressions .add (jsonExpr .getExpression ());
555+ subExpressions .addAll (jsonExpr .getIdents ());
556+ return visitExpressions (jsonExpr , context , subExpressions );
539557 }
540558
541559 @ Override
@@ -728,13 +746,28 @@ public <S> T visit(XMLSerializeExpr xmlSerializeExpr, S context) {
728746
729747 @ Override
730748 public <S > T visit (TimezoneExpression timezoneExpression , S context ) {
731- return timezoneExpression .getLeftExpression ().accept (this , context );
749+ ArrayList <Expression > subExpressions = new ArrayList <>();
750+ subExpressions .add (timezoneExpression .getLeftExpression ());
751+ subExpressions .addAll (timezoneExpression .getTimezoneExpressions ());
752+ return visitExpressions (timezoneExpression , context , subExpressions );
732753 }
733754
734755 @ Override
735756 public <S > T visit (JsonAggregateFunction jsonAggregateFunction , S context ) {
736- return visitExpressions (jsonAggregateFunction , context ,
737- jsonAggregateFunction .getExpression (), jsonAggregateFunction .getFilterExpression ());
757+ ArrayList <Expression > subExpressions = new ArrayList <>();
758+ subExpressions .add (jsonAggregateFunction .getExpression ());
759+ if (jsonAggregateFunction .getKey () instanceof Expression ) {
760+ subExpressions .add ((Expression ) jsonAggregateFunction .getKey ());
761+ }
762+ if (jsonAggregateFunction .getValue () instanceof Expression ) {
763+ subExpressions .add ((Expression ) jsonAggregateFunction .getValue ());
764+ }
765+ addOrderByExpressions (subExpressions ,
766+ jsonAggregateFunction .getExpressionOrderByElements ());
767+ subExpressions .add (jsonAggregateFunction .getFilterExpression ());
768+ subExpressions .addAll (jsonAggregateFunction .getPartitionExpressionList ());
769+ addOrderByExpressions (subExpressions , jsonAggregateFunction .getOrderByElements ());
770+ return visitExpressions (jsonAggregateFunction , context , subExpressions );
738771 }
739772
740773 @ Override
@@ -834,7 +867,8 @@ public <S> T visit(TranscodingFunction transcodingFunction, S context) {
834867
835868 @ Override
836869 public <S > T visit (TrimFunction trimFunction , S context ) {
837- return trimFunction .getExpression ().accept (this , context );
870+ return visitExpressions (trimFunction , context , trimFunction .getExpression (),
871+ trimFunction .getFromExpression ());
838872 }
839873
840874 @ Override
0 commit comments