| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package DBD::SQLite::GetInfo; |
|
2
|
|
|
|
|
|
|
|
|
3
|
9
|
|
|
9
|
|
302
|
use 5.006; |
|
|
9
|
|
|
|
|
37
|
|
|
4
|
9
|
|
|
9
|
|
50
|
use strict; |
|
|
9
|
|
|
|
|
19
|
|
|
|
9
|
|
|
|
|
296
|
|
|
5
|
9
|
|
|
9
|
|
58
|
use warnings; |
|
|
9
|
|
|
|
|
18
|
|
|
|
9
|
|
|
|
|
366
|
|
|
6
|
|
|
|
|
|
|
|
|
7
|
9
|
|
|
9
|
|
69
|
use DBD::SQLite; |
|
|
9
|
|
|
|
|
19
|
|
|
|
9
|
|
|
|
|
8212
|
|
|
8
|
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
# SQL_DRIVER_VER should be formatted as dd.dd.dddd |
|
10
|
|
|
|
|
|
|
my $dbdversion = $DBD::SQLite::VERSION; |
|
11
|
|
|
|
|
|
|
$dbdversion .= '_00' if $dbdversion =~ /^\d+\.\d+$/; |
|
12
|
|
|
|
|
|
|
my $sql_driver_ver = sprintf("%02d.%02d.%04d", split(/[\._]/, $dbdversion)); |
|
13
|
|
|
|
|
|
|
|
|
14
|
|
|
|
|
|
|
# Full list of keys and their return types: DBI::Const::GetInfo::ODBC |
|
15
|
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
# Most of the key definitions can be gleaned from: |
|
17
|
|
|
|
|
|
|
# |
|
18
|
|
|
|
|
|
|
# https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqlgetinfo-function |
|
19
|
|
|
|
|
|
|
|
|
20
|
|
|
|
|
|
|
our %info = ( |
|
21
|
|
|
|
|
|
|
20 => 'N', # SQL_ACCESSIBLE_PROCEDURES - No stored procedures to access |
|
22
|
|
|
|
|
|
|
19 => 'Y', # SQL_ACCESSIBLE_TABLES - SELECT access to all tables in table_info |
|
23
|
|
|
|
|
|
|
0 => 0, # SQL_ACTIVE_CONNECTIONS - No maximum connection limit |
|
24
|
|
|
|
|
|
|
116 => 0, # SQL_ACTIVE_ENVIRONMENTS - No "active environment" limit |
|
25
|
|
|
|
|
|
|
1 => 0, # SQL_ACTIVE_STATEMENTS - No concurrent activity limit |
|
26
|
|
|
|
|
|
|
169 => 127, # SQL_AGGREGATE_FUNCTIONS - Supports all SQL-92 aggregrate functions |
|
27
|
|
|
|
|
|
|
117 => 0, # SQL_ALTER_DOMAIN - No ALTER DOMAIN support |
|
28
|
|
|
|
|
|
|
86 => 1, # SQL_ALTER_TABLE - Only supports ADD COLUMN and table rename (not listed in enum) in ALTER TABLE statements |
|
29
|
|
|
|
|
|
|
10021 => 0, # SQL_ASYNC_MODE - No asynchronous support (in vanilla SQLite) |
|
30
|
|
|
|
|
|
|
120 => 0, # SQL_BATCH_ROW_COUNT - No special row counting access |
|
31
|
|
|
|
|
|
|
121 => 0, # SQL_BATCH_SUPPORT - No batches |
|
32
|
|
|
|
|
|
|
82 => 0, # SQL_BOOKMARK_PERSISTENCE - No bookmark support |
|
33
|
|
|
|
|
|
|
114 => 1, # SQL_CATALOG_LOCATION - Database comes first in identifiers |
|
34
|
|
|
|
|
|
|
10003 => 'Y', # SQL_CATALOG_NAME - Supports database names |
|
35
|
|
|
|
|
|
|
41 => '.', # SQL_CATALOG_NAME_SEPARATOR - Separated by dot |
|
36
|
|
|
|
|
|
|
42 => 'database', # SQL_CATALOG_TERM - SQLite calls catalogs databases |
|
37
|
|
|
|
|
|
|
92 => 1+4+8, # SQL_CATALOG_USAGE - Supported in calls to DML & table/index definiton (no procedures or permissions) |
|
38
|
|
|
|
|
|
|
10004 => 'UTF-8', # SQL_COLLATION_SEQ - SQLite 3 uses UTF-8 by default |
|
39
|
|
|
|
|
|
|
87 => 'Y', # SQL_COLUMN_ALIAS - Supports column aliases |
|
40
|
|
|
|
|
|
|
22 => 0, # SQL_CONCAT_NULL_BEHAVIOR - 'a'||NULL = NULL |
|
41
|
|
|
|
|
|
|
|
|
42
|
|
|
|
|
|
|
# SQLite has no CONVERT function, only CAST. However, it converts to every "affinity" it supports. |
|
43
|
|
|
|
|
|
|
# |
|
44
|
|
|
|
|
|
|
# The only SQL_CVT_* types it doesn't support are date/time types, as it has no concept of |
|
45
|
|
|
|
|
|
|
# date/time values once inserted. These are only convertable to text-like types. GUIDs are in |
|
46
|
|
|
|
|
|
|
# the same boat, having no real means of switching to a numeric format. |
|
47
|
|
|
|
|
|
|
# |
|
48
|
|
|
|
|
|
|
# text/binary types = 31723265 |
|
49
|
|
|
|
|
|
|
# numeric types = 28926 |
|
50
|
|
|
|
|
|
|
# date/time types = 1802240 |
|
51
|
|
|
|
|
|
|
# total = 33554431 |
|
52
|
|
|
|
|
|
|
|
|
53
|
|
|
|
|
|
|
48 => 1, # SQL_CONVERT_FUNCTIONS - CAST only |
|
54
|
|
|
|
|
|
|
|
|
55
|
|
|
|
|
|
|
53 => 31723265+28926, # SQL_CONVERT_BIGINT |
|
56
|
|
|
|
|
|
|
54 => 31723265+28926, # SQL_CONVERT_BINARY |
|
57
|
|
|
|
|
|
|
55 => 31723265+28926, # SQL_CONVERT_BIT |
|
58
|
|
|
|
|
|
|
56 => 33554431, # SQL_CONVERT_CHAR |
|
59
|
|
|
|
|
|
|
57 => 31723265+1802240, # SQL_CONVERT_DATE |
|
60
|
|
|
|
|
|
|
58 => 31723265+28926, # SQL_CONVERT_DECIMAL |
|
61
|
|
|
|
|
|
|
59 => 31723265+28926, # SQL_CONVERT_DOUBLE |
|
62
|
|
|
|
|
|
|
60 => 31723265+28926, # SQL_CONVERT_FLOAT |
|
63
|
|
|
|
|
|
|
173 => 31723265, # SQL_CONVERT_GUID |
|
64
|
|
|
|
|
|
|
61 => 31723265+28926, # SQL_CONVERT_INTEGER |
|
65
|
|
|
|
|
|
|
123 => 31723265+1802240, # SQL_CONVERT_INTERVAL_DAY_TIME |
|
66
|
|
|
|
|
|
|
124 => 31723265+1802240, # SQL_CONVERT_INTERVAL_YEAR_MONTH |
|
67
|
|
|
|
|
|
|
71 => 31723265+28926, # SQL_CONVERT_LONGVARBINARY |
|
68
|
|
|
|
|
|
|
62 => 31723265+28926, # SQL_CONVERT_LONGVARCHAR |
|
69
|
|
|
|
|
|
|
63 => 31723265+28926, # SQL_CONVERT_NUMERIC |
|
70
|
|
|
|
|
|
|
64 => 31723265+28926, # SQL_CONVERT_REAL |
|
71
|
|
|
|
|
|
|
65 => 31723265+28926, # SQL_CONVERT_SMALLINT |
|
72
|
|
|
|
|
|
|
66 => 31723265+1802240, # SQL_CONVERT_TIME |
|
73
|
|
|
|
|
|
|
67 => 31723265+1802240, # SQL_CONVERT_TIMESTAMP |
|
74
|
|
|
|
|
|
|
68 => 31723265+28926, # SQL_CONVERT_TINYINT |
|
75
|
|
|
|
|
|
|
69 => 33554431, # SQL_CONVERT_VARBINARY |
|
76
|
|
|
|
|
|
|
70 => 33554431, # SQL_CONVERT_VARCHAR |
|
77
|
|
|
|
|
|
|
122 => 33554431, # SQL_CONVERT_WCHAR |
|
78
|
|
|
|
|
|
|
125 => 33554431, # SQL_CONVERT_WLONGVARCHAR |
|
79
|
|
|
|
|
|
|
126 => 33554431, # SQL_CONVERT_WVARCHAR |
|
80
|
|
|
|
|
|
|
|
|
81
|
|
|
|
|
|
|
74 => 1, # SQL_CORRELATION_NAME - Table aliases are supported, but must be named differently |
|
82
|
|
|
|
|
|
|
127 => 0, # SQL_CREATE_ASSERTION - No CREATE ASSERTION support |
|
83
|
|
|
|
|
|
|
128 => 0, # SQL_CREATE_CHARACTER_SET - No CREATE CHARACTER SET support |
|
84
|
|
|
|
|
|
|
129 => 0, # SQL_CREATE_COLLATION - No CREATE COLLATION support |
|
85
|
|
|
|
|
|
|
130 => 0, # SQL_CREATE_DOMAIN - No CREATE DOMAIN support |
|
86
|
|
|
|
|
|
|
131 => 0, # SQL_CREATE_SCHEMA - No CREATE SCHEMA support |
|
87
|
|
|
|
|
|
|
132 => 16383-2-8-4096, # SQL_CREATE_TABLE - Most of the functionality of CREATE TABLE support |
|
88
|
|
|
|
|
|
|
133 => 0, # SQL_CREATE_TRANSLATION - No CREATE TRANSLATION support |
|
89
|
|
|
|
|
|
|
134 => 1, # SQL_CREATE_VIEW - CREATE VIEW, no WITH CHECK OPTION support |
|
90
|
|
|
|
|
|
|
|
|
91
|
|
|
|
|
|
|
23 => 2, # SQL_CURSOR_COMMIT_BEHAVIOR - Cursors are preserved |
|
92
|
|
|
|
|
|
|
24 => 2, # SQL_CURSOR_ROLLBACK_BEHAVIOR - Cursors are preserved |
|
93
|
|
|
|
|
|
|
10001 => 0, # SQL_CURSOR_SENSITIVITY - Cursors have a concept of snapshots, though this depends on the transaction type |
|
94
|
|
|
|
|
|
|
|
|
95
|
|
|
|
|
|
|
2 => \&sql_data_source_name, # SQL_DATA_SOURCE_NAME - The DSN |
|
96
|
|
|
|
|
|
|
25 => \&sql_data_source_read_only, # SQL_DATA_SOURCE_READ_ONLY - Might have a SQLITE_OPEN_READONLY flag |
|
97
|
|
|
|
|
|
|
16 => \&sql_database_name, # SQL_DATABASE_NAME - Self-explanatory |
|
98
|
|
|
|
|
|
|
119 => 0, # SQL_DATETIME_LITERALS - No support for SQL-92's super weird date/time literal format (ie: {d '2999-12-12'}) |
|
99
|
|
|
|
|
|
|
17 => 'SQLite', # SQL_DBMS_NAME - You are here |
|
100
|
|
|
|
|
|
|
18 => \&sql_dbms_ver, # SQL_DBMS_VER - This driver version |
|
101
|
|
|
|
|
|
|
170 => 1+2, # SQL_DDL_INDEX - Supports CREATE/DROP INDEX |
|
102
|
|
|
|
|
|
|
26 => 8, # SQL_DEFAULT_TXN_ISOLATION - Default is SERIALIZABLE (See "PRAGMA read_uncommitted") |
|
103
|
|
|
|
|
|
|
10002 => 'N', # SQL_DESCRIBE_PARAMETER - No DESCRIBE INPUT support |
|
104
|
|
|
|
|
|
|
|
|
105
|
|
|
|
|
|
|
# XXX: MySQL/Oracle fills in HDBC and HENV, but information on what should actually go there is |
|
106
|
|
|
|
|
|
|
# hard to acquire. |
|
107
|
|
|
|
|
|
|
|
|
108
|
|
|
|
|
|
|
# 171 => undef, # SQL_DM_VER - Not a Driver Manager |
|
109
|
|
|
|
|
|
|
# 3 => undef, # SQL_DRIVER_HDBC - Not a Driver Manager |
|
110
|
|
|
|
|
|
|
# 135 => undef, # SQL_DRIVER_HDESC - Not a Driver Manager |
|
111
|
|
|
|
|
|
|
# 4 => undef, # SQL_DRIVER_HENV - Not a Driver Manager |
|
112
|
|
|
|
|
|
|
# 76 => undef, # SQL_DRIVER_HLIB - Not a Driver Manager |
|
113
|
|
|
|
|
|
|
# 5 => undef, # SQL_DRIVER_HSTMT - Not a Driver Manager |
|
114
|
|
|
|
|
|
|
6 => 'libsqlite3odbc.so', # SQL_DRIVER_NAME - SQLite3 ODBC driver (if installed) |
|
115
|
|
|
|
|
|
|
77 => '03.00', # SQL_DRIVER_ODBC_VER - Same as sqlite3odbc.c |
|
116
|
|
|
|
|
|
|
7 => $sql_driver_ver, # SQL_DRIVER_VER - Self-explanatory |
|
117
|
|
|
|
|
|
|
|
|
118
|
|
|
|
|
|
|
136 => 0, # SQL_DROP_ASSERTION - No DROP ASSERTION support |
|
119
|
|
|
|
|
|
|
137 => 0, # SQL_DROP_CHARACTER_SET - No DROP CHARACTER SET support |
|
120
|
|
|
|
|
|
|
138 => 0, # SQL_DROP_COLLATION - No DROP COLLATION support |
|
121
|
|
|
|
|
|
|
139 => 0, # SQL_DROP_DOMAIN - No DROP DOMAIN support |
|
122
|
|
|
|
|
|
|
140 => 0, # SQL_DROP_SCHEMA - No DROP SCHEMA support |
|
123
|
|
|
|
|
|
|
141 => 1, # SQL_DROP_TABLE - DROP TABLE support, no RESTRICT/CASCADE |
|
124
|
|
|
|
|
|
|
142 => 0, # SQL_DROP_TRANSLATION - No DROP TRANSLATION support |
|
125
|
|
|
|
|
|
|
143 => 1, # SQL_DROP_VIEW - DROP VIEW support, no RESTRICT/CASCADE |
|
126
|
|
|
|
|
|
|
|
|
127
|
|
|
|
|
|
|
# NOTE: This is based purely on what sqlite3odbc supports. |
|
128
|
|
|
|
|
|
|
# |
|
129
|
|
|
|
|
|
|
# Static CA1: NEXT, ABSOLUTE, RELATIVE, BOOKMARK, LOCK_NO_CHANGE, POSITION, UPDATE, DELETE, REFRESH, |
|
130
|
|
|
|
|
|
|
# BULK_ADD, BULK_UPDATE_BY_BOOKMARK, BULK_DELETE_BY_BOOKMARK = 466511 |
|
131
|
|
|
|
|
|
|
# |
|
132
|
|
|
|
|
|
|
# Forward-only CA1: NEXT, BOOKMARK |
|
133
|
|
|
|
|
|
|
# |
|
134
|
|
|
|
|
|
|
# CA2: READ_ONLY_CONCURRENCY, LOCK_CONCURRENCY |
|
135
|
|
|
|
|
|
|
|
|
136
|
|
|
|
|
|
|
144 => 0, # SQL_DYNAMIC_CURSOR_ATTRIBUTES1 - No dynamic cursor support |
|
137
|
|
|
|
|
|
|
145 => 0, # SQL_DYNAMIC_CURSOR_ATTRIBUTES2 - No dynamic cursor support |
|
138
|
|
|
|
|
|
|
146 => 1+8, # SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1 |
|
139
|
|
|
|
|
|
|
147 => 1+2, # SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 |
|
140
|
|
|
|
|
|
|
150 => 0, # SQL_KEYSET_CURSOR_ATTRIBUTES1 - No keyset cursor support |
|
141
|
|
|
|
|
|
|
151 => 0, # SQL_KEYSET_CURSOR_ATTRIBUTES2 - No keyset cursor support |
|
142
|
|
|
|
|
|
|
167 => 466511, # SQL_STATIC_CURSOR_ATTRIBUTES1 |
|
143
|
|
|
|
|
|
|
168 => 1+2, # SQL_STATIC_CURSOR_ATTRIBUTES2 |
|
144
|
|
|
|
|
|
|
|
|
145
|
|
|
|
|
|
|
27 => 'Y', # SQL_EXPRESSIONS_IN_ORDERBY - ORDER BY allows expressions |
|
146
|
|
|
|
|
|
|
8 => 63, # SQL_FETCH_DIRECTION - Cursors support next, first, last, prior, absolute, relative |
|
147
|
|
|
|
|
|
|
84 => 2, # SQL_FILE_USAGE - Single-tier driver, treats files as databases |
|
148
|
|
|
|
|
|
|
81 => 1+2+8, # SQL_GETDATA_EXTENSIONS - Same as sqlite3odbc.c |
|
149
|
|
|
|
|
|
|
88 => 3, # SQL_GROUP_BY - SELECT columns are independent of GROUP BY columns |
|
150
|
|
|
|
|
|
|
28 => 4, # SQL_IDENTIFIER_CASE - Not case-sensitive, stored in mixed case |
|
151
|
|
|
|
|
|
|
29 => '"', # SQL_IDENTIFIER_QUOTE_CHAR - Uses " for identifiers, though supports [] and ` as well |
|
152
|
|
|
|
|
|
|
148 => 0, # SQL_INDEX_KEYWORDS - No support for ASC/DESC/ALL for CREATE INDEX |
|
153
|
|
|
|
|
|
|
149 => 0, # SQL_INFO_SCHEMA_VIEWS - No support for INFORMATION_SCHEMA |
|
154
|
|
|
|
|
|
|
172 => 1+2, # SQL_INSERT_STATEMENT - INSERT...VALUES & INSERT...SELECT |
|
155
|
|
|
|
|
|
|
73 => 'N', # SQL_INTEGRITY - No support for "Integrity Enhancement Facility" |
|
156
|
|
|
|
|
|
|
89 => \&sql_keywords, # SQL_KEYWORDS - List of non-ODBC keywords |
|
157
|
|
|
|
|
|
|
113 => 'Y', # SQL_LIKE_ESCAPE_CLAUSE - Supports LIKE...ESCAPE |
|
158
|
|
|
|
|
|
|
78 => 1, # SQL_LOCK_TYPES - Only NO_CHANGE |
|
159
|
|
|
|
|
|
|
|
|
160
|
|
|
|
|
|
|
10022 => 0, # SQL_MAX_ASYNC_CONCURRENT_STATEMENTS - No async mode |
|
161
|
|
|
|
|
|
|
112 => 1_000_000, # SQL_MAX_BINARY_LITERAL_LEN - SQLITE_MAX_SQL_LENGTH |
|
162
|
|
|
|
|
|
|
34 => 1_000_000, # SQL_MAX_CATALOG_NAME_LEN - SQLITE_MAX_SQL_LENGTH |
|
163
|
|
|
|
|
|
|
108 => 1_000_000, # SQL_MAX_CHAR_LITERAL_LEN - SQLITE_MAX_SQL_LENGTH |
|
164
|
|
|
|
|
|
|
97 => 2000, # SQL_MAX_COLUMNS_IN_GROUP_BY - SQLITE_MAX_COLUMN |
|
165
|
|
|
|
|
|
|
98 => 2000, # SQL_MAX_COLUMNS_IN_INDEX - SQLITE_MAX_COLUMN |
|
166
|
|
|
|
|
|
|
99 => 2000, # SQL_MAX_COLUMNS_IN_ORDER_BY - SQLITE_MAX_COLUMN |
|
167
|
|
|
|
|
|
|
100 => 2000, # SQL_MAX_COLUMNS_IN_SELECT - SQLITE_MAX_COLUMN |
|
168
|
|
|
|
|
|
|
101 => 2000, # SQL_MAX_COLUMNS_IN_TABLE - SQLITE_MAX_COLUMN |
|
169
|
|
|
|
|
|
|
30 => 1_000_000, # SQL_MAX_COLUMN_NAME_LEN - SQLITE_MAX_SQL_LENGTH |
|
170
|
|
|
|
|
|
|
1 => 1021, # SQL_MAX_CONCURRENT_ACTIVITIES - Typical filehandle limits |
|
171
|
|
|
|
|
|
|
31 => 1_000_000, # SQL_MAX_CURSOR_NAME_LEN - SQLITE_MAX_SQL_LENGTH |
|
172
|
|
|
|
|
|
|
0 => 1021, # SQL_MAX_DRIVER_CONNECTIONS - Typical filehandle limits |
|
173
|
|
|
|
|
|
|
10005 => 1_000_000, # SQL_MAX_IDENTIFIER_LEN - SQLITE_MAX_SQL_LENGTH |
|
174
|
|
|
|
|
|
|
102 => 2147483646*65536, # SQL_MAX_INDEX_SIZE - Tied to DB size, which is theortically 140TB |
|
175
|
|
|
|
|
|
|
32 => 1_000_000, # SQL_MAX_OWNER_NAME_LEN - SQLITE_MAX_SQL_LENGTH |
|
176
|
|
|
|
|
|
|
33 => 1_000_000, # SQL_MAX_PROCEDURE_NAME_LEN - SQLITE_MAX_SQL_LENGTH |
|
177
|
|
|
|
|
|
|
34 => 1_000_000, # SQL_MAX_QUALIFIER_NAME_LEN - SQLITE_MAX_SQL_LENGTH |
|
178
|
|
|
|
|
|
|
104 => 1_000_000, # SQL_MAX_ROW_SIZE - SQLITE_MAX_SQL_LENGTH (since INSERT has to be used) |
|
179
|
|
|
|
|
|
|
103 => 'Y', # SQL_MAX_ROW_SIZE_INCLUDES_LONG |
|
180
|
|
|
|
|
|
|
32 => 1_000_000, # SQL_MAX_SCHEMA_NAME_LEN - SQLITE_MAX_SQL_LENGTH |
|
181
|
|
|
|
|
|
|
105 => 1_000_000, # SQL_MAX_STATEMENT_LEN - SQLITE_MAX_SQL_LENGTH |
|
182
|
|
|
|
|
|
|
106 => 64, # SQL_MAX_TABLES_IN_SELECT - 64 tables, because of the bitmap in the query optimizer |
|
183
|
|
|
|
|
|
|
35 => 1_000_000, # SQL_MAX_TABLE_NAME_LEN - SQLITE_MAX_SQL_LENGTH |
|
184
|
|
|
|
|
|
|
107 => 0, # SQL_MAX_USER_NAME_LEN - No user support |
|
185
|
|
|
|
|
|
|
|
|
186
|
|
|
|
|
|
|
37 => 'Y', # SQL_MULTIPLE_ACTIVE_TXN - Supports mulitple txns, though not nested |
|
187
|
|
|
|
|
|
|
36 => 'N', # SQL_MULT_RESULT_SETS - No batches |
|
188
|
|
|
|
|
|
|
111 => 'N', # SQL_NEED_LONG_DATA_LEN - Doesn't care about LONG |
|
189
|
|
|
|
|
|
|
75 => 1, # SQL_NON_NULLABLE_COLUMNS - Supports NOT NULL |
|
190
|
|
|
|
|
|
|
85 => 1, # SQL_NULL_COLLATION - NULLs first on ASC (low end) |
|
191
|
|
|
|
|
|
|
49 => 4194304+1, # SQL_NUMERIC_FUNCTIONS - Just ABS & ROUND (has RANDOM, but not RAND) |
|
192
|
|
|
|
|
|
|
|
|
193
|
|
|
|
|
|
|
9 => 1, # SQL_ODBC_API_CONFORMANCE - Same as sqlite3odbc.c |
|
194
|
|
|
|
|
|
|
152 => 1, # SQL_ODBC_INTERFACE_CONFORMANCE - Same as sqlite3odbc.c |
|
195
|
|
|
|
|
|
|
12 => 0, # SQL_ODBC_SAG_CLI_CONFORMANCE - Same as sqlite3odbc.c |
|
196
|
|
|
|
|
|
|
15 => 0, # SQL_ODBC_SQL_CONFORMANCE - Same as sqlite3odbc.c |
|
197
|
|
|
|
|
|
|
10 => '03.00', # SQL_ODBC_VER - Same as sqlite3odbc.c |
|
198
|
|
|
|
|
|
|
|
|
199
|
|
|
|
|
|
|
115 => 1+8+16+32+64, # SQL_OJ_CAPABILITIES - Supports all OUTER JOINs except RIGHT & FULL |
|
200
|
|
|
|
|
|
|
90 => 'N', # SQL_ORDER_BY_COLUMNS_IN_SELECT - ORDER BY columns don't have to be in the SELECT list |
|
201
|
|
|
|
|
|
|
38 => 'Y', # SQL_OUTER_JOINS - Supports OUTER JOINs |
|
202
|
|
|
|
|
|
|
153 => 2, # SQL_PARAM_ARRAY_ROW_COUNTS - Only has row counts for executed statements |
|
203
|
|
|
|
|
|
|
154 => 3, # SQL_PARAM_ARRAY_SELECTS - No support for arrays of parameters |
|
204
|
|
|
|
|
|
|
80 => 0, # SQL_POSITIONED_STATEMENTS - No support for positioned statements (WHERE CURRENT OF or SELECT FOR UPDATE) |
|
205
|
|
|
|
|
|
|
79 => 31, # SQL_POS_OPERATIONS - Supports all SQLSetPos operations |
|
206
|
|
|
|
|
|
|
21 => 'N', # SQL_PROCEDURES - No procedures |
|
207
|
|
|
|
|
|
|
40 => '', # SQL_PROCEDURE_TERM - No procedures |
|
208
|
|
|
|
|
|
|
93 => 4, # SQL_QUOTED_IDENTIFIER_CASE - Even quoted identifiers are case-insensitive |
|
209
|
|
|
|
|
|
|
11 => 'N', # SQL_ROW_UPDATES - No fancy cursor update support |
|
210
|
|
|
|
|
|
|
39 => '', # SQL_SCHEMA_TERM - No schemas |
|
211
|
|
|
|
|
|
|
91 => 0, # SQL_SCHEMA_USAGE - No schemas |
|
212
|
|
|
|
|
|
|
43 => 2, # SQL_SCROLL_CONCURRENCY - Updates/deletes on cursors lock the database |
|
213
|
|
|
|
|
|
|
44 => 1+16, # SQL_SCROLL_OPTIONS - Only supports static & forward-only cursors |
|
214
|
|
|
|
|
|
|
14 => '\\', # SQL_SEARCH_PATTERN_ESCAPE - Default escape character for LIKE is \ |
|
215
|
|
|
|
|
|
|
13 => \&sql_server_name, # SQL_SERVER_NAME - Just $dbh->{Name} |
|
216
|
|
|
|
|
|
|
94 => '', # SQL_SPECIAL_CHARACTERS - Other drivers tend to stick to the ASCII/Latin-1 range, and SQLite uses all of |
|
217
|
|
|
|
|
|
|
# the lower 7-bit punctuation for other things |
|
218
|
|
|
|
|
|
|
|
|
219
|
|
|
|
|
|
|
155 => 7, # SQL_SQL92_DATETIME_FUNCTIONS - Supports CURRENT_(DATE|TIME|TIMESTAMP) |
|
220
|
|
|
|
|
|
|
156 => 1+2+4+8, # SQL_SQL92_FOREIGN_KEY_DELETE_RULE - Support all ON DELETE options |
|
221
|
|
|
|
|
|
|
157 => 1+2+4+8, # SQL_SQL92_FOREIGN_KEY_UPDATE_RULE - Support all ON UPDATE options |
|
222
|
|
|
|
|
|
|
158 => 0, # SQL_SQL92_GRANT - No users; no support for GRANT |
|
223
|
|
|
|
|
|
|
159 => 0, # SQL_SQL92_NUMERIC_VALUE_FUNCTIONS - No support for any of the listed functions |
|
224
|
|
|
|
|
|
|
160 => 1+2+4+512+1024+2048+4096+8192, # SQL_SQL92_PREDICATES - Supports the important comparison operators |
|
225
|
|
|
|
|
|
|
161 => 2+16+64+128, # SQL_SQL92_RELATIONAL_JOIN_OPERATORS - Supports the important ones except RIGHT/FULL OUTER JOINs |
|
226
|
|
|
|
|
|
|
162 => 0, # SQL_SQL92_REVOKE - No users; no support for REVOKE |
|
227
|
|
|
|
|
|
|
163 => 1+2+8, # SQL_SQL92_ROW_VALUE_CONSTRUCTOR - Supports most row value constructors |
|
228
|
|
|
|
|
|
|
164 => 2+4, # SQL_SQL92_STRING_FUNCTIONS - Just UPPER & LOWER (has SUBSTR, but not SUBSTRING and SQL-92's weird TRIM syntax) |
|
229
|
|
|
|
|
|
|
165 => 1+2+4+8, # SQL_SQL92_VALUE_EXPRESSIONS - Supports all SQL-92 value expressions |
|
230
|
|
|
|
|
|
|
|
|
231
|
|
|
|
|
|
|
118 => 1, # SQL_SQL_CONFORMANCE - SQL-92 Entry level |
|
232
|
|
|
|
|
|
|
83 => 0, # SQL_STATIC_SENSITIVITY - Cursors would lock the DB, so only old data is visible |
|
233
|
|
|
|
|
|
|
50 => 8+16+256+1024+16384+131072, # SQL_STRING_FUNCTIONS - LTRIM, LENGTH, REPLACE, RTRIM, CHAR, SOUNDEX |
|
234
|
|
|
|
|
|
|
95 => 1+2+4+8+16, # SQL_SUBQUERIES - Supports all of the subquery types |
|
235
|
|
|
|
|
|
|
51 => 4, # SQL_SYSTEM_FUNCTIONS - Only IFNULL |
|
236
|
|
|
|
|
|
|
45 => 'table', # SQL_TABLE_TERM - Tables are called tables |
|
237
|
|
|
|
|
|
|
109 => 0, # SQL_TIMEDATE_ADD_INTERVALS - No support for INTERVAL |
|
238
|
|
|
|
|
|
|
110 => 0, # SQL_TIMEDATE_DIFF_INTERVALS - No support for INTERVAL |
|
239
|
|
|
|
|
|
|
52 => 0x20000+0x40000+0x80000, # SQL_TIMEDATE_FUNCTIONS - Only supports CURRENT_(DATE|TIME|TIMESTAMP) |
|
240
|
|
|
|
|
|
|
46 => 2, # SQL_TXN_CAPABLE - Full transaction support for both DML & DDL |
|
241
|
|
|
|
|
|
|
72 => 1+8, # SQL_TXN_ISOLATION_OPTION - Supports read uncommitted and serializable |
|
242
|
|
|
|
|
|
|
96 => 1+2, # SQL_UNION - Supports UNION and UNION ALL |
|
243
|
|
|
|
|
|
|
47 => '', # SQL_USER_NAME - No users |
|
244
|
|
|
|
|
|
|
|
|
245
|
|
|
|
|
|
|
166 => 1, # SQL_STANDARD_CLI_CONFORMANCE - X/Open CLI Version 1.0 |
|
246
|
|
|
|
|
|
|
10000 => 1992, # SQL_XOPEN_CLI_YEAR - Year for V1.0 |
|
247
|
|
|
|
|
|
|
); |
|
248
|
|
|
|
|
|
|
|
|
249
|
|
|
|
|
|
|
sub sql_dbms_ver { |
|
250
|
1
|
|
|
1
|
0
|
3
|
my $dbh = shift; |
|
251
|
1
|
|
|
|
|
7
|
return $dbh->FETCH('sqlite_version'); |
|
252
|
|
|
|
|
|
|
} |
|
253
|
|
|
|
|
|
|
|
|
254
|
|
|
|
|
|
|
sub sql_data_source_name { |
|
255
|
1
|
|
|
1
|
0
|
3
|
my $dbh = shift; |
|
256
|
1
|
|
|
|
|
4
|
return "dbi:SQLite:".$dbh->{Name}; |
|
257
|
|
|
|
|
|
|
} |
|
258
|
|
|
|
|
|
|
|
|
259
|
|
|
|
|
|
|
sub sql_data_source_read_only { |
|
260
|
1
|
|
|
1
|
0
|
3
|
my $dbh = shift; |
|
261
|
1
|
|
50
|
|
|
15
|
my $flags = $dbh->FETCH('sqlite_open_flags') || 0; |
|
262
|
1
|
50
|
33
|
|
|
10
|
return $dbh->{ReadOnly} || ($flags & DBD::SQLite::OPEN_READONLY()) ? 'Y' : 'N'; |
|
263
|
|
|
|
|
|
|
} |
|
264
|
|
|
|
|
|
|
|
|
265
|
|
|
|
|
|
|
sub sql_database_name { |
|
266
|
1
|
|
|
1
|
0
|
3
|
my $dbh = shift; |
|
267
|
1
|
|
|
|
|
11
|
my $databases = $dbh->selectall_hashref('PRAGMA database_list', 'seq'); |
|
268
|
1
|
|
|
|
|
243
|
return $databases->{0}{name}; |
|
269
|
|
|
|
|
|
|
} |
|
270
|
|
|
|
|
|
|
|
|
271
|
|
|
|
|
|
|
sub sql_keywords { |
|
272
|
|
|
|
|
|
|
# SQLite keywords minus ODBC keywords |
|
273
|
1
|
|
|
1
|
0
|
3
|
return join ',', (qw< |
|
274
|
|
|
|
|
|
|
ABORT AFTER ANALYZE ATTACH AUTOINCREMENT BEFORE CONFLICT DATABASE DETACH EACH EXCLUSIVE |
|
275
|
|
|
|
|
|
|
EXPLAIN FAIL GLOB IF IGNORE INDEXED INSTEAD ISNULL LIMIT NOTNULL OFFSET |
|
276
|
|
|
|
|
|
|
PLAN PRAGMA QUERY RAISE RECURSIVE REGEXP REINDEX RELEASE RENAME REPLACE ROW |
|
277
|
|
|
|
|
|
|
SAVEPOINT TEMP TRIGGER VACUUM VIRTUAL WITHOUT |
|
278
|
|
|
|
|
|
|
>); |
|
279
|
|
|
|
|
|
|
} |
|
280
|
|
|
|
|
|
|
|
|
281
|
|
|
|
|
|
|
sub sql_server_name { |
|
282
|
1
|
|
|
1
|
0
|
3
|
my $dbh = shift; |
|
283
|
1
|
|
|
|
|
4
|
return $dbh->{Name}; |
|
284
|
|
|
|
|
|
|
} |
|
285
|
|
|
|
|
|
|
|
|
286
|
|
|
|
|
|
|
1; |
|
287
|
|
|
|
|
|
|
|
|
288
|
|
|
|
|
|
|
__END__ |