swap_rename_select
This commit is contained in:
parent
2ad28ba9ad
commit
34ed9405ea
@ -366,40 +366,31 @@ def swap_rename_projection(n: parser.Node) -> Tuple[parser.Node, int]:
|
||||
|
||||
|
||||
def swap_rename_select(n: parser.Node) -> int:
|
||||
'''This function locates things like σ k(ρ j(R)) and replaces
|
||||
them with ρ j(σ k(R)). Renaming the attributes used in the
|
||||
'''This function locates things like
|
||||
σ k(ρ j(R))
|
||||
and replaces them with
|
||||
ρ j(σ k(R)).
|
||||
Renaming the attributes used in the
|
||||
selection, so the operation is still valid.'''
|
||||
changes = 0
|
||||
|
||||
if n.name == SELECTION and n.child.name == RENAME:
|
||||
changes = 1
|
||||
# Dictionary containing attributes of rename
|
||||
_vars = {}
|
||||
for i in n.child.prop.split(','):
|
||||
q = i.split(ARROW)
|
||||
_vars[q[1].strip()] = q[0].strip()
|
||||
# This is an inverse mapping for the rename
|
||||
renames = {v: k for k, v in n.child.get_rename_prop().items()}
|
||||
|
||||
# tokenizes expression in select
|
||||
_tokens = tokenize_select(n.prop)
|
||||
tokens = tokenize_select(n.prop)
|
||||
|
||||
# Renaming stuff
|
||||
for i in range(len(_tokens)):
|
||||
splitted = _tokens[i].split('.', 1)
|
||||
if splitted[0] in _vars:
|
||||
if len(splitted) == 1:
|
||||
_tokens[i] = _vars[_tokens[i].split('.')[0]]
|
||||
else:
|
||||
_tokens[i] = _vars[
|
||||
_tokens[i].split('.')[0]] + '.' + splitted[1]
|
||||
# Renaming stuff, no enum because I edit the tokens
|
||||
for i in range(len(tokens)):
|
||||
splitted = tokens[i].split('.', 1)
|
||||
if splitted[0] in renames:
|
||||
tokens[i] = renames[splitted[0]]
|
||||
if len(splitted) > 1:
|
||||
tokens[i] += '.' + splitted[1]
|
||||
|
||||
# Swapping operators
|
||||
n.name = RENAME
|
||||
n.child.name = SELECTION
|
||||
|
||||
n.prop = n.child.prop
|
||||
n.child.prop = ' '.join(_tokens)
|
||||
|
||||
return changes + recoursive_scan(swap_rename_select, n)
|
||||
child = parser.Unary(SELECTION, ' '.join(tokens), n.child.child)
|
||||
return parser.Unary(RENAME, n.child.prop, child), 1
|
||||
return n, 0
|
||||
|
||||
|
||||
def select_union_intersect_subtract(n: parser.Node) -> int:
|
||||
@ -627,7 +618,7 @@ general_optimizations = [
|
||||
selection_inside_projection,
|
||||
subsequent_renames,
|
||||
futile_renames,
|
||||
#swap_rename_select,
|
||||
swap_rename_select,
|
||||
futile_union_intersection_subtraction,
|
||||
swap_union_renames,
|
||||
swap_rename_projection,
|
||||
|
Loading…
Reference in New Issue
Block a user