Files
email-tracker/external/duckdb/test/sql/pivot/multi_statement_parsing.cpp
2025-10-24 19:21:19 -05:00

31 lines
1.1 KiB
C++

#include "catch.hpp"
#include "test_helpers.hpp"
using namespace duckdb;
using namespace std;
// This test that the parser keeps statements in the right order, also when a multi-statement (i.e. a PIVOT is included
// See https://github.com/duckdb/duckdb/issues/18710
TEST_CASE("Parsing multiple statements including a PIVOT in one go results in a correctly ordered list", "[pivot][.]") {
DuckDB db(nullptr);
Connection con(db);
auto query = "PIVOT (SELECT 'a' AS col) ON col using first(col);SELECT 42;";
// Check that the SELECT 42 statement is last in the parsed statements list
auto statements = con.context->ParseStatements(query);
REQUIRE(statements.size() == 3);
// REQUIRE(statements.back()->query == "SELECT 42;");
// Execute the query
auto result = con.Query(query);
// We expect two results
REQUIRE(result);
REQUIRE(result->next);
REQUIRE(result->next->next == nullptr);
// The first result should be that of the PIVOT statement
REQUIRE(CHECK_COLUMN(result, 0, {"a"}));
// The second result should be 42
REQUIRE(CHECK_COLUMN(result->next, 0, {42}));
}