|
12 | 12 | import net.sf.jsqlparser.JSQLParserException;
|
13 | 13 | import net.sf.jsqlparser.parser.CCJSqlParserUtil;
|
14 | 14 | import net.sf.jsqlparser.statement.Statement;
|
15 |
| -import org.assertj.core.api.Assertions; |
16 | 15 | import org.junit.jupiter.api.Test;
|
| 16 | +import org.junit.jupiter.params.ParameterizedTest; |
| 17 | +import org.junit.jupiter.params.provider.Arguments; |
| 18 | +import org.junit.jupiter.params.provider.MethodSource; |
| 19 | + |
| 20 | +import java.util.Arrays; |
| 21 | +import java.util.Collections; |
| 22 | +import java.util.List; |
| 23 | +import java.util.stream.Stream; |
17 | 24 |
|
18 | 25 | import static net.sf.jsqlparser.test.TestUtils.assertOracleHintExists;
|
19 | 26 | import static net.sf.jsqlparser.test.TestUtils.assertSqlCanBeParsedAndDeparsed;
|
| 27 | +import static org.assertj.core.api.Assertions.assertThat; |
| 28 | +import static org.mockito.Mockito.mock; |
20 | 29 |
|
21 | 30 | /**
|
22 | 31 | *
|
@@ -153,10 +162,10 @@ public void testInsertMergeWhere() throws JSQLParserException {
|
153 | 162 |
|
154 | 163 | Merge merge = (Merge) statement;
|
155 | 164 | MergeInsert mergeInsert = merge.getMergeInsert();
|
156 |
| - Assertions.assertThat(mergeInsert.getWhereCondition()); |
| 165 | + assertThat(mergeInsert.getWhereCondition()); |
157 | 166 |
|
158 | 167 | MergeUpdate mergeUpdate = merge.getMergeUpdate();
|
159 |
| - Assertions.assertThat(mergeUpdate.getWhereCondition()); |
| 168 | + assertThat(mergeUpdate.getWhereCondition()); |
160 | 169 | }
|
161 | 170 |
|
162 | 171 | @Test
|
@@ -266,4 +275,59 @@ void testSnowflakeMergeStatementWithManyWhensAndDelete() throws JSQLParserExcept
|
266 | 275 |
|
267 | 276 | assertSqlCanBeParsedAndDeparsed(sql, true);
|
268 | 277 | }
|
| 278 | + |
| 279 | + @ParameterizedTest |
| 280 | + @MethodSource("deriveOperationsFromStandardClausesCases") |
| 281 | + void testDeriveOperationsFromStandardClauses(List<MergeOperation> expectedOperations, |
| 282 | + MergeUpdate update, MergeInsert insert, boolean insertFirst) { |
| 283 | + Merge merge = new Merge(); |
| 284 | + merge.setMergeUpdate(update); |
| 285 | + merge.setMergeInsert(insert); |
| 286 | + merge.setInsertFirst(insertFirst); |
| 287 | + |
| 288 | + assertThat(merge.getOperations()).isEqualTo(expectedOperations); |
| 289 | + } |
| 290 | + |
| 291 | + private static Stream<Arguments> deriveOperationsFromStandardClausesCases() { |
| 292 | + MergeUpdate update = mock(MergeUpdate.class); |
| 293 | + MergeInsert insert = mock(MergeInsert.class); |
| 294 | + |
| 295 | + return Stream.of( |
| 296 | + Arguments.of(Arrays.asList(update, insert), update, insert, false), |
| 297 | + Arguments.of(Arrays.asList(insert, update), update, insert, true)); |
| 298 | + } |
| 299 | + |
| 300 | + @ParameterizedTest |
| 301 | + @MethodSource("deriveStandardClausesFromOperationsCases") |
| 302 | + void testDeriveStandardClausesFromOperations(List<MergeOperation> operations, |
| 303 | + MergeUpdate expectedUpdate, MergeInsert expectedInsert, boolean expectedInsertFirst) { |
| 304 | + Merge merge = new Merge(); |
| 305 | + merge.setOperations(operations); |
| 306 | + |
| 307 | + assertThat(merge.getMergeUpdate()).isEqualTo(expectedUpdate); |
| 308 | + assertThat(merge.getMergeInsert()).isEqualTo(expectedInsert); |
| 309 | + assertThat(merge.isInsertFirst()).isEqualTo(expectedInsertFirst); |
| 310 | + } |
| 311 | + |
| 312 | + private static Stream<Arguments> deriveStandardClausesFromOperationsCases() { |
| 313 | + MergeDelete delete1 = mock(MergeDelete.class); |
| 314 | + MergeUpdate update1 = mock(MergeUpdate.class); |
| 315 | + MergeUpdate update2 = mock(MergeUpdate.class); |
| 316 | + MergeInsert insert1 = mock(MergeInsert.class); |
| 317 | + MergeInsert insert2 = mock(MergeInsert.class); |
| 318 | + |
| 319 | + return Stream.of( |
| 320 | + // just the two standard clauses present |
| 321 | + Arguments.of(Arrays.asList(update1, insert1), update1, insert1, false), |
| 322 | + Arguments.of(Arrays.asList(insert1, update1), update1, insert1, true), |
| 323 | + // some clause(s) missing |
| 324 | + Arguments.of(Collections.singletonList(update1), update1, null, false), |
| 325 | + Arguments.of(Collections.singletonList(insert1), null, insert1, true), |
| 326 | + Arguments.of(Collections.emptyList(), null, null, false), |
| 327 | + // many clauses (non-standard) |
| 328 | + Arguments.of(Arrays.asList(update1, update2, delete1, insert1, insert2), update1, |
| 329 | + insert1, false), |
| 330 | + Arguments.of(Arrays.asList(insert1, insert2, update1, update2, delete1), update1, |
| 331 | + insert1, true)); |
| 332 | + } |
269 | 333 | }
|
0 commit comments