Index: cpa/src/main/java/org/castor/cpa/persistence/sql/driver/SapDbQueryExpression.java =================================================================== --- cpa/src/main/java/org/castor/cpa/persistence/sql/driver/SapDbQueryExpression.java (revision 8463) +++ cpa/src/main/java/org/castor/cpa/persistence/sql/driver/SapDbQueryExpression.java (working copy) @@ -165,6 +165,24 @@ if (_order != null) { sql.append(JDBCSyntax.ORDER_BY).append(_order); } + + if (_distinct && _limit != null) { + String sqlToSurround = sql.toString(); + sql.setLength(0); + sql.append("SELECT * FROM ("); + sql.append(sqlToSurround); + sql.append(")"); + } + + if (_limit != null) { + sql.append(JDBCSyntax.LIMIT); + + if (_offset != null) { + sql.append(_offset).append(", "); + } + + sql.append(_limit); + } // Use WITH LOCK to lock selected tables. if (lock) { @@ -172,6 +190,24 @@ } return sql.toString(); } + + /** + * Indicates that SapDB supports an OQL LIMIT clause + * + * @return true to indicate that SapDB supports an OQL LIMIT clause. + */ + public boolean isLimitClauseSupported() { + return true; + } + + /** + * Indicates that SapDB supports an OQL OFFSET clause for versions >= 7.6.0. + * + * @return true to indicate that SapDB supports an OQL OFFSET clause. + */ + public boolean isOffsetClauseSupported() { + return true; + } } Index: cpactf/src/test/java/org/castor/cpa/test/test32/TestLimitClause.java =================================================================== --- cpactf/src/test/java/org/castor/cpa/test/test32/TestLimitClause.java (revision 8463) +++ cpactf/src/test/java/org/castor/cpa/test/test32/TestLimitClause.java (working copy) @@ -46,7 +46,8 @@ return (engine == DatabaseEngineType.HSQL) || (engine == DatabaseEngineType.MYSQL) || (engine == DatabaseEngineType.ORACLE) - || (engine == DatabaseEngineType.POSTGRESQL); + || (engine == DatabaseEngineType.POSTGRESQL) + || (engine == DatabaseEngineType.SAPDB); } public boolean exclude(final DatabaseEngineType engine) { Index: cpactf/src/test/java/org/castor/cpa/test/test32/TestLimitWithOffsetClause.java =================================================================== --- cpactf/src/test/java/org/castor/cpa/test/test32/TestLimitWithOffsetClause.java (revision 8463) +++ cpactf/src/test/java/org/castor/cpa/test/test32/TestLimitWithOffsetClause.java (working copy) @@ -48,7 +48,8 @@ return (engine == DatabaseEngineType.HSQL) || (engine == DatabaseEngineType.MYSQL) || (engine == DatabaseEngineType.ORACLE) - || (engine == DatabaseEngineType.POSTGRESQL); + || (engine == DatabaseEngineType.POSTGRESQL) + || (engine == DatabaseEngineType.SAPDB); } public boolean exclude(final DatabaseEngineType engine) {