提交 0402c616 编写于 作者: S Serge Rider

#324 PG 8.x - index keys read fix

上级 ccc508e1
......@@ -132,7 +132,7 @@ public class PostgreUtils {
return null;
}
public static Long[] getIdVector(Object pgObject) {
public static long[] getIdVector(Object pgObject) {
Object pgVector = extractValue(pgObject);
if (pgVector == null) {
return null;
......@@ -143,13 +143,20 @@ public class PostgreUtils {
return null;
}
final String[] strings = vector.split(" ");
final Long[] ids = new Long[strings.length];
final long[] ids = new long[strings.length];
for (int i = 0; i < strings.length; i++) {
ids[i] = new Long(strings[i]);
ids[i] = Long.parseLong(strings[i]);
}
return ids;
} else if (pgVector instanceof long[]) {
return (long[]) pgVector;
} else if (pgVector instanceof Long[]) {
return (Long[]) pgVector;
Long[] objVector = (Long[]) pgVector;
long[] result = new long[objVector.length];
for (int i = 0; i < objVector.length; i++) {
result[i] = objVector[i];
}
return result;
} else {
throw new IllegalArgumentException("Unsupported vector type: " + pgVector.getClass().getName());
}
......@@ -394,4 +401,5 @@ public class PostgreUtils {
}
dbStat.setObject(index, arrayString.toString(), Types.OTHER);
}
}
......@@ -150,7 +150,7 @@ public class PostgreProcedure extends AbstractProcedure<PostgreDataSource, Postg
}
} else {
Long[] inArgTypes = PostgreUtils.getIdVector(JDBCUtils.safeGetObject(dbResult, "proargtypes"));
long[] inArgTypes = PostgreUtils.getIdVector(JDBCUtils.safeGetObject(dbResult, "proargtypes"));
if (!ArrayUtils.isEmpty(inArgTypes)) {
for (int i = 0; i < inArgTypes.length; i++) {
Long paramType = inArgTypes[i];
......
......@@ -586,7 +586,7 @@ public class PostgreSchema implements DBSSchema, DBPSaveableObject, DBPRefreshab
{
StringBuilder sql = new StringBuilder();
sql.append(
"SELECT i.*,i.indkey::int[] as keys,c.relname,c.relnamespace,c.relam,tc.relname as tabrelname,dsc.description" +
"SELECT i.*,i.indkey as keys,c.relname,c.relnamespace,c.relam,tc.relname as tabrelname,dsc.description" +
"\nFROM pg_catalog.pg_index i" +
"\nINNER JOIN pg_catalog.pg_class c ON c.oid=i.indexrelid" +
"\nINNER JOIN pg_catalog.pg_class tc ON tc.oid=i.indrelid" +
......@@ -627,17 +627,16 @@ public class PostgreSchema implements DBSSchema, DBPSaveableObject, DBPRefreshab
PostgreTableBase parent, PostgreIndex object, JDBCResultSet dbResult)
throws SQLException, DBException
{
Object keyNumbers = JDBCUtils.safeGetArray(dbResult, "keys");
long[] keyNumbers = PostgreUtils.getIdVector(JDBCUtils.safeGetObject(dbResult, "keys"));
if (keyNumbers == null) {
return null;
}
List<PostgreTableColumn> attributes = parent.getAttributes(dbResult.getSession().getProgressMonitor());
assert attributes != null;
int colCount = Array.getLength(keyNumbers);
PostgreIndexColumn[] result = new PostgreIndexColumn[colCount];
for (int i = 0; i < colCount; i++) {
Number colNumber = (Number) Array.get(keyNumbers, i);
final PostgreAttribute attr = PostgreUtils.getAttributeByNum(attributes, colNumber.intValue());
PostgreIndexColumn[] result = new PostgreIndexColumn[keyNumbers.length];
for (int i = 0; i < keyNumbers.length; i++) {
long colNumber = keyNumbers[i];
final PostgreAttribute attr = PostgreUtils.getAttributeByNum(attributes, (int) colNumber);
if (attr == null) {
log.warn("Bad index attribute index: " + colNumber);
continue;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册