Added some sections to the manual
This commit is contained in:
parent
9772af74f9
commit
7ef097bfa6
@ -120,7 +120,7 @@ a:hover {
|
||||
}
|
||||
|
||||
#wrapper {
|
||||
background: url("../img/bodytile.jpg") repeat scroll left top #FFFFFF;
|
||||
background: url("../img/bg.jpg") repeat scroll left top #FFFFFF;
|
||||
height: auto;
|
||||
min-height: 101%;
|
||||
}
|
||||
@ -146,7 +146,6 @@ a:hover {
|
||||
background: -webkit-gradient(linear, left, right, from(#f6cab9), to(#ffeedd));
|
||||
background: -moz-linear-gradient(left, #f6cab9, #ffeedd);
|
||||
background: gradient(linear, left, right, from(#f6cab9), to(#ffeedd));
|
||||
|
||||
}
|
||||
|
||||
#navigation {
|
||||
|
||||
@ -77,7 +77,6 @@
|
||||
if ($slogan != '') {
|
||||
print '<p class="slogan">' . $slogan . '</p>';
|
||||
}
|
||||
|
||||
printContent();
|
||||
?>
|
||||
|
||||
|
||||
BIN
jOOQ-website/img/bg.jpg
Normal file
BIN
jOOQ-website/img/bg.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 74 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 78 KiB |
@ -16,6 +16,10 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/ADVANCED/">Advanced topics</a> : <a href="<?=$root?>/manual/ADVANCED/CONNECTBY/">The Oracle CONNECT BY clause for hierarchical queries</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/ADVANCED/OracleHints/" title="Previous section: Adding Oracle hints to queries">previous</a> : <a href="<?=$root?>/manual/ADVANCED/Export/" title="Next section: Exporting data to XML, CSV, JSON, HTML, Text">next</a></td>
|
||||
</tr>
|
||||
</table><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/ADVANCED/">Advanced topics</a> : <a href="<?=$root?>/manual/ADVANCED/CONNECTBY/">The Oracle CONNECT BY clause for hierarchical queries</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/ADVANCED/OracleHints/" title="Previous section: Adding Oracle hints to queries">previous</a> : <a href="<?=$root?>/manual/ADVANCED/Export/" title="Next section: Exporting data to XML, CSV, JSON, HTML, Text">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -16,6 +16,10 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/ADVANCED/">Advanced topics</a> : <a href="<?=$root?>/manual/ADVANCED/Export/">Exporting data to XML, CSV, JSON, HTML, Text</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/ADVANCED/CONNECTBY/" title="Previous section: The Oracle CONNECT BY clause for hierarchical queries">previous</a> : <a href="<?=$root?>/manual/ADVANCED/Import/" title="Next section: Importing data from XML, CSV">next</a></td>
|
||||
</tr>
|
||||
</table><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/ADVANCED/">Advanced topics</a> : <a href="<?=$root?>/manual/ADVANCED/Export/">Exporting data to XML, CSV, JSON, HTML, Text</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/ADVANCED/CONNECTBY/" title="Previous section: The Oracle CONNECT BY clause for hierarchical queries">previous</a> : <a href="<?=$root?>/manual/ADVANCED/Import/" title="Next section: Importing data from XML, CSV">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -16,6 +16,10 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/ADVANCED/">Advanced topics</a> : <a href="<?=$root?>/manual/ADVANCED/Import/">Importing data from XML, CSV</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/ADVANCED/Export/" title="Previous section: Exporting data to XML, CSV, JSON, HTML, Text">previous</a></td>
|
||||
</tr>
|
||||
</table><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/ADVANCED/">Advanced topics</a> : <a href="<?=$root?>/manual/ADVANCED/Import/">Importing data from XML, CSV</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/ADVANCED/Export/" title="Previous section: Exporting data to XML, CSV, JSON, HTML, Text">previous</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -16,6 +16,10 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/ADVANCED/">Advanced topics</a> : <a href="<?=$root?>/manual/ADVANCED/MasterData/">Master data generation</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/ADVANCED/" title="Previous section: Advanced topics">previous</a> : <a href="<?=$root?>/manual/ADVANCED/SchemaMapping/" title="Next section: Mapping generated schemata and tables to productive environments">next</a></td>
|
||||
</tr>
|
||||
</table><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/ADVANCED/">Advanced topics</a> : <a href="<?=$root?>/manual/ADVANCED/MasterData/">Master data generation</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/ADVANCED/" title="Previous section: Advanced topics">previous</a> : <a href="<?=$root?>/manual/ADVANCED/SchemaMapping/" title="Next section: Mapping generated schemata and tables to productive environments">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -16,6 +16,10 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/ADVANCED/">Advanced topics</a> : <a href="<?=$root?>/manual/ADVANCED/OracleHints/">Adding Oracle hints to queries</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/ADVANCED/SchemaMapping/" title="Previous section: Mapping generated schemata and tables to productive environments">previous</a> : <a href="<?=$root?>/manual/ADVANCED/CONNECTBY/" title="Next section: The Oracle CONNECT BY clause for hierarchical queries">next</a></td>
|
||||
</tr>
|
||||
</table><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/ADVANCED/">Advanced topics</a> : <a href="<?=$root?>/manual/ADVANCED/OracleHints/">Adding Oracle hints to queries</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/ADVANCED/SchemaMapping/" title="Previous section: Mapping generated schemata and tables to productive environments">previous</a> : <a href="<?=$root?>/manual/ADVANCED/CONNECTBY/" title="Next section: The Oracle CONNECT BY clause for hierarchical queries">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -16,6 +16,10 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/ADVANCED/">Advanced topics</a> : <a href="<?=$root?>/manual/ADVANCED/SchemaMapping/">Mapping generated schemata and tables to productive environments</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/ADVANCED/MasterData/" title="Previous section: Master data generation">previous</a> : <a href="<?=$root?>/manual/ADVANCED/OracleHints/" title="Next section: Adding Oracle hints to queries">next</a></td>
|
||||
</tr>
|
||||
</table><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/ADVANCED/">Advanced topics</a> : <a href="<?=$root?>/manual/ADVANCED/SchemaMapping/">Mapping generated schemata and tables to productive environments</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/ADVANCED/MasterData/" title="Previous section: Master data generation">previous</a> : <a href="<?=$root?>/manual/ADVANCED/OracleHints/" title="Next section: Adding Oracle hints to queries">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -35,7 +35,11 @@ function printContent() {
|
||||
<li>
|
||||
<a href="<?=$root?>/manual/ADVANCED/Import/" title="Importing data from XML, CSV">Importing data from XML, CSV</a>
|
||||
</li>
|
||||
</ol>
|
||||
</ol><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/ADVANCED/">Advanced topics</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/SQL/" title="Previous section: When it's just much easier: Plain SQL">previous</a> : <a href="<?=$root?>/manual/ADVANCED/MasterData/" title="Next section: Master data generation">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
@ -16,6 +16,10 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/ALIAS/">Aliased tables and fields</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/CONDITION/" title="Previous section: Conditions">previous</a> : <a href="<?=$root?>/manual/DSL/IN/" title="Next section: Nested select statements using the IN operator">next</a></td>
|
||||
</tr>
|
||||
</table><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/ALIAS/">Aliased tables and fields</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/CONDITION/" title="Previous section: Conditions">previous</a> : <a href="<?=$root?>/manual/DSL/IN/" title="Next section: Nested select statements using the IN operator">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -16,6 +16,10 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/ARITHMETIC/">Arithmetic operations</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/PROCEDURES/" title="Previous section: Stored procedures and functions">previous</a> : <a href="<?=$root?>/manual/DSL/CASE/" title="Next section: The CASE clause">next</a></td>
|
||||
</tr>
|
||||
</table><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/ARITHMETIC/">Arithmetic operations</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/PROCEDURES/" title="Previous section: Stored procedures and functions">previous</a> : <a href="<?=$root?>/manual/DSL/CASE/" title="Next section: The CASE clause">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -16,6 +16,10 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/CASE/">The CASE clause</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/ARITHMETIC/" title="Previous section: Arithmetic operations">previous</a> : <a href="<?=$root?>/manual/DSL/CAST/" title="Next section: Type casting">next</a></td>
|
||||
</tr>
|
||||
</table><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/CASE/">The CASE clause</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/ARITHMETIC/" title="Previous section: Arithmetic operations">previous</a> : <a href="<?=$root?>/manual/DSL/CAST/" title="Next section: Type casting">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -16,6 +16,10 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/CAST/">Type casting</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/CASE/" title="Previous section: The CASE clause">previous</a> : <a href="<?=$root?>/manual/DSL/SQL/" title="Next section: When it's just much easier: Plain SQL">next</a></td>
|
||||
</tr>
|
||||
</table><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/CAST/">Type casting</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/CASE/" title="Previous section: The CASE clause">previous</a> : <a href="<?=$root?>/manual/DSL/SQL/" title="Next section: When it's just much easier: Plain SQL">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -16,6 +16,10 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/CONDITION/">Conditions</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/SELECT/" title="Previous section: Complete SELECT syntax">previous</a> : <a href="<?=$root?>/manual/DSL/ALIAS/" title="Next section: Aliased tables and fields">next</a></td>
|
||||
</tr>
|
||||
</table><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/CONDITION/">Conditions</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/SELECT/" title="Previous section: Complete SELECT syntax">previous</a> : <a href="<?=$root?>/manual/DSL/ALIAS/" title="Next section: Aliased tables and fields">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -16,6 +16,10 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/EXISTS/">Nested select statements using the EXISTS operator</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/IN/" title="Previous section: Nested select statements using the IN operator">previous</a> : <a href="<?=$root?>/manual/DSL/NESTED/" title="Next section: Other types of nested selects">next</a></td>
|
||||
</tr>
|
||||
</table><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/EXISTS/">Nested select statements using the EXISTS operator</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/IN/" title="Previous section: Nested select statements using the IN operator">previous</a> : <a href="<?=$root?>/manual/DSL/NESTED/" title="Next section: Other types of nested selects">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -16,6 +16,10 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/FUNCTIONS/">Functions, aggregate operators, and window functions</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/UNION/" title="Previous section: UNION and other set operations">previous</a> : <a href="<?=$root?>/manual/DSL/PROCEDURES/" title="Next section: Stored procedures and functions">next</a></td>
|
||||
</tr>
|
||||
</table><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/FUNCTIONS/">Functions, aggregate operators, and window functions</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/UNION/" title="Previous section: UNION and other set operations">previous</a> : <a href="<?=$root?>/manual/DSL/PROCEDURES/" title="Next section: Stored procedures and functions">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -16,6 +16,10 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/IN/">Nested select statements using the IN operator</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/ALIAS/" title="Previous section: Aliased tables and fields">previous</a> : <a href="<?=$root?>/manual/DSL/EXISTS/" title="Next section: Nested select statements using the EXISTS operator">next</a></td>
|
||||
</tr>
|
||||
</table><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/IN/">Nested select statements using the IN operator</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/ALIAS/" title="Previous section: Aliased tables and fields">previous</a> : <a href="<?=$root?>/manual/DSL/EXISTS/" title="Next section: Nested select statements using the EXISTS operator">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -16,6 +16,10 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/NESTED/">Other types of nested selects</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/EXISTS/" title="Previous section: Nested select statements using the EXISTS operator">previous</a> : <a href="<?=$root?>/manual/DSL/UNION/" title="Next section: UNION and other set operations">next</a></td>
|
||||
</tr>
|
||||
</table><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/NESTED/">Other types of nested selects</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/EXISTS/" title="Previous section: Nested select statements using the EXISTS operator">previous</a> : <a href="<?=$root?>/manual/DSL/UNION/" title="Next section: UNION and other set operations">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -16,6 +16,10 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/PROCEDURES/">Stored procedures and functions</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/FUNCTIONS/" title="Previous section: Functions, aggregate operators, and window functions">previous</a> : <a href="<?=$root?>/manual/DSL/ARITHMETIC/" title="Next section: Arithmetic operations">next</a></td>
|
||||
</tr>
|
||||
</table><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/PROCEDURES/">Stored procedures and functions</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/FUNCTIONS/" title="Previous section: Functions, aggregate operators, and window functions">previous</a> : <a href="<?=$root?>/manual/DSL/ARITHMETIC/" title="Next section: Arithmetic operations">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -16,6 +16,10 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/SELECT/">Complete SELECT syntax</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/" title="Previous section: DSL or fluent API. Where SQL meets Java">previous</a> : <a href="<?=$root?>/manual/DSL/CONDITION/" title="Next section: Conditions">next</a></td>
|
||||
</tr>
|
||||
</table><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/SELECT/">Complete SELECT syntax</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/" title="Previous section: DSL or fluent API. Where SQL meets Java">previous</a> : <a href="<?=$root?>/manual/DSL/CONDITION/" title="Next section: Conditions">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -16,6 +16,10 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/SQL/">When it's just much easier: Plain SQL</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/CAST/" title="Previous section: Type casting">previous</a> : <a href="<?=$root?>/manual/ADVANCED/" title="Next section: Advanced topics">next</a></td>
|
||||
</tr>
|
||||
</table><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/SQL/">When it's just much easier: Plain SQL</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/CAST/" title="Previous section: Type casting">previous</a> : <a href="<?=$root?>/manual/ADVANCED/" title="Next section: Advanced topics">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -16,6 +16,10 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/UNION/">UNION and other set operations</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/NESTED/" title="Previous section: Other types of nested selects">previous</a> : <a href="<?=$root?>/manual/DSL/FUNCTIONS/" title="Next section: Functions, aggregate operators, and window functions">next</a></td>
|
||||
</tr>
|
||||
</table><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a> : <a href="<?=$root?>/manual/DSL/UNION/">UNION and other set operations</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/DSL/NESTED/" title="Previous section: Other types of nested selects">previous</a> : <a href="<?=$root?>/manual/DSL/FUNCTIONS/" title="Next section: Functions, aggregate operators, and window functions">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -56,7 +56,11 @@ function printContent() {
|
||||
<li>
|
||||
<a href="<?=$root?>/manual/DSL/SQL/" title="When it's just much easier: Plain SQL">When it's just much easier: Plain SQL</a>
|
||||
</li>
|
||||
</ol>
|
||||
</ol><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/DSL/">DSL or fluent API. Where SQL meets Java</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/META/SEQUENCE/" title="Previous section: Sequences">previous</a> : <a href="<?=$root?>/manual/DSL/SELECT/" title="Next section: Complete SELECT syntax">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
@ -70,7 +70,12 @@ CREATE TABLE t_book_to_book_store (
|
||||
More entities, types (e.g. UDT's, ARRAY types, ENUM types, etc),
|
||||
stored procedures and packages are introduced for specific examples
|
||||
</p>
|
||||
|
||||
<br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/JOOQ/">jOOQ classes and their usage</a> : <a href="<?=$root?>/manual/JOOQ/ExampleDatabase/">The example database</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/JOOQ/" title="Previous section: jOOQ classes and their usage">previous</a> : <a href="<?=$root?>/manual/JOOQ/Factory/" title="Next section: The Factory class">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
@ -59,7 +59,12 @@ public void bind(BindContext context) throws SQLException;
|
||||
<a href="<?=$root?>/manual/DSL/SQL/" title="jOOQ Manual reference: When it's just much easier: Plain SQL">Plain SQL</a> functionality,
|
||||
where you can provide jOOQ with a simple String representation of your
|
||||
embedded SQL. </p>
|
||||
|
||||
<br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/JOOQ/">jOOQ classes and their usage</a> : <a href="<?=$root?>/manual/JOOQ/Extend/">Extend jOOQ with custom types</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/JOOQ/Serializability/" title="Previous section: Serializability of QueryParts and Results">previous</a> : <a href="<?=$root?>/manual/META/" title="Next section: Meta model code generation">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
@ -148,7 +148,12 @@ MySQLFactory create = new MySQLFactory(connection);
|
||||
that can perform CRUD operations on the
|
||||
Factory's underlying Connection.
|
||||
</p>
|
||||
|
||||
<br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/JOOQ/">jOOQ classes and their usage</a> : <a href="<?=$root?>/manual/JOOQ/Factory/">The Factory class</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/JOOQ/ExampleDatabase/" title="Previous section: The example database">previous</a> : <a href="<?=$root?>/manual/JOOQ/Table/" title="Next section: Tables and Fields">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
@ -496,7 +496,12 @@ create.mergeInto(T_AUTHOR)
|
||||
</table>
|
||||
<p>This is not supported by Ingres and SQLite. jOOQ will execute a DELETE FROM
|
||||
T_AUTHOR statement instead. </p>
|
||||
|
||||
<br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/JOOQ/">jOOQ classes and their usage</a> : <a href="<?=$root?>/manual/JOOQ/Query/">The Query and its various subtypes</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/JOOQ/UpdatableRecord/" title="Previous section: Updatable Records">previous</a> : <a href="<?=$root?>/manual/JOOQ/ResultQuery/" title="Next section: ResultQuery and various ways of fetching data">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
@ -18,6 +18,10 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/JOOQ/">jOOQ classes and their usage</a> : <a href="<?=$root?>/manual/JOOQ/QueryPart/">QueryParts and the global architecture</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/JOOQ/ResultQuery/" title="Previous section: ResultQuery and various ways of fetching data">previous</a> : <a href="<?=$root?>/manual/JOOQ/Serializability/" title="Next section: Serializability of QueryParts and Results">next</a></td>
|
||||
</tr>
|
||||
</table><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/JOOQ/">jOOQ classes and their usage</a> : <a href="<?=$root?>/manual/JOOQ/QueryPart/">QueryParts and the global architecture</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/JOOQ/ResultQuery/" title="Previous section: ResultQuery and various ways of fetching data">previous</a> : <a href="<?=$root?>/manual/JOOQ/Serializability/" title="Next section: Serializability of QueryParts and Results">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -96,7 +96,12 @@ BigDecimal getValueAsBigDecimal(int fieldIndex);
|
||||
// This method can perform arbitrary conversions
|
||||
<T> T getValue(String fieldName, Class<? extends T> type);
|
||||
<T> T getValue(int fieldIndex, Class<? extends T> type);</pre>
|
||||
|
||||
<br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/JOOQ/">jOOQ classes and their usage</a> : <a href="<?=$root?>/manual/JOOQ/Result/">Results and Records</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/JOOQ/Table/" title="Previous section: Tables and Fields">previous</a> : <a href="<?=$root?>/manual/JOOQ/UpdatableRecord/" title="Next section: Updatable Records">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
@ -97,7 +97,12 @@ public interface ResultQuery<R extends Record> {
|
||||
FutureResult<R> fetchLater();
|
||||
FutureResult<R> fetchLater(ExecutorService executor);
|
||||
}</pre>
|
||||
|
||||
<br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/JOOQ/">jOOQ classes and their usage</a> : <a href="<?=$root?>/manual/JOOQ/ResultQuery/">ResultQuery and various ways of fetching data</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/JOOQ/Query/" title="Previous section: The Query and its various subtypes">previous</a> : <a href="<?=$root?>/manual/JOOQ/QueryPart/" title="Next section: QueryParts and the global architecture">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
@ -68,7 +68,12 @@ ConfigurationRegistry.setProvider(provider);</pre>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/JOOQ/">jOOQ classes and their usage</a> : <a href="<?=$root?>/manual/JOOQ/Serializability/">Serializability of QueryParts and Results</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/JOOQ/QueryPart/" title="Previous section: QueryParts and the global architecture">previous</a> : <a href="<?=$root?>/manual/JOOQ/Extend/" title="Next section: Extend jOOQ with custom types">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
@ -143,7 +143,12 @@ function printContent() {
|
||||
<p>
|
||||
This can be used for additional type safety in the future, or by client code.
|
||||
</p>
|
||||
|
||||
<br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/JOOQ/">jOOQ classes and their usage</a> : <a href="<?=$root?>/manual/JOOQ/Table/">Tables and Fields</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/JOOQ/Factory/" title="Previous section: The Factory class">previous</a> : <a href="<?=$root?>/manual/JOOQ/Result/" title="Next section: Results and Records">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
@ -88,7 +88,12 @@ book.storeUsing(TBook.ID);
|
||||
|
||||
// Delete it
|
||||
book.deleteUsing(TBook.ID);</pre>
|
||||
|
||||
<br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/JOOQ/">jOOQ classes and their usage</a> : <a href="<?=$root?>/manual/JOOQ/UpdatableRecord/">Updatable Records</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/JOOQ/Result/" title="Previous section: Results and Records">previous</a> : <a href="<?=$root?>/manual/JOOQ/Query/" title="Next section: The Query and its various subtypes">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
@ -74,7 +74,11 @@ function printContent() {
|
||||
<li>
|
||||
<a href="<?=$root?>/manual/JOOQ/Extend/" title="Extend jOOQ with custom types">Extend jOOQ with custom types</a>
|
||||
</li>
|
||||
</ol>
|
||||
</ol><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/JOOQ/">jOOQ classes and their usage</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/" title="Previous section: The jOOQ User Manual">previous</a> : <a href="<?=$root?>/manual/JOOQ/ExampleDatabase/" title="Next section: The example database">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
@ -214,7 +214,12 @@ org.jooq.util.GenerationTool /jooq-config.properties</pre>
|
||||
<p>Be sure, both jOOQ.jar and your generated package (see
|
||||
configuration) are located on your classpath. Once this is done, you
|
||||
can execute SQL statements with your generated classes.</p>
|
||||
|
||||
<br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/META/">Meta model code generation</a> : <a href="<?=$root?>/manual/META/Configuration/">Configuration and setup of the generator</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/META/" title="Previous section: Meta model code generation">previous</a> : <a href="<?=$root?>/manual/META/SCHEMA/" title="Next section: The schema, top-level generated artefact">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
@ -199,7 +199,12 @@ assertEquals(BigDecimal.ONE, Procedures.pAuthorExists(configuration, "Paulo"));<
|
||||
one for
|
||||
standalone procedures/functions.
|
||||
</p>
|
||||
|
||||
<br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/META/">Meta model code generation</a> : <a href="<?=$root?>/manual/META/PROCEDURE/">Procedures and packages</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/META/TABLE/" title="Previous section: Tables, views and their corresponding records">previous</a> : <a href="<?=$root?>/manual/META/UDT/" title="Next section: UDT's including ARRAY and ENUM types">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
@ -51,7 +51,12 @@ function printContent() {
|
||||
<pre class="prettyprint lang-java">
|
||||
public final java.util.List<org.jooq.Sequence> getSequences();
|
||||
public final java.util.List<org.jooq.Table<?>> getTables();</pre>
|
||||
|
||||
<br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/META/">Meta model code generation</a> : <a href="<?=$root?>/manual/META/SCHEMA/">The schema, top-level generated artefact</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/META/Configuration/" title="Previous section: Configuration and setup of the generator">previous</a> : <a href="<?=$root?>/manual/META/TABLE/" title="Next section: Tables, views and their corresponding records">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
@ -16,6 +16,10 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/META/">Meta model code generation</a> : <a href="<?=$root?>/manual/META/SEQUENCE/">Sequences</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/META/UDT/" title="Previous section: UDT's including ARRAY and ENUM types">previous</a> : <a href="<?=$root?>/manual/DSL/" title="Next section: DSL or fluent API. Where SQL meets Java">next</a></td>
|
||||
</tr>
|
||||
</table><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/META/">Meta model code generation</a> : <a href="<?=$root?>/manual/META/SEQUENCE/">Sequences</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/META/UDT/" title="Previous section: UDT's including ARRAY and ENUM types">previous</a> : <a href="<?=$root?>/manual/DSL/" title="Next section: DSL or fluent API. Where SQL meets Java">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -81,7 +81,12 @@ public class TAuthorRecord extends UpdatableRecordImpl<TAuthorRecord> {
|
||||
// Navigation methods for foreign keys
|
||||
public List<TBookRecord> getTBooks() throws SQLException { // [...]
|
||||
}</pre>
|
||||
|
||||
<br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/META/">Meta model code generation</a> : <a href="<?=$root?>/manual/META/TABLE/">Tables, views and their corresponding records</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/META/SCHEMA/" title="Previous section: The schema, top-level generated artefact">previous</a> : <a href="<?=$root?>/manual/META/PROCEDURE/" title="Next section: Procedures and packages">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
@ -7,7 +7,11 @@ function printH1() {
|
||||
print "UDT's including ARRAY and ENUM types";
|
||||
}
|
||||
function getSlogan() {
|
||||
return "";
|
||||
return "
|
||||
Databases become more powerful when you can structure your data in user
|
||||
defined types. It's time for Java developers to give some credit to
|
||||
that.
|
||||
";
|
||||
}
|
||||
function printContent() {
|
||||
global $root;
|
||||
@ -16,6 +20,317 @@ function printContent() {
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/META/">Meta model code generation</a> : <a href="<?=$root?>/manual/META/UDT/">UDT's including ARRAY and ENUM types</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/META/PROCEDURE/" title="Previous section: Procedures and packages">previous</a> : <a href="<?=$root?>/manual/META/SEQUENCE/" title="Next section: Sequences">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<h2>Increased RDBMS support for UDT's</h2>
|
||||
<p>
|
||||
In recent years, most RDBMS have started to implement some support for
|
||||
advanced data types. This support has not been adopted very well by
|
||||
database users in the Java world, for several reasons:
|
||||
</p>
|
||||
<ul>
|
||||
|
||||
<li>They are usually orthogonal to relational concepts. It is not easy
|
||||
to modify a UDT once it is referenced by a table column.</li>
|
||||
|
||||
<li>There is little standard support of accessing them from JDBC (and
|
||||
probably other database connectivity standards). </li>
|
||||
|
||||
</ul>
|
||||
<p>
|
||||
On the other hand, especially with stored procedures, these data types
|
||||
are likely to become more and more useful in the future. If you have a
|
||||
look at Postgres' capabilities of dealing with advanced data types
|
||||
(<a href="http://www.postgresql.org/docs/9.0/interactive/datatype-enum.html">ENUMs</a>,
|
||||
<a href="http://www.postgresql.org/docs/9.0/interactive/arrays.html">ARRAYs</a>,
|
||||
<a href="http://www.postgresql.org/docs/9.0/interactive/rowtypes.html">UDT's</a>),
|
||||
this becomes more and more obvious.
|
||||
</p>
|
||||
<p>It is a central strategy for jOOQ, to standardise access to these
|
||||
kinds of types (as well as to
|
||||
<a href="<?=$root?>/manual/META/PROCEDURE/" title="jOOQ Manual reference: Procedures and packages">stored procedures</a>, of course) across all
|
||||
RDBMS, where these types are supported. </p>
|
||||
|
||||
<h2>UDT types</h2>
|
||||
<p>User Defined Types (UDT) are helpful in major RDMBS with lots
|
||||
of proprietary functionality. The biggest player is clearly Oracle.
|
||||
Currently, jOOQ provides UDT support for only two databases: </p>
|
||||
<ul>
|
||||
|
||||
<li>Oracle</li>
|
||||
|
||||
<li>Postgres</li>
|
||||
|
||||
</ul>
|
||||
<p>Apart from that, </p>
|
||||
<ul>
|
||||
|
||||
<li>
|
||||
DB2 UDT's are not supported as they are very tough to
|
||||
serialise/deserialise. We don't think that this is a big enough
|
||||
requirement to put more effort in those, right now (see also the
|
||||
developers' discussion on
|
||||
<a href="https://sourceforge.net/apps/trac/jooq/ticket/164" title="Trac ticket: #164">#164</a>)
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<p>In Oracle, you would define UDTs like this: </p>
|
||||
<pre class="prettyprint lang-sql">
|
||||
CREATE TYPE u_street_type AS OBJECT (
|
||||
street VARCHAR2(100),
|
||||
no VARCHAR2(30)
|
||||
)
|
||||
|
||||
CREATE TYPE u_address_type AS OBJECT (
|
||||
street u_street_type,
|
||||
zip VARCHAR2(50),
|
||||
city VARCHAR2(50),
|
||||
country VARCHAR2(50),
|
||||
since DATE,
|
||||
code NUMBER(7)
|
||||
)</pre>
|
||||
|
||||
<p>These types could then be used in tables and/or stored procedures like such: </p>
|
||||
<pre class="prettyprint lang-sql">
|
||||
CREATE TABLE t_author (
|
||||
id NUMBER(7) NOT NULL PRIMARY KEY,
|
||||
-- [...]
|
||||
address u_address_type
|
||||
)
|
||||
|
||||
CREATE OR REPLACE PROCEDURE p_check_address (address IN OUT u_address_type);</pre>
|
||||
|
||||
<p>
|
||||
Standard JDBC UDT support encourages JDBC-driver developers to implement
|
||||
interfaces such as
|
||||
<a href="http://download.oracle.com/javase/6/docs/api/java/sql/SQLData.html" title="External API reference: java.sql.SQLData">java.sql.SQLData</a>,
|
||||
<a href="http://download.oracle.com/javase/6/docs/api/java/sql/SQLInput.html" title="External API reference: java.sql.SQLInput">java.sql.SQLInput</a> and
|
||||
<a href="http://download.oracle.com/javase/6/docs/api/java/sql/SQLOutput.html" title="External API reference: java.sql.SQLOutput">java.sql.SQLOutput</a>.
|
||||
Those interfaces are non-trivial to implement, or
|
||||
to hook into. Also access to
|
||||
<a href="http://download.oracle.com/javase/6/docs/api/java/sql/Struct.html" title="External API reference: java.sql.Struct">java.sql.Struct</a>
|
||||
is not really simple. Due
|
||||
to the lack of a well-defined JDBC standard, Oracle's JDBC driver
|
||||
rolls their own proprietary methods of dealing with these types. jOOQ
|
||||
goes a different way, it hides those facts from you entirely. With
|
||||
jOOQ, the above UDT's will be generated in simple
|
||||
<a href="https://github.com/lukaseder/jOOQ/blob/master/jOOQ/src/main/java/org/jooq/UDT.java" title="Internal API reference: org.jooq.UDT">UDT meta-model classes</a> and
|
||||
<a href="https://github.com/lukaseder/jOOQ/blob/master/jOOQ/src/main/java/org/jooq/UDTRecord.java" title="Internal API reference: org.jooq.UDTRecord">UDT record classes</a> as such:
|
||||
</p>
|
||||
<pre class="prettyprint lang-java">
|
||||
// There is an analogy between UDT/Table and UDTRecord/TableRecord...
|
||||
public class UAddressType extends UDTImpl<UAddressTypeRecord> {
|
||||
|
||||
// The UDT meta-model singleton instance
|
||||
public static final UAddressType U_ADDRESS_TYPE = new UAddressType();
|
||||
|
||||
// UDT attributes are modeled as static members. Nested UDT's
|
||||
// behave similarly
|
||||
public static final UDTField<UAddressTypeRecord, UStreetTypeRecord> STREET = // [...]
|
||||
public static final UDTField<UAddressTypeRecord, String> ZIP = // [...]
|
||||
public static final UDTField<UAddressTypeRecord, String> CITY = // [...]
|
||||
public static final UDTField<UAddressTypeRecord, String> COUNTRY = // [...]
|
||||
public static final UDTField<UAddressTypeRecord, Date> SINCE = // [...]
|
||||
public static final UDTField<UAddressTypeRecord, Integer> CODE = // [...]
|
||||
}</pre>
|
||||
|
||||
<p>Now, when you interact with entities or procedures that hold UDT's, that's very simple as well. Here is an example: </p>
|
||||
<pre class="prettyprint lang-java">
|
||||
// Fetch any author from the T_AUTHOR table
|
||||
TAuthorRecord author = create.selectFrom(T_AUTHOR).fetchAny();
|
||||
|
||||
// Print out the author's address's house number
|
||||
System.out.println(author.getAddress().getStreet().getNo());</pre>
|
||||
|
||||
<p>A similar thing can be achieved when interacting with the example stored procedure: </p>
|
||||
<pre class="prettyprint lang-java">
|
||||
// Create a new UDTRecord of type U_ADDRESS_TYPE
|
||||
UAddressTypeRecord address = new UAddressTypeRecord();
|
||||
address.setCountry("Switzerland");
|
||||
|
||||
// Call the stored procedure with IN OUT parameter of type U_ADDRESS_TYPE
|
||||
address = Procedures.pCheckAddress(connection, address);</pre>
|
||||
|
||||
|
||||
<h2>ARRAY types</h2>
|
||||
<p>
|
||||
The notion of ARRAY types in RDBMS is not standardised at all. Very
|
||||
modern databases (especially the Java-based ones) have implemented
|
||||
ARRAY types exactly as what they are. "ARRAYs of something". In other
|
||||
words, an ARRAY OF VARCHAR would be something very similar to Java's
|
||||
notion of String[]. An ARRAY OF ARRAY OF VARCHAR would then be a
|
||||
String[][] in Java. Some RDMBS, however, enforce stronger typing and
|
||||
need the explicit creation of types for every ARRAY as well. These are
|
||||
example String[] ARRAY types in various SQL dialects supported by jOOQ
|
||||
1.5.4:
|
||||
</p>
|
||||
<ul>
|
||||
|
||||
<li>Oracle: VARRAY OF VARCHAR2. A strongly typed object encapsulating an ARRAY of a given type. See the <a href="http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/collection_definition.htm">documentation.</a>
|
||||
</li>
|
||||
|
||||
<li>Postgres: text[]. Any data type can be turned into an array by suffixing it with []. See the <a href="http://www.postgresql.org/docs/9.0/interactive/arrays.html">documentation</a>
|
||||
</li>
|
||||
|
||||
<li>HSQLDB: VARCHAR ARRAY. Any data type can be turned into an array by suffixing it with ARRAY. See the <a href="http://hsqldb.org/doc/2.0/guide/sqlgeneral-chapt.html#N1070F">documentation</a>
|
||||
</li>
|
||||
|
||||
<li>H2: ARRAY. H2 does not know of typed arrays. All ARRAYs are mapped to Object[]. See the <a href="http://www.h2database.com/html/datatypes.html#array_type">documentation</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
<p>Soon to be supported: </p>
|
||||
<ul>
|
||||
|
||||
<li>DB2: Knows a similar strongly-typed ARRAY type, like Oracle </li>
|
||||
|
||||
</ul>
|
||||
<p>
|
||||
From jOOQ's perspective, the ARRAY types fit in just like any other
|
||||
type wherever the
|
||||
<T> generic type parameter is existent. It integrates well with tables
|
||||
and stored procedures.
|
||||
</p>
|
||||
|
||||
<h3>Example: General ARRAY types</h3>
|
||||
<p>An example usage of ARRAYs is given here for the Postgres dialect </p>
|
||||
|
||||
<pre class="prettyprint lang-sql">
|
||||
CREATE TABLE t_arrays (
|
||||
id integer not null primary key,
|
||||
string_array VARCHAR(20)[],
|
||||
number_array INTEGER[]
|
||||
)
|
||||
|
||||
CREATE FUNCTION f_arrays(in_array IN text[]) RETURNS text[]</pre>
|
||||
|
||||
<p>When generating source code from the above entities, these artefacts will be created in Java: </p>
|
||||
<pre class="prettyprint lang-java">
|
||||
public class TArrays extends UpdatableTableImpl<TArraysRecord> {
|
||||
|
||||
// The generic type parameter <T> is bound to an array of a matching type
|
||||
public static final TableField<TArraysRecord, String[]> STRING_ARRAY = // [...]
|
||||
public static final TableField<TArraysRecord, Integer[]> NUMBER_ARRAY = // [...]
|
||||
}
|
||||
|
||||
// The convenience class is enhanced with these methods
|
||||
public final class Functions {
|
||||
public static String[] fArrays(Connection connection, String[] inArray) throws SQLException { // [...]
|
||||
public static Field<String[]> fArrays(String[] inArray) { // [...]
|
||||
public static Field<String[]> fArrays(Field<String[]> inArray) { // [...]
|
||||
}</pre>
|
||||
|
||||
<h3>Example: Oracle VARRAY types</h3>
|
||||
<p>In Oracle, a VARRAY type is something slightly different than in
|
||||
other RDMBS. It is a type that encapsules the actual ARRAY and creates
|
||||
a new type from it. While all text[] types are equal and thus
|
||||
compatible in Postgres, this does not apply for all VARRAY OF VARCHAR2
|
||||
types. Hence, it is important to provide access to VARRAY types and
|
||||
generated objects from those types as well. The example above would
|
||||
read like this in Oracle: </p>
|
||||
|
||||
<pre class="prettyprint lang-sql">
|
||||
CREATE TYPE u_string_array AS VARRAY(4) OF VARCHAR2(20)
|
||||
CREATE TYPE u_number_array AS VARRAY(4) OF NUMBER(7)
|
||||
|
||||
CREATE TABLE t_arrays (
|
||||
id NUMBER(7) not null primary key,
|
||||
string_array u_string_array,
|
||||
number_array u_number_array
|
||||
)
|
||||
|
||||
CREATE OR REPLACE FUNCTION f_arrays (in_array u_string_array)
|
||||
RETURN u_string_array</pre>
|
||||
|
||||
<p>Note that it becomes clear immediately, that a mapping from
|
||||
U_STRING_ARRAY to String[] is obvious. But a mapping from String[] to
|
||||
U_STRING_ARRAY is not. These are the generated
|
||||
<a href="https://github.com/lukaseder/jOOQ/blob/master/jOOQ/src/main/java/org/jooq/ArrayRecord.java" title="Internal API reference: org.jooq.ArrayRecord">org.jooq.ArrayRecord</a> and other
|
||||
artefacts in Oracle: </p>
|
||||
|
||||
<pre class="prettyprint lang-java">
|
||||
public class UStringArrayRecord extends ArrayRecordImpl<String> { // [...]
|
||||
public class UNumberArrayRecord extends ArrayRecordImpl<Integer> { // [...]
|
||||
|
||||
public class TArrays extends UpdatableTableImpl<TArraysRecord> {
|
||||
public static final TableField<TArraysRecord, UStringArrayRecord> STRING_ARRAY = // [...]
|
||||
public static final TableField<TArraysRecord, UNumberArrayRecord> NUMBER_ARRAY = // [...]
|
||||
}
|
||||
|
||||
public final class Functions {
|
||||
public static UStringArrayRecord fArrays3(Connection connection, UStringArrayRecord inArray) { // [...]
|
||||
public static Field<UStringArrayRecord> fArrays3(UStringArrayRecord inArray) { // [...]
|
||||
public static Field<UStringArrayRecord> fArrays3(Field<UStringArrayRecord> inArray) { // [...]
|
||||
}</pre>
|
||||
|
||||
|
||||
<h2>ENUM types</h2>
|
||||
<p>True ENUM types are a rare species in the RDBMS world. Currently,
|
||||
MySQL and Postgres are the only RDMBS supported by jOOQ, that provide
|
||||
ENUM types. </p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li>In MySQL, an ENUM type is declared directly upon a column. It cannot be reused as a type. See the <a href="http://dev.mysql.com/doc/refman/5.5/en/enum.html">documentation.</a>
|
||||
</li>
|
||||
|
||||
<li>In Postgres, the ENUM type is declared independently and can be reused among tables, functions, etc. See the <a href="http://www.postgresql.org/docs/9.0/interactive/datatype-enum.html">documentation.</a>
|
||||
</li>
|
||||
|
||||
<li>Other RDMBS know about "ENUM constraints", such as the Oracle CHECK constraint. These are not true ENUMS, however. jOOQ refrains from using their information for source code generation </li>
|
||||
|
||||
</ul>
|
||||
|
||||
<p>Some examples: </p>
|
||||
<pre class="prettyprint lang-sql">
|
||||
-- An example enum type
|
||||
CREATE TYPE u_book_status AS ENUM ('SOLD OUT', 'ON STOCK', 'ORDERED')
|
||||
|
||||
-- An example useage of that enum type
|
||||
CREATE TABLE t_book (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
|
||||
-- [...]
|
||||
status u_book_status
|
||||
)</pre>
|
||||
|
||||
<p>The above Postgres ENUM type will be generated as </p>
|
||||
<pre class="prettyprint lang-java">
|
||||
public enum UBookStatus implements EnumType {
|
||||
ORDERED("ORDERED"),
|
||||
ON_STOCK("ON STOCK"),
|
||||
SOLD_OUT("SOLD OUT");
|
||||
|
||||
// [...]
|
||||
}</pre>
|
||||
<p>Intuitively, the generated classes for the T_BOOK table in Postgres would look like this: </p>
|
||||
<pre class="prettyprint lang-sql">
|
||||
// The meta-model class
|
||||
public class TBook extends UpdatableTableImpl<TBookRecord> {
|
||||
|
||||
// The TableField STATUS binds <T> to UBookStatus
|
||||
public static final TableField<TBookRecord, UBookStatus> STATUS = // [...]
|
||||
|
||||
// [...]
|
||||
}
|
||||
|
||||
// The record class
|
||||
public class TBookRecord extends UpdatableRecordImpl<TBookRecord> {
|
||||
|
||||
// Corresponding to the Table meta-model, also setters and getters
|
||||
// deal with the generated UBookStatus
|
||||
public void setStatus(UBookStatus value) { // [...]
|
||||
public UBookStatus getStatus() { // [...]
|
||||
}</pre>
|
||||
|
||||
<p>Note that jOOQ allows you to simulate ENUM types where this makes
|
||||
sense in your data model. See the section on
|
||||
<a href="<?=$root?>/manual/ADVANCED/MasterData/" title="jOOQ Manual reference: Master data generation">master data</a> for more
|
||||
details. </p>
|
||||
<br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/META/">Meta model code generation</a> : <a href="<?=$root?>/manual/META/UDT/">UDT's including ARRAY and ENUM types</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/META/PROCEDURE/" title="Previous section: Procedures and packages">previous</a> : <a href="<?=$root?>/manual/META/SEQUENCE/" title="Next section: Sequences">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -58,7 +58,11 @@ function printContent() {
|
||||
<li>
|
||||
<a href="<?=$root?>/manual/META/SEQUENCE/" title="Sequences">Sequences</a>
|
||||
</li>
|
||||
</ol>
|
||||
</ol><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a> : <a href="<?=$root?>/manual/META/">Meta model code generation</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/JOOQ/Extend/" title="Previous section: Extend jOOQ with custom types">previous</a> : <a href="<?=$root?>/manual/META/Configuration/" title="Next section: Configuration and setup of the generator">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
@ -205,7 +205,11 @@ function printContent() {
|
||||
</li>
|
||||
</ol>
|
||||
</li>
|
||||
</ol>
|
||||
</ol><br><table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top"><a href="<?=$root?>/manual/">The jOOQ User Manual</a></td><td align="right" valign="top" style="white-space: nowrap"><a href="<?=$root?>/manual/JOOQ/" title="Next section: jOOQ classes and their usage">next</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
@ -44,6 +44,19 @@ function printContent() {
|
||||
<!-- matching templates -->
|
||||
|
||||
<xsl:template match="//section[@id = $sectionID]" mode="content">
|
||||
<xsl:apply-templates select="." mode="navigation"/>
|
||||
<xsl:apply-templates select="content"/>
|
||||
|
||||
<xsl:if test="count(sections/section) > 0">
|
||||
<h3>Table of contents</h3>
|
||||
</xsl:if>
|
||||
<xsl:apply-templates select="." mode="toc"/>
|
||||
|
||||
<br/>
|
||||
<xsl:apply-templates select="." mode="navigation"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="section" mode="navigation">
|
||||
<table cellpadding="0" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top">
|
||||
@ -54,14 +67,6 @@ function printContent() {
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<xsl:apply-templates select="content"/>
|
||||
|
||||
<xsl:if test="count(sections/section) > 0">
|
||||
<h3>Table of contents</h3>
|
||||
</xsl:if>
|
||||
<xsl:apply-templates select="." mode="toc"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="section" mode="breadcrumb">
|
||||
|
||||
@ -1680,7 +1680,297 @@ assertEquals(BigDecimal.ONE, Procedures.pAuthorExists(configuration, "Paulo"));<
|
||||
|
||||
<section id="UDT">
|
||||
<title>UDT's including ARRAY and ENUM types</title>
|
||||
<slogan>
|
||||
Databases become more powerful when you can structure your data in user
|
||||
defined types. It's time for Java developers to give some credit to
|
||||
that.
|
||||
</slogan>
|
||||
<content>
|
||||
<h2>Increased RDBMS support for UDT's</h2>
|
||||
<p>
|
||||
In recent years, most RDBMS have started to implement some support for
|
||||
advanced data types. This support has not been adopted very well by
|
||||
database users in the Java world, for several reasons:
|
||||
</p>
|
||||
<ul>
|
||||
<li>They are usually orthogonal to relational concepts. It is not easy
|
||||
to modify a UDT once it is referenced by a table column.</li>
|
||||
<li>There is little standard support of accessing them from JDBC (and
|
||||
probably other database connectivity standards). </li>
|
||||
</ul>
|
||||
<p>
|
||||
On the other hand, especially with stored procedures, these data types
|
||||
are likely to become more and more useful in the future. If you have a
|
||||
look at Postgres' capabilities of dealing with advanced data types
|
||||
(<a href="http://www.postgresql.org/docs/9.0/interactive/datatype-enum.html">ENUMs</a>,
|
||||
<a href="http://www.postgresql.org/docs/9.0/interactive/arrays.html">ARRAYs</a>,
|
||||
<a href="http://www.postgresql.org/docs/9.0/interactive/rowtypes.html">UDT's</a>),
|
||||
this becomes more and more obvious.
|
||||
</p>
|
||||
<p>It is a central strategy for jOOQ, to standardise access to these
|
||||
kinds of types (as well as to
|
||||
<reference id="PROCEDURE" title="stored procedures"/>, of course) across all
|
||||
RDBMS, where these types are supported. </p>
|
||||
|
||||
<h2>UDT types</h2>
|
||||
<p>User Defined Types (UDT) are helpful in major RDMBS with lots
|
||||
of proprietary functionality. The biggest player is clearly Oracle.
|
||||
Currently, jOOQ provides UDT support for only two databases: </p>
|
||||
<ul>
|
||||
<li>Oracle</li>
|
||||
<li>Postgres</li>
|
||||
</ul>
|
||||
<p>Apart from that, </p>
|
||||
<ul>
|
||||
<li>
|
||||
DB2 UDT's are not supported as they are very tough to
|
||||
serialise/deserialise. We don't think that this is a big enough
|
||||
requirement to put more effort in those, right now (see also the
|
||||
developers' discussion on
|
||||
<reference ticket="164" />)
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>In Oracle, you would define UDTs like this: </p>
|
||||
<pre class="prettyprint lang-sql">
|
||||
CREATE TYPE u_street_type AS OBJECT (
|
||||
street VARCHAR2(100),
|
||||
no VARCHAR2(30)
|
||||
)
|
||||
|
||||
CREATE TYPE u_address_type AS OBJECT (
|
||||
street u_street_type,
|
||||
zip VARCHAR2(50),
|
||||
city VARCHAR2(50),
|
||||
country VARCHAR2(50),
|
||||
since DATE,
|
||||
code NUMBER(7)
|
||||
)</pre>
|
||||
|
||||
<p>These types could then be used in tables and/or stored procedures like such: </p>
|
||||
<pre class="prettyprint lang-sql">
|
||||
CREATE TABLE t_author (
|
||||
id NUMBER(7) NOT NULL PRIMARY KEY,
|
||||
-- [...]
|
||||
address u_address_type
|
||||
)
|
||||
|
||||
CREATE OR REPLACE PROCEDURE p_check_address (address IN OUT u_address_type);</pre>
|
||||
|
||||
<p>
|
||||
Standard JDBC UDT support encourages JDBC-driver developers to implement
|
||||
interfaces such as
|
||||
<reference class="java.sql.SQLData"/>,
|
||||
<reference class="java.sql.SQLInput"/> and
|
||||
<reference class="java.sql.SQLOutput"/>.
|
||||
Those interfaces are non-trivial to implement, or
|
||||
to hook into. Also access to
|
||||
<reference class="java.sql.Struct"/>
|
||||
is not really simple. Due
|
||||
to the lack of a well-defined JDBC standard, Oracle's JDBC driver
|
||||
rolls their own proprietary methods of dealing with these types. jOOQ
|
||||
goes a different way, it hides those facts from you entirely. With
|
||||
jOOQ, the above UDT's will be generated in simple
|
||||
<reference class="org.jooq.UDT" title="UDT meta-model classes"/> and
|
||||
<reference class="org.jooq.UDTRecord" title="UDT record classes"/> as such:
|
||||
</p>
|
||||
<pre class="prettyprint lang-java">
|
||||
// There is an analogy between UDT/Table and UDTRecord/TableRecord...
|
||||
public class UAddressType extends UDTImpl<UAddressTypeRecord> {
|
||||
|
||||
// The UDT meta-model singleton instance
|
||||
public static final UAddressType U_ADDRESS_TYPE = new UAddressType();
|
||||
|
||||
// UDT attributes are modeled as static members. Nested UDT's
|
||||
// behave similarly
|
||||
public static final UDTField<UAddressTypeRecord, UStreetTypeRecord> STREET = // [...]
|
||||
public static final UDTField<UAddressTypeRecord, String> ZIP = // [...]
|
||||
public static final UDTField<UAddressTypeRecord, String> CITY = // [...]
|
||||
public static final UDTField<UAddressTypeRecord, String> COUNTRY = // [...]
|
||||
public static final UDTField<UAddressTypeRecord, Date> SINCE = // [...]
|
||||
public static final UDTField<UAddressTypeRecord, Integer> CODE = // [...]
|
||||
}</pre>
|
||||
|
||||
<p>Now, when you interact with entities or procedures that hold UDT's, that's very simple as well. Here is an example: </p>
|
||||
<pre class="prettyprint lang-java">
|
||||
// Fetch any author from the T_AUTHOR table
|
||||
TAuthorRecord author = create.selectFrom(T_AUTHOR).fetchAny();
|
||||
|
||||
// Print out the author's address's house number
|
||||
System.out.println(author.getAddress().getStreet().getNo());</pre>
|
||||
|
||||
<p>A similar thing can be achieved when interacting with the example stored procedure: </p>
|
||||
<pre class="prettyprint lang-java">
|
||||
// Create a new UDTRecord of type U_ADDRESS_TYPE
|
||||
UAddressTypeRecord address = new UAddressTypeRecord();
|
||||
address.setCountry("Switzerland");
|
||||
|
||||
// Call the stored procedure with IN OUT parameter of type U_ADDRESS_TYPE
|
||||
address = Procedures.pCheckAddress(connection, address);</pre>
|
||||
|
||||
|
||||
<h2>ARRAY types</h2>
|
||||
<p>
|
||||
The notion of ARRAY types in RDBMS is not standardised at all. Very
|
||||
modern databases (especially the Java-based ones) have implemented
|
||||
ARRAY types exactly as what they are. "ARRAYs of something". In other
|
||||
words, an ARRAY OF VARCHAR would be something very similar to Java's
|
||||
notion of String[]. An ARRAY OF ARRAY OF VARCHAR would then be a
|
||||
String[][] in Java. Some RDMBS, however, enforce stronger typing and
|
||||
need the explicit creation of types for every ARRAY as well. These are
|
||||
example String[] ARRAY types in various SQL dialects supported by jOOQ
|
||||
1.5.4:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Oracle: VARRAY OF VARCHAR2. A strongly typed object encapsulating an ARRAY of a given type. See the <a href="http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/collection_definition.htm">documentation.</a></li>
|
||||
<li>Postgres: text[]. Any data type can be turned into an array by suffixing it with []. See the <a href="http://www.postgresql.org/docs/9.0/interactive/arrays.html">documentation</a></li>
|
||||
<li>HSQLDB: VARCHAR ARRAY. Any data type can be turned into an array by suffixing it with ARRAY. See the <a href="http://hsqldb.org/doc/2.0/guide/sqlgeneral-chapt.html#N1070F">documentation</a></li>
|
||||
<li>H2: ARRAY. H2 does not know of typed arrays. All ARRAYs are mapped to Object[]. See the <a href="http://www.h2database.com/html/datatypes.html#array_type">documentation</a></li>
|
||||
</ul>
|
||||
<p>Soon to be supported: </p>
|
||||
<ul>
|
||||
<li>DB2: Knows a similar strongly-typed ARRAY type, like Oracle </li>
|
||||
</ul>
|
||||
<p>
|
||||
From jOOQ's perspective, the ARRAY types fit in just like any other
|
||||
type wherever the
|
||||
<T> generic type parameter is existent. It integrates well with tables
|
||||
and stored procedures.
|
||||
</p>
|
||||
|
||||
<h3>Example: General ARRAY types</h3>
|
||||
<p>An example usage of ARRAYs is given here for the Postgres dialect </p>
|
||||
|
||||
<pre class="prettyprint lang-sql">
|
||||
CREATE TABLE t_arrays (
|
||||
id integer not null primary key,
|
||||
string_array VARCHAR(20)[],
|
||||
number_array INTEGER[]
|
||||
)
|
||||
|
||||
CREATE FUNCTION f_arrays(in_array IN text[]) RETURNS text[]</pre>
|
||||
|
||||
<p>When generating source code from the above entities, these artefacts will be created in Java: </p>
|
||||
<pre class="prettyprint lang-java">
|
||||
public class TArrays extends UpdatableTableImpl<TArraysRecord> {
|
||||
|
||||
// The generic type parameter <T> is bound to an array of a matching type
|
||||
public static final TableField<TArraysRecord, String[]> STRING_ARRAY = // [...]
|
||||
public static final TableField<TArraysRecord, Integer[]> NUMBER_ARRAY = // [...]
|
||||
}
|
||||
|
||||
// The convenience class is enhanced with these methods
|
||||
public final class Functions {
|
||||
public static String[] fArrays(Connection connection, String[] inArray) throws SQLException { // [...]
|
||||
public static Field<String[]> fArrays(String[] inArray) { // [...]
|
||||
public static Field<String[]> fArrays(Field<String[]> inArray) { // [...]
|
||||
}</pre>
|
||||
|
||||
<h3>Example: Oracle VARRAY types</h3>
|
||||
<p>In Oracle, a VARRAY type is something slightly different than in
|
||||
other RDMBS. It is a type that encapsules the actual ARRAY and creates
|
||||
a new type from it. While all text[] types are equal and thus
|
||||
compatible in Postgres, this does not apply for all VARRAY OF VARCHAR2
|
||||
types. Hence, it is important to provide access to VARRAY types and
|
||||
generated objects from those types as well. The example above would
|
||||
read like this in Oracle: </p>
|
||||
|
||||
<pre class="prettyprint lang-sql">
|
||||
CREATE TYPE u_string_array AS VARRAY(4) OF VARCHAR2(20)
|
||||
CREATE TYPE u_number_array AS VARRAY(4) OF NUMBER(7)
|
||||
|
||||
CREATE TABLE t_arrays (
|
||||
id NUMBER(7) not null primary key,
|
||||
string_array u_string_array,
|
||||
number_array u_number_array
|
||||
)
|
||||
|
||||
CREATE OR REPLACE FUNCTION f_arrays (in_array u_string_array)
|
||||
RETURN u_string_array</pre>
|
||||
|
||||
<p>Note that it becomes clear immediately, that a mapping from
|
||||
U_STRING_ARRAY to String[] is obvious. But a mapping from String[] to
|
||||
U_STRING_ARRAY is not. These are the generated
|
||||
<reference class="org.jooq.ArrayRecord" /> and other
|
||||
artefacts in Oracle: </p>
|
||||
|
||||
<pre class="prettyprint lang-java">
|
||||
public class UStringArrayRecord extends ArrayRecordImpl<String> { // [...]
|
||||
public class UNumberArrayRecord extends ArrayRecordImpl<Integer> { // [...]
|
||||
|
||||
public class TArrays extends UpdatableTableImpl<TArraysRecord> {
|
||||
public static final TableField<TArraysRecord, UStringArrayRecord> STRING_ARRAY = // [...]
|
||||
public static final TableField<TArraysRecord, UNumberArrayRecord> NUMBER_ARRAY = // [...]
|
||||
}
|
||||
|
||||
public final class Functions {
|
||||
public static UStringArrayRecord fArrays3(Connection connection, UStringArrayRecord inArray) { // [...]
|
||||
public static Field<UStringArrayRecord> fArrays3(UStringArrayRecord inArray) { // [...]
|
||||
public static Field<UStringArrayRecord> fArrays3(Field<UStringArrayRecord> inArray) { // [...]
|
||||
}</pre>
|
||||
|
||||
|
||||
<h2>ENUM types</h2>
|
||||
<p>True ENUM types are a rare species in the RDBMS world. Currently,
|
||||
MySQL and Postgres are the only RDMBS supported by jOOQ, that provide
|
||||
ENUM types. </p>
|
||||
|
||||
<ul>
|
||||
<li>In MySQL, an ENUM type is declared directly upon a column. It cannot be reused as a type. See the <a href="http://dev.mysql.com/doc/refman/5.5/en/enum.html">documentation.</a> </li>
|
||||
<li>In Postgres, the ENUM type is declared independently and can be reused among tables, functions, etc. See the <a href="http://www.postgresql.org/docs/9.0/interactive/datatype-enum.html">documentation.</a> </li>
|
||||
<li>Other RDMBS know about "ENUM constraints", such as the Oracle CHECK constraint. These are not true ENUMS, however. jOOQ refrains from using their information for source code generation </li>
|
||||
</ul>
|
||||
|
||||
<p>Some examples: </p>
|
||||
<pre class="prettyprint lang-sql">
|
||||
-- An example enum type
|
||||
CREATE TYPE u_book_status AS ENUM ('SOLD OUT', 'ON STOCK', 'ORDERED')
|
||||
|
||||
-- An example useage of that enum type
|
||||
CREATE TABLE t_book (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
|
||||
-- [...]
|
||||
status u_book_status
|
||||
)</pre>
|
||||
|
||||
<p>The above Postgres ENUM type will be generated as </p>
|
||||
<pre class="prettyprint lang-java">
|
||||
public enum UBookStatus implements EnumType {
|
||||
ORDERED("ORDERED"),
|
||||
ON_STOCK("ON STOCK"),
|
||||
SOLD_OUT("SOLD OUT");
|
||||
|
||||
// [...]
|
||||
}</pre>
|
||||
<p>Intuitively, the generated classes for the T_BOOK table in Postgres would look like this: </p>
|
||||
<pre class="prettyprint lang-sql">
|
||||
// The meta-model class
|
||||
public class TBook extends UpdatableTableImpl<TBookRecord> {
|
||||
|
||||
// The TableField STATUS binds <T> to UBookStatus
|
||||
public static final TableField<TBookRecord, UBookStatus> STATUS = // [...]
|
||||
|
||||
// [...]
|
||||
}
|
||||
|
||||
// The record class
|
||||
public class TBookRecord extends UpdatableRecordImpl<TBookRecord> {
|
||||
|
||||
// Corresponding to the Table meta-model, also setters and getters
|
||||
// deal with the generated UBookStatus
|
||||
public void setStatus(UBookStatus value) { // [...]
|
||||
public UBookStatus getStatus() { // [...]
|
||||
}</pre>
|
||||
|
||||
<p>Note that jOOQ allows you to simulate ENUM types where this makes
|
||||
sense in your data model. See the section on
|
||||
<reference id="MasterData" title="master data"/> for more
|
||||
details. </p>
|
||||
</content>
|
||||
</section>
|
||||
|
||||
|
||||
<section id="SEQUENCE">
|
||||
<title>Sequences</title>
|
||||
</section>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user