@@ -307,6 +307,28 @@ TEST_F(RowExpressionTest, booleanTrue) {
307307 testConstantExpression (str, " BOOLEAN" , " true" );
308308}
309309
310+ TEST_F (RowExpressionTest, booleanFalse) {
311+ std::string str = R"(
312+ {
313+ "@type": "constant",
314+ "valueBlock": "CgAAAEJZVEVfQVJSQVkBAAAAAAA=",
315+ "type": "boolean"
316+ }
317+ )" ;
318+ testConstantExpression (str, " BOOLEAN" , " false" );
319+ }
320+
321+ TEST_F (RowExpressionTest, booleanNull) {
322+ std::string str = R"(
323+ {
324+ "@type": "constant",
325+ "valueBlock": "AwAAAFJMRQEAAAAKAAAAQllURV9BUlJBWQEAAAABgA==",
326+ "type": "boolean"
327+ }
328+ )" ;
329+ testConstantExpression (str, " BOOLEAN" , " null" );
330+ }
331+
310332TEST_F (RowExpressionTest, varchar1) {
311333 std::string str = R"##(
312334 {
@@ -800,6 +822,218 @@ TEST_F(RowExpressionTest, special) {
800822 }
801823}
802824
825+ TEST_F (RowExpressionTest, specialOr) {
826+ std::string str = R"##(
827+ {
828+ "@type": "special",
829+ "arguments": [
830+ {
831+ "@type": "call",
832+ "arguments": [
833+ {
834+ "@type": "variable",
835+ "name": "custkey",
836+ "type": "bigint"
837+ },
838+ {
839+ "@type": "constant",
840+ "type": "bigint",
841+ "valueBlock": "CgAAAExPTkdfQVJSQVkBAAAAAAoAAAAAAAAA"
842+ }
843+ ],
844+ "displayName": "EQUAL",
845+ "functionHandle": {
846+ "@type": "$static",
847+ "signature": {
848+ "argumentTypes": [
849+ "bigint",
850+ "bigint"
851+ ],
852+ "kind": "SCALAR",
853+ "longVariableConstraints": [],
854+ "name": "presto.default.$operator$equal",
855+ "returnType": "boolean",
856+ "typeVariableConstraints": [],
857+ "variableArity": false
858+ },
859+ "builtInFunctionKind": "ENGINE"
860+ },
861+ "returnType": "boolean"
862+ },
863+ {
864+ "@type": "call",
865+ "arguments": [
866+ {
867+ "@type": "variable",
868+ "name": "name",
869+ "type": "varchar(25)"
870+ },
871+ {
872+ "@type": "constant",
873+ "type": "varchar(25)",
874+ "valueBlock": "DgAAAFZBUklBQkxFX1dJRFRIAQAAAAMAAAAAAwAAAGZvbw=="
875+ }
876+ ],
877+ "displayName": "EQUAL",
878+ "functionHandle": {
879+ "@type": "$static",
880+ "signature": {
881+ "argumentTypes": [
882+ "varchar(25)",
883+ "varchar(25)"
884+ ],
885+ "kind": "SCALAR",
886+ "longVariableConstraints": [],
887+ "name": "presto.default.$operator$equal",
888+ "returnType": "boolean",
889+ "typeVariableConstraints": [],
890+ "variableArity": false
891+ },
892+ "builtInFunctionKind": "ENGINE"
893+ },
894+ "returnType": "boolean"
895+ }
896+ ],
897+ "form": "OR",
898+ "returnType": "boolean"
899+ }
900+ )##" ;
901+
902+ json j = json::parse (str);
903+ std::shared_ptr<protocol::RowExpression> p = j;
904+
905+ auto callexpr =
906+ std::static_pointer_cast<const CallTypedExpr>(converter_->toVeloxExpr (p));
907+
908+ ASSERT_EQ (callexpr->type ()->toString (), " BOOLEAN" );
909+ ASSERT_EQ (callexpr->name (), " or" );
910+
911+ {
912+ auto arg0expr =
913+ std::static_pointer_cast<const CallTypedExpr>(callexpr->inputs ()[0 ]);
914+
915+ ASSERT_EQ (arg0expr->type ()->toString (), " BOOLEAN" );
916+ ASSERT_EQ (arg0expr->name (), " presto.default.eq" );
917+ {
918+ auto cexpr = std::static_pointer_cast<const FieldAccessTypedExpr>(
919+ arg0expr->inputs ()[0 ]);
920+ ASSERT_EQ (cexpr->type ()->toString (), " BIGINT" );
921+ ASSERT_EQ (cexpr->name (), " custkey" );
922+ }
923+ {
924+ auto cexpr = std::static_pointer_cast<const ConstantTypedExpr>(
925+ arg0expr->inputs ()[1 ]);
926+ ASSERT_EQ (cexpr->type ()->toString (), " BIGINT" );
927+ ASSERT_EQ (cexpr->value ().toJson (cexpr->type ()), " 10" );
928+ }
929+ }
930+
931+ {
932+ auto arg1expr =
933+ std::static_pointer_cast<const CallTypedExpr>(callexpr->inputs ()[1 ]);
934+
935+ ASSERT_EQ (arg1expr->type ()->toString (), " BOOLEAN" );
936+ ASSERT_EQ (arg1expr->name (), " presto.default.eq" );
937+ {
938+ auto cexpr = std::static_pointer_cast<const FieldAccessTypedExpr>(
939+ arg1expr->inputs ()[0 ]);
940+ ASSERT_EQ (cexpr->type ()->toString (), " VARCHAR" );
941+ ASSERT_EQ (cexpr->name (), " name" );
942+ }
943+ {
944+ auto cexpr = std::static_pointer_cast<const ConstantTypedExpr>(
945+ arg1expr->inputs ()[1 ]);
946+ ASSERT_EQ (cexpr->type ()->toString (), " VARCHAR" );
947+ ASSERT_EQ (cexpr->value ().toJson (cexpr->type ()), " \" foo\" " );
948+ }
949+ }
950+ }
951+
952+ TEST_F (RowExpressionTest, specialNot) {
953+ std::string str = R"##(
954+ {
955+ "@type": "call",
956+ "displayName": "NOT",
957+ "functionHandle": {
958+ "@type": "$static",
959+ "signature": {
960+ "name": "presto.default.$operator$not",
961+ "kind": "SCALAR",
962+ "typeVariableConstraints": [],
963+ "longVariableConstraints": [],
964+ "returnType": "boolean",
965+ "argumentTypes": ["boolean"],
966+ "variableArity": false
967+ },
968+ "builtInFunctionKind": "ENGINE"
969+ },
970+ "returnType": "boolean",
971+ "arguments": [
972+ {
973+ "@type": "call",
974+ "arguments": [
975+ {
976+ "@type": "variable",
977+ "name": "custkey",
978+ "type": "bigint"
979+ },
980+ {
981+ "@type": "constant",
982+ "type": "bigint",
983+ "valueBlock": "CgAAAExPTkdfQVJSQVkBAAAAAAoAAAAAAAAA"
984+ }
985+ ],
986+ "displayName": "EQUAL",
987+ "functionHandle": {
988+ "@type": "$static",
989+ "signature": {
990+ "argumentTypes": [
991+ "bigint",
992+ "bigint"
993+ ],
994+ "kind": "SCALAR",
995+ "longVariableConstraints": [],
996+ "name": "presto.default.$operator$equal",
997+ "returnType": "boolean",
998+ "typeVariableConstraints": [],
999+ "variableArity": false
1000+ },
1001+ "builtInFunctionKind": "ENGINE"
1002+ },
1003+ "returnType": "boolean"
1004+ }
1005+ ]
1006+ }
1007+ )##" ;
1008+
1009+ json j = json::parse (str);
1010+ std::shared_ptr<protocol::RowExpression> p = j;
1011+
1012+ auto callexpr =
1013+ std::static_pointer_cast<const CallTypedExpr>(converter_->toVeloxExpr (p));
1014+
1015+ ASSERT_EQ (callexpr->type ()->toString (), " BOOLEAN" );
1016+ ASSERT_EQ (callexpr->name (), " presto.default.$operator$not" );
1017+
1018+ auto arg0expr =
1019+ std::static_pointer_cast<const CallTypedExpr>(callexpr->inputs ()[0 ]);
1020+
1021+ ASSERT_EQ (arg0expr->type ()->toString (), " BOOLEAN" );
1022+ ASSERT_EQ (arg0expr->name (), " presto.default.eq" );
1023+ {
1024+ auto cexpr = std::static_pointer_cast<const FieldAccessTypedExpr>(
1025+ arg0expr->inputs ()[0 ]);
1026+ ASSERT_EQ (cexpr->type ()->toString (), " BIGINT" );
1027+ ASSERT_EQ (cexpr->name (), " custkey" );
1028+ }
1029+ {
1030+ auto cexpr = std::static_pointer_cast<const ConstantTypedExpr>(
1031+ arg0expr->inputs ()[1 ]);
1032+ ASSERT_EQ (cexpr->type ()->toString (), " BIGINT" );
1033+ ASSERT_EQ (cexpr->value ().toJson (cexpr->type ()), " 10" );
1034+ }
1035+ }
1036+
8031037TEST_F (RowExpressionTest, bind) {
8041038 std::string str = R"##(
8051039 {
0 commit comments