text:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration>

    <!-- Configuration of the local database -->
    <localDatabase>
        <databaseFolder>local</databaseFolder>
        <lib>lib/h2-2.1.212.jar</lib>
        <driver>org.h2.Driver</driver>
        <urlPattern>jdbc:h2:%s</urlPattern>
        <localPKType>VARCHAR</localPKType>
        <localNPKType>NVARCHAR</localNPKType>
        <localPKLength>10000</localPKLength>
        <user></user>
        <password></password>
    </localDatabase>

    <!--
    nullColumnPlaceholder:

	For DBUnit flat XML files, null columns can carry a placeholder value
	which can later be replaced using a ReplacementDataSet.
	In Flat XML files the first row of a table defines the metadata. If a null
	column is omitted, none of the following rows can have this column! This is the
	default behaviour of Jailer.
	Thus, define a null placeholder and replace it with a null value when you load
	the data set with DBUnit.
    -->
	<!--
	<nullColumnPlaceholder>[NULL]</nullColumnPlaceholder>
	-->

	<!--  number of columns per import-filter-mapping-table -->
	<columnsPerIFMTable>8</columnsPerIFMTable>

    <!--
		If minimize-UPK is true, the UPK don't preserve order. This minimizes
		the size of the UPK.
	-->
	<doMinimizeUPK>false</doMinimizeUPK>

    <!-- HTML renderer -->
    <renderer>
        <maxDepth>0</maxDepth>
        <outputFolder>render</outputFolder>
    </renderer>

    <!-- additional SQL keywords -->
	<additionalSQLKeywords>sensitive, datetime</additionalSQLKeywords>

	<!-- IBM JDBC Connector -->
	<urlRewriteRule>
		<pattern>^jdbc:ibm:(.*)$</pattern>
		<replacement>jdbc:$1</replacement>
	</urlRewriteRule>

	<!-- other rules
	<urlRewriteRule>
		<pattern></pattern>
		<replacement></replacement>
	</urlRewriteRule>
	-->

	<!-- time in seconds waiting for an idle database connection to be tested if it is still valid -->
	<databaseConnectionInteractiveTimeout>240</databaseConnectionInteractiveTimeout>

	<!--
		Also include 'null's in the generated upsert statements.
		Useful if a column contains 'null', but its default value is non-null.
	<generateUpsertStatementsWithoutNulls>false</generateUpsertStatementsWithoutNulls>
	-->

    <!-- for Oracle -->
    <dbms>
        <id>ORACLE</id>
        <displayName>Oracle</displayName>
        <urlPattern>jdbc:oracle.*</urlPattern>
        <sqlDialect>
            <needsValuesKeywordForDeletes>false</needsValuesKeywordForDeletes>
            <supportsInClauseForDeletes>true</supportsInClauseForDeletes>
            <supportsMultiRowInserts>false</supportsMultiRowInserts>
            <upsertMode>MERGE</upsertMode>
        </sqlDialect>
        <jdbcProperties>
            <entry>
                <key>CatalogOptions</key>
                <value>0</value>
            </entry>
        </jdbcProperties>
        <statisticRenovator>
            <scriptFileName>script/oracle/gatherStatistics.sql</scriptFileName>
        </statisticRenovator>
        <stringLiteralEscapeSequences>
            <entry>
                <key>'</key>
                <value>''</value>
            </entry>
            <entry>
                <key>\n</key>
                <value>' || chr(10) || '</value>
            </entry>
            <entry>
                <key>\r</key>
                <value>' || chr(13) || '</value>
            </entry>
        </stringLiteralEscapeSequences>
        <tableProperties>NOLOGGING</tableProperties>
        <sessionTemporaryTableManager>
            <createIndexPrefix>CREATE INDEX </createIndexPrefix>
            <createIndexSuffix></createIndexSuffix>
            <createTablePrefix>CREATE GLOBAL TEMPORARY TABLE </createTablePrefix>
            <createTableSuffix>ON COMMIT PRESERVE ROWS</createTableSuffix>
            <dropTablePrefix>DROP TABLE </dropTablePrefix>
            <indexTablePrefix></indexTablePrefix>
            <needsExclusiveAccess>true</needsExclusiveAccess>
        </sessionTemporaryTableManager>
        <identityInserts>false</identityInserts>
        <datePattern>'to_date('''yyyy-MM-dd''', ''YYYY-MM-DD'')'</datePattern>
        <timestampPattern>'to_timestamp('''yyyy-MM-dd HH.mm.ss'.${NANO}'', ''YYYY-MM-DD HH24.MI.SS.${NANOFORMAT}'')'</timestampPattern>
        <emptyBLOBValue>empty_blob()</emptyBLOBValue>
        <emptyCLOBValue>empty_clob()</emptyCLOBValue>
        <emptyNCLOBValue>empty_clob()</emptyNCLOBValue>
        <toBlob>to_blob(hextoraw('%s'))</toBlob>
        <toClob>to_clob('%s')</toClob>
        <toNClob>to_nclob('%s')</toNClob>
        <embeddedLobSizeLimit>3980</embeddedLobSizeLimit>
        <binaryPattern>hextoraw('%s')</binaryPattern>

        <!--  <avoidLeftJoin>true</avoidLeftJoin> -->
        <avoidLeftJoin>false</avoidLeftJoin>

        <limitTransactionSize>
        	<limit>30000</limit>
        	<additionalWhereCondition>rownum <= %1$s</additionalWhereCondition>
        </limitTransactionSize>

        <rowidName>ROWID</rowidName>
        <rowidType>ROWID</rowidType>
        <useInlineViewsInDataBrowser>false</useInlineViewsInDataBrowser>
        <defaultSchemaQuery>SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') FROM DUAL</defaultSchemaQuery>
        <estimatedRowCountQuery>SELECT TABLE_NAME, NUM_ROWS FROM ALL_TABLES WHERE OWNER = '%s'</estimatedRowCountQuery>
        <virtualColumnsQuery>SELECT TABLE_NAME, COLUMN_NAME FROM ALL_TAB_COLS WHERE OWNER = '${SCHEMA}' AND VIRTUAL_COLUMN = 'YES' AND NOT DATA_TYPE = 'XMLTYPE'</virtualColumnsQuery>
        <importedKeysQuery>SELECT null, c_dest.OWNER, c_dest.TABLE_NAME, c_dest.COLUMN_NAME, null, c_src.OWNER, c_src.TABLE_NAME, c_src.COLUMN_NAME, c_src.POSITION,        null, null, c_list.CONSTRAINT_NAME, c_list.R_CONSTRAINT_NAME, null FROM ALL_CONSTRAINTS c_list, ALL_CONS_COLUMNS c_src, ALL_CONS_COLUMNS c_dest WHERE c_list.CONSTRAINT_NAME   = c_src.CONSTRAINT_NAME  AND  c_list.OWNER = c_src.OWNER  AND  c_list.R_CONSTRAINT_NAME = c_dest.CONSTRAINT_NAME  AND  c_list.R_OWNER = c_dest.OWNER  AND  c_list.CONSTRAINT_TYPE = 'R'  AND  c_src.POSITION = c_dest.POSITION  AND  c_src.OWNER = '${SCHEMA}'  ORDER BY c_src.POSITION</importedKeysQuery>
        <primaryKeysQuery>SELECT null, c_src.OWNER, c_src.TABLE_NAME, c_src.COLUMN_NAME, c_src.POSITION, c_list.CONSTRAINT_NAME FROM ALL_CONSTRAINTS c_list, ALL_CONS_COLUMNS c_src WHERE c_list.CONSTRAINT_NAME   = c_src.CONSTRAINT_NAME  AND  c_list.OWNER             = c_src.OWNER  AND  c_list.CONSTRAINT_TYPE = 'P'  AND  c_list.CONSTRAINT_NAME not like 'BIN$%'  AND  c_src.OWNER      = '${SCHEMA}'  ORDER BY c_src.POSITION</primaryKeysQuery>
        <indexInfoQuery>SELECT null, c_src.OWNER, c_src.TABLE_NAME, 0, null, c_list.CONSTRAINT_NAME, null, null, c_src.COLUMN_NAME FROM ALL_CONSTRAINTS c_list, ALL_CONS_COLUMNS c_src WHERE c_list.CONSTRAINT_NAME   = c_src.CONSTRAINT_NAME  AND  c_list.OWNER             = c_src.OWNER  AND  c_list.CONSTRAINT_TYPE = 'U'  AND  c_list.CONSTRAINT_NAME not like 'BIN$%'  AND  c_src.OWNER      = '${SCHEMA}'</indexInfoQuery>
        <identifierQuoteString>"</identifierQuoteString>
        <ddlCall>begin ? := dbms_metadata.get_ddl('${type}', '${table}', '${schema}'); end;</ddlCall>
        <explainPrepare>explain plan set statement_id = '%2$s' for %1$s</explainPrepare>
        <explainQuery>select * from table(dbms_xplan.display(NULL, '%2$s'))</explainQuery>
        <explainCleanup></explainCleanup>
        <synonymTableQuery>select '"' || TABLE_OWNER || '"."' || TABLE_NAME || '"' from ALL_SYNONYMS where OWNER = '%1$s' and SYNONYM_NAME = '%2$s'</synonymTableQuery>
        <viewTextOrDDLQuery>select TEXT from all_views where OWNER = '%1$s' and VIEW_NAME = '%2$s'</viewTextOrDDLQuery>
        <functionSourceQuery>SELECT 'Source', text FROM all_source WHERE type = 'FUNCTION' and name = '%2$s' AND owner = '%1$s' ORDER BY line</functionSourceQuery>
        <procedureSourceQuery>SELECT 'Source', text FROM all_source WHERE type = 'PROCEDURE' and name = '%2$s' AND owner = '%1$s' ORDER BY line</procedureSourceQuery>
        <packageNamesQuery>SELECT OBJECT_NAME FROM ALL_OBJECTS WHERE OBJECT_TYPE = 'PACKAGE' AND OWNER = '%1$s'</packageNamesQuery>
        <packageSourceQuery>
SELECT titel, text from (
SELECT 'Specification' as titel, line, text FROM all_source where owner='%1$s' and type='PACKAGE' and name='%2$s'
union all
SELECT 'Body' as titel, line, text FROM all_source where owner='%1$s' and type='PACKAGE BODY' and name='%2$s'
) order by titel desc, line
        </packageSourceQuery>
        <constraintsQuery>
