| 173 | } |
| 174 | |
| 175 | void RunEmptyTest(JoinType type, bool parallel) { |
| 176 | auto l_schema = schema({field("l_i32", int32()), field("l_str", utf8())}); |
| 177 | auto r_schema = schema({field("r_str", utf8()), field("r_i32", int32())}); |
| 178 | |
| 179 | int multiplicity = parallel ? 100 : 1; |
| 180 | |
| 181 | BatchesWithSchema l_empty, r_empty, l_n_empty, r_n_empty; |
| 182 | |
| 183 | l_empty = GenerateBatchesFromString(l_schema, {R"([])"}, multiplicity); |
| 184 | r_empty = GenerateBatchesFromString(r_schema, {R"([])"}, multiplicity); |
| 185 | |
| 186 | l_n_empty = |
| 187 | GenerateBatchesFromString(l_schema, {R"([[0,"d"], [1,"b"]])"}, multiplicity); |
| 188 | r_n_empty = GenerateBatchesFromString(r_schema, {R"([["f", 0], ["b", 1], ["b", 2]])"}, |
| 189 | multiplicity); |
| 190 | |
| 191 | std::vector<FieldRef> l_keys{{"l_str"}}; |
| 192 | std::vector<FieldRef> r_keys{{"r_str"}}; |
| 193 | |
| 194 | switch (type) { |
| 195 | case JoinType::LEFT_SEMI: |
| 196 | // both empty |
| 197 | CheckRunOutput(type, l_empty, r_empty, l_keys, r_keys, l_empty, parallel); |
| 198 | // right empty |
| 199 | CheckRunOutput(type, l_n_empty, r_empty, l_keys, r_keys, l_empty, parallel); |
| 200 | // left empty |
| 201 | CheckRunOutput(type, l_empty, r_n_empty, l_keys, r_keys, l_empty, parallel); |
| 202 | break; |
| 203 | case JoinType::RIGHT_SEMI: |
| 204 | // both empty |
| 205 | CheckRunOutput(type, l_empty, r_empty, l_keys, r_keys, r_empty, parallel); |
| 206 | // right empty |
| 207 | CheckRunOutput(type, l_n_empty, r_empty, l_keys, r_keys, r_empty, parallel); |
| 208 | // left empty |
| 209 | CheckRunOutput(type, l_empty, r_n_empty, l_keys, r_keys, r_empty, parallel); |
| 210 | break; |
| 211 | case JoinType::LEFT_ANTI: |
| 212 | // both empty |
| 213 | CheckRunOutput(type, l_empty, r_empty, l_keys, r_keys, l_empty, parallel); |
| 214 | // right empty |
| 215 | CheckRunOutput(type, l_n_empty, r_empty, l_keys, r_keys, l_n_empty, parallel); |
| 216 | // left empty |
| 217 | CheckRunOutput(type, l_empty, r_n_empty, l_keys, r_keys, l_empty, parallel); |
| 218 | break; |
| 219 | case JoinType::RIGHT_ANTI: |
| 220 | // both empty |
| 221 | CheckRunOutput(type, l_empty, r_empty, l_keys, r_keys, r_empty, parallel); |
| 222 | // right empty |
| 223 | CheckRunOutput(type, l_n_empty, r_empty, l_keys, r_keys, r_empty, parallel); |
| 224 | // left empty |
| 225 | CheckRunOutput(type, l_empty, r_n_empty, l_keys, r_keys, r_n_empty, parallel); |
| 226 | break; |
| 227 | case JoinType::INNER: |
| 228 | case JoinType::LEFT_OUTER: |
| 229 | case JoinType::RIGHT_OUTER: |
| 230 | case JoinType::FULL_OUTER: |
| 231 | default: |
| 232 | FAIL() << "join type not implemented!"; |
no test coverage detected