mirror of
https://github.com/t8y2/dbx.git
synced 2026-10-21 08:13:34 +00:00
@@ -3,6 +3,7 @@ package com.dbx.agent.iris;
|
||||
import com.dbx.agent.ConfiguredJdbcAgent;
|
||||
import com.dbx.agent.ColumnInfo;
|
||||
import com.dbx.agent.JdbcAgentProfile;
|
||||
import com.dbx.agent.JdbcExecutor;
|
||||
import com.dbx.agent.MultiSessionJsonRpcServer;
|
||||
import com.dbx.agent.StandardJdbcMetadata;
|
||||
|
||||
@@ -10,6 +11,7 @@ import java.sql.Connection;
|
||||
import java.sql.DatabaseMetaData;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.Types;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
@@ -30,6 +32,14 @@ public final class IrisAgent extends ConfiguredJdbcAgent {
|
||||
super(IRIS_PROFILE);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object resultValue(ResultSet rs, int index, int sqlType) {
|
||||
if (sqlType == Types.OTHER) {
|
||||
return unchecked(() -> JdbcExecutor.normalizeResultValue(rs.getObject(index)));
|
||||
}
|
||||
return super.resultValue(rs, index, sqlType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> listSchemas() {
|
||||
return dedupeCaseInsensitiveSchemas(StandardJdbcMetadata.INSTANCE.listSchemas(requireConnection(), IRIS_PROFILE));
|
||||
|
||||
@@ -11,6 +11,7 @@ import java.sql.DatabaseMetaData;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Types;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
@@ -46,6 +47,75 @@ class IrisAgentTest {
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
void readsVendorOtherValuesThroughGetObject() {
|
||||
List<String> calls = new ArrayList<>();
|
||||
ResultSet resultSet = proxy(ResultSet.class, (method, args) -> {
|
||||
if ("getObject".equals(method.getName())) {
|
||||
calls.add("getObject");
|
||||
return new Object() {
|
||||
@Override
|
||||
public String toString() {
|
||||
return "%List(1,2)";
|
||||
}
|
||||
};
|
||||
}
|
||||
if ("getString".equals(method.getName())) {
|
||||
calls.add("getString");
|
||||
throw new AssertionError("IRIS %LIST must not use getString");
|
||||
}
|
||||
if ("wasNull".equals(method.getName())) {
|
||||
return false;
|
||||
}
|
||||
return defaultValue(method.getReturnType());
|
||||
});
|
||||
|
||||
Object value = new IrisAgent().resultValue(resultSet, 1, Types.OTHER);
|
||||
|
||||
assertEquals("%List(1,2)", value);
|
||||
assertEquals(Collections.singletonList("getObject"), calls);
|
||||
}
|
||||
|
||||
@Test
|
||||
void preservesStringPathForStandardValues() {
|
||||
List<String> calls = new ArrayList<>();
|
||||
ResultSet resultSet = proxy(ResultSet.class, (method, args) -> {
|
||||
if ("getString".equals(method.getName())) {
|
||||
calls.add("getString");
|
||||
return "ordinary";
|
||||
}
|
||||
if ("wasNull".equals(method.getName())) {
|
||||
return false;
|
||||
}
|
||||
return defaultValue(method.getReturnType());
|
||||
});
|
||||
|
||||
Object value = new IrisAgent().resultValue(resultSet, 1, Types.VARCHAR);
|
||||
|
||||
assertEquals("ordinary", value);
|
||||
assertEquals(Collections.singletonList("getString"), calls);
|
||||
}
|
||||
|
||||
@Test
|
||||
void preservesNullForVendorOtherValues() {
|
||||
List<String> calls = new ArrayList<>();
|
||||
ResultSet resultSet = proxy(ResultSet.class, (method, args) -> {
|
||||
if ("getObject".equals(method.getName())) {
|
||||
calls.add("getObject");
|
||||
return null;
|
||||
}
|
||||
if ("wasNull".equals(method.getName())) {
|
||||
return true;
|
||||
}
|
||||
return defaultValue(method.getReturnType());
|
||||
});
|
||||
|
||||
Object value = new IrisAgent().resultValue(resultSet, 1, Types.OTHER);
|
||||
|
||||
assertNull(value);
|
||||
assertEquals(Collections.singletonList("getObject"), calls);
|
||||
}
|
||||
|
||||
@Test
|
||||
void readsColumnsAndUsesInlinePrimaryKey() {
|
||||
List<String> calls = new ArrayList<>();
|
||||
|
||||
Reference in New Issue
Block a user