DBD-SQLite
view release on metacpan or search on metacpan
lib/DBD/SQLite/GetInfo.pm view on Meta::CPAN
70 => 33554431, # SQL_CONVERT_VARCHAR
122 => 33554431, # SQL_CONVERT_WCHAR
125 => 33554431, # SQL_CONVERT_WLONGVARCHAR
126 => 33554431, # SQL_CONVERT_WVARCHAR
74 => 1, # SQL_CORRELATION_NAME - Table aliases are supported, but must be named differently
127 => 0, # SQL_CREATE_ASSERTION - No CREATE ASSERTION support
128 => 0, # SQL_CREATE_CHARACTER_SET - No CREATE CHARACTER SET support
129 => 0, # SQL_CREATE_COLLATION - No CREATE COLLATION support
130 => 0, # SQL_CREATE_DOMAIN - No CREATE DOMAIN support
131 => 0, # SQL_CREATE_SCHEMA - No CREATE SCHEMA support
132 => 16383-2-8-4096, # SQL_CREATE_TABLE - Most of the functionality of CREATE TABLE support
133 => 0, # SQL_CREATE_TRANSLATION - No CREATE TRANSLATION support
134 => 1, # SQL_CREATE_VIEW - CREATE VIEW, no WITH CHECK OPTION support
23 => 2, # SQL_CURSOR_COMMIT_BEHAVIOR - Cursors are preserved
24 => 2, # SQL_CURSOR_ROLLBACK_BEHAVIOR - Cursors are preserved
10001 => 0, # SQL_CURSOR_SENSITIVITY - Cursors have a concept of snapshots, though this depends on the transaction type
2 => \&sql_data_source_name, # SQL_DATA_SOURCE_NAME - The DSN
25 => \&sql_data_source_read_only, # SQL_DATA_SOURCE_READ_ONLY - Might have a SQLITE_OPEN_READONLY flag
16 => \&sql_database_name, # SQL_DATABASE_NAME - Self-explanatory
119 => 0, # SQL_DATETIME_LITERALS - No support for SQL-92's super weird date/time literal format (ie: {d '2999-12-12'})
17 => 'SQLite', # SQL_DBMS_NAME - You are here
18 => \&sql_dbms_ver, # SQL_DBMS_VER - This driver version
170 => 1+2, # SQL_DDL_INDEX - Supports CREATE/DROP INDEX
26 => 8, # SQL_DEFAULT_TXN_ISOLATION - Default is SERIALIZABLE (See "PRAGMA read_uncommitted")
10002 => 'N', # SQL_DESCRIBE_PARAMETER - No DESCRIBE INPUT support
# XXX: MySQL/Oracle fills in HDBC and HENV, but information on what should actually go there is
# hard to acquire.
# 171 => undef, # SQL_DM_VER - Not a Driver Manager
# 3 => undef, # SQL_DRIVER_HDBC - Not a Driver Manager
# 135 => undef, # SQL_DRIVER_HDESC - Not a Driver Manager
# 4 => undef, # SQL_DRIVER_HENV - Not a Driver Manager
# 76 => undef, # SQL_DRIVER_HLIB - Not a Driver Manager
# 5 => undef, # SQL_DRIVER_HSTMT - Not a Driver Manager
6 => 'libsqlite3odbc.so', # SQL_DRIVER_NAME - SQLite3 ODBC driver (if installed)
77 => '03.00', # SQL_DRIVER_ODBC_VER - Same as sqlite3odbc.c
7 => $sql_driver_ver, # SQL_DRIVER_VER - Self-explanatory
136 => 0, # SQL_DROP_ASSERTION - No DROP ASSERTION support
137 => 0, # SQL_DROP_CHARACTER_SET - No DROP CHARACTER SET support
138 => 0, # SQL_DROP_COLLATION - No DROP COLLATION support
139 => 0, # SQL_DROP_DOMAIN - No DROP DOMAIN support
140 => 0, # SQL_DROP_SCHEMA - No DROP SCHEMA support
141 => 1, # SQL_DROP_TABLE - DROP TABLE support, no RESTRICT/CASCADE
142 => 0, # SQL_DROP_TRANSLATION - No DROP TRANSLATION support
143 => 1, # SQL_DROP_VIEW - DROP VIEW support, no RESTRICT/CASCADE
# NOTE: This is based purely on what sqlite3odbc supports.
#
# Static CA1: NEXT, ABSOLUTE, RELATIVE, BOOKMARK, LOCK_NO_CHANGE, POSITION, UPDATE, DELETE, REFRESH,
# BULK_ADD, BULK_UPDATE_BY_BOOKMARK, BULK_DELETE_BY_BOOKMARK = 466511
#
# Forward-only CA1: NEXT, BOOKMARK
#
# CA2: READ_ONLY_CONCURRENCY, LOCK_CONCURRENCY
144 => 0, # SQL_DYNAMIC_CURSOR_ATTRIBUTES1 - No dynamic cursor support
145 => 0, # SQL_DYNAMIC_CURSOR_ATTRIBUTES2 - No dynamic cursor support
146 => 1+8, # SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1
147 => 1+2, # SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2
150 => 0, # SQL_KEYSET_CURSOR_ATTRIBUTES1 - No keyset cursor support
151 => 0, # SQL_KEYSET_CURSOR_ATTRIBUTES2 - No keyset cursor support
167 => 466511, # SQL_STATIC_CURSOR_ATTRIBUTES1
168 => 1+2, # SQL_STATIC_CURSOR_ATTRIBUTES2
27 => 'Y', # SQL_EXPRESSIONS_IN_ORDERBY - ORDER BY allows expressions
8 => 63, # SQL_FETCH_DIRECTION - Cursors support next, first, last, prior, absolute, relative
84 => 2, # SQL_FILE_USAGE - Single-tier driver, treats files as databases
81 => 1+2+8, # SQL_GETDATA_EXTENSIONS - Same as sqlite3odbc.c
88 => 3, # SQL_GROUP_BY - SELECT columns are independent of GROUP BY columns
28 => 4, # SQL_IDENTIFIER_CASE - Not case-sensitive, stored in mixed case
29 => '"', # SQL_IDENTIFIER_QUOTE_CHAR - Uses " for identifiers, though supports [] and ` as well
148 => 0, # SQL_INDEX_KEYWORDS - No support for ASC/DESC/ALL for CREATE INDEX
149 => 0, # SQL_INFO_SCHEMA_VIEWS - No support for INFORMATION_SCHEMA
172 => 1+2, # SQL_INSERT_STATEMENT - INSERT...VALUES & INSERT...SELECT
73 => 'N', # SQL_INTEGRITY - No support for "Integrity Enhancement Facility"
89 => \&sql_keywords, # SQL_KEYWORDS - List of non-ODBC keywords
113 => 'Y', # SQL_LIKE_ESCAPE_CLAUSE - Supports LIKE...ESCAPE
78 => 1, # SQL_LOCK_TYPES - Only NO_CHANGE
10022 => 0, # SQL_MAX_ASYNC_CONCURRENT_STATEMENTS - No async mode
112 => 1_000_000, # SQL_MAX_BINARY_LITERAL_LEN - SQLITE_MAX_SQL_LENGTH
34 => 1_000_000, # SQL_MAX_CATALOG_NAME_LEN - SQLITE_MAX_SQL_LENGTH
108 => 1_000_000, # SQL_MAX_CHAR_LITERAL_LEN - SQLITE_MAX_SQL_LENGTH
97 => 2000, # SQL_MAX_COLUMNS_IN_GROUP_BY - SQLITE_MAX_COLUMN
98 => 2000, # SQL_MAX_COLUMNS_IN_INDEX - SQLITE_MAX_COLUMN
99 => 2000, # SQL_MAX_COLUMNS_IN_ORDER_BY - SQLITE_MAX_COLUMN
100 => 2000, # SQL_MAX_COLUMNS_IN_SELECT - SQLITE_MAX_COLUMN
101 => 2000, # SQL_MAX_COLUMNS_IN_TABLE - SQLITE_MAX_COLUMN
30 => 1_000_000, # SQL_MAX_COLUMN_NAME_LEN - SQLITE_MAX_SQL_LENGTH
1 => 1021, # SQL_MAX_CONCURRENT_ACTIVITIES - Typical filehandle limits
31 => 1_000_000, # SQL_MAX_CURSOR_NAME_LEN - SQLITE_MAX_SQL_LENGTH
0 => 1021, # SQL_MAX_DRIVER_CONNECTIONS - Typical filehandle limits
10005 => 1_000_000, # SQL_MAX_IDENTIFIER_LEN - SQLITE_MAX_SQL_LENGTH
102 => 2147483646*65536, # SQL_MAX_INDEX_SIZE - Tied to DB size, which is theortically 140TB
32 => 1_000_000, # SQL_MAX_OWNER_NAME_LEN - SQLITE_MAX_SQL_LENGTH
33 => 1_000_000, # SQL_MAX_PROCEDURE_NAME_LEN - SQLITE_MAX_SQL_LENGTH
34 => 1_000_000, # SQL_MAX_QUALIFIER_NAME_LEN - SQLITE_MAX_SQL_LENGTH
104 => 1_000_000, # SQL_MAX_ROW_SIZE - SQLITE_MAX_SQL_LENGTH (since INSERT has to be used)
103 => 'Y', # SQL_MAX_ROW_SIZE_INCLUDES_LONG
32 => 1_000_000, # SQL_MAX_SCHEMA_NAME_LEN - SQLITE_MAX_SQL_LENGTH
105 => 1_000_000, # SQL_MAX_STATEMENT_LEN - SQLITE_MAX_SQL_LENGTH
106 => 64, # SQL_MAX_TABLES_IN_SELECT - 64 tables, because of the bitmap in the query optimizer
35 => 1_000_000, # SQL_MAX_TABLE_NAME_LEN - SQLITE_MAX_SQL_LENGTH
107 => 0, # SQL_MAX_USER_NAME_LEN - No user support
37 => 'Y', # SQL_MULTIPLE_ACTIVE_TXN - Supports mulitple txns, though not nested
36 => 'N', # SQL_MULT_RESULT_SETS - No batches
111 => 'N', # SQL_NEED_LONG_DATA_LEN - Doesn't care about LONG
75 => 1, # SQL_NON_NULLABLE_COLUMNS - Supports NOT NULL
85 => 1, # SQL_NULL_COLLATION - NULLs first on ASC (low end)
49 => 4194304+1, # SQL_NUMERIC_FUNCTIONS - Just ABS & ROUND (has RANDOM, but not RAND)
9 => 1, # SQL_ODBC_API_CONFORMANCE - Same as sqlite3odbc.c
152 => 1, # SQL_ODBC_INTERFACE_CONFORMANCE - Same as sqlite3odbc.c
12 => 0, # SQL_ODBC_SAG_CLI_CONFORMANCE - Same as sqlite3odbc.c
15 => 0, # SQL_ODBC_SQL_CONFORMANCE - Same as sqlite3odbc.c
10 => '03.00', # SQL_ODBC_VER - Same as sqlite3odbc.c
115 => 1+8+16+32+64, # SQL_OJ_CAPABILITIES - Supports all OUTER JOINs except RIGHT & FULL
90 => 'N', # SQL_ORDER_BY_COLUMNS_IN_SELECT - ORDER BY columns don't have to be in the SELECT list
38 => 'Y', # SQL_OUTER_JOINS - Supports OUTER JOINs
153 => 2, # SQL_PARAM_ARRAY_ROW_COUNTS - Only has row counts for executed statements
154 => 3, # SQL_PARAM_ARRAY_SELECTS - No support for arrays of parameters
80 => 0, # SQL_POSITIONED_STATEMENTS - No support for positioned statements (WHERE CURRENT OF or SELECT FOR UPDATE)
79 => 31, # SQL_POS_OPERATIONS - Supports all SQLSetPos operations
21 => 'N', # SQL_PROCEDURES - No procedures
40 => '', # SQL_PROCEDURE_TERM - No procedures
93 => 4, # SQL_QUOTED_IDENTIFIER_CASE - Even quoted identifiers are case-insensitive
11 => 'N', # SQL_ROW_UPDATES - No fancy cursor update support
39 => '', # SQL_SCHEMA_TERM - No schemas
91 => 0, # SQL_SCHEMA_USAGE - No schemas
43 => 2, # SQL_SCROLL_CONCURRENCY - Updates/deletes on cursors lock the database
44 => 1+16, # SQL_SCROLL_OPTIONS - Only supports static & forward-only cursors
14 => '\\', # SQL_SEARCH_PATTERN_ESCAPE - Default escape character for LIKE is \
13 => \&sql_server_name, # SQL_SERVER_NAME - Just $dbh->{Name}
94 => '', # SQL_SPECIAL_CHARACTERS - Other drivers tend to stick to the ASCII/Latin-1 range, and SQLite uses all of
# the lower 7-bit punctuation for other things
155 => 7, # SQL_SQL92_DATETIME_FUNCTIONS - Supports CURRENT_(DATE|TIME|TIMESTAMP)
156 => 1+2+4+8, # SQL_SQL92_FOREIGN_KEY_DELETE_RULE - Support all ON DELETE options
157 => 1+2+4+8, # SQL_SQL92_FOREIGN_KEY_UPDATE_RULE - Support all ON UPDATE options
158 => 0, # SQL_SQL92_GRANT - No users; no support for GRANT
159 => 0, # SQL_SQL92_NUMERIC_VALUE_FUNCTIONS - No support for any of the listed functions
160 => 1+2+4+512+1024+2048+4096+8192, # SQL_SQL92_PREDICATES - Supports the important comparison operators
161 => 2+16+64+128, # SQL_SQL92_RELATIONAL_JOIN_OPERATORS - Supports the important ones except RIGHT/FULL OUTER JOINs
162 => 0, # SQL_SQL92_REVOKE - No users; no support for REVOKE
163 => 1+2+8, # SQL_SQL92_ROW_VALUE_CONSTRUCTOR - Supports most row value constructors
164 => 2+4, # SQL_SQL92_STRING_FUNCTIONS - Just UPPER & LOWER (has SUBSTR, but not SUBSTRING and SQL-92's weird TRIM syntax)
165 => 1+2+4+8, # SQL_SQL92_VALUE_EXPRESSIONS - Supports all SQL-92 value expressions
118 => 1, # SQL_SQL_CONFORMANCE - SQL-92 Entry level
83 => 0, # SQL_STATIC_SENSITIVITY - Cursors would lock the DB, so only old data is visible
50 => 8+16+256+1024+16384+131072, # SQL_STRING_FUNCTIONS - LTRIM, LENGTH, REPLACE, RTRIM, CHAR, SOUNDEX
95 => 1+2+4+8+16, # SQL_SUBQUERIES - Supports all of the subquery types
51 => 4, # SQL_SYSTEM_FUNCTIONS - Only IFNULL
45 => 'table', # SQL_TABLE_TERM - Tables are called tables
109 => 0, # SQL_TIMEDATE_ADD_INTERVALS - No support for INTERVAL
110 => 0, # SQL_TIMEDATE_DIFF_INTERVALS - No support for INTERVAL
52 => 0x20000+0x40000+0x80000, # SQL_TIMEDATE_FUNCTIONS - Only supports CURRENT_(DATE|TIME|TIMESTAMP)
46 => 2, # SQL_TXN_CAPABLE - Full transaction support for both DML & DDL
72 => 1+8, # SQL_TXN_ISOLATION_OPTION - Supports read uncommitted and serializable
96 => 1+2, # SQL_UNION - Supports UNION and UNION ALL
47 => '', # SQL_USER_NAME - No users
166 => 1, # SQL_STANDARD_CLI_CONFORMANCE - X/Open CLI Version 1.0
10000 => 1992, # SQL_XOPEN_CLI_YEAR - Year for V1.0
);
sub sql_dbms_ver {
my $dbh = shift;
return $dbh->FETCH('sqlite_version');
}
sub sql_data_source_name {
my $dbh = shift;
return "dbi:SQLite:".$dbh->{Name};
}
sub sql_data_source_read_only {
my $dbh = shift;
my $flags = $dbh->FETCH('sqlite_open_flags') || 0;
return $dbh->{ReadOnly} || ($flags & DBD::SQLite::OPEN_READONLY()) ? 'Y' : 'N';
}
sub sql_database_name {
my $dbh = shift;
my $databases = $dbh->selectall_hashref('PRAGMA database_list', 'seq');
return $databases->{0}{name};
}
sub sql_keywords {
# SQLite keywords minus ODBC keywords
return join ',', (qw<
( run in 1.731 second using v1.01-cache-2.11-cpan-97f6503c9c8 )