Показать заголовки, когда товаров нет

Ответы получены от MySQL через X Protocol. Созданные программой учебные объекты после чтения удалены.

Наблюдаемый результат программы
НаблюдениеРезультат
Заголовки TableSelectsku, product_name
Колонок TableSelect2
Строк TableSelect0
Имена полей SQLНе предоставлены: []
Колонок SQL0
Строк SQL0
Сообщение экранаПо фильтру товары не найдены
Описаний SQL0
Класс metadata TableSelectmysql_xdevapi\ColumnResult
Заголовки экранаАртикул, Товар
Взяты из контракта проекциида
Строки и дополнительные наблюдения
{
    "row_metadata": [
        {
            "class": "mysql_xdevapi\\ColumnResult",
            "label": "sku",
            "name": "sku",
            "table_label": "mysql142_empty_screen_202756146a72",
            "table_name": "mysql142_empty_screen_202756146a72",
            "schema": "php_manual_x139",
            "type": 21,
            "length": 48,
            "fractional_digits": 0,
            "signed": false,
            "padded": false,
            "charset": "utf8mb4",
            "collation": "utf8mb4_0900_ai_ci"
        },
        {
            "class": "mysql_xdevapi\\ColumnResult",
            "label": "product_name",
            "name": "name",
            "table_label": "mysql142_empty_screen_202756146a72",
            "table_name": "mysql142_empty_screen_202756146a72",
            "schema": "php_manual_x139",
            "type": 21,
            "length": 160,
            "fractional_digits": 0,
            "signed": false,
            "padded": false,
            "charset": "utf8mb4",
            "collation": "utf8mb4_0900_ai_ci"
        }
    ],
    "sql_metadata": [],
    "row_rows": [],
    "sql_rows": [],
    "row_names": [
        "sku",
        "product_name"
    ],
    "sql_names": [],
    "row_count": 2,
    "sql_count": 0,
    "expected_projection": [
        "sku",
        "product_name"
    ],
    "display_labels": [
        "sku",
        "product_name"
    ],
    "headers": [
        "Артикул",
        "Товар"
    ],
    "fallback_used": true,
    "message": "По фильтру товары не найдены"
}

Полный JSON результата, включая реальные идентификаторы, сохранён рядом в result.json.