Skip to content

Commit 2c30162

Browse files
committed
Preserve bulk additions through the conflict column view
1 parent 657443c commit 2c30162

2 files changed

Lines changed: 28 additions & 0 deletions

File tree

src/main/java/net/sf/jsqlparser/statement/insert/InsertConflictTarget.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,21 @@ public void add(int index, String name) {
103103
new Index.ColumnParams(name));
104104
}
105105

106+
@Override
107+
public boolean addAll(Collection<? extends String> names) {
108+
return addAll(size(), names);
109+
}
110+
111+
@Override
112+
public boolean addAll(int index, Collection<? extends String> names) {
113+
int insertionIndex = index == size() ? indexElements.size() : elementIndex(index);
114+
List<Index.ColumnParams> additions = new ArrayList<>();
115+
for (String name : names) {
116+
additions.add(new Index.ColumnParams(name));
117+
}
118+
return indexElements.addAll(insertionIndex, additions);
119+
}
120+
106121
@Override
107122
public String remove(int index) {
108123
return indexElements.remove(elementIndex(index)).getColumnName();

src/test/java/net/sf/jsqlparser/statement/insert/PostgreSQLConflictTargetTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,19 @@ void retainsMutableLegacyColumnViewAndReplacementMethods() throws Exception {
110110
assertTrue(target.getIndexElements().isEmpty());
111111
}
112112

113+
@Test
114+
void bulkColumnAdditionsSnapshotTheMutableView() {
115+
InsertConflictTarget target = new InsertConflictTarget("id", null, null, null);
116+
List<String> names = target.getIndexColumnNames();
117+
assertTrue(target.addAllIndexColumnNames(names));
118+
assertEquals(List.of("id", "id"), names);
119+
assertTrue(names.addAll(names));
120+
assertEquals(4, names.size());
121+
assertTrue(names.addAll(1, names.subList(0, 2)));
122+
assertEquals(6, names.size());
123+
assertFalse(names.addAll(List.of()));
124+
}
125+
113126
@Test
114127
void statementVisitorTraversesTargetExpressions() throws Exception {
115128
Insert insert = (Insert) CCJSqlParserUtil.parse("INSERT INTO users VALUES (1) "

0 commit comments

Comments
 (0)