Skip to content

Commit 0c1ff0c

Browse files
Remove equals/hashCode for OBJECT
1 parent 361521e commit 0c1ff0c

File tree

2 files changed

+26
-29
lines changed

2 files changed

+26
-29
lines changed

src/main/java/oracle/r2dbc/impl/OracleReadableImpl.java

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1058,13 +1058,6 @@ private final class OracleR2dbcObjectImpl
10581058

10591059
private final OracleR2dbcObjectMetadata metadata;
10601060

1061-
/**
1062-
* JDBC readable that backs this object. It is retained with this field to
1063-
* implement equals and hashcode without having to convert between the
1064-
* default JDBC object mappings and those of R2DBC.
1065-
*/
1066-
private final StructJdbcReadable structJdbcReadable;
1067-
10681061
/**
10691062
* <p>
10701063
* Constructs a new set of out parameters that supplies values of a
@@ -1086,33 +1079,13 @@ private OracleR2dbcObjectImpl(
10861079
super(
10871080
jdbcConnection, dependentCounter, structJdbcReadable, metadata, adapter);
10881081
this.metadata = metadata;
1089-
this.structJdbcReadable = structJdbcReadable;
10901082
}
10911083

10921084
@Override
10931085
public OracleR2dbcObjectMetadata getMetadata() {
10941086
return metadata;
10951087
}
10961088

1097-
@Override
1098-
public boolean equals(Object other) {
1099-
if (!(other instanceof OracleR2dbcObjectImpl))
1100-
return super.equals(other);
1101-
1102-
OracleR2dbcObjectImpl otherObject = (OracleR2dbcObjectImpl) other;
1103-
if (! readablesMetadata.equals(otherObject.metadata))
1104-
return false;
1105-
1106-
return Arrays.deepEquals(
1107-
structJdbcReadable.attributes,
1108-
otherObject.structJdbcReadable.attributes);
1109-
}
1110-
1111-
@Override
1112-
public int hashCode() {
1113-
return Objects.hash(readablesMetadata, structJdbcReadable);
1114-
}
1115-
11161089
@Override
11171090
public String toString() {
11181091
return format(
@@ -1122,6 +1095,7 @@ public String toString() {
11221095
}
11231096
}
11241097

1098+
/** A {@code JdbcReadable} backed by a java.sql.Struct */
11251099
private final class StructJdbcReadable implements JdbcReadable {
11261100

11271101
/** Attributes of the Struct, mapped to their default Java type for JDBC */

src/test/java/oracle/r2dbc/impl/TypeMappingTest.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1919,16 +1919,39 @@ else if (expected instanceof OracleR2dbcObject)
19191919
actual = object.get(i, expectedClass);
19201920
}
19211921

1922-
19231922
String message = "Mismatch at attribute index " + i;
19241923

1925-
if (expected instanceof Object[] && actual instanceof Object[])
1924+
if (expected instanceof OracleR2dbcObject
1925+
&& actual instanceof OracleR2dbcObject) {
1926+
// Need to compare default mappings as OracleR2dbcObject does not
1927+
// implement equals.
1928+
assertArrayEquals(
1929+
toArray((OracleR2dbcObject) expected),
1930+
toArray((OracleR2dbcObject) actual),
1931+
message);
1932+
}
1933+
else if (expected instanceof Object[] && actual instanceof Object[])
19261934
assertArrayEquals((Object[]) expected, (Object[]) actual, message);
19271935
else
19281936
assertEquals(expected, actual, message);
19291937
}
19301938
}
19311939

1940+
/** Converts an OBJECT to an Object[] of each attribute's default Java type */
1941+
private static Object[] toArray(OracleR2dbcObject object) {
1942+
Object[] array = new Object[
1943+
object.getMetadata().getAttributeMetadatas().size()];
1944+
1945+
for (int i = 0; i < array.length; i++) {
1946+
array[i] = object.get(i);
1947+
1948+
if (array[i] instanceof OracleR2dbcObject)
1949+
array[i] = toArray((OracleR2dbcObject) array[i]);
1950+
}
1951+
1952+
return array;
1953+
}
1954+
19321955
// TODO: More tests for JDBC 4.3 mappings like BigInteger to BIGINT,
19331956
// java.sql.Date to DATE, java.sql.Blob to BLOB? Oracle R2DBC exposes all
19341957
// type mappings supported by Oracle JDBC.

0 commit comments

Comments
 (0)