>From Shahrzad Shirazi <[email protected]>:

Shahrzad Shirazi has posted comments on this change by Shahrzad Shirazi. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20268?usp=email )

Change subject: [NO ISSUE][COMP] Adding UPDATE statement.
......................................................................


Patch Set 42:

(2 comments)

File 
asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/VariableCheckAndRewriteVisitor.java:

https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20268/comment/6cd1747d_e6ec523a?usp=email
 :
PS42, Line 19: org.apache.asterix.lang.sqlpp.rewrites.v
What we have now
ChangeExpression (UPDATE users SET ...)
  ↓ SqlppChangeSeqToSelectExprVisitor
  → Creates generated variable (U:gen:1)
  → Transforms to: SELECT ELEMENT data-transform(...) FROM ... AS U:gen:1
  ↓ VariableCheckAndRewriteVisitor
  → Resolves variables in the SELECT expression
  → Generated variable U:gen:1 is already in scope
What we have if we change things back:
ChangeExpression (UPDATE users SET ...)
  ↓ VariableCheckAndRewriteVisitor (FIRST)
  → Tries to resolve variables in ChangeExpression
  → Generated variables don't exist yet!
  → Variables that should reference generated vars fail to resolve
  ↓ SqlppChangeSeqToSelectExprVisitor
  → Creates generated variable (U:gen:1)
  → But VariableCheckAndRewriteVisitor already ran, so it won't process the new 
SELECT.


For a nested update:
Current flow:
1.SqlppChangeSeqToSelectExprVisitor recursively processes inner ChangeExpression
2.Creates U:gen:1 for inner UPDATE
3.Creates U:gen:2 for outer UPDATE
4.U:gen:1 is available as context variable for outer UPDATE
5.VariableCheckAndRewriteVisitor resolves all variables

If VariableCheckAndRewriteVisitor runs first:
1.Tries to resolve variables in nested ChangeExpression
2.U:gen:1 doesn't exist yet
3.Variables referencing U:gen:1 fail to resolve
Compilation errors


File 
asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecursiveRemovalEvaluator.java:

https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20268/comment/177f1c35_85613610?usp=email
 :
PS42, Line 78:         if (argRightTag != ATypeTag.OBJECT || argLeftTag != 
ATypeTag.OBJECT) {
             :             result.set(argPtrRight);
             :             return;
             :         }
The difference between this evaluator and the DataTransformEvaluator is that 
this is created for removing fields,
so it uses onlyIncludeLeftRecordFields=true which means it only processes 
fields that exist in the left (removal) record.
 Fields in the left record indicate which fields should be removed from the 
right (source) record.
In contrast, DataTransformEvaluator uses onlyIncludeLeftRecordFields=false to 
merge/update fields from both records. We can use the same evaluator for both 
and just send the flag?



--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20268?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings?usp=email

Gerrit-MessageType: comment
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: Ib2d531b7b172b75b9756c7cc9b15dc636641f827
Gerrit-Change-Number: 20268
Gerrit-PatchSet: 42
Gerrit-Owner: Shahrzad Shirazi <[email protected]>
Gerrit-Reviewer: Ali Alsuliman <[email protected]>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Jenkins <[email protected]>
Gerrit-Comment-Date: Fri, 14 Nov 2025 19:57:39 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No

Reply via email to