odoo/enterprise#67925

Created by Framework (ORM), Chong Wang (cwg)
Merged at fb59524a95b0f78112002d1e4d5ad3d6c301de7e

Statuses:

label
odoo-dev:master-core-jsonb-company-dependent-cwg
head
733c4ba1fd5558891ffdbc67066c3a3a5938e2f0
merged
1 year ago by Framework (ORM), Chong Wang (cwg)
odoo/odoo odoo/enterprise odoo/upgrade odoo/upgrade-util
master #175627 #67925 #6366 #124

[IMP] core: jsonb company dependent fields

[IMP] core: jsonb company dependent fields
use jsonb for company dependent fields
1. field type
before: company dependent fields were non-stored and computed
now: company dependent fields are stored fields whose column type is
jsonb with the format like '{"1": val1}'::jsonb

  1. fallback
    before: fallbacks of company dependent fields were stored in
    ir_property.value_xxx WHERE res_id IS NULL
    now: fallbacks are stored in ir_default.json_value in the format of
    jsonfied write format

  2. many2one
    a. field.ondelete
    before: only field.ondelete='set null'
    now: support field.ondelete='set null' and field.ondelete='restrict'
    b. field.index
    before: no index
    now: default 'btree_not_null' which index (col IS NOT NULL) for all
    NOT NULL rows
    c. reference exists
    before: checked when get data from ir_property
    now: cleaned when orm unlink. As a side effect, if a model is
    referenced by a many2one company dependent field, this model
    cannot have any field.ondelete='cascade' field. The developer
    must override the unlink method to do the logical on delete
    cascade in the ORM

  3. _field_to_sql
    before: not supported for company dependent fields
    now: can be used by company dependent fields like normal fields to
    generate reports

odoo/odoo#175627

task-3954610