diff --git a/src/paimon/format/parquet/predicate_converter_test.cpp b/src/paimon/format/parquet/predicate_converter_test.cpp index 542ea0f4..ba7664c4 100644 --- a/src/paimon/format/parquet/predicate_converter_test.cpp +++ b/src/paimon/format/parquet/predicate_converter_test.cpp @@ -32,6 +32,16 @@ namespace paimon::parquet::test { +namespace { + +// Use an explicit int64_t literal for BIGINT predicates. On macOS arm64, `long` and +// `int64_t` are distinct types, so `Literal(5l)` may instantiate `Literal`. +Literal BigIntLiteral(int64_t value) { + return Literal(value); +} + +} // namespace + TEST(PredicateConverterTest, TestSimple) { // "struct"; { @@ -50,7 +60,7 @@ TEST(PredicateConverterTest, TestSimple) { } { auto predicate = PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + FieldType::BIGINT, BigIntLiteral(5)); ASSERT_OK_AND_ASSIGN(auto expression, PredicateConverter::Convert( predicate, /*predicate_node_count_limit=*/100)); ASSERT_EQ("(f0 == 5)", expression.ToString()); @@ -71,21 +81,21 @@ TEST(PredicateConverterTest, TestSimple) { } { auto predicate = PredicateBuilder::NotEqual(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + FieldType::BIGINT, BigIntLiteral(5)); ASSERT_OK_AND_ASSIGN(auto expression, PredicateConverter::Convert( predicate, /*predicate_node_count_limit=*/100)); ASSERT_EQ("(f0 != 5)", expression.ToString()); } { auto predicate = PredicateBuilder::GreaterThan(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + FieldType::BIGINT, BigIntLiteral(5)); ASSERT_OK_AND_ASSIGN(auto expression, PredicateConverter::Convert( predicate, /*predicate_node_count_limit=*/100)); ASSERT_EQ("(f0 > 5)", expression.ToString()); } { auto predicate = PredicateBuilder::GreaterOrEqual(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + FieldType::BIGINT, BigIntLiteral(5)); ASSERT_OK_AND_ASSIGN(auto expression, PredicateConverter::Convert( predicate, /*predicate_node_count_limit=*/100)); ASSERT_EQ("(f0 >= 5)", expression.ToString()); @@ -100,14 +110,14 @@ TEST(PredicateConverterTest, TestSimple) { } { auto predicate = PredicateBuilder::LessThan(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + FieldType::BIGINT, BigIntLiteral(5)); ASSERT_OK_AND_ASSIGN(auto expression, PredicateConverter::Convert( predicate, /*predicate_node_count_limit=*/100)); ASSERT_EQ("(f0 < 5)", expression.ToString()); } { auto predicate = PredicateBuilder::LessOrEqual(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(5l)); + FieldType::BIGINT, BigIntLiteral(5)); ASSERT_OK_AND_ASSIGN(auto expression, PredicateConverter::Convert( predicate, /*predicate_node_count_limit=*/100)); ASSERT_EQ("(f0 <= 5)", expression.ToString()); @@ -115,7 +125,7 @@ TEST(PredicateConverterTest, TestSimple) { { auto predicate = PredicateBuilder::In(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - {Literal(1l), Literal(3l), Literal(5l)}); + {BigIntLiteral(1), BigIntLiteral(3), BigIntLiteral(5)}); ASSERT_OK_AND_ASSIGN(auto expression, PredicateConverter::Convert( predicate, /*predicate_node_count_limit=*/100)); ASSERT_EQ("(((f0 == 1) or (f0 == 3)) or (f0 == 5))", expression.ToString()); @@ -123,7 +133,7 @@ TEST(PredicateConverterTest, TestSimple) { { auto predicate = PredicateBuilder::NotIn(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - {Literal(1l), Literal(3l), Literal(5l)}); + {BigIntLiteral(1), BigIntLiteral(3), BigIntLiteral(5)}); ASSERT_OK_AND_ASSIGN(auto expression, PredicateConverter::Convert( predicate, /*predicate_node_count_limit=*/100)); ASSERT_EQ("(((f0 != 1) and (f0 != 3)) and (f0 != 5))", expression.ToString()); @@ -320,7 +330,7 @@ TEST(PredicateConverterTest, TestCompound) { auto predicate, PredicateBuilder::And({ PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - Literal(3l)), + BigIntLiteral(3)), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.0))), PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", FieldType::STRING, @@ -349,7 +359,7 @@ TEST(PredicateConverterTest, TestCompound) { auto predicate, PredicateBuilder::Or({ PredicateBuilder::Equal(/*field_index=*/0, /*field_name=*/"f0", FieldType::BIGINT, - Literal(3l)), + BigIntLiteral(3)), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.0))), PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", FieldType::STRING, @@ -370,7 +380,7 @@ TEST(PredicateConverterTest, TestCompound) { {PredicateBuilder::Equal(/*field_index=*/3, /*field_name=*/"f3", FieldType::BOOLEAN, Literal(true)), PredicateBuilder::LessThan(/*field_index=*/0, /*field_name=*/"f0", - FieldType::BIGINT, Literal(3l))}) + FieldType::BIGINT, BigIntLiteral(3))}) .value(), PredicateBuilder::And( {PredicateBuilder::Equal(/*field_index=*/3, /*field_name=*/"f3", diff --git a/src/paimon/format/parquet/predicate_pushdown_test.cpp b/src/paimon/format/parquet/predicate_pushdown_test.cpp index 3d169db3..9723794e 100644 --- a/src/paimon/format/parquet/predicate_pushdown_test.cpp +++ b/src/paimon/format/parquet/predicate_pushdown_test.cpp @@ -55,6 +55,16 @@ class Predicate; namespace paimon::parquet::test { +namespace { + +// Use an explicit int64_t literal for BIGINT predicates. On macOS arm64, `long` and +// `int64_t` are distinct types, so `Literal(5l)` may instantiate `Literal`. +Literal BigIntLiteral(int64_t value) { + return Literal(value); +} + +} // namespace + class PredicatePushdownTest : public ::testing::Test { public: void SetUp() override { @@ -186,19 +196,19 @@ TEST_F(PredicatePushdownTest, TestIntDoubleData) { { // f2 != 4, has data auto predicate = PredicateBuilder::NotEqual(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(4l)); + FieldType::BIGINT, BigIntLiteral(4)); CheckResult(read_schema, predicate, expected_array); } { // f2 == 6, has data auto predicate = PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)); + FieldType::BIGINT, BigIntLiteral(6)); CheckResult(read_schema, predicate, expected_array); } { // f2 == 1, no data auto predicate = PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(1l)); + FieldType::BIGINT, BigIntLiteral(1)); CheckResult(read_schema, predicate, /*expected_array=*/ nullptr); } @@ -206,14 +216,14 @@ TEST_F(PredicatePushdownTest, TestIntDoubleData) { // f2 in [1,2,3], no data auto predicate = PredicateBuilder::In(/*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, - {Literal(1l), Literal(2l), Literal(3l)}); + {BigIntLiteral(1), BigIntLiteral(2), BigIntLiteral(3)}); CheckResult(read_schema, predicate, /*expected_array=*/nullptr); } { // f2 in [1,2,3] but has small predicate node limit, has data auto predicate = PredicateBuilder::In(/*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, - {Literal(1l), Literal(2l), Literal(3l)}); + {BigIntLiteral(1), BigIntLiteral(2), BigIntLiteral(3)}); CheckResult(read_schema, predicate, expected_array, /*predicate_node_count_limit=*/1); } @@ -221,21 +231,21 @@ TEST_F(PredicatePushdownTest, TestIntDoubleData) { // f2 not in [1,2,3], has data auto predicate = PredicateBuilder::NotIn(/*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, - {Literal(1l), Literal(2l), Literal(3l)}); + {BigIntLiteral(1), BigIntLiteral(2), BigIntLiteral(3)}); CheckResult(read_schema, predicate, expected_array); } { // f2 in [2,3,4], has data auto predicate = PredicateBuilder::In(/*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, - {Literal(2l), Literal(3l), Literal(4l)}); + {BigIntLiteral(2), BigIntLiteral(3), BigIntLiteral(4)}); CheckResult(read_schema, predicate, expected_array); } { // f2 not in [2,3,4], has data auto predicate = PredicateBuilder::NotIn(/*field_index=*/2, /*field_name=*/"f2", FieldType::BIGINT, - {Literal(2l), Literal(3l), Literal(4l)}); + {BigIntLiteral(2), BigIntLiteral(3), BigIntLiteral(4)}); CheckResult(read_schema, predicate, expected_array); } } @@ -408,26 +418,28 @@ TEST_F(PredicatePushdownTest, TestPredicatePushdownWithAllDataNull) { // other predicate, always return IS_NULL (no data) { // f4 in [1,2], no data - auto predicate = PredicateBuilder::In(/*field_index=*/4, /*field_name=*/"f4", - FieldType::BIGINT, {Literal(1l), Literal(2l)}); + auto predicate = + PredicateBuilder::In(/*field_index=*/4, /*field_name=*/"f4", FieldType::BIGINT, + {BigIntLiteral(1), BigIntLiteral(2)}); CheckResult(read_schema, predicate, /*expected_array=*/nullptr); } { // f4 not in [1,2], no data - auto predicate = PredicateBuilder::NotIn(/*field_index=*/4, /*field_name=*/"f4", - FieldType::BIGINT, {Literal(1l), Literal(2l)}); + auto predicate = + PredicateBuilder::NotIn(/*field_index=*/4, /*field_name=*/"f4", FieldType::BIGINT, + {BigIntLiteral(1), BigIntLiteral(2)}); CheckResult(read_schema, predicate, /*expected_array=*/nullptr); } { // f4 >= 3, no data auto predicate = PredicateBuilder::GreaterOrEqual(/*field_index=*/4, /*field_name=*/"f4", - FieldType::BIGINT, Literal(3l)); + FieldType::BIGINT, BigIntLiteral(3)); CheckResult(read_schema, predicate, /*expected_array=*/nullptr); } { // f4 <= 3, no data auto predicate = PredicateBuilder::LessOrEqual(/*field_index=*/4, /*field_name=*/"f4", - FieldType::BIGINT, Literal(3l)); + FieldType::BIGINT, BigIntLiteral(3)); CheckResult(read_schema, predicate, /*expected_array=*/nullptr); } } @@ -484,7 +496,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::And( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)), + FieldType::BIGINT, BigIntLiteral(6)), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(4.0))), PredicateBuilder::Equal(/*field_index=*/3, /*field_name=*/"f3", FieldType::BOOLEAN, @@ -498,7 +510,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::And( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)), + FieldType::BIGINT, BigIntLiteral(6)), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(4.0))), PredicateBuilder::IsNull(/*field_index=*/3, /*field_name=*/"f3", @@ -512,7 +524,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::And( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)), + FieldType::BIGINT, BigIntLiteral(6)), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(4.0))), PredicateBuilder::IsNull(/*field_index=*/5, /*field_name=*/"f5", @@ -526,7 +538,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::And( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)), + FieldType::BIGINT, BigIntLiteral(6)), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(4.0))), PredicateBuilder::Equal(/*field_index=*/5, /*field_name=*/"f5", FieldType::BINARY, @@ -540,7 +552,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::And( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)), + FieldType::BIGINT, BigIntLiteral(6)), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.0))), PredicateBuilder::IsNull(/*field_index=*/5, /*field_name=*/"f5", @@ -554,7 +566,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::Or( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)), + FieldType::BIGINT, BigIntLiteral(6)), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(4.0)))})); ASSERT_TRUE(predicate); @@ -566,7 +578,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::Or( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(6l)), + FieldType::BIGINT, BigIntLiteral(6)), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.0)))})); ASSERT_TRUE(predicate); @@ -577,7 +589,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { ASSERT_OK_AND_ASSIGN( auto predicate, PredicateBuilder::Or({PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(2l)), + FieldType::BIGINT, BigIntLiteral(2)), PredicateBuilder::IsNull(/*field_index=*/5, /*field_name=*/"f5", FieldType::BINARY)})); ASSERT_TRUE(predicate); @@ -589,7 +601,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::Or( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(2l)), + FieldType::BIGINT, BigIntLiteral(2)), PredicateBuilder::Equal(/*field_index=*/5, /*field_name=*/"f5", FieldType::BINARY, Literal(FieldType::BINARY, "zoo", 3))})); ASSERT_TRUE(predicate); @@ -601,7 +613,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::Or( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(2l)), + FieldType::BIGINT, BigIntLiteral(2)), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(4.0))), PredicateBuilder::Equal(/*field_index=*/3, /*field_name=*/"f3", FieldType::BOOLEAN, @@ -615,7 +627,7 @@ TEST_F(PredicatePushdownTest, TestCompoundPredicate) { auto predicate, PredicateBuilder::Or( {PredicateBuilder::LessThan(/*field_index=*/2, /*field_name=*/"f2", - FieldType::BIGINT, Literal(2l)), + FieldType::BIGINT, BigIntLiteral(2)), PredicateBuilder::Equal(/*field_index=*/1, /*field_name=*/"f1", FieldType::FLOAT, Literal(static_cast(5.0))), PredicateBuilder::IsNull(/*field_index=*/3, /*field_name=*/"f3",