woocommerce/plugins/woocommerce-admin/docs/data.md

84 lines
2.6 KiB
Markdown
Raw Normal View History

Data
====
Data store refactor (https://github.com/woocommerce/woocommerce-admin/pull/2961) * Base Report data store utility functions - 1 Standardizing the data store classes will be easier if the base class contains simple utility functions that can replace logic implemented in multiple data stores. - set_db_table_name() assigns a WP DB table name class variable for the data store - get_db_table_name() retrieves the WP DB table name - prepend_table_name() prepends a field in a query fragment with the data store table name * add context, clause handling, and filters to reports data store * add generated SQL clauses to class properties * reduce id getter logic to single function with filter, add phpdocs to new filters * update table_name to private string for use in constructor * extract SQL query clause handling to its own class - Will allow for use in subquery processing without creating a get_data stub - Swap parameter order in add_sql_clause for readability - Add support for clearing multple clauses in one call * add context var to SqlQuery class * implement SqlQuery in Categories data store * implement subquery in categories data store * coupons data stores, more underlying refactor - fix warnings - make filtered id functions static - add limit parameter handling - update coupons data store - update coupon stats data store * refactor coupon stats data store * refactor customers and customer stats data stores * add context to subqueries * add missed prepend table name call * refactor downloads data store, fix some warnings * fix warnings, add separator parameter to filtered IDs * refactor taxes and tax stats data stores * refactor variations data store * refactor product and product stats data stores * make table_name static throughout for compat with static hook functions * refactor order and order stats datastores - use consistent visibility on initialize_queries() - update db_table_name logic to use static keyword instead of self * fix missed whitespace * fix segmenting query, add SqlQuery join clause * DRY data store constructors, class properties * prefix table name when not yet assigned * fix unit tests, interpolations, WPDB delete calls * DRY get_object_where_filter() * remove redundant table prefix from unit test init * fix refactored SQL queries * restore product paging * remove unused query param arrays * add first pass on data docs readme * remove debug code, errant SQL spacing * refactor out outer_from query element * merge wheres, joins before filtering * move all report column definitions to assign_report_columns * fix data readme markdown * small code formating fixes from review * remove static from query/datastore context * missed self:: in previous, add comments, small code moves * rename get_statement() to get_query_statement() * remove temporary query references * static reference, remove reference parameter, fix coupon compare * add todo reminders * use correct query parameter in coupon data stores
2019-11-07 17:28:37 +00:00
WooCommerce Admin data stores implement the [`SqlQuery` class](https://github.com/woocommerce/woocommerce-admin/blob/master/src/API/Reports/SqlQuery.php).
### SqlQuery Class
The `SqlQuery` class is a SQL Query statement object. Its properties consist of
- A `context` string identifying the context of the query.
- SQL clause (`type`) string arrays used to construct the SQL statement:
- `select`
- `from`
- `right_join`
- `join`
- `left_join`
- `where`
- `where_time`
- `group_by`
- `having`
- `order_by`
- `limit`
### Reports Data Stores
The base DataStore `Automattic\WooCommerce\Admin\API\Reports\DataStore` extends the `SqlQuery` class. The implementation data store classes use the following `SqlQuery` instances:
| Data Store | Context | Class Query | Sub Query | Interval Query | Total Query |
| ---------- | ------- | ----------- | --------- | -------------- | ----------- |
| Categories | categories | Yes | Yes | - | - |
| Coupons | coupons | Yes | Yes | - | - |
| Coupon Stats | coupon_stats | Yes | - | Yes | Yes |
| Customers | customers | Yes | Yes | - | - |
| Customer Stats | customer_stats | Yes | - | Yes | Yes |
| Downloads | downloads | Yes | Yes | - | - |
| Download Stats | download_stats | Yes | - | Yes | Yes |
| Orders | orders | Yes | Yes | - | - |
| Order Stats | order_stats | Yes | - | Yes | Yes |
| Products | products | Yes | Yes | - | - |
| Product Stats | product_stats | Yes | - | Yes | Yes |
| Taxes | taxes | Yes | Yes | - | - |
| Tax Stats | tax_stats | Yes | - | Yes | Yes |
| Variations | variations | Yes | Yes | - | - |
Query contexts are named as follows:
- Class Query = Class Context
- Sub Query = Class Context + `_subquery`
- Interval Query = Class Context + `_interval`
- Total Query = Class Context + `_total`
### Filters
When getting the full statement the clause arrays are passed through two filters where `$context` is the query object context and `$type` is:
- `select`
- `from`
- `join` = `right_join` + `join` + `left_join`
- `where` = `where` + `where_time`
- `group_by`
- `having`
- `order_by`
- `limit`
The filters are:
- `apply_filters( "wc_admin_clauses_{$type}", $clauses, $context );`
- `apply_filters( "wc_admin_clauses_{$type}_{$context}", $clauses );`
Example usage
```
add_filter( 'wc_admin_clauses_product_stats_select_total', 'my_custom_product_stats' );
/**
* Add sample data to product stats totals.
*
* @param array $clauses array of SELECT clauses.
* @return array
*/
function my_custom_product_stats( $clauses ) {
$clauses[] = ', SUM( sample_column ) as sample_total';
return $clauses;
}
```