diff --git a/cpp/src/column/column_factories.cu b/cpp/src/column/column_factories.cu index 8f21da3e5c5b..0941896343bd 100644 --- a/cpp/src/column/column_factories.cu +++ b/cpp/src/column/column_factories.cu @@ -106,7 +106,6 @@ std::unique_ptr column_from_scalar_dispatch::operator() const&>(value); auto iter = cuda::make_constant_iterator(0); diff --git a/cpp/tests/column/factories_test.cpp b/cpp/tests/column/factories_test.cpp index 310fc6ed93c1..1ea5827d48f1 100644 --- a/cpp/tests/column/factories_test.cpp +++ b/cpp/tests/column/factories_test.cpp @@ -762,6 +762,24 @@ TEST_F(ColumnFactoryTest, FromStructScalar) { struct_from_scalar(true); } TEST_F(ColumnFactoryTest, FromStructScalarNull) { struct_from_scalar(false); } +void struct_from_scalar_zero_size(bool is_valid) +{ + cudf::test::fixed_width_column_wrapper col0{1}; + cudf::test::strings_column_wrapper col1{"abc"}; + cudf::test::lists_column_wrapper col2{{1, 2, 3}}; + + std::vector src_children({col0, col1, col2}); + auto value = cudf::struct_scalar(src_children, is_valid); + auto result = cudf::make_column_from_scalar(value, 0); + + auto const expected = cudf::empty_like(cudf::make_column_from_scalar(value, 1)->view()); + CUDF_TEST_EXPECT_COLUMNS_EQUAL(*result, *expected); +} + +TEST_F(ColumnFactoryTest, FromStructScalarWithZeroSize) { struct_from_scalar_zero_size(true); } + +TEST_F(ColumnFactoryTest, FromStructScalarNullWithZeroSize) { struct_from_scalar_zero_size(false); } + TEST_F(ColumnFactoryTest, FromScalarErrors) { if (cudf::strings::is_large_strings_enabled()) { return; } diff --git a/python/cudf_polars/tests/expressions/test_struct.py b/python/cudf_polars/tests/expressions/test_struct.py index d5e16d4701fe..94b19aee4760 100644 --- a/python/cudf_polars/tests/expressions/test_struct.py +++ b/python/cudf_polars/tests/expressions/test_struct.py @@ -132,3 +132,9 @@ def test_struct_literal_field_is_broadcast( ) q = df.select(pl.struct("a", x="c", y=literal).alias("struct").struct.field("y")) assert_gpu_result_equal(q, engine=engine) + + +def test_group_by_struct_of_literals_empty_frame(engine: pl.GPUEngine) -> None: + df = pl.LazyFrame({"g": [10, 10, 20], "n": [1, 2, 3]}).head(0) + q = df.group_by("g").agg(pl.struct(pl.lit(7).alias("lhs"), pl.lit(7).alias("rhs"))) + assert_gpu_result_equal(q, engine=engine, check_row_order=False)