提交 6f5fa525 authored 作者: Thomas Mueller's avatar Thomas Mueller

Make it easier to test; bugfix for Firebird

上级 b138e8b5
...@@ -46,7 +46,7 @@ public class DbColumn { ...@@ -46,7 +46,7 @@ public class DbColumn {
scaleColumnName = "SCALE"; scaleColumnName = "SCALE";
} else { } else {
scaleColumnName = "DECIMAL_DIGITS"; scaleColumnName = "DECIMAL_DIGITS";
} }
int prec = rs.getInt(scaleColumnName); int prec = rs.getInt(scaleColumnName);
if (prec > 0) { if (prec > 0) {
type += ", " + prec; type += ", " + prec;
...@@ -58,10 +58,10 @@ public class DbColumn { ...@@ -58,10 +58,10 @@ public class DbColumn {
} }
dataType = type; dataType = type;
} }
/** /**
* Create a column from a DatabaseMetaData.getProcedureColumns row. * Create a column from a DatabaseMetaData.getProcedureColumns row.
* *
* @param contents the database contents * @param contents the database contents
* @param rs the result set * @param rs the result set
* @return the column * @return the column
...@@ -69,10 +69,10 @@ public class DbColumn { ...@@ -69,10 +69,10 @@ public class DbColumn {
public static DbColumn getProcedureColumn(DbContents contents, ResultSet rs) throws SQLException { public static DbColumn getProcedureColumn(DbContents contents, ResultSet rs) throws SQLException {
return new DbColumn(contents, rs, true); return new DbColumn(contents, rs, true);
} }
/** /**
* Create a column from a DatabaseMetaData.getColumns row. * Create a column from a DatabaseMetaData.getColumns row.
* *
* @param contents the database contents * @param contents the database contents
* @param rs the result set * @param rs the result set
* @return the column * @return the column
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
*/ */
package org.h2.bnf.context; package org.h2.bnf.context;
import java.sql.Connection;
import java.sql.DatabaseMetaData; import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
...@@ -114,35 +115,33 @@ public class DbContents { ...@@ -114,35 +115,33 @@ public class DbContents {
/** /**
* Read the contents of this database from the database meta data. * Read the contents of this database from the database meta data.
* *
* @param meta the database meta data * @param url the database URL
* @param conn the connection
*/ */
public synchronized void readContents(DatabaseMetaData meta) throws SQLException { public synchronized void readContents(String url, Connection conn) throws SQLException {
String prod = StringUtils.toLowerEnglish(meta.getDatabaseProductName()); isH2 = url.startsWith("jdbc:h2:");
isSQLite = prod.indexOf("sqlite") >= 0; if (isH2) {
String url = meta.getURL(); PreparedStatement prep = conn.prepareStatement(
if (url != null) { "SELECT UPPER(VALUE) FROM INFORMATION_SCHEMA.SETTINGS " +
isH2 = url.startsWith("jdbc:h2:"); "WHERE NAME=?");
if (isH2) { prep.setString(1, "MODE");
PreparedStatement prep = meta.getConnection().prepareStatement( ResultSet rs = prep.executeQuery();
"SELECT UPPER(VALUE) FROM INFORMATION_SCHEMA.SETTINGS " + rs.next();
"WHERE NAME=?"); if ("MYSQL".equals(rs.getString(1))) {
prep.setString(1, "MODE"); isH2ModeMySQL = true;
ResultSet rs = prep.executeQuery();
rs.next();
if ("MYSQL".equals(rs.getString(1))) {
isH2ModeMySQL = true;
}
rs.close();
prep.close();
} }
isOracle = url.startsWith("jdbc:oracle:"); rs.close();
isPostgreSQL = url.startsWith("jdbc:postgresql:"); prep.close();
// isHSQLDB = url.startsWith("jdbc:hsqldb:");
isMySQL = url.startsWith("jdbc:mysql:");
isDerby = url.startsWith("jdbc:derby:");
isFirebird = url.startsWith("jdbc:firebirdsql:");
isMSSQLServer = url.startsWith("jdbc:sqlserver:");
} }
isSQLite = url.startsWith("jdbc:sqlite:");
isOracle = url.startsWith("jdbc:oracle:");
isPostgreSQL = url.startsWith("jdbc:postgresql:");
// isHSQLDB = url.startsWith("jdbc:hsqldb:");
isMySQL = url.startsWith("jdbc:mysql:");
isDerby = url.startsWith("jdbc:derby:");
isFirebird = url.startsWith("jdbc:firebirdsql:");
isMSSQLServer = url.startsWith("jdbc:sqlserver:");
DatabaseMetaData meta = conn.getMetaData();
String defaultSchemaName = getDefaultSchemaName(meta); String defaultSchemaName = getDefaultSchemaName(meta);
String[] schemaNames = getSchemaNames(meta); String[] schemaNames = getSchemaNames(meta);
schemas = new DbSchema[schemaNames.length]; schemas = new DbSchema[schemaNames.length];
...@@ -150,7 +149,7 @@ public class DbContents { ...@@ -150,7 +149,7 @@ public class DbContents {
String schemaName = schemaNames[i]; String schemaName = schemaNames[i];
boolean isDefault = defaultSchemaName == null || defaultSchemaName.equals(schemaName); boolean isDefault = defaultSchemaName == null || defaultSchemaName.equals(schemaName);
DbSchema schema = new DbSchema(this, schemaName, isDefault); DbSchema schema = new DbSchema(this, schemaName, isDefault);
if (schema.isDefault) { if (isDefault) {
defaultSchema = schema; defaultSchema = schema;
} }
schemas[i] = schema; schemas[i] = schema;
......
...@@ -74,7 +74,10 @@ public class DbSchema { ...@@ -74,7 +74,10 @@ public class DbSchema {
this.name = name; this.name = name;
this.quotedName = contents.quoteIdentifier(name); this.quotedName = contents.quoteIdentifier(name);
this.isDefault = isDefault; this.isDefault = isDefault;
if (name.equals("INFORMATION_SCHEMA")) { if (name == null) {
// firebird
isSystem = true;
} else if ("INFORMATION_SCHEMA".equals(name)) {
isSystem = true; isSystem = true;
} else if (!contents.isH2() && StringUtils.toUpperEnglish(name).startsWith("INFO")) { } else if (!contents.isH2() && StringUtils.toUpperEnglish(name).startsWith("INFO")) {
isSystem = true; isSystem = true;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论