diff --git a/bi_view_editor/models/bve_view.py b/bi_view_editor/models/bve_view.py index 3039da31..1c10716f 100644 --- a/bi_view_editor/models/bve_view.py +++ b/bi_view_editor/models/bve_view.py @@ -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 diff --git a/bi_view_editor/readme/ROADMAP.rst b/bi_view_editor/readme/ROADMAP.rst index 32e4e2d0..b7e7bd0f 100644 --- a/bi_view_editor/readme/ROADMAP.rst +++ b/bi_view_editor/readme/ROADMAP.rst @@ -5,3 +5,4 @@ * Data the user has no access to (e.g. in a multi company situation) can be viewed by making a view. Would be nice if models available to select when creating a view are limited to the ones that have intersecting groups. +* Raise a warning in case the SQL query is not correct. diff --git a/bi_view_editor/readme/USAGE.rst b/bi_view_editor/readme/USAGE.rst index 986ce305..b243f0ef 100644 --- a/bi_view_editor/readme/USAGE.rst +++ b/bi_view_editor/readme/USAGE.rst @@ -21,3 +21,6 @@ To access the created BI View with a dedicated menu: A more advanced UI is also available under the "Details" tab. It provides extra possibilities for more advanced users, like to use LEFT JOIN instead of the default INNER JOIN. + +It also possible to improve the IDs generation for new views by adding an `Over Condition` in the "SQL" tab, see https://www.postgresql.org/docs/current/sql-expressions.html#SYNTAX-WINDOW-FUNCTIONS for further details. +For instance, an ORDER BY clause helps preventing unreliable behavior when filtering the generated views. diff --git a/bi_view_editor/views/bve_view.xml b/bi_view_editor/views/bve_view.xml index 2599fc67..101fa0e9 100644 --- a/bi_view_editor/views/bve_view.xml +++ b/bi_view_editor/views/bve_view.xml @@ -85,8 +85,9 @@ + - +