Commit b05d2532 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 16c4ba92
...@@ -4,7 +4,7 @@ SELECT ...@@ -4,7 +4,7 @@ SELECT
FROM FROM
inventory_cache inventory_cache
WHERE WHERE
inventory_cache.query=<dtml-sqlvar query type="string"> inventory_cache.query = UNHEX(<dtml-sqlvar query type="string">)
<dtml-if date> <dtml-if date>
AND AND
inventory_cache.date <= <dtml-sqlvar date type="datetime"> 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">) 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 \ No newline at end of file
...@@ -37,6 +37,7 @@ from Products.ERP5Type.Globals import InitializeClass ...@@ -37,6 +37,7 @@ from Products.ERP5Type.Globals import InitializeClass
from Products.ERP5Type import Permissions from Products.ERP5Type import Permissions
from Products.ERP5Type.Tool.BaseTool import BaseTool from Products.ERP5Type.Tool.BaseTool import BaseTool
from Products.ERP5Type.UnrestrictedMethod import UnrestrictedMethod from Products.ERP5Type.UnrestrictedMethod import UnrestrictedMethod
from Products.ERP5Type.Utils import str2bytes
from zLOG import LOG, PROBLEM, WARNING, INFO from zLOG import LOG, PROBLEM, WARNING, INFO
...@@ -1411,10 +1412,10 @@ class SimulationTool(BaseTool): ...@@ -1411,10 +1412,10 @@ class SimulationTool(BaseTool):
if src__: if src__:
sql_source_list = [] sql_source_list = []
# Generate the cache key (md5 of query source) # 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, stock_table_id=stock_table_id,
src__=1, src__=1,
**kw)).digest() **kw))).hexdigest()
# Try to get result from cache # Try to get result from cache
Resource_zGetInventoryCacheResult = self.Resource_zGetInventoryCacheResult Resource_zGetInventoryCacheResult = self.Resource_zGetInventoryCacheResult
inventory_cache_kw = {'query': sql_text_hash} 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