alternative oracle limit implementation.

This commit is contained in:
Stanislas 2012-04-26 19:25:24 +02:00
parent 6c22a52844
commit cea35b0539

View File

@ -390,25 +390,37 @@ implements
toSQLReference0(local);
String enclosed = local.render();
String subqueryName = "limit_" + Util.hash(enclosed);
String innerSubqueryName = "inner_" + Util.hash(enclosed);
String outerSubqueryName = "outer_" + Util.hash(enclosed);
String rownumName = "rownum_" + Util.hash(enclosed);
context.keyword("select * from (")
.formatIndentStart()
.formatNewLine()
.keyword("select ")
.sql(subqueryName)
.sql(outerSubqueryName)
.keyword(".*, rownum as ")
.sql(rownumName)
.formatSeparator()
.keyword("from (")
.formatIndentStart()
.formatNewLine()
.keyword("select ")
.sql(innerSubqueryName)
.keyword(".*")
.formatSeparator()
.keyword("from (")
.formatIndentStart()
.formatNewLine()
.sql(enclosed)
.formatIndentEnd()
.formatNewLine()
.sql(") ")
.sql(subqueryName)
.sql(innerSubqueryName)
.formatSeparator()
.keyword("where rownum <=")
.sql(getLimit().getUpperRownum())
.sql(outerSubqueryName)
.formatIndentEnd()
.formatNewLine()
.keyword(")")
@ -416,12 +428,7 @@ implements
.keyword("where ")
.sql(rownumName)
.sql(" > ")
.sql(getLimit().getLowerRownum())
.formatSeparator()
.keyword("and ")
.sql(rownumName)
.sql(" <= ")
.sql(getLimit().getUpperRownum());
.sql(getLimit().getLowerRownum());
}
/**