/** * Licensed 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.tajo.algebra; import com.google.common.base.Objects; import com.google.common.base.Preconditions; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; import java.util.Arrays; import java.util.HashSet; import java.util.Set; public class RelationList extends Expr { @Expose @SerializedName("Relations") private Expr[] relations; public RelationList(Expr[] relations) { super(OpType.RelationList); checkRelations(relations); this.relations = relations; } private void checkRelations(Expr[] relations) { for (Expr rel : relations) { Preconditions.checkArgument( rel.getType() == OpType.Relation || rel.getType() == OpType.Join || rel.getType() == OpType.TablePrimaryTableSubQuery || rel.getType() == OpType.SimpleTableSubquery, "Only Relation, Join, or TablePrimarySubQuery can be given to RelationList, but this expr " + " is " + rel.getType()); } } public Expr[] getRelations() { return this.relations; } public int size() { return this.relations.length; } @Override public String toString() { return toJson(); } @Override public int hashCode() { return Objects.hashCode(relations); } @Override boolean equalsTo(Expr expr) { Set<Expr> thisSet = new HashSet<>(Arrays.asList(relations)); RelationList another = (RelationList) expr; Set<Expr> anotherSet = new HashSet<>(Arrays.asList(another.relations)); return thisSet.equals(anotherSet); } @Override public Object clone() throws CloneNotSupportedException { RelationList relationList = (RelationList) super.clone(); relationList.relations = new Expr[relations.length]; for (int i = 0; i < relations.length; i++) { relationList.relations[i] = (Expr) relations[i].clone(); } return relationList; } }