|
45 | 45 |
|
46 | 46 | ON_DELETE_ACTIONS = frozenset(("SET NULL", "CASCADE", "RESTRICT", "NO ACTION", "SET DEFAULT"))
|
47 | 47 | MAX_BUCKETS = int(os.getenv("MAX_BUCKETS", "150000"))
|
| 48 | +PARALLEL_FILTER = "{parallel_filter}" |
48 | 49 |
|
49 | 50 |
|
50 | 51 | class PGRegexp(str):
|
@@ -252,9 +253,9 @@ def explode_query_range(cr, query, table, alias=None, bucket_size=10000, prefix=
|
252 | 253 |
|
253 | 254 | alias = alias or table
|
254 | 255 |
|
255 |
| - if "{parallel_filter}" not in query: |
| 256 | + if PARALLEL_FILTER not in query: |
256 | 257 | sep_kw = " AND " if re.search(r"\sWHERE\s", query, re.M | re.I) else " WHERE "
|
257 |
| - query += sep_kw + "{parallel_filter}" |
| 258 | + query += sep_kw + PARALLEL_FILTER |
258 | 259 |
|
259 | 260 | cr.execute(format_query(cr, "SELECT min(id), max(id) FROM {}", table))
|
260 | 261 | min_id, max_id = cr.fetchone()
|
@@ -297,10 +298,10 @@ def explode_query_range(cr, query, table, alias=None, bucket_size=10000, prefix=
|
297 | 298 | # Still, since the query may only be valid if there is no split, we force the usage of `prefix` in the query to
|
298 | 299 | # validate its correctness and avoid scripts that pass the CI but fail in production.
|
299 | 300 | parallel_filter = "{alias}.id IS NOT NULL".format(alias=alias)
|
300 |
| - return [query.replace("{parallel_filter}", parallel_filter)] |
| 301 | + return [query.replace(PARALLEL_FILTER, parallel_filter)] |
301 | 302 |
|
302 | 303 | parallel_filter = "{alias}.id BETWEEN %(lower-bound)s AND %(upper-bound)s".format(alias=alias)
|
303 |
| - query = query.replace("%", "%%").replace("{parallel_filter}", parallel_filter) |
| 304 | + query = query.replace("%", "%%").replace(PARALLEL_FILTER, parallel_filter) |
304 | 305 | return [
|
305 | 306 | cr.mogrify(query, {"lower-bound": ids[i], "upper-bound": ids[i + 1] - 1}).decode() for i in range(len(ids) - 1)
|
306 | 307 | ]
|
|
0 commit comments