Skip to content

Commit 6ecd66d

Browse files
committed
Fix MssqlRowMetadata.toArray(T[]) implementation.
toArray(T[]) now reuses the given array or constructs a new one if the array size doesn't match the collection size. [resolves #200] Signed-off-by: Mark Paluch <mpaluch@vmware.com>
1 parent 487f2ff commit 6ecd66d

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

src/main/java/io/r2dbc/mssql/MssqlRowMetadata.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import io.r2dbc.spi.RowMetadata;
2424
import reactor.util.annotation.Nullable;
2525

26+
import java.lang.reflect.Array;
2627
import java.util.ArrayList;
2728
import java.util.Collection;
2829
import java.util.HashMap;
@@ -163,7 +164,16 @@ public String next() {
163164
@Override
164165
@SuppressWarnings("unchecked")
165166
public <T> T[] toArray(T[] a) {
166-
return (T[]) toArray();
167+
168+
if (a.length < size()) {
169+
a = (T[]) Array.newInstance(a.getClass().getComponentType(), size());
170+
}
171+
172+
for (int i = 0; i < size(); i++) {
173+
a[i] = (T) this.getColumn(i).getName();
174+
}
175+
176+
return a;
167177
}
168178

169179
@Override

src/test/java/io/r2dbc/mssql/MssqlRowMetadataUnitTests.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ void shouldReturnMetadataForAllColumns() {
116116
}
117117

118118
@Test
119+
@SuppressWarnings("cast")
119120
void shouldReturnOrderedColumnNames() {
120121

121122
Column c1 = new Column(0, "one", this.integer, null);
@@ -135,6 +136,8 @@ void shouldReturnOrderedColumnNames() {
135136

136137
assertThat(rowMetadata.getColumnNames().contains("One")).isTrue();
137138
assertThat(rowMetadata.getColumnNames().contains("óne")).isFalse();
139+
assertThat(rowMetadata.getColumnNames().toArray()).contains("one", "two");
140+
assertThat((String[]) rowMetadata.getColumnNames().toArray(new String[0])).contains("one", "two");
138141
}
139142

140143
@Test

0 commit comments

Comments
 (0)