<?xml version="1.0" encoding="UTF-8"?>
<schema
  xmlns="http://www.w3.org/2001/XMLSchema"
  xmlns:jooq-runtime="http://www.jooq.org/xsd/jooq-runtime-3.13.0.xsd"
  xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
  xmlns:annox="http://annox.dev.java.net"
  targetNamespace="http://www.jooq.org/xsd/jooq-runtime-3.13.0.xsd"
  elementFormDefault="qualified"
  jxb:extensionBindingPrefixes="annox"
  jxb:version="2.1">

  <element name="settings" type="jooq-runtime:Settings"/>

  <complexType name="Settings">
    <annotation><appinfo><jxb:class><jxb:javadoc><![CDATA[Settings that influence the way jOOQ renders SQL code.]]></jxb:javadoc></jxb:class></appinfo></annotation>
    <all>
      <element name="renderCatalog" type="boolean" minOccurs="0" maxOccurs="1" default="true">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether any catalog name should be rendered at all.
<p>
Use this for single-catalog environments, or when all objects are made
available using synonyms]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="renderSchema" type="boolean" minOccurs="0" maxOccurs="1" default="true">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether any schema name should be rendered at all.
<p>
Setting this to false also implicitly sets "renderCatalog" to false.
<p>
Use this for single-schema environments, or when all objects are made
available using synonyms]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="renderMapping" type="jooq-runtime:RenderMapping" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Configure render mapping for runtime schema / table rewriting in
generated SQL.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      
      <element name="renderQuotedNames" type="jooq-runtime:RenderQuotedNames" minOccurs="0" maxOccurs="1" default="EXPLICIT_DEFAULT_QUOTED">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether rendered schema, table, column names, etc should be quoted.
