Commit 4d457bb6 authored by Kazuhiko Shiozaki's avatar Kazuhiko Shiozaki Committed by Jérome Perrin

py2/py3: use hexdigest instead of digest in inventory cache key to avoid non-valid UTF-8 bytes.

One problem with hexdigest is that it's longer and the column was
created as binary(16). We don't have a mechanism to run migrations on
this table, so we use UNHEX in SQL to have the equivalent as digest()
from hexdigest()
Co-authored-by: Jérome Perrin's avatarJérome Perrin <jerome@nexedi.com>
parent 211842e7
......@@ -4,7 +4,7 @@ SELECT
FROM
inventory_cache
WHERE
inventory_cache.query=<dtml-sqlvar query type="string">
inventory_cache.query = UNHEX(<dtml-sqlvar query type="string">)
<dtml-if date>
AND
inventory_cache.date <= <dtml-sqlvar date type="datetime">
......
Insert into inventory_cache(`query`, `date`, `result`) values (<dtml-sqlvar query type="string">, <dtml-sqlvar date type="datetime">, <dtml-sqlvar result type="string">)
\ No newline at end of file
Insert into inventory_cache(`query`, `date`, `result`) values (UNHEX(<dtml-sqlvar query type="string">), <dtml-sqlvar date type="datetime">, <dtml-sqlvar result type="string">)
\ No newline at end of file
......@@ -37,6 +37,7 @@ from Products.ERP5Type.Globals import InitializeClass
from Products.ERP5Type import Permissions
from Products.ERP5Type.Tool.BaseTool import BaseTool
from Products.ERP5Type.UnrestrictedMethod import UnrestrictedMethod
from Products.ERP5Type.Utils import str2bytes
from zLOG import LOG, PROBLEM, WARNING, INFO
......@@ -1411,10 +1412,10 @@ class SimulationTool(BaseTool):
if src__:
sql_source_list = []
# Generate the cache key (md5 of query source)
sql_text_hash = md5(Resource_zGetInventoryList(
sql_text_hash = md5(str2bytes(Resource_zGetInventoryList(
stock_table_id=stock_table_id,
src__=1,
**kw)).digest()
**kw))).hexdigest()
# Try to get result from cache
Resource_zGetInventoryCacheResult = self.Resource_zGetInventoryCacheResult
inventory_cache_kw = {'query': sql_text_hash}
......
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