haul        2002/08/11 13:07:45

  Modified:    src/java/org/apache/cocoon/components/language/markup/xsp
                        Tag: cocoon_2_0_3_branch XSPRequestHelper.java
                        EsqlQuery.java
  Log:
    <action dev="CH" type="fix">
     Request logicsheet: Fix session tags.
    </action>
    <action dev="CH" type="update">
     ESQL: Allow arbitrary types for prepared and callable statements via
     dynamically loading classes like the SQLTransformer does. Is-null now uses
     dynamic colum specification. Fixed skip-row feature, which was off by one.
     Added tag to get connection meta data.
    </action>
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.11.2.1  +37 -2     
xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/XSPRequestHelper.java
  
  Index: XSPRequestHelper.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/XSPRequestHelper.java,v
  retrieving revision 1.11
  retrieving revision 1.11.2.1
  diff -u -r1.11 -r1.11.2.1
  --- XSPRequestHelper.java     27 Feb 2002 05:33:50 -0000      1.11
  +++ XSPRequestHelper.java     11 Aug 2002 20:07:45 -0000      1.11.2.1
  @@ -64,7 +64,6 @@
   import java.util.Enumeration;
   import java.util.Locale;
   import java.util.Map;
  -import java.util.List;
   
   /**
    * The <code>Request</code> object helper
  @@ -528,5 +527,41 @@
   
           uribuf.append(request.getRequestURI());
           return uribuf.toString();
  +    }
  +
  +    /**
  +     * Return the given session attribute value or a user-provided default if
  +     * none was specified.
  +     *
  +     * @param objectModel The Map objectModel
  +     * @param name The attribute name
  +     * @param defaultValue Value to substitute in absence of a attribute value
  +     */
  +    public static Object getSessionAttribute(Map objectModel, String name,
  +                                             Object defaultValue ) {
  +
  +        Session session = ObjectModelHelper.getRequest(objectModel).getSession();
  +        Object obj = session.getAttribute(name);
  +        return (obj != null ? obj : defaultValue );
  +    }
  +
  +    /**
  +     * Output the given session attribute value or a user-provided default if
  +     * none was specified.
  +     *
  +     * @param objectModel The Map objectModel
  +     * @param contentHandler The SAX content handler
  +     * @param name The attribute name
  +     * @param defaultValue Value to substitute in absence of an attribute value
  +     * @exception SAXException If a SAX error occurs
  +     */
  +    public static void getSessionAttribute(Map objectModel, ContentHandler 
contentHandler,
  +                                           String name, Object defaultValue)
  +        throws SAXException {
  +        AttributesImpl attr = new AttributesImpl();
  +        XSPObjectHelper.addAttribute(attr, "name", name);
  +
  +        XSPObjectHelper.elementData(URI, PREFIX, contentHandler, "parameter",
  +            getSessionAttribute(objectModel, name, defaultValue).toString(), attr);
       }
   }
  
  
  
  1.11.2.8  +58 -10    
xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/EsqlQuery.java
  
  Index: EsqlQuery.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/EsqlQuery.java,v
  retrieving revision 1.11.2.7
  retrieving revision 1.11.2.8
  diff -u -r1.11.2.7 -r1.11.2.8
  --- EsqlQuery.java    25 Jul 2002 19:51:36 -0000      1.11.2.7
  +++ EsqlQuery.java    11 Aug 2002 20:07:45 -0000      1.11.2.8
  @@ -58,7 +58,7 @@
   import java.sql.ResultSetMetaData;
   import java.sql.SQLException;
   import java.util.ArrayList;
  -
  +import java.lang.reflect.Field;
   /**
    * This helper class takes care of contstructing queries
    * and cursor positioning (paging) for all different kinds
  @@ -183,12 +183,33 @@
   
     public PreparedStatement prepareStatement() throws SQLException {
       switch(limitMethod) {
  -      case EsqlConnection.LIMIT_METHOD_JDBC:
  -        preparedStatement = connection.prepareStatement( getQueryString(), 
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
  +    case EsqlConnection.LIMIT_METHOD_POSTGRESQL:
  +    case EsqlConnection.LIMIT_METHOD_MYSQL:
  +        preparedStatement = connection.prepareStatement(getQueryString() );
           break;
  -      default:
  -        preparedStatement = connection.prepareStatement( getQueryString() );
  -    };
  +    case EsqlConnection.LIMIT_METHOD_JDBC:
  +        // Produce scrollable ResultSet and skip rows with 
ResultSet.absolute(skipRows).
  +        // With SQL Server, statement.getResultSet() throws
  +        // java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error 
setting up static cursor cache.
  +        // Same error with TYPE_SCROLL_SENSITIVE.
  +        preparedStatement = connection.prepareStatement( getQueryString(),
  +                                                         
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
  +        if (maxRows > -1) {
  +            // if all JDBC driver's honoured this the code to quit after maxRows 
could be removed
  +            preparedStatement.setMaxRows(skipRows + maxRows +1); // need this to 
determine if there's more
  +        }
  +        break;
  +    case EsqlConnection.LIMIT_METHOD_NOLIMIT:
  +    default:
  +        // maxRows can be set without the limit method being set - it defaults to 
LIMIT_METHOD_NOLIMIT
  +        // which is not such a good name as its really another way of limiting 
using JDBC.
  +        // Produce non-scrollable ResultSet and skip rows with multiple 
ResultSet.next().
  +        preparedStatement = connection.prepareStatement(getQueryString() );
  +        if (maxRows > -1) {
  +            preparedStatement.setMaxRows(skipRows + maxRows +1); // need this to 
determine if there's more
  +        }
  +        break;
  +    }
       statement = preparedStatement;
       return(preparedStatement);
     }
  @@ -196,11 +217,22 @@
   
     public CallableStatement prepareCall() throws SQLException {
       switch(limitMethod) {
  -      case EsqlConnection.LIMIT_METHOD_JDBC:
  +    case EsqlConnection.LIMIT_METHOD_POSTGRESQL:
  +    case EsqlConnection.LIMIT_METHOD_MYSQL:
  +        preparedStatement = connection.prepareCall( getQueryString() );
  +        break;
  +    case EsqlConnection.LIMIT_METHOD_JDBC:
           preparedStatement = connection.prepareCall( getQueryString(), 
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
  +        if (maxRows > -1) {
  +            preparedStatement.setMaxRows(skipRows + maxRows +1); // need this to 
determine if there's more
  +        }
           break;
  -      default:
  +    case EsqlConnection.LIMIT_METHOD_NOLIMIT:
  +     default:
           preparedStatement = connection.prepareCall( getQueryString() );
  +        if (maxRows > -1) {
  +            preparedStatement.setMaxRows(skipRows + maxRows +1); // need this to 
determine if there's more
  +        }
       };
       statement = preparedStatement;
       return((CallableStatement)preparedStatement);
  @@ -338,7 +370,7 @@
   
     public boolean execute( int resultSetFromObject ) throws SQLException {
         hasResultSet = this.execute(false);
  -      resultSet = (ResultSet) ((CallableStatement) preparedStatement).getObject(1);
  +      resultSet = (ResultSet) ((CallableStatement) 
preparedStatement).getObject(resultSetFromObject);
         resultSetValid = true;
         return hasResultSet;
     }
  @@ -428,4 +460,20 @@
         };
       }
     }
  +
  +    /** 
  +     * Get the integer value for a JDBC type.
  +     */
  +    public static int getType(String typeName) 
  +        throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException 
{
  +
  +        int index = typeName.lastIndexOf(".");
  +        String className = typeName.substring(0, index);
  +        String fieldName = typeName.substring(index + 1);
  +        Class clss = Class.forName( className );
  +        Field fld = clss.getField( fieldName );
  +        return fld.getInt( fieldName );
  +    }           
  +
  +
   }
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to