| 69 | } |
| 70 | |
| 71 | void TestRangePredicates(Reader* reader) { |
| 72 | // Build search argument (x >= 300000 AND x < 600000) for column 'int1'. |
| 73 | // Test twice for using column name and column id respectively. |
| 74 | for (int k = 0; k < 2; ++k) { |
| 75 | std::unique_ptr<SearchArgument> sarg; |
| 76 | if (k == 0) { |
| 77 | sarg = |
| 78 | SearchArgumentFactory::newBuilder() |
| 79 | ->startAnd() |
| 80 | .startNot() |
| 81 | .lessThan("int1", PredicateDataType::LONG, Literal(static_cast<int64_t>(300000L))) |
| 82 | .end() |
| 83 | .lessThan("int1", PredicateDataType::LONG, Literal(static_cast<int64_t>(600000L))) |
| 84 | .end() |
| 85 | .build(); |
| 86 | } else { |
| 87 | sarg = SearchArgumentFactory::newBuilder() |
| 88 | ->startAnd() |
| 89 | .startNot() |
| 90 | .lessThan(/*columnId=*/1, PredicateDataType::LONG, |
| 91 | Literal(static_cast<int64_t>(300000L))) |
| 92 | .end() |
| 93 | .lessThan(/*columnId=*/1, PredicateDataType::LONG, |
| 94 | Literal(static_cast<int64_t>(600000L))) |
| 95 | .end() |
| 96 | .build(); |
| 97 | } |
| 98 | |
| 99 | RowReaderOptions rowReaderOpts; |
| 100 | rowReaderOpts.searchArgument(std::move(sarg)); |
| 101 | auto rowReader = reader->createRowReader(rowReaderOpts); |
| 102 | |
| 103 | auto readBatch = rowReader->createRowBatch(2000); |
| 104 | auto& batch0 = dynamic_cast<StructVectorBatch&>(*readBatch); |
| 105 | auto& batch1 = dynamic_cast<LongVectorBatch&>(*batch0.fields[0]); |
| 106 | auto& batch2 = dynamic_cast<StringVectorBatch&>(*batch0.fields[1]); |
| 107 | |
| 108 | EXPECT_EQ(true, rowReader->next(*readBatch)); |
| 109 | EXPECT_EQ(1000, readBatch->numElements); |
| 110 | EXPECT_EQ(1000, rowReader->getRowNumber()); |
| 111 | for (uint64_t i = 1000; i < 2000; ++i) { |
| 112 | EXPECT_EQ(300 * i, batch1.data[i - 1000]); |
| 113 | EXPECT_EQ(std::to_string(10 * i), |
| 114 | std::string(batch2.data[i - 1000], static_cast<size_t>(batch2.length[i - 1000]))); |
| 115 | } |
| 116 | EXPECT_EQ(false, rowReader->next(*readBatch)); |
| 117 | EXPECT_EQ(3500, rowReader->getRowNumber()); |
| 118 | } |
| 119 | } |
| 120 | |
| 121 | void TestNoRowsSelected(Reader* reader) { |
| 122 | // Look through the file with no rows selected: x < 0 |
no test coverage detected