Select CNAME, TNAME, COLNAME, CTYPE, DETAIL From
(Select 'PK' CTYPE, CONSTRAINT_NAME CNAME, TABLE_NAME TNAME, COLUMN_NAME COLNAME, null DETAIL, POSITION POS, 1 TYPEPOS
	from
		user_constraints natural join user_cons_columns
	where
		CONSTRAINT_TYPE = 'P'
		and STATUS = 'ENABLED'
		and TABLE_NAME not like 'BIN$%%'
   		and OWNER = '%1$s'
union all
Select 'Check' CTYPE, CONSTRAINT_NAME CNAME, TABLE_NAME TNAME, COLUMN_NAME COLNAME, SEARCH_CONDITION DETAIL, POSITION POS, 3 TYPEPOS
	from
		user_constraints natural join user_cons_columns
	where
		CONSTRAINT_TYPE = 'C'
		and TABLE_NAME not like 'BIN$%%'
   		and OWNER = '%1$s'
union all
	(
	Select 'Unique' CTYPE, CNAME, TNAME, COLNAME, null DETAIL, POS, 2 TYPEPOS from
		(
		Select i.INDEX_NAME CNAME, i.TABLE_NAME TNAME, c.COLUMN_NAME COLNAME, c.COLUMN_POSITION POS
		from USER_INDEXES i, USER_IND_COLUMNS c
		where
		  i.TABLE_OWNER = '%1$s'
		  and i.UNIQUENESS = 'UNIQUE'
		  and i.TABLE_NAME not like 'BIN$%%'
		  and i.TABLE_NAME = c.TABLE_NAME
		  and i.INDEX_NAME = c.INDEX_NAME
		union
		Select con.CONSTRAINT_NAME CNAME, con.TABLE_NAME TNAME, cc.COLUMN_NAME COLNAME, cc.POSITION POS
		from USER_CONSTRAINTS con, USER_CONS_COLUMNS cc
		where
		  con.CONSTRAINT_TYPE in ('U')
		  and con.OWNER = '%1$s'
		  and con.STATUS = 'ENABLED'
		  and con.TABLE_NAME not like 'BIN$%%'
		  and con.TABLE_NAME = cc.TABLE_NAME
		  and con.CONSTRAINT_NAME = cc.CONSTRAINT_NAME
		)
	)
) order by TYPEPOS, CNAME, TNAME, POS, COLNAME
        </constraintsQuery>
        <objectRenderers>
       		<name>Triggers</name>
        	<iconURL>/net/sf/jailer/ui/resource/triggers.png</iconURL>
			<itemDescription>
	        	<iconURL>/net/sf/jailer/ui/resource/trigger.png</iconURL>
				<textQuery>select 'Body', TRIGGER_BODY from ALL_TRIGGERS where table_owner = '%1$s'</textQuery>
			</itemDescription>
			<listQuery>select TRIGGER_NAME, TRIGGER_TYPE, TRIGGERING_EVENT, TABLE_NAME, COLUMN_NAME, REFERENCING_NAMES, WHEN_CLAUSE, STATUS, DESCRIPTION, ACTION_TYPE, CROSSEDITION, BEFORE_STATEMENT, BEFORE_ROW, AFTER_ROW, AFTER_STATEMENT, INSTEAD_OF_ROW, FIRE_ONCE, APPLY_SERVER_ONLY from ALL_TRIGGERS where table_owner = '%1$s'</listQuery>
		</objectRenderers>
        <objectRenderers>
       		<name>Sequences</name>
        	<iconURL>/net/sf/jailer/ui/resource/sequences.png</iconURL>
			<itemDescription>
	        	<iconURL>/net/sf/jailer/ui/resource/sequence.png</iconURL>
			</itemDescription>
			<listQuery>select SEQUENCE_NAME,SEQUENCE_OWNER,MIN_VALUE,MAX_VALUE,INCREMENT_BY,CYCLE_FLAG,ORDER_FLAG,CACHE_SIZE,LAST_NUMBER from ALL_SEQUENCES where SEQUENCE_OWNER = '%1$s'</listQuery>
		</objectRenderers>
    </dbms>

    <!-- for MS SQL Server -->
    <dbms>
        <id>MSSQL</id>
        <displayName>MS SQL Server</displayName>
        <urlPattern>jdbc:sqlserver.*|jdbc:inetdae.*|jdbc:JTurbo.*|jdbc:weblogic:mssqlserver.*|jdbc:jtds:sqlserver.*|jdbc:JSQLConnect.*</urlPattern>
        <sqlDialect>
            <needsValuesKeywordForDeletes>false</needsValuesKeywordForDeletes>
            <supportsInClauseForDeletes>false</supportsInClauseForDeletes>
            <supportsMultiRowInserts>true</supportsMultiRowInserts>
            <upsertMode>DB2</upsertMode>
            <updateMode>MSSQL</updateMode>
        </sqlDialect>
        <statisticRenovator>
            <scriptFileName>script/mssql/update_statistics.sql</scriptFileName>
        </statisticRenovator>
        <stringLiteralEscapeSequences>
            <entry>
                <key>'</key>
                <value>''</value>
            </entry>
            <entry>
                <key>\n</key>
                <value>' + char(10) + '</value>
            </entry>
            <entry>
                <key>\r</key>
                <value>' + char(13) + '</value>
            </entry>
        </stringLiteralEscapeSequences>
        <sqlLimitSuffix>TOP %s</sqlLimitSuffix>

        <!-- NOLOGGING, TABLESPACE-spec., etc. -->
        <tableProperties></tableProperties>

		<sessionTemporaryTableManager>
			<dmlTableReferencePrefix>#</dmlTableReferencePrefix>
			<ddlTableReferencePrefix>#</ddlTableReferencePrefix>
			<createTablePrefix>CREATE TABLE </createTablePrefix>
			<createTableSuffix></createTableSuffix>
			<createIndexPrefix>CREATE INDEX </createIndexPrefix>
			<createIndexSuffix></createIndexSuffix>
			<indexTablePrefix></indexTablePrefix>
			<dropTablePrefix>DROP TABLE </dropTablePrefix>
            <needsExclusiveAccess>false</needsExclusiveAccess>
		</sessionTemporaryTableManager>

        <ncharPrefix>N</ncharPrefix>
        <exportBlocks>timestamp</exportBlocks>
        <exportBlocks>TIMESTAMP</exportBlocks>
        <typeReplacement>
            <entry>
                <key>timestamp</key>
                <value>datetime</value>
            </entry>
            <entry>
                <key>TIMESTAMP</key>
                <value>DATETIME</value>
            </entry>
        </typeReplacement>
        <clobTypesRE>varchar\(max\)|text\(.*\)</clobTypesRE>
        <nClobTypesRE>nvarchar\(max\)|xml\(.*\)|ntext\(.*\)</nClobTypesRE>
        <blobTypesRE>varbinary\(max\)|image\(.*\)</blobTypesRE>
        <identityInserts>true</identityInserts>
        <timestampPattern>'convert(datetime, '''yyyy-MM-dd'T'HH:mm:ss.SSS''', 126)'</timestampPattern>
        <timestampWithNanoTypeName>datetime2</timestampWithNanoTypeName>
        <timestampWithNanoPattern>'convert(datetime2, '''yyyy-MM-dd'T'HH:mm:ss'.${NANO}'', 126)'</timestampWithNanoPattern>
        <emptyBLOBValue>0x</emptyBLOBValue>
        <emptyCLOBValue>''</emptyCLOBValue>
        <emptyNCLOBValue>N''</emptyNCLOBValue>
        <toBlob>0x%s</toBlob>
        <toClob>'%s'</toClob>
        <toNClob>N'%s'</toNClob>
        <embeddedLobSizeLimit>7980</embeddedLobSizeLimit>
        <binaryPattern>0x%s</binaryPattern>
        <avoidLeftJoin>false</avoidLeftJoin>
        <supportsSchemasInIndexDefinitions>false</supportsSchemasInIndexDefinitions>
        <useInlineViewsInDataBrowser>true</useInlineViewsInDataBrowser>
        <limitTransactionSize>
        	<limit>30000</limit>
        	<afterSelect>TOP(%1$s)</afterSelect>
        </limitTransactionSize>
        <estimatedRowCountQuery>
SELECT tbl.name, p.rows
FROM sys.tables AS tbl
INNER JOIN sys.indexes AS idx ON idx.object_id = tbl.object_id and idx.index_id < 2
INNER JOIN sys.partitions AS p ON p.object_id=CAST(tbl.object_id AS int)
AND p.index_id=idx.index_id
WHERE SCHEMA_NAME(tbl.schema_id)='%s'
		</estimatedRowCountQuery>
		<defaultSchemaQuery>SELECT SCHEMA_NAME()</defaultSchemaQuery>
		<viewTextOrDDLQuery>SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = '%1$s' and TABLE_NAME = '%2$s'</viewTextOrDDLQuery>
        <virtualColumnsQuery>SELECT sysobjects.name AS TableName, syscolumns.name AS ColumnName FROM syscolumns JOIN sysobjects ON syscolumns.id = sysobjects.id AND sysobjects.xtype = 'U' WHERE syscolumns.iscomputed = 1</virtualColumnsQuery>
		<userDefinedColumnsQuery>SELECT distinct DOMAIN_NAME from INFORMATION_SCHEMA.COLUMNS WHERE DOMAIN_NAME is not null</userDefinedColumnsQuery>
<!--
		<importedKeysQuery>SELECT null, PKCU.TABLE_SCHEMA, PKCU.TABLE_NAME, PKCU.COLUMN_NAME, null, KCU.TABLE_SCHEMA, KCU.TABLE_NAME, KCU.COLUMN_NAME, KCU.ORDINAL_POSITION, null, null, RC.CONSTRAINT_NAME, RC.UNIQUE_CONSTRAINT_NAME, null FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU ON KCU.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG AND KCU.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA AND KCU.CONSTRAINT_NAME = RC.CONSTRAINT_NAME AND KCU.TABLE_CATALOG = RC.CONSTRAINT_CATALOG JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE PKCU ON PKCU.CONSTRAINT_CATALOG = RC.UNIQUE_CONSTRAINT_CATALOG AND PKCU.CONSTRAINT_SCHEMA = RC.UNIQUE_CONSTRAINT_SCHEMA AND PKCU.CONSTRAINT_NAME = RC.UNIQUE_CONSTRAINT_NAME AND PKCU.TABLE_CATALOG = RC.UNIQUE_CONSTRAINT_CATALOG AND PKCU.ORDINAL_POSITION = KCU.ORDINAL_POSITION WHERE PKCU.TABLE_SCHEMA = '${SCHEMA}' ORDER BY KCU.ORDINAL_POSITION</importedKeysQuery>
        <primaryKeysQuery>SELECT null, KCU.TABLE_SCHEMA, KCU.TABLE_NAME, KCU.COLUMN_NAME, KCU.ORDINAL_POSITION, C.CONSTRAINT_NAME   FROM   INFORMATION_SCHEMA.TABLE_CONSTRAINTS C   JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU     ON KCU.CONSTRAINT_CATALOG = C.CONSTRAINT_CATALOG        AND KCU.CONSTRAINT_SCHEMA = C.CONSTRAINT_SCHEMA   AND KCU.TABLE_NAME = C.TABLE_NAME    AND KCU.CONSTRAINT_NAME = C.CONSTRAINT_NAME   WHERE C.CONSTRAINT_TYPE = 'PRIMARY KEY'       AND  KCU.TABLE_SCHEMA = '${SCHEMA}'   ORDER BY KCU.ORDINAL_POSITION</primaryKeysQuery>
-->
        <nullableContraint>NULL</nullableContraint>
        <identifierQuoteString>"</identifierQuoteString>
        <explainPrepare>SET SHOWPLAN_ALL ON</explainPrepare>
        <explainQuery>%1$s</explainQuery>
        <explainCleanup>SET SHOWPLAN_ALL OFF</explainCleanup>
        <constraintsQuery>
Select
     CNAME,
     TNAME,
     COLNAME,
     CTYPE,
     DETAIL
From
     (
          Select
               KCU.CONSTRAINT_NAME CNAME,
               KCU.TABLE_NAME TNAME,
               KCU.COLUMN_NAME COLNAME,
               'PK' CTYPE,
               null DETAIL,
               KCU.ORDINAL_POSITION POS,
               1 TYPEPOS
          From
               INFORMATION_SCHEMA.TABLE_CONSTRAINTS C
               join INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU ON KCU.CONSTRAINT_CATALOG = C.CONSTRAINT_CATALOG
               AND KCU.CONSTRAINT_SCHEMA = C.CONSTRAINT_SCHEMA
               AND KCU.TABLE_NAME = C.TABLE_NAME
               AND KCU.CONSTRAINT_NAME = C.CONSTRAINT_NAME
          where
               C.CONSTRAINT_TYPE = 'PRIMARY KEY'
               AND KCU.TABLE_SCHEMA = '%1$s'
          union all
          Select
               C.CONSTRAINT_NAME CNAME,
               KCU.TABLE_NAME TNAME,
               KCU.COLUMN_NAME COLNAME,
               'Unique' CTYPE,
               null DETAIL,
               KCU.ORDINAL_POSITION POS,
               2 TYPEPOS
          From
               INFORMATION_SCHEMA.TABLE_CONSTRAINTS C
               join INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU ON KCU.CONSTRAINT_CATALOG = C.CONSTRAINT_CATALOG
               AND KCU.CONSTRAINT_SCHEMA = C.CONSTRAINT_SCHEMA
               AND KCU.TABLE_NAME = C.TABLE_NAME
               AND KCU.CONSTRAINT_NAME = C.CONSTRAINT_NAME
          where
               C.CONSTRAINT_TYPE = 'UNIQUE'
               AND KCU.TABLE_SCHEMA = '%1$s'
          union all
          SELECT
               i.name CNAME,
               OBJECT_NAME(i.[object_id]) TNAME,
               c.Name COLNAME,
               'Unique' CTYPE,
               null DETAIL,
               ic.key_ordinal POS,
               2 TYPEPOS
          FROM
               sys.indexes AS i
               INNER JOIN sys.index_columns AS ic ON i.[object_id] = ic.[object_id]
               AND i.index_id = ic.index_id
               INNER JOIN sys.columns c ON ic.column_id = c.column_id
               AND ic.[object_id] = c.[object_id]
               AND i.is_primary_key != 1
               AND i.is_unique = 1
               AND i.is_unique_constraint = 0
               AND i.is_disabled = 0
               AND i.is_hypothetical = 0
               AND OBJECT_SCHEMA_NAME(i.[object_id]) = '%1$s'
          union all
          Select
               C.CONSTRAINT_NAME CNAME,
               C.TABLE_NAME TNAME,
               CU.COLUMN_NAME COLNAME,
               'Check' CTYPE,
               CHECK_CLAUSE DETAIL,
               1 POS,
               3 TYPEPOS
          From
               INFORMATION_SCHEMA.CHECK_CONSTRAINTS CC
               join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CU on CU.CONSTRAINT_CATALOG = CC.CONSTRAINT_CATALOG
               and CU.CONSTRAINT_SCHEMA = CC.CONSTRAINT_SCHEMA
               and CU.CONSTRAINT_NAME = CC.CONSTRAINT_NAME
               join INFORMATION_SCHEMA.TABLE_CONSTRAINTS C on C.CONSTRAINT_CATALOG = CC.CONSTRAINT_CATALOG
               and C.CONSTRAINT_SCHEMA = CC.CONSTRAINT_SCHEMA
               and C.CONSTRAINT_NAME = CC.CONSTRAINT_NAME
               and C.CONSTRAINT_TYPE = 'CHECK'
               and C.TABLE_SCHEMA = '%1$s'
     ) pk
