[Sorry for the late reply]

I'd rather DBI::Const::GetInfoReturn and DBI::Const::GetInfoType
were extended and documented to provide whatever API you need.

Tim.


On Mon, Jun 11, 2012 at 09:00:06AM -0400, Brendan Byrd wrote:
> Currently, the following language appears in DBI::Const::GetInfo::ODBC:
> 
> The API for this module is private and subject to change.
> 
> But, it really hasn't in 10 years, and it's quite handy for drivers to
> use.  Can we remove this warning and possibly document the module?
> Here's an example of how DBD::SNMP is using it:
> 
> ##############################################################################
> # DBD::SNMP::GetInfo
> 
> package   # hide from PAUSE
>    DBD::SNMP::GetInfo;
> 
> use sanity;
> use parent qw(SQL::Statement::GetInfo);
> 
> sub sql_keywords {
>    return join(',', keys %{
> SQL::Dialects::SNMP::get_config_as_hash()->{reserved_words} });
> }
> 
> # GetInfo key adjustments
> use DBI::Const::GetInfo::ODBC;  # The API for this module is private
> and subject to change.
>    # (Yes, I know, but it hasn't, and it's really handy...)
> 
> # More details on these variables here:
> #   http://msdn.microsoft.com/en-us/library/ms711681.aspx
> #   http://vieka.com/esqldoc/esqlref/htm/odbcsqlgetinfo.htm
> 
> my %r = %DBI::Const::GetInfo::ODBC::ReturnValues;
> my %i = %DBI::Const::GetInfo::ODBC::InfoTypes;
> our %info;
> *info = *SQL::Statement::GetInfo::info;
> 
> # FIXME: This should actually be in SQL::Statement::GetInfo
> $info{ $i{SQL_CREATE_TABLE} }             = $r{SQL_CT_CREATE_TABLE} +
> $r{SQL_CT_COMMIT_DELETE} + $r{SQL_CT_LOCAL_TEMPORARY};
> $info{ $i{SQL_COLUMN_ALIAS} }             = 'Y';
> $info{ $i{SQL_SQL92_DATETIME_FUNCTIONS} } = $r{SQL_SDF_CURRENT_DATE} +
> $r{SQL_SDF_CURRENT_TIME} + $r{SQL_SDF_CURRENT_TIMESTAMP};
> $info{ $i{SQL_NUMERIC_FUNCTIONS} }        = 0x00ffffff;  # all of them!
> $info{ $i{SQL_SQL92_NUMERIC_VALUE_FUNCTIONS} } =
> $r{SQL_SNVF_BIT_LENGTH} + $r{SQL_SNVF_CHAR_LENGTH} +
> $r{SQL_SNVF_CHARACTER_LENGTH} + $r{SQL_SNVF_OCTET_LENGTH} +
> $r{SQL_SNVF_POSITION};  # (only missing EXTRACT)
> $info{ $i{SQL_SQL92_STRING_FUNCTIONS} }   = 0x000000fe;  # (now with
> TRANSLATE support; only missing CONVERT here)
> $info{ $i{SQL_STRING_FUNCTIONS} }         = 0x00ff7fff;  # (only
> missing DIFFERENCE)
> $info{ $i{SQL_SYSTEM_FUNCTIONS} }         = $r{SQL_FN_SYS_DBNAME} +
> $r{SQL_FN_SYS_IFNULL} + $r{SQL_FN_SYS_USERNAME};
> 
> $info{ $i{SQL_ASYNC_MODE} }             = $r{SQL_AM_CONNECTION};  #
> though, technically, everything is forced as async
> $info{ $i{SQL_DATA_SOURCE_READ_ONLY} }  = 'Y';  # for the time being,
> will change later
> $info{ $i{SQL_FILE_USAGE} }             = $r{SQL_FILE_NOT_SUPPORTED};
> $info{ $i{SQL_MULTIPLE_ACTIVE_TXN} }    = 'Y';
> 
> # RFC2578: OCTET STRING (SIZE (0..65535))
> $info{ $i{SQL_MAX_BINARY_LITERAL_LEN} } = 65536;
> $info{ $i{SQL_MAX_CHAR_LITERAL_LEN} }   = 65536;
> #$info{ $i{SQL_MAX_SCHEMA_NAME_LEN} }   = ???;   # Don't think there's
> a max MIB name length...
> $info{ $i{SQL_MAX_TABLE_NAME_LEN} }     = 768;   # XXX: This needs RFC
> confirmation
> $info{ $i{SQL_MAX_COLUMN_NAME_LEN} }    = 768;   # XXX: This needs RFC
> confirmation
> # RFC2574: msgUserName OCTET STRING (SIZE(0..32)),
> $info{ $i{SQL_MAX_USER_NAME_LEN} }      = 32;
> # RFC1905: SNMPv2 limits OBJECT IDENTIFIER values to a maximum of 128
> sub-identifiers, where each sub-identifier has a
> # maximum value of 2**32-1.
> $info{ $i{SQL_MAX_COLUMNS_IN_INDEX} }  = 128;
> $info{ $i{SQL_MAX_INDEX_SIZE} }        = 128 * 10;
> 
> $info{ $i{SQL_SCHEMA_TERM} }           = 'MIB';
> $info{ $i{SQL_SCHEMA_USAGE} }          = $r{SQL_SU_DML_STATEMENTS} +
> $r{SQL_SU_TABLE_DEFINITION};
> 
> # We need to save some sanity here, so case sensitivity is OFF
> $info{ $i{SQL_IDENTIFIER_CASE} }       = $r{SQL_IC_MIXED};
> 
> -- 
> Brendan Byrd <p...@resonatorsoft.org>
> Brendan Byrd <bb...@cpan.org>
> 

Reply via email to