- Fixed optimization involving selection and parenthesis in the expression
- Added more clear documentation in recoursive_scan git-svn-id: http://galileo.dmi.unict.it/svn/relational/trunk@260 014f5005-505e-4b48-8d0a-63407b615a7c
This commit is contained in:
parent
41de96997d
commit
6fdd572faa
@ -7,6 +7,7 @@
|
|||||||
- Rename will mark the resulting relation as readonly and subsequent updates, insert, updates or deletes will actually copy the content
|
- Rename will mark the resulting relation as readonly and subsequent updates, insert, updates or deletes will actually copy the content
|
||||||
- Added testsuite
|
- Added testsuite
|
||||||
- Fixed python expression tokenization, now uses native tokenizer
|
- Fixed python expression tokenization, now uses native tokenizer
|
||||||
|
- Fixed optimization involving selection and parenthesis in the expression (Rev 260)
|
||||||
|
|
||||||
0.11
|
0.11
|
||||||
- Font is set only on windows (Rev 206)
|
- Font is set only on windows (Rev 206)
|
||||||
@ -18,7 +19,7 @@
|
|||||||
- Added .desktop file on svn (Rev 216)
|
- Added .desktop file on svn (Rev 216)
|
||||||
- Automatically fills some fields in the survey (Rev 217)
|
- Automatically fills some fields in the survey (Rev 217)
|
||||||
- When a query fails, shows the message of the exception (Rev220)
|
- When a query fails, shows the message of the exception (Rev220)
|
||||||
- Improved tokenizer for select in optimizations, now can accept operators in identifiers (Rev220)
|
- Improved tokenizer for select in optimizations, now can accept operators in identifiers (Rev 220)
|
||||||
- Uses getopt to handle the command line in a more standard way
|
- Uses getopt to handle the command line in a more standard way
|
||||||
- Organized code so the ui can be either qt or command line
|
- Organized code so the ui can be either qt or command line
|
||||||
- Does not depend on QT anymore
|
- Does not depend on QT anymore
|
||||||
|
@ -52,7 +52,17 @@ def replace_node(replace,replacement):
|
|||||||
replace.left=replacement.left
|
replace.left=replacement.left
|
||||||
|
|
||||||
def recoursive_scan(function,node,rels=None):
|
def recoursive_scan(function,node,rels=None):
|
||||||
'''Does a recoursive optimization on the tree'''
|
'''Does a recoursive optimization on the tree.
|
||||||
|
|
||||||
|
This function will recoursively execute the function given
|
||||||
|
as "function" parameter starting from node to all the tree.
|
||||||
|
if rels is provided it will be passed as argument to the function.
|
||||||
|
Otherwise the function will be called just on the node.
|
||||||
|
|
||||||
|
Result value: function is supposed to return the amount of changes
|
||||||
|
it has performed on the tree.
|
||||||
|
The various result will be added up and this final value will be the
|
||||||
|
returned value.'''
|
||||||
changes=0
|
changes=0
|
||||||
#recoursive scan
|
#recoursive scan
|
||||||
if node.kind==optimizer.UNARY:
|
if node.kind==optimizer.UNARY:
|
||||||
@ -72,11 +82,20 @@ def recoursive_scan(function,node,rels=None):
|
|||||||
|
|
||||||
def duplicated_select(n):
|
def duplicated_select(n):
|
||||||
'''This function locates and deletes things like
|
'''This function locates and deletes things like
|
||||||
σ a ( σ a(C)) and the ones like σ a ( σ b(C))'''
|
σ a ( σ a(C)) and the ones like σ a ( σ b(C))
|
||||||
|
replacing the 1st one with a single select and
|
||||||
|
the 2nd one with a single select with both conditions
|
||||||
|
in and
|
||||||
|
'''
|
||||||
changes=0
|
changes=0
|
||||||
if n.name=='σ' and n.child.name=='σ':
|
if n.name=='σ' and n.child.name=='σ':
|
||||||
if n.prop != n.child.prop: #Nested but different, joining them
|
if n.prop != n.child.prop: #Nested but different, joining them
|
||||||
n.prop = n.prop + " and " + n.child.prop
|
n.prop = n.prop + " and " + n.child.prop
|
||||||
|
|
||||||
|
#This adds parenthesis if they are needed
|
||||||
|
if n.child.prop.startswith('(') or n.prop.startswith('('):
|
||||||
|
n.prop= '(%s)' % n.prop
|
||||||
|
|
||||||
n.child=n.child.child
|
n.child=n.child.child
|
||||||
changes=1
|
changes=1
|
||||||
changes+=duplicated_select(n)
|
changes+=duplicated_select(n)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user