Beispiel #1
0
def load_nlj(saved_plan: SavedIndexJoinIterator,
             dataset: Dataset) -> PreemptableIterator:
    """Load a IndexJoinIterator from a protobuf serialization.
    
    Args:
      * saved_plan: Saved query execution plan.
      * dataset: RDF dataset used to execute the plan.
    
    Returns:
      The pipeline of iterator used to continue query execution.
    """
    currentBinding = None
    sourceField = saved_plan.WhichOneof('source')
    source = load(getattr(saved_plan, sourceField), dataset)
    innerTriple = protoTriple_to_dict(saved_plan.inner)
    if saved_plan.timestamp is not None:
        as_of = datetime.fromisoformat(saved_plan.timestamp)
    else:
        as_of = None
    if len(saved_plan.muc) > 0:
        currentBinding = saved_plan.muc
    graph = dataset.get_graph(innerTriple['graph'])
    return IndexJoinIterator(source,
                             innerTriple,
                             graph,
                             currentBinding=currentBinding,
                             last_read=saved_plan.last_read,
                             as_of=as_of)
Beispiel #2
0
def load_nlj(saved_plan: SavedIndexJoinIterator, dataset: Dataset) -> PreemptableIterator:
    """Load a IndexJoinIterator from a protobuf serialization.

    Args:
      * saved_plan: Saved query execution plan.
      * dataset: RDF dataset used to execute the plan.

    Returns:
      The pipeline of iterator used to continue query execution.
    """
    try:
        currentBinding = None
        sourceField = saved_plan.WhichOneof('source')
        source = load(getattr(saved_plan, sourceField), dataset)
        innerTriple = protoTriple_to_dict(saved_plan.inner)
        if saved_plan.timestamp is not None:
            ### hmm, seems that  timestamp can be ''
            ### maybe possible with bind ??
            if saved_plan.timestamp=='':
                as_of = None
            else:
                as_of = datetime.fromisoformat(saved_plan.timestamp)
        else:
            as_of = None
        if len(saved_plan.muc) > 0:
            currentBinding = saved_plan.muc
        graph = dataset.get_graph(innerTriple['graph'])
        return IndexJoinIterator(source, innerTriple, graph, currentBinding=currentBinding, last_read=saved_plan.last_read, as_of=as_of)
    except:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        traceback.print_tb(exc_traceback, limit=10, file=sys.stdout)
        logging.error(f"load_nlj:source:{source}, inner:{innerTriple} cur:{currentBinding} last:{saved_plan.last_read}")
        logging.error(f"load_nlj:{sys.exc_info()[0]}")
def load_scan(saved_plan, dataset):
    """Load a ScanIterator from a protobuf serialization"""
    triple = saved_plan.triple
    s, p, o, g = (triple.subject, triple.predicate, triple.object,
                  triple.graph)
    iterator, card = dataset.get_graph(g).search(
        s, p, o, last_read=saved_plan.last_read)
    return ScanIterator(iterator, protoTriple_to_dict(triple),
                        saved_plan.cardinality)
def load_nlj(saved_plan, dataset):
    """Load a IndexJoinIterator from a protobuf serialization"""
    currentBinding = None
    sourceField = saved_plan.WhichOneof('source')
    source = load(getattr(saved_plan, sourceField), dataset)
    innerTriple = protoTriple_to_dict(saved_plan.inner)
    if len(saved_plan.muc) > 0:
        currentBinding = saved_plan.muc
    dataset = dataset.get_graph(innerTriple['graph'])
    return IndexJoinIterator(source,
                             innerTriple,
                             dataset,
                             currentBinding=currentBinding,
                             iterOffset=saved_plan.last_read)
Beispiel #5
0
def load_scan(saved_plan: SavedScanIterator, dataset: Dataset) -> PreemptableIterator:
    """Load a ScanIterator from a protobuf serialization.

    Args:
      * saved_plan: Saved query execution plan.
      * dataset: RDF dataset used to execute the plan.

    Returns:
      The pipeline of iterator used to continue query execution.
    """
    triple = saved_plan.triple
    s, p, o, g = (triple.subject, triple.predicate, triple.object, triple.graph)
    iterator, card = dataset.get_graph(g).search(s, p, o, last_read=saved_plan.last_read)
    return ScanIterator(iterator, protoTriple_to_dict(triple), saved_plan.cardinality,saved_plan.progress)
Beispiel #6
0
def load_scan(saved_plan: SavedScanIterator, dataset: Dataset, context: dict) -> PreemptableIterator:
    """Load a ScanIterator from a protobuf serialization.

    Args:
      * saved_plan: Saved query execution plan.
      * dataset: RDF dataset used to execute the plan.
      * context: Information about the query execution.

    Returns:
      The pipeline of iterator used to continue query execution.
    """
    pattern = protoTriple_to_dict(saved_plan.pattern)
    connector = dataset.get_graph(pattern['graph'])
    if saved_plan.timestamp is not None and saved_plan.timestamp != '':
        as_of = datetime.fromisoformat(saved_plan.timestamp)
    else:
        as_of = None
    current_mappings = None
    if len(saved_plan.muc) > 0:
        current_mappings = dict(saved_plan.muc)
    mu = None
    if len(saved_plan.mu) > 0:
        mu = dict(saved_plan.mu)
    return ScanIterator(connector, pattern, context, current_mappings=current_mappings, mu=mu, last_read=saved_plan.last_read, as_of=as_of)