in src/main/java/com/google/cloud/spanner/pgadapter/statements/SimpleParser.java [550:580]
String parseExpressionUntilKeyword(
ImmutableList<String> keywords,
boolean sameParensLevelAsStart,
boolean stopAtEndOfExpression,
boolean stopAtComma) {
skipWhitespaces();
int start = pos;
boolean valid;
int parens = 0;
while ((valid = skipCommentsAndLiterals()) && pos < sql.length()) {
if (sql.charAt(pos) == '(') {
parens++;
} else if (sql.charAt(pos) == ')') {
parens--;
if (stopAtEndOfExpression && parens < 0) {
break;
}
} else if (stopAtEndOfExpression && parens == 0 && stopAtComma && sql.charAt(pos) == ',') {
break;
}
if ((!sameParensLevelAsStart || parens == 0)
&& keywords.stream().anyMatch(this::peekKeyword)) {
break;
}
pos++;
}
if (pos == start || !valid || parens > 0) {
return null;
}
return sql.substring(start, pos).trim();
}