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 7cccd60807
commit c19197d55d
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.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
@@ -70,10 +69,11 @@ public class Columns implements Iterable<ColumnName> {
Assert.notNull(columnNames, "Column names must not be null"); 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) for (String columnName : columnNames) {
.forEach(columnName -> columns.put(ColumnName.from(columnName), ColumnSelector.from(columnName))); columns.put(ColumnName.from(columnName), ColumnSelector.from(columnName));
}
return new Columns(columns); return new Columns(columns);
} }
@@ -88,9 +88,11 @@ public class Columns implements Iterable<ColumnName> {
Assert.notNull(columnNames, "Column names must not be null"); 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); return new Columns(columns);
} }

View File

@@ -142,7 +142,7 @@ class PartTreeCassandraQueryUnitTests {
String query = deriveQueryFromMethod("findDynamicallyProjectedBy", PersonProjection.class); 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 @Test // DATACASS-479, DATACASS-313
@@ -150,7 +150,7 @@ class PartTreeCassandraQueryUnitTests {
String query = deriveQueryFromMethod("findPersonProjectedByNickname", "foo"); 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 @Test // DATACASS-357

View File

@@ -109,7 +109,7 @@ class ReactivePartTreeCassandraQueryUnitTests {
String query = deriveQueryFromMethod("findDynamicallyProjectedBy", PersonProjection.class); 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 @Test // DATACASS-146