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

#3555 MSSQL: jTDS driver workaround (resolve datetime/datetime2 as datetime data kind)


Former-commit-id: 6945c6e9
上级 c02f6051
......@@ -30,6 +30,12 @@ public class SQLServerConstants {
public static final String DEFAULT_SCHEMA_NAME = "dbo";
public static final String TYPE_DATETIME = "datetime";
public static final String TYPE_DATETIME2 = "datetime2";
public static final String TYPE_SMALLDATETIME = "smalldatetime";
public static final String TYPE_DATETIMEOFFSET = "datetimeoffset";
public static final String PROP_CONNECTION_WINDOWS_AUTH = DBConstants.INTERNAL_PROP_PREFIX + "connection-windows-auth@";
public static final String PROP_SHOW_ALL_SCHEMAS = DBConstants.INTERNAL_PROP_PREFIX + "show-all-schemas@";
public static final String PROP_CONNECTION_INTEGRATED_SECURITY = "integratedSecurity";
......
......@@ -21,11 +21,14 @@ import org.jkiss.dbeaver.ext.generic.model.GenericDataSource;
import org.jkiss.dbeaver.ext.mssql.SQLServerConstants;
import org.jkiss.dbeaver.ext.mssql.SQLServerUtils;
import org.jkiss.dbeaver.model.DBConstants;
import org.jkiss.dbeaver.model.DBPDataKind;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.utils.CommonUtils;
import java.sql.Types;
public class SQLServerDataSource extends GenericDataSource {
public SQLServerDataSource(DBRProgressMonitor monitor, DBPDataSourceContainer container)
......@@ -51,6 +54,21 @@ public class SQLServerDataSource extends GenericDataSource {
return super.getDataSourceFeature(featureId);
}
@Override
public DBPDataKind resolveDataKind(String typeName, int valueType) {
if (valueType == Types.VARCHAR) {
// Workaround for jTDS driver (#3555)
switch (typeName) {
case SQLServerConstants.TYPE_DATETIME:
case SQLServerConstants.TYPE_DATETIME2:
case SQLServerConstants.TYPE_SMALLDATETIME:
case SQLServerConstants.TYPE_DATETIMEOFFSET:
return DBPDataKind.DATETIME;
}
}
return super.resolveDataKind(typeName, valueType);
}
//////////////////////////////////////////////////////////
// Databases
......@@ -78,4 +96,5 @@ public class SQLServerDataSource extends GenericDataSource {
return super.getConnectionUserPassword(connectionInfo);
}
}
}
......@@ -29,6 +29,7 @@ import org.jkiss.dbeaver.model.struct.rdb.DBSProcedureParameter;
import org.jkiss.dbeaver.runtime.sql.SQLRuleProvider;
import org.jkiss.utils.CommonUtils;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
......@@ -84,6 +85,10 @@ public class SQLServerDialect extends GenericSQLDialect implements SQLRuleProvid
if (dataKind == DBPDataKind.DATETIME) {
Integer scale = column.getScale();
if (scale != null) {
if (column.getTypeID() == Types.VARCHAR && scale == 0) {
// Bug in jTDS. Scale is always zero so just ignore it (#3555)
return null;
}
return "(" + scale + ')';
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册