提交 bf30d4ea 编写于 作者: S serge-rider

#3731 PG: domain types value type resolution fix (date/time/timestamp)

上级 f383e44d
......@@ -221,6 +221,20 @@ public class PostgreDataType extends JDBCDataType<PostgreSchema> implements Post
this.enumValues = null;
}
void resolveValueTypeFromBaseType(DBRProgressMonitor monitor) {
if (baseTypeId > 0) {
PostgreDataType baseType = getBaseType(monitor);
if (baseType == null) {
log.debug("Can't find type '" + getFullTypeName() + "' base type " + baseTypeId);
} else {
if (getTypeID() != baseType.getTypeID()) {
//log.debug(getFullTypeName() + " type ID resolved to " + baseType.getTypeID());
setTypeID(baseType.getTypeID());
}
}
}
}
public boolean isAlias() {
return alias;
}
......@@ -291,6 +305,7 @@ public class PostgreDataType extends JDBCDataType<PostgreSchema> implements Post
}
@Override
@Property(category = CAT_MAIN, viewable = false, order = 9)
public long getObjectId() {
return typeId;
}
......@@ -642,12 +657,17 @@ public class PostgreDataType extends JDBCDataType<PostgreSchema> implements Post
valueType = Types.STRUCT;
break;
case D:
if (name.startsWith("timestamp")) {
valueType = Types.TIMESTAMP;
} else if (name.startsWith("date")) {
if (typeLength == 4) {
valueType = Types.DATE;
} else if (typeLength == 8) {
if (name.startsWith("timestamp")) {
valueType = Types.TIMESTAMP;
} else {
valueType = Types.TIME;
}
} else {
valueType = Types.TIME;
// Weird
valueType = Types.TIMESTAMP;
}
break;
case N:
......
......@@ -32,6 +32,7 @@ import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.utils.LongKeyMap;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
......@@ -131,6 +132,15 @@ public class PostgreDataTypeCache extends JDBCObjectCache<PostgreSchema, Postgre
return PostgreDataType.readDataType(session, owner, dbResult);
}
@Override
protected void invalidateObjects(DBRProgressMonitor monitor, PostgreSchema postgreSchema, Iterator<PostgreDataType> objectIter) {
// Resolve value type IDs (#3731)
while (objectIter.hasNext()) {
PostgreDataType dt = objectIter.next();
dt.resolveValueTypeFromBaseType(monitor);
}
}
public PostgreDataType getDataType(long oid) {
return dataTypeMap.get(oid);
}
......
......@@ -41,6 +41,7 @@ meta.org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCColumnMetaData.schemaName.name=S
meta.org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCColumnMetaData.scale.name=Scale
meta.org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCColumnMetaData.precision.name=Precision
meta.org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCColumnMetaData.maxLength.name=Max Length
meta.org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCColumnMetaData.jdbcType.name=JDBC Type
meta.org.jkiss.dbeaver.model.impl.local.LocalResultSetColumn.ordinalPosition.name=#
meta.org.jkiss.dbeaver.model.impl.local.LocalResultSetColumn.label.name=Label
meta.org.jkiss.dbeaver.model.impl.local.LocalResultSetColumn.typeName.name=Type
......
......@@ -33,8 +33,11 @@ import org.jkiss.dbeaver.model.sql.SQLDialect;
import org.jkiss.dbeaver.model.struct.DBSDataType;
import org.jkiss.utils.CommonUtils;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Types;
/**
* JDBCColumnMetaData
......@@ -275,6 +278,25 @@ public class JDBCColumnMetaData implements DBCAttributeMetaData {
return typeID;
}
@NotNull
@Property(viewable = true, category = PROP_CATEGORY_COLUMN, order = 23)
public String getJdbcType() {
int typeID = getTypeID();
try {
for (Field field : Types.class.getFields()) {
if ((field.getModifiers() & Modifier.STATIC) != 0 && field.getType() == Integer.TYPE) {
Integer value = (Integer) field.get(null);
if (value != null && typeID == value) {
return field.getName();
}
}
}
} catch (Exception e) {
log.error(e);
}
return String.valueOf(typeID);
}
@Override
public DBPDataKind getDataKind() {
return dataKind;
......
......@@ -87,6 +87,10 @@ public class JDBCDataType<OWNER extends DBSObject> implements DBSDataType
return valueType;
}
protected void setTypeID(int valueType) {
this.valueType = valueType;
}
@NotNull
@Override
public String getName()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册