Add row filtering for int32/64/96/boolean

This commit is contained in:
Colin Dellow 2018-03-17 16:05:38 -04:00
parent a3af16eb54
commit 86e09b111e
1 changed files with 49 additions and 0 deletions

View File

@ -317,6 +317,55 @@ bool ParquetCursor::currentRowSatisfiesTextFilter(Constraint& constraint) {
} }
bool ParquetCursor::currentRowSatisfiesIntegerFilter(Constraint& constraint) { bool ParquetCursor::currentRowSatisfiesIntegerFilter(Constraint& constraint) {
if(constraint.type != Integer) {
return true;
}
int column = constraint.column;
// CONSIDER: should we just store int64s everywhere?
int64_t value = 0;
if(column == -1) {
value = rowId;
} else {
parquet::Type::type pqType = types[column];
if(pqType == parquet::Type::INT32 || pqType == parquet::Type::BOOLEAN) {
value = getInt32(column);
} else if(pqType == parquet::Type::INT64 || pqType == parquet::Type::INT96) {
value = getInt64(column);
} else {
// Should be impossible to get here
std::ostringstream ss;
ss << __FILE__ << ":" << __LINE__ << ": currentRowSatisfiesIntegerFilter called on unsupported type: " <<
parquet::TypeToString(pqType);
throw std::invalid_argument(ss.str());
}
}
int64_t constraintValue = constraint.intValue;
switch(constraint.op) {
case Is:
case Equal:
return constraintValue == value;
case IsNot:
case NotEqual:
return constraintValue != value;
case GreaterThan:
return value > constraintValue;
case GreaterThanOrEqual:
return value >= constraintValue;
case LessThan:
return value < constraintValue;
case LessThanOrEqual:
return value <= constraintValue;
case Like:
default:
return true;
}
return true; return true;
} }