예제 #1
0
 public SqlNode visit(SqlNodeList list) {
   SqlNodeList copy = new SqlNodeList(list.getParserPosition());
   for (SqlNode node : list) {
     copy.add(node.accept(this));
   }
   return copy;
 }
 public static SqlNode[] cloneArray(SqlNode[] nodes) {
   SqlNode[] clones = (SqlNode[]) nodes.clone();
   for (int i = 0; i < clones.length; i++) {
     SqlNode node = clones[i];
     if (node != null) {
       clones[i] = (SqlNode) node.clone();
     }
   }
   return clones;
 }
예제 #3
0
 public SqlNode findAgg(List<SqlNode> nodes) {
   try {
     for (SqlNode node : nodes) {
       node.accept(this);
     }
     return null;
   } catch (Util.FoundOne e) {
     Util.swallow(e, null);
     return (SqlNode) e.getNode();
   }
 }
 boolean containsAnd(SqlNode node) {
   try {
     node.accept(this);
     return false;
   } catch (AndFinder.Found e) {
     return true;
   }
 }
 /**
  * Returns whether two nodes are equal (using {@link #equalsDeep(SqlNode,boolean)}) or are both
  * null.
  *
  * @param node1 First expression
  * @param node2 Second expression
  * @param fail Whether to throw {@link AssertionError} if expressions are not equal
  */
 public static boolean equalDeep(SqlNode node1, SqlNode node2, boolean fail) {
   if (node1 == null) {
     return node2 == null;
   } else if (node2 == null) {
     return false;
   } else {
     return node1.equalsDeep(node2, fail);
   }
 }
예제 #6
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);
        }
    }
  }
예제 #7
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);
 }