4
4
from enum import Enum
5
5
from functools import partial
6
6
7
- from DeTrusty .Logger import get_logger
8
7
from DeTrusty .Decomposer import Tree , utils
8
+ from DeTrusty .Logger import get_logger
9
9
from DeTrusty .Sparql .Parser .services import Service , Triple , Filter , Optional , UnionBlock , JoinBlock , Values , Bind , Argument
10
10
11
11
logger = get_logger (__name__ , '.decompositions.log' )
12
+
13
+
12
14
class Decomposer (object ):
13
15
14
16
def __init__ (self , query , config , decompType = "STAR" , joinstarslocally = True , sparql_one_dot_one = False ):
@@ -105,7 +107,7 @@ def decomposeJoinBlock(self, jb):
105
107
return None
106
108
107
109
fl1 = self .includeFilter (sl , fl )
108
- fl = list (set (fl ) - set (fl1 )) # in case VALUES with variables from multiple sources, the VALUES object won't be removed
110
+ fl = list (set (fl ) - set (fl1 )) # in case VALUES with variables from multiple sources, the VALUES object won't be removed
109
111
if sl :
110
112
if len (sl ) == 1 and isinstance (sl [0 ], UnionBlock ) and fl != []:
111
113
sl [0 ] = self .updateFilters (sl [0 ], fl )
@@ -695,10 +697,6 @@ def includeFilterAux(self, f, sl):
695
697
if set (vars_s ) & set (vars_f ) == set (vars_f ):
696
698
s .include_filter (f )
697
699
fl1 = fl1 + [f ]
698
- elif type (f ) is Values and set (vars_s ) & set (vars_f ) != set ():
699
- fl2 = f .instantiate (set (vars_s ) & set (vars_f ))
700
- s .include_filter (fl2 ) # the new decomposed clause need to be reconsidered
701
- fl1 = fl1 + [fl2 ]
702
700
return fl1
703
701
704
702
def includeFilterUnionBlock (self , jb , f ):
@@ -708,11 +706,7 @@ def includeFilterUnionBlock(self, jb, f):
708
706
if isinstance (jbUS , Service ):
709
707
vars_s = set (jbUS .getVars ())
710
708
vars_f = f .getVars ()
711
- if type (f ) is Values and set (vars_s ) & set (vars_f ) != set ():
712
- fl2 = f .instantiate (set (vars_s ) & set (vars_f ))
713
- jbUS .include_filter (fl2 )
714
- fl1 = fl1 + [fl2 ]
715
- elif set (vars_s ) & set (vars_f ) == set (vars_f ):
709
+ if set (vars_s ) & set (vars_f ) == set (vars_f ):
716
710
jbUS .include_filter (f )
717
711
fl1 = fl1 + [f ]
718
712
return fl1
@@ -741,33 +735,22 @@ def includeFilterAuxSK(self, f, sl, sr):
741
735
for s in sl :
742
736
bgpvars .update (set (utils .getVars (s )))
743
737
vars_s = set ()
744
- if ( isinstance (s , Triple ) ):
738
+ if isinstance (s , Triple ):
745
739
vars_s .update (set (utils .getVars (s )))
746
740
else :
747
741
for t in s .triples :
748
742
vars_s .update (set (utils .getVars (t )))
749
743
750
- if set (vars_s ) & set (vars_f ) == set (vars_f ): # Bind supposed to fall to this category
751
- serviceFilter = True
752
-
753
- if type (f ) is Values and set (vars_s ) & set (vars_f ) != set ():
754
- fl2 = f .instantiate (set (vars_s ) & set (vars_f ))
744
+ if set (vars_s ) & set (vars_f ) == set (vars_f ): # Bind supposed to fall to this category
755
745
serviceFilter = True
756
746
757
747
for v in bgpvars :
758
748
if v in fvars :
759
749
fvars [v ] = True
760
750
761
- # if type(f) is Bind: # why is this here? Investigate later
762
- # fvars[f.alias] = True
763
-
764
751
if serviceFilter :
765
- if type (f ) is Values :
766
- sr .include_filter (fl2 )
767
- fl1 = fl1 + [fl2 ]
768
- else :
769
- sr .include_filter (f )
770
- fl1 = fl1 + [f ]
752
+ sr .include_filter (f )
753
+ fl1 = fl1 + [f ]
771
754
else :
772
755
fs = [v for v in fvars if not fvars [v ]]
773
756
if len (fs ) == 0 :
0 commit comments