Commit 55f2fd4d authored by Romain Courteaud's avatar Romain Courteaud Committed by Alain Takoudjou

Reduce number of JOIN

parent 21c51eb3
...@@ -116,14 +116,19 @@ class AcknowledgementTool(BaseTool): ...@@ -116,14 +116,19 @@ class AcknowledgementTool(BaseTool):
document_list = [] document_list = []
if user_name is not None: if user_name is not None:
portal = self.getPortalObject() portal = self.getPortalObject()
person_value = portal.ERP5Site_getAuthenticatedMemberPersonValue(
user_name=user_name)
if person_value is None:
raise ValueError('No user found')
else:
now = DateTime() now = DateTime()
# First look at all event that define the current user as destination # First look at all event that define the current user as destination
all_document_list = [x for x in \ all_document_list = [x for x in \
self.portal_catalog(portal_type = portal_type, self.portal_catalog(portal_type = portal_type,
simulation_state = self.getPortalTransitInventoryStateList(), simulation_state = self.getPortalTransitInventoryStateList(),
# start_date = {'query':now,'range':'max'}, # start_date = {'query':now,'range':'max'},
# stop_date = {'query':now,'range':'min'}, # stop_date = {'query':now,'range':'min'},
default_destination_reference=user_name)] default_destination_uid=person_value.getUid())]
# Now we can look directly at acknowledgement document not approved yet # Now we can look directly at acknowledgement document not approved yet
# so not in a final state # so not in a final state
final_state_list = self.getPortalCurrentInventoryStateList() final_state_list = self.getPortalCurrentInventoryStateList()
...@@ -131,9 +136,9 @@ class AcknowledgementTool(BaseTool): ...@@ -131,9 +136,9 @@ class AcknowledgementTool(BaseTool):
all_document_list.extend([x for x in \ all_document_list.extend([x for x in \
self.portal_catalog(portal_type = portal_type, self.portal_catalog(portal_type = portal_type,
query=query, query=query,
# start_date = {'query':now,'range':'max'}, # start_date = {'query':now,'range':'max'},
# stop_date = {'query':now,'range':'min'}, # stop_date = {'query':now,'range':'min'},
destination_reference=user_name)]) default_destination_uid=person_value.getUid())])
for document in all_document_list: for document in all_document_list:
# We filter manually on dates until a good solution is found for # We filter manually on dates until a good solution is found for
# searching by dates on the catalog # searching by dates on the catalog
......
  • What's the problem exactly with more JOINs ? Of course, the query was slower, but was it pathological to the point that filtering at ZODB level is faster ? Anyway, the following line crashes when stop_date is not defined:

              if (document.getStartDate() < now < (document.getStopDate()+1)):

    With Python 3, we'd have the same issue for start_date.

    /cc @seb @vpelletier @kazuhiko

  • The join which is avoided here is a category->catalog join, by replacing a $RELATION_$COLUMN with a $RELATION_uid condition. This is a good optimisation to me: ERP5 can quickly (or there is something seriously wrong in ERP5Site_getAuthenticatedMemberPersonValue) reach the most catalog-friendly value (an UID), so it should do that.

    I cannot comment on whether all destinations are necessarily Person documents - though it looks consistent with variable naming here.

  • Argg sorry for the noise. I had the feeling to see that this commit replaced catalog date comparison by Python. This commit is fine. I have a regression in my project but it seems to be elsewhere.

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