/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.ignite.internal.processors.query.h2.sql; import java.util.List; /** * Base class for all SQL AST nodes. */ public abstract class GridSqlElement implements GridSqlAst { /** */ private final List<GridSqlAst> children; /** */ private GridSqlType resultType; /** * @param children Initial child list. */ protected GridSqlElement(List<GridSqlAst> children) { assert children != null; this.children = children; } /** * @return Optional expression result type (if this is an expression and result type is known). */ public GridSqlType resultType() { return resultType; } /** * @param type Optional expression result type (if this is an expression and result type is known). * @return {@code this}. */ public GridSqlElement resultType(GridSqlType type) { resultType = type; return this; } /** * @param expr Expr. * @return {@code this}. */ public GridSqlElement addChild(GridSqlAst expr) { if (expr == null) throw new NullPointerException(); children.add(expr); return this; } /** {@inheritDoc} */ @Override public <E extends GridSqlAst> E child() { return child(0); } /** {@inheritDoc} */ @SuppressWarnings("unchecked") @Override public <E extends GridSqlAst> E child(int idx) { return (E)children.get(idx); } /** {@inheritDoc} */ @Override public <E extends GridSqlAst> void child(int idx, E child) { if (child == null) throw new NullPointerException(); children.set(idx, child); } /** * @return Number of children. */ public int size() { return children.size(); } /** {@inheritDoc} */ @Override public String toString() { return getSQL(); } /** {@inheritDoc} */ @Override public int hashCode() { throw new IllegalStateException(); } /** {@inheritDoc} */ @Override public boolean equals(Object o) { return this == o || (!(o == null || getClass() != o.getClass()) && children.equals(((GridSqlElement)o).children)); } }