X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Fgenericrelation%2Fcombinators%2FUnion.java;fp=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Fgenericrelation%2Fcombinators%2FUnion.java;h=c3f3b12f4035b3462d62a8e6f6140b153c368183;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hp=5ff96a16dcad7f4f58ed777d3dc96f13eae55dff;hpb=24e2b34260f219f0d1644ca7a138894980e25b14;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/genericrelation/combinators/Union.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/genericrelation/combinators/Union.java index 5ff96a16d..c3f3b12f4 100644 --- a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/genericrelation/combinators/Union.java +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/genericrelation/combinators/Union.java @@ -1,88 +1,88 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 Association for Decentralized Information Management - * in Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.db.layer0.genericrelation.combinators; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import org.simantics.db.ReadGraph; -import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.adapter.GenericRelation; -import org.simantics.db.layer0.genericrelation.AbstractRelation; -import org.simantics.utils.datastructures.Pair; - -/** - * Takes the union of multiple relations. Does not remove duplicates. - */ -public class Union extends AbstractRelation { - - Collection relations; - - public Union(Collection relations) { - this.relations = relations; - } - - @Override - public boolean contains(ReadGraph g, Object[] tuple) throws DatabaseException { - for(GenericRelation relation : relations) - if(relation.contains(g, tuple)) - return true; - return false; - } - - @Override - public boolean isRealizable() { - for(GenericRelation relation : relations) - if(!relation.isRealizable()) - return false; - return true; - } - - @Override - public List realize(ReadGraph g) throws DatabaseException { - ArrayList> results = new ArrayList>(relations.size()); - for(GenericRelation relation : relations) - results.add(relation.realize(g)); - int size = 0; - for(List part : results) - size += part.size(); - ArrayList result = new ArrayList(size); - for(List part : results) - result.addAll(part); - return result; - } - - @Override - public GenericRelation selectByRelation(String bindingPattern, GenericRelation constraint) { - ArrayList semijoinRelations = new ArrayList(relations.size()); - for(GenericRelation relation : relations) - semijoinRelations.add(relation.selectByRelation(bindingPattern, constraint)); - return new Union(semijoinRelations); - } - - @Override - public GenericRelation select(String bindingPattern, Object[] constants) { - ArrayList selectedRelations = new ArrayList(relations.size()); - for(GenericRelation relation : relations) - selectedRelations.add(relation.select(bindingPattern, constants)); - return new Union(selectedRelations); - } - - @Override - public Pair[] getFields() { - for(GenericRelation relation : relations) - return relation.getFields(); - return null; - } - -} +/******************************************************************************* + * Copyright (c) 2007, 2010 Association for Decentralized Information Management + * in Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.db.layer0.genericrelation.combinators; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.simantics.db.ReadGraph; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.adapter.GenericRelation; +import org.simantics.db.layer0.genericrelation.AbstractRelation; +import org.simantics.utils.datastructures.Pair; + +/** + * Takes the union of multiple relations. Does not remove duplicates. + */ +public class Union extends AbstractRelation { + + Collection relations; + + public Union(Collection relations) { + this.relations = relations; + } + + @Override + public boolean contains(ReadGraph g, Object[] tuple) throws DatabaseException { + for(GenericRelation relation : relations) + if(relation.contains(g, tuple)) + return true; + return false; + } + + @Override + public boolean isRealizable() { + for(GenericRelation relation : relations) + if(!relation.isRealizable()) + return false; + return true; + } + + @Override + public List realize(ReadGraph g) throws DatabaseException { + ArrayList> results = new ArrayList>(relations.size()); + for(GenericRelation relation : relations) + results.add(relation.realize(g)); + int size = 0; + for(List part : results) + size += part.size(); + ArrayList result = new ArrayList(size); + for(List part : results) + result.addAll(part); + return result; + } + + @Override + public GenericRelation selectByRelation(String bindingPattern, GenericRelation constraint) { + ArrayList semijoinRelations = new ArrayList(relations.size()); + for(GenericRelation relation : relations) + semijoinRelations.add(relation.selectByRelation(bindingPattern, constraint)); + return new Union(semijoinRelations); + } + + @Override + public GenericRelation select(String bindingPattern, Object[] constants) { + ArrayList selectedRelations = new ArrayList(relations.size()); + for(GenericRelation relation : relations) + selectedRelations.add(relation.select(bindingPattern, constants)); + return new Union(selectedRelations); + } + + @Override + public Pair[] getFields() { + for(GenericRelation relation : relations) + return relation.getFields(); + return null; + } + +}