order by
     TYPEPOS,
     CNAME,
     TNAME,
     POS,
     COLNAME
		</constraintsQuery>
    </dbms>

    <!-- for MySQL -->
    <dbms>
        <id>MySQL</id>
        <displayName>MySQL</displayName>
        <urlPattern>jdbc:mysql.*</urlPattern>
        <sqlDialect>
            <needsValuesKeywordForDeletes>false</needsValuesKeywordForDeletes>
            <supportsInClauseForDeletes>true</supportsInClauseForDeletes>
            <supportsMultiRowInserts>true</supportsMultiRowInserts>
            <upsertMode>UNION_ALL</upsertMode>
            <updateMode>MYSQL</updateMode>
        </sqlDialect>
        <jdbcProperties>
            <entry>
                <key>noDatetimeStringSync</key>
                <value>true</value>
            </entry>
        </jdbcProperties>
		<fetchSize>-2147483648</fetchSize>  <!-- setFetchSize(Integer.MIN_VALUE) enables result set streaming -->
        <statisticRenovator>
            <scriptFileName>script/mysql/update_statistics.sql</scriptFileName>
        </statisticRenovator>
        <typeReplacement>
            <entry>
                <key>TINYINT</key>
                <value>INT</value>
            </entry>
            <entry>
                <key>SMALLINT</key>
                <value>INT</value>
            </entry>
            <entry>
                <key>MEDIUMINT</key>
                <value>INT</value>
            </entry>
            <entry>
                <key>INT</key>
                <value>BIGINT</value>
            </entry>
            <entry>
                <key>INTEGER</key>
                <value>BIGINT</value>
            </entry>
            <entry>
                <key>tinyint</key>
                <value>int</value>
            </entry>
            <entry>
                <key>smallint</key>
                <value>int</value>
            </entry>
            <entry>
                <key>mediumint</key>
                <value>int</value>
            </entry>
            <entry>
                <key>int</key>
                <value>bigint</value>
            </entry>
            <entry>
                <key>integer</key>
                <value>bigint</value>
            </entry>
        </typeReplacement>
        <experimentalTypeReplacement>
            <entry>
                <key>TIMESTAMP</key>
                <value>TIMESTAMP(6)</value>
            </entry>
            <entry>
                <key>timestamp</key>
                <value>timestamp(6)</value>
            </entry>
            <entry>
                <key>DATETIME</key>
                <value>DATETIME(6)</value>
            </entry>
            <entry>
                <key>datetime</key>
                <value>datetime(6)</value>
            </entry>
            <entry>
                <key>TIME</key>
                <value>TIME(6)</value>
            </entry>
            <entry>
                <key>time</key>
                <value>time(6)</value>
            </entry>
		</experimentalTypeReplacement>
        <stringLiteralEscapeSequences>
            <entry>
                <key>\0</key>
                <value>\0</value>
            </entry>
            <entry>
                <key>"</key>
                <value>\"</value>
            </entry>
            <entry>
                <key>\n</key>
                <value>\n</value>
            </entry>
            <entry>
                <key>\r</key>
                <value>\r</value>
            </entry>
            <entry>
                <key>\t</key>
                <value>\t</value>
            </entry>
            <entry>
                <key>\b</key>
                <value>\b</value>
            </entry>
            <entry>
                <key>\26</key>
                <value>\Z</value>
            </entry>
            <entry>
                <key>\\</key>
                <value>\\</value>
            </entry>
        </stringLiteralEscapeSequences>
        <sqlLimitSuffix>LIMIT 0, %s</sqlLimitSuffix>

        <!-- NOLOGGING, TABLESPACE-spec., etc. -->
        <tableProperties></tableProperties>

        <limitTransactionSize>
        	<limit>30000</limit>
        	<statementSuffix>limit %1$s</statementSuffix>
        </limitTransactionSize>

        <timestampPattern>'str_to_date('''yyyy-MM-dd HH:mm:ss'.${NANO}'', ''%Y-%m-%d %H:%i:%s.%f'')'</timestampPattern>
        <identityInserts>false</identityInserts>
        <emptyBLOBValue>BINARY ''</emptyBLOBValue>
        <emptyCLOBValue>''</emptyCLOBValue>
        <emptyNCLOBValue>''</emptyNCLOBValue>
        <toBlob>0x%s</toBlob>
        <toClob>'%s'</toClob>
        <toNClob>'%s'</toNClob>
        <embeddedLobSizeLimit>32000</embeddedLobSizeLimit>
        <binaryPattern>x'%s'</binaryPattern>
        <avoidLeftJoin>false</avoidLeftJoin>
        <useInlineViewsInDataBrowser>true</useInlineViewsInDataBrowser>
        <defaultSchemaQuery>Select DATABASE()</defaultSchemaQuery>
		<estimatedRowCountQuery>select TABLE_NAME, max(CARDINALITY) from INFORMATION_SCHEMA.STATISTICS where TABLE_SCHEMA = '%s' group by TABLE_NAME</estimatedRowCountQuery>
		<viewTextOrDDLQuery>SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = '%1$s' and TABLE_NAME = '%2$s'</viewTextOrDDLQuery>

		<virtualColumnsQuery>SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '${SCHEMA}' AND EXTRA LIKE '%VIRTUAL%'</virtualColumnsQuery>
<!--
        <importedKeysQuery>SELECT PKCU.TABLE_SCHEMA, null, PKCU.TABLE_NAME, PKCU.COLUMN_NAME, KCU.TABLE_SCHEMA, null, KCU.TABLE_NAME, KCU.COLUMN_NAME, KCU.ORDINAL_POSITION,        null, null, RC.CONSTRAINT_NAME, RC.UNIQUE_CONSTRAINT_NAME, null  FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC  JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU    ON KCU.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG        AND KCU.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA       AND KCU.CONSTRAINT_NAME = RC.CONSTRAINT_NAME  JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE PKCU    ON PKCU.CONSTRAINT_CATALOG = RC.UNIQUE_CONSTRAINT_CATALOG        AND PKCU.CONSTRAINT_SCHEMA = RC.UNIQUE_CONSTRAINT_SCHEMA       AND PKCU.CONSTRAINT_NAME = RC.UNIQUE_CONSTRAINT_NAME AND PKCU.TABLE_NAME = RC.REFERENCED_TABLE_NAME AND PKCU.ORDINAL_POSITION = KCU.ORDINAL_POSITION  WHERE PKCU.TABLE_SCHEMA = '${SCHEMA}'  ORDER BY KCU.ORDINAL_POSITION</importedKeysQuery>
        <primaryKeysQuery>SELECT null, KCU.TABLE_SCHEMA, KCU.TABLE_NAME, KCU.COLUMN_NAME, KCU.ORDINAL_POSITION, C.CONSTRAINT_NAME   FROM   INFORMATION_SCHEMA.TABLE_CONSTRAINTS C   JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU     ON KCU.CONSTRAINT_CATALOG = C.CONSTRAINT_CATALOG        AND KCU.CONSTRAINT_SCHEMA = C.CONSTRAINT_SCHEMA   AND KCU.TABLE_NAME = C.TABLE_NAME    AND KCU.CONSTRAINT_NAME = C.CONSTRAINT_NAME   WHERE C.CONSTRAINT_TYPE = 'PRIMARY KEY'       AND  KCU.TABLE_SCHEMA = '${SCHEMA}'   ORDER BY KCU.ORDINAL_POSITION</primaryKeysQuery>
-->
        <nullableContraint>NULL</nullableContraint>
        <identifierQuoteString>`</identifierQuoteString>
        <ddlQuery>SHOW CREATE ${type} `${schema}`.`${table}`</ddlQuery>
        <explainPrepare></explainPrepare>
        <explainQuery>explain %1$s</explainQuery>
        <explainCleanup></explainCleanup>
        <functionSourceQuery>SHOW CREATE FUNCTION %1$s.%2$s</functionSourceQuery>
        <procedureSourceQuery>SHOW CREATE PROCEDURE %1$s.%2$s</procedureSourceQuery>
        <constraintsQuery>
Select CNAME, TNAME, COLNAME, CTYPE, DETAIL From
(
	Select concat('pk_', KCU.TABLE_NAME) CNAME, KCU.TABLE_NAME TNAME, KCU.COLUMN_NAME COLNAME, 'PK' CTYPE, null DETAIL, KCU.ORDINAL_POSITION POS, 1 TYPEPOS
    From
        INFORMATION_SCHEMA.TABLE_CONSTRAINTS C
    join
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU
            ON KCU.CONSTRAINT_CATALOG = C.CONSTRAINT_CATALOG
            AND KCU.CONSTRAINT_SCHEMA = C.CONSTRAINT_SCHEMA
            AND KCU.TABLE_NAME = C.TABLE_NAME
            AND KCU.CONSTRAINT_NAME = C.CONSTRAINT_NAME
    where
        C.CONSTRAINT_TYPE = 'PRIMARY KEY'
        AND KCU.TABLE_SCHEMA = '%1$s'
union all
	Select C.CONSTRAINT_NAME CNAME, KCU.TABLE_NAME TNAME, KCU.COLUMN_NAME COLNAME, 'Unique' CTYPE, null DETAIL, KCU.ORDINAL_POSITION POS, 2 TYPEPOS
    From
        INFORMATION_SCHEMA.TABLE_CONSTRAINTS C
    join
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU
            ON KCU.CONSTRAINT_CATALOG = C.CONSTRAINT_CATALOG
            AND KCU.CONSTRAINT_SCHEMA = C.CONSTRAINT_SCHEMA
            AND KCU.TABLE_NAME = C.TABLE_NAME
            AND KCU.CONSTRAINT_NAME = C.CONSTRAINT_NAME
    where
        C.CONSTRAINT_TYPE = 'UNIQUE'
        AND KCU.TABLE_SCHEMA = '%1$s'
) pk order by TYPEPOS, CNAME, TNAME, POS, COLNAME
		</constraintsQuery>
        <objectRenderers>
       		<name>Triggers</name>
        	<iconURL>/net/sf/jailer/ui/resource/triggers.png</iconURL>
			<itemDescription>
	        	<iconURL>/net/sf/jailer/ui/resource/trigger.png</iconURL>
			</itemDescription>
			<listQuery>SHOW TRIGGERS FROM %1$s</listQuery>
		</objectRenderers>
    </dbms>

    <!-- for MariaDB -->
    <dbms>
        <id>MariaDB</id>
        <familyId>MySQL</familyId>
        <displayName>MariaDB</displayName>
        <urlPattern>jdbc:mariadb.*</urlPattern>
        <sqlDialect>
            <needsValuesKeywordForDeletes>false</needsValuesKeywordForDeletes>
            <supportsInClauseForDeletes>true</supportsInClauseForDeletes>
            <supportsMultiRowInserts>true</supportsMultiRowInserts>
            <upsertMode>UNION_ALL</upsertMode>
            <updateMode>MYSQL</updateMode>
        </sqlDialect>
        <jdbcProperties>
            <entry>
                <key>noDatetimeStringSync</key>
                <value>true</value>
            </entry>
        </jdbcProperties>
		<fetchSize>4096</fetchSize>
        <statisticRenovator>
            <scriptFileName>script/mysql/update_statistics.sql</scriptFileName>
        </statisticRenovator>
        <typeReplacement>
            <entry>
                <key>TINYINT</key>
                <value>INT</value>
            </entry>
            <entry>
                <key>SMALLINT</key>
                <value>INT</value>
            </entry>
            <entry>
                <key>MEDIUMINT</key>
                <value>INT</value>
            </entry>
            <entry>
                <key>INT</key>
                <value>BIGINT</value>
            </entry>
            <entry>
                <key>INTEGER</key>
                <value>BIGINT</value>
            </entry>
            <entry>
                <key>tinyint</key>
                <value>int</value>
            </entry>
            <entry>
                <key>smallint</key>
                <value>int</value>
            </entry>
            <entry>
                <key>mediumint</key>
                <value>int</value>
            </entry>
            <entry>
                <key>int</key>
                <value>bigint</value>
            </entry>
            <entry>
                <key>integer</key>
                <value>bigint</value>
            </entry>
        </typeReplacement>
        <experimentalTypeReplacement>
            <entry>
                <key>TIMESTAMP</key>
                <value>TIMESTAMP(6)</value>
            </entry>
            <entry>
                <key>timestamp</key>
                <value>timestamp(6)</value>
            </entry>
            <entry>
                <key>DATETIME</key>
                <value>DATETIME(6)</value>
            </entry>
            <entry>
                <key>datetime</key>
                <value>datetime(6)</value>
            </entry>
            <entry>
                <key>TIME</key>
                <value>TIME(6)</value>
            </entry>
            <entry>
                <key>time</key>
                <value>time(6)</value>
            </entry>
		</experimentalTypeReplacement>
        <stringLiteralEscapeSequences>
            <entry>
                <key>\0</key>
                <value>\0</value>
            </entry>
            <entry>
                <key>"</key>
                <value>\"</value>
            </entry>
            <entry>
                <key>\n</key>
                <value>\n</value>
            </entry>
            <entry>
                <key>\r</key>
                <value>\r</value>
            </entry>
            <entry>
                <key>\t</key>
                <value>\t</value>
            </entry>
            <entry>
                <key>\b</key>
                <value>\b</value>
            </entry>
            <entry>
                <key>\26</key>
                <value>\Z</value>
            </entry>
            <entry>
                <key>\\</key>
                <value>\\</value>
            </entry>
        </stringLiteralEscapeSequences>
        <sqlLimitSuffix>LIMIT 0, %s</sqlLimitSuffix>

        <!-- NOLOGGING, TABLESPACE-spec., etc. -->
        <tableProperties></tableProperties>

        <limitTransactionSize>
        	<limit>30000</limit>
        	<statementSuffix>limit %1$s</statementSuffix>
        </limitTransactionSize>

        <identityInserts>false</identityInserts>
        <timestampPattern>'str_to_date('''yyyy-MM-dd HH:mm:ss'.${NANO}'', ''%Y-%m-%d %H:%i:%s.%f'')'</timestampPattern>
        <emptyBLOBValue>BINARY ''</emptyBLOBValue>
        <emptyCLOBValue>''</emptyCLOBValue>
        <emptyNCLOBValue>''</emptyNCLOBValue>
        <toBlob>0x%s</toBlob>
        <toClob>'%s'</toClob>
        <toNClob>'%s'</toNClob>
        <embeddedLobSizeLimit>32000</embeddedLobSizeLimit>
        <binaryPattern>x'%s'</binaryPattern>
        <avoidLeftJoin>false</avoidLeftJoin>
        <useInlineViewsInDataBrowser>true</useInlineViewsInDataBrowser>
        <defaultSchemaQuery>Select DATABASE()</defaultSchemaQuery>
		<estimatedRowCountQuery>select TABLE_NAME, max(CARDINALITY) from INFORMATION_SCHEMA.STATISTICS where TABLE_SCHEMA = '%s' group by TABLE_NAME</estimatedRowCountQuery>
		<viewTextOrDDLQuery>SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = '%1$s' and TABLE_NAME = '%2$s'</viewTextOrDDLQuery>

		<virtualColumnsQuery>SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '${SCHEMA}' AND EXTRA LIKE '%VIRTUAL%'</virtualColumnsQuery>
<!--
        <importedKeysQuery>SELECT PKCU.TABLE_SCHEMA, null, PKCU.TABLE_NAME, PKCU.COLUMN_NAME, KCU.TABLE_SCHEMA, null, KCU.TABLE_NAME, KCU.COLUMN_NAME, KCU.ORDINAL_POSITION,        null, null, RC.CONSTRAINT_NAME, RC.UNIQUE_CONSTRAINT_NAME, null  FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC  JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU    ON KCU.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG        AND KCU.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA       AND KCU.CONSTRAINT_NAME = RC.CONSTRAINT_NAME  JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE PKCU    ON PKCU.CONSTRAINT_CATALOG = RC.UNIQUE_CONSTRAINT_CATALOG        AND PKCU.CONSTRAINT_SCHEMA = RC.UNIQUE_CONSTRAINT_SCHEMA       AND PKCU.CONSTRAINT_NAME = RC.UNIQUE_CONSTRAINT_NAME AND PKCU.TABLE_NAME = RC.REFERENCED_TABLE_NAME AND PKCU.ORDINAL_POSITION = KCU.ORDINAL_POSITION  WHERE PKCU.TABLE_SCHEMA = '${SCHEMA}'  ORDER BY KCU.ORDINAL_POSITION</importedKeysQuery>
        <primaryKeysQuery>SELECT null, KCU.TABLE_SCHEMA, KCU.TABLE_NAME, KCU.COLUMN_NAME, KCU.ORDINAL_POSITION, C.CONSTRAINT_NAME   FROM   INFORMATION_SCHEMA.TABLE_CONSTRAINTS C   JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU     ON KCU.CONSTRAINT_CATALOG = C.CONSTRAINT_CATALOG        AND KCU.CONSTRAINT_SCHEMA = C.CONSTRAINT_SCHEMA   AND KCU.TABLE_NAME = C.TABLE_NAME    AND KCU.CONSTRAINT_NAME = C.CONSTRAINT_NAME   WHERE C.CONSTRAINT_TYPE = 'PRIMARY KEY'       AND  KCU.TABLE_SCHEMA = '${SCHEMA}'   ORDER BY KCU.ORDINAL_POSITION</primaryKeysQuery>
-->
        <nullableContraint>NULL</nullableContraint>
        <identifierQuoteString>`</identifierQuoteString>
        <ddlQuery>SHOW CREATE ${type} `${schema}`.`${table}`</ddlQuery>
        <explainPrepare></explainPrepare>
        <explainQuery>explain %1$s</explainQuery>
        <explainCleanup></explainCleanup>
        <functionSourceQuery>SHOW CREATE FUNCTION %1$s.%2$s</functionSourceQuery>
        <procedureSourceQuery>SHOW CREATE PROCEDURE %1$s.%2$s</procedureSourceQuery>
        <constraintsQuery>
