You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cocoon.apache.org by neil <nb...@aisoftware.com.au> on 2003/02/18 02:05:57 UTC
patch for and with Sybase and MS SQL server
The new implementation for <esql:skip-rows> and <esql:max-rows>
in src/java/org/apache/cocoon/components/language/markup/xsp/AbstractEsqlConnection.java
is pretty neat, especially for oracle.
1) Unfortunately, Sybase Adaptive Server Enterprise does not support "select TOP",
only Sybase Adaptive Server Anywhere. Both use urls starting with "jdbc:sybase:"
so some other means must be used to distinguish between them.
2) MS SQL Server also supports "select TOP", so SybaseEsqlQuery should be used with it too.
Here is a patch to address this stuff:
--- /cygdrive/c/xml-cocoon2/src/blocks/databases/java/org/apache/cocoon/components/language/markup/xsp/AbstractEsqlConnection.java
Sat Feb 1 09:49:18 2003
+++ ../src/java/org/apache/cocoon/components/language/markup/xsp/AbstractEsqlConnection.java Tue Feb 18 12:00:38 2003
@@ -122,6 +122,19 @@
/**
+ * Sybase has 2 RDBMS products. The Sybase JDBC driver uses a url starting with "jdbc:sybase:" for both.
+ * Here are the product names and versions returned from the Sybase JDBC driver:
+ * getMetaData().getDatabaseProductName() getMetaData().getDatabaseProductVersion()
+ * 1) Adaptive Server Anywhere 7.0.4.3373
+ * 2) Sybase SQL Server Adaptive Server Enterprise/12.0.0.3/P/SWR 9777 ESD 4/NT (IX86)/OS
4.0/1699/32bit/OPT/Wed Sep 05 21:14:50 2001
+ * The first supports "select TOP" as used by SybaseEsqlQuery, but the second does not.
+ */
+ private boolean isSybaseAdaptiveServerAnywhere() throws SQLException {
+ String databaseProductName = getConnection().getMetaData().getDatabaseProductName().toLowerCase();
+ return databaseProductName.indexOf("anywhere") > -1;
+ }
+
+ /**
* Factory method for creating an EsqlQuery object. If type is set to
* "" or "auto" it will try to find type from the JDBC connection URL.
* If this does not succeed the generic JDBC type will be assumed.
@@ -144,6 +157,15 @@
query = new MysqlEsqlQuery(this,queryString);
}
else if (url.startsWith("jdbc:sybase:")) {
+ if (isSybaseAdaptiveServerAnywhere()) {
+ query = new SybaseEsqlQuery(this,queryString);
+ } else {
+ query = new JdbcEsqlQuery(this,queryString);
+ }
+ }
+ else if(url.startsWith("jdbc:microsoft:sqlserver:")) {
+ // MS SQL Server also supports "select TOP" like Sybase ASA
+ // Maybe SybaseEsqlQuery should be renamed to something like SelectTopEsqlQuery?
query = new SybaseEsqlQuery(this,queryString);
}
else if (url.startsWith("jdbc:oracle:")) {
@@ -155,6 +177,13 @@
}
}
else if ("sybase".equalsIgnoreCase(type)) {
+ if (isSybaseAdaptiveServerAnywhere()) {
+ query = new SybaseEsqlQuery(this,queryString);
+ } else {
+ query = new JdbcEsqlQuery(this,queryString);
+ }
+ }
+ else if ("mssqlserver".equalsIgnoreCase(type)) {
query = new SybaseEsqlQuery(this,queryString);
}
else if ("postgresql".equalsIgnoreCase(type)) { query = new PostgresEsqlQuery(this,queryString);
---------------------------------------------------------------------
Please check that your question has not already been answered in the
FAQ before posting. <http://xml.apache.org/cocoon/faq/index.html>
To unsubscribe, e-mail: <co...@xml.apache.org>
For additional commands, e-mail: <co...@xml.apache.org>