Commit 847139f9 authored by Vincent Pelletier's avatar Vincent Pelletier

Move simulation, omition, reserved simulation and reserved omition query...

Move simulation, omition, reserved simulation and reserved omition query generation from _generateKeywordDict to _generateSQLKeywordDictFromKeywordDict.


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@15866 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent a65803b0
...@@ -376,6 +376,34 @@ class SimulationTool(BaseTool): ...@@ -376,6 +376,34 @@ class SimulationTool(BaseTool):
column_value_dict = new_kw.pop('column_value_dict', {}) column_value_dict = new_kw.pop('column_value_dict', {})
for key, value in column_value_dict.iteritems(): for key, value in column_value_dict.iteritems():
new_kw['%s.%s' % (table, key)] = value new_kw['%s.%s' % (table, key)] = value
# Simulation states matched with input and output omission
def joinQueriesIfNeeded(query_a, query_b, operator):
if None not in (query_a, query_b):
return ComplexQuery(query_a, query_b, operator=operator)
elif query_a is not None:
return query_a
return query_b
def getSimulationQuery(simulation_dict, omit_dict):
simulation_query = self._buildSimulationStateQuery(
simulation_state_dict=simulation_dict)
omit_query = self._buildOmitQuery(query_table=table,
omit_dict=omit_dict)
return joinQueriesIfNeeded(query_a=simulation_query,
query_b=omit_query, operator='AND')
regular_query = getSimulationQuery(new_kw.pop('simulation_dict', {}),
new_kw.pop('omit_dict', {}))
reserved_kw = new_kw.pop('reserved_kw', None)
if reserved_kw is not None:
reserved_query = getSimulationQuery(
reserved_kw.pop('simulation_dict', {}),
reserved_kw.pop('omit_dict', {}))
simulation_query = joinQueriesIfNeeded(query_a=regular_query,
query_b=reserved_query,
operator='OR')
else:
simulation_query = regular_query
if simulation_query is not None:
new_kw['query'] = simulation_query
sql_kw.update(self.portal_catalog.buildSQLQuery(**new_kw)) sql_kw.update(self.portal_catalog.buildSQLQuery(**new_kw))
return sql_kw return sql_kw
...@@ -568,43 +596,30 @@ class SimulationTool(BaseTool): ...@@ -568,43 +596,30 @@ class SimulationTool(BaseTool):
#if len(variation_category_uid_list) : #if len(variation_category_uid_list) :
# new_kw['variationCategory'] = variation_category_uid_list # new_kw['variationCategory'] = variation_category_uid_list
simulation_query = self._getSimulationStateQuery( simulation_dict = self._getSimulationStateDict(
simulation_state=simulation_state, simulation_state=simulation_state,
omit_transit=omit_transit, omit_transit=omit_transit,
input_simulation_state=input_simulation_state, input_simulation_state=input_simulation_state,
output_simulation_state=output_simulation_state, output_simulation_state=output_simulation_state,
transit_simulation_state=transit_simulation_state, transit_simulation_state=transit_simulation_state,
strict_simulation_state=strict_simulation_state) strict_simulation_state=strict_simulation_state)
if omit_input or omit_output: new_kw['simulation_dict'] = simulation_dict
omit_query = self._getOmitQuery(omit_input=omit_input, omit_dict = self._getOmitDict(omit_input=omit_input,
omit_output=omit_output, omit_output=omit_output)
query_table=table) new_kw['omit_dict'] = omit_dict
if simulation_query is not None:
simulation_query = ComplexQuery(simulation_query, omit_query, operator='AND')
else:
simulation_query = omit_query
if reserved_kw is not None: if reserved_kw is not None:
if not isinstance(reserved_kw, dict): if not isinstance(reserved_kw, dict):
# Not a dict when taken from URL, so, cast is needed # Not a dict when taken from URL, so, cast is needed
# to make pop method available # to make pop method available
reserved_kw = dict(reserved_kw) reserved_kw = dict(reserved_kw)
new_reserved_kw = {}
reserved_omit_input = reserved_kw.pop('omit_input',0) reserved_omit_input = reserved_kw.pop('omit_input',0)
reserved_omit_output = reserved_kw.pop('omit_output',0) reserved_omit_output = reserved_kw.pop('omit_output',0)
reserved_omit_query = self._getOmitQuery(query_table=table, new_reserved_kw['omit_dict'] = self._getOmitDict(
omit_input=reserved_omit_input, omit_input=reserved_omit_input,
omit_output=reserved_omit_output) omit_output=reserved_omit_output)
reserved_query = self._getSimulationStateQuery(**reserved_kw) new_reserved_kw['simulation_dict'] = self._getSimulationStateDict(**reserved_kw)
if reserved_omit_query is not None: new_kw['reserved_kw'] = new_reserved_kw
reserved_query = ComplexQuery(reserved_omit_query,reserved_query,
operator='AND')
if simulation_query is not None:
simulation_query = ComplexQuery(simulation_query, reserved_query,
operator='OR')
else:
simulation_query = reserved_query
if simulation_query is not None:
new_kw['query'] = simulation_query
# It is necessary to use here another SQL query (or at least a subquery) # It is necessary to use here another SQL query (or at least a subquery)
# to get _DISTINCT_ uid from predicate_category table. # to get _DISTINCT_ uid from predicate_category table.
# Otherwise, by using a where_expression, cells which fit conditions # Otherwise, by using a where_expression, cells which fit conditions
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment