DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=18547>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=18547

AbstractEsqlConnection: fix for Sybase ASE

           Summary: AbstractEsqlConnection: fix for Sybase ASE
           Product: Cocoon 2
           Version: Current CVS
          Platform: All
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: general components
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


Here's a patch for
cocoon-
2.1/src/blocks/databases/java/org/apache/cocoon/components/language/markup/xsp/A
bstractEsqlConnection.java
to:
- fix an error with Sybase ASE (unlike Sybase ASA, ASE doesn't support "select 
top")
- enhance behavior with MS Sql Server (it supports "select top" like Sybase ASA)



--- AbstractEsqlConnection.java-1.2     2003-04-01 14:20:08.000000000 +1000
+++ AbstractEsqlConnection.java 2003-04-01 14:12:48.000000000 +1000
@@ -147,12 +147,26 @@
 
 
     /**
+     * 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()
+     * --------------------------------------  --------------------------------
---------
+     * Adaptive Server Anywhere                7.0.4.3373
+     * 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.
      * (This type does not work for some databases like mssql though)
      *
-     * @param type {sybase|postgresql|mysql|oracle|jdbc}
+     * @param type {sybase|sybase-ase|ms-
sqlserver|postgresql|mysql|oracle|jdbc}
      * @param queryString
      * @return implementation of the AbstractEsqlQuery
      * @throws SQLException
@@ -169,6 +183,15 @@
                 query = new MysqlEsqlQuery(getConnection(),queryString);
             }
             else if (url.startsWith("jdbc:sybase:")) {
+                if (isSybaseAdaptiveServerAnywhere()) {
+                   query = new SybaseEsqlQuery(getConnection(),queryString);
+               } else {
+                   query = new JdbcEsqlQuery(getConnection(),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(getConnection(),queryString);
             }
             else if (url.startsWith("jdbc:oracle:")) {
@@ -182,7 +205,7 @@
                 query = new JdbcEsqlQuery(getConnection(),queryString);
             }
         }
-        else if ("sybase".equalsIgnoreCase(type)) {
+        else if ("sybase".equalsIgnoreCase(type) || "ms-
sqlserver".equalsIgnoreCase(type)) {
             query = new SybaseEsqlQuery(getConnection(),queryString);
         }
         else if ("postgresql".equalsIgnoreCase(type)) {
@@ -200,7 +223,7 @@
         else if ("pervasive".equalsIgnoreCase(type)) {
             query = new PervasiveEsqlQuery(getConnection(),queryString);
         }
-        else if ("jdbc".equalsIgnoreCase(type)) {
+        else if ("jdbc".equalsIgnoreCase(type) || "sybase-ase".equalsIgnoreCase
(type)) {
             query = new JdbcEsqlQuery(getConnection(),queryString);
         }
         else {

Reply via email to