package org.reldb.rel.v0.storage.relvars;
import org.reldb.rel.v0.generator.Generator;
import org.reldb.rel.v0.values.TupleFilter;
import org.reldb.rel.v0.values.TupleIterator;
import org.reldb.rel.v0.values.ValueRelation;
import org.reldb.rel.v0.values.ValueTuple;
import org.reldb.rel.v0.vm.Context;
import org.reldb.rel.v0.vm.Operator;
public interface Relvar {
/** Obtain cardinality. */
abstract public long getCardinality(Generator generator);
/** Return true if tuple is found in this relvar's relation. */
abstract public boolean contains(Generator generator, ValueTuple tuple);
/** Assign a new relation to this relvar. */
abstract public void setValue(ValueRelation relation);
/** Return quantity of tuples inserted, i.e., 1 if insert succeeded. */
abstract public long insert(Generator generator, ValueTuple tuple);
/** Return quantity of tuples inserted. Silently ignore duplicates. */
abstract public long insert(Generator generator, ValueRelation relation);
/** Insert, rejecting duplicates. */
abstract public long insertNoDuplicates(Generator generator, ValueRelation relation);
/** Purge all tuples from this relvar. */
abstract public void purge();
/** Delete selected tuples. */
abstract public long delete(Context context, Operator whereTupleOperator);
/** Delete selected tuples. */
abstract public long delete(Generator generator, TupleFilter filter);
/** If there are tuplesToDelete not found in this Relvar, and errorIfNotIncluded is true, throw an error. */
abstract public long delete(Context context, ValueRelation tuplesToDelete, boolean errorIfNotIncluded);
/** Update all tuples using a given update operator. */
abstract public long update(Context context, Operator updateTupleOperator);
/** Update selected tuples using a given update operator. */
abstract public long update(Context context, Operator whereTupleOperator, Operator updateTupleOperator);
/** Obtain a tuple iterator. */
abstract public TupleIterator iterator(Generator generator);
}