Beispiel #1
0
 public SqlNode visit(SqlNodeList list) {
   SqlNodeList copy = new SqlNodeList(list.getParserPosition());
   for (SqlNode node : list) {
     copy.add(node.accept(this));
   }
   return copy;
 }
Beispiel #2
0
  /**
   * Derives an alias for a node, and invents a mangled identifier if it cannot.
   *
   * <p>Examples:
   *
   * <ul>
   *   <li>Alias: "1 + 2 as foo" yields "foo"
   *   <li>Identifier: "foo.bar.baz" yields "baz"
   *   <li>Anything else yields "expr$<i>ordinal</i>"
   * </ul>
   *
   * @return An alias, if one can be derived; or a synthetic alias "expr$<i>ordinal</i>" if ordinal
   *     >= 0; otherwise null
   */
  public static String getAlias(SqlNode node, int ordinal) {
    switch (node.getKind()) {
      case AS:
        // E.g. "1 + 2 as foo" --> "foo"
        return ((SqlCall) node).getOperands()[1].toString();

      case OVER:
        // E.g. "bids over w" --> "bids"
        return getAlias(((SqlCall) node).getOperands()[0], ordinal);

      case IDENTIFIER:
        // E.g. "foo.bar" --> "bar"
        return Util.last(((SqlIdentifier) node).names);

      default:
        if (ordinal < 0) {
          return null;
        } else {
          return SqlUtil.deriveAliasFromOrdinal(ordinal);
        }
    }
  }
Beispiel #3
0
 /** Converts an expression "expr" into "expr AS alias". */
 public static SqlNode addAlias(SqlNode expr, String alias) {
   final SqlParserPos pos = expr.getParserPosition();
   final SqlIdentifier id = new SqlIdentifier(alias, pos);
   return SqlStdOperatorTable.AS.createCall(pos, expr, id);
 }