@@ -471,25 +471,31 @@ func substituteVariableReferences(expression string, stack *InterpreterStack) (n
471471 token := scanResult .Tokens [i ]
472472 substring := expression [token .Start :token .End ]
473473 // varMap lowercases everything, so we'll lowercase our substring to enable case-insensitivity
474- if _ , ok := varMap [strings .ToLower (substring )]; ok {
475- // If there's a '.', then we'll assume this is accessing a record's field (`NEW.val1` for example)
476- for i + 2 < len (scanResult .Tokens ) && scanResult .Tokens [i + 1 ].Token == '.' {
477- nextFieldSubstring := expression [scanResult .Tokens [i + 2 ].Start :scanResult .Tokens [i + 2 ].End ]
478- substring += "." + nextFieldSubstring
479- i += 2
480- }
481- // Variables cannot have a '(' after their name as that would classify them as functions, so we have to
482- // explicitly check for that. This is because variables and functions can share names, for example:
483- // SELECT COUNT(*) INTO count FROM table_name;
484- if i + 1 >= len (scanResult .Tokens ) || scanResult .Tokens [i + 1 ].Token != '(' {
474+ isAfterDot := i > 0 && scanResult .Tokens [i - 1 ].Token == '.'
475+
476+ if ! isAfterDot {
477+ if _ , ok := varMap [strings .ToLower (substring )]; ok {
478+ // If there's a '.', then we'll assume this is accessing a record's field (`NEW.val1` for example)
479+ for i + 2 < len (scanResult .Tokens ) && scanResult .Tokens [i + 1 ].Token == '.' {
480+ nextFieldSubstring := expression [scanResult .Tokens [i + 2 ].Start :scanResult .Tokens [i + 2 ].End ]
481+ substring += "." + nextFieldSubstring
482+ i += 2
483+ }
484+ // Variables cannot have a '(' after their name as that would classify them as functions, so we have to
485+ // explicitly check for that. This is because variables and functions can share names, for example:
486+ // SELECT COUNT(*) INTO count FROM table_name;
487+ if i + 1 >= len (scanResult .Tokens ) || scanResult .Tokens [i + 1 ].Token != '(' {
488+ referencedVars = append (referencedVars , substring )
489+ newExpression += fmt .Sprintf ("$%d " , len (referencedVars ))
490+ } else {
491+ newExpression += substring + " "
492+ }
493+ } else if _ , ok := triggerSpecialVariables [substring ]; ok {
485494 referencedVars = append (referencedVars , substring )
486495 newExpression += fmt .Sprintf ("$%d " , len (referencedVars ))
487496 } else {
488497 newExpression += substring + " "
489498 }
490- } else if _ , ok := triggerSpecialVariables [substring ]; ok {
491- referencedVars = append (referencedVars , substring )
492- newExpression += fmt .Sprintf ("$%d " , len (referencedVars ))
493499 } else {
494500 newExpression += substring + " "
495501 }
0 commit comments