over();
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/Factory.java b/jOOQ/src/main/java/org/jooq/impl/Factory.java
index f671788200..62835fa4a5 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Factory.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Factory.java
@@ -50,6 +50,7 @@ import static org.jooq.SQLDialect.SQLITE;
import static org.jooq.SQLDialect.SQLSERVER;
import static org.jooq.SQLDialect.SYBASE;
import static org.jooq.conf.SettingsTools.getRenderMapping;
+import static org.jooq.impl.Term.ROW_NUMBER;
import static org.jooq.impl.Util.combine;
import java.io.IOException;
@@ -5101,11 +5102,13 @@ public class Factory implements FactoryOperations {
*
* Newer versions of {@link SQLDialect#DERBY} and {@link SQLDialect#H2} also
* support the ROW_NUMBER() OVER() window function without any
- * window clause. See the respective docs for details
+ * window clause. See the respective docs for details.
+ * {@link SQLDialect#HSQLDB} can simulate this function using
+ * ROWNUM()
*/
- @Support({ DB2, DERBY, H2, POSTGRES, ORACLE, SQLSERVER, SYBASE })
+ @Support({ DB2, DERBY, H2, HSQLDB, POSTGRES, ORACLE, SQLSERVER, SYBASE })
public static WindowOverStep rowNumber() {
- return new Function("row_number", SQLDataType.INTEGER);
+ return new Function(ROW_NUMBER, SQLDataType.INTEGER);
}
/**
diff --git a/jOOQ/src/main/java/org/jooq/impl/Function.java b/jOOQ/src/main/java/org/jooq/impl/Function.java
index fb93403a1f..7dcb28fe07 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Function.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Function.java
@@ -46,6 +46,7 @@ import static org.jooq.SQLDialect.POSTGRES;
import static org.jooq.SQLDialect.SYBASE;
import static org.jooq.impl.Factory.one;
import static org.jooq.impl.Term.LIST_AGG;
+import static org.jooq.impl.Term.ROW_NUMBER;
import java.util.Arrays;
import java.util.Collection;
@@ -299,7 +300,16 @@ class Function extends AbstractField implements
}
private final void toSQLOverClause(RenderContext context) {
- if (!over) return;
+
+ // Render this clause only if needed
+ if (!over) {
+ return;
+ }
+
+ // [#1524] Don't render this clause where it is not supported
+ if (over && term == ROW_NUMBER && context.getDialect() == HSQLDB) {
+ return;
+ }
String glue = "";
context.keyword(" over (");
diff --git a/jOOQ/src/main/java/org/jooq/impl/Term.java b/jOOQ/src/main/java/org/jooq/impl/Term.java
index 556c0933e6..9c86414187 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Term.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Term.java
@@ -149,6 +149,17 @@ enum Term {
return "octet_length";
}
},
+ ROW_NUMBER {
+ @Override
+ public String translate(SQLDialect dialect) {
+ switch (dialect) {
+ case HSQLDB:
+ return "rownum";
+ }
+
+ return "row_number";
+ }
+ },
STDDEV_POP {
@Override
public String translate(SQLDialect dialect) {