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 )