Select CNAME, TNAME, COLNAME, CTYPE, DETAIL From
(
	Select concat('pk_', KCU.TABLE_NAME) CNAME, KCU.TABLE_NAME TNAME, KCU.COLUMN_NAME COLNAME, 'PK' CTYPE, null DETAIL, KCU.ORDINAL_POSITION POS, 1 TYPEPOS
    From
        INFORMATION_SCHEMA.TABLE_CONSTRAINTS C
    join
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU
            ON KCU.CONSTRAINT_CATALOG = C.CONSTRAINT_CATALOG
            AND KCU.CONSTRAINT_SCHEMA = C.CONSTRAINT_SCHEMA
            AND KCU.TABLE_NAME = C.TABLE_NAME
            AND KCU.CONSTRAINT_NAME = C.CONSTRAINT_NAME
    where
        C.CONSTRAINT_TYPE = 'PRIMARY KEY'
        AND KCU.TABLE_SCHEMA = '%1$s'
union all
	Select C.CONSTRAINT_NAME CNAME, KCU.TABLE_NAME TNAME, KCU.COLUMN_NAME COLNAME, 'Unique' CTYPE, null DETAIL, KCU.ORDINAL_POSITION POS, 2 TYPEPOS
    From
        INFORMATION_SCHEMA.TABLE_CONSTRAINTS C
    join
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU
            ON KCU.CONSTRAINT_CATALOG = C.CONSTRAINT_CATALOG
            AND KCU.CONSTRAINT_SCHEMA = C.CONSTRAINT_SCHEMA
            AND KCU.TABLE_NAME = C.TABLE_NAME
            AND KCU.CONSTRAINT_NAME = C.CONSTRAINT_NAME
    where
        C.CONSTRAINT_TYPE = 'UNIQUE'
        AND KCU.TABLE_SCHEMA = '%1$s'
) pk order by TYPEPOS, CNAME, TNAME, POS, COLNAME
		</constraintsQuery>
        <objectRenderers>
       		<name>Triggers</name>
        	<iconURL>/net/sf/jailer/ui/resource/triggers.png</iconURL>
			<itemDescription>
	        	<iconURL>/net/sf/jailer/ui/resource/trigger.png</iconURL>
			</itemDescription>
			<listQuery>SHOW TRIGGERS FROM %1$s</listQuery>
		</objectRenderers>
    </dbms>

    <!-- for DB2 LUW -->
    <dbms>
        <id>DB2</id>
        <displayName>DB2 LUW</displayName>
        <urlPattern>jdbc:db2.*</urlPattern>
        <testQuery>Select A, B, C from (values (1, '2', 3), (4, '5', 6)) E(A, B, C)</testQuery>
        <sqlDialect>
            <needsValuesKeywordForDeletes>true</needsValuesKeywordForDeletes>
            <supportsInClauseForDeletes>true</supportsInClauseForDeletes>
            <supportsMultiRowInserts>true</supportsMultiRowInserts>
            <upsertMode>DB2</upsertMode>
        </sqlDialect>
        <statisticRenovator>
            <scriptFileName>script/db2/update_statistics.sql</scriptFileName>
        </statisticRenovator>
        <typeReplacement>
            <entry>
                <key>graphic</key>
                <value>varchar</value>
            </entry>
            <entry>
                <key>GRAPHIC</key>
                <value>VARCHAR</value>
            </entry>
        </typeReplacement>
        <stringLiteralEscapeSequences>
            <entry>
                <key>'</key>
                <value>''</value>
            </entry>
            <entry>
                <key>\n</key>
                <value>' || chr(10) || '</value>
            </entry>
            <entry>
                <key>\r</key>
                <value>' || chr(13) || '</value>
            </entry>
        </stringLiteralEscapeSequences>
        <sqlLimitSuffix>fetch first %s rows only</sqlLimitSuffix>
        <tableProperties>NOT LOGGED INITIALLY</tableProperties>
        <sessionTemporaryTableManager>
            <createIndexPrefix>CREATE INDEX SESSION.</createIndexPrefix>
            <createIndexSuffix></createIndexSuffix>
            <createTablePrefix>DECLARE GLOBAL TEMPORARY TABLE </createTablePrefix>
            <createTableSuffix>ON COMMIT PRESERVE ROWS NOT LOGGED</createTableSuffix>
            <dropTablePrefix>DROP TABLE SESSION.</dropTablePrefix>
            <indexTablePrefix>SESSION.</indexTablePrefix>
            <needsExclusiveAccess>true</needsExclusiveAccess>
        </sessionTemporaryTableManager>
        <identityInserts>false</identityInserts>
        <emptyBLOBValue>blob('')</emptyBLOBValue>
        <emptyCLOBValue>clob('')</emptyCLOBValue>
        <emptyNCLOBValue>nclob('')</emptyNCLOBValue>
        <toBlob>blob('%s')</toBlob>
        <toClob>clob('%s')</toClob>
        <toNClob>nclob('%s')</toNClob>
        <embeddedLobSizeLimit>32000</embeddedLobSizeLimit>
        <binaryPattern>x'%s'</binaryPattern>
        <avoidLeftJoin>false</avoidLeftJoin>
        <useInlineViewsInDataBrowser>true</useInlineViewsInDataBrowser>
        <estimatedRowCountQuery>SELECT TABNAME, CARD FROM SYSSTAT.TABLES WHERE TABSCHEMA = '%s'</estimatedRowCountQuery>
        <viewTextOrDDLQuery>SELECT TEXT FROM SYSCAT.VIEWS WHERE VIEWSCHEMA = '%1$s' and VIEWNAME = '%2$s'</viewTextOrDDLQuery>
        <virtualColumnsQuery>SELECT TABNAME, COLNAME from syscat.columns WHERE TABSCHEMA='${SCHEMA}' AND GENERATED='A'</virtualColumnsQuery>
        <importedKeysQuery> SELECT null, REF.REFTABSCHEMA, REF.REFTABNAME, PKCOL.COLNAME,        null, REF.TABSCHEMA, REF.TABNAME, FKCOL.COLNAME, FKCOL.COLSEQ,        null, null, REF.CONSTNAME, REF.REFKEYNAME, null FROM syscat.references REF, syscat.keycoluse PKCOL, syscat.keycoluse FKCOL WHERE REF.CONSTNAME = FKCOL.CONSTNAME   AND REF.TABSCHEMA = FKCOL.TABSCHEMA   AND REF.TABNAME = FKCOL.TABNAME   AND REF.REFKEYNAME = PKCOL.CONSTNAME   AND REF.REFTABSCHEMA = PKCOL.TABSCHEMA   AND REF.REFTABNAME = PKCOL.TABNAME   AND FKCOL.COLSEQ = PKCOL.COLSEQ   AND REF.REFTABSCHEMA = '${SCHEMA}'   ORDER BY FKCOL.COLSEQ</importedKeysQuery>
        <primaryKeysQuery>   SELECT null, CONST.TABSCHEMA, CONST.TABNAME, PKCOL.COLNAME, PKCOL.COLSEQ, CONST.CONSTNAME FROM syscat.tabconst CONST, syscat.keycoluse PKCOL WHERE CONST.CONSTNAME = PKCOL.CONSTNAME   AND CONST.TABSCHEMA = PKCOL.TABSCHEMA   AND CONST.TABNAME = PKCOL.TABNAME   AND CONST.TYPE = 'P'   AND CONST.TABSCHEMA = '${SCHEMA}'   ORDER BY PKCOL.COLSEQ</primaryKeysQuery>
        <identifierQuoteString>"</identifierQuoteString>
        <procedureDetailNeedsSpecificName>true</procedureDetailNeedsSpecificName>
        <functionSourceQuery>SELECT 'Source', cast(ROUTINE_DEFINITION as varchar) FROM SYSIBM.ROUTINES where ROUTINE_SCHEMA = '%1$s' and SPECIFIC_NAME = '%2$s' and ROUTINE_DEFINITION is not null</functionSourceQuery>
        <procedureSourceQuery>SELECT 'Source', cast(ROUTINE_DEFINITION as varchar) FROM SYSIBM.ROUTINES where ROUTINE_SCHEMA = '%1$s' and SPECIFIC_NAME = '%2$s' and ROUTINE_DEFINITION is not null</procedureSourceQuery>

        <explainCreateExplainTable>CALL SYSPROC.SYSINSTALLOBJECTS('EXPLAIN', 'C',CAST (NULL AS VARCHAR(128)), CAST (NULL AS VARCHAR(128)))</explainCreateExplainTable>
        <explainPrepare>explain plan for %1$s</explainPrepare>
        <explainQuery><![CDATA[
WITH tree(operator_ID, level, path, explain_time, cycle)
AS
(
SELECT 1 operator_id
     , 0 level
     , CAST('001' AS VARCHAR(1000)) path
     , max(explain_time) explain_time
     , 0
  FROM SYSTOOLS.EXPLAIN_OPERATOR O
 WHERE O.EXPLAIN_REQUESTER = SESSION_USER
UNION ALL
SELECT s.source_id
     , level + 1
     , tree.path || '/' || LPAD(CAST(s.source_id AS VARCHAR(3)), 3, '0')  path
     , tree.explain_time
     , POSITION('/' || LPAD(CAST(s.source_id AS VARCHAR(3)), 3, '0')  || '/' IN path USING OCTETS)
  FROM tree
     , SYSTOOLS.EXPLAIN_STREAM S
 WHERE s.target_id    = tree.operator_id
   AND s.explain_time = tree.explain_time
   AND S.Object_Name IS NULL
   AND S.explain_requester = SESSION_USER
   AND tree.cycle = 0
   AND level < 100
)
SELECT *
  FROM (
SELECT "Explain Plan"
  FROM (
SELECT CAST(   LPAD(id,        MAX(LENGTH(id))        OVER(), ' ')
            || ' | '
            || RPAD(operation, MAX(LENGTH(operation)) OVER(), ' ')
            || ' | '
            || LPAD(rows,      MAX(LENGTH(rows))      OVER(), ' ')
            || ' | '
            -- Don't show ActualRows columns if there are no actuals available at all
            || CASE WHEN COUNT(ActualRows) OVER () > 1 -- the heading 'ActualRows' is always present, so "1" means no OTHER values
                    THEN LPAD(ActualRows, MAX(LENGTH(ActualRows)) OVER(), ' ') || ' | '
                    ELSE ''
               END
            || LPAD(cost,      MAX(LENGTH(cost))      OVER(), ' ')
         AS VARCHAR(100)) "Explain Plan"
     , path
  FROM (
SELECT 'ID' ID
     , 'Operation' Operation
     , 'Rows' Rows
     , 'ActualRows' ActualRows
     , 'Cost' Cost
     , '0' Path
  FROM SYSIBM.SYSDUMMY1
-- TODO: UNION ALL yields duplicate. where do they come from?
UNION
SELECT CAST(tree.operator_id as VARCHAR(254)) ID
     , CAST(LPAD(' ', tree.level, ' ')
       || CASE WHEN tree.cycle = 1
               THEN '(cycle) '
               ELSE ''
          END
       || COALESCE (
             TRIM(O.Operator_Type)
          || COALESCE(' (' || argument || ')', '')
          || ' '
          || COALESCE(S.Object_Name,'')
          , ''
          )
       AS VARCHAR(254)) AS OPERATION
     , COALESCE(CAST(rows AS VARCHAR(254)), '') Rows
     , CAST(ActualRows as VARCHAR(254)) ActualRows -- note: no coalesce
     , COALESCE(CAST(CAST(O.Total_Cost AS BIGINT) AS VARCHAR(254)), '') Cost
     , path
  FROM tree
  LEFT JOIN ( SELECT i.source_id
              , i.target_id
              , CAST(CAST(ROUND(o.stream_count) AS BIGINT) AS VARCHAR(12))
                || ' of '
                || CAST (total_rows AS VARCHAR(12))
                || CASE WHEN total_rows > 0
                         AND ROUND(o.stream_count) <= total_rows THEN
                   ' ('
                   || LPAD(CAST (ROUND(ROUND(o.stream_count)/total_rows*100,2)
                          AS NUMERIC(5,2)), 6, ' ')
                   || '%%)'
                   ELSE ''
                   END rows
              , CASE WHEN act.actual_value is not null then
                CAST(CAST(ROUND(act.actual_value) AS BIGINT) AS VARCHAR(12))
                || ' of '
                || CAST (total_rows AS VARCHAR(12))
                || CASE WHEN total_rows > 0 THEN
                   ' ('
                   || LPAD(CAST (ROUND(ROUND(act.actual_value)/total_rows*100,2)
                          AS NUMERIC(5,2)), 6, ' ')
                   || '%%)'
                   ELSE NULL
                   END END ActualRows
              , i.object_name
              , i.explain_time
         FROM (SELECT MAX(source_id) source_id
                    , target_id
                    , MIN(CAST(ROUND(stream_count,0) AS BIGINT)) total_rows
                    , CAST(LISTAGG(object_name) AS VARCHAR(50)) object_name
                    , explain_time
                 FROM SYSTOOLS.EXPLAIN_STREAM
                WHERE explain_time = (SELECT MAX(explain_time)
                                        FROM SYSTOOLS.EXPLAIN_OPERATOR
                                       WHERE EXPLAIN_REQUESTER = SESSION_USER
                                     )
                GROUP BY target_id, explain_time
              ) I
         LEFT JOIN SYSTOOLS.EXPLAIN_STREAM O
           ON (    I.target_id=o.source_id
               AND I.explain_time = o.explain_time
               AND O.EXPLAIN_REQUESTER = SESSION_USER
              )
         LEFT JOIN SYSTOOLS.EXPLAIN_ACTUALS act
           ON (    act.operator_id  = i.target_id
               AND act.explain_time = i.explain_time
               AND act.explain_requester = SESSION_USER
               AND act.ACTUAL_TYPE  like 'CARDINALITY%%'
              )
       ) s
    ON (    s.target_id    = tree.operator_id
        AND s.explain_time = tree.explain_time
       )
  LEFT JOIN SYSTOOLS.EXPLAIN_OPERATOR O
    ON (    o.operator_id  = tree.operator_id
        AND o.explain_time = tree.explain_time
        AND o.explain_requester = SESSION_USER
       )
  LEFT JOIN (SELECT LISTAGG (CASE argument_type
                             WHEN 'UNIQUE' THEN
                                  CASE WHEN argument_value = 'TRUE'
                                       THEN 'UNIQUE'
                                  ELSE NULL
                                  END
                             WHEN 'TRUNCSRT' THEN
                                  CASE WHEN argument_value = 'TRUE'
                                       THEN 'TOP-N'
                                  ELSE NULL
                                  END
                             WHEN 'SCANDIR' THEN
                                  CASE WHEN argument_value != 'FORWARD'
                                       THEN argument_value
                                  ELSE NULL
                                  END
                             ELSE argument_value
                             END
                           , ' ') argument
                  , operator_id
                  , explain_time
               FROM SYSTOOLS.EXPLAIN_ARGUMENT EA
              WHERE argument_type IN ('AGGMODE'   -- GRPBY
                                     , 'UNIQUE', 'TRUNCSRT' -- SORT
                                     , 'SCANDIR' -- IXSCAN, TBSCAN
                                     , 'OUTERJN' -- JOINs
                                     )
                AND explain_requester = SESSION_USER
              GROUP BY explain_time, operator_id
            ) A
    ON (    a.operator_id  = tree.operator_id
        AND a.explain_time = tree.explain_time
       )
     ) O
UNION ALL
VALUES ('', 'A')
    ,  ('', 'Y')
UNION ALL
SELECT CAST (LPAD(CASE WHEN operator_id = LAG  (operator_id)
                                          OVER (PARTITION BY operator_id
                                                    ORDER BY pred_order
                                               )
                       THEN ''
                       ELSE operator_id || ' - '
                  END
                , MAX(LENGTH(operator_id )+4) OVER()
                , ' ')
             || how_applied
             || ' '
             || predicate_text
          AS VARCHAR(100)) "Predicate Information"
     , 'P' || LPAD(id_order, 5, '0') || pred_order path
  FROM (SELECT CAST(operator_id AS VARCHAR(254)) operator_id
             , LPAD(trim(how_applied)
                  ,  MAX (LENGTH(TRIM(how_applied)))
                    OVER (PARTITION BY operator_id)
                  , ' '
               ) how_applied
             , CAST(substr(predicate_text, 1, 80) AS VARCHAR(80)) predicate_text
             , CASE how_applied WHEN 'START' THEN '1'
                                WHEN 'STOP'  THEN '2'
                                WHEN 'SARG'  THEN '3'
                                ELSE '9'
               END pred_order
             , operator_id id_order
          FROM systools.explain_predicate p
         WHERE explain_time = (SELECT MAX(explain_time)
                                 FROM systools.explain_operator)
       )
)
ORDER BY path
)]]>
		</explainQuery>
        <explainCleanup></explainCleanup>

        <constraintsQuery>
