package SQL::Statement::GetInfo; use SQL::Statement(); use vars qw(%info); my @Keywords = qw( INTEGERVAL STRING REALVAL IDENT NULLVAL PARAM OPERATOR IS AND OR ERROR INSERT UPDATE SELECT DELETE DROP CREATE ALL DISTINCT WHERE ORDER ASC DESC FROM INTO BY VALUES SET NOT TABLE CHAR VARCHAR REAL INTEGER PRIMARY KEY BLOB TEXT ); sub sql_keywords { return join ',', @Keywords; } %info = ( 20 => "N" # SQL_ACCESSIBLE_PROCEDURES , 19 => "Y" # SQL_ACCESSIBLE_TABLES # 0 => undef # SQL_ACTIVE_CONNECTIONS # 116 => undef # SQL_ACTIVE_ENVIRONMENTS # 1 => undef # SQL_ACTIVE_STATEMENTS , 169 => 0x0000007F # SQL_AGGREGATE_FUNCTIONS # SQL_AF_AVG + 1 # SQL_AF_COUNT + 2 # SQL_AF_MAX + 4 # SQL_AF_MIN + 8 # SQL_AF_SUM + 10 # SQL_AF_DISTINCT + 20 # SQL_AF_ALL + 40 , 117 => 0 # SQL_ALTER_DOMAIN - , 86 => 0 # SQL_ALTER_TABLE - # 10021 => undef # SQL_ASYNC_MODE # 120 => undef # SQL_BATCH_ROW_COUNT # 121 => undef # SQL_BATCH_SUPPORT # 82 => undef # SQL_BOOKMARK_PERSISTENCE , 114 => 1 # SQL_CATALOG_LOCATION , 10003 => "N" # SQL_CATALOG_NAME , 41 => '.' # SQL_CATALOG_NAME_SEPARATOR , 42 => "" # SQL_CATALOG_TERM , 92 => 0 # SQL_CATALOG_USAGE # # 10004 => undef # SQL_COLLATING_SEQUENCE , 10004 => "ISO-8859-1" # SQL_COLLATION_SEQ , 87 => "N" # SQL_COLUMN_ALIAS , 22 => 0 # SQL_CONCAT_NULL_BEHAVIOR # # CONVERT FUNCTION NOT CURRENTLY SUPPORTED # , 53 => 0 # SQL_CONVERT_BIGINT , 54 => 0 # SQL_CONVERT_BINARY , 55 => 0 # SQL_CONVERT_BIT , 56 => 0 # SQL_CONVERT_CHAR , 57 => 0 # SQL_CONVERT_DATE , 58 => 0 # SQL_CONVERT_DECIMAL , 59 => 0 # SQL_CONVERT_DOUBLE , 60 => 0 # SQL_CONVERT_FLOAT , 48 => 0 # SQL_CONVERT_FUNCTIONS , 173 => 0 # SQL_CONVERT_GUID , 61 => 0 # SQL_CONVERT_INTEGER , 123 => 0 # SQL_CONVERT_INTERVAL_DAY_TIME , 124 => 0 # SQL_CONVERT_INTERVAL_YEAR_MONTH , 71 => 0 # SQL_CONVERT_LONGVARBINARY , 62 => 0 # SQL_CONVERT_LONGVARCHAR , 63 => 0 # SQL_CONVERT_NUMERIC , 64 => 0 # SQL_CONVERT_REAL , 65 => 0 # SQL_CONVERT_SMALLINT , 66 => 0 # SQL_CONVERT_TIME , 67 => 0 # SQL_CONVERT_TIMESTAMP , 68 => 0 # SQL_CONVERT_TINYINT , 69 => 0 # SQL_CONVERT_VARBINARY , 70 => 0 # SQL_CONVERT_VARCHAR , 122 => 0 # SQL_CONVERT_WCHAR , 125 => 0 # SQL_CONVERT_WLONGVARCHAR , 126 => 0 # SQL_CONVERT_WVARCHAR # , 74 => 2 # SQL_CORRELATION_NAME , 127 => 0 # SQL_CREATE_ASSERTION , 128 => 0 # SQL_CREATE_CHARACTER_SET , 129 => 0 # SQL_CREATE_COLLATION , 130 => 0 # SQL_CREATE_DOMAIN , 131 => 0 # SQL_CREATE_SCHEMA , 132 => 1 # SQL_CREATE_TABLE , 133 => 0 # SQL_CREATE_TRANSLATION , 134 => 0 # SQL_CREATE_VIEW # # CURSORS NOT CURRENTLY SUPPORTED # # 23 => undef, # SQL_CURSOR_COMMIT_BEHAVIOR # 24 => undef, # SQL_CURSOR_ROLLBACK_BEHAVIOR # 10001 => undef, # SQL_CURSOR_SENSITIVITY # #, 2 => \&sql_data_source_name # SQL_DATA_SOURCE_NAME , 25 => "N" # SQL_DATA_SOURCE_READ_ONLY , 119 => 0 # SQL_DATETIME_LITERALS #, 17 => \&sql_driver_name # SQL_DBMS_NAME #, 18 => \&sql_driver_ver # SQL_DBMS_VER # 18 => undef # SQL_DBMS_VERSION # 170 => undef, # SQL_DDL_INDEX # 26 => undef, # SQL_DEFAULT_TRANSACTION_ISOLATION # 26 => undef # SQL_DEFAULT_TXN_ISOLATION , 10002 => "N" # SQL_DESCRIBE_PARAMETER # 171 => undef # SQL_DM_VER # 3 => undef # SQL_DRIVER_HDBC # 135 => undef # SQL_DRIVER_HDESC # 4 => undef # SQL_DRIVER_HENV # 76 => undef # SQL_DRIVER_HLIB # 5 => undef # SQL_DRIVER_HSTMT #, 6 => \&sql_driver_name # SQL_DRIVER_NAME # 77 => undef # SQL_DRIVER_ODBC_VER #, 7 => \&sql_driver_ver # SQL_DRIVER_VER , 136 => 0 # SQL_DROP_ASSERTION , 137 => 0 # SQL_DROP_CHARACTER_SET , 138 => 0 # SQL_DROP_COLLATION , 139 => 0 # SQL_DROP_DOMAIN , 140 => 0 # SQL_DROP_SCHEMA , 141 => 1 # SQL_DROP_TABLE , 142 => 0 # SQL_DROP_TRANSLATION , 143 => 0 # SQL_DROP_VIEW # 144 => undef # SQL_DYNAMIC_CURSOR_ATTRIBUTES1 # 145 => undef # SQL_DYNAMIC_CURSOR_ATTRIBUTES2 # 27 => undef # SQL_EXPRESSIONS_IN_ORDERBY # 8 => undef # SQL_FETCH_DIRECTION , 84 => 1 # SQL_FILE_USAGE # 146 => undef # SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1 # 147 => undef # SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 # 81 => undef # SQL_GETDATA_EXTENSIONS # 88 => undef # SQL_GROUP_BY , 28 => 4 # SQL_IDENTIFIER_CASE , 29 => q(") # SQL_IDENTIFIER_QUOTE_CHAR # 148 => undef # SQL_INDEX_KEYWORDS # 149 => undef # SQL_INFO_SCHEMA_VIEWS , 172 => 1 # SQL_INSERT_STATEMENT # 73 => undef # SQL_INTEGRITY # 150 => undef # SQL_KEYSET_CURSOR_ATTRIBUTES1 # 151 => undef # SQL_KEYSET_CURSOR_ATTRIBUTES2 , 89 => \&sql_keywords # SQL_KEYWORDS , 113 => "N" # SQL_LIKE_ESCAPE_CLAUSE # 78 => undef # SQL_LOCK_TYPES # 34 => undef # SQL_MAXIMUM_CATALOG_NAME_LENGTH # 97 => undef # SQL_MAXIMUM_COLUMNS_IN_GROUP_BY # 98 => undef # SQL_MAXIMUM_COLUMNS_IN_INDEX # 99 => undef # SQL_MAXIMUM_COLUMNS_IN_ORDER_BY # 100 => undef # SQL_MAXIMUM_COLUMNS_IN_SELECT # 101 => undef # SQL_MAXIMUM_COLUMNS_IN_TABLE # 30 => undef # SQL_MAXIMUM_COLUMN_NAME_LENGTH # 1 => undef # SQL_MAXIMUM_CONCURRENT_ACTIVITIES # 31 => undef # SQL_MAXIMUM_CURSOR_NAME_LENGTH # 0 => undef # SQL_MAXIMUM_DRIVER_CONNECTIONS # 10005 => undef # SQL_MAXIMUM_IDENTIFIER_LENGTH # 102 => undef # SQL_MAXIMUM_INDEX_SIZE # 104 => undef # SQL_MAXIMUM_ROW_SIZE # 32 => undef # SQL_MAXIMUM_SCHEMA_NAME_LENGTH # 105 => undef # SQL_MAXIMUM_STATEMENT_LENGTH # 20000 => undef # SQL_MAXIMUM_STMT_OCTETS # 20001 => undef # SQL_MAXIMUM_STMT_OCTETS_DATA # 20002 => undef # SQL_MAXIMUM_STMT_OCTETS_SCHEMA # 106 => undef # SQL_MAXIMUM_TABLES_IN_SELECT # 35 => undef # SQL_MAXIMUM_TABLE_NAME_LENGTH # 107 => undef # SQL_MAXIMUM_USER_NAME_LENGTH # 10022 => undef # SQL_MAX_ASYNC_CONCURRENT_STATEMENTS # 112 => undef # SQL_MAX_BINARY_LITERAL_LEN # 34 => undef # SQL_MAX_CATALOG_NAME_LEN # 108 => undef # SQL_MAX_CHAR_LITERAL_LEN # 97 => undef # SQL_MAX_COLUMNS_IN_GROUP_BY # 98 => undef # SQL_MAX_COLUMNS_IN_INDEX # 99 => undef # SQL_MAX_COLUMNS_IN_ORDER_BY # 100 => undef # SQL_MAX_COLUMNS_IN_SELECT # 101 => undef # SQL_MAX_COLUMNS_IN_TABLE # 30 => undef # SQL_MAX_COLUMN_NAME_LEN # 1 => undef # SQL_MAX_CONCURRENT_ACTIVITIES # 31 => undef # SQL_MAX_CURSOR_NAME_LEN # 0 => undef # SQL_MAX_DRIVER_CONNECTIONS # 10005 => undef # SQL_MAX_IDENTIFIER_LEN # 102 => undef # SQL_MAX_INDEX_SIZE # 32 => undef # SQL_MAX_OWNER_NAME_LEN # 33 => undef # SQL_MAX_PROCEDURE_NAME_LEN # 34 => undef # SQL_MAX_QUALIFIER_NAME_LEN # 104 => undef # SQL_MAX_ROW_SIZE # 103 => undef # SQL_MAX_ROW_SIZE_INCLUDES_LONG # 32 => undef # SQL_MAX_SCHEMA_NAME_LEN # 105 => undef # SQL_MAX_STATEMENT_LEN # 106 => undef # SQL_MAX_TABLES_IN_SELECT # 35 => undef # SQL_MAX_TABLE_NAME_LEN # 107 => undef # SQL_MAX_USER_NAME_LEN # 37 => undef # SQL_MULTIPLE_ACTIVE_TXN # 36 => undef # SQL_MULT_RESULT_SETS , 111 => "N" # SQL_NEED_LONG_DATA_LEN , 75 => 1 # SQL_NON_NULLABLE_COLUMNS , 85 => 1 # SQL_NULL_COLLATION , 49 => 0 # SQL_NUMERIC_FUNCTIONS # 9 => undef # SQL_ODBC_API_CONFORMANCE # 152 => undef # SQL_ODBC_INTERFACE_CONFORMANCE # 12 => undef # SQL_ODBC_SAG_CLI_CONFORMANCE # 15 => undef # SQL_ODBC_SQL_CONFORMANCE # 73 => undef # SQL_ODBC_SQL_OPT_IEF # 10 => undef # SQL_ODBC_VER , 115 => 0x00000037 # SQL_OJ_CAPABILITIES # 1 SQL_OJ_LEFT + left joins SUPPORTED # 2 SQL_OJ_RIGHT + right joins SUPPORTED # 4 SQL_OJ_FULL + full joins SUPPORTED # SQL_OJ_NESTED - nested joins not supported # 10 SQL_OJ_NOT_ORDERED + on clause col order not required # 20 SQL_OJ_INNER + inner joins SUPPORTED # SQL_OJ_ALL_COMPARISON_OPS - on clause comp op must be = , 90 => "N" # SQL_ORDER_BY_COLUMNS_IN_SELECT # 38 => undef # SQL_OUTER_JOINS # 115 => undef # SQL_OUTER_JOIN_CAPABILITIES # 39 => undef # SQL_OWNER_TERM # 91 => undef # SQL_OWNER_USAGE # 153 => undef # SQL_PARAM_ARRAY_ROW_COUNTS # 154 => undef # SQL_PARAM_ARRAY_SELECTS # 80 => undef # SQL_POSITIONED_STATEMENTS # 79 => undef # SQL_POS_OPERATIONS , 21 => "N" # SQL_PROCEDURES # 40 => undef # SQL_PROCEDURE_TERM # 114 => undef # SQL_QUALIFIER_LOCATION # 41 => undef # SQL_QUALIFIER_NAME_SEPARATOR # 42 => undef # SQL_QUALIFIER_TERM # 92 => undef # SQL_QUALIFIER_USAGE , 93 => 3 # SQL_QUOTED_IDENTIFIER_CASE , 11 => "N" # SQL_ROW_UPDATES , 39 => "schema" # SQL_SCHEMA_TERM # 91 => undef # SQL_SCHEMA_USAGE # 43 => undef # SQL_SCROLL_CONCURRENCY # 44 => undef # SQL_SCROLL_OPTIONS # 14 => undef # SQL_SEARCH_PATTERN_ESCAPE # 13 => undef # SQL_SERVER_NAME # 94 => undef # SQL_SPECIAL_CHARACTERS # 155 => undef # SQL_SQL92_DATETIME_FUNCTIONS # 156 => undef # SQL_SQL92_FOREIGN_KEY_DELETE_RULE # 157 => undef # SQL_SQL92_FOREIGN_KEY_UPDATE_RULE # 158 => undef # SQL_SQL92_GRANT # 159 => undef # SQL_SQL92_NUMERIC_VALUE_FUNCTIONS , 160 => 0x00003E06 # SQL_SQL92_PREDICATES # SQL_SP_EXISTS - - # SQL_SP_ISNOTNULL + + 2 # SQL_SP_ISNULL + + 4 # SQL_SP_MATCH_FULL - - # SQL_SP_MATCH_PARTIAL - - # SQL_SP_MATCH_UNIQUE_FULL - - # SQL_SP_MATCH_UNIQUE_PARTIAL - - # SQL_SP_OVERLAPS - - # SQL_SP_UNIQUE - - # SQL_SP_LIKE + + 200 # SQL_SP_IN - + 400 # SQL_SP_BETWEEN - + 800 # SQL_SP_COMPARISON + + 1000 # SQL_SP_QUANTIFIED_COMPARISON + + 2000 , 161 => 0x000001D8 # SQL_SQL92_RELATIONAL_JOIN_OPERATORS # SQL_SRJO_CORRESPONDING_CLAUSE - corresponding clause not supported # SQL_SRJO_CROSS_JOIN - cross join not supported # SQL_SRJO_EXCEPT_JOIN - except join not supported # 8 SQL_SRJO_FULL_OUTER_JOIN + full join SUPPORTED # 10 SQL_SRJO_INNER_JOIN + inner join SUPPORTED # SQL_SRJO_INTERSECT_JOIN - intersect join not supported # 40 SQL_SRJO_LEFT_OUTER_JOIN + left join SUPPORTED # 80 SQL_SRJO_NATURAL_JOIN + natural join SUPPORTED # 100 SQL_SRJO_RIGHT_OUTER_JOIN + right join SUPPORTED # SQL_SRJO_UNION_JOIN - union join not supported # 162 => undef # SQL_SQL92_REVOKE , 163 => 3 # SQL_SQL92_ROW_VALUE_CONSTRUCTOR # SQL_SRVC_VALUE_EXPRESSION # SQL_SRVC_NULL # SQL_SRVC_DEFAULT # SQL_SRVC_ROW_SUBQUERY , 164 => 0x000000EE # SQL_SQL92_STRING_FUNCTIONS # SQL_SSF_CONVERT - /* convert() string function not supported */ # SQL_SSF_LOWER 2 + /* lower() string function SUPPORTED */ # SQL_SSF_UPPER 4 + /* upper() string function SUPPORTED */ # SQL_SSF_SUBSTRING 8 + /* substring() string function SUPPORTED */ # SQL_SSF_TRANSLATE - /* translate() string function not supported */ # SQL_SSF_TRIM_BOTH 32 + /* trim() both string function SUPPORTED */ # SQL_SSF_TRIM_LEADING 64 + /* trim() leading string function SUPPORTED */ # SQL_SSF_TRIM_TRAILING128+ /* trim() trailing string function SUPPORTED */ # 165 => undef # SQL_SQL92_VALUE_EXPRESSIONS # 118 => undef # SQL_SQL_CONFORMANCE # 166 => undef # SQL_STANDARD_CLI_CONFORMANCE # 167 => undef # SQL_STATIC_CURSOR_ATTRIBUTES1 # 168 => undef # SQL_STATIC_CURSOR_ATTRIBUTES2 # 83 => undef # SQL_STATIC_SENSITIVITY , 50 => 0x00001C49 # SQL_STRING_FUNCTIONS # SQL_FN_STR_CONCAT => 0x00000001 + # SQL_FN_STR_INSERT => 0x00000002 # SQL_FN_STR_LEFT => 0x00000004 # SQL_FN_STR_LTRIM => 0x00000008 + # SQL_FN_STR_LENGTH => 0x00000010 # SQL_FN_STR_LOCATE => 0x00000020 # SQL_FN_STR_LCASE => 0x00000040 + # SQL_FN_STR_REPEAT => 0x00000080 # SQL_FN_STR_REPLACE => 0x00000100 # SQL_FN_STR_RIGHT => 0x00000200 # SQL_FN_STR_RTRIM => 0x00000400 + # SQL_FN_STR_SUBSTRING => 0x00000800 + # SQL_FN_STR_UCASE => 0x00001000 + # SQL_FN_STR_ASCII => 0x00002000 # SQL_FN_STR_CHAR => 0x00004000 # SQL_FN_STR_DIFFERENCE => 0x00008000 # SQL_FN_STR_LOCATE_2 => 0x00010000 # SQL_FN_STR_SOUNDEX => 0x00020000 # SQL_FN_STR_SPACE => 0x00040000 # SQL_FN_STR_BIT_LENGTH => 0x00080000 # SQL_FN_STR_CHAR_LENGTH => 0x00100000 # SQL_FN_STR_CHARACTER_LENGTH => 0x00200000 # SQL_FN_STR_OCTET_LENGTH => 0x00400000 # SQL_FN_STR_POSITION => 0x00800000 # 95 => undef # SQL_SUBQUERIES # 51 => undef # SQL_SYSTEM_FUNCTIONS , 45 => "table" # SQL_TABLE_TERM # 109 => undef # SQL_TIMEDATE_ADD_INTERVALS # 110 => undef # SQL_TIMEDATE_DIFF_INTERVALS # 52 => undef # SQL_TIMEDATE_FUNCTIONS # 46 => undef # SQL_TRANSACTION_CAPABLE # 72 => undef # SQL_TRANSACTION_ISOLATION_OPTION # 46 => undef # SQL_TXN_CAPABLE # 72 => undef # SQL_TXN_ISOLATION_OPTION # 96 => undef # SQL_UNION # 96 => undef # SQL_UNION_STATEMENT #, 47 => \&sql_user_name # SQL_USER_NAME # 10000 => undef # SQL_XOPEN_CLI_YEAR ); 1; __END__ NO LONGER NEEDED sub sql_driver_name { shift->{"Driver"}->{"Name"}; } sub sql_driver_ver { my $dbh = shift; my $ver = shift; my $drv = 'DBD::'.$dbh->{"Driver"}->{"Name"}; # $ver = "$drv"."::VERSION"; # $ver = ${$ver}; my $fmt = '%02d.%02d.%1d%1d%1d%1d'; # ODBC version string: ##.##.##### $ver = sprintf $fmt, split (/\./, $ver); return $ver . '; ss-'. $SQL::Statement::VERSION; } sub sql_data_source_name { my $dbh = shift; return 'dbi:'.$dbh->{"Driver"}->{"Name"}.':'.$dbh->{"Name"}; } sub sql_user_name { my $dbh = shift; return $dbh->{"CURRENT_USER"}; }