static
| 218 | |
| 219 | // static |
| 220 | std::unique_ptr<common::Filter> ExprToSubfieldFilterParser::makeNotEqualFilter( |
| 221 | const core::TypedExprPtr& valueExpr, |
| 222 | core::ExpressionEvaluator* evaluator) { |
| 223 | auto value = toConstant(valueExpr, evaluator); |
| 224 | if (!value) { |
| 225 | return nullptr; |
| 226 | } |
| 227 | |
| 228 | std::unique_ptr<common::Filter> lessThanFilter = |
| 229 | makeLessThanFilter(valueExpr, evaluator); |
| 230 | if (!lessThanFilter) { |
| 231 | return nullptr; |
| 232 | } |
| 233 | std::unique_ptr<common::Filter> greaterThanFilter = |
| 234 | makeGreaterThanFilter(valueExpr, evaluator); |
| 235 | if (!greaterThanFilter) { |
| 236 | return nullptr; |
| 237 | } |
| 238 | |
| 239 | if (value->typeKind() == TypeKind::TINYINT || |
| 240 | value->typeKind() == TypeKind::SMALLINT || |
| 241 | value->typeKind() == TypeKind::INTEGER || |
| 242 | value->typeKind() == TypeKind::BIGINT) { |
| 243 | // Cast lessThanFilter and greaterThanFilter to |
| 244 | // std::unique_ptr<common::BigintRange>. |
| 245 | std::vector<std::unique_ptr<common::BigintRange>> ranges; |
| 246 | auto lessRange = |
| 247 | dynamic_cast<common::BigintRange*>(lessThanFilter.release()); |
| 248 | BOLT_CHECK_NOT_NULL(lessRange, "Less-than range is null"); |
| 249 | ranges.emplace_back(std::unique_ptr<common::BigintRange>(lessRange)); |
| 250 | |
| 251 | auto greaterRange = |
| 252 | dynamic_cast<common::BigintRange*>(greaterThanFilter.release()); |
| 253 | BOLT_CHECK_NOT_NULL(greaterRange, "Greater-than range is null"); |
| 254 | ranges.emplace_back(std::unique_ptr<common::BigintRange>(greaterRange)); |
| 255 | |
| 256 | return std::make_unique<common::BigintMultiRange>(std::move(ranges), false); |
| 257 | } else if (value->typeKind() == TypeKind::HUGEINT) { |
| 258 | BOLT_NYI(); |
| 259 | } else { |
| 260 | std::vector<std::unique_ptr<common::Filter>> filters; |
| 261 | filters.emplace_back(std::move(lessThanFilter)); |
| 262 | filters.emplace_back(std::move(greaterThanFilter)); |
| 263 | return std::make_unique<common::MultiRange>( |
| 264 | std::move(filters), false, false); |
| 265 | } |
| 266 | } |
| 267 | |
| 268 | // static |
| 269 | std::unique_ptr<common::Filter> ExprToSubfieldFilterParser::makeEqualFilter( |
nothing calls this directly
no test coverage detected