Use LinkedHashMap to ensure a stable iteration order using Columns.from(…).

Closes #1196
This commit is contained in:
Mark Paluch
2021-12-07 09:01:46 +01:00
parent 880787ff88
commit 8ffc518750
3 changed files with 11 additions and 9 deletions

View File

@@ -17,7 +17,6 @@ package org.springframework.data.cassandra.core.query;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
@@ -70,10 +69,11 @@ public class Columns implements Iterable<ColumnName> {
Assert.notNull(columnNames, "Column names must not be null");
Map<ColumnName, Selector> columns = new HashMap<>(columnNames.length, 1);
Map<ColumnName, Selector> columns = new LinkedHashMap<>(columnNames.length, 1);
Arrays.stream(columnNames)
.forEach(columnName -> columns.put(ColumnName.from(columnName), ColumnSelector.from(columnName)));
for (String columnName : columnNames) {
columns.put(ColumnName.from(columnName), ColumnSelector.from(columnName));
}
return new Columns(columns);
}
@@ -88,9 +88,11 @@ public class Columns implements Iterable<ColumnName> {
Assert.notNull(columnNames, "Column names must not be null");
Map<ColumnName, Selector> columns = new HashMap<>(columnNames.length, 1);
Map<ColumnName, Selector> columns = new LinkedHashMap<>(columnNames.length, 1);
Arrays.stream(columnNames).forEach(cqlId -> columns.put(ColumnName.from(cqlId), ColumnSelector.from(cqlId)));
for (CqlIdentifier cqlId : columnNames) {
columns.put(ColumnName.from(cqlId), ColumnSelector.from(cqlId));
}
return new Columns(columns);
}

View File

@@ -142,7 +142,7 @@ class PartTreeCassandraQueryUnitTests {
String query = deriveQueryFromMethod("findDynamicallyProjectedBy", PersonProjection.class);
assertThat(query).isEqualTo("SELECT lastname,firstname FROM person");
assertThat(query).isEqualTo("SELECT firstname,lastname FROM person");
}
@Test // DATACASS-479, DATACASS-313
@@ -150,7 +150,7 @@ class PartTreeCassandraQueryUnitTests {
String query = deriveQueryFromMethod("findPersonProjectedByNickname", "foo");
assertThat(query).isEqualTo("SELECT lastname,firstname FROM person WHERE nickname='foo'");
assertThat(query).isEqualTo("SELECT firstname,lastname FROM person WHERE nickname='foo'");
}
@Test // DATACASS-357

View File

@@ -109,7 +109,7 @@ class ReactivePartTreeCassandraQueryUnitTests {
String query = deriveQueryFromMethod("findDynamicallyProjectedBy", PersonProjection.class);
assertThat(query).isEqualTo("SELECT lastname,firstname FROM person");
assertThat(query).isEqualTo("SELECT firstname,lastname FROM person");
}
@Test // DATACASS-146