From 1dd1298ee045bd6143d5ed79a865cca0f830db7b Mon Sep 17 00:00:00 2001 From: Salvo 'LtWorf' Tomaselli Date: Sun, 3 Jan 2016 17:15:04 +0100 Subject: [PATCH] New optimization: useless projection If a projection is done on every attribute it is useless and can be removed. The new optimization does this. --- relational/optimizations.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/relational/optimizations.py b/relational/optimizations.py index 62478f0..519b2b2 100644 --- a/relational/optimizations.py +++ b/relational/optimizations.py @@ -664,6 +664,19 @@ def selection_and_product(n, rels): return changes + recoursive_scan(selection_and_product, n, rels) + +def useless_projection(n, rels): + ''' + Removes projections that are over all the fields + ''' + changes = 0 + if n.name == PROJECTION and \ + set(n.child.result_format(rels)) == set(i.strip() for i in n.prop.split(',')): + changes = 1 + replace_node(n, n.child) + + return changes + recoursive_scan(useless_projection, n, rels) + general_optimizations = [ duplicated_select, down_to_unions_subtractions_intersections, @@ -680,6 +693,7 @@ general_optimizations = [ specific_optimizations = [ selection_and_product, projection_and_union, + useless_projection, ] if __name__ == "__main__":