1. 10 Sep, 2018 1 commit
  2. 07 Sep, 2018 5 commits
  3. 05 Sep, 2018 4 commits
  4. 04 Sep, 2018 2 commits
  5. 03 Sep, 2018 2 commits
  6. 01 Sep, 2018 5 commits
    • Vincent Pelletier's avatar
      SQLCatalog: Optimise and simplify transactional_cache_decorator. · 189db11c
      Vincent Pelletier authored
      Auto-generate cache_id, removing the risk of duplicating one.
      Inline getInstanceID as it is its only caller left.
      Avoid wrapping if getTransactionalVariable cannot be imported.
      Avoid intermediate variables, at the cost of dupicating logic but
      accelerating run-time.
      Use functools.wraps .
      Access _cache_sequence_number directly - these pieces of code are friends
      anyway, we already set a volatile property on Catalog instance. Saves one
      getattr and one call.
      189db11c
    • Vincent Pelletier's avatar
      SQLCatalog: Assorted cleanups and simplifications. · 66f13089
      Vincent Pelletier authored
      No backslash at EOL.
      Avoid splitting messages, to ease code lookup.
      LOG's "error" argument accepts a boolean, which removes the need to touch
      sys.exc_info.
      Use modern exception raising syntax.
      66f13089
    • Vincent Pelletier's avatar
      b0978eaf
    • Vincent Pelletier's avatar
      SQLCatalog: Drop unused function. · 1f2850cd
      Vincent Pelletier authored
      1f2850cd
    • Vincent Pelletier's avatar
      SQLExpression: Fold _getSelectDict into __init__, its only caller. · 028060e6
      Vincent Pelletier authored
      _getSelectDict was also calling itself on sub-sql_expressions, but this
      was useless: they would already have called it, and discarded one of its
      returned values. Instead, preserve both returned values in __init__ and
      access these attributes directly when iterating over sub-sql_expressions.
      Also, fold canMergeSelectDict back into its only 2 call places, saving one
      getattr and one call.
      Also, get rid of a few properties which were only used in _getSelectDict.
      Also, get rid of two iterable copies: sql_expression_list when it is
      already a list (no need to cast it again to a list, we just built one with
      the list comprehension), and select_dict being cast into a list when
      entering _getSelectDict, despite not being used (besides in extra
      _getSelectDict calls, which are now entirely avoided).
      028060e6
  7. 31 Aug, 2018 3 commits
  8. 29 Aug, 2018 5 commits
    • Vincent Pelletier's avatar
    • Vincent Pelletier's avatar
      ZMySQLDA: Optimise date & datetime parsing in results. · 01e14257
      Vincent Pelletier authored
      A pprofile run shows DateTime_or_None costing 3ms per value (including all
      callees).
      While this may seem low, it is common to receive hundreds of such values
      in single query results (ex: web mode document & webpage lookups),
      so the total time spent parting dates per query can become significantly
      larger than the time to execute the query itself.
      In the case of this measure setup, 504 dates were processed for a total of
      1.5 seconds.
      DateTime is slow to parse strings because it cannot rely on a pre-known
      format. With MySQL/MariaDB, the format is know for those column types, so
      implement specific parsing to get better performance.
      On the same setup, pprofile run shows a parsing time of 123µs per value in
      DATETIME_to_DateTime_or_None, or 65ms total.
      DATE_to_DateTime_or_None should not deviate significantly from this.
      01e14257
    • Vincent Pelletier's avatar
      Revert "ZMySQLDA: Optimise date & datetime parsing in results." · 2dc4c674
      Vincent Pelletier authored
      For some reason, unit tests all broke while testing this revision. The
      relation between both is not clear to me (this code has worked for me).
      In doubt, I revert it for now.
      This reverts commit 0057272c.
      2dc4c674
    • Vincent Pelletier's avatar
      erp5_hal_json_style: Do not call getRelativeUrl to just traverse it one call later · 6dd3a2cc
      Vincent Pelletier authored
      getRelativeUrl and restrictedTraverse are expensive operations. Do not
      involve them pointlessly.
      Also, boolean evaluation of lists is a thing.
      6dd3a2cc
    • Vincent Pelletier's avatar
      ZMySQLDA: Optimise date & datetime parsing in results. · 0057272c
      Vincent Pelletier authored
      A pprofile run shows DateTime_or_None costing 3ms per value (including all
      callees).
      While this may seem low, it is common to receive hundreds of such values
      in single query results (ex: web mode document & webpage lookups),
      so the total time spent parting dates per query can become significantly
      larger than the time to execute the query itself.
      In the case of this measure setup, 504 dates were processed for a total of
      1.5 seconds.
      DateTime is slow to parse strings because it cannot rely on a pre-known
      format. With MySQL/MariaDB, the format is know for those column types, so
      implement specific parsing to get better performance.
      On the same setup, pprofile run shows a parsing time of 72µs per value in
      DATETIME_to_DateTime_or_None, or 39ms total.
      DATE_to_DateTime_or_None should not deviate significantly from this.
      0057272c
  9. 28 Aug, 2018 1 commit
    • Jérome Perrin's avatar
      Category self membership after move and clone · 524b5443
      Jérome Perrin authored
      Categories are member of themselves. When a category is renamed, the membership to self was already preserved thanks to nexedi/erp5@7f2e8eb2
      , but this was not the case when a category was cut and pasted.
      
      There are two different cases:
       * When just created, a category is member of itself because this is the [default behavior](https://lab.nexedi.com/nexedi/erp5/blob/b705495de0f04645b7b3ad3b74c46de00c923876/product/CMFCategory/CategoryTool.py#L1193-1196) for categories not having categories set. In this case, it's dynamic.
       * When category has some categories set ( in `self.categories` ) - this happens for example after being renamed - then behavior is different and `self.categories` has to be updated.
      
      7f2e8eb2 was handling properly the later case after a clone, but not in a cut and paste ( move ) scenario, because in this case "after clone" hook is not called.
      
      The first idea was to move the same hook at another level by overloading `_postCopy` but after some discussion and thinking, it seemed more logical to make sure `CategoryTool.setCategoryList` does not save categories membership to self, which is consistent in the way `CategoryTool.getCategoryList` adds the membership to self dynamically.
      
      This MR brings a few more tests, so that we can claim [#1900](https://nexedi.erp5.net/bug_module/1900) and [#704](https://nexedi.erp5.net/bug_module/704) are tested enough and close these old bugs.
      
      
      /reviewed-on nexedi/erp5!664
      524b5443
  10. 27 Aug, 2018 2 commits
  11. 24 Aug, 2018 3 commits
  12. 23 Aug, 2018 7 commits