diff --git a/relational/optimizer.py b/relational/optimizer.py index 1fb2ee1..4c0dc1c 100644 --- a/relational/optimizer.py +++ b/relational/optimizer.py @@ -25,7 +25,6 @@ from relational import optimizations from relational import parser -from relational import querysplit from relational.maintenance import UserInterface @@ -58,8 +57,8 @@ def optimize_program(code, rels): parsed = parser.tree(query) optimizations.replace_leaves(parsed, context) context[res] = parsed - node = optimize_all(context[last_res], rels, tostr=False) - return querysplit.split(node, rels) + result = optimize_all(context[last_res], rels) + return result def optimize_all(expression, rels, specific=True, general=True, debug=None,tostr=True): diff --git a/relational/querysplit.py b/relational/querysplit.py index d6cd699..a80d07a 100644 --- a/relational/querysplit.py +++ b/relational/querysplit.py @@ -19,52 +19,6 @@ # This module splits a query into a program. -from relational import parser - - -class Program: - def __init__(self, rels): - self.queries = [] - self.dictionary = {} # Key is the query, value is the relation - self.vgen = vargen(rels, 'optm_') - - def __str__(self): - r = '' - for q in self.queries: - r += '%s = %s' % (q[0], q[1]) + '\n' - return r.rstrip() - - def append_query(self, node): - strnode = str(node) - - rel = self.dictionary.get(strnode) - if rel: - return rel - - qname = next(self.vgen) - self.queries.append((qname, node)) - n = parser.Node() - n.kind = parser.RELATION - n.name = qname - self.dictionary[strnode] = n - return n - -def _separate(node, program): - if node.kind == parser.UNARY and node.child.kind != parser.RELATION: - _separate(node.child, program) - rel = program.append_query(node.child) - node.child = rel - elif node.kind == parser.BINARY: - if node.left.kind != parser.RELATION: - _separate(node.left, program) - rel = program.append_query(node.left) - node.left = rel - if node.right.kind != parser.RELATION: - _separate(node.right, program) - rel = program.append_query(node.right) - node.right = rel - program.append_query(node) - def vargen(avoid, prefix=''): ''' Generates temp variables. @@ -86,14 +40,3 @@ def vargen(avoid, prefix=''): if r not in avoid: yield r count += 1 - -def split(node, rels): - ''' - Split a query into a program. - - The idea is that if there are duplicated subdtrees they - get executed only once. - ''' - p = Program(rels) - _separate(node, p) - return str(p) diff --git a/relational_gui/guihandler.py b/relational_gui/guihandler.py index 342f569..4cb7973 100644 --- a/relational_gui/guihandler.py +++ b/relational_gui/guihandler.py @@ -15,7 +15,6 @@ # along with this program. If not, see . # # author Salvo "LtWorf" Tomaselli -import base64 import sys from PyQt5 import QtCore, QtWidgets, QtGui @@ -363,13 +362,10 @@ class relForm(QtWidgets.QMainWindow): self.settings.setValue('maingui/geometry', self.saveGeometry()) self.settings.setValue('maingui/windowState', self.saveState()) self.settings.setValue('maingui/splitter', self.ui.splitter.saveState()) - self.settings.setValue('maingui/relations', base64.b64encode(self.user_interface.session_dump()).decode()) + self.settings.setValue('maingui/relations', self.user_interface.session_dump()) def _restore_settings(self): - try: - self.user_interface.session_restore(base64.b64decode(self.settings.value('maingui/relations'))) - except: - pass + self.user_interface.session_restore(self.settings.value('maingui/relations')) self.updateRelations() self.setMultiline(self.settings.value('multiline', 'false') == 'true')