[#1753] Document the ORDER SIBLINGS BY clause in the manual

This commit is contained in:
Lukas Eder 2012-08-28 20:13:35 +02:00
parent ebef56c7d8
commit 95554ec42f
2 changed files with 32 additions and 4 deletions

View File

@ -44,7 +44,7 @@ PR['registerLangHandler'](
// A comment is either a line comment that starts with two dashes, or
// two dashes preceding a long bracketed block.
[PR['PR_COMMENT'], /^(?:--[^\r\n]*|\/\*[\s\S]*?(?:\*\/|$))/],
[PR['PR_KEYWORD'], /^(?:ADD|AGGREGATE|ALL|ALTER|AND|ANY|AS|ASC|AT|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BEFORE|BEGIN|BETWEEN|BREAK|BROWSE|BULK|BY|CASCADE|CASE|CHECK|CHECKPOINT|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMN|COMMIT|COMPUTE|CONNECT|CONSTRAINT|CONTAINS|CONTAINSTABLE|CONTINUE|CONVERT|CREATE|CROSS|CURRENT|CURRENT_DATE|CURRENT_TIME|CURRENT_TIMESTAMP|CURRENT_USER|CURSOR|DATABASE|DBCC|DEALLOCATE|DECLARE|DEFAULT|DELETE|DENY|DESC|DISK|DISTINCT|DISTRIBUTED|DOUBLE|DROP|DUMMY|DUMP|EACH|ELSE|ELSIF|END|ERRLVL|ESCAPE|EXCEPT|EXEC|EXECUTE|EXISTS|EXIT|FETCH|FILE|FILLFACTOR|FIRST|FOR|FOREIGN|FREETEXT|FREETEXTTABLE|FROM|FULL|FUNCTION|GENERATED|GOTO|GRANT|GROUP|HAVING|HOLDLOCK|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IN|INDEX|INNER|INSERT|INTERSECT|INTO|IS|JOIN|KEY|KILL|LEFT|LIKE|LIMIT|LINENO|LOAD|MATCH|MATCHED|MEMBER|MERGE|NATIONAL|NATURAL|NEXT|NOCHECK|NOCYCLE|NONCLUSTERED|NOT|NULL|NULLIF|NULLS|OBJECT|OF|OFF|OFFSET|OFFSETS|ON|ONLY|OPEN|OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|OPTION|OR|ORDER|OUT|OUTER|OVER|PARALLEL|PARALLEL_ENABLE|PARTITION|PERCENT|PLAN|PIVOT|PRECEDING|PRECISION|PRIMARY|PRINT|PROC|PROCEDURE|PUBLIC|RAISERROR|READ|READTEXT|RECONFIGURE|REFERENCES|REFERENCING|REPLACE|REPLICATION|RESTORE|RESTRICT|RETURN|REVOKE|RIGHT|ROLLBACK|ROW|ROWCOUNT|ROWGUIDCOL|ROWS|RULE|SAVE|SCHEMA|SELECT|SEQUENCE|SESSION_USER|SET|SETUSER|SHUTDOWN|SOME|START|STATIC|STATISTICS|SYMMETRIC|SYSTEM_USER|TABLE|TEXTSIZE|THEN|TO|TOP|TRAN|TRANSACTION|TRIGGER|TRUNCATE|TSEQUAL|TYPE|UNBOUNDED|UNION|UNIQUE|UNPIVOT|UPDATE|UPDATETEXT|USE|USER|USING|VALUES|VARYING|VIEW|WAITFOR|WHEN|WHERE|WHILE|WITH|WITHIN|WRITETEXT)(?=[^\w-]|$)/i, null],
[PR['PR_KEYWORD'], /^(?:ADD|AGGREGATE|ALL|ALTER|AND|ANY|AS|ASC|AT|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BEFORE|BEGIN|BETWEEN|BREAK|BROWSE|BULK|BY|CASCADE|CASE|CHECK|CHECKPOINT|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMN|COMMIT|COMPUTE|CONNECT|CONSTRAINT|CONTAINS|CONTAINSTABLE|CONTINUE|CONVERT|CREATE|CROSS|CURRENT|CURRENT_DATE|CURRENT_TIME|CURRENT_TIMESTAMP|CURRENT_USER|CURSOR|DATABASE|DBCC|DEALLOCATE|DECLARE|DEFAULT|DELETE|DENY|DESC|DISK|DISTINCT|DISTRIBUTED|DOUBLE|DROP|DUMMY|DUMP|EACH|ELSE|ELSIF|END|ERRLVL|ESCAPE|EXCEPT|EXEC|EXECUTE|EXISTS|EXIT|FETCH|FILE|FILLFACTOR|FIRST|FOR|FOREIGN|FREETEXT|FREETEXTTABLE|FROM|FULL|FUNCTION|GENERATED|GOTO|GRANT|GROUP|HAVING|HOLDLOCK|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IN|INDEX|INNER|INSERT|INTERSECT|INTO|IS|JOIN|KEY|KILL|LEFT|LIKE|LIMIT|LINENO|LOAD|MATCH|MATCHED|MEMBER|MERGE|NATIONAL|NATURAL|NEXT|NOCHECK|NOCYCLE|NONCLUSTERED|NOT|NULL|NULLIF|NULLS|OBJECT|OF|OFF|OFFSET|OFFSETS|ON|ONLY|OPEN|OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|OPTION|OR|ORDER|OUT|OUTER|OVER|PARALLEL|PARALLEL_ENABLE|PARTITION|PERCENT|PLAN|PIVOT|PRECEDING|PRECISION|PRIMARY|PRINT|PROC|PROCEDURE|PUBLIC|RAISERROR|READ|READTEXT|RECONFIGURE|REFERENCES|REFERENCING|REPLACE|REPLICATION|RESTORE|RESTRICT|RETURN|REVOKE|RIGHT|ROLLBACK|ROW|ROWCOUNT|ROWGUIDCOL|ROWS|RULE|SAVE|SCHEMA|SELECT|SEQUENCE|SESSION_USER|SET|SETUSER|SHUTDOWN|SIBLINGS|SOME|START|STATIC|STATISTICS|SYMMETRIC|SYSTEM_USER|TABLE|TEXTSIZE|THEN|TO|TOP|TRAN|TRANSACTION|TRIGGER|TRUNCATE|TSEQUAL|TYPE|UNBOUNDED|UNION|UNIQUE|UNPIVOT|UPDATE|UPDATETEXT|USE|USER|USING|VALUES|VARYING|VIEW|WAITFOR|WHEN|WHERE|WHILE|WITH|WITHIN|WRITETEXT)(?=[^\w-]|$)/i, null],
// A number is a hex integer literal, a decimal real literal, or in
// scientific notation.
[PR['PR_LITERAL'],

View File

@ -1666,8 +1666,9 @@ AND TITLE = '1984']]></sql>
<sql>-- SELECT ..
-- FROM ..
-- WHERE ..
CONNECT BY [NOCYCLE] condition [AND condition, ...] [START WITH condition]
-- GROUP BY ..</sql>
CONNECT BY [ NOCYCLE ] condition [ AND condition, ... ] [ START WITH condition ]
-- GROUP BY ..
-- ORDER [ SIBLINGS ] BY ..</sql>
<p>
An example for an iterative query, iterating through values between 1 and 5 is this:
@ -1689,7 +1690,7 @@ create.select(level())
SUBSTR(SYS_CONNECT_BY_PATH(DIRECTORY.NAME, '/'), 2)
FROM DIRECTORY
CONNECT BY
PRIOR DIRECTORY.ID = DIRECTORY_PARENT_ID
PRIOR DIRECTORY.ID = DIRECTORY.PARENT_ID
START WITH DIRECTORY.PARENT_ID IS NULL
ORDER BY 1]]></sql>
<java><![CDATA[.select(
@ -1733,6 +1734,27 @@ ORDER BY 1]]></sql>
<p>
Note that this syntax is also supported in the CUBRID database.
</p>
<h3>ORDER SIBLINGS</h3>
<p>
The Oracle database allows for specifying a SIBLINGS keyword in the <reference id="order-by-clause" title="ORDER BY clause"/>. Instead of ordering the overall result, this will only order siblings among each other, keeping the hierarchy intact. An example is given here:
</p>
<code-pair>
<sql><![CDATA[SELECT DIRECTORY.NAME
FROM DIRECTORY
CONNECT BY
PRIOR DIRECTORY.ID = DIRECTORY.PARENT_ID
START WITH DIRECTORY.PARENT_ID IS NULL
ORDER SIBLINGS BY 1]]></sql>
<java><![CDATA[.select(DIRECTORY.NAME)
.from(DIRECTORY)
.connectBy(
prior(DIRECTORY.ID).equal(DIRECTORY.PARENT_ID))
.startWith(DIRECTORY.PARENT_ID.isNull())
.orderSiblingsBy(1);]]></java>
</code-pair>
</content>
</section>
@ -1952,6 +1974,12 @@ ORDER BY CASE TITLE
<p>
The SQL standard defines that a "query expression" can be ordered, and that query expressions can contain <reference id="union-clause" title="UNION, INTERSECT and EXCEPT clauses"/>, whose subqueries cannot be ordered. While this is defined as such in the SQL standard, many databases allowing for the non-standard <reference id="limit-clause" title="LIMIT clause"/> in one way or another, do not adhere to this part of the SQL standard. Hence, jOOQ allows for ordering all SELECT statements, regardless whether they are constructed as a part of a UNION or not. Corner-cases are handled internally by jOOQ, by introducing synthetic subselects to adhere to the correct syntax, where this is needed.
</p>
<h3>Oracle's ORDER SIBLINGS BY clause</h3>
<p>
jOOQ also supports Oracle's SIBLINGS keyword to be used with ORDER BY clauses for <reference id="connect-by-clause" title="hierarchical queries using CONNECT BY"/>
</p>
</content>
</section>