From db78c4f630e7897c38354a6b5726925cb7bfcb61 Mon Sep 17 00:00:00 2001 From: serge-rider Date: Mon, 18 Dec 2017 23:39:52 +0300 Subject: [PATCH] #2633 SQL Server & Sybase schema list read fix Former-commit-id: 4c1d445388453ee60d6f5ed9c4f0a7ee3286bc80 --- .../ext/mssql/model/SQLServerMetaModel.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerMetaModel.java b/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerMetaModel.java index 09333e7f66..5b5d4d2c31 100644 --- a/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerMetaModel.java +++ b/plugins/org.jkiss.dbeaver.ext.mssql/src/org/jkiss/dbeaver/ext/mssql/model/SQLServerMetaModel.java @@ -209,16 +209,23 @@ public class SQLServerMetaModel extends GenericMetaModel implements DBCQueryTran @Override public List loadSchemas(JDBCSession session, GenericDataSource dataSource, GenericCatalog catalog) throws DBException { - if (catalog == null || getServerType(dataSource) != ServerType.SQL_SERVER) { + if (catalog == null) { return super.loadSchemas(session, dataSource, catalog); } - try (JDBCPreparedStatement dbStat = session.prepareStatement( - "SELECT * FROM " + DBUtils.getQuotedIdentifier(catalog) + ".sys.schemas ORDER BY name")) { + String sql; + if (getServerType(dataSource) == ServerType.SQL_SERVER && dataSource.isServerVersionAtLeast(9 ,0)) { + sql = "SELECT SCHEMA_NAME as name FROM " + DBUtils.getQuotedIdentifier(catalog) + ".INFORMATION_SCHEMA.SCHEMATA"; + } else { + sql = "SELECT name FROM " + DBUtils.getQuotedIdentifier(catalog) + ".dbo.sysusers WHERE gid <> 0"; + } + sql += "\nORDER BY name"; + + try (JDBCPreparedStatement dbStat = session.prepareStatement(sql)) { List result = new ArrayList<>(); try (JDBCResultSet dbResult = dbStat.executeQuery()) { while (dbResult.next()) { - String name = JDBCUtils.safeGetString(dbResult, "name"); + String name = JDBCUtils.safeGetString(dbResult, 1); if (name == null) { continue; } -- GitLab