From b3a9d98d24d15806da83f9525ffdba24fc3addfe Mon Sep 17 00:00:00 2001 From: LtWorf Date: Fri, 8 May 2009 14:46:29 +0000 Subject: [PATCH] added selection_inside_projection git-svn-id: http://galileo.dmi.unict.it/svn/relational/trunk@153 014f5005-505e-4b48-8d0a-63407b615a7c --- relational/optimizations.py | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/relational/optimizations.py b/relational/optimizations.py index ea45533..e8e4a27 100644 --- a/relational/optimizations.py +++ b/relational/optimizations.py @@ -78,6 +78,29 @@ def down_to_unions_subtractions_intersections(n): changes+=down_to_unions_subtractions_intersections(n.right) changes+=down_to_unions_subtractions_intersections(n.left) return changes - -general_optimizations=[duplicated_select,down_to_unions_subtractions_intersections] +def duplicated_projection(n): + '''This function locates thing like π i ( π j (R)) and replaces + them with π i (R)''' + changes=0 + + + if n.name=='π' and n.child.name=='π': + n.child=n.child.child + changes+=1 + + #recoursive scan + if n.kind==optimizer.UNARY: + changes+=duplicated_projection(n.child) + elif n.kind==optimizer.BINARY: + changes+=duplicated_projection(n.right) + changes+=duplicated_projection(n.left) + return changes + +def selection_inside_projection(n): + '''This function locates things like σ j (π k(R)) and + converts them into π k(σ j (R))''' + changes=0 + return changes + + general_optimizations=[duplicated_select,down_to_unions_subtractions_intersections,duplicated_projection,selection_inside_projection]