useless_projection

master
Salvo 'LtWorf' Tomaselli 2020-06-09 19:37:57 +07:00
parent f139257d2c
commit b987180d1c
No known key found for this signature in database
GPG Key ID: B3A7CF0C801886CF
1 changed files with 6 additions and 8 deletions

@ -30,9 +30,9 @@
from io import StringIO from io import StringIO
from tokenize import generate_tokens from tokenize import generate_tokens
from typing import Tuple from typing import Tuple, Dict
from relational.relation import Relation
from relational import parser from relational import parser
sel_op = ( sel_op = (
@ -577,17 +577,15 @@ def selection_and_product(n, rels):
return changes + recoursive_scan(selection_and_product, n, rels) return changes + recoursive_scan(selection_and_product, n, rels)
def useless_projection(n, rels) -> int: def useless_projection(n: parser.Node, rels: Dict[str, Relation]) -> Tuple[parser.Node, int]:
''' '''
Removes projections that are over all the fields Removes projections that are over all the fields
''' '''
changes = 0
if n.name == PROJECTION and \ if n.name == PROJECTION and \
set(n.child.result_format(rels)) == set(i.strip() for i in n.prop.split(',')): set(n.child.result_format(rels)) == set(i.strip() for i in n.prop.split(',')):
changes = 1 return n.child, 1
replace_node(n, n.child)
return changes + recursive_scan(useless_projection, n, rels) return n, 0
general_optimizations = [ general_optimizations = [
duplicated_select, duplicated_select,
@ -606,5 +604,5 @@ general_optimizations = [
specific_optimizations = [ specific_optimizations = [
#selection_and_product, #selection_and_product,
#projection_and_union, #projection_and_union,
#useless_projection, useless_projection,
] ]