diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Type.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Type.java index 71120a0f42..b3d21d6a99 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Type.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Type.java @@ -472,9 +472,9 @@ public int getFieldIndex(String fieldName) { Map tmp = new TreeMap<>(); for (int i = 0; i < getStructFields().size(); ++i) { Type.StructField field = getStructFields().get(i); - if (tmp.put(field.getName(), i) != null) { + if (tmp.put(field.getName().toLowerCase(), i) != null) { // Column name appears more than once: mark as ambiguous. - tmp.put(field.getName(), AMBIGUOUS_FIELD); + tmp.put(field.getName().toLowerCase(), AMBIGUOUS_FIELD); } } // Benign race: Java's final field semantics mean that if we see a non-null "fieldsByName", @@ -485,7 +485,10 @@ public int getFieldIndex(String fieldName) { fieldsByName = ImmutableMap.copyOf(tmp); } - Integer index = fieldsByName.get(fieldName); + if (fieldName == null) { + throw new IllegalArgumentException("Field name cannot be null"); + } + Integer index = fieldsByName.get(fieldName.toLowerCase()); if (index == null) { throw new IllegalArgumentException("Field not found: " + fieldName); } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TypeTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TypeTest.java index 8fc168eae9..6234d9bda2 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TypeTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/TypeTest.java @@ -522,7 +522,7 @@ public void struct() { assertThat(t.getStructFields().get(2).getType()).isEqualTo(Type.pgNumeric()); assertThat(t.toString()).isEqualTo("STRUCT>"); assertThat(t.getFieldIndex("f1")).isEqualTo(0); - assertThat(t.getFieldIndex("f2")).isEqualTo(1); + assertThat(t.getFieldIndex("F2")).isEqualTo(1); assertThat(t.getFieldIndex("f3")).isEqualTo(2); assertProtoEquals(