Automattic\WooCommerce\Internal\Admin\Reports
HposLegacyOrderReportQueryBuilder::build_data_select_and_joins
Resolve a single $data entry into a SELECT fragment plus the JOINs it requires.
Method of the class: HposLegacyOrderReportQueryBuilder{}
No Hooks.
Returns
array{select: string, joins: array<string,string>}|null. Null when the row has no resolvable type.
Usage
// private - for code of main (parent) class only $result = $this->build_data_select_and_joins( $raw_key, $value );
- $raw_key(string) (required)
- Original key from the
$dataarray. - $value(array) (required)
- The
$datarow.
HposLegacyOrderReportQueryBuilder::build_data_select_and_joins() HposLegacyOrderReportQueryBuilder::build data select and joins code WC 11.1.2
private function build_data_select_and_joins( $raw_key, $value ) {
$key = sanitize_key( $raw_key );
$distinct = isset( $value['distinct'] ) ? 'DISTINCT' : '';
$join_type = $value['join_type'] ?? 'INNER';
$type = $value['type'] ?? '';
$get_key = '';
$joins = array();
switch ( $type ) {
case 'meta':
list( $get_key, $joins ) = $this->resolve_meta_select( $raw_key, $key, $join_type );
break;
case 'parent_meta':
list( $get_key, $joins ) = $this->resolve_parent_meta_select( $raw_key, $key, $join_type );
break;
case 'post_data':
$get_key = $this->translate_post_column( $key );
break;
case 'order_item_meta':
$get_key = "order_item_meta_{$key}.meta_value";
$joins = $this->build_order_item_meta_joins( $key, $raw_key, $value['order_item_type'] ?? '', $join_type );
break;
case 'order_item':
$get_key = "order_items.{$key}";
$joins = $this->build_order_items_join( $join_type );
break;
}
if ( '' === $get_key ) {
return null;
}
// Only bare selects get the legacy money format; inside an aggregate the raw
// column must be used, as per-row rounding would accumulate error where the
// CPT path sums the unrounded meta values.
if ( ! $value['function'] && $this->is_money_meta_key( $type, $raw_key ) ) {
$get_key = $this->format_money_column( $get_key );
}
$expr = $value['function']
? "{$value['function']}({$distinct} {$get_key})"
: "{$distinct} {$get_key}";
return array(
'select' => "{$expr} as {$value['name']}",
'joins' => $joins,
);
}