[#1657] Reorganise the manual (102 / 168)
This commit is contained in:
parent
bf3b38badd
commit
32cd3d9393
@ -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|ALL|ALTER|AND|ANY|AS|ASC|AT|AUTHORIZATION|BACKUP|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|ELSE|END|ERRLVL|ESCAPE|EXCEPT|EXEC|EXECUTE|EXISTS|EXIT|FETCH|FILE|FILLFACTOR|FIRST|FOR|FOREIGN|FREETEXT|FREETEXTTABLE|FROM|FULL|FUNCTION|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|MERGE|NATIONAL|NATURAL|NEXT|NOCHECK|NOCYCLE|NONCLUSTERED|NOT|NULL|NULLIF|NULLS|OF|OFF|OFFSET|OFFSETS|ON|ONLY|OPEN|OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|OPTION|OR|ORDER|OUTER|OVER|PARTITION|PERCENT|PLAN|PIVOT|PRECEDING|PRECISION|PRIMARY|PRINT|PROC|PROCEDURE|PUBLIC|RAISERROR|READ|READTEXT|RECONFIGURE|REFERENCES|REPLICATION|RESTORE|RESTRICT|RETURN|REVOKE|RIGHT|ROLLBACK|ROW|ROWCOUNT|ROWGUIDCOL|ROWS|RULE|SAVE|SCHEMA|SELECT|SEQUENCE|SESSION_USER|SET|SETUSER|SHUTDOWN|SOME|START|STATISTICS|SYMMETRIC|SYSTEM_USER|TABLE|TEXTSIZE|THEN|TO|TOP|TRAN|TRANSACTION|TRIGGER|TRUNCATE|TSEQUAL|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|BACKUP|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|ELSE|ELSIF|END|ERRLVL|ESCAPE|EXCEPT|EXEC|EXECUTE|EXISTS|EXIT|FETCH|FILE|FILLFACTOR|FIRST|FOR|FOREIGN|FREETEXT|FREETEXTTABLE|FROM|FULL|FUNCTION|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|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],
|
||||
// A number is a hex integer literal, a decimal real literal, or in
|
||||
// scientific notation.
|
||||
[PR['PR_LITERAL'],
|
||||
|
||||
@ -3148,7 +3148,87 @@ GROUP BY A, B, C WITH ROLLUP
|
||||
|
||||
<section id="user-defined-aggregate-functions">
|
||||
<title>User-defined aggregate functions</title>
|
||||
<content></content>
|
||||
<content>
|
||||
<h3>User-defined aggregate functions</h3>
|
||||
<p>
|
||||
Some databases support user-defined aggregate functions, which can then be used along with <reference id="group-by-clause" title="GROUP BY clauses"/> or as <reference id="window-functions" title="window functions"/>. An example for such a database is Oracle. With Oracle, you can define the following OBJECT type (the example was taken from the <a href="http://docs.oracle.com/cd/B28359_01/appdev.111/b28425/ext_agg_ref.htm">Oracle 11g documentation</a>):
|
||||
</p>
|
||||
|
||||
<sql><![CDATA[CREATE TYPE U_SECOND_MAX AS OBJECT
|
||||
(
|
||||
MAX NUMBER, -- highest value seen so far
|
||||
SECMAX NUMBER, -- second highest value seen so far
|
||||
STATIC FUNCTION ODCIAggregateInitialize(sctx IN OUT U_SECOND_MAX) RETURN NUMBER,
|
||||
MEMBER FUNCTION ODCIAggregateIterate(self IN OUT U_SECOND_MAX, value IN NUMBER) RETURN NUMBER,
|
||||
MEMBER FUNCTION ODCIAggregateTerminate(self IN U_SECOND_MAX, returnValue OUT NUMBER, flags IN NUMBER) RETURN NUMBER,
|
||||
MEMBER FUNCTION ODCIAggregateMerge(self IN OUT U_SECOND_MAX, ctx2 IN U_SECOND_MAX) RETURN NUMBER
|
||||
);
|
||||
|
||||
CREATE OR REPLACE TYPE BODY U_SECOND_MAX IS
|
||||
STATIC FUNCTION ODCIAggregateInitialize(sctx IN OUT U_SECOND_MAX)
|
||||
RETURN NUMBER IS
|
||||
BEGIN
|
||||
SCTX := U_SECOND_MAX(0, 0);
|
||||
RETURN ODCIConst.Success;
|
||||
END;
|
||||
|
||||
MEMBER FUNCTION ODCIAggregateIterate(self IN OUT U_SECOND_MAX, value IN NUMBER) RETURN NUMBER IS
|
||||
BEGIN
|
||||
IF VALUE > SELF.MAX THEN
|
||||
SELF.SECMAX := SELF.MAX;
|
||||
SELF.MAX := VALUE;
|
||||
ELSIF VALUE > SELF.SECMAX THEN
|
||||
SELF.SECMAX := VALUE;
|
||||
END IF;
|
||||
RETURN ODCIConst.Success;
|
||||
END;
|
||||
|
||||
MEMBER FUNCTION ODCIAggregateTerminate(self IN U_SECOND_MAX, returnValue OUT NUMBER, flags IN NUMBER) RETURN NUMBER IS
|
||||
BEGIN
|
||||
RETURNVALUE := SELF.SECMAX;
|
||||
RETURN ODCIConst.Success;
|
||||
END;
|
||||
|
||||
MEMBER FUNCTION ODCIAggregateMerge(self IN OUT U_SECOND_MAX, ctx2 IN U_SECOND_MAX) RETURN NUMBER IS
|
||||
BEGIN
|
||||
IF CTX2.MAX > SELF.MAX THEN
|
||||
IF CTX2.SECMAX > SELF.SECMAX THEN
|
||||
SELF.SECMAX := CTX2.SECMAX;
|
||||
ELSE
|
||||
SELF.SECMAX := SELF.MAX;
|
||||
END IF;
|
||||
SELF.MAX := CTX2.MAX;
|
||||
ELSIF CTX2.MAX > SELF.SECMAX THEN
|
||||
SELF.SECMAX := CTX2.MAX;
|
||||
END IF;
|
||||
RETURN ODCIConst.Success;
|
||||
END;
|
||||
END;]]></sql>
|
||||
|
||||
<p>
|
||||
The above OBJECT type is then available to function declarations as such:
|
||||
</p>
|
||||
|
||||
<sql><![CDATA[
|
||||
CREATE FUNCTION SECOND_MAX (input NUMBER) RETURN NUMBER
|
||||
PARALLEL_ENABLE AGGREGATE USING U_SECOND_MAX;]]></sql>
|
||||
|
||||
<h3>Using the generated aggregate function</h3>
|
||||
<p>
|
||||
jOOQ's <reference id="code-generation" title="code generator"/> will detect such aggregate functions and generate them differently from regular <reference id="user-defined-functions" title="user-defined functions"/>. They implement the <reference class="org.jooq.AggregateFunction"/> type, as mentioned in the manual's section about <reference id="aggregate-functions" title="aggregate functions"/>. Here's how you can use the SECOND_MAX() aggregate function with jOOQ:
|
||||
</p>
|
||||
|
||||
<code-pair>
|
||||
<sql><![CDATA[-- Get the second-latest publishing date by author
|
||||
SELECT SECOND_MAX(PUBLISHED_IN)
|
||||
FROM BOOK
|
||||
GROUP BY AUTHOR_ID]]></sql>
|
||||
<java><![CDATA[// Routines.secondMax() can be static-imported
|
||||
create.select(secondMax(BOOK.PUBLISHED_IN))
|
||||
.from(BOOK)
|
||||
.groupBy(BOOK.AUTHOR_ID)]]></java>
|
||||
</code-pair>
|
||||
</content>
|
||||
</section>
|
||||
|
||||
<section id="case-expressions">
|
||||
@ -4018,8 +4098,8 @@ create.select(LAST_NAME, COUNT1, COUNT2)
|
||||
<content></content>
|
||||
</section>
|
||||
|
||||
<section id="arrays-and-maps">
|
||||
<title>Arrays and Maps</title>
|
||||
<section id="arrays-maps-and-lists">
|
||||
<title>Arrays, Maps and Lists</title>
|
||||
<content></content>
|
||||
</section>
|
||||
|
||||
@ -5548,7 +5628,10 @@ public class AsInDatabaseStrategy extends DefaultGeneratorStrategy {
|
||||
<sections>
|
||||
<section id="supported-rdbms">
|
||||
<title>Supported RDBMS</title>
|
||||
<content></content>
|
||||
<content>
|
||||
<h3>A list of supported databases</h3>
|
||||
<h3>Feature matrix</h3>
|
||||
</content>
|
||||
</section>
|
||||
|
||||
<section id="reference-data-types">
|
||||
|
||||
Loading…
Reference in New Issue
Block a user