All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.bigdata.bop.join.JoinAnnotations Maven / Gradle / Ivy

/**

Copyright (C) SYSTAP, LLC DBA Blazegraph 2006-2016.  All rights reserved.

Contact:
     SYSTAP, LLC DBA Blazegraph
     2501 Calvert ST NW #106
     Washington, DC 20008
     [email protected]

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/
/*
 * Created on Mar 31, 2011
 */

package com.bigdata.bop.join;

import com.bigdata.bop.IBindingSet;
import com.bigdata.bop.IConstraint;
import com.bigdata.bop.IPredicate;
import com.bigdata.bop.IVariable;
import com.bigdata.bop.joinGraph.rto.JoinGraph;

/**
 * Common annotations for various join operators.
 * 
 * @author Bryan Thompson
 * @version $Id$
 */
public interface JoinAnnotations extends com.bigdata.bop.PipelineOp.Annotations {

//    /**
//     * Boolean annotation is true iff the solutions will be
//     * re-integrated into the query plan using an OPTIONAL join.
//     * 

// * Note: Constraints on the join ARE NOT applied to the "optional" path. // * // * Note: The code is a bit incoherent concerning where this annotation is // * place. For the AST, it needs to be on the node which models the join. // * E.g., StatementPatternNode, JoinGroupNode, etc. For a Predicate, it is on // * the Predicate. For a PipelineOp, it is found on the Predicate if the JOIN // * is against an access path and otherwise it is (I believe) found on the // * PipelineOp itself. It would probably be best if the annotation was put // * onto the physical join operator (PipelineOp) when that operator is // * generated by the query planner. Thus the annotation would be propagated // * from the AST to the physical query plan. (I believe the reason why this // * annotation is on the Predicate is two fold. First, we originally did not // * have the AST abstraction, and it still does not exist for IRules. Second, // * the idea was that the RTO would operate in terms of a Predicate[], and // * hence the notion of "optional" needed to be on the Predicate, but it now // * looks like it will operate in terms of the AST model instead where it is // * visible to the RTO.) // */ // String OPTIONAL = JoinAnnotations.class.getName() + ".optional"; // // boolean DEFAULT_OPTIONAL = false; /** * The {@link JoinTypeEnum} for join (required). *

* Note: Not all join operators support all join types. For example, * {@link PipelineJoin} supports {@link JoinTypeEnum#Normal} and * {@link JoinTypeEnum#Optional}. The hash join operators tend to support * more join types, but some hash join operators only support * {@link JoinTypeEnum#Normal} joins because the solutions from the query * engine are flowing through the join rather than being at a fixed point in * a hash index which is then fed into the join. When the query engine * solutions are folowing through the join it is not possible to do any of * the non-required joins (Optional, Exists, NotExists). * * @see JoinTypeEnum */ String JOIN_TYPE = JoinAnnotations.class.getName() + ".joinType"; /** * An optional {@link IVariable}[] identifying the variables to be retained * in the {@link IBindingSet}s written out by the operator. All variables * are retained unless this annotation is specified. */ String SELECT = JoinAnnotations.class.getName() + ".select"; /** * An {@link IConstraint}[] which places restrictions on the legal patterns * in the variable bindings (optional). *

* Note: Constraints are applied to input solutions which join. If an input * solution does not join and the {@link IPredicate} is * {@link IPredicate.Annotations#OPTIONAL} then the {@link #CONSTRAINTS} are * NOT tested and the original solution is output. */ String CONSTRAINTS = JoinAnnotations.class.getName() + ".constraints"; /** * The maximum #of solutions which will be generated by the join (default * {@value #DEFAULT_LIMIT}). *

* Note: This annotation is used by the RTO to sample evaluation plans. Not * all joins support this annotation and the RTO is responsible for using * only those joins which DO support this annotation when sampling cutoff * evaluation of operator path segments. * * @see JoinGraph */ String LIMIT = JoinAnnotations.class.getName() + ".limit"; long DEFAULT_LIMIT = Long.MAX_VALUE; }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy