fixed error that caused an infinite loop
git-svn-id: http://galileo.dmi.unict.it/svn/relational/trunk@166 014f5005-505e-4b48-8d0a-63407b615a7c
This commit is contained in:
parent
bc60be3ace
commit
e5e7dcddd2
@ -258,8 +258,6 @@ def selection_and_product(n,rels):
|
|||||||
changes=0
|
changes=0
|
||||||
|
|
||||||
if n.name=='σ' and n.child.name=='*':
|
if n.name=='σ' and n.child.name=='*':
|
||||||
changes=1
|
|
||||||
|
|
||||||
l_attr=n.child.left.result_format(rels)
|
l_attr=n.child.left.result_format(rels)
|
||||||
r_attr=n.child.right.result_format(rels)
|
r_attr=n.child.right.result_format(rels)
|
||||||
|
|
||||||
@ -282,9 +280,6 @@ def selection_and_product(n,rels):
|
|||||||
right=[]
|
right=[]
|
||||||
both=[]
|
both=[]
|
||||||
|
|
||||||
print "Attributi R",r_attr, "Attributi L",l_attr
|
|
||||||
print "Gruppi",groups
|
|
||||||
|
|
||||||
for i in groups:
|
for i in groups:
|
||||||
l_fields=False #has fields in left?
|
l_fields=False #has fields in left?
|
||||||
r_fields=False #has fields in left?
|
r_fields=False #has fields in left?
|
||||||
@ -304,10 +299,9 @@ def selection_and_product(n,rels):
|
|||||||
else:#Unknown.. adding in both
|
else:#Unknown.. adding in both
|
||||||
both.append(i)
|
both.append(i)
|
||||||
|
|
||||||
print "left", left, "right",right,"both",both
|
|
||||||
|
|
||||||
#Preparing left selection
|
#Preparing left selection
|
||||||
if len(left)>0:
|
if len(left)>0:
|
||||||
|
changes=1
|
||||||
l_node=optimizer.node()
|
l_node=optimizer.node()
|
||||||
l_node.name='σ'
|
l_node.name='σ'
|
||||||
l_node.kind=optimizer.UNARY
|
l_node.kind=optimizer.UNARY
|
||||||
@ -323,6 +317,7 @@ def selection_and_product(n,rels):
|
|||||||
|
|
||||||
#Preparing right selection
|
#Preparing right selection
|
||||||
if len(right)>0:
|
if len(right)>0:
|
||||||
|
changes=1
|
||||||
r_node=optimizer.node()
|
r_node=optimizer.node()
|
||||||
r_node.name='σ'
|
r_node.name='σ'
|
||||||
r_node.prop=''
|
r_node.prop=''
|
||||||
|
@ -220,6 +220,33 @@ def tree(expression):
|
|||||||
the root node using the Node class defined in this module.'''
|
the root node using the Node class defined in this module.'''
|
||||||
return node(tokenize(expression))
|
return node(tokenize(expression))
|
||||||
|
|
||||||
|
def optimize_all(expression,rels):
|
||||||
|
'''This function performs all the available optimizations'''
|
||||||
|
n=tree(expression) #Gets the tree
|
||||||
|
total=1
|
||||||
|
while total!=0:
|
||||||
|
total=0
|
||||||
|
for i in optimizations.specific_optimizations:
|
||||||
|
total+=i(n,rels) #Performs the optimization
|
||||||
|
print n
|
||||||
|
for i in optimizations.general_optimizations:
|
||||||
|
total+=i(n) #Performs the optimization
|
||||||
|
print n
|
||||||
|
return n.__str__()
|
||||||
|
|
||||||
|
|
||||||
|
def specific_optimize(expression,rels):
|
||||||
|
'''This function performs specific optimizations. Means that it will need to
|
||||||
|
know the fields used by the relations'''
|
||||||
|
n=tree(expression) #Gets the tree
|
||||||
|
total=1
|
||||||
|
while total!=0:
|
||||||
|
total=0
|
||||||
|
for i in optimizations.specific_optimizations:
|
||||||
|
total+=i(n,rels) #Performs the optimization
|
||||||
|
return n.__str__()
|
||||||
|
|
||||||
|
|
||||||
def general_optimize(expression):
|
def general_optimize(expression):
|
||||||
'''This function performs general optimizations. Means that it will not need to
|
'''This function performs general optimizations. Means that it will not need to
|
||||||
know the fields used by the relations'''
|
know the fields used by the relations'''
|
||||||
@ -251,11 +278,13 @@ if __name__=="__main__":
|
|||||||
rels["S1"]= relation.relation("/home/salvo/dev/relational/trunk/samples/skillo.csv")
|
rels["S1"]= relation.relation("/home/salvo/dev/relational/trunk/samples/skillo.csv")
|
||||||
print rels
|
print rels
|
||||||
#n=tree("π indice,qq,name (ρ age➡qq,id➡indice (P1-P2))")
|
#n=tree("π indice,qq,name (ρ age➡qq,id➡indice (P1-P2))")
|
||||||
n=tree("σ id==3 and id==indice and indice==2 and name==5 or name<2(P1 * S1)")
|
#n=tree("σ id==3 and indice==2 and name==5 or name<2(P1 * S1)")
|
||||||
print optimizations.selection_and_product(n,rels)
|
#print optimizations.selection_and_product(n,rels)
|
||||||
|
|
||||||
print n
|
print specific_optimize("σ id==3 and indice==2 and name==5 or name<2(P1 * S1)",rels)
|
||||||
print n.result_format(rels)
|
|
||||||
|
#print n
|
||||||
|
#print n.result_format(rels)
|
||||||
|
|
||||||
#a=general_optimize("σ age==3 and qq<=2 or nome!='ciccio d\\'urso'(ρ ciccio➡age,nome➡nom(R-Q))")
|
#a=general_optimize("σ age==3 and qq<=2 or nome!='ciccio d\\'urso'(ρ ciccio➡age,nome➡nom(R-Q))")
|
||||||
#a=general_optimize("σ i==2 (σ b>5 (d))")
|
#a=general_optimize("σ i==2 (σ b>5 (d))")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user