Select CNAME, TNAME, COLNAME, CTYPE, DETAIL From
(
	Select CONST.CONSTNAME CNAME, CONST.TABNAME TNAME, PKCOL.COLNAME COLNAME, 'PK' CTYPE, null DETAIL, PKCOL.COLSEQ POS, 1 TYPEPOS
	From
	    syscat.tabconst CONST,
        syscat.keycoluse PKCOL
    WHERE
        CONST.CONSTNAME = PKCOL.CONSTNAME
        AND CONST.TABSCHEMA = PKCOL.TABSCHEMA
        AND CONST.TABNAME = PKCOL.TABNAME
        AND CONST.TYPE = 'P'
        AND CONST.TABSCHEMA = '%1$s'
	union all
	Select I.INDNAME CNAME, I.TABNAME TNAME, u.COLNAME COLNAME, 'Unique' CTYPE, null DETAIL, u.COLSEQ POS, 2 TYPEPOS
	from
		syscat.indexes i
		join syscat.indexcoluse u
			on i.INDSCHEMA = u.INDSCHEMA
			and i.INDNAME = u.INDNAME
		where
			i.UNIQUERULE = 'U'
			and i.TABSCHEMA = '%1$s'
	union all
		Select C.CONSTNAME CNAME, C.TABNAME TNAME, ' ' COLNAME, 'Check' CTYPE, cast(TEXT as varchar) DETAIL, 1 POS, 3 TYPEPOS
		From
			syscat.checks C
		where
			C.TYPE = 'C'
			AND C.TABSCHEMA = '%1$s'
) pk order by TYPEPOS, CNAME, TNAME, POS, COLNAME
		</constraintsQuery>
        <objectRenderers>
       		<name>Triggers</name>
        	<iconURL>/net/sf/jailer/ui/resource/triggers.png</iconURL>
			<itemDescription>
	        	<iconURL>/net/sf/jailer/ui/resource/trigger.png</iconURL>
			</itemDescription>
			<listQuery>SELECT TRIGNAME,OWNER,OWNERTYPE,TABSCHEMA,TABNAME,TRIGTIME,TRIGEVENT,GRANULARITY,VALID,CREATE_TIME,QUALIFIER,cast(FUNC_PATH as VARCHAR) FUNC_PATH,cast(TEXT as VARCHAR) TEXT,LAST_REGEN_TIME,REMARKS,PRECOMPILE_OPTIONS,COMPILE_OPTIONS FROM SYSCAT.TRIGGERS WHERE TRIGSCHEMA = '%1$s'</listQuery>
		</objectRenderers>
        <objectRenderers>
       		<name>Sequences</name>
        	<iconURL>/net/sf/jailer/ui/resource/sequences.png</iconURL>
			<itemDescription>
	        	<iconURL>/net/sf/jailer/ui/resource/sequence.png</iconURL>
			</itemDescription>
			<listQuery>select SEQNAME, SEQSCHEMA, DEFINER, DEFINERTYPE, OWNER, OWNERTYPE, SEQID, SEQTYPE, BASE_SEQSCHEMA, BASE_SEQNAME, INCREMENT, START, MAXVALUE, MINVALUE, NEXTCACHEFIRSTVALUE, CYCLE, CACHE, ORDER, DATATYPEID, SOURCETYPEID, CREATE_TIME, ALTER_TIME, PRECISION, ORIGIN, REMARKS from SYSCAT.SEQUENCES where OWNER = '%1$s'</listQuery>
		</objectRenderers>
    </dbms>

    <!-- for DB2 z/OS -->
    <dbms>
        <id>DB2_ZOS</id>
        <displayName>DB2 z/OS</displayName>
        <urlPattern>jdbc:db2.*</urlPattern>
        <sqlDialect>
            <needsValuesKeywordForDeletes>true</needsValuesKeywordForDeletes>
            <supportsInClauseForDeletes>false</supportsInClauseForDeletes>
            <supportsMultiRowInserts>true</supportsMultiRowInserts>
            <upsertMode>FROM_SYSDUMMY1</upsertMode>
        </sqlDialect>
        <statisticRenovator>
            <scriptFileName>script/db2/update_statistics.sql</scriptFileName>
        </statisticRenovator>
        <typeReplacement>
            <entry>
                <key>graphic</key>
                <value>varchar</value>
            </entry>
            <entry>
                <key>GRAPHIC</key>
                <value>VARCHAR</value>
            </entry>
        </typeReplacement>
        <stringLiteralEscapeSequences>
            <entry>
                <key>'</key>
                <value>''</value>
            </entry>
            <entry>
                <key>\n</key>
                <value>' || chr(10) || '</value>
            </entry>
            <entry>
                <key>\r</key>
                <value>' || chr(13) || '</value>
            </entry>
        </stringLiteralEscapeSequences>
        <sqlLimitSuffix>fetch first %s rows only</sqlLimitSuffix>
        <tableProperties>NOT LOGGED INITIALLY</tableProperties>
        <sessionTemporaryTableManager>
            <createIndexPrefix>CREATE INDEX SESSION.</createIndexPrefix>
            <createIndexSuffix></createIndexSuffix>
            <createTablePrefix>DECLARE GLOBAL TEMPORARY TABLE </createTablePrefix>
            <createTableSuffix>ON COMMIT PRESERVE ROWS NOT LOGGED</createTableSuffix>
            <dropTablePrefix>DROP TABLE SESSION.</dropTablePrefix>
            <indexTablePrefix>SESSION.</indexTablePrefix>
            <needsExclusiveAccess>true</needsExclusiveAccess>
        </sessionTemporaryTableManager>
        <identityInserts>false</identityInserts>
        <emptyBLOBValue>blob('')</emptyBLOBValue>
        <emptyCLOBValue>clob('')</emptyCLOBValue>
        <emptyNCLOBValue>nclob('')</emptyNCLOBValue>
        <toBlob>blob('%s')</toBlob>
        <toClob>clob('%s')</toClob>
        <toNClob>nclob('%s')</toNClob>
        <embeddedLobSizeLimit>32000</embeddedLobSizeLimit>
        <binaryPattern>x'%s'</binaryPattern>
        <avoidLeftJoin>false</avoidLeftJoin>
        <useInlineViewsInDataBrowser>true</useInlineViewsInDataBrowser>
        <viewTextOrDDLQuery>SELECT TEXT FROM SYSCAT.VIEWS WHERE VIEWSCHEMA = '%1$s' and VIEWNAME = '%2$s'</viewTextOrDDLQuery>
        <estimatedRowCountQuery>SELECT TABNAME, CARD FROM SYSSTAT.TABLES WHERE TABSCHEMA = '%s'</estimatedRowCountQuery>
        <virtualColumnsQuery>SELECT TABNAME, COLNAME from syscat.columns WHERE TABSCHEMA='${SCHEMA}' AND GENERATED='A'</virtualColumnsQuery>
        <importedKeysQuery>SELECT null, REF.REFTABSCHEMA, REF.REFTABNAME, PKCOL.COLNAME, null, REF.TABSCHEMA, REF.TABNAME, FKCOL.COLNAME, FKCOL.COLSEQ, null, null, REF.CONSTNAME, REF.REFKEYNAME, null FROM syscat.references REF, syscat.keycoluse PKCOL, syscat.keycoluse FKCOL WHERE REF.CONSTNAME = FKCOL.CONSTNAME   AND REF.TABSCHEMA = FKCOL.TABSCHEMA   AND REF.TABNAME = FKCOL.TABNAME   AND REF.REFKEYNAME = PKCOL.CONSTNAME   AND REF.REFTABSCHEMA = PKCOL.TABSCHEMA   AND REF.REFTABNAME = PKCOL.TABNAME   AND FKCOL.COLSEQ = PKCOL.COLSEQ   AND REF.REFTABSCHEMA = '${SCHEMA}' ORDER BY FKCOL.COLSEQ</importedKeysQuery>
        <primaryKeysQuery>SELECT null, CONST.TABSCHEMA, CONST.TABNAME, PKCOL.COLNAME, PKCOL.COLSEQ, CONST.CONSTNAME FROM syscat.tabconst CONST, syscat.keycoluse PKCOL WHERE CONST.CONSTNAME = PKCOL.CONSTNAME   AND CONST.TABSCHEMA = PKCOL.TABSCHEMA   AND CONST.TABNAME = PKCOL.TABNAME   AND CONST.TYPE = 'P'   AND CONST.TABSCHEMA = '${SCHEMA}'   ORDER BY PKCOL.COLSEQ</primaryKeysQuery>
        <identifierQuoteString>"</identifierQuoteString>
    </dbms>

    <!-- for Informix -->
    <dbms>
        <id>INFORMIX</id>
        <displayName>Informix</displayName>
        <urlPattern>jdbc:informix.*</urlPattern>
        <sqlDialect>
            <needsValuesKeywordForDeletes>true</needsValuesKeywordForDeletes>
            <supportsInClauseForDeletes>true</supportsInClauseForDeletes>
            <supportsMultiRowInserts>true</supportsMultiRowInserts>
            <upsertMode>DB2</upsertMode>
        </sqlDialect>
        <statisticRenovator>
            <scriptFileName>script/informix/update_statistics.sql</scriptFileName>
        </statisticRenovator>
        <typeReplacement>
            <entry>
                <key>datetime</key>
                <value>datetime year to fraction</value>
            </entry>
            <entry>
                <key>serial</key>
                <value>int</value>
            </entry>
            <entry>
                <key>serial8</key>
                <value>int8</value>
            </entry>
            <entry>
                <key>bigserial</key>
                <value>bigint</value>
            </entry>
        </typeReplacement>
        <sqlLimitSuffix>FIRST %s</sqlLimitSuffix>
        <varcharLengthLimit>255</varcharLengthLimit>
        <tableProperties></tableProperties>
        <sessionTemporaryTableManager>
            <createIndexPrefix>CREATE INDEX </createIndexPrefix>
            <createIndexSuffix></createIndexSuffix>
            <createTablePrefix>CREATE TEMP TABLE </createTablePrefix>
            <createTableSuffix> WITH NO LOG</createTableSuffix>
            <dropTablePrefix>DROP TABLE </dropTablePrefix>
            <indexTablePrefix></indexTablePrefix>
            <needsExclusiveAccess>true</needsExclusiveAccess>
        </sessionTemporaryTableManager>
        <identityInserts>false</identityInserts>
        <timestampPattern>'cast('''yyyy-MM-dd HH.mm.ss'.${NANO}'' as datetime year to fraction)'</timestampPattern>
        <embeddedLobSizeLimit>3980</embeddedLobSizeLimit>
        <binaryPattern>x'%s'</binaryPattern>
        <avoidLeftJoin>false</avoidLeftJoin>
        <useInlineViewsInDataBrowser>true</useInlineViewsInDataBrowser>
        <identifierQuoteString>"</identifierQuoteString>
    </dbms>

    <!-- for PostgreSQL -->
    <dbms>
        <id>POSTGRESQL</id>
        <displayName>PostgreSQL</displayName>
        <urlPattern>jdbc:postgres.*</urlPattern>
        <sqlDialect>
            <needsValuesKeywordForDeletes>true</needsValuesKeywordForDeletes>
            <supportsInClauseForDeletes>true</supportsInClauseForDeletes>
            <supportsMultiRowInserts>true</supportsMultiRowInserts>
            <upsertMode>DB2</upsertMode>
            <updateMode>PG</updateMode>
        </sqlDialect>
        <statisticRenovator>
            <scriptFileName>script/postgres/update_statistics.sql</scriptFileName>
        </statisticRenovator>
        <rowidName>ctid</rowidName>
        <rowidType>tid</rowidType>
        <typeReplacement>
            <entry>
                <key>DOUBLE</key>
                <value>DOUBLE PRECISION</value>
            </entry>
            <entry>
                <key>double</key>
                <value>double precision</value>
            </entry>
            <entry>
                <key>bigserial</key>
                <value>int8</value>
            </entry>
            <entry>
                <key>serial8</key>
                <value>int8</value>
            </entry>
            <entry>
                <key>serial</key>
                <value>int4</value>
            </entry>
            <entry>
                <key>serial4</key>
                <value>int4</value>
            </entry>
            <entry>
                <key>NVARCHAR</key>
                <value>VARCHAR</value>
            </entry>
            <entry>
                <key>nvarchar</key>
                <value>varchar</value>
            </entry>
        </typeReplacement>
        <sqlExpressionRule>
       	    <entry>
                <key>point</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>interval</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>inet</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>int4range</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>int8range</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>box</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>cidr</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>circle</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>line</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>lseg</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>macaddr</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>path</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>polygon</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>money</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>tid</key>
                <value>'$1'::$2</value>
            </entry>
        </sqlExpressionRule>
        <supportsCStyleBackslashEscapes>true</supportsCStyleBackslashEscapes>
        <stringLiteralEscapeSequences>
            <entry>
                <key>'</key>
                <value>''</value>
            </entry>
            <entry>
                <key>\n</key>
                <value>' || chr(10) || '</value>
            </entry>
            <entry>
                <key>\r</key>
                <value>' || chr(13) || '</value>
            </entry>
        </stringLiteralEscapeSequences>
        <sqlLimitSuffix>LIMIT %s</sqlLimitSuffix>
        <fetchSize>4096</fetchSize>

        <!-- NOLOGGING, TABLESPACE-spec., etc. -->
        <tableProperties>CREATE UNLOGGED TABLE</tableProperties>

        <sessionTemporaryTableManager>
            <createIndexPrefix>CREATE INDEX </createIndexPrefix>
            <createIndexSuffix></createIndexSuffix>
            <createTablePrefix>CREATE TEMPORARY TABLE </createTablePrefix>
            <createTableSuffix></createTableSuffix>
            <dropTablePrefix>-- DROP TABLE </dropTablePrefix>
            <indexTablePrefix></indexTablePrefix>
            <needsExclusiveAccess>false</needsExclusiveAccess>
        </sessionTemporaryTableManager>
        <identityInserts>false</identityInserts>
        <datePattern>''yyyy-MM-dd'''::date'</datePattern>
        <timestampPattern>'to_timestamp('''yyyy-MM-dd HH.mm.ss'.${NANO}'', ''YYYY-MM-DD HH24.MI.SS.US'')'</timestampPattern>
        <embeddedLobSizeLimit>3980</embeddedLobSizeLimit>
        <binaryPattern>E'\\x%s'::bytea</binaryPattern>
        <avoidLeftJoin>false</avoidLeftJoin>
        <supportsSchemasInIndexDefinitions>false</supportsSchemasInIndexDefinitions>
        <useInlineViewsInDataBrowser>true</useInlineViewsInDataBrowser>
        <identifierQuoteString>"</identifierQuoteString>
		<defaultSchemaQuery>SELECT CURRENT_SCHEMA()</defaultSchemaQuery>
        <viewTextOrDDLQuery>SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = '%1$s' and TABLE_NAME = '%2$s'</viewTextOrDDLQuery>
		<estimatedRowCountQuery>
