Automattic\WooCommerce\Internal\DataStores\Orders

OrdersTableStatusUnionQuery::get_sqlpublicWC 11.0.0

Returns the rewritten SQL query, or NULL when the query is not eligible for the rewrite.

Method of the class: OrdersTableStatusUnionQuery{}

No Hooks.

Returns

String|null. The rewritten SQL query, or NULL if the query is not eligible.

Usage

$OrdersTableStatusUnionQuery = new OrdersTableStatusUnionQuery();
$OrdersTableStatusUnionQuery->get_sql( $clauses, $suppress_filters ): ?string;
$clauses(string[]) (required)
Associative array with the final 'fields', 'join', 'where', 'groupby', 'orderby' and 'limits' clauses (the latter four including their keywords).
$suppress_filters(true|false) (required)
Whether the query is running with filters suppressed.

Changelog

Since 11.0.0 Introduced.

OrdersTableStatusUnionQuery::get_sql() code WC 11.0.0

public function get_sql( array $clauses, bool $suppress_filters ): ?string {
	// Each step either extracts a validated piece of the rewrite or bails out (returns null) when the query
	// isn't the plain "type + status, ordered by creation date" shape we can safely rewrite. The UNION is only
	// assembled once every piece is in place.
	if ( ! $this->has_rewritable_clause_shape( $clauses ) ) {
		return null;
	}

	$direction = $this->extract_order_direction( $clauses['orderby'] ?? '' );
	if ( null === $direction ) {
		return null;
	}

	$limit = $this->extract_limit( $clauses['limits'] ?? '' );
	if ( null === $limit ) {
		return null;
	}

	$types_and_statuses = $this->extract_types_and_statuses();
	if ( null === $types_and_statuses ) {
		return null;
	}
	list( $types, $statuses ) = $types_and_statuses;

	if ( ! $this->is_enabled( $types, $statuses, $suppress_filters ) ) {
		return null;
	}

	if ( ! $this->where_matches_type_status_args( $clauses['where'] ?? '' ) ) {
		return null;
	}

	list( $offset, $row_count ) = $limit;

	return $this->build_union_sql( $types, $statuses, $direction, $offset + $row_count, $clauses['limits'] ?? '' );
}