You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@turbine.apache.org by fe...@apache.org on 2001/08/15 07:10:37 UTC

cvs commit: jakarta-turbine/src/java/org/apache/turbine/util/db/adapter DBMSSQL7.java DB.java

fedor       01/08/14 22:10:37

  Modified:    src/java/org/apache/turbine/om/peer Tag: T_2_1_BRANCH
                        BasePeer.java
               src/java/org/apache/turbine/util/db Tag: T_2_1_BRANCH
                        Query.java
               src/java/org/apache/turbine/util/db/adapter Tag:
                        T_2_1_BRANCH DB.java
  Added:       src/java/org/apache/turbine/util/db/adapter Tag:
                        T_2_1_BRANCH DBMSSQL7.java
  Log:
  limit fixes. also adds MSSQL7 adapter. these are not in the HEAD.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.58.4.9  +39 -51    jakarta-turbine/src/java/org/apache/turbine/om/peer/Attic/BasePeer.java
  
  Index: BasePeer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine/src/java/org/apache/turbine/om/peer/Attic/BasePeer.java,v
  retrieving revision 1.58.4.8
  retrieving revision 1.58.4.9
  diff -u -r1.58.4.8 -r1.58.4.9
  --- BasePeer.java	2001/07/28 01:40:20	1.58.4.8
  +++ BasePeer.java	2001/08/15 05:10:37	1.58.4.9
  @@ -111,7 +111,7 @@
    * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
    * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
    * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
  - * @version $Id: BasePeer.java,v 1.58.4.8 2001/07/28 01:40:20 mpoeschl Exp $
  + * @version $Id: BasePeer.java,v 1.58.4.9 2001/08/15 05:10:37 fedor Exp $
    */
   public abstract class BasePeer
   {
  @@ -1051,45 +1051,8 @@
               }
           }
   
  -        // Limit the number of rows returned.
  -        int limit = criteria.getLimit();
  -        int offset = criteria.getOffset();
  -        String limitString = null;
  -        if ( offset > 0 && db.supportsNativeOffset() )
  -        {
  -            switch(db.getLimitStyle())
  -            {
  -                case DB.LIMIT_STYLE_MYSQL:
  -                    limitString = new StringBuffer().append(offset)
  -                                                    .append(", ")
  -                                                    .append(limit)
  -                                                    .toString();
  -                    break;
  -                case DB.LIMIT_STYLE_POSTGRES:
  -                    limitString = new StringBuffer().append(limit)
  -                                                    .append(", ")
  -                                                    .append(offset)
  -                                                    .toString();
  -                    break;
  -            }
  +        setLimit(criteria, db, query);
   
  -            // Now set the criteria's limit and offset to return the
  -            // full resultset since the results are limited on the
  -            // server.
  -            criteria.setLimit(-1);
  -            criteria.setOffset(0);
  -        }
  -        else if (limit > 0 && db.supportsNativeLimit() )
  -        {
  -            limitString = String.valueOf(limit);
  -
  -            // Now set the criteria's limit to return the full
  -            // resultset since the results are limited on the server.
  -            criteria.setLimit(-1);
  -        }
  -
  -        if (limitString != null) query.setLimit(limitString);
  -
           String sql = query.toString();
           TurbineLogging.getLogger(TurbineConstants.SQL_LOG_FACILITY).debug(sql);
           return sql;
  @@ -2145,10 +2108,21 @@
               }
           }
   
  +        setLimit(criteria, db, query);
  +
  +        String sql = query.toString();
  +        TurbineLogging.getLogger(TurbineConstants.SQL_LOG_FACILITY).debug(sql);
  +        queryString.append (sql);
  +    }
  +
  +    private static void setLimit(Criteria criteria, DB db, Query query)
  +    {
           // Limit the number of rows returned.
           int limit = criteria.getLimit();
           int offset = criteria.getOffset();
           String limitString = null;
  +        String topString = null;
  +        String rcString = null;
           if ( offset > 0 && db.supportsNativeOffset() )
           {
               switch(db.getLimitStyle())
  @@ -2158,35 +2132,49 @@
                                                       .append(", ")
                                                       .append(limit)
                                                       .toString();
  +
  +                    criteria.setLimit(-1);
                       break;
                   case DB.LIMIT_STYLE_POSTGRES:
                       limitString = new StringBuffer().append(limit)
                                                       .append(", ")
                                                       .append(offset)
                                                       .toString();
  +
  +                    criteria.setLimit(-1);
                       break;
  +                default: //for DBs which support limit but not offset
  +                    limit +=offset; //this needs to be implemented in the retrieval to skip records
  +                    throw new UnsupportedOperationException("non-native offset is not implemented");
               }
  -
  -            // Now set the criteria's limit and offset to return the
  -            // full resultset since the results are limited on the
  -            // server.
  -            criteria.setLimit(-1);
               criteria.setOffset(0);
           }
  -        else if (limit > 0 && db.supportsNativeLimit() )
  +        if (limit > 0 && db.supportsNativeLimit() )
           {
  -            limitString = String.valueOf(limit);
  +            switch(db.getLimitStyle())
  +            {
  +                case DB.LIMIT_STYLE_MYSQL:
  +                case DB.LIMIT_STYLE_POSTGRES:
  +                    limitString = String.valueOf(limit);
  +                    break;
  +                case DB.LIMIT_STYLE_MSSQL7:
  +                    topString = String.valueOf(limit);
  +                    break;
  +                case DB.LIMIT_STYLE_SYBASE:
  +                    rcString = String.valueOf(limit);
  +                    break;
  +                default:
  +                    throw new UnsupportedOperationException("non-native limit is not implemented");
  +            }
   
               // Now set the criteria's limit to return the full
               // resultset since the results are limited on the server.
               criteria.setLimit(-1);
           }
  -
  -        if (limitString != null) query.setLimit(limitString);
   
  -        String sql = query.toString();
  -        TurbineLogging.getLogger(TurbineConstants.SQL_LOG_FACILITY).debug(sql);
  -        queryString.append (sql);
  +        query.setLimit(limitString);
  +        query.setRowcount(rcString);
  +        query.setTop(topString);
       }
   
   }
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.4.10.2  +21 -3     jakarta-turbine/src/java/org/apache/turbine/util/db/Attic/Query.java
  
  Index: Query.java
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine/src/java/org/apache/turbine/util/db/Attic/Query.java,v
  retrieving revision 1.4.10.1
  retrieving revision 1.4.10.2
  diff -u -r1.4.10.1 -r1.4.10.2
  --- Query.java	2001/05/07 03:06:40	1.4.10.1
  +++ Query.java	2001/08/15 05:10:37	1.4.10.2
  @@ -64,7 +64,7 @@
    * is used primarily by BasePeer.
    *
    * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
  - * @version $Id: Query.java,v 1.4.10.1 2001/05/07 03:06:40 jvanzyl Exp $
  + * @version $Id: Query.java,v 1.4.10.2 2001/08/15 05:10:37 fedor Exp $
    */
   public class Query
   {
  @@ -78,7 +78,9 @@
       private static final String BETWEEN = " BETWEEN ";
       private static final String LIMIT = " LIMIT ";
       private static final String ROWCOUNT = " SET ROWCOUNT ";
  +    private static final String TOP = " TOP ";
   
  +
       private StringStackBuffer selectModifiers = new StringStackBuffer();
       private StringStackBuffer selectColumns = new StringStackBuffer();
       private StringStackBuffer fromTables = new StringStackBuffer();
  @@ -87,6 +89,18 @@
       private String limit;
       private String rowcount;
   
  +    public String getTop()
  +    {
  +        return top;
  +    }
  +
  +    public void setTop(String top)
  +    {
  +        this.top = top;
  +    }
  +
  +    private String top;
  +
       /**
        * Retrieve the modifier buffer in order to add modifiers to this
        * query.  E.g. DISTINCT and ALL.
  @@ -203,8 +217,12 @@
                   .append(rowcount)
                   .append(" ");
           stmt.append(SELECT)
  -            .append(selectModifiers.toString(" "))
  -            .append(selectColumns.toString(", "))
  +            .append(selectModifiers.toString(" "));
  +        if ( top != null )
  +            stmt.append(TOP)
  +                .append(top)
  +                .append(" ");
  +        stmt.append(selectColumns.toString(", "))
               .append(FROM)
               .append(fromTables.toString(", "));
           if ( !whereCriteria.empty() )
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.4.10.6  +4 -1      jakarta-turbine/src/java/org/apache/turbine/util/db/adapter/Attic/DB.java
  
  Index: DB.java
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine/src/java/org/apache/turbine/util/db/adapter/Attic/DB.java,v
  retrieving revision 1.4.10.5
  retrieving revision 1.4.10.6
  diff -u -r1.4.10.5 -r1.4.10.6
  --- DB.java	2001/08/06 04:48:27	1.4.10.5
  +++ DB.java	2001/08/15 05:10:37	1.4.10.6
  @@ -100,7 +100,7 @@
    *
    * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
    * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
  - * @version $Id: DB.java,v 1.4.10.5 2001/08/06 04:48:27 djpolito Exp $
  + * @version $Id: DB.java,v 1.4.10.6 2001/08/15 05:10:37 fedor Exp $
    */
   public abstract class DB implements Serializable
   {
  @@ -127,6 +127,9 @@
   
       /** SET ROWCOUNT <limit> SELECT ... SET ROWCOUNT 0 */
       public static final int LIMIT_STYLE_SYBASE = 3;
  +
  +    /** SELECT TOP <limit> ...  */
  +    public static final int LIMIT_STYLE_MSSQL7 = 4;
   
   
       /**
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.1   +87 -0     jakarta-turbine/src/java/org/apache/turbine/util/db/adapter/Attic/DBMSSQL7.java
  
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: turbine-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: turbine-dev-help@jakarta.apache.org