Automattic\WooCommerce\Internal\DataStores\Orders

OrdersTableSearchQuery::maybe_get_join_for_productsprivateWC 10.1.0

Returns a prepared JOIN fragment for products when FTS is enabled.

Method of the class: OrdersTableSearchQuery{}

No Hooks.

Returns

String. JOIN clause or empty string if FTS disabled.

Usage

// private - for code of main (parent) class only
$result = $this->maybe_get_join_for_products(): string;

Changelog

Since 10.1.0 Introduced.

OrdersTableSearchQuery::maybe_get_join_for_products() code WC 10.3.6

private function maybe_get_join_for_products(): string {
	global $wpdb;

	$db_util      = wc_get_container()->get( DatabaseUtil::class );
	$items_table  = $this->query->get_table_name( 'items' );
	$orders_table = $this->query->get_table_name( 'orders' );

	$fts_enabled = get_option( CustomOrdersTableController::HPOS_FTS_INDEX_OPTION ) === 'yes'
		&& get_option( CustomOrdersTableController::HPOS_FTS_ORDER_ITEM_INDEX_CREATED_OPTION ) === 'yes';

	if ( ! $fts_enabled ) {
		return '';
	}

	$search_pattern = $wpdb->esc_like( $db_util->sanitise_boolean_fts_search_term( $this->search_term ) );

	// phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
	// phpcs:disable WordPress.DB.PreparedSQL.NotPrepared
	return $wpdb->prepare(
		"LEFT JOIN (
			SELECT DISTINCT order_id
			FROM $items_table
			WHERE MATCH ( order_item_name ) AGAINST ( %s IN BOOLEAN MODE )
		) AS " . self::PRODUCTS_JOIN_ALIAS . ' ON ' . self::PRODUCTS_JOIN_ALIAS . ".order_id = $orders_table.id",
		$search_pattern
	);
	// phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
	// phpcs:enable WordPress.DB.PreparedSQL.NotPrepared
}