You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by tc...@apache.org on 2003/05/01 15:03:50 UTC
cvs commit: cocoon-2.1/src/blocks/databases/java/org/apache/cocoon/components/language/markup/xsp AbstractEsqlConnection.java Cocoon2EsqlConnection.java
tcurdt 2003/05/01 06:03:50
Modified: src/blocks/databases/java/org/apache/cocoon/components/language/markup/xsp
AbstractEsqlConnection.java
Cocoon2EsqlConnection.java
Log:
throw an appropriate exception if no connection could be obtained (fixes bug #15820),
use the metadata database identifier instead of the url for the database type auto detection (fixes bug #18547 and adds auto support for sybase ase)
Revision Changes Path
1.2 +37 -21 cocoon-2.1/src/blocks/databases/java/org/apache/cocoon/components/language/markup/xsp/AbstractEsqlConnection.java
Index: AbstractEsqlConnection.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/databases/java/org/apache/cocoon/components/language/markup/xsp/AbstractEsqlConnection.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AbstractEsqlConnection.java 20 Mar 2003 21:51:43 -0000 1.1
+++ AbstractEsqlConnection.java 1 May 2003 13:03:50 -0000 1.2
@@ -159,49 +159,65 @@
*/
public AbstractEsqlQuery createQuery(final String type, final String queryString) throws SQLException {
AbstractEsqlQuery query;
+
+ Connection connection = getConnection();
+
if ("".equals(type) || "auto".equalsIgnoreCase(type)) {
- String url = getURL();
+ String database = connection.getMetaData().getDatabaseProductName().toLowerCase();
- if (url.startsWith("jdbc:postgresql:")) {
- query = new PostgresEsqlQuery(getConnection(),queryString);
+ if (database.indexOf("postgresql") > -1) {
+ query = new PostgresEsqlQuery(connection,queryString);
}
- else if (url.startsWith("jdbc:mysql:")) {
- query = new MysqlEsqlQuery(getConnection(),queryString);
+ else if (database.indexOf("mysql") > -1) {
+ query = new MysqlEsqlQuery(connection,queryString);
}
- else if (url.startsWith("jdbc:sybase:")) {
- query = new SybaseEsqlQuery(getConnection(),queryString);
+ else if (database.indexOf("anywhere") > -1 || database.indexOf("sqlserver") > -1) {
+ query = new SybaseEsqlQuery(connection,queryString);
}
- else if (url.startsWith("jdbc:oracle:")) {
- query = new OracleEsqlQuery(getConnection(),queryString);
+ else if (database.indexOf("oracle") > -1) {
+ query = new OracleEsqlQuery(connection,queryString);
}
- else if (url.startsWith("jdbc:pervasive:")) {
- query = new PervasiveEsqlQuery(getConnection(),queryString);
+ else if (database.indexOf("pervasive") > -1) {
+ query = new PervasiveEsqlQuery(connection,queryString);
}
- else {
- getLogger().warn("Cannot guess database type from jdbc url: " + String.valueOf(url) +" - Defaulting to JDBC");
+ else if (database.indexOf("hsql") > -1) {
query = new JdbcEsqlQuery(getConnection(),queryString);
}
+ else {
+ getLogger().warn("Unrecognized database: \"" + String.valueOf(database) + "\"");
+
+ // temp start
+ String message = "The database detection method has changed.\nIf your database "+
+ "is not being recognized (anymore) you can either fix it in the Cocoon2EsqlConnection class, "+
+ " file it to bugzilla, report it to cocoon-dev or to me (tcurdt.at.apache.org) directly.\n" +
+ " Only be sure to include the database string \"" + String.valueOf(database) + "\" in your post.";
+ getLogger().error( message );
+ throw new SQLException( message );
+ // temp stop
+
+ //query = new JdbcEsqlQuery(getConnection(),queryString);
+ }
}
else if ("sybase".equalsIgnoreCase(type)) {
- query = new SybaseEsqlQuery(getConnection(),queryString);
+ query = new SybaseEsqlQuery(connection,queryString);
}
else if ("postgresql".equalsIgnoreCase(type)) {
- query = new PostgresEsqlQuery(getConnection(),queryString);
+ query = new PostgresEsqlQuery(connection,queryString);
}
else if ("postgresql-old".equalsIgnoreCase(type)) {
- query = new PostgresOldEsqlQuery(getConnection(),queryString);
+ query = new PostgresOldEsqlQuery(connection,queryString);
}
else if ("mysql".equalsIgnoreCase(type)) {
- query = new MysqlEsqlQuery(getConnection(),queryString);
+ query = new MysqlEsqlQuery(connection,queryString);
}
else if ("oracle".equalsIgnoreCase(type)) {
- query = new OracleEsqlQuery(getConnection(),queryString);
+ query = new OracleEsqlQuery(connection,queryString);
}
else if ("pervasive".equalsIgnoreCase(type)) {
- query = new PervasiveEsqlQuery(getConnection(),queryString);
+ query = new PervasiveEsqlQuery(connection,queryString);
}
else if ("jdbc".equalsIgnoreCase(type)) {
- query = new JdbcEsqlQuery(getConnection(),queryString);
+ query = new JdbcEsqlQuery(connection,queryString);
}
else {
getLogger().error("Unknown database type: " + String.valueOf(type));
1.2 +6 -2 cocoon-2.1/src/blocks/databases/java/org/apache/cocoon/components/language/markup/xsp/Cocoon2EsqlConnection.java
Index: Cocoon2EsqlConnection.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/databases/java/org/apache/cocoon/components/language/markup/xsp/Cocoon2EsqlConnection.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Cocoon2EsqlConnection.java 9 Mar 2003 00:03:06 -0000 1.1
+++ Cocoon2EsqlConnection.java 1 May 2003 13:03:50 -0000 1.2
@@ -97,12 +97,16 @@
if (datasource != null) {
// get the connection from the pool
connection = datasource.getConnection();
- return(connection);
}
else {
// open a new connection
connection = DriverManager.getConnection(getURL(), getProperties());
+ }
+ if (connection != null) {
return(connection);
+ }
+ else {
+ throw new SQLException("Could not obtain connection");
}
}
}