You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@empire-db.apache.org by do...@apache.org on 2013/10/16 17:21:46 UTC

svn commit: r1532792 - /empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/h2/DBDatabaseDriverH2.java

Author: doebele
Date: Wed Oct 16 15:21:46 2013
New Revision: 1532792

URL: http://svn.apache.org/r1532792
Log:
EMPIREDB-196
limitRows and skipRows for H2 databsae - a contribution of Bimal Manukonda.

Modified:
    empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/h2/DBDatabaseDriverH2.java

Modified: empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/h2/DBDatabaseDriverH2.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/h2/DBDatabaseDriverH2.java?rev=1532792&r1=1532791&r2=1532792&view=diff
==============================================================================
--- empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/h2/DBDatabaseDriverH2.java (original)
+++ empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/h2/DBDatabaseDriverH2.java Wed Oct 16 15:21:46 2013
@@ -31,6 +31,7 @@ import org.apache.empire.db.DBDriverFeat
 import org.apache.empire.db.DBObject;
 import org.apache.empire.db.DBSQLScript;
 import org.apache.empire.db.DBTable;
+import org.apache.empire.exceptions.InvalidArgumentException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -52,10 +53,54 @@ public class DBDatabaseDriverH2 extends 
     {
         private final static long serialVersionUID = 1L;
       
+	    protected int limitRows = -1;
+	    protected int skipRows  =  0;
+        
         public DBCommandH2(DBDatabase db)
         {
             super(db);
         }
+    
+	    @Override
+	    public void limitRows(int limitRows)
+	    {
+	        // set limit
+	        this.limitRows = limitRows;
+	    }
+	
+	    @Override
+	    public void skipRows(int skipRows)
+	    {
+	        if (skipRows<0)
+	            throw new InvalidArgumentException("skipRows", skipRows);
+	        // set skip
+	        this.skipRows = skipRows; 
+	    }
+	     
+	    @Override
+	    public void clearLimit()
+	    {
+	    	// remove skip and limit
+	        this.limitRows = -1;
+	        this.skipRows  =  0;
+	    }
+        
+        @Override
+        public void getSelect(StringBuilder buf)
+        {   // Prepares statement
+        	super.getSelect(buf);
+            // add limit and offset
+            if (limitRows>=0)
+            {   buf.append("\r\nLIMIT ");
+                buf.append(String.valueOf(limitRows));
+                // Offset
+                if (skipRows>0) 
+                {   buf.append(" OFFSET ");
+                    buf.append(String.valueOf(skipRows));
+                }    
+            }
+        }
+        
     }
     
     // Properties
@@ -158,8 +203,10 @@ public class DBDatabaseDriverH2 extends 
     {
         switch (type)
         {   // return support info 
-            case CREATE_SCHEMA: return true;
-            case SEQUENCES:     return useSequenceTable;    
+            case CREATE_SCHEMA: 	return true;
+            case SEQUENCES:     	return useSequenceTable;    
+            case QUERY_LIMIT_ROWS:  return true;
+            case QUERY_SKIP_ROWS:   return true;
             default:
                 // All other features are not supported by default
                 return false;