Commit 26187d69 authored by Kazuhiko Shiozaki's avatar Kazuhiko Shiozaki

escape '_' in like expression, that means '.' in regexp.

parent 237e7381
...@@ -716,7 +716,7 @@ class SimulationMovement(PropertyRecordableMixin, Movement, ExplainableMixin): ...@@ -716,7 +716,7 @@ class SimulationMovement(PropertyRecordableMixin, Movement, ExplainableMixin):
catalog_simulation_movement_list = portal_catalog( catalog_simulation_movement_list = portal_catalog(
portal_type='Simulation Movement', portal_type='Simulation Movement',
causality_uid=[p.getUid() for p in remaining_path_set], causality_uid=[p.getUid() for p in remaining_path_set],
path='%s/%%' % self.getPath()) path='%s/%%' % self.getPath().replace('_', r'\_'))
for movement in catalog_simulation_movement_list: for movement in catalog_simulation_movement_list:
path = movement.getCausalityValue() path = movement.getCausalityValue()
......
...@@ -137,7 +137,7 @@ class ExplanationCache: ...@@ -137,7 +137,7 @@ class ExplanationCache:
if not isinstance(value, dict): if not isinstance(value, dict):
# We have a real root # We have a real root
result.append('%s/%s' % (prefix, key)) result.append('%s/%s' % (prefix, key))
result.append('%s/%s/%%' % (prefix, key)) result.append(('%s/%s/%%' % (prefix, key)).replace('_', r'\_'))
# XXX-JPS here we must add all parent movements XXX-JPS # XXX-JPS here we must add all parent movements XXX-JPS
else: else:
browsePathDict('%s/%s' % (prefix, key), value) # Recursing with string append is slow XXX-JPS browsePathDict('%s/%s' % (prefix, key), value) # Recursing with string append is slow XXX-JPS
...@@ -262,7 +262,7 @@ class ExplanationCache: ...@@ -262,7 +262,7 @@ class ExplanationCache:
if simulation_path.startswith(path): if simulation_path.startswith(path):
# Only keep a path pattern which matches current simulation movement # Only keep a path pattern which matches current simulation movement
path_set.add(path) path_set.add(path)
path_set.add("%s/%%" % path) path_set.add("%s/%%" % path.replace('_', r'\_'))
# Lookup in cache based on path_tuple # Lookup in cache based on path_tuple
path_tuple = tuple(path_set) # XXX-JPS is the order guaranteed here ? path_tuple = tuple(path_set) # XXX-JPS is the order guaranteed here ?
......
...@@ -58,7 +58,7 @@ follow_up_related_document_list = portal_catalog(\n ...@@ -58,7 +58,7 @@ follow_up_related_document_list = portal_catalog(\n
portal_type=portal_type,\n portal_type=portal_type,\n
follow_up_uid=context.getUid(), **kw)\n follow_up_uid=context.getUid(), **kw)\n
\n \n
kw[\'query\'] = Query(relative_url=\'%s/%%\' % context.getRelativeUrl())\n kw[\'query\'] = Query(relative_url=\'%s/%%\' % context.getRelativeUrl().replace(\'_\', r\'\\_\'))\n
if follow_up_related_document_list:\n if follow_up_related_document_list:\n
kw[\'query\'] = ComplexQuery(\n kw[\'query\'] = ComplexQuery(\n
kw[\'query\'],\n kw[\'query\'],\n
......
41041 41042
\ No newline at end of file \ No newline at end of file
  • @seb has just pointed out that for consistency, the escaping should be done directly inside ZSQLCatalog, since DefaultKey only switches to LIKE on a % char, and I doubt we want to change DefaultKey to also switch on _.

    /cc @vpelletier

  • I indeed doubt we want to trigger MATCH on underscores (which is unfortunate IMHO, it should have happened from day 1, but it's harder to change since then).

    About escaping it, where do you propose it to happen ? DefaultKey only ? I know I used underscore as a wildcard in the past, although not often, and I do not clearly remember using it in any script (rather in listbox filters).

    /cc @seb @jm

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