comparison DBD/monetdb/GetInfo.pm @ 0:cedccb7e0143

Copy of clients/perl directory without Tests from MonetDB changeset 4d2d4532228a.
author Sjoerd Mullender <sjoerd@acm.org>
date Mon, 19 Sep 2016 15:15:52 +0200 (2016-09-19)
parents
children a0ec9e080a5b
comparison
equal deleted inserted replaced
-1:000000000000 0:cedccb7e0143
1 # This Source Code Form is subject to the terms of the Mozilla Public
2 # License, v. 2.0. If a copy of the MPL was not distributed with this
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4 #
5 # Copyright 1997 - July 2008 CWI, August 2008 - 2016 MonetDB B.V.
6
7 package DBD::monetdb::GetInfo;
8
9 use strict;
10 use DBD::monetdb();
11
12 my $sql_driver = 'monetdb';
13 my $sql_ver_fmt = '%02d.%02d.%04d'; # ODBC version string: ##.##.#####
14 my $sql_driver_ver = sprintf $sql_ver_fmt, split(/\./, $DBD::monetdb::VERSION), 0;
15
16 my @Keywords = qw(
17 BOOLEAN
18 COLUMNS
19 FLOOR
20 IMPORT
21 REAL
22 );
23
24 sub sql_keywords {
25 return join ',', @Keywords;
26 }
27
28 sub sql_dbms_version {
29 my $dbh = shift;
30 return sprintf $sql_ver_fmt, 4, 6, 2; # TODO: mapi_...
31 }
32
33 sub sql_data_source_name {
34 my $dbh = shift;
35 return "dbi:$sql_driver:" . $dbh->{Name};
36 }
37
38 sub sql_user_name {
39 my $dbh = shift;
40 return $dbh->{Username};
41 }
42
43 my %info = (
44 20 => 'Y', # SQL_ACCESSIBLE_PROCEDURES
45 19 => 'N', # SQL_ACCESSIBLE_TABLES
46 0 => 0, # SQL_ACTIVE_CONNECTIONS
47 116 => 0, # SQL_ACTIVE_ENVIRONMENTS
48 1 => 0, # SQL_ACTIVE_STATEMENTS
49 169 => 127, # SQL_AGGREGATE_FUNCTIONS
50 117 => 0, # SQL_ALTER_DOMAIN
51 86 => 55656, # SQL_ALTER_TABLE
52 10021 => 0, # SQL_ASYNC_MODE
53 120 => 2, # SQL_BATCH_ROW_COUNT
54 121 => 3, # SQL_BATCH_SUPPORT
55 82 => 0, # SQL_BOOKMARK_PERSISTENCE
56 114 => 0, # SQL_CATALOG_LOCATION
57 10003 => 'N', # SQL_CATALOG_NAME
58 41 => '', # SQL_CATALOG_NAME_SEPARATOR
59 42 => '', # SQL_CATALOG_TERM
60 92 => 0, # SQL_CATALOG_USAGE
61 10004 => 'UTF-8', # SQL_COLLATING_SEQUENCE
62 10004 => 'UTF-8', # SQL_COLLATION_SEQ
63 87 => 'Y', # SQL_COLUMN_ALIAS
64 22 => 0, # SQL_CONCAT_NULL_BEHAVIOR
65 53 => 2097151, # SQL_CONVERT_BIGINT
66 54 => 2097151, # SQL_CONVERT_BINARY
67 55 => 2097151, # SQL_CONVERT_BIT
68 56 => 2097151, # SQL_CONVERT_CHAR
69 57 => 2097151, # SQL_CONVERT_DATE
70 58 => 2097151, # SQL_CONVERT_DECIMAL
71 59 => 2097151, # SQL_CONVERT_DOUBLE
72 60 => 2097151, # SQL_CONVERT_FLOAT
73 48 => 3, # SQL_CONVERT_FUNCTIONS
74 # 173 => undef, # SQL_CONVERT_GUID
75 61 => 2097151, # SQL_CONVERT_INTEGER
76 123 => 2097151, # SQL_CONVERT_INTERVAL_DAY_TIME
77 124 => 2097151, # SQL_CONVERT_INTERVAL_YEAR_MONTH
78 71 => 2097151, # SQL_CONVERT_LONGVARBINARY
79 62 => 2097151, # SQL_CONVERT_LONGVARCHAR
80 63 => 2097151, # SQL_CONVERT_NUMERIC
81 64 => 2097151, # SQL_CONVERT_REAL
82 65 => 2097151, # SQL_CONVERT_SMALLINT
83 66 => 2097151, # SQL_CONVERT_TIME
84 67 => 2097151, # SQL_CONVERT_TIMESTAMP
85 68 => 2097151, # SQL_CONVERT_TINYINT
86 69 => 2097151, # SQL_CONVERT_VARBINARY
87 70 => 2097151, # SQL_CONVERT_VARCHAR
88 # 122 => undef, # SQL_CONVERT_WCHAR
89 # 125 => undef, # SQL_CONVERT_WLONGVARCHAR
90 # 126 => undef, # SQL_CONVERT_WVARCHAR
91 74 => 2, # SQL_CORRELATION_NAME
92 127 => 0, # SQL_CREATE_ASSERTION
93 128 => 0, # SQL_CREATE_CHARACTER_SET
94 129 => 0, # SQL_CREATE_COLLATION
95 130 => 0, # SQL_CREATE_DOMAIN
96 131 => 3, # SQL_CREATE_SCHEMA
97 132 => 13851, # SQL_CREATE_TABLE
98 133 => 0, # SQL_CREATE_TRANSLATION
99 134 => 3, # SQL_CREATE_VIEW
100 23 => 0, # SQL_CURSOR_COMMIT_BEHAVIOR
101 24 => 0, # SQL_CURSOR_ROLLBACK_BEHAVIOR
102 10001 => 1, # SQL_CURSOR_SENSITIVITY
103 2 => \&sql_data_source_name, # SQL_DATA_SOURCE_NAME
104 25 => 'N', # SQL_DATA_SOURCE_READ_ONLY
105 119 => 0, # SQL_DATETIME_LITERALS
106 17 => 'MonetDB', # SQL_DBMS_NAME
107 18 => \&sql_dbms_version, # SQL_DBMS_VERSION
108 170 => 0, # SQL_DDL_INDEX
109 26 => 2, # SQL_DEFAULT_TRANSACTION_ISOLATION
110 26 => 2, # SQL_DEFAULT_TXN_ISOLATION
111 10002 => 'N', # SQL_DESCRIBE_PARAMETER
112 #- 171 => '03.52.6019.0000', # SQL_DM_VER
113 #- 3 => 28510912, # SQL_DRIVER_HDBC
114 # 135 => undef, # SQL_DRIVER_HDESC
115 #- 4 => 28510880, # SQL_DRIVER_HENV
116 # 76 => undef, # SQL_DRIVER_HLIB
117 # 5 => undef, # SQL_DRIVER_HSTMT
118 6 => $INC{'DBD/monetdb.pm'}, # SQL_DRIVER_NAME
119 #- 77 => '03.52', # SQL_DRIVER_ODBC_VER
120 7 => $sql_driver_ver, # SQL_DRIVER_VER
121 136 => 0, # SQL_DROP_ASSERTION
122 137 => 0, # SQL_DROP_CHARACTER_SET
123 138 => 0, # SQL_DROP_COLLATION
124 139 => 0, # SQL_DROP_DOMAIN
125 140 => 0, # SQL_DROP_SCHEMA
126 141 => 0, # SQL_DROP_TABLE
127 142 => 0, # SQL_DROP_TRANSLATION
128 143 => 0, # SQL_DROP_VIEW
129 144 => 0, # SQL_DYNAMIC_CURSOR_ATTRIBUTES1
130 145 => 0, # SQL_DYNAMIC_CURSOR_ATTRIBUTES2
131 27 => 'Y', # SQL_EXPRESSIONS_IN_ORDERBY
132 8 => 1, # SQL_FETCH_DIRECTION
133 84 => 0, # SQL_FILE_USAGE
134 146 => 0, # SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1
135 147 => 0, # SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2
136 81 => 15, # SQL_GETDATA_EXTENSIONS
137 88 => 3, # SQL_GROUP_BY
138 28 => 2, # SQL_IDENTIFIER_CASE
139 29 => '"', # SQL_IDENTIFIER_QUOTE_CHAR
140 # 148 => undef, # SQL_INDEX_KEYWORDS
141 149 => 0, # SQL_INFO_SCHEMA_VIEWS
142 172 => 0, # SQL_INSERT_STATEMENT
143 73 => 'N', # SQL_INTEGRITY
144 150 => 0, # SQL_KEYSET_CURSOR_ATTRIBUTES1
145 151 => 0, # SQL_KEYSET_CURSOR_ATTRIBUTES2
146 89 => \&sql_keywords, # SQL_KEYWORDS
147 113 => 'Y', # SQL_LIKE_ESCAPE_CLAUSE
148 78 => 0, # SQL_LOCK_TYPES
149 34 => 255, # SQL_MAXIMUM_CATALOG_NAME_LENGTH
150 97 => 0, # SQL_MAXIMUM_COLUMNS_IN_GROUP_BY
151 98 => 0, # SQL_MAXIMUM_COLUMNS_IN_INDEX
152 99 => 0, # SQL_MAXIMUM_COLUMNS_IN_ORDER_BY
153 100 => 0, # SQL_MAXIMUM_COLUMNS_IN_SELECT
154 101 => 0, # SQL_MAXIMUM_COLUMNS_IN_TABLE
155 30 => 255, # SQL_MAXIMUM_COLUMN_NAME_LENGTH
156 1 => 0, # SQL_MAXIMUM_CONCURRENT_ACTIVITIES
157 31 => 0, # SQL_MAXIMUM_CURSOR_NAME_LENGTH
158 0 => 0, # SQL_MAXIMUM_DRIVER_CONNECTIONS
159 10005 => 0, # SQL_MAXIMUM_IDENTIFIER_LENGTH
160 102 => 0, # SQL_MAXIMUM_INDEX_SIZE
161 104 => 0, # SQL_MAXIMUM_ROW_SIZE
162 32 => 255, # SQL_MAXIMUM_SCHEMA_NAME_LENGTH
163 105 => 0, # SQL_MAXIMUM_STATEMENT_LENGTH
164 # 20000 => undef, # SQL_MAXIMUM_STMT_OCTETS
165 # 20001 => undef, # SQL_MAXIMUM_STMT_OCTETS_DATA
166 # 20002 => undef, # SQL_MAXIMUM_STMT_OCTETS_SCHEMA
167 106 => 0, # SQL_MAXIMUM_TABLES_IN_SELECT
168 35 => 255, # SQL_MAXIMUM_TABLE_NAME_LENGTH
169 107 => 0, # SQL_MAXIMUM_USER_NAME_LENGTH
170 10022 => 0, # SQL_MAX_ASYNC_CONCURRENT_STATEMENTS
171 112 => 0, # SQL_MAX_BINARY_LITERAL_LEN
172 34 => 255, # SQL_MAX_CATALOG_NAME_LEN
173 108 => 1048576, # SQL_MAX_CHAR_LITERAL_LEN
174 97 => 0, # SQL_MAX_COLUMNS_IN_GROUP_BY
175 98 => 0, # SQL_MAX_COLUMNS_IN_INDEX
176 99 => 0, # SQL_MAX_COLUMNS_IN_ORDER_BY
177 100 => 0, # SQL_MAX_COLUMNS_IN_SELECT
178 101 => 0, # SQL_MAX_COLUMNS_IN_TABLE
179 30 => 255, # SQL_MAX_COLUMN_NAME_LEN
180 1 => 0, # SQL_MAX_CONCURRENT_ACTIVITIES
181 31 => 0, # SQL_MAX_CURSOR_NAME_LEN
182 0 => 0, # SQL_MAX_DRIVER_CONNECTIONS
183 10005 => 0, # SQL_MAX_IDENTIFIER_LEN
184 102 => 0, # SQL_MAX_INDEX_SIZE
185 32 => 255, # SQL_MAX_OWNER_NAME_LEN
186 33 => 0, # SQL_MAX_PROCEDURE_NAME_LEN
187 34 => 255, # SQL_MAX_QUALIFIER_NAME_LEN
188 104 => 0, # SQL_MAX_ROW_SIZE
189 103 => 'N', # SQL_MAX_ROW_SIZE_INCLUDES_LONG
190 32 => 255, # SQL_MAX_SCHEMA_NAME_LEN
191 105 => 0, # SQL_MAX_STATEMENT_LEN
192 106 => 0, # SQL_MAX_TABLES_IN_SELECT
193 35 => 255, # SQL_MAX_TABLE_NAME_LEN
194 107 => 0, # SQL_MAX_USER_NAME_LEN
195 37 => 'Y', # SQL_MULTIPLE_ACTIVE_TXN
196 36 => 'N', # SQL_MULT_RESULT_SETS
197 111 => 'Y', # SQL_NEED_LONG_DATA_LEN
198 75 => 1, # SQL_NON_NULLABLE_COLUMNS
199 85 => 1, # SQL_NULL_COLLATION
200 49 => 16777215, # SQL_NUMERIC_FUNCTIONS
201 9 => 1, # SQL_ODBC_API_CONFORMANCE
202 152 => 1, # SQL_ODBC_INTERFACE_CONFORMANCE
203 12 => 1, # SQL_ODBC_SAG_CLI_CONFORMANCE
204 15 => 1, # SQL_ODBC_SQL_CONFORMANCE
205 73 => 'N', # SQL_ODBC_SQL_OPT_IEF
206 #- 10 => '03.52.0000', # SQL_ODBC_VER
207 115 => 0, # SQL_OJ_CAPABILITIES
208 90 => 'N', # SQL_ORDER_BY_COLUMNS_IN_SELECT
209 38 => 'Y', # SQL_OUTER_JOINS
210 115 => 0, # SQL_OUTER_JOIN_CAPABILITIES
211 39 => '', # SQL_OWNER_TERM
212 91 => 0, # SQL_OWNER_USAGE
213 153 => 0, # SQL_PARAM_ARRAY_ROW_COUNTS
214 154 => 0, # SQL_PARAM_ARRAY_SELECTS
215 80 => 4, # SQL_POSITIONED_STATEMENTS
216 79 => 0, # SQL_POS_OPERATIONS
217 21 => 'N', # SQL_PROCEDURES
218 40 => '', # SQL_PROCEDURE_TERM
219 114 => 0, # SQL_QUALIFIER_LOCATION
220 41 => '', # SQL_QUALIFIER_NAME_SEPARATOR
221 42 => '', # SQL_QUALIFIER_TERM
222 92 => 0, # SQL_QUALIFIER_USAGE
223 93 => 3, # SQL_QUOTED_IDENTIFIER_CASE
224 11 => 'N', # SQL_ROW_UPDATES
225 39 => '', # SQL_SCHEMA_TERM
226 91 => 0, # SQL_SCHEMA_USAGE
227 43 => 1, # SQL_SCROLL_CONCURRENCY
228 44 => 16, # SQL_SCROLL_OPTIONS
229 14 => '', # SQL_SEARCH_PATTERN_ESCAPE
230 13 => 'MonetDB', # SQL_SERVER_NAME
231 94 => '`!#$;:\'<>', # SQL_SPECIAL_CHARACTERS
232 # 155 => undef, # SQL_SQL92_DATETIME_FUNCTIONS
233 # 156 => undef, # SQL_SQL92_FOREIGN_KEY_DELETE_RULE
234 # 157 => undef, # SQL_SQL92_FOREIGN_KEY_UPDATE_RULE
235 # 158 => undef, # SQL_SQL92_GRANT
236 # 159 => undef, # SQL_SQL92_NUMERIC_VALUE_FUNCTIONS
237 # 160 => undef, # SQL_SQL92_PREDICATES
238 # 161 => undef, # SQL_SQL92_RELATIONAL_JOIN_OPERATORS
239 # 162 => undef, # SQL_SQL92_REVOKE
240 # 163 => undef, # SQL_SQL92_ROW_VALUE_CONSTRUCTOR
241 # 164 => undef, # SQL_SQL92_STRING_FUNCTIONS
242 # 165 => undef, # SQL_SQL92_VALUE_EXPRESSIONS
243 118 => 8, # SQL_SQL_CONFORMANCE
244 # 166 => undef, # SQL_STANDARD_CLI_CONFORMANCE
245 167 => 583, # SQL_STATIC_CURSOR_ATTRIBUTES1
246 168 => 4096, # SQL_STATIC_CURSOR_ATTRIBUTES2
247 83 => 0, # SQL_STATIC_SENSITIVITY
248 50 => 458751, # SQL_STRING_FUNCTIONS
249 95 => 23, # SQL_SUBQUERIES
250 51 => 7, # SQL_SYSTEM_FUNCTIONS
251 45 => '', # SQL_TABLE_TERM
252 109 => 0, # SQL_TIMEDATE_ADD_INTERVALS
253 110 => 0, # SQL_TIMEDATE_DIFF_INTERVALS
254 52 => 131071, # SQL_TIMEDATE_FUNCTIONS
255 46 => 2, # SQL_TRANSACTION_CAPABLE
256 72 => 4, # SQL_TRANSACTION_ISOLATION_OPTION
257 46 => 2, # SQL_TXN_CAPABLE
258 72 => 4, # SQL_TXN_ISOLATION_OPTION
259 96 => 1, # SQL_UNION
260 96 => 1, # SQL_UNION_STATEMENT
261 47 => \&sql_user_name, # SQL_USER_NAME
262 10000 => '', # SQL_XOPEN_CLI_YEAR
263 );
264
265 sub get_info {
266 my ($dbh, $info_type) = @_;
267 my $value = $info{int($info_type)};
268 $value = $value->($dbh) if ref $value eq 'CODE';
269 return $value;
270 }
271
272 1;