SELECT c.relname, c.reltuples::bigint AS estimate
FROM   pg_class c
JOIN   pg_namespace n ON n.oid = c.relnamespace
WHERE  n.nspname = '%s'
		</estimatedRowCountQuery>
        <explainPrepare></explainPrepare>
        <explainQuery>explain %1$s</explainQuery>
        <explainCleanup></explainCleanup>
        <functionSourceQuery>
SELECT 'Function', p.proname || '(' || pg_catalog.pg_get_function_arguments(p.oid) || ') RETURNS ' ||  pg_catalog.pg_get_function_result(p.oid)
FROM pg_catalog.pg_proc p
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE p.proname = '%2$s' AND n.nspname = '%1$s'
        </functionSourceQuery>
        <constraintsQuery>
Select CNAME, TNAME, COLNAME, CTYPE, DETAIL From
(
	Select KCU.CONSTRAINT_NAME CNAME, KCU.TABLE_NAME TNAME, KCU.COLUMN_NAME COLNAME, 'PK' CTYPE, null DETAIL, KCU.ORDINAL_POSITION POS, 1 TYPEPOS
    From
        INFORMATION_SCHEMA.TABLE_CONSTRAINTS C
    join
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU
            ON KCU.CONSTRAINT_CATALOG = C.CONSTRAINT_CATALOG
            AND KCU.CONSTRAINT_SCHEMA = C.CONSTRAINT_SCHEMA
            AND KCU.TABLE_NAME = C.TABLE_NAME
            AND KCU.CONSTRAINT_NAME = C.CONSTRAINT_NAME
    where
        C.CONSTRAINT_TYPE = 'PRIMARY KEY'
        AND KCU.TABLE_SCHEMA = '%1$s'
union all
	Select C.CONSTRAINT_NAME CNAME, KCU.TABLE_NAME TNAME, KCU.COLUMN_NAME COLNAME, 'Unique' CTYPE, null DETAIL, KCU.ORDINAL_POSITION POS, 2 TYPEPOS
    From
        INFORMATION_SCHEMA.TABLE_CONSTRAINTS C
    join
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU
            ON KCU.CONSTRAINT_CATALOG = C.CONSTRAINT_CATALOG
            AND KCU.CONSTRAINT_SCHEMA = C.CONSTRAINT_SCHEMA
            AND KCU.TABLE_NAME = C.TABLE_NAME
            AND KCU.CONSTRAINT_NAME = C.CONSTRAINT_NAME
    where
        C.CONSTRAINT_TYPE = 'UNIQUE'
        AND KCU.TABLE_SCHEMA = '%1$s'
	union all
	Select C.CONSTRAINT_NAME CNAME, C.TABLE_NAME TNAME, CU.COLUMN_NAME COLNAME, 'Check' CTYPE, CHECK_CLAUSE DETAIL, 1 POS, 3 TYPEPOS
	From
		INFORMATION_SCHEMA.CHECK_CONSTRAINTS CC
	join
		INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CU
	    on CU.CONSTRAINT_CATALOG = CC.CONSTRAINT_CATALOG
	    and CU.CONSTRAINT_SCHEMA = CC.CONSTRAINT_SCHEMA
	    and CU.CONSTRAINT_NAME = CC.CONSTRAINT_NAME
	join
		INFORMATION_SCHEMA.TABLE_CONSTRAINTS C
	    on C.CONSTRAINT_CATALOG = CC.CONSTRAINT_CATALOG
	    and C.CONSTRAINT_SCHEMA = CC.CONSTRAINT_SCHEMA
	    and C.CONSTRAINT_NAME = CC.CONSTRAINT_NAME
		and C.CONSTRAINT_TYPE = 'CHECK'
		and C.TABLE_SCHEMA = '%1$s'
) pk order by TYPEPOS, CNAME, TNAME, POS, COLNAME
		</constraintsQuery>
        <objectRenderers>
       		<name>Triggers</name>
        	<iconURL>/net/sf/jailer/ui/resource/triggers.png</iconURL>
			<itemDescription>
	        	<iconURL>/net/sf/jailer/ui/resource/trigger.png</iconURL>
			</itemDescription>
			<listQuery>select trigger_name, event_manipulation,event_object_catalog,event_object_schema,event_object_table,action_order,action_condition,action_statement,action_orientation,action_timing,action_reference_old_table,action_reference_new_table,action_reference_old_row,action_reference_new_row,created FROM information_schema.triggers where trigger_schema = '%1$s'</listQuery>
		</objectRenderers>
        <objectRenderers>
       		<name>Sequences</name>
        	<iconURL>/net/sf/jailer/ui/resource/sequences.png</iconURL>
			<itemDescription>
	        	<iconURL>/net/sf/jailer/ui/resource/sequence.png</iconURL>
			</itemDescription>
			<listQuery>select sequence_name, sequence_schema, sequence_catalog, data_type, numeric_precision, numeric_precision_radix, numeric_scale, start_value, minimum_value, maximum_value, increment, cycle_option from information_schema.sequences where sequence_schema = '%1$s'</listQuery>
		</objectRenderers>
    </dbms>

    <!-- for Amazon Redshift -->
    <dbms>
        <id>Redshift</id>
        <familyId>POSTGRESQL</familyId>
        <displayName>Redshift</displayName>
        <urlPattern>jdbc:redshift.*</urlPattern>
        <sqlDialect>
            <needsValuesKeywordForDeletes>true</needsValuesKeywordForDeletes>
            <supportsInClauseForDeletes>true</supportsInClauseForDeletes>
            <supportsMultiRowInserts>true</supportsMultiRowInserts>
            <upsertMode>DB2</upsertMode>
        </sqlDialect>
        <statisticRenovator>
            <scriptFileName>script/postgres/update_statistics.sql</scriptFileName>
        </statisticRenovator>
        <rowidName>ctid</rowidName>
        <rowidType>tid</rowidType>
        <typeReplacement>
            <entry>
                <key>DOUBLE</key>
                <value>DOUBLE PRECISION</value>
            </entry>
            <entry>
                <key>double</key>
                <value>double precision</value>
            </entry>
            <entry>
                <key>bigserial</key>
                <value>int8</value>
            </entry>
            <entry>
                <key>serial8</key>
                <value>int8</value>
            </entry>
            <entry>
                <key>serial</key>
                <value>int4</value>
            </entry>
            <entry>
                <key>serial4</key>
                <value>int4</value>
            </entry>
            <entry>
                <key>NVARCHAR</key>
                <value>VARCHAR</value>
            </entry>
            <entry>
                <key>nvarchar</key>
                <value>varchar</value>
            </entry>
        </typeReplacement>
        <sqlExpressionRule>
       	    <entry>
                <key>point</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>interval</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>inet</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>int4range</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>int8range</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>box</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>cidr</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>circle</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>line</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>lseg</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>macaddr</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>path</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>polygon</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>money</key>
                <value>'$1'::$2</value>
            </entry>
       	    <entry>
                <key>tid</key>
                <value>'$1'::$2</value>
            </entry>
        </sqlExpressionRule>
        <supportsCStyleBackslashEscapes>true</supportsCStyleBackslashEscapes>
        <stringLiteralEscapeSequences>
            <entry>
                <key>'</key>
                <value>''</value>
            </entry>
            <entry>
                <key>\n</key>
                <value>' || chr(10) || '</value>
            </entry>
            <entry>
                <key>\r</key>
                <value>' || chr(13) || '</value>
            </entry>
        </stringLiteralEscapeSequences>
        <sqlLimitSuffix>LIMIT %s</sqlLimitSuffix>
        <fetchSize>4096</fetchSize>

        <!-- NOLOGGING, TABLESPACE-spec., etc. -->
        <tableProperties>CREATE UNLOGGED TABLE</tableProperties>

        <sessionTemporaryTableManager>
            <createIndexPrefix>CREATE INDEX </createIndexPrefix>
            <createIndexSuffix></createIndexSuffix>
            <createTablePrefix>CREATE TEMPORARY TABLE </createTablePrefix>
            <createTableSuffix></createTableSuffix>
            <dropTablePrefix>-- DROP TABLE </dropTablePrefix>
            <indexTablePrefix></indexTablePrefix>
            <needsExclusiveAccess>false</needsExclusiveAccess>
        </sessionTemporaryTableManager>
        <identityInserts>false</identityInserts>
        <datePattern>''yyyy-MM-dd'''::date'</datePattern>
        <timestampPattern>'to_timestamp('''yyyy-MM-dd HH.mm.ss'.${NANO}'', ''YYYY-MM-DD HH24.MI.SS.US'')'</timestampPattern>
        <embeddedLobSizeLimit>3980</embeddedLobSizeLimit>
        <binaryPattern>E'\\x%s'</binaryPattern>
        <avoidLeftJoin>false</avoidLeftJoin>
        <supportsSchemasInIndexDefinitions>false</supportsSchemasInIndexDefinitions>
        <useInlineViewsInDataBrowser>true</useInlineViewsInDataBrowser>
        <identifierQuoteString>"</identifierQuoteString>
		<defaultSchemaQuery>SELECT CURRENT_SCHEMA()</defaultSchemaQuery>
		<viewTextOrDDLQuery>SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = '%1$s' and TABLE_NAME = '%2$s'</viewTextOrDDLQuery>
		<estimatedRowCountQuery>
