| 1252 | } |
| 1253 | |
| 1254 | bool HdfsOrcScanner::PrepareBinaryPredicate(const string& fn_name, uint64_t orc_column_id, |
| 1255 | const ColumnType& type, ScalarExprEvaluator* eval, |
| 1256 | orc::SearchArgumentBuilder* sarg) { |
| 1257 | orc::PredicateDataType predicate_type; |
| 1258 | orc::Literal literal = GetSearchArgumentLiteral(eval, /*child_idx*/1, type, |
| 1259 | &predicate_type); |
| 1260 | if (literal.isNull()) { |
| 1261 | VLOG_FILE << "Failed to push down predicate " << eval->root().DebugString(); |
| 1262 | return false; |
| 1263 | } |
| 1264 | if (fn_name == "lt") { |
| 1265 | sarg->lessThan(orc_column_id, predicate_type, literal); |
| 1266 | } else if (fn_name == "gt") { |
| 1267 | sarg->startNot() |
| 1268 | .lessThanEquals(orc_column_id, predicate_type, literal) |
| 1269 | .end(); |
| 1270 | } else if (fn_name == "le") { |
| 1271 | sarg->lessThanEquals(orc_column_id, predicate_type, literal); |
| 1272 | } else if (fn_name == "ge") { |
| 1273 | sarg->startNot() |
| 1274 | .lessThan(orc_column_id, predicate_type, literal) |
| 1275 | .end(); |
| 1276 | } else if (fn_name == "eq") { |
| 1277 | sarg->equals(orc_column_id, predicate_type, literal); |
| 1278 | } else { |
| 1279 | return false; |
| 1280 | } |
| 1281 | return true; |
| 1282 | } |
| 1283 | |
| 1284 | bool HdfsOrcScanner::PrepareInListPredicate(uint64_t orc_column_id, |
| 1285 | const ColumnType& type, ScalarExprEvaluator* eval, |