--- /dev/null
+# Licensed to the Apache Software Foundation (ASF) under one or more\r
+# contributor license agreements. See the NOTICE file distributed with\r
+# this work for additional information regarding copyright ownership.\r
+# The ASF licenses this file to you under the Apache License, Version 2.0\r
+# (the "License"); you may not use this file except in compliance with\r
+# the License. You may obtain a copy of the License at\r
+#\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# Unless required by applicable law or agreed to in writing, software\r
+# distributed under the License is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+#\r
+#\r
+#\r
+# ANY CHANGE MADE TO THIS FILE SHOULD PROBABLY ALSO BE MADE TO\r
+# $WS/java/com/ibm/db2j/impl/Connectivity/JDBC/Local/metadata.properties\r
+#\r
+# This file is used by DRDA to determine values for methods\r
+# from java.sql.DatabaseMetadata. We try to emulate the SYSIBM\r
+# stored procedures that are used in DB2 for the MetaData. \r
+# These are called from\r
+# $WS/drda/jcc/src/com/ibm/db2/jcc/am/DatabaseMetaData\r
+#\r
+# JDBC driver will take the value and perform\r
+# a statement.execute() request on it, returning the result set or using the\r
+# result set to produce an answer of the required type and format for the\r
+# DatabaseMetadata method. If the query has AS clauses in its select list items,\r
+# you can be pretty sure that the JDBC driver was looking for a result set,\r
+# because it specifies what it wants the column names to be.\r
+#\r
+#\r
+# Note that property values can span multiple lines, by ending the line with a \\r
+#\r
+# Note: be sure to always enter SQL keywords in CAPS, this is both\r
+# for convention, and because of the way the parser uppercases\r
+# things (so it is purportedly faster that way).\r
+#\r
+# REMIND: using SYSALIASES; need to deal with ProcedureColumns still.\r
+# there are no procedures or metadata about them in our system yet.\r
+# NOTE: the order by would include PROCEDURE_SCHEM, but it is always ''\r
+# so we leave it out.\r
+#\r
+# PROCEDURE_TYPE is always procedureResultUnknown as it could map to\r
+# multiple methods, some of which could return a value and some not.\r
+#\r
+# Now that we have java Stored procedures we can more easily implement these calls\r
+# Thus, $WS/java/com/ibm/db2j/catalog/SystemProcedures now calls the LocalDatabaseMetadata methods.\r
+\r
+# call stored procedure SQLProcedures\r
+# SYSIBM.SQLProcedures(\r
+# CatalogName varchar(128),\r
+# SchemaName varchar(128),\r
+# ProcName varchar(128),\r
+# Options varchar(4000))\r
+#\r
+SQLPROCEDURES=CALL SYSIBM.SQLPROCEDURES(?, ?, ?, ?)\r
+\r
+# getSchemas\r
+# DB2 overloads the SQLTABLES stored procedure for this\r
+# but jcc has specific code now to make an exception for Cloudscape\r
+GETSCHEMAS=CALL SYSIBM.SQLTABLES('', '', '', '', 'GETSCHEMAS=1')\r
+\r
+\r
+#getTables\r
+# SYSIBM.SQLTABLES(\r
+# CatalogName varchar(128),\r
+# SchemaName varchar(128),\r
+# TableName varchar(128),\r
+# TaleType varchar(4000),\r
+# Options varchar(4000))\r
+#\r
+SQLTABLES=CALL SYSIBM.SQLTABLES(?, ?, ?, ?, ?)\r
+ \r
+# getCrossReference, getExportedKeys, getImportedKeys \r
+# SYSIBM.SQLFOREGNKEYS(\r
+# PKCatalogName varchar(128),\r
+# PKSchemaName varchar(128),\r
+# PKTableName varchar(128),\r
+# FKCatalogName varchar(128),\r
+# FKSchemaName varchar(128),\r
+# FKTableName varchar(128),\r
+# Options varchar(4000))\r
+#\r
+SQLFOREIGNKEYS=CALL SYSIBM.SQLFOREIGNKEYS(?, ?, ?, ?, ?, ?, ?)\r
+ \r
+\r
+# getProcedureColumns\r
+# SYSIBM.SQLProcedureCols(\r
+# CatalogName varchar(128),\r
+# SchemaName varchar(128),\r
+# ProcName varchar(128),\r
+# ParamName varchar(128),\r
+# Options varchar(4000))\r
+#\r
+#\r
+#\r
+SQLPROCEDURECOLS=CALL SYSIBM.SQLPROCEDURECOLS(?, ?, ?, ?, ?)\r
+ \r
+\r
+# This wants a result set with a specific column name,\r
+# DB2 overloads SQLGETTABLES, but jcc now has exception code for Cloudscape...\r
+GETTABLETYPES=CALL SYSIBM.SQLTABLES('', '', '', '', 'GETTABLETYPES=1')\r
+\r
+#getColumns\r
+# SYSIBM.SQLColumns(\r
+# CatalogName varchar(128),\r
+# SchemaName varchar(128),\r
+# TableName varchar(128),\r
+# ColumnName varchar(128),\r
+# Options varchar(4000))\r
+\r
+# REMIND: the true or is to guard against nulls\r
+# REMIND: need to check that sqltype column starts with SERIALIZE...\r
+#\r
+# DECIMAL_DIGITS returns scale for DECIMAL and NUMERIC,\r
+# otherwise it returns null. This is as per JavaSoft.\r
+#\r
+# CHAR_OCTET_LENGTH returns maximumWidth() * 2 for\r
+# character types to account for the fact that we\r
+# java uses 2 bytes per char and getMaximumWidth()\r
+# returns the string length, not the length in bytes.\r
+#\r
+SQLCOLUMNS=CALL SYSIBM.SQLCOLUMNS(?, ?, ?, ?, ?)\r
+\r
+\r
+\r
+# SYSIBM.SQLColPrivileges(\r
+# CatalogName varchar(128),\r
+# SchemaName varchar(128),\r
+# TableName varchar(128),\r
+# ColumnName varchar(128),\r
+# Options varchar(4000))\r
+#\r
+# REMIND: this query is set up to return 0 rows of the right shape, since\r
+# there are none of these or metadata about them in our system yet.\r
+SQLCOLPRIVILEGES=CALL SYSIBM.SQLCOLPRIVILEGES(?, ?, ?, ?, ?)\r
+\r
+\r
+# SYSIBM.SQLTablePrivileges(\r
+# CatalogName varchar(128),\r
+# SchemaName varchar(128),\r
+# TableName varchar(128),\r
+# Options varchar(4000))\r
+#\r
+# REMIND: this query is set up to return 0 rows of the right shape, since\r
+# there are none of these or metadata about them in our system yet.\r
+SQLTABLEPRIVILEGES=CALL SYSIBM.SQLTABLEPRIVILEGES(?, ?, ?, ?)\r
+\r
+\r
+# SYSIBM.SQLPrimaryKeys(\r
+# CatalogName varchar(128),\r
+# SchemaName varchar(128),\r
+# TableName varchar(128),\r
+# Options varchar(4000))\r
+#\r
+SQLPRIMARYKEYS=CALL SYSIBM.SQLPRIMARYKEYS(?, ?, ?, ?)\r
+\r
+# getTypeInfo\r
+# SYSIBM.SQLGetTypeInfo (IN DATATYPE SMALLINT,\r
+# IN Options VARCHAR(4000))\r
+#\r
+#\r
+#\r
+SQLGETTYPEINFO=CALL SYSIBM.SQLGETTYPEINFO(?, ?)\r
+ \r
+\r
+# getIndexInfo\r
+# SYSIBM.SQLStatistics(\r
+# CatalogName varchar(128),\r
+# SchemaName varchar(128),\r
+# TableName varchar(128),\r
+# Unique Smallint, // WARNING: 0 = unique, 1 = all keys\r
+# Reserved Smallint,\r
+# Options varchar(4000))\r
+#\r
+SQLSTATISTICS=CALL SYSIBM.SQLSTATISTICS(?, ?, ?, ?, ?, ?)\r
+\r
+############################################\r
+# \r
+# getBestRowIdentifier queries\r
+#\r
+############################################\r
+#getBestRowIdentifier, getVersionColumns\r
+# call stored procedure\r
+# SYSIBM.SQLSPECIALCOLUMNS ( IN COLTYPE SMALLINT,\r
+# IN CATALOG_NAME VARCHAR(128),\r
+# IN SCHEMA_NAME VARCHAR(128),\r
+# IN TABLE_NAME VARCHAR(128),\r
+# IN SCOPE SMALLINT,\r
+# IN NULLABLE SMALLINT,\r
+# IN OPTIONS VARCHAR(4000) )\r
+#\r
+SQLSPECIALCOLUMNS=CALL SYSIBM.SQLSPECIALCOLUMNS(?, ?, ?, ?, ?, ?, ?)\r
+\r
+\r
+# SYSIBM.SQLUDTS ( IN CATALOG_NAME VARCHAR(128),\r
+# IN SCHEMA_NAME_PATTERN VARCHAR(128),\r
+# IN TYPE_NAME_PATTERN VARCHAR(128),\r
+# IN UDTTYPES VARCHAR(128),\r
+# IN OPTIONS VARCHAR(4000) )\r
+SQLUDTS=CALL SYSIBM.SQLUDTS(?, ?, ?, ?, ?)\r
+\r
+\r
+# REMIND: this query is set up to return 0 rows of the right shape, since\r
+# there are no catalogs or metadata about them in our system yet.\r
+# would have order by table_cat if it mattered...\r
+# ORDER BY TABLE_CAT\r
+# DB2 overloads SQLGETTABLES, but jcc now has exception code for Cloudscape...\r
+GETCATALOGS=CALL SYSIBM.SQLTABLES('', '', '', '', 'GETCATALOGS=1')\r
+\r
+#SYSIBM.Metadata gets several miscellanous database metadata values\r
+# for caching on the JCC side\r
+#\r
+# METADATA column comments\r
+#\r
+# column 97:\r
+# Encoding for DatabaseMetaData#supportsResultSetConcurrency.\r
+# If a concurrency is given for a type, supportsResultSetConcurrency \r
+# will return true for that combination. Absence means false.\r
+# String syntax: \r
+# <type> { "," <concurrency>}* { ";" <type> { "," <concurrency>}* }}*\r
+#\r
+# <type> ::= <the integer value for that type from interface\r
+# java.sql.Resultset i.e. TYPE_FORWARD_ONLY is 1003>\r
+# <concurrency> ::= <the integer value for that concurrency\r
+# from interface java.sql.Resultset, i.e.\r
+# CONCUR_UPDATABLE is 1008> \r
+#\r
+# Please keep in synch with the client's decoding (in \r
+# DatabaseMetaData.java)\r
+#\r
+# columns 98--106:\r
+#\r
+# For the following *AreVisible and *AreDetected methods.\r
+# The encoding is: \r
+# If a type is given, the metadata method will give true for\r
+# that type, else false.\r
+#\r
+# column 98 Encoding for DatabaseMetaData#ownUpdatesAreVisible \r
+# column 99 Encoding for DatabaseMetaData#ownDeletesAreVisible \r
+# column 100 Encoding for DatabaseMetaData#ownInsertsAreVisible \r
+#\r
+# column 101 Encoding for DatabaseMetaData#othersUpdatesAreVisible \r
+# column 102 Encoding for DatabaseMetaData#othersDeletesAreVisible \r
+# column 103 Encoding for DatabaseMetaData#othersInsertsAreVisible \r
+#\r
+# column 104 Encoding for DatabaseMetaData#updatesAreDetected \r
+# column 105 Encoding for DatabaseMetaData#deletesAreDetected \r
+# column 106 Encoding for DatabaseMetaData#insertsAreDetected \r
+#\r
+#\r
+# NOTE: DERBY-1252: Values for 98,99 and 104,105 do not reflect\r
+# truth, since DERBY-775 (SUR) is now implemented in 10.2.\r
+# When we move to major version 11, compatible clients shall handle\r
+# down negotiating so we can start returning truth again without risk\r
+# of breaking apps in mixed client/Server mode, i.e. old client/new\r
+# server. See also comments on this in\r
+# org.apache.derby.client.am.DatabaseMetaData\r
+# Value for 97 does reflect truth, though, since all < 10.2 clients\r
+# (and JCC) were broken parsing this anyway.\r
+\r
+METADATA=\\r
+SELECT \\r
+ M->allProceduresAreCallable(), \\r
+ M->allTablesAreSelectable(), \\r
+ M->nullsAreSortedHigh(), \\r
+ M->nullsAreSortedLow(), \\r
+ M->nullsAreSortedAtStart(), \\r
+ M->nullsAreSortedAtEnd(), \\r
+ M->usesLocalFiles(), \\r
+ M->usesLocalFilePerTable(), \\r
+ M->storesUpperCaseIdentifiers(), \\r
+ M->storesLowerCaseIdentifiers(), \\r
+ M->storesMixedCaseIdentifiers(), \\r
+ M->storesUpperCaseQuotedIdentifiers(), \\r
+ M->storesLowerCaseQuotedIdentifiers(), \\r
+ M->storesMixedCaseQuotedIdentifiers(), \\r
+ M->getSQLKeywords(), \\r
+ M->getNumericFunctions(), \\r
+ M->getStringFunctions(), \\r
+ M->getSystemFunctions(), \\r
+ M->getTimeDateFunctions(), \\r
+ M->getSearchStringEscape(), \\r
+ M->getExtraNameCharacters(), \\r
+ M->supportsAlterTableWithAddColumn(), \\r
+ M->supportsAlterTableWithDropColumn(), \\r
+ M->supportsConvert(), \\r
+ '1', \\r
+ M->supportsDifferentTableCorrelationNames(), \\r
+ M->supportsExpressionsInOrderBy(), \\r
+ M->supportsOrderByUnrelated(), \\r
+ M->supportsGroupBy(), \\r
+ M->supportsGroupByUnrelated(), \\r
+ M->supportsGroupByBeyondSelect(), \\r
+ M->supportsMultipleResultSets(), \\r
+ M->supportsMultipleTransactions(), \\r
+ M->supportsCoreSQLGrammar(), \\r
+ M->supportsExtendedSQLGrammar(), \\r
+ M->supportsANSI92IntermediateSQL(), \\r
+ M->supportsANSI92FullSQL(), \\r
+ M->supportsIntegrityEnhancementFacility(), \\r
+ M->supportsOuterJoins(), \\r
+ M->supportsFullOuterJoins(), \\r
+ M->supportsLimitedOuterJoins(), \\r
+ M->getSchemaTerm(), \\r
+ M->getProcedureTerm(), \\r
+ M->getCatalogTerm(), \\r
+ M->isCatalogAtStart(), \\r
+ M->getCatalogSeparator(), \\r
+ M->supportsSchemasInDataManipulation(), \\r
+ M->supportsSchemasInProcedureCalls(), \\r
+ M->supportsSchemasInTableDefinitions(), \\r
+ M->supportsSchemasInIndexDefinitions(), \\r
+ M->supportsSchemasInPrivilegeDefinitions(), \\r
+ M->supportsCatalogsInDataManipulation(), \\r
+ M->supportsCatalogsInProcedureCalls(), \\r
+ M->supportsCatalogsInTableDefinitions(), \\r
+ M->supportsCatalogsInIndexDefinitions(), \\r
+ M->supportsCatalogsInPrivilegeDefinitions(), \\r
+ M->supportsPositionedDelete(), \\r
+ M->supportsPositionedUpdate(), \\r
+ M->supportsSelectForUpdate(), \\r
+ M->supportsStoredProcedures(), \\r
+ M->supportsSubqueriesInComparisons(), \\r
+ M->supportsUnion(), \\r
+ M->supportsUnionAll(), \\r
+ M->supportsOpenCursorsAcrossCommit(), \\r
+ M->supportsOpenCursorsAcrossRollback(), \\r
+ M->supportsOpenStatementsAcrossCommit(), \\r
+ M->supportsOpenStatementsAcrossRollback(), \\r
+ M->getMaxBinaryLiteralLength(), \\r
+ M->getMaxCharLiteralLength(), \\r
+ M->getMaxColumnNameLength(), \\r
+ M->getMaxColumnsInGroupBy(), \\r
+ M->getMaxColumnsInIndex(), \\r
+ M->getMaxColumnsInOrderBy(), \\r
+ M->getMaxColumnsInSelect(), \\r
+ M->getMaxColumnsInTable(), \\r
+ M->getMaxConnections(), \\r
+ M->getMaxCursorNameLength(), \\r
+ M->getMaxIndexLength(), \\r
+ M->getMaxSchemaNameLength(), \\r
+ M->getMaxProcedureNameLength(), \\r
+ M->getMaxCatalogNameLength(), \\r
+ M->getMaxRowSize(), \\r
+ M->doesMaxRowSizeIncludeBlobs(), \\r
+ M->getMaxStatementLength(), \\r
+ M->getMaxStatements(), \\r
+ M->getMaxTableNameLength(), \\r
+ M->getMaxTablesInSelect(), \\r
+ M->getMaxUserNameLength(), \\r
+ M->getDefaultTransactionIsolation(), \\r
+ M->supportsTransactions(), \\r
+ '1,2,4,8' , \\r
+ M->supportsDataDefinitionAndDataManipulationTransactions(), \\r
+ M->supportsDataManipulationTransactionsOnly(), \\r
+ M->dataDefinitionCausesTransactionCommit(), \\r
+ M->dataDefinitionIgnoredInTransactions(), \\r
+ (cast (RTRIM(CAST(java.sql.ResultSet::TYPE_FORWARD_ONLY as CHAR(10))) AS VARCHAR(10)) || (',') || (cast (RTRIM(CAST(java.sql.ResultSet::TYPE_SCROLL_INSENSITIVE AS CHAR(10))) as VARCHAR(10)))), \\r
+ '1003,1007,1008;1004,1007,1008;1005', \\r
+ '',\\r
+ '',\\r
+ '',\\r
+ '1003',\\r
+ '1003',\\r
+ '1003',\\r
+ '',\\r
+ '',\\r
+ '',\\r
+ M->supportsBatchUpdates()\\r
+ from (values(getCurrentConnection()->getMetaData())) as DBMetaData(M)\r
+ \r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r