String parseExpressionUntilKeyword()

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