SELECT c.relname, c.reltuples::bigint AS estimate
FROM   pg_class c
JOIN   pg_namespace n ON n.oid = c.relnamespace
WHERE  n.nspname = '%s'
		</estimatedRowCountQuery>
        <explainPrepare></explainPrepare>
        <explainQuery>explain %1$s</explainQuery>
        <explainCleanup></explainCleanup>
        <functionSourceQuery>
SELECT 'Function', p.proname || '(' || pg_catalog.pg_get_function_arguments(p.oid) || ') RETURNS ' ||  pg_catalog.pg_get_function_result(p.oid)
FROM pg_catalog.pg_proc p
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE p.proname = '%2$s' AND n.nspname = '%1$s'
        </functionSourceQuery>
        <constraintsQuery>
Select CNAME, TNAME, COLNAME, CTYPE, DETAIL From
(
	Select KCU.CONSTRAINT_NAME CNAME, KCU.TABLE_NAME TNAME, KCU.COLUMN_NAME COLNAME, 'PK' CTYPE, null DETAIL, KCU.ORDINAL_POSITION POS, 1 TYPEPOS
    From
        INFORMATION_SCHEMA.TABLE_CONSTRAINTS C
    join
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU
            ON KCU.CONSTRAINT_CATALOG = C.CONSTRAINT_CATALOG
            AND KCU.CONSTRAINT_SCHEMA = C.CONSTRAINT_SCHEMA
            AND KCU.TABLE_NAME = C.TABLE_NAME
            AND KCU.CONSTRAINT_NAME = C.CONSTRAINT_NAME
    where
        C.CONSTRAINT_TYPE = 'PRIMARY KEY'
        AND KCU.TABLE_SCHEMA = '%1$s'
union all
	Select C.CONSTRAINT_NAME CNAME, KCU.TABLE_NAME TNAME, KCU.COLUMN_NAME COLNAME, 'Unique' CTYPE, null DETAIL, KCU.ORDINAL_POSITION POS, 2 TYPEPOS
    From
        INFORMATION_SCHEMA.TABLE_CONSTRAINTS C
    join
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU
            ON KCU.CONSTRAINT_CATALOG = C.CONSTRAINT_CATALOG
            AND KCU.CONSTRAINT_SCHEMA = C.CONSTRAINT_SCHEMA
            AND KCU.TABLE_NAME = C.TABLE_NAME
            AND KCU.CONSTRAINT_NAME = C.CONSTRAINT_NAME
    where
        C.CONSTRAINT_TYPE = 'UNIQUE'
        AND KCU.TABLE_SCHEMA = '%1$s'
	union all
	Select C.CONSTRAINT_NAME CNAME, C.TABLE_NAME TNAME, CU.COLUMN_NAME COLNAME, 'Check' CTYPE, CHECK_CLAUSE DETAIL, 1 POS, 3 TYPEPOS
	From
		INFORMATION_SCHEMA.CHECK_CONSTRAINTS CC
	join
		INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CU
	    on CU.CONSTRAINT_CATALOG = CC.CONSTRAINT_CATALOG
	    and CU.CONSTRAINT_SCHEMA = CC.CONSTRAINT_SCHEMA
	    and CU.CONSTRAINT_NAME = CC.CONSTRAINT_NAME
	join
		INFORMATION_SCHEMA.TABLE_CONSTRAINTS C
	    on C.CONSTRAINT_CATALOG = CC.CONSTRAINT_CATALOG
	    and C.CONSTRAINT_SCHEMA = CC.CONSTRAINT_SCHEMA
	    and C.CONSTRAINT_NAME = CC.CONSTRAINT_NAME
		and C.CONSTRAINT_TYPE = 'CHECK'
		and C.TABLE_SCHEMA = '%1$s'
) pk order by TYPEPOS, CNAME, TNAME, POS, COLNAME
		</constraintsQuery>
        <objectRenderers>
       		<name>Triggers</name>
        	<iconURL>/net/sf/jailer/ui/resource/triggers.png</iconURL>
			<itemDescription>
	        	<iconURL>/net/sf/jailer/ui/resource/trigger.png</iconURL>
			</itemDescription>
			<listQuery>select trigger_name, event_manipulation,event_object_catalog,event_object_schema,event_object_table,action_order,action_condition,action_statement,action_orientation,action_timing,action_reference_old_table,action_reference_new_table,action_reference_old_row,action_reference_new_row,created FROM information_schema.triggers where trigger_schema = '%1$s'</listQuery>
		</objectRenderers>
        <objectRenderers>
       		<name>Sequences</name>
        	<iconURL>/net/sf/jailer/ui/resource/sequences.png</iconURL>
			<itemDescription>
	        	<iconURL>/net/sf/jailer/ui/resource/sequence.png</iconURL>
			</itemDescription>
			<listQuery>select sequence_name, sequence_schema, sequence_catalog, data_type, numeric_precision, numeric_precision_radix, numeric_scale, start_value, minimum_value, maximum_value, increment, cycle_option from information_schema.sequences where sequence_schema = '%1$s'</listQuery>
		</objectRenderers>
    </dbms>

    <!-- for Cloudscape -->
    <dbms>
        <id>CLOADSCAPE</id>
        <displayName>Cloudscape</displayName>
        <urlPattern>jdbc:cloudscape.*</urlPattern>
        <sqlDialect>
            <needsValuesKeywordForDeletes>false</needsValuesKeywordForDeletes>
            <supportsInClauseForDeletes>false</supportsInClauseForDeletes>
            <supportsMultiRowInserts>false</supportsMultiRowInserts>
            <upsertMode>FROM_JL_DUAL</upsertMode>
        </sqlDialect>
        <statisticRenovator>
            <scriptFileName>script/cloudscape/update_statistics.sql</scriptFileName>
        </statisticRenovator>

        <!-- NOLOGGING, TABLESPACE-spec., etc. -->
        <tableProperties></tableProperties>

        <identityInserts>false</identityInserts>
        <embeddedLobSizeLimit>3980</embeddedLobSizeLimit>
        <binaryPattern>x'%s'</binaryPattern>
        <avoidLeftJoin>false</avoidLeftJoin>
        <useInlineViewsInDataBrowser>true</useInlineViewsInDataBrowser>
        <identifierQuoteString>"</identifierQuoteString>
    </dbms>

    <!-- for Firebird -->
    <dbms>
        <id>FIREBIRD</id>
        <displayName>Firebird</displayName>
        <urlPattern>jdbc:firebirdsql.*</urlPattern>
        <sqlDialect>
            <needsValuesKeywordForDeletes>false</needsValuesKeywordForDeletes>
            <supportsInClauseForDeletes>false</supportsInClauseForDeletes>
            <supportsMultiRowInserts>false</supportsMultiRowInserts>
            <upsertMode>FROM_JL_DUAL</upsertMode>
        </sqlDialect>
        <statisticRenovator>
            <scriptFileName>script/firebird/update_statistics.sql</scriptFileName>
        </statisticRenovator>
        <typeReplacement>
            <entry>
                <key>DOUBLE</key>
                <value>DOUBLE PRECISION</value>
            </entry>
        </typeReplacement>

        <!-- NOLOGGING, TABLESPACE-spec., etc. -->
        <tableProperties></tableProperties>

        <identityInserts>false</identityInserts>
        <embeddedLobSizeLimit>3980</embeddedLobSizeLimit>
        <binaryPattern>x'%s'</binaryPattern>
        <avoidLeftJoin>false</avoidLeftJoin>
        <useInlineViewsInDataBrowser>true</useInlineViewsInDataBrowser>
        <identifierQuoteString>"</identifierQuoteString>
    </dbms>

    <!-- for Derby -->
    <dbms>
        <id>DERBY</id>
        <displayName>Derby</displayName>
        <urlPattern>jdbc:derby.*</urlPattern>
        <sqlDialect>
            <needsValuesKeywordForDeletes>false</needsValuesKeywordForDeletes>
            <supportsInClauseForDeletes>false</supportsInClauseForDeletes>
            <supportsMultiRowInserts>false</supportsMultiRowInserts>
            <upsertMode>FROM_JL_DUAL</upsertMode>
        </sqlDialect>
        <statisticRenovator>
            <scriptFileName>script/derby/update_statistics.sql</scriptFileName>
        </statisticRenovator>

        <!-- NOLOGGING, TABLESPACE-spec., etc. -->
        <tableProperties></tableProperties>

        <identityInserts>false</identityInserts>
        <embeddedLobSizeLimit>3980</embeddedLobSizeLimit>
        <binaryPattern>x'%s'</binaryPattern>
        <avoidLeftJoin>false</avoidLeftJoin>
        <useInlineViewsInDataBrowser>true</useInlineViewsInDataBrowser>
        <identifierQuoteString>"</identifierQuoteString>
    </dbms>

    <!-- for SyBASE -->
    <dbms>
        <id>SYBASE</id>
        <displayName>Sybase</displayName>
        <urlPattern>jdbc:sybase.*|jdbc:jtds:sybase.*</urlPattern>
        <sqlDialect>
            <needsValuesKeywordForDeletes>false</needsValuesKeywordForDeletes>
            <supportsInClauseForDeletes>false</supportsInClauseForDeletes>
            <supportsMultiRowInserts>true</supportsMultiRowInserts>
            <upsertMode>DB2</upsertMode>
        </sqlDialect>
        <statisticRenovator>
            <scriptFileName>script/sybase/update_statistics.sql</scriptFileName>
        </statisticRenovator>
        <sqlLimitSuffix>TOP %s</sqlLimitSuffix>

        <!-- NOLOGGING, TABLESPACE-spec., etc. -->
        <tableProperties></tableProperties>

        <sessionTemporaryTableManager>
			<dmlTableReferencePrefix>#</dmlTableReferencePrefix>
			<ddlTableReferencePrefix>#</ddlTableReferencePrefix>
			<createTablePrefix>CREATE TABLE </createTablePrefix>
			<createTableSuffix></createTableSuffix>
			<createIndexPrefix>CREATE INDEX </createIndexPrefix>
			<createIndexSuffix></createIndexSuffix>
			<indexTablePrefix></indexTablePrefix>
			<dropTablePrefix>DROP TABLE </dropTablePrefix>
            <needsExclusiveAccess>true</needsExclusiveAccess>
        </sessionTemporaryTableManager>
        <exportBlocks>timestamp</exportBlocks>
        <exportBlocks>TIMESTAMP</exportBlocks>
 		<typeReplacement>
            <entry>
                <key>timestamp</key>
                <value>datetime</value>
            </entry>
            <entry>
                <key>TIMESTAMP</key>
                <value>DATETIME</value>
            </entry>
        </typeReplacement>
        <clobTypesRE>varchar\(max\)|text\(.*\)</clobTypesRE>
        <nClobTypesRE>nvarchar\(max\)|xml\(.*\)|ntext\(.*\)</nClobTypesRE>
        <blobTypesRE>varbinary\(max\)|image\(.*\)</blobTypesRE>
        <identityInserts>true</identityInserts>
        <embeddedLobSizeLimit>3980</embeddedLobSizeLimit>
        <binaryPattern>0x%s</binaryPattern>
        <avoidLeftJoin>false</avoidLeftJoin>
        <useInlineViewsInDataBrowser>true</useInlineViewsInDataBrowser>
        <nullableContraint>NULL</nullableContraint>
        <identifierQuoteString>"</identifierQuoteString>
        <limitTransactionSize>
        	<limit>30000</limit>
        	<afterSelect>TOP(%1$s)</afterSelect>
        </limitTransactionSize>
    </dbms>

    <!-- for SQLite -->
    <dbms>
        <id>SQLITE</id>
        <displayName>SQLite</displayName>
        <urlPattern>jdbc:sqlite.*</urlPattern>
        <sqlDialect>
            <needsValuesKeywordForDeletes>false</needsValuesKeywordForDeletes>
            <supportsInClauseForDeletes>false</supportsInClauseForDeletes>
            <supportsMultiRowInserts>false</supportsMultiRowInserts>
            <upsertMode>UNION_ALL</upsertMode>
        </sqlDialect>
        <typeReplacement>
            <entry>
                <key>NVARCHAR</key>
                <value>VARCHAR</value>
            </entry>
            <entry>
                <key>nvarchar</key>
                <value>varchar</value>
            </entry>
        </typeReplacement>
        <sqlLimitSuffix>LIMIT %s</sqlLimitSuffix>

        <!-- NOLOGGING, TABLESPACE-spec., etc. -->
        <tableProperties></tableProperties>

        <sessionTemporaryTableManager>
            <createIndexPrefix>CREATE INDEX </createIndexPrefix>
            <createIndexSuffix></createIndexSuffix>
            <createTablePrefix>CREATE TEMPORARY TABLE </createTablePrefix>
            <createTableSuffix></createTableSuffix>
            <dropTablePrefix>DROP TABLE </dropTablePrefix>
            <indexTablePrefix></indexTablePrefix>
            <needsExclusiveAccess>true</needsExclusiveAccess>
        </sessionTemporaryTableManager>
        <identityInserts>false</identityInserts>
        <embeddedLobSizeLimit>3980</embeddedLobSizeLimit>
        <binaryPattern>x'%s'</binaryPattern>
        <avoidLeftJoin>false</avoidLeftJoin>
        <useInlineViewsInDataBrowser>true</useInlineViewsInDataBrowser>
        <identifierQuoteString>"</identifierQuoteString>
    </dbms>

    <!-- for HSQLDB -->
    <dbms>
        <id>HSQL</id>
        <displayName>HSQLDB</displayName>
        <urlPattern>jdbc:hsqldb.*</urlPattern>
        <sqlDialect>
            <needsValuesKeywordForDeletes>false</needsValuesKeywordForDeletes>
            <supportsInClauseForDeletes>false</supportsInClauseForDeletes>
            <supportsMultiRowInserts>false</supportsMultiRowInserts>
            <upsertMode>FROM_JL_DUAL</upsertMode>
        </sqlDialect>
        <sqlLimitSuffix>LIMIT %s</sqlLimitSuffix>

        <!-- NOLOGGING, TABLESPACE-spec., etc. -->
        <tableProperties>NOLOGGING</tableProperties>

        <identityInserts>false</identityInserts>
        <embeddedLobSizeLimit>3980</embeddedLobSizeLimit>
        <binaryPattern>x'%s'</binaryPattern>
        <avoidLeftJoin>false</avoidLeftJoin>
        <useInlineViewsInDataBrowser>true</useInlineViewsInDataBrowser>
        <identifierQuoteString>"</identifierQuoteString>
    </dbms>

    <!-- for H2 -->
    <dbms>
        <id>H2</id>
        <displayName>H2</displayName>
        <urlPattern>jdbc:h2.*</urlPattern>
        <sqlDialect>
            <needsValuesKeywordForDeletes>false</needsValuesKeywordForDeletes>
            <supportsInClauseForDeletes>true</supportsInClauseForDeletes>
            <supportsMultiRowInserts>true</supportsMultiRowInserts>
            <upsertMode>UNION_ALL</upsertMode>
        </sqlDialect>
        <jdbcProperties>
            <entry>
                <key>MODE</key>
                <value>DB2</value>
            </entry>
        </jdbcProperties>
        <typeReplacement>
            <entry>
                <key>NVARCHAR</key>
                <value>VARCHAR</value>
            </entry>
            <entry>
                <key>CHARACTER VARYING</key>
                <value>VARCHAR</value>
            </entry>
        </typeReplacement>
        <stringLiteralEscapeSequences>
            <entry>
                <key>'</key>
                <value>''</value>
            </entry>
            <entry>
                <key>\n</key>
                <value>' || char(10) || '</value>
            </entry>
            <entry>
                <key>\r</key>
                <value>' || char(13) || '</value>
            </entry>
        </stringLiteralEscapeSequences>
        <sqlLimitSuffix>LIMIT %s</sqlLimitSuffix>

        <!-- NOLOGGING, TABLESPACE-spec., etc. -->
        <tableProperties></tableProperties>

        <identityInserts>false</identityInserts>
        <embeddedLobSizeLimit>3980</embeddedLobSizeLimit>
        <binaryPattern>x'%s'</binaryPattern>
        <avoidLeftJoin>false</avoidLeftJoin>
		<defaultSchemaQuery>SELECT SCHEMA()</defaultSchemaQuery>
        <useInlineViewsInDataBrowser>false</useInlineViewsInDataBrowser>
		<estimatedRowCountQuery>select TABLE_NAME, ROW_COUNT_ESTIMATE from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA = '%s'</estimatedRowCountQuery>
        <virtualColumnsQuery>SELECT TABLE_NAME, COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${SCHEMA}' AND IS_COMPUTED</virtualColumnsQuery>
        <identifierQuoteString>"</identifierQuoteString>
        <explainPrepare></explainPrepare>
        <explainQuery>explain %1$s</explainQuery>
        <explainCleanup></explainCleanup>
        <constraintsQuery>
