|
21 | 21 | import org.apache.flink.connector.jdbc.core.database.dialect.JdbcDialectTest;
|
22 | 22 | import org.apache.flink.connector.jdbc.postgres.PostgresTestBase;
|
23 | 23 |
|
| 24 | +import org.junit.jupiter.api.Test; |
| 25 | + |
24 | 26 | import java.util.Arrays;
|
25 | 27 | import java.util.List;
|
26 | 28 |
|
| 29 | +import static org.assertj.core.api.Assertions.assertThat; |
| 30 | + |
27 | 31 | /** The PostgresSql params for {@link JdbcDialectTest}. */
|
28 | 32 | class PostgresDialectTest extends JdbcDialectTest implements PostgresTestBase {
|
29 | 33 |
|
@@ -58,4 +62,24 @@ protected List<TestItem> testData() {
|
58 | 62 | "The precision of field 'f0' is out of the TIMESTAMP precision range [1, 6] supported by PostgreSQL dialect."),
|
59 | 63 | createTestItem("TIMESTAMP_LTZ(3)", "Unsupported type:TIMESTAMP_LTZ(3)"));
|
60 | 64 | }
|
| 65 | + |
| 66 | + @Test |
| 67 | + void testUpsertStatement() { |
| 68 | + PostgresDialect dialect = new PostgresDialect(); |
| 69 | + final String tableName = "tbl"; |
| 70 | + final String[] fieldNames = { |
| 71 | + "id", "name", "email", "ts", "field1", "field_2", "__field_3__" |
| 72 | + }; |
| 73 | + final String[] doUpdatekeyFields = {"id", "__field_3__"}; |
| 74 | + final String[] doNothingkeyFields = { |
| 75 | + "id", "name", "email", "ts", "field1", "field_2", "__field_3__" |
| 76 | + }; |
| 77 | + |
| 78 | + assertThat(dialect.getUpsertStatement(tableName, fieldNames, doUpdatekeyFields).get()) |
| 79 | + .isEqualTo( |
| 80 | + "INSERT INTO tbl(id, name, email, ts, field1, field_2, __field_3__) VALUES (:id, :name, :email, :ts, :field1, :field_2, :__field_3__) ON CONFLICT (id, __field_3__) DO UPDATE SET name=EXCLUDED.name, email=EXCLUDED.email, ts=EXCLUDED.ts, field1=EXCLUDED.field1, field_2=EXCLUDED.field_2"); |
| 81 | + assertThat(dialect.getUpsertStatement(tableName, fieldNames, doNothingkeyFields).get()) |
| 82 | + .isEqualTo( |
| 83 | + "INSERT INTO tbl(id, name, email, ts, field1, field_2, __field_3__) VALUES (:id, :name, :email, :ts, :field1, :field_2, :__field_3__) ON CONFLICT (id, name, email, ts, field1, field_2, __field_3__) DO NOTHING"); |
| 84 | + } |
61 | 85 | }
|
0 commit comments