Skip to content

Commit

Permalink
Speedup __add_triple_context.
Browse files Browse the repository at this point in the history
(cherry picked from commit 85e1cfe)
  • Loading branch information
rchateauneu committed Mar 3, 2021
1 parent 9f0f296 commit 8086068
Showing 1 changed file with 13 additions and 10 deletions.
23 changes: 13 additions & 10 deletions rdflib/plugins/stores/memory.py
Original file line number Diff line number Diff line change
Expand Up @@ -444,20 +444,24 @@ def __add_triple_context(self, triple, context, quoted):
subj, pred, obj = triple
_ = self.__spo[subj][pred][obj]
# we know the triple exists somewhere in the store
if triple not in self.__tripleContexts:
try:
triple_context = self.__tripleContexts[triple]
except IndexError:
# triple exists with default ctx info
# start with a copy of the default ctx info
self.__tripleContexts[triple] = self.__defaultContexts.copy()
triple_context = self.__tripleContexts[triple] = self.__defaultContexts.copy()

triple_context[ctx] = quoted

self.__tripleContexts[triple][ctx] = quoted
if not quoted:
self.__tripleContexts[triple][None] = quoted
triple_context[None] = quoted

except KeyError:
# the triple didn't exist before in the store
if quoted: # this context only
self.__tripleContexts[triple] = {ctx: quoted}
triple_context = self.__tripleContexts[triple] = {ctx: quoted}
else: # default context as well
self.__tripleContexts[triple] = {ctx: quoted, None: quoted}
triple_context = self.__tripleContexts[triple] = {ctx: quoted, None: quoted}

# if the triple is not quoted add it to the default context
if not quoted:
Expand All @@ -470,11 +474,10 @@ def __add_triple_context(self, triple, context, quoted):

# if this is the first ever triple in the store, set default ctx info
if self.__defaultContexts is None:
self.__defaultContexts = self.__tripleContexts[triple]

self.__defaultContexts = triple_context
# if the context info is the same as default, no need to store it
if self.__tripleContexts[triple] == self.__defaultContexts:
del self.__tripleContexts[triple]
if triple_context == self.__defaultContexts:
del triple_context

def __get_context_for_triple(self, triple, skipQuoted=False):
"""return a list of contexts (str) for the triple, skipping
Expand Down

0 comments on commit 8086068

Please sign in to comment.