Index: src/Database/HaskellDB.hs
===================================================================
RCS file: /cvsroot/haskelldb/haskelldb/src/Database/HaskellDB.hs,v
retrieving revision 1.28
diff -u -r1.28 HaskellDB.hs
--- src/Database/HaskellDB.hs	19 Aug 2004 06:58:53 -0000	1.28
+++ src/Database/HaskellDB.hs	17 Nov 2005 09:32:48 -0000
@@ -45,6 +45,7 @@
 	
 	, asc, desc, order
 	, top --, topPercent
+        , _drop, offset
 
         , _case
 	, _default
Index: src/Database/HaskellDB/Optimize.hs
===================================================================
RCS file: /cvsroot/haskelldb/haskelldb/src/Database/HaskellDB/Optimize.hs,v
retrieving revision 1.17
diff -u -r1.17 Optimize.hs
--- src/Database/HaskellDB/Optimize.hs	11 Nov 2004 14:18:24 -0000	1.17
+++ src/Database/HaskellDB/Optimize.hs	17 Nov 2005 09:32:48 -0000
@@ -217,6 +217,10 @@
 pushRestrict (Special top@(Top _ _) (Project assoc query))
     = Project assoc (pushRestrict (Special top query))
 
+-- Drop is too
+pushRestrict (Special drop@(Drop _) (Project assoc query))
+    = Project assoc (pushRestrict (Special drop query))
+
 pushRestrict (Special op (query@(Special _ _)))
 	= case (pushed) of
 	   (Special _ _)  -> Special op pushed
Index: src/Database/HaskellDB/PrimQuery.hs
===================================================================
RCS file: /cvsroot/haskelldb/haskelldb/src/Database/HaskellDB/PrimQuery.hs,v
retrieving revision 1.27
diff -u -r1.27 PrimQuery.hs
--- src/Database/HaskellDB/PrimQuery.hs	29 Aug 2005 09:51:11 -0000	1.27
+++ src/Database/HaskellDB/PrimQuery.hs	17 Nov 2005 09:32:48 -0000
@@ -73,6 +73,7 @@
 
 data SpecialOp  = Order [PrimExpr] -- ^ always UnExpr (OpDesc|OpAsc) (AttrExpr name)
 		| Top Bool Integer -- ^ 'True' = top percent, 'False' = top n
+		| Drop Integer -- ^ drop n for LIMIT
 		deriving (Show)
 
 data PrimExpr   = AttrExpr  Attribute
@@ -333,6 +334,7 @@
 -- FIXME: should we remove topPercent?
 -- doesn't seem to be any support for it in e.g.g MySQL and PostgreSQL
 ppSpecialOp (Top True n) = error "topPercent not supported"
+ppSpecialOp (Drop n) = text "OFFSET" <+> text (show n)
 
 -- | Pretty prints a literal
 ppLiteral :: Literal -> Doc
Index: src/Database/HaskellDB/Query.hs
===================================================================
RCS file: /cvsroot/haskelldb/haskelldb/src/Database/HaskellDB/Query.hs,v
retrieving revision 1.59
diff -u -r1.59 Query.hs
--- src/Database/HaskellDB/Query.hs	19 Aug 2004 13:02:02 -0000	1.59
+++ src/Database/HaskellDB/Query.hs	17 Nov 2005 09:32:50 -0000
@@ -39,6 +39,7 @@
 	     , stddev, stddevP, variance, varianceP
 	     , asc, desc, order
 	     , top --, topPercent
+             , _drop, offset
              , _case
 	     , _default
 	     ) where
@@ -538,6 +539,10 @@
                         | otherwise     = n
 -}
 
+_drop, offset :: Integer -> Query ()
+_drop n           = updatePrimQuery_ (Special (Drop n))
+offset = _drop
+
 -----------------------------------------------------------
 -- Ordering results
 -----------------------------------------------------------
Index: src/Database/HaskellDB/Sql.hs
===================================================================
RCS file: /cvsroot/haskelldb/haskelldb/src/Database/HaskellDB/Sql.hs,v
retrieving revision 1.22
diff -u -r1.22 Sql.hs
--- src/Database/HaskellDB/Sql.hs	4 May 2004 18:18:05 -0000	1.22
+++ src/Database/HaskellDB/Sql.hs	17 Nov 2005 09:32:50 -0000
@@ -50,6 +50,7 @@
                               , groupby  :: [String]
                               , orderby	 :: [PrimExpr]
 			      , limit    :: [String]
+                              , offset   :: [String]
                               }
                 | SqlBin   String SqlSelect SqlSelect
                 | SqlTable TableName -- ^ Select a whole table named TableName.
@@ -92,7 +93,8 @@
 			    , criteria 	= []
 			    , groupby	= []
 			    , orderby	= []
-			    , limit     = []}
+			    , limit     = []
+                            , offset    = []}
 
 
 -----------------------------------------------------------
@@ -160,6 +162,10 @@
           	where
                   sql	    = toSelect q
 
+          special op@(Drop _) q
+                = sql { offset = show (ppSpecialOp op) : offset sql }
+                where
+                  sql       = toSelect q
 
 toSelect :: SqlSelect -> SqlSelect
 toSelect sql    = case sql of
@@ -188,13 +194,14 @@
 
 -- | Pretty prints a 'SqlSelect'
 ppSql :: SqlSelect -> Doc
-ppSql (SqlSelect options attrs tables criteria groupby orderby limit)
+ppSql (SqlSelect options attrs tables criteria groupby orderby limit offset)
     = text "SELECT DISTINCT" <+> (hsep . map text) options <+> ppAttrs attrs
       $$ f "FROM " ppTables tables
       $$ f "WHERE" ppCriteria criteria
       $$ f "GROUP BY" ppGroupBy groupby
       $$ f "ORDER BY" ppOrderBy orderby
       $$ (hsep . map text) limit
+      $$ (hsep . map text) offset
     where
     f clause action xs    | null xs       = empty
 			  | otherwise     = text clause <+> action xs