<p>
This only affects names created through {@link org.jooq.impl.DSL#name(String)} methods (including those that are implicitly created through this method), not {@link org.jooq.impl.DSL#quotedName(String)} or {@link org.jooq.impl.DSL#unquotedName(String)}, whose behaviour cannot be overridden.
<p>
This setting does not affect any plain SQL usage.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      
      <element name="renderNameCase" type="jooq-runtime:RenderNameCase" minOccurs="0" maxOccurs="1" default="AS_IS">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether the case of {@link org.jooq.Name} references should be modified in any way.
<p>
Names are modified irrespective of the {@link #getRenderQuotedNames()} setting.
<p>
This setting does not affect any plain SQL usage.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="renderNameStyle" type="jooq-runtime:RenderNameStyle" minOccurs="0" maxOccurs="1" default="QUOTED">
        <annotation>
          <appinfo>
            <jxb:property>
              <jxb:javadoc><![CDATA[Whether rendered schema, table, column names, etc should be quoted
in rendered SQL, or transformed in any other way.
<p>
This is set to "QUOTED" by default for backwards-compatibility.
<p>
@deprecated - 3.12.0 - [#5909] - Use {@link RenderQuotedNames} and {@link RenderNameCase} instead.]]></jxb:javadoc>
            </jxb:property>
            <annox:annotate target="getter">@java.lang.Deprecated</annox:annotate>
            <annox:annotate target="setter">@java.lang.Deprecated</annox:annotate>
          </appinfo>
        </annotation>
      </element>
      
      <element name="renderNamedParamPrefix" type="string" minOccurs="0" maxOccurs="1" default=":">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The prefix to use for named parameters.
<p>
Named parameter syntax defaults to <code>:name</code> (such as supported by Oracle, JPA, Spring), but 
vendor specific parameters may look differently. This flag can be used to determine the prefix to be
used by named parameters, such as <code>@</code> for SQL Server's <code>@name</code> or <code>$</code>
for PostgreSQL's <code>$name</code>.
<p>
"Named indexed" parameters can be obtained in the same way by specifingy {@code ParamType#NAMED} and not
providing a name to parameters, resulting in <code>:1</code> or <code>@1</code> or <code>$1</code>, etc.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="renderKeywordCase" type="jooq-runtime:RenderKeywordCase" minOccurs="0" maxOccurs="1" default="AS_IS">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether the case of {@link org.jooq.Keyword} references should be modified in any way.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="renderKeywordStyle" type="jooq-runtime:RenderKeywordStyle" minOccurs="0" maxOccurs="1" default="AS_IS">
        <annotation>
          <appinfo>
            <jxb:property>
              <jxb:javadoc><![CDATA[Whether the case of {@link org.jooq.Keyword} references should be modified in any way.
<p>
@deprecated - 3.12.0 - [#5909] - Use {@link RenderKeywordCase} instead.]]></jxb:javadoc>
            </jxb:property>
            <annox:annotate target="getter">@java.lang.Deprecated</annox:annotate>
            <annox:annotate target="setter">@java.lang.Deprecated</annox:annotate>
          </appinfo>
        </annotation>
      </element>
      
      <element name="renderLocale" type="string" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The Locale to be used with any render locale dependent logic (as e.g. transforming names to lower / uppper case), defaulting to {@link #getLocale()}.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="renderFormatted" type="boolean" minOccurs="0" maxOccurs="1" default="false">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether rendered SQL should be pretty-printed.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="renderFormatting" type="jooq-runtime:RenderFormatting" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[All sorts of formatting flags / settings.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      
      <element name="renderOptionalAsKeywordForTableAliases" type="jooq-runtime:RenderOptionalKeyword" minOccurs="0" maxOccurs="1" default="DEFAULT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether to render the optional <code>AS</code> keyword in table aliases, if it is optional in the output dialect. This is ignored if the keyword is not supported (e.g. in Oracle)]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      
      <element name="renderOptionalAsKeywordForFieldAliases" type="jooq-runtime:RenderOptionalKeyword" minOccurs="0" maxOccurs="1" default="DEFAULT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether to render the optional <code>AS</code> keyword in table aliases, if it is optional in the output dialect.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      
      <element name="renderOptionalInnerKeyword" type="jooq-runtime:RenderOptionalKeyword" minOccurs="0" maxOccurs="1" default="DEFAULT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether to render the optional <code>INNER</code> keyword in <code>INNER JOIN</code>, if it is optional in the output dialect.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      
      <element name="renderOptionalOuterKeyword" type="jooq-runtime:RenderOptionalKeyword" minOccurs="0" maxOccurs="1" default="DEFAULT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether to render the optional <code>OUTER</code> keyword in <code>OUTER JOIN</code>, if it is optional in the output dialect.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="renderScalarSubqueriesForStoredFunctions" type="boolean" minOccurs="0" maxOccurs="1" default="false">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether stored function calls should be wrapped in scalar subqueries.
<p>
Oracle 11g (and potentially, other databases too) implements scalar subquery caching. With this flag
set to true, users can automatically profit from this feature in all SQL statements.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="renderOrderByRownumberForEmulatedPagination" type="boolean" minOccurs="0" maxOccurs="1" default="true">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether an additional <code>ORDER BY rn</code> clause should be rendered on emulated paginated queries.
<p>
Older databases did not support OFFSET .. FETCH pagination, so jOOQ emulates it using derived
tables and <code>ROWNUM</code> (Oracle 11g and older) or <code>ROW_NUMBER()</code> (e.g. DB2, 
SQL Server, etc.) filtering. While these subqueries are ordered, the ordering is not 
<em>guaranteed</em> to be stable in the outer most queries. It may be stable (and e.g. in Oracle, 
it mostly is, if queries are not parallel, or joined to other queries, etc.), so the excess 
<code>ORDER BY</code> clause may add some additional performance overhead. This setting forces 
jOOQ to not generate the additional <code>ORDER BY</code> clause.
<p>
For details, see <a href="https://github.com/jOOQ/jOOQ/issues/7609">https://github.com/jOOQ/jOOQ/issues/7609</a>.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      
      <element name="renderOutputForSQLServerReturningClause" type="boolean" minOccurs="0" maxOccurs="1" default="true">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether the jOOQ <code>RETURNING</code> clause should map to SQL Server's <code>OUTPUT</code> clause.
<p>
SQL Server supports an <code>OUTPUT</code> clause in most DML statements, whose behaviour
is almost identical to <code>RETURNING</code> in Firebird, Oracle, PostgreSQL. Users who
want to prevent jOOQ from rendering this <code>OUTPUT</code> clause can deactivate this flag
to revert to jOOQ calling {@code java.sql.Statement#getGeneratedKeys()} instead, which
is only supported for single row inserts.
<p>
This <code>OUTPUT</code> clause does not support fetching trigger generated values. In order
to fetch trigger generated values, {@link #fetchTriggerValuesAfterSQLServerOutput} needs to
be enabled as well.
<p>
For details, see <a href="https://github.com/jOOQ/jOOQ/issues/4498">https://github.com/jOOQ/jOOQ/issues/4498</a>.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      
      <element name="renderParenthesisAroundSetOperationQueries" type="boolean" minOccurs="0" maxOccurs="1" default="false">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether queries combined with set operators (e.g. UNION and UNION ALL) should always be surrounded by a parenthesis pair.
<p>
By default (i.e. when this setting is set to <code>false</code> jOOQ will only render parenthesis pairs around queries combined with set operators when required.
This is for example the case when set operators are nested, when non-associative operators like EXCEPT are used, or when the queries are rendered as derived tables.
<p>
When this setting is set to <code>true</code> the queries combined with set operators will always be surrounded by a parenthesis pair.
<p>
For details, see <a href="https://github.com/jOOQ/jOOQ/issues/3676">https://github.com/jOOQ/jOOQ/issues/3676</a> and <a href="https://github.com/jOOQ/jOOQ/issues/9751">https://github.com/jOOQ/jOOQ/issues/9751</a>.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      
      <element name="fetchTriggerValuesAfterSQLServerOutput" type="boolean" minOccurs="0" maxOccurs="1" default="true">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Fetch trigger values after SQL Server <code>OUTPUT</code> clause.
<p>
SQL Server <code>OUTPUT</code> statements do not support fetching trigger generated values.
This is a limitation of the {@link #renderOutputForSQLServerReturningClause}. An additional
<code>MERGE</code> statement can run a second query if (and only if) the primary key has been
included in the <code>OUTPUT</code> clause.
<p>
For details, see <a href="https://github.com/jOOQ/jOOQ/issues/4498">https://github.com/jOOQ/jOOQ/issues/4498</a>.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      
      <element name="transformAnsiJoinToTableLists" type="boolean" minOccurs="0" maxOccurs="1" default="false">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Transform ANSI join to table lists if possible
<p>
Historically, prior to ANSI join syntax, joins were implemented by listing tables in 
the FROM clause and providing join predicates in the WHERE clause, possibly using vendor specific
operators like <code>(+)</code> (Oracle, DB2) or <code>*=</code> (SQL Server) for outer join
support. For backwards compatibility with older RDBMS versions, ANSI joins in jOOQ code may be
converted to equivalent table lists in generated SQL using this flag.
<p>
This flag has a limited implementation that supports inner joins (in most cases) and outer joins
(only for simple comparison predicates).
<p>
This feature is available in the commercial distribution only.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      
      <element name="transformTableListsToAnsiJoin" type="boolean" minOccurs="0" maxOccurs="1" default="false">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Transform table lists to ANSI join if possible
<p>
(Very) historically, prior to ANSI join syntax, joins were implemented by listing tables in 
the FROM clause and providing join predicates in the WHERE clause, possibly using vendor specific
operators like <code>(+)</code> (Oracle, DB2) or <code>*=</code> (SQL Server) for outer join
support. Migrating such join syntax is tedious. The jOOQ parser can parse the old syntax and
this flag enables the transformation to ANSI join syntax.
<p>
This flag has not been implemented yet!
<p>
This feature is available in the commercial distribution only.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="backslashEscaping" type="jooq-runtime:BackslashEscaping" minOccurs="0" maxOccurs="1" default="DEFAULT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether string literals should be escaped with backslash.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="paramType" type="jooq-runtime:ParamType" minOccurs="0" maxOccurs="1" default="INDEXED">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Specify how bind variables are to be rendered.
<p>
Possibilities include:

- question marks
- named parameters
- named or inlined parameters
- inlined parameters

This value is overridden by statementType == STATIC_STATEMENT, in
case of which, this defaults to INLINED]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="paramCastMode" type="jooq-runtime:ParamCastMode" minOccurs="0" maxOccurs="1" default="DEFAULT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether rendered bind values should be cast to their respective type.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="statementType" type="jooq-runtime:StatementType" minOccurs="0" maxOccurs="1" default="PREPARED_STATEMENT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The type of statement that is to be executed.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      
      <element name="inlineThreshold" type="int" minOccurs="0" maxOccurs="1" default="0">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The maximum number of allowed bind variables before inlining all values where <code>0</code> uses the dialect defaults: <ul>
<li>{@link org.jooq.SQLDialect#ACCESS} : 768</li>
<li>{@link org.jooq.SQLDialect#ASE} : 2000</li>
<li>{@link org.jooq.SQLDialect#INGRES} : 1024</li>
<li>{@link org.jooq.SQLDialect#ORACLE} : 32767</li>
<li>{@link org.jooq.SQLDialect#POSTGRES} : 32767</li>
<li>{@link org.jooq.SQLDialect#SQLITE} : 999</li>
<li>{@link org.jooq.SQLDialect#SQLSERVER} : 2100</li>
</ul>]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="transactionListenerStartInvocationOrder" type="jooq-runtime:InvocationOrder" minOccurs="0" maxOccurs="1" default="DEFAULT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The order of invocation for [action]start() methods registered {@link org.jooq.TransactionListener}s.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="transactionListenerEndInvocationOrder" type="jooq-runtime:InvocationOrder" minOccurs="0" maxOccurs="1" default="DEFAULT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The order of invocation for [action]end() methods registered {@link org.jooq.TransactionListener}s.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="migrationListenerStartInvocationOrder" type="jooq-runtime:InvocationOrder" minOccurs="0" maxOccurs="1" default="DEFAULT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The order of invocation for [action]start() methods registered {@link org.jooq.MigrationListener}s.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="migrationListenerEndInvocationOrder" type="jooq-runtime:InvocationOrder" minOccurs="0" maxOccurs="1" default="DEFAULT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The order of invocation for [action]end() methods registered {@link org.jooq.MigrationListener}s.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="visitListenerStartInvocationOrder" type="jooq-runtime:InvocationOrder" minOccurs="0" maxOccurs="1" default="DEFAULT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The order of invocation for [action]start() methods registered {@link org.jooq.VisitListener}s.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="visitListenerEndInvocationOrder" type="jooq-runtime:InvocationOrder" minOccurs="0" maxOccurs="1" default="DEFAULT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The order of invocation for [action]end() methods registered {@link org.jooq.VisitListener}s.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="recordListenerStartInvocationOrder" type="jooq-runtime:InvocationOrder" minOccurs="0" maxOccurs="1" default="DEFAULT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The order of invocation for [action]start() methods registered {@link org.jooq.RecordListener}s.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="recordListenerEndInvocationOrder" type="jooq-runtime:InvocationOrder" minOccurs="0" maxOccurs="1" default="DEFAULT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The order of invocation for [action]end() methods registered {@link org.jooq.RecordListener}s.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="executeListenerStartInvocationOrder" type="jooq-runtime:InvocationOrder" minOccurs="0" maxOccurs="1" default="DEFAULT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The order of invocation for [action]start() methods registered {@link org.jooq.ExecuteListener}s.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="executeListenerEndInvocationOrder" type="jooq-runtime:InvocationOrder" minOccurs="0" maxOccurs="1" default="DEFAULT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The order of invocation for [action]end() methods registered {@link org.jooq.ExecuteListener}s.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="executeLogging" type="boolean" minOccurs="0" maxOccurs="1" default="true">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[When set to true, this will add jOOQ's default logging ExecuteListeners.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="updateRecordVersion" type="boolean" minOccurs="0" maxOccurs="1" default="true">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether store(), insert(), and update() methods should update the record version prior to the operation, for use with {@link #executeWithOptimisticLocking}.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="updateRecordTimestamp" type="boolean" minOccurs="0" maxOccurs="1" default="true">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether store(), insert(), and update() methods should update the record timestamp prior to the operation, for use with {@link #executeWithOptimisticLocking}.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="executeWithOptimisticLocking" type="boolean" minOccurs="0" maxOccurs="1" default="false">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether store() and delete() methods should be executed with optimistic locking.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="executeWithOptimisticLockingExcludeUnversioned" type="boolean" minOccurs="0" maxOccurs="1" default="false">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether store() and delete() methods should be executed with optimistic locking also on "unversioned" tables,
i.e. on tables that do not have a version and/or timestamp column.
<p>
This flag has no effect when "executeWithOptimisticLocking" is turned off.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="attachRecords" type="boolean" minOccurs="0" maxOccurs="1" default="true">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether fetched records should be attached to the fetching configuration.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="updatablePrimaryKeys" type="boolean" minOccurs="0" maxOccurs="1" default="false">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether primary key values are deemed to be "updatable" in jOOQ.
<p>
Setting this to "true" will allow for updating primary key values through
UpdatableRecord.store() and UpdatableRecord.update().]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="reflectionCaching" type="boolean" minOccurs="0" maxOccurs="1" default="true">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether reflection information should be cached in the configuration.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="cacheRecordMappers" type="boolean" minOccurs="0" maxOccurs="1" default="true">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether record mappers should be cached in the configuration.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="throwExceptions" type="jooq-runtime:ThrowExceptions" minOccurs="0" maxOccurs="1" default="THROW_ALL">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[A strategy defining how exceptions from the database / JDBC driver should be propagated]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="fetchWarnings" type="boolean" minOccurs="0" maxOccurs="1" default="true">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether warnings should be fetched after each query execution.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="fetchServerOutputSize" type="int" minOccurs="0" maxOccurs="1" default="0">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether server output should be fetched after each query execution.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="returnIdentityOnUpdatableRecord" type="boolean" minOccurs="0" maxOccurs="1" default="true">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether calls to store(), insert() and update() should return the identity column.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="returnAllOnUpdatableRecord" type="boolean" minOccurs="0" maxOccurs="1" default="false">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether calls to store(), insert() and update() should return all columns, not just identity columns.
<p>
Do note that only few databases support this feature. It is supported only in case the INSERT's or UPDATE's
RETURNING clause is fully supported, also for non-IDENTITY columns.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="returnRecordToPojo" type="boolean" minOccurs="0" maxOccurs="1" default="true">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether calls to store(), insert(), update(), and delete() that are called on an UpdatableRecord
that is created from a POJO (e.g. in a DAO) should return all Record values to the POJO, including
IDENTITY values, and if <returnAllOnUpdatableRecord/> is active, also other values.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="mapJPAAnnotations" type="boolean" minOccurs="0" maxOccurs="1" default="true">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether JPA annotations should be considered by the DefaultRecordMapper.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="mapConstructorParameterNames" type="boolean" minOccurs="0" maxOccurs="1" default="false">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether constructor parameter names obtained via reflection in Java 8+ should be considered by the DefaultRecordMapper. This flag has no effect in Java 6 or 7.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="mapConstructorParameterNamesInKotlin" type="boolean" minOccurs="0" maxOccurs="1" default="true">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether constructor parameter names obtained via reflection in Kotlin should be considered by the DefaultRecordMapper. This flag has no effect in Java.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="queryPoolable" type="jooq-runtime:QueryPoolable" minOccurs="0" maxOccurs="1" default="DEFAULT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The default JDBC poolable property that should be applied to all
jOOQ queries, for which no specific poolable flag was specified.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="queryTimeout" type="int" minOccurs="0" maxOccurs="1" default="0">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The default JDBC queryTimeout property that should be applied to all
jOOQ queries, for which no specific queryTimeout was specified.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="maxRows" type="int" minOccurs="0" maxOccurs="1" default="0">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The default JDBC maxRows property that should be applied to all
jOOQ queries, for which no specific maxRows value was specified.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="fetchSize" type="int" minOccurs="0" maxOccurs="1" default="0">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The default JDBC fetchSize property that should be applied to all
jOOQ queries, for which no specific fetchSize value was specified.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="debugInfoOnStackTrace" type="boolean" minOccurs="0" maxOccurs="1" default="true">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[[#5570] Whether exception stack traces should be enhanced with additional debug information.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="inListPadding" type="boolean" minOccurs="0" maxOccurs="1" default="false">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[[#5600] Whether IN lists in IN predicates should be padded to powers of inListPadBase (default 2).]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="inListPadBase" type="int" minOccurs="0" maxOccurs="1" default="2">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[[#7095] The base to use to calculate the powers of when applying in list padding.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="delimiter" type="string" minOccurs="0" maxOccurs="1" default=";">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[[#5826] The delimiter character to be used to delimit statements in batches.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="emulateOnDuplicateKeyUpdateOnPrimaryKeyOnly" type="boolean" minOccurs="0" maxOccurs="1" default="false">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[[#6462] Use only the primary key to emulate MySQL's INSERT .. ON DUPLICATE KEY UPDATE statement. In MySQL, the statement considers all unique keys for duplicates to apply an update rather than an insert. Earlier versions of jOOQ considered only the PRIMARY KEY. This flag can be turned on to maintain backwards compatibility.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="executeUpdateWithoutWhere" type="jooq-runtime:ExecuteWithoutWhere" minOccurs="0" maxOccurs="1" default="LOG_DEBUG">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[[#6771] Specifies whether UPDATE statements are allowed to be executed lacking a WHERE clause. This has no effect on rendering the statements SQL string.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="executeDeleteWithoutWhere" type="jooq-runtime:ExecuteWithoutWhere" minOccurs="0" maxOccurs="1" default="LOG_DEBUG">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[[#6771] Specifies whether DELETE statements are allowed to be executed lacking a WHERE clause. This has no effect on rendering the statements SQL string.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      
      <element name="interpreterDialect" type="string" minOccurs="0" maxOccurs="1" default="DEFAULT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[[#7337] The dialect that should be used to interpret SQL DDL statements. {@link SQLDialect#DEFAULT} means that jOOQ interprets the SQL itself. Any other dialect (if supported) will be interpreted on an actual JDBC connection.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="interpreterNameLookupCaseSensitivity" type="jooq-runtime:InterpreterNameLookupCaseSensitivity" minOccurs="0" maxOccurs="1" default="DEFAULT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[[#9633] The case sensitivity of identifiers used when interpreting SQL DDL statements.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
            
      <element name="interpreterLocale" type="string" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The Locale to be used with any interpreter locale dependent logic, defaulting to {@link #getLocale()}.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      
      <element name="interpreterSearchPath" type="jooq-runtime:InterpreterSearchSchemata" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[[#9677] The search path to be used for unqualified table lookups by the interpreter.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
            
      <element name="interpreterDelayForeignKeyDeclarations" type="boolean" minOccurs="0" maxOccurs="1" default="false">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Using this flag, the interpreter will be able to delay the addition of foreign key declarations until the end of the interpretation run.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      
      <element name="migrationAllowsUndo" type="boolean" minOccurs="0" maxOccurs="1" default="false">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether migrations are allowed to be executed in inverse order.<p><strong>This is a potentially destructive feature, which should not be turned on in production</strong>. It is useful mostly to quickly switch between branches in a development environment. This feature is available only in commercial distributions.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      
      <element name="migrationRevertUntracked" type="boolean" minOccurs="0" maxOccurs="1" default="false">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether migrations revert any untracked changes in the schemas that are being migrated.<p><strong>This is a potentially destructive feature, which should not be turned on in production</strong>. It is useful mostly to quickly revert any elements created in a development environment. This feature is available only in commercial distributions.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      
      <element name="migrationAutoValidation" type="boolean" minOccurs="0" maxOccurs="1" default="true">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether a migration automatically runs a validation first.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      
      <element name="locale" type="string" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The Locale to be used with any locale dependent logic if there is not a more specific locale available. More specific locales include e.g. {@link #getRenderLocale()}, {@link #getParseLocale()}, or {@link #getInterpreterLocale()}.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="parseDialect" type="string" minOccurs="0" maxOccurs="1" default="DEFAULT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[[#7337] The input dialect that should be chosen to disambiguate ambiguous SQL syntax.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      
      <element name="parseLocale" type="string" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The Locale to be used with any parser locale dependent logic, defaulting to {@link #getLocale()}.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="parseNameCase" type="jooq-runtime:ParseNameCase" minOccurs="0" maxOccurs="1" default="DEFAULT">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[[#7337] The default name case for parsed identifiers.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="parseWithMetaLookups" type="jooq-runtime:ParseWithMetaLookups" minOccurs="0" maxOccurs="1" default="OFF">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[[#7163] Whether the parser should perform meta lookups in the Configuration's MetaProvider.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="parseSearchPath" type="jooq-runtime:ParseSearchSchemata" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[[#8616] The search path to be used for unqualified table lookups by the parser.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="parseSetCommands" type="boolean" minOccurs="0" maxOccurs="1" default="false">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[[#9780] Whether commands of the type <code>SET key = value</code> should be parsed rather than ignored.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="parseUnsupportedSyntax" type="jooq-runtime:ParseUnsupportedSyntax" minOccurs="0" maxOccurs="1" default="IGNORE">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[[#5917] Whether the parser should accept unsupported (but known) syntax.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="parseUnknownFunctions" type="jooq-runtime:ParseUnknownFunctions" minOccurs="0" maxOccurs="1" default="FAIL">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[[#7344] Whether the parser should accept unknown functions.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="parseIgnoreComments" type="boolean" minOccurs="0" maxOccurs="1" default="false">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[[#8325] Whether the parser should ignore content between ignore comment tokens.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="parseIgnoreCommentStart" type="string" minOccurs="0" maxOccurs="1" default="[jooq ignore start]">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[[#8325] The ignore comment start token]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="parseIgnoreCommentStop" type="string" minOccurs="0" maxOccurs="1" default="[jooq ignore stop]">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[[#8325] The ignore comment stop token]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      
      <element name="applyWorkaroundFor7962" type="boolean" minOccurs="0" maxOccurs="1" default="true">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[[#7963] Apply workaround for ORA-04043 when inserting into Oracle tables with qualified, quoted identifiers, and fetching generated keys]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
    </all>
  </complexType>

  <complexType name="ParseSearchSchemata">
    <sequence>
      <element name="schema" type="jooq-runtime:ParseSearchSchema" minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
  </complexType>

  <complexType name="ParseSearchSchema">
    <annotation><appinfo><jxb:class><jxb:javadoc><![CDATA[A schema that is on the search path.]]></jxb:javadoc></jxb:class></appinfo></annotation>
    <all>
      <element name="catalog" type="string" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The catalog qualifier of the schema, if applicable.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      <element name="schema" type="string" minOccurs="1" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The schema qualifier whose elements can be found from the search path.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
    </all>
  </complexType>

  <complexType name="InterpreterSearchSchemata">
    <sequence>
      <element name="schema" type="jooq-runtime:InterpreterSearchSchema" minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
  </complexType>

  <complexType name="InterpreterSearchSchema">
    <annotation><appinfo><jxb:class><jxb:javadoc><![CDATA[A schema that is on the search path.]]></jxb:javadoc></jxb:class></appinfo></annotation>
    <all>
      <element name="catalog" type="string" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The catalog qualifier of the schema, if applicable.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
      <element name="schema" type="string" minOccurs="1" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The schema qualifier whose elements can be found from the search path.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
    </all>
  </complexType>

  <complexType name="RenderMapping">
    <annotation><appinfo><jxb:class><jxb:javadoc><![CDATA[The runtime schema and table mapping.]]></jxb:javadoc></jxb:class></appinfo></annotation>

    <all>
      <element name="defaultCatalog" type="string" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The default catalog as defined in {@link org.jooq.Catalog#getName()}.
<p>
This catalog will be omitted in rendered SQL.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="defaultSchema" type="string" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The default schema as defined in {@link org.jooq.Schema#getName()}.
<p>
This schema will be omitted in rendered SQL.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="catalogs" type="jooq-runtime:MappedCatalogs" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The mapped catalogs configuration.
<p>
Either &lt;catalogs/&gt; or &lt;schemata/&gt; must be provided]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="schemata" type="jooq-runtime:MappedSchemata" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The mapped schemata configuration.
<p>
Either &lt;catalogs/&gt; or &lt;schemata/&gt; must be provided]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
    </all>
  </complexType>

  <complexType name="MappedCatalogs">
    <sequence>
      <element name="catalog" type="jooq-runtime:MappedCatalog" minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
  </complexType>

  <complexType name="MappedCatalog">
    <annotation><appinfo><jxb:class><jxb:javadoc><![CDATA[A catalog mapping configuration.]]></jxb:javadoc></jxb:class></appinfo></annotation>

    <all>
      <element name="input" type="string" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The input catalog name as defined in {@link org.jooq.Catalog#getName()}
<p>
Either &lt;input/&gt; or &lt;inputExpression/&gt; must be provided]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="inputExpression" type="string" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[A regular expression matching the input catalog name as defined in {@link org.jooq.Catalog#getName()}
<p>
Either &lt;input/&gt; or &lt;inputExpression/&gt; must be provided]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="output" type="string" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The output catalog as it will be rendered in SQL.
<ul>
<li>When this is omitted, you can still apply schema and table mapping.</li>
<li>When &lt;input/&gt; is provided, &lt;output/&gt; is a constant value.</li>
<li>When &lt;inputExpression/&gt; is provided, &lt;output/&gt; is a replacement expression</li>
</ul>]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="schemata" type="jooq-runtime:MappedSchemata" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Configure schema mapping for runtime table rewriting in generated SQL.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
    </all>
  </complexType>

  <complexType name="MappedSchemata">
    <sequence>
      <element name="schema" type="jooq-runtime:MappedSchema" minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
  </complexType>

  <complexType name="MappedSchema">
    <annotation><appinfo><jxb:class><jxb:javadoc><![CDATA[A schema mapping configuration.]]></jxb:javadoc></jxb:class></appinfo></annotation>

    <all>
      <element name="input" type="string" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The input schema name as defined in {@link org.jooq.Schema#getName()}
<p>
Either &lt;input/&gt; or &lt;inputExpression/&gt; must be provided]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="inputExpression" type="string" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[A regular expression matching the input schema name as defined in {@link org.jooq.Schema#getName()}
<p>
Either &lt;input/&gt; or &lt;inputExpression/&gt; must be provided]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="output" type="string" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The output schema as it will be rendered in SQL.
<ul>
<li>When this is omitted, you can still apply table mapping.</li>
<li>When &lt;input/&gt; is provided, &lt;output/&gt; is a constant value.</li>
<li>When &lt;inputExpression/&gt; is provided, &lt;output/&gt; is a replacement expression</li>
</ul>]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="tables" type="jooq-runtime:MappedTables" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Configure table mapping for runtime table rewriting in generated SQL.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
    </all>
  </complexType>

  <complexType name="MappedTables">
    <sequence>
      <element name="table" type="jooq-runtime:MappedTable" minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
  </complexType>

  <complexType name="MappedTable">
    <annotation><appinfo><jxb:class><jxb:javadoc><![CDATA[A table mapping configuration.]]></jxb:javadoc></jxb:class></appinfo></annotation>

    <all>

      <element name="input" type="string" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The input table as defined in {@link org.jooq.Table#getName()}
<p>
Either &lt;input/&gt; or &lt;inputExpression/&gt; must be provided.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="inputExpression" type="string" minOccurs="0" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[A regular expression matching the input table name as defined in {@link org.jooq.Table#getName()}
<p>
Either &lt;input/&gt; or &lt;inputExpression/&gt; must be provided]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="output" type="string" minOccurs="1" maxOccurs="1">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The output table as it will be rendered in SQL.
<ul>
<li>When &lt;input/&gt; is provided, &lt;output/&gt; is a constant value.</li>
<li>When &lt;inputExpression/&gt; is provided, &lt;output/&gt; is a replacement expression.</li>
</ul>]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
    </all>
  </complexType>

  <simpleType name="ParamType">
    <restriction base="string">

      <!-- Execute statements with indexed parameters, the way JDBC expects them -->
      <enumeration value="INDEXED"/>

      <!-- Execute statements with indexed parameters, forcing explicit inlined and named parameters to be indexed as well -->
      <enumeration value="FORCE_INDEXED"/>

      <!-- Execute statements with named parameters -->
      <enumeration value="NAMED"/>

      <!-- Execute statements with named parameters, if a name is given, or inlined parameters otherwise -->
      <enumeration value="NAMED_OR_INLINED"/>

      <!-- Execute statements with inlined parameters -->
      <enumeration value="INLINED"/>
    </restriction>
  </simpleType>

  <simpleType name="ParamCastMode">
    <restriction base="string">

      <!-- Bind values are always cast to their respective type. -->
      <enumeration value="ALWAYS"/>

      <!-- Bind values are cast to their respective type when needed.

           Some databases are not able to delay bind value type inference until the execution of a statement.
           They will either reject the value of unknown type, or assume a possibly inappropriate type. In these
           cases, jOOQ will generate an explicit cast(? as datatype) expression around the bind value to help
           the query parser do its job. The exact behaviour of this mode is undefined and subject to change. -->
      <enumeration value="DEFAULT"/>

      <!-- Bind values are never cast to their respective type. -->
      <enumeration value="NEVER"/>
    </restriction>
  </simpleType>

  <simpleType name="StatementType">
    <restriction base="string">

      <!-- Execute statements with inlined bind values, avoiding JDBC's PreparedStatements -->
      <enumeration value="STATIC_STATEMENT"/>

      <!-- Execute statements with bind values, using JDBC's PreparedStatements -->
      <enumeration value="PREPARED_STATEMENT"/>
    </restriction>
  </simpleType>
  
  <simpleType name="InvocationOrder">
    <restriction base="string">
    
      <!-- The first registered listener is invoked first -->
      <enumeration value="DEFAULT"/>
    
      <!-- The first registered listener is invoked last -->
      <enumeration value="REVERSE"/>
    </restriction>
  </simpleType>

  <simpleType name="RenderNameStyle">
    <annotation>
      <appinfo>
        <annox:annotateEnum>@java.lang.Deprecated</annox:annotateEnum>
      </appinfo>
    </annotation>
    <restriction base="string">

      <!-- Render object names quoted, as defined in the database. Use this
           to stay on the safe side with case-sensitivity and special
           characters. For instance:
           Oracle    : "SYS"."ALL_TAB_COLS"
           MySQL     : `information_schema`.`TABLES`
           SQL Server: [INFORMATION_SCHEMA].[TABLES] -->
      <enumeration value="QUOTED"/>

      <!-- Render object names, as defined in the database. For instance:
           Oracle    : SYS.ALL_TAB_COLS
           MySQL     : information_schema.TABLES
           SQL Server: INFORMATION_SCHEMA.TABLES -->
      <enumeration value="AS_IS"/>

      <!-- Force rendering object names in lower case. For instance:
           Oracle    : sys.all_tab_cols
           MySQL     : information_schema.tables
           SQL Server: information_schema.tables -->
      <enumeration value="LOWER"/>

      <!-- Force rendering object names in upper case. For instance:
           Oracle    : SYS.ALL_TAB_COLS
           MySQL     : INFORMATION_SCHEMA.TABLES
           SQL Server: INFORMATION_SCHEMA.TABLES -->
      <enumeration value="UPPER"/>
    </restriction>
  </simpleType>

  <simpleType name="RenderQuotedNames">
    <restriction base="string">

      <!-- Always render object names quoted, as defined in the database.
           Use this to stay on the safe side with case-sensitivity, special
           characters, and keywords. For instance:
           Oracle    : "SYS"."ALL_TAB_COLS"
           MySQL     : `information_schema`.`TABLES`
           SQL Server: [INFORMATION_SCHEMA].[TABLES] -->
      <enumeration value="ALWAYS"/>
      
      <!-- Render object names quoted if they are constructed using DSL.quotedName() or DSL.name() -->
      <enumeration value="EXPLICIT_DEFAULT_QUOTED"/>
      
      <!-- Render object names quoted if they are constructed using DSL.quotedName() -->
      <enumeration value="EXPLICIT_DEFAULT_UNQUOTED"/>

      <!-- Never quote names -->
      <enumeration value="NEVER"/>
    </restriction>
  </simpleType>

  <simpleType name="RenderNameCase">
    <restriction base="string">

      <!-- Render object names, as defined in the database. For instance: schema.TABLE -->
      <enumeration value="AS_IS"/>

      <!-- Force rendering object names in lower case. For instance: schema."table" -->
      <enumeration value="LOWER"/>

      <!-- Force rendering object names in lower case, if unquoted. For instance schema."TABLE" -->
      <enumeration value="LOWER_IF_UNQUOTED"/>

      <!-- Force rendering object names in upper case. For instance: SCHEMA."TABLE" -->
      <enumeration value="UPPER"/>

      <!-- Force rendering object names in upper case, if unquoted. For instance SCHEMA."table" -->
      <enumeration value="UPPER_IF_UNQUOTED"/>
    </restriction>
  </simpleType>

  <simpleType name="RenderKeywordCase">
    <restriction base="string">

      <!-- Keywords are rendered "as is", i.e. mostly in lower case. For instance:
           select .. from .. where .. -->
      <enumeration value="AS_IS"/>

      <!-- Keywords are rendered in lower case. For instance:
           select .. from .. where .. -->
      <enumeration value="LOWER"/>

      <!-- Keywords are rendered in upper case. For instance:
           SELECT .. FROM .. WHERE .. -->
      <enumeration value="UPPER"/>

      <!-- Keywords are rendered in Pascal Case. For instance:
           Select .. From .. Where .. -->
      <enumeration value="PASCAL"/>
    </restriction>
  </simpleType>

  <simpleType name="RenderKeywordStyle">
    <annotation>
      <appinfo>
        <annox:annotateEnum>@java.lang.Deprecated</annox:annotateEnum>
      </appinfo>
    </annotation>
    <restriction base="string">

      <!-- Keywords are rendered "as is", i.e. mostly in lower case. For instance:
           select .. from .. where .. -->
      <enumeration value="AS_IS"/>

      <!-- Keywords are rendered in lower case. For instance:
           select .. from .. where .. -->
      <enumeration value="LOWER"/>

      <!-- Keywords are rendered in upper case. For instance:
           SELECT .. FROM .. WHERE .. -->
      <enumeration value="UPPER"/>

      <!-- Keywords are rendered in Pascal Case. For instance:
           Select .. From .. Where .. -->
      <enumeration value="PASCAL"/>
    </restriction>
  </simpleType>

  <complexType name="RenderFormatting">
    <annotation><appinfo><jxb:class><jxb:javadoc><![CDATA[All sorts of formatting flags / settings.]]></jxb:javadoc></jxb:class></appinfo></annotation>

    <all>
      <element name="newline" type="string" minOccurs="0" maxOccurs="1" default="&#10;">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The character to be used for line breaks.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="indentation" type="string" minOccurs="0" maxOccurs="1" default="  ">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The characters to be used for indentation.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>

      <element name="printMargin" type="int" minOccurs="0" maxOccurs="1" default="80">
        <annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The print margin after which (some) formatted elements will break lines.]]></jxb:javadoc></jxb:property></appinfo></annotation>
      </element>
    </all>
  </complexType>

  <simpleType name="BackslashEscaping">
    <restriction base="string">

      <!-- Use the JDBC connection's setting for backslash escaping. In most databases, this
           is the same as OFF. In MySQL and MariaDB, the actual setting is extracted.

           This is not yet implemented, as the JDBC connection might not be available to the renderer
      <enumeration value="AUTO"/>
        -->

      <!-- Use the database's most sensible default value for ON (MySQL, MariaDB) / OFF (all other databases) -->
      <enumeration value="DEFAULT"/>

      <!-- Always escape backslashes. -->
      <enumeration value="ON"/>

      <!-- Never escape backslashes. -->
      <enumeration value="OFF"/>
    </restriction>
  </simpleType>

  <simpleType name="ThrowExceptions">
    <restriction base="string">

      <!-- Collect all exceptions from a batch and throw them all together -->
      <enumeration value="THROW_ALL"/>

      <!-- Throw only the first exception from a batch -->
      <enumeration value="THROW_FIRST"/>

      <!-- Throw no exceptions, but collect them in ResultOrRows -->
      <enumeration value="THROW_NONE"/>
    </restriction>
  </simpleType>

  <simpleType name="ExecuteWithoutWhere">
    <restriction base="string">

      <!-- UPDATE and DELETE statements are allowed to lack a WHERE clause -->
      <enumeration value="IGNORE"/>

      <!-- UPDATE and DELETE statements are allowed to lack a WHERE clause, but this is logged as DEBUG level -->
      <enumeration value="LOG_DEBUG"/>

      <!-- UPDATE and DELETE statements are allowed to lack a WHERE clause, but this is logged as INFO level -->
      <enumeration value="LOG_INFO"/>

      <!-- UPDATE and DELETE statements are allowed to lack a WHERE clause, but this is logged as WARN level -->
      <enumeration value="LOG_WARN"/>

      <!-- UPDATE and DELETE statements are not allowed to lack a WHERE clause -->
      <enumeration value="THROW"/>
    </restriction>
  </simpleType>
  
  <simpleType name="RenderOptionalKeyword">
    <restriction base="string">
    
      <!-- Optional keywords will never be generated (does not affect mandatory keywords). -->
      <enumeration value="OFF"/>

      <!-- Optional keywords will always be generated (does not affect mandatory keywords). -->
      <enumeration value="ON"/>

      <!-- The default applies for optional keywords. -->
      <enumeration value="DEFAULT"/>
    </restriction>
  </simpleType>
  
  <simpleType name="InterpreterNameLookupCaseSensitivity">
    <restriction base="string">
    
      <!-- The default value depending on Settings.interpreterDialect -->
      <enumeration value="DEFAULT"/>
      
      <!-- Identifiers are always case sensitive -->
      <enumeration value="ALWAYS"/>
      
      <!-- Only quoted identifiers are case sensitive -->
      <enumeration value="WHEN_QUOTED"/>
      
      <!-- Identifiers are never case sensitive -->
      <enumeration value="NEVER"/>
    </restriction>
  </simpleType>

  <simpleType name="ParseNameCase">
    <restriction base="string">

      <!-- Parse object names, as defined in the database. For instance: schema.TABLE -->
      <enumeration value="AS_IS"/>

      <!-- Force parsing object names in lower case. For instance: schema."table" -->
      <enumeration value="LOWER"/>

      <!-- Force parsing object names in lower case, if unquoted. For instance schema."TABLE" -->
      <enumeration value="LOWER_IF_UNQUOTED"/>

      <!-- Force parsing object names in upper case. For instance: SCHEMA."TABLE" -->
      <enumeration value="UPPER"/>

      <!-- Force parsing object names in upper case, if unquoted. For instance SCHEMA."table" -->
      <enumeration value="UPPER_IF_UNQUOTED"/>
      
      <!-- Apply the parse dialect specific default behaviour -->
      <enumeration value="DEFAULT"></enumeration>
    </restriction>
  </simpleType>

  <simpleType name="ParseWithMetaLookups">
    <restriction base="string">

      <!-- Meta lookups are deactivated in parser -->
      <enumeration value="OFF"/>

      <!-- Meta lookups are active in parser, but don't throw exceptions on failure -->
      <enumeration value="IGNORE_ON_FAILURE"/>

      <!-- Meta lookups are active in parser and throw exceptions on failure -->
      <enumeration value="THROW_ON_FAILURE"/>
    </restriction>
  </simpleType>

  <simpleType name="ParseUnsupportedSyntax">
    <restriction base="string">

      <!-- Fail on syntax that is supported (known) by the parser, but not the jOOQ API -->
      <enumeration value="FAIL"/>

      <!-- Ignore syntax that is supported (known) by the parser, but not the jOOQ API -->
      <enumeration value="IGNORE"/>
    </restriction>
  </simpleType>

  <simpleType name="ParseUnknownFunctions">
    <restriction base="string">

      <!-- Functions have to be known by the parser, or by the catalog -->
      <enumeration value="FAIL"/>

      <!-- Unknown functions (parser or catalog) will be passed on as plain SQL -->
      <enumeration value="IGNORE"/>
    </restriction>
  </simpleType>
  
  <simpleType name="QueryPoolable">
    <restriction base="string">
    
      <!-- Statements are poolable -->
      <enumeration value="TRUE"/>
    
      <!-- Statements are not poolable -->
      <enumeration value="FALSE"/>
    
      <!-- Statements may be poolable, according to JDBC's default behaviour -->
      <enumeration value="DEFAULT"/>
    </restriction>
  </simpleType>
</schema>