Select CNAME, TNAME, COLNAME, CTYPE, DETAIL From
(
	Select C.CONSTRAINT_NAME CNAME, TCC.TABLE_NAME TNAME, '' COLNAME, 'Check' CTYPE, C.CHECK_CLAUSE DETAIL, 1 POS, 3 TYPEPOS
	From
		INFORMATION_SCHEMA.CHECK_CONSTRAINTS C join INFORMATION_SCHEMA.TABLE_CONSTRAINTS TCC on C.CONSTRAINT_CATALOG = TCC.TABLE_CATALOG and C.CONSTRAINT_SCHEMA = TCC.TABLE_SCHEMA and C.CONSTRAINT_NAME = TCC.CONSTRAINT_NAME
	where
		TCC.TABLE_SCHEMA = 'PUBLIC'
) pk order by TYPEPOS, CNAME, TNAME, POS, COLNAME

fallback contraint query

Select CNAME, TNAME, COLNAME, CTYPE, DETAIL From
(
	Select C.CONSTRAINT_NAME CNAME, C.TABLE_NAME TNAME, C.COLUMN_LIST COLNAME, 'PK' CTYPE, null DETAIL, 1 POS, 1 TYPEPOS
	From
		INFORMATION_SCHEMA.CONSTRAINTS C
	where
		C.CONSTRAINT_TYPE = 'PRIMARY KEY'
		AND C.TABLE_SCHEMA = '%1$s'
	union all
	Select I.INDEX_NAME CNAME, I.TABLE_NAME TNAME, I.COLUMN_NAME COLNAME, 'Unique' CTYPE, null DETAIL, I.ORDINAL_POSITION POS, 2 TYPEPOS
	From
		INFORMATION_SCHEMA.INDEXES I
	where
		I.INDEX_TYPE_NAME = 'UNIQUE INDEX'
		AND I.TABLE_SCHEMA = '%1$s'
	union all
	Select C.CONSTRAINT_NAME CNAME, C.TABLE_NAME TNAME, case when C.COLUMN_LIST is null then '' else C.COLUMN_LIST end COLNAME, 'Check' CTYPE, CHECK_EXPRESSION DETAIL, 1 POS, 3 TYPEPOS
	From
		INFORMATION_SCHEMA.CONSTRAINTS C
	where
		C.CONSTRAINT_TYPE = 'CHECK'
		AND C.TABLE_SCHEMA = '%1$s'
) pk order by TYPEPOS, CNAME, TNAME, POS, COLNAME
		</constraintsQuery>
        <objectRenderers>
       		<name>Triggers</name>
        	<iconURL>/net/sf/jailer/ui/resource/triggers.png</iconURL>
			<itemDescription>
	        	<iconURL>/net/sf/jailer/ui/resource/trigger.png</iconURL>
			</itemDescription>
			<listQuery>select TRIGGER_NAME,
       TRIGGER_SCHEMA,
       EVENT_MANIPULATION,
       EVENT_OBJECT_CATALOG,
       EVENT_OBJECT_SCHEMA,
       EVENT_OBJECT_TABLE,
       ACTION_ORIENTATION,
       ACTION_TIMING,
       IS_ROLLBACK,
       JAVA_CLASS,
       QUEUE_SIZE,
       NO_WAIT,
       REMARKS FROM information_schema.triggers WHERE TRIGGER_SCHEMA = '%1$s'</listQuery>
		</objectRenderers>
  	  	<objectRenderers>
       		<name>Sequences</name>
        	<iconURL>/net/sf/jailer/ui/resource/sequences.png</iconURL>
			<itemDescription>
	        	<iconURL>/net/sf/jailer/ui/resource/sequence.png</iconURL>
			</itemDescription>
			<listQuery>select SEQUENCE_NAME,
       SEQUENCE_SCHEMA,
       DATA_TYPE,
       NUMERIC_PRECISION,
       NUMERIC_PRECISION_RADIX,
       NUMERIC_SCALE,
       START_VALUE,
       MINIMUM_VALUE,
       MAXIMUM_VALUE,
       INCREMENT,
       CYCLE_OPTION,
       DECLARED_DATA_TYPE,
       DECLARED_NUMERIC_PRECISION,
       DECLARED_NUMERIC_SCALE,
       BASE_VALUE,
       CACHE,
       REMARKS from information_schema.sequences where SEQUENCE_SCHEMA = '%1$s'</listQuery>
		</objectRenderers>
      </dbms>

</configuration>


Each national event organizer of the 2018 American Rally Association will make available a "Subaru Early Entry Fee" to the first ten (10) paid Subaru teams in the National and the first (ten) 10 paid Subaru entries in the concurrent Regional rally, should one exist.
The "Subaru Early Entry Fee" will be $500 below the event's posted Early Entry Fee for a National entry, and $300 below the posted Early Entry Fee for a Regional entry. This entry fee credit is available to ANY class of Subaru.
The credit is handled entirely between the event organizer and the entering team. Teams shall receive the credit when they pay their entry to the event organizer.
The first 10 Subaru National entries, any class or model year, receive a $500 credit off the Event's respective National Early Entry Fee at all 2018 ARA National level events.
The first 10 Subaru Regional entries, any class or model year, receive a $300 credit off the Regional Early Entry Fee at Regional ARA events which run concurrent to an ARA National event. The entry fee discount does not apply to any stand-alone ARA Regional level rally events.
After an Event's respective "Early Entry Deadline" passes there are no credits provided. Each event organizer may dictate the terms and details of the entry deadlines.
The Event's standard Early Entry Fee is dictated solely by the respective Event Organizer and this program will only reduce that fee by the above stated amounts for Subaru drivers. Event Organizers shall list this reduced fee as "The Subaru Early Entry Fee" or other mutually agreeable name.
The early entry fee credit is ONLY available at the rounds that comprise the 2018 American Rally Association National Championship.
Subaru drivers do NOT need to pre-register with Vermont SportsCar to receive this credit. However, the participants' contact information may be provided by the Event Organizers to Vermont SportsCar.
competitor does not start a USA based ARA national event in the 2017 the registrant forfeits any early entry credit earned at a Canadian round.
Q: What if an entrant drops out of the event and requires a refund?
A: Event Organizer refunds the entry fee, in accordance with the event's own refund policy and may apply the applicable Entry credit to the 11th entered Subaru who paid an Early Entry fee, in the form of a check or credit card refund. This is at the discretion of the event organizer.
A: Event Scrutineers will be aware of which participants received the Subaru Early Entry Fee. If a participant changes vehicles and is no longer entering the event with a Subaru he/she will be charged the difference in entry fees before being allowed to start the event.
Q: What if there are less than 10 Subaru entrants who receive the Subaru Early Entry Credit in either National or Regional?
A: Unused credits will not be transferred or utilized.


text:
// ----------------------------------------------------------------------------------
//
// Copyright Microsoft Corporation
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ----------------------------------------------------------------------------------

using Microsoft.Azure.Commands.ScenarioTest.SqlTests;
using Microsoft.Azure.ServiceManagemenet.Common.Models;
using Microsoft.WindowsAzure.Commands.ScenarioTest;
using Xunit;
using Xunit.Abstractions;

namespace Microsoft.Azure.Commands.Sql.Test.ScenarioTests
{
    public class DataMaskingTests : SqlTestsBase
    {
        public DataMaskingTests(ITestOutputHelper output)
        {
            XunitTracingInterceptor.AddToContext(new XunitTracingInterceptor(output));
        }

        [Fact]
        [Trait(Category.AcceptanceType, Category.BVT)]
        public void TestDatabaseDataMaskingPrivilegedUsersChanges()
        {
            RunPowerShellTest("Test-DatabaseDataMaskingPrivilegedUsersChanges");
        }

        [Fact]
        [Trait(Category.AcceptanceType, Category.BVT)]
        public void TestDatabaseDataMaskingBasicRuleLifecycle()
        {
            RunPowerShellTest("Test-DatabaseDataMaskingBasicRuleLifecycle");
        }

        [Fact]
        [Trait(Category.AcceptanceType, Category.BVT)]
        public void TestDatabaseDataMaskingNumberRuleLifecycle()
        {
            RunPowerShellTest("Test-DatabaseDataMaskingNumberRuleLifecycle");
        }

        [Fact]
        [Trait(Category.AcceptanceType, Category.BVT)]
        public void TestDatabaseDataMaskingTextRuleLifecycle()
        {
            RunPowerShellTest("Test-DatabaseDataMaskingTextRuleLifecycle");
        }

        [Fact(Skip = "Waiting for database structure validation")]
        [Trait(Category.AcceptanceType, Category.BVT)]
        public void TestDatabaseDataMaskingRuleCreationFailures()
        {
            RunPowerShellTest("Test-DatabaseDataMaskingRuleCreationFailures");
        }

        [Fact]
        [Trait(Category.AcceptanceType, Category.BVT)]
        public void TestDatabaseDataMaskingRuleCreationWithoutPolicy()
        {
            RunPowerShellTest("Test-DatabaseDataMaskingRuleCreationWithoutPolicy");
        }
    }
}

redpajama_set_name: RedPajamaGithub


It varies based on driving conditions, driving habits, and vehicle condition.
Use the recommended viscosity motor oil, displaying the API Certification Seal).
If your vehicle has a manual transmission, you can boost your fuel economy by up shifting as early as possible.


When you are mounting an effective online-marketing campaign, it's critical that you pay attention to website design—not just what your site looks like, but how it functions. You can have the best SEO campaign on the planet, but if your website isn't well-designed, your visitors won't stay. In fact, studies confirm that nearly half of all web visitors hit the back button or simply close a browser if it takes more than three seconds to load.
At GetLegal, we've spent years researching all the factors that optimize user experience on a website. We work hard to stay current with all new technologies and trends, so that our customers stay ahead of the curve. To learn more or obtain a free audit of your existing online-marketing campaign, contact our office online or call us at 877-359-7077.
Design That Gets You Noticed!
You want a website design the makes an immediate and unique impression, one that highlights your professionalism and practice. Our experienced designers use proven design elements to help you stand out from the crowd.
You want design that's tailored to your potential visitors, whether they are searching on a mobile device, laptop, tablet or desktop computer. We have the skill, knowledge and expertise to build cross-functionality, including state-of-the-art mobile strategies, so that any visitor will be able to easily navigate your site and contact you.
Your website design functions best when it's an integral component of a well-conceived and properly-executed marketing solution. Our designers are part of a team—we work closely with experienced writers and SEO consultants to ensure the best synergy for your overall marketing campaign. To learn more, see our broad spectrum of online-marketing solutions for legal professionals.