fix(tests): use portable bigint test literals (#200)
* fix(parquet): use portable bigint test literals
* fix(tests): format bigint predicate cases
diff --git a/src/paimon/format/parquet/predicate_converter_test.cpp b/src/paimon/format/parquet/predicate_converter_test.cpp
index 542ea0f..ba7664c 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<long>`.
+Literal BigIntLiteral(int64_t value) {
+ return Literal(value);
+}
+
+} // namespace
+
TEST(PredicateConverterTest, TestSimple) {
// "struct<f0:bigint,f1:double,f2:string,f3:int,f4:tinyint,f5:decimal(6,2),f6:date,f7:timestamp>";
{
@@ -50,7 +60,7 @@
}
{
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 @@
}
{
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 @@
}
{
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 @@
{
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 @@
{
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 @@
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<float>(5.0))),
PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", FieldType::STRING,
@@ -349,7 +359,7 @@
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<float>(5.0))),
PredicateBuilder::Equal(/*field_index=*/2, /*field_name=*/"f2", FieldType::STRING,
@@ -370,7 +380,7 @@
{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 3d169db..9723794 100644
--- a/src/paimon/format/parquet/predicate_pushdown_test.cpp
+++ b/src/paimon/format/parquet/predicate_pushdown_test.cpp
@@ -55,6 +55,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<long>`.
+Literal BigIntLiteral(int64_t value) {
+ return Literal(value);
+}
+
+} // namespace
+
class PredicatePushdownTest : public ::testing::Test {
public:
void SetUp() override {
@@ -186,19 +196,19 @@
{
// 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 @@
// 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 @@
// 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 @@
// 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 @@
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<float>(4.0))),
PredicateBuilder::Equal(/*field_index=*/3, /*field_name=*/"f3", FieldType::BOOLEAN,
@@ -498,7 +510,7 @@
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<float>(4.0))),
PredicateBuilder::IsNull(/*field_index=*/3, /*field_name=*/"f3",
@@ -512,7 +524,7 @@
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<float>(4.0))),
PredicateBuilder::IsNull(/*field_index=*/5, /*field_name=*/"f5",
@@ -526,7 +538,7 @@
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<float>(4.0))),
PredicateBuilder::Equal(/*field_index=*/5, /*field_name=*/"f5", FieldType::BINARY,
@@ -540,7 +552,7 @@
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<float>(5.0))),
PredicateBuilder::IsNull(/*field_index=*/5, /*field_name=*/"f5",
@@ -554,7 +566,7 @@
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<float>(4.0)))}));
ASSERT_TRUE(predicate);
@@ -566,7 +578,7 @@
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<float>(5.0)))}));
ASSERT_TRUE(predicate);
@@ -577,7 +589,7 @@
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 @@
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 @@
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<float>(4.0))),
PredicateBuilder::Equal(/*field_index=*/3, /*field_name=*/"f3", FieldType::BOOLEAN,
@@ -615,7 +627,7 @@
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<float>(5.0))),
PredicateBuilder::IsNull(/*field_index=*/3, /*field_name=*/"f3",