Automattic\WooCommerce\Internal\Admin\Reports

HposLegacyOrderReportQueryBuilder::build_data_select_and_joins │ private │ WC 1.0

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 $data array.
$value(array) (required)
The $data row.

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,
	);
}