bi_view_editor: window functions without ORDER BY clause do not have reliable behavior

This commit is contained in:
SimoRubi
2020-04-23 11:35:52 +02:00
committed by Andrea
parent 1426ab1b37
commit c76552c224
4 changed files with 22 additions and 3 deletions

View File

@@ -98,6 +98,19 @@ class BveView(models.Model):
compute='_compute_users',
store=True)
query = fields.Text(compute='_compute_sql_query')
over_condition = fields.Text(
states={
'draft': [
('readonly', False),
],
},
readonly=True,
help="Condition to be inserted in the OVER part "
"of the ID's row_number function.\n"
"For instance, 'ORDER BY t1.id' would create "
"IDs ordered in the same way as t1's IDs; otherwise "
"IDs are assigned with no specific order.",
)
er_diagram_image = fields.Binary(compute='_compute_er_diagram_image')
_sql_constraints = [
@@ -285,11 +298,12 @@ class BveView(models.Model):
self.env.cr.execute('CREATE or REPLACE VIEW %s as (%s)', (
AsIs(view_name), AsIs(query), ))
@api.depends('line_ids', 'state')
@api.depends('line_ids', 'state', 'over_condition')
def _compute_sql_query(self):
for bve_view in self:
tables_map = {}
select_str = '\n CAST(row_number() OVER () as integer) AS id'
select_str = '\n CAST(row_number() OVER ({}) as integer) AS id' \
.format(bve_view.over_condition or '')
for line in bve_view.field_ids:
table = line.table_alias
select = line.field_id.name