[PERF] account_reconcile_model_oca: add CTE to invoice amls candidates query
Backport of odoo/enterprise#64754.
This commit adds a CTE at the beginning of the invoice matching
amls candidate to speedup the whole query. More info and speedup
in PR above
Related to f396bc2f1f
pull/819/head
parent
6d53fcd7f8
commit
f9078dc573
|
@ -399,11 +399,29 @@ class AccountReconcileModel(models.Model):
|
||||||
|
|
||||||
sub_queries = []
|
sub_queries = []
|
||||||
all_params = []
|
all_params = []
|
||||||
|
aml_cte = ""
|
||||||
(
|
(
|
||||||
numerical_tokens,
|
numerical_tokens,
|
||||||
exact_tokens,
|
exact_tokens,
|
||||||
_text_tokens,
|
_text_tokens,
|
||||||
) = self._get_invoice_matching_st_line_tokens(st_line)
|
) = self._get_invoice_matching_st_line_tokens(st_line)
|
||||||
|
if numerical_tokens or exact_tokens:
|
||||||
|
aml_cte = rf"""
|
||||||
|
WITH aml_cte AS (
|
||||||
|
SELECT
|
||||||
|
account_move_line.id as account_move_line_id,
|
||||||
|
account_move_line.date as account_move_line_date,
|
||||||
|
account_move_line.date_maturity as account_move_line_date_maturity,
|
||||||
|
account_move_line.name as account_move_line_name,
|
||||||
|
account_move_line__move_id.name as account_move_line__move_id_name,
|
||||||
|
account_move_line__move_id.ref as account_move_line__move_id_ref
|
||||||
|
FROM {from_clause}
|
||||||
|
JOIN account_move account_move_line__move_id
|
||||||
|
ON account_move_line__move_id.id = account_move_line.move_id
|
||||||
|
WHERE {where_clause}
|
||||||
|
)
|
||||||
|
""" # noqa: E501
|
||||||
|
all_params += where_params
|
||||||
if numerical_tokens:
|
if numerical_tokens:
|
||||||
for table_alias, field in (
|
for table_alias, field in (
|
||||||
("account_move_line", "name"),
|
("account_move_line", "name"),
|
||||||
|
@ -413,27 +431,24 @@ class AccountReconcileModel(models.Model):
|
||||||
sub_queries.append(
|
sub_queries.append(
|
||||||
rf"""
|
rf"""
|
||||||
SELECT
|
SELECT
|
||||||
account_move_line.id,
|
account_move_line_id as id,
|
||||||
account_move_line.date,
|
account_move_line_date as date,
|
||||||
account_move_line.date_maturity,
|
account_move_line_date_maturity as date_maturity,
|
||||||
UNNEST(
|
UNNEST(
|
||||||
REGEXP_SPLIT_TO_ARRAY(
|
REGEXP_SPLIT_TO_ARRAY(
|
||||||
SUBSTRING(
|
SUBSTRING(
|
||||||
REGEXP_REPLACE(
|
REGEXP_REPLACE(
|
||||||
{table_alias}.{field}, '[^0-9\s]', '', 'g'
|
{table_alias}_{field}, '[^0-9\s]', '', 'g'
|
||||||
),
|
),
|
||||||
'\S(?:.*\S)*'
|
'\S(?:.*\S)*'
|
||||||
),
|
),
|
||||||
'\s+'
|
'\s+'
|
||||||
)
|
)
|
||||||
) AS token
|
) AS token
|
||||||
FROM {from_clause}
|
FROM aml_cte
|
||||||
JOIN account_move account_move_line__move_id
|
WHERE {table_alias}_{field} IS NOT NULL
|
||||||
ON account_move_line__move_id.id = account_move_line.move_id
|
|
||||||
WHERE {where_clause} AND {table_alias}.{field} IS NOT NULL
|
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
all_params += where_params
|
|
||||||
|
|
||||||
if exact_tokens:
|
if exact_tokens:
|
||||||
for table_alias, field in (
|
for table_alias, field in (
|
||||||
|
@ -444,22 +459,20 @@ class AccountReconcileModel(models.Model):
|
||||||
sub_queries.append(
|
sub_queries.append(
|
||||||
rf"""
|
rf"""
|
||||||
SELECT
|
SELECT
|
||||||
account_move_line.id,
|
account_move_line_id as id,
|
||||||
account_move_line.date,
|
account_move_line_date as date,
|
||||||
account_move_line.date_maturity,
|
account_move_line_date_maturity as date_maturity,
|
||||||
{table_alias}.{field} AS token
|
{table_alias}_{field} AS token
|
||||||
FROM {from_clause}
|
FROM aml_cte
|
||||||
JOIN account_move account_move_line__move_id
|
WHERE COALESCE({table_alias}_{field}, '') != ''
|
||||||
ON account_move_line__move_id.id = account_move_line.move_id
|
|
||||||
WHERE {where_clause} AND COALESCE({table_alias}.{field}, '') != ''
|
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
all_params += where_params
|
|
||||||
|
|
||||||
if sub_queries:
|
if sub_queries:
|
||||||
order_by = get_order_by_clause(alias="sub")
|
order_by = get_order_by_clause(alias="sub")
|
||||||
self._cr.execute(
|
self._cr.execute(
|
||||||
"""
|
aml_cte
|
||||||
|
+ """
|
||||||
SELECT
|
SELECT
|
||||||
sub.id,
|
sub.id,
|
||||||
COUNT(*) AS nb_match
|
COUNT(*) AS nb_match
|
||||||
|
|
Loading…
Reference in New Issue