LCOV - code coverage report
Current view: top level - backend/engine/semantic - scan_eval_aggregate_deferred_test.cc (source / functions) Coverage Total Hit
Test: _coverage_report.dat Lines: 100.0 % 39 39
Test Date: 2026-07-02 21:01:18 Functions: 100.0 % 1 1

            Line data    Source code
       1              : #include <memory>
       2              : #include <utility>
       3              : #include <vector>
       4              : 
       5              : #include "backend/engine/semantic/eval_context.h"
       6              : #include "backend/engine/semantic/scan_eval.h"
       7              : #include "backend/engine/semantic/value.h"
       8              : #include "googlesql/public/types/type_factory.h"
       9              : #include "googlesql/public/value.h"
      10              : #include "googlesql/resolved_ast/resolved_ast.h"
      11              : #include "gtest/gtest.h"
      12              : 
      13              : namespace bigquery_emulator {
      14              : namespace backend {
      15              : namespace engine {
      16              : namespace semantic {
      17              : namespace {
      18              : 
      19            1 : TEST(ScanEvalAggregateDeferredTest, DeferredComputedColumnEvaluatesValue) {
      20            1 :   ::googlesql::TypeFactory type_factory;
      21            1 :   const ::googlesql::Type* int64 = type_factory.get_int64();
      22            1 :   const ::googlesql::Type* bytes = type_factory.get_bytes();
      23              : 
      24            1 :   ::googlesql::ResolvedColumn out_col(
      25            1 :       /*column_id=*/300,
      26            1 :       ::googlesql::IdString::MakeGlobal("$query"),
      27            1 :       ::googlesql::IdString::MakeGlobal("v"),
      28            1 :       int64);
      29            1 :   ::googlesql::ResolvedColumn side_col(
      30            1 :       /*column_id=*/301,
      31            1 :       ::googlesql::IdString::MakeGlobal("$query"),
      32            1 :       ::googlesql::IdString::MakeGlobal("_se"),
      33            1 :       bytes);
      34              : 
      35            1 :   std::vector<std::unique_ptr<const ::googlesql::ResolvedComputedColumnBase>>
      36            1 :       aggregate_list;
      37            1 :   aggregate_list.push_back(::googlesql::MakeResolvedDeferredComputedColumn(
      38            1 :       out_col,
      39            1 :       ::googlesql::MakeResolvedLiteral(::googlesql::Value::Int64(7)),
      40            1 :       side_col));
      41              : 
      42            1 :   auto agg_scan = ::googlesql::MakeResolvedAggregateScan(
      43            1 :       /*column_list=*/{out_col, side_col},
      44            1 :       ::googlesql::MakeResolvedSingleRowScan(),
      45            1 :       /*group_by_list=*/{},
      46            1 :       std::move(aggregate_list),
      47            1 :       /*grouping_set_list=*/{},
      48            1 :       /*rollup_column_list=*/{});
      49              : 
      50            1 :   EvalContext ctx{.project_id = "test"};
      51            1 :   auto rows_or = MaterializeScan(agg_scan.get(), ctx);
      52            2 :   ASSERT_TRUE(rows_or.ok()) << rows_or.status();
      53            1 :   ASSERT_EQ(rows_or->size(), 1u);
      54            1 :   const ColumnBindings& row = rows_or->at(0);
      55            1 :   auto vit = row.find(out_col.column_id());
      56            1 :   ASSERT_NE(vit, row.end());
      57            1 :   EXPECT_EQ(vit->second.int64_value(), 7);
      58            1 :   auto sit = row.find(side_col.column_id());
      59            1 :   ASSERT_NE(sit, row.end());
      60            1 :   EXPECT_TRUE(sit->second.is_null());
      61            1 : }
      62              : 
      63              : }  // namespace
      64              : }  // namespace semantic
      65              : }  // namespace engine
      66              : }  // namespace backend
      67              : }  // namespace bigquery_emulator
        

Generated by: LCOV version 2.0-1