[wp-trac] [WordPress Trac] #55942: Add a "value type" parameter to get_option() and get_metadata() (was: Add a "type" field to the meta and options tables)

WordPress Trac noreply at wordpress.org
Wed Apr 26 23:44:55 UTC 2023


#55942: Add a "value type" parameter to get_option() and get_metadata()
-------------------------------------------------+-------------------------
 Reporter:  azaozz                               |       Owner:  (none)
     Type:  enhancement                          |      Status:  new
 Priority:  normal                               |   Milestone:  6.3
Component:  Options, Meta APIs                   |     Version:
 Severity:  normal                               |  Resolution:
 Keywords:  has-patch has-unit-tests needs-      |     Focuses:
  testing                                        |  performance
-------------------------------------------------+-------------------------
Changes (by azaozz):

 * component:  Database => Options, Meta APIs


Old description:

> The idea to add a `type` or `format` field to all meta and options tables
> is not new, has been "floating around" for years. The general idea it
> that if some data is (automatically) serialized before saving to the DB,
> it will be (automatically) unserialized after retrieving it based on the
> value of the new field. This will make the `maybe_unserialize()` and
> `is_serialized()` functions pretty much redundant when retrieving data
> from these tables. It will also improve the performance and stability.
>
> The new field can be very small. Seems that a `TINYINT` (requires only 1
> byte of storage) would work there. Can also be something like
> `VARCHAR(20)` that may eventually prove more useful in the future, but
> perhaps the increase in size would not be worth it.

New description:

 Update: This ticket had to be somewhat repurposed as it became clear that
 with the initial approach there's no good way to ensure full backwards
 compatibility in `get_option()` and `get_metadata()`.

 The initial idea to support "strict" types of the options and meta values
 remains the same, but the implementation has changed. The new approach is
 to add another parameter to the above functions. This would ensure 100%
 backwards compatibility and at the same time will provide approximately
 the same benefits:

 - Consistent types of the return values from `get_option()`,
 `get_metadata()`.
 - Reduced use of `maybe_unserialize()` and `is_serialized()`.

 The main differences are that the new approach is opt-in and doesn't
 require new table columns.

--

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/55942#comment:44>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list