home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / perl502b.zip / ext / DB2CLI / DB2CLI.pm next >
Text File  |  1995-10-20  |  25KB  |  1,122 lines

  1. package DB2CLI;
  2.  
  3. =head1 NAME
  4.  
  5. DB2CLI - Call Level Interface of DB2/x.
  6.  
  7. =head1 DESCRIPTION
  8.  
  9. This modules supports all CLI (Call Level Interface) calls of DB2 2.1,
  10. except for SQLBind*, SQLExtendedFetch, SQLParam*, SQLPutData and
  11. SQLSetParam.
  12.  
  13. =head2 CLI Functions
  14.  
  15. For a detailed description of the CLI functions, consult the CLI
  16. reference. Parameters are passed one-to-one, with exceptions from this
  17. rule noted below. Some functions have default values for trailing
  18. parameters. Consult the implementation (db2cli.xs) for details on
  19. default arguments.
  20.  
  21. Output (pointer) arguments expect an lvalue (variable).
  22.  
  23. String lengths are implicit, both in and out. Functions which return
  24. data with a length argument of type SQLINTEGER can pass at most 1MB.
  25.  
  26. Parameters cannot be bound. Instead they are passed as trailing
  27. arguments to SQLExecute|ExecDirect[2] (see below). Missing or "undef"
  28. parameters are passed as NULL. Output parameters of stored procedures
  29. are not supported.
  30.  
  31. =item SQLExecute|ExecDirect
  32.  
  33. expect one argument for each parameter. The data types are derived
  34. from the Perl data type. Integer values are passed as SQL_INTEGER,
  35. floating point values as SQL_DOUBLE and strings as SQL_CHAR.
  36.  
  37. =item SQLExecute2|ExecDirect2
  38.  
  39. expect three arguments for each parameter. The first is the C data
  40. type (ignored if the value is of integer or floating point type), the
  41. second is the SQL data type and the third is the value.
  42.  
  43. =item Result columns
  44.  
  45. cannot be bound. Get column data as SQL_C_CHAR strings by supplying
  46. lvalue arguments to SQLFetch, or use SQLGetData. NULL values assign
  47. "undef". When using SQLGetData, SQL_C_SHORT|LONG assign an integer
  48. value, SQL_C_FLOAT|DOUBLE a floating point value and all others a
  49. string.
  50.  
  51. =item SQLGet(EnvAttr|ConnectOption|StmtOption)
  52.  
  53. Use SQLGet(EnvAttr|ConnectOption|StmtOption)Long for integer
  54. attributes/options and SQLGet(EnvAttr|ConnectOption|StmtOption)Str for
  55. string attributes/options.
  56.  
  57. =item SQLGetInfo
  58.  
  59. Use SQLGetInfoShort for 16-bit integers, SQLGetInfoLong for 32-bit
  60. integers and masks and SQLGetInfoStr for strings. Or use SQLGetInfoStr
  61. for all and unpack the returned data.
  62.  
  63. =item SQLSet(EnvAttr|ConnectOption|StmtOption)
  64.  
  65. pass a string attribute/option if the argument is a string and an
  66. integer attribute/option otherwise.
  67.  
  68. =item Constants
  69.  
  70. All constants defined in sqlcli.h, sqlcli1.h and sqlext.h are
  71. available as parameterless functions (the usual way for xsubs). I
  72. strongly recommend "use strict 'subs'", since a mistyped upper case
  73. name without parentheses silently yields the name string instead of
  74. the expected integer value (even with -w).
  75.  
  76. =back
  77.  
  78. =head2 High-Level Functions
  79.  
  80. On error, all high-level functions display an error message and die
  81. with a stack trace.
  82.  
  83. =item $connRef = Connect DB2CLI $dbname, $userid=undef, $password=undef;
  84.  
  85. Initialize CLI (first call) and connect to database. Return a
  86. reference to the database connection instance (object).
  87.  
  88. =item $connRef->Transact $type=SQL_COMMIT
  89.  
  90. Perform transaction. Return $connRef.
  91.  
  92. =item $connRef->Disconnect
  93.  
  94. Disconnect from database and deinitialize CLI (last call). $connRef is
  95. set to undef.
  96.  
  97. =item $stmtRef = $connRef->Statement [$comment]
  98.  
  99. Create a statement instance. Returns a reference to the instance.
  100. $comment is displayed in error messages.
  101.  
  102. =item $rc = $connRef->ExecDirect $sqlstmt, @args
  103.  
  104. Shorthand for Statement+Execute+Release. Pass the return code of
  105. SQLExecute.
  106.  
  107. =item $rc = $stmtRef->Prepare $sqlstmt, [$stmtRef2]
  108.  
  109. Prepares a SQL statement. If $stmtRef2 is given, append the name of
  110. its cursor to the SQL statement text - in this case the SQL statement
  111. should end in "WHERE CURRENT OF". Returns $stmtRef.
  112.  
  113. =item $rc = $stmtRef->Execute @args
  114.  
  115. Execute the prepared statement, optionally passing the given
  116. arguments. Pass the return code of SQLExecute.
  117.  
  118. =item $rc = $stmtRef->Fetch @cols
  119.  
  120. Fetch the next row into @cols (list of lvalues). Pass the return code
  121. of SQLFetch.
  122.  
  123. =item $stmtRef->Close
  124.  
  125. Release resources and locks associated with a prepared
  126. statement. Return $stmtRef.
  127.  
  128. =item $stmtRef->Release
  129.  
  130. Like Close, but release the statement instance too. Always returns
  131. undef.
  132.  
  133. =item $anyRef->Message [$text]
  134.  
  135. Display available information about the last error associated with the
  136. connection or statement instance. Transactions are rolled back. The
  137. script is terminated by calling `confess' (see Carp.pm) with $text as
  138. argument.
  139.  
  140. =item $connRef->{HENV}, $connRef->{HDBC}, $stmtRef->{HSTMT}
  141.  
  142. Environment, connection and statement handle of connection or
  143. statement instance.
  144.  
  145. =back
  146.  
  147. =head2 EXAMPLE
  148.  
  149.      use DB2CLI;
  150.      use strict 'subs';
  151.      
  152.      die "Usage: runstats <database> <schema>\n"
  153.          if $#ARGV < 1;
  154.      $database = uc shift @ARGV;
  155.      $schema   = uc shift @ARGV;
  156.      
  157.      $dbc = Connect DB2CLI $database, undef, undef;
  158.      $stmt = $dbc->Statement("Select tables of schema $schema");
  159.      
  160.      $rc = SQLTables($stmt->{HSTMT}, "", $schema, "%", "")
  161.          and $stmt->Message("SQLTables", $rc);
  162.      
  163.      while (($rc = $stmt->Fetch($cat, $sch, $tab, $typ, $rem)) == 0) {
  164.          print "runstats on table $sch.$tab with distribution and detailed indexes all\n";
  165.      }
  166.      
  167.      $stmt->Release();
  168.      $dbc->Disconnect();
  169.  
  170. =cut
  171.  
  172. use Carp;
  173. require Exporter;
  174. require DynaLoader;
  175. require AutoLoader;
  176.  
  177. @ISA = qw(Exporter DynaLoader);
  178. # Items to export into callers namespace by default. Note: do not export
  179. # names by default without a very good reason. Use EXPORT_OK instead.
  180. # Do not simply export all your public functions/methods/constants.
  181. @EXPORT = qw(
  182.     SQLAllocConnect
  183.     SQLAllocEnv
  184.     SQLAllocStmt
  185.     SQLCancel
  186.     SQLColAttributes
  187.     SQLColumnPrivileges
  188.     SQLColumns
  189.     SQLConnect
  190.     SQLDataSources
  191.     SQLDescribeCol
  192.     SQLDisconnect
  193.     SQLDriverConnect
  194.     SQLError
  195.     SQLExecDirect
  196.     SQLExecDirect2
  197.     SQLExecute
  198.     SQLExecute2
  199.     SQLFetch
  200.     SQLForeignKeys
  201.     SQLFreeConnect
  202.     SQLFreeEnv
  203.     SQLFreeStmt
  204.     SQLGetConnectOptionLong
  205.     SQLGetConnectOptionStr
  206.     SQLGetCursorName
  207.     SQLGetData
  208.     SQLGetEnvAttrLong
  209.     SQLGetEnvAttrStr
  210.     SQLGetFunctions
  211.     SQLGetInfoLong
  212.     SQLGetInfoShort
  213.     SQLGetInfoStr
  214.     SQLGetLength
  215.     SQLGetPosition
  216.     SQLGetSQLCA
  217.     SQLGetStmtOptionLong
  218.     SQLGetStmtOptionStr
  219.     SQLGetSubString
  220.     SQLGetTypeInfo
  221.     SQLMoreResults
  222.     SQLNativeSql
  223.     SQLNumParams
  224.     SQLNumResultCols
  225.     SQLPrepare
  226.     SQLPrimaryKeys
  227.     SQLProcedureColumns
  228.     SQLProcedures
  229.     SQLRowCount
  230.     SQLSetColAttributes
  231.     SQLSetConnectOption
  232.     SQLSetConnection
  233.     SQLSetCursorName
  234.     SQLSetEnvAttr
  235.     SQLSetStmtOption
  236.     SQLSpecialColumns
  237.     SQLStatistics
  238.     SQLTablePrivileges
  239.     SQLTables
  240.     SQLTransact
  241.     DB2CLI_VER
  242.     ODBCVER
  243.     SQL_ACCESSIBLE_PROCEDURES
  244.     SQL_ACCESSIBLE_TABLES
  245.     SQL_ACCESS_MODE
  246.     SQL_ACTIVE_CONNECTIONS
  247.     SQL_ACTIVE_STATEMENTS
  248.     SQL_ADD
  249.     SQL_ALL_EXCEPT_LIKE
  250.     SQL_ALL_TYPES
  251.     SQL_ALTER_TABLE
  252.     SQL_API
  253.     SQL_API_ALL_FUNCTIONS
  254.     SQL_API_SQLALLOCCONNECT
  255.     SQL_API_SQLALLOCENV
  256.     SQL_API_SQLALLOCSTMT
  257.     SQL_API_SQLBINDCOL
  258.     SQL_API_SQLBINDFILETOCOL
  259.     SQL_API_SQLBINDFILETOPARAM
  260.     SQL_API_SQLBINDPARAMETER
  261.     SQL_API_SQLBROWSECONNECT
  262.     SQL_API_SQLCANCEL
  263.     SQL_API_SQLCOLATTRIBUTES
  264.     SQL_API_SQLCOLUMNPRIVILEGES
  265.     SQL_API_SQLCOLUMNS
  266.     SQL_API_SQLCONNECT
  267.     SQL_API_SQLDATASOURCES
  268.     SQL_API_SQLDESCRIBECOL
  269.     SQL_API_SQLDESCRIBEPARAM
  270.     SQL_API_SQLDISCONNECT
  271.     SQL_API_SQLDRIVERCONNECT
  272.     SQL_API_SQLDRIVERS
  273.     SQL_API_SQLERROR
  274.     SQL_API_SQLEXECDIRECT
  275.     SQL_API_SQLEXECUTE
  276.     SQL_API_SQLEXTENDEDFETCH
  277.     SQL_API_SQLFETCH
  278.     SQL_API_SQLFOREIGNKEYS
  279.     SQL_API_SQLFREECONNECT
  280.     SQL_API_SQLFREEENV
  281.     SQL_API_SQLFREESTMT
  282.     SQL_API_SQLGETCONNECTOPTION
  283.     SQL_API_SQLGETCURSORNAME
  284.     SQL_API_SQLGETDATA
  285.     SQL_API_SQLGETENVATTR
  286.     SQL_API_SQLGETFUNCTIONS
  287.     SQL_API_SQLGETINFO
  288.     SQL_API_SQLGETLENGTH
  289.     SQL_API_SQLGETPOSITION
  290.     SQL_API_SQLGETSQLCA
  291.     SQL_API_SQLGETSTMTOPTION
  292.     SQL_API_SQLGETSUBSTRING
  293.     SQL_API_SQLGETTYPEINFO
  294.     SQL_API_SQLMORERESULTS
  295.     SQL_API_SQLNATIVESQL
  296.     SQL_API_SQLNUMPARAMS
  297.     SQL_API_SQLNUMRESULTCOLS
  298.     SQL_API_SQLPARAMDATA
  299.     SQL_API_SQLPARAMOPTIONS
  300.     SQL_API_SQLPREPARE
  301.     SQL_API_SQLPRIMARYKEYS
  302.     SQL_API_SQLPROCEDURECOLUMNS
  303.     SQL_API_SQLPROCEDURES
  304.     SQL_API_SQLPUTDATA
  305.     SQL_API_SQLROWCOUNT
  306.     SQL_API_SQLSETCOLATTRIBUTES
  307.     SQL_API_SQLSETCONNECTION
  308.     SQL_API_SQLSETCONNECTOPTION
  309.     SQL_API_SQLSETCURSORNAME
  310.     SQL_API_SQLSETENVATTR
  311.     SQL_API_SQLSETPARAM
  312.     SQL_API_SQLSETPOS
  313.     SQL_API_SQLSETSCROLLOPTIONS
  314.     SQL_API_SQLSETSTMTOPTION
  315.     SQL_API_SQLSPECIALCOLUMNS
  316.     SQL_API_SQLSTATISTICS
  317.     SQL_API_SQLTABLEPRIVILEGES
  318.     SQL_API_SQLTABLES
  319.     SQL_API_SQLTRANSACT
  320.     SQL_ASYNC_ENABLE
  321.     SQL_ASYNC_ENABLE_DEFAULT
  322.     SQL_ASYNC_ENABLE_OFF
  323.     SQL_ASYNC_ENABLE_ON
  324.     SQL_ATOMIC_DEFAULT
  325.     SQL_ATOMIC_NO
  326.     SQL_ATOMIC_YES
  327.     SQL_ATTR_OUTPUT_NTS
  328.     SQL_ATTR_READONLY
  329.     SQL_ATTR_READWRITE_UNKNOWN
  330.     SQL_ATTR_WRITE
  331.     SQL_AT_ADD_COLUMN
  332.     SQL_AT_DROP_COLUMN
  333.     SQL_AUTOCOMMIT
  334.     SQL_AUTOCOMMIT_DEFAULT
  335.     SQL_AUTOCOMMIT_OFF
  336.     SQL_AUTOCOMMIT_ON
  337.     SQL_BEST_ROWID
  338.     SQL_BIGINT
  339.     SQL_BINARY
  340.     SQL_BIND_BY_COLUMN
  341.     SQL_BIND_TYPE
  342.     SQL_BIND_TYPE_DEFAULT
  343.     SQL_BIT
  344.     SQL_BLOB
  345.     SQL_BLOB_LOCATOR
  346.     SQL_BOOKMARK_PERSISTENCE
  347.     SQL_BP_CLOSE
  348.     SQL_BP_DELETE
  349.     SQL_BP_DROP
  350.     SQL_BP_OTHER_HSTMT
  351.     SQL_BP_SCROLL
  352.     SQL_BP_TRANSACTION
  353.     SQL_BP_UPDATE
  354.     SQL_CASCADE
  355.     SQL_CB_CLOSE
  356.     SQL_CB_DELETE
  357.     SQL_CB_NON_NULL
  358.     SQL_CB_NULL
  359.     SQL_CB_PRESERVE
  360.     SQL_CHAR
  361.     SQL_CLOB
  362.     SQL_CLOB_LOCATOR
  363.     SQL_CLOSE
  364.     SQL_CN_ANY
  365.     SQL_CN_DIFFERENT
  366.     SQL_CN_NONE
  367.     SQL_COLUMN_ALIAS
  368.     SQL_COLUMN_AUTO_INCREMENT
  369.     SQL_COLUMN_CASE_SENSITIVE
  370.     SQL_COLUMN_CATALOG_NAME
  371.     SQL_COLUMN_COUNT
  372.     SQL_COLUMN_DISPLAY_SIZE
  373.     SQL_COLUMN_DISTINCT_TYPE
  374.     SQL_COLUMN_LABEL
  375.     SQL_COLUMN_LENGTH
  376.     SQL_COLUMN_MONEY
  377.     SQL_COLUMN_NAME
  378.     SQL_COLUMN_NULLABLE
  379.     SQL_COLUMN_OWNER_NAME
  380.     SQL_COLUMN_PRECISION
  381.     SQL_COLUMN_QUALIFIER_NAME
  382.     SQL_COLUMN_SCALE
  383.     SQL_COLUMN_SCHEMA_NAME
  384.     SQL_COLUMN_SEARCHABLE
  385.     SQL_COLUMN_TABLE_NAME
  386.     SQL_COLUMN_TYPE
  387.     SQL_COLUMN_TYPE_NAME
  388.     SQL_COLUMN_UNSIGNED
  389.     SQL_COLUMN_UPDATABLE
  390.     SQL_COMMIT
  391.     SQL_CONCAT_NULL_BEHAVIOR
  392.     SQL_CONCURRENCY
  393.     SQL_CONCURRENT_TRANS
  394.     SQL_CONCUR_DEFAULT
  395.     SQL_CONCUR_LOCK
  396.     SQL_CONCUR_READ_ONLY
  397.     SQL_CONCUR_ROWVER
  398.     SQL_CONCUR_VALUES
  399.     SQL_CONNECTTYPE
  400.     SQL_CONNECTTYPE_DEFAULT
  401.     SQL_CONNECT_OPT_DRVR_START
  402.     SQL_CONVERT_BIGINT
  403.     SQL_CONVERT_BINARY
  404.     SQL_CONVERT_BIT
  405.     SQL_CONVERT_CHAR
  406.     SQL_CONVERT_DATE
  407.     SQL_CONVERT_DECIMAL
  408.     SQL_CONVERT_DOUBLE
  409.     SQL_CONVERT_FLOAT
  410.     SQL_CONVERT_FUNCTIONS
  411.     SQL_CONVERT_INTEGER
  412.     SQL_CONVERT_LONGVARBINARY
  413.     SQL_CONVERT_LONGVARCHAR
  414.     SQL_CONVERT_NUMERIC
  415.     SQL_CONVERT_REAL
  416.     SQL_CONVERT_SMALLINT
  417.     SQL_CONVERT_TIME
  418.     SQL_CONVERT_TIMESTAMP
  419.     SQL_CONVERT_TINYINT
  420.     SQL_CONVERT_VARBINARY
  421.     SQL_CONVERT_VARCHAR
  422.     SQL_COORDINATED_TRANS
  423.     SQL_CORRELATION_NAME
  424.     SQL_CURRENT_QUALIFIER
  425.     SQL_CURRENT_SCHEMA
  426.     SQL_CURSOR_COMMIT_BEHAVIOR
  427.     SQL_CURSOR_DYNAMIC
  428.     SQL_CURSOR_FORWARD_ONLY
  429.     SQL_CURSOR_HOLD
  430.     SQL_CURSOR_HOLD_DEFAULT
  431.     SQL_CURSOR_HOLD_OFF
  432.     SQL_CURSOR_HOLD_ON
  433.     SQL_CURSOR_KEYSET_DRIVEN
  434.     SQL_CURSOR_ROLLBACK_BEHAVIOR
  435.     SQL_CURSOR_STATIC
  436.     SQL_CURSOR_TYPE
  437.     SQL_CURSOR_TYPE_DEFAULT
  438.     SQL_CVT_BIGINT
  439.     SQL_CVT_BINARY
  440.     SQL_CVT_BIT
  441.     SQL_CVT_CHAR
  442.     SQL_CVT_DATE
  443.     SQL_CVT_DECIMAL
  444.     SQL_CVT_DOUBLE
  445.     SQL_CVT_FLOAT
  446.     SQL_CVT_INTEGER
  447.     SQL_CVT_LONGVARBINARY
  448.     SQL_CVT_LONGVARCHAR
  449.     SQL_CVT_NUMERIC
  450.     SQL_CVT_REAL
  451.     SQL_CVT_SMALLINT
  452.     SQL_CVT_TIME
  453.     SQL_CVT_TIMESTAMP
  454.     SQL_CVT_TINYINT
  455.     SQL_CVT_VARBINARY
  456.     SQL_CVT_VARCHAR
  457.     SQL_C_BINARY
  458.     SQL_C_BIT
  459.     SQL_C_BLOB_LOCATOR
  460.     SQL_C_CHAR
  461.     SQL_C_CLOB_LOCATOR
  462.     SQL_C_DATE
  463.     SQL_C_DBCHAR
  464.     SQL_C_DBCLOB_LOCATOR
  465.     SQL_C_DEFAULT
  466.     SQL_C_DOUBLE
  467.     SQL_C_FLOAT
  468.     SQL_C_LONG
  469.     SQL_C_SHORT
  470.     SQL_C_SLONG
  471.     SQL_C_SSHORT
  472.     SQL_C_STINYINT
  473.     SQL_C_TIME
  474.     SQL_C_TIMESTAMP
  475.     SQL_C_TINYINT
  476.     SQL_C_ULONG
  477.     SQL_C_USHORT
  478.     SQL_C_UTINYINT
  479.     SQL_DATABASE_NAME
  480.     SQL_DATA_AT_EXEC
  481.     SQL_DATA_SOURCE_NAME
  482.     SQL_DATA_SOURCE_READ_ONLY
  483.     SQL_DATE
  484.     SQL_DB2ESTIMATE
  485.     SQL_DB2ESTIMATE_DEFAULT
  486.     SQL_DB2ESTIMATE_OFF
  487.     SQL_DB2ESTIMATE_ON
  488.     SQL_DB2EXPLAIN
  489.     SQL_DB2EXPLAIN_DEFAULT
  490.     SQL_DB2EXPLAIN_OFF
  491.     SQL_DB2EXPLAIN_ON
  492.     SQL_DBCLOB
  493.     SQL_DBCLOB_LOCATOR
  494.     SQL_DBMS_NAME
  495.     SQL_DBMS_VER
  496.     SQL_DECIMAL
  497.     SQL_DEFAULT_PARAM
  498.     SQL_DEFAULT_TXN_ISOLATION
  499.     SQL_DELETE
  500.     SQL_DOUBLE
  501.     SQL_DRIVER_COMPLETE
  502.     SQL_DRIVER_COMPLETE_REQUIRED
  503.     SQL_DRIVER_HDBC
  504.     SQL_DRIVER_HENV
  505.     SQL_DRIVER_HLIB
  506.     SQL_DRIVER_HSTMT
  507.     SQL_DRIVER_NAME
  508.     SQL_DRIVER_NOPROMPT
  509.     SQL_DRIVER_ODBC_VER
  510.     SQL_DRIVER_PROMPT
  511.     SQL_DRIVER_VER
  512.     SQL_DROP
  513.     SQL_ENSURE
  514.     SQL_ENTIRE_ROWSET
  515.     SQL_ERROR
  516.     SQL_EXPRESSIONS_IN_ORDERBY
  517.     SQL_EXT_API_LAST
  518.     SQL_FALSE
  519.     SQL_FD_FETCH_ABSOLUTE
  520.     SQL_FD_FETCH_BOOKMARK
  521.     SQL_FD_FETCH_FIRST
  522.     SQL_FD_FETCH_LAST
  523.     SQL_FD_FETCH_NEXT
  524.     SQL_FD_FETCH_PREV
  525.     SQL_FD_FETCH_RELATIVE
  526.     SQL_FD_FETCH_RESUME
  527.     SQL_FETCH_ABSOLUTE
  528.     SQL_FETCH_BOOKMARK
  529.     SQL_FETCH_DIRECTION
  530.     SQL_FETCH_FIRST
  531.     SQL_FETCH_LAST
  532.     SQL_FETCH_NEXT
  533.     SQL_FETCH_PRIOR
  534.     SQL_FETCH_RELATIVE
  535.     SQL_FILE_APPEND
  536.     SQL_FILE_CREATE
  537.     SQL_FILE_NOT_SUPPORTED
  538.     SQL_FILE_OVERWRITE
  539.     SQL_FILE_QUALIFIER
  540.     SQL_FILE_READ
  541.     SQL_FILE_TABLE
  542.     SQL_FILE_USAGE
  543.     SQL_FLOAT
  544.     SQL_FN_CVT_CONVERT
  545.     SQL_FN_NUM_ABS
  546.     SQL_FN_NUM_ACOS
  547.     SQL_FN_NUM_ASIN
  548.     SQL_FN_NUM_ATAN
  549.     SQL_FN_NUM_ATAN2
  550.     SQL_FN_NUM_CEILING
  551.     SQL_FN_NUM_COS
  552.     SQL_FN_NUM_COT
  553.     SQL_FN_NUM_DEGREES
  554.     SQL_FN_NUM_EXP
  555.     SQL_FN_NUM_FLOOR
  556.     SQL_FN_NUM_LOG
  557.     SQL_FN_NUM_LOG10
  558.     SQL_FN_NUM_MOD
  559.     SQL_FN_NUM_PI
  560.     SQL_FN_NUM_POWER
  561.     SQL_FN_NUM_RADIANS
  562.     SQL_FN_NUM_RAND
  563.     SQL_FN_NUM_ROUND
  564.     SQL_FN_NUM_SIGN
  565.     SQL_FN_NUM_SIN
  566.     SQL_FN_NUM_SQRT
  567.     SQL_FN_NUM_TAN
  568.     SQL_FN_NUM_TRUNCATE
  569.     SQL_FN_STR_ASCII
  570.     SQL_FN_STR_CHAR
  571.     SQL_FN_STR_CONCAT
  572.     SQL_FN_STR_DIFFERENCE
  573.     SQL_FN_STR_INSERT
  574.     SQL_FN_STR_LCASE
  575.     SQL_FN_STR_LEFT
  576.     SQL_FN_STR_LENGTH
  577.     SQL_FN_STR_LOCATE
  578.     SQL_FN_STR_LOCATE_2
  579.     SQL_FN_STR_LTRIM
  580.     SQL_FN_STR_REPEAT
  581.     SQL_FN_STR_REPLACE
  582.     SQL_FN_STR_RIGHT
  583.     SQL_FN_STR_RTRIM
  584.     SQL_FN_STR_SOUNDEX
  585.     SQL_FN_STR_SPACE
  586.     SQL_FN_STR_SUBSTRING
  587.     SQL_FN_STR_UCASE
  588.     SQL_FN_SYS_DBNAME
  589.     SQL_FN_SYS_IFNULL
  590.     SQL_FN_SYS_USERNAME
  591.     SQL_FN_TD_CURDATE
  592.     SQL_FN_TD_CURTIME
  593.     SQL_FN_TD_DAYNAME
  594.     SQL_FN_TD_DAYOFMONTH
  595.     SQL_FN_TD_DAYOFWEEK
  596.     SQL_FN_TD_DAYOFYEAR
  597.     SQL_FN_TD_HOUR
  598.     SQL_FN_TD_MINUTE
  599.     SQL_FN_TD_MONTH
  600.     SQL_FN_TD_MONTHNAME
  601.     SQL_FN_TD_NOW
  602.     SQL_FN_TD_QUARTER
  603.     SQL_FN_TD_SECOND
  604.     SQL_FN_TD_TIMESTAMPADD
  605.     SQL_FN_TD_TIMESTAMPDIFF
  606.     SQL_FN_TD_WEEK
  607.     SQL_FN_TD_YEAR
  608.     SQL_FN_TSI_DAY
  609.     SQL_FN_TSI_FRAC_SECOND
  610.     SQL_FN_TSI_HOUR
  611.     SQL_FN_TSI_MINUTE
  612.     SQL_FN_TSI_MONTH
  613.     SQL_FN_TSI_QUARTER
  614.     SQL_FN_TSI_SECOND
  615.     SQL_FN_TSI_WEEK
  616.     SQL_FN_TSI_YEAR
  617.     SQL_FROM_LITERAL
  618.     SQL_FROM_LOCATOR
  619.     SQL_GB_GROUP_BY_CONTAINS_SELECT
  620.     SQL_GB_GROUP_BY_EQUALS_SELECT
  621.     SQL_GB_NOT_SUPPORTED
  622.     SQL_GB_NO_RELATION
  623.     SQL_GD_ANY_COLUMN
  624.     SQL_GD_ANY_ORDER
  625.     SQL_GD_BLOCK
  626.     SQL_GD_BOUND
  627.     SQL_GETDATA_EXTENSIONS
  628.     SQL_GET_BOOKMARK
  629.     SQL_GRAPHIC
  630.     SQL_GROUP_BY
  631.     SQL_H_SQLCLI
  632.     SQL_IC_LOWER
  633.     SQL_IC_MIXED
  634.     SQL_IC_SENSITIVE
  635.     SQL_IC_UPPER
  636.     SQL_IDENTIFIER_CASE
  637.     SQL_IDENTIFIER_QUOTE_CHAR
  638.     SQL_IGNORE
  639.     SQL_INDEX_ALL
  640.     SQL_INDEX_CLUSTERED
  641.     SQL_INDEX_HASHED
  642.     SQL_INDEX_OTHER
  643.     SQL_INDEX_UNIQUE
  644.     SQL_INFO_DRIVER_START
  645.     SQL_INFO_LAST
  646.     SQL_INTEGER
  647.     SQL_INVALID_HANDLE
  648.     SQL_KEYSET_SIZE
  649.     SQL_KEYSET_SIZE_DEFAULT
  650.     SQL_KEYWORDS
  651.     SQL_LCK_EXCLUSIVE
  652.     SQL_LCK_NO_CHANGE
  653.     SQL_LCK_UNLOCK
  654.     SQL_LD_COMPAT_DEFAULT
  655.     SQL_LD_COMPAT_NO
  656.     SQL_LD_COMPAT_YES
  657.     SQL_LEN_DATA_AT_EXEC_OFFSET
  658.     SQL_LIKE_ESCAPE_CLAUSE
  659.     SQL_LIKE_ONLY
  660.     SQL_LOCK_EXCLUSIVE
  661.     SQL_LOCK_NO_CHANGE
  662.     SQL_LOCK_TYPES
  663.     SQL_LOCK_UNLOCK
  664.     SQL_LOGIN_TIMEOUT
  665.     SQL_LOGIN_TIMEOUT_DEFAULT
  666.     SQL_LONGDATA_COMPAT
  667.     SQL_LONGVARBINARY
  668.     SQL_LONGVARCHAR
  669.     SQL_LONGVARGRAPHIC
  670.     SQL_MAXCONN
  671.     SQL_MAX_BINARY_LITERAL_LEN
  672.     SQL_MAX_CATALOG_NAME_LEN
  673.     SQL_MAX_CHAR_LITERAL_LEN
  674.     SQL_MAX_COLUMNS_IN_GROUP_BY
  675.     SQL_MAX_COLUMNS_IN_INDEX
  676.     SQL_MAX_COLUMNS_IN_ORDER_BY
  677.     SQL_MAX_COLUMNS_IN_SELECT
  678.     SQL_MAX_COLUMNS_IN_TABLE
  679.     SQL_MAX_COLUMN_NAME_LEN
  680.     SQL_MAX_CURSOR_NAME_LEN
  681.     SQL_MAX_DSN_LENGTH
  682.     SQL_MAX_ID_LENGTH
  683.     SQL_MAX_INDEX_SIZE
  684.     SQL_MAX_LENGTH
  685.     SQL_MAX_LENGTH_DEFAULT
  686.     SQL_MAX_MESSAGE_LENGTH
  687.     SQL_MAX_OPTION_STRING_LENGTH
  688.     SQL_MAX_OWNER_NAME_LEN
  689.     SQL_MAX_PROCEDURE_NAME_LEN
  690.     SQL_MAX_QUALIFIER_NAME_LEN
  691.     SQL_MAX_ROWS
  692.     SQL_MAX_ROWS_DEFAULT
  693.     SQL_MAX_ROW_SIZE
  694.     SQL_MAX_ROW_SIZE_INCLUDES_LONG
  695.     SQL_MAX_SCHEMA_NAME_LEN
  696.     SQL_MAX_STATEMENT_LEN
  697.     SQL_MAX_TABLES_IN_SELECT
  698.     SQL_MAX_TABLE_NAME_LEN
  699.     SQL_MAX_USER_NAME_LEN
  700.     SQL_MODE_DEFAULT
  701.     SQL_MODE_READ_ONLY
  702.     SQL_MODE_READ_WRITE
  703.     SQL_MULTIPLE_ACTIVE_TXN
  704.     SQL_MULT_RESULT_SETS
  705.     SQL_NC_END
  706.     SQL_NC_HIGH
  707.     SQL_NC_LOW
  708.     SQL_NC_START
  709.     SQL_NEED_DATA
  710.     SQL_NEED_LONG_DATA_LEN
  711.     SQL_NNC_NON_NULL
  712.     SQL_NNC_NULL
  713.     SQL_NODESCRIBE
  714.     SQL_NODESCRIBE_DEFAULT
  715.     SQL_NODESCRIBE_OFF
  716.     SQL_NODESCRIBE_ON
  717.     SQL_NON_NULLABLE_COLUMNS
  718.     SQL_NOSCAN
  719.     SQL_NOSCAN_DEFAULT
  720.     SQL_NOSCAN_OFF
  721.     SQL_NOSCAN_ON
  722.     SQL_NO_ACTION
  723.     SQL_NO_DATA
  724.     SQL_NO_DATA_FOUND
  725.     SQL_NO_NULLS
  726.     SQL_NO_TOTAL
  727.     SQL_NTS
  728.     SQL_NULLABLE
  729.     SQL_NULLABLE_UNKNOWN
  730.     SQL_NULL_COLLATION
  731.     SQL_NULL_DATA
  732.     SQL_NULL_HDBC
  733.     SQL_NULL_HENV
  734.     SQL_NULL_HSTMT
  735.     SQL_NUMERIC
  736.     SQL_NUMERIC_FUNCTIONS
  737.     SQL_OAC_LEVEL1
  738.     SQL_OAC_LEVEL2
  739.     SQL_OAC_NONE
  740.     SQL_ODBC_API_CONFORMANCE
  741.     SQL_ODBC_CURSORS
  742.     SQL_ODBC_SAG_CLI_CONFORMANCE
  743.     SQL_ODBC_SQL_CONFORMANCE
  744.     SQL_ODBC_SQL_OPT_IEF
  745.     SQL_ODBC_VER
  746.     SQL_OJ_ALL_COMPARISON_OPS
  747.     SQL_OJ_CAPABILITIES
  748.     SQL_OJ_FULL
  749.     SQL_OJ_INNER
  750.     SQL_OJ_LEFT
  751.     SQL_OJ_NESTED
  752.     SQL_OJ_NOT_ORDERED
  753.     SQL_OJ_RIGHT
  754.     SQL_ONEPHASE
  755.     SQL_OPT_TRACE
  756.     SQL_OPT_TRACEFILE
  757.     SQL_ORDER_BY_COLUMNS_IN_SELECT
  758.     SQL_OSCC_COMPLIANT
  759.     SQL_OSCC_NOT_COMPLIANT
  760.     SQL_OSC_CORE
  761.     SQL_OSC_EXTENDED
  762.     SQL_OSC_MINIMUM
  763.     SQL_OUTER_JOINS
  764.     SQL_OU_DML_STATEMENTS
  765.     SQL_OU_INDEX_DEFINITION
  766.     SQL_OU_PRIVILEGE_DEFINITION
  767.     SQL_OU_PROCEDURE_INVOCATION
  768.     SQL_OU_TABLE_DEFINITION
  769.     SQL_OWNER_TERM
  770.     SQL_OWNER_USAGE
  771.     SQL_PACKET_SIZE
  772.     SQL_PARAMOPT_ATOMIC
  773.     SQL_PARAM_INPUT
  774.     SQL_PARAM_INPUT_OUTPUT
  775.     SQL_PARAM_OUTPUT
  776.     SQL_PARAM_TYPE_DEFAULT
  777.     SQL_PARAM_TYPE_UNKNOWN
  778.     SQL_PC_NOT_PSEUDO
  779.     SQL_PC_PSEUDO
  780.     SQL_PC_UNKNOWN
  781.     SQL_POSITION
  782.     SQL_POSITIONED_STATEMENTS
  783.     SQL_POS_ADD
  784.     SQL_POS_DELETE
  785.     SQL_POS_OPERATIONS
  786.     SQL_POS_POSITION
  787.     SQL_POS_REFRESH
  788.     SQL_POS_UPDATE
  789.     SQL_PROCEDURES
  790.     SQL_PROCEDURE_TERM
  791.     SQL_PS_POSITIONED_DELETE
  792.     SQL_PS_POSITIONED_UPDATE
  793.     SQL_PS_SELECT_FOR_UPDATE
  794.     SQL_PT_FUNCTION
  795.     SQL_PT_PROCEDURE
  796.     SQL_PT_UNKNOWN
  797.     SQL_QL_END
  798.     SQL_QL_START
  799.     SQL_QUALIFIER_LOCATION
  800.     SQL_QUALIFIER_NAME_SEPARATOR
  801.     SQL_QUALIFIER_TERM
  802.     SQL_QUALIFIER_USAGE
  803.     SQL_QUERY_TIMEOUT
  804.     SQL_QUERY_TIMEOUT_DEFAULT
  805.     SQL_QUICK
  806.     SQL_QUIET_MODE
  807.     SQL_QUOTED_IDENTIFIER_CASE
  808.     SQL_QU_DML_STATEMENTS
  809.     SQL_QU_INDEX_DEFINITION
  810.     SQL_QU_PRIVILEGE_DEFINITION
  811.     SQL_QU_PROCEDURE_INVOCATION
  812.     SQL_QU_TABLE_DEFINITION
  813.     SQL_RD_DEFAULT
  814.     SQL_RD_OFF
  815.     SQL_RD_ON
  816.     SQL_REAL
  817.     SQL_REFRESH
  818.     SQL_RESET_PARAMS
  819.     SQL_RESTRICT
  820.     SQL_RESULT_COL
  821.     SQL_RETRIEVE_DATA
  822.     SQL_RETURN_VALUE
  823.     SQL_ROLLBACK
  824.     SQL_ROWSET_SIZE
  825.     SQL_ROWSET_SIZE_DEFAULT
  826.     SQL_ROWVER
  827.     SQL_ROW_ADDED
  828.     SQL_ROW_DELETED
  829.     SQL_ROW_ERROR
  830.     SQL_ROW_NOROW
  831.     SQL_ROW_NUMBER
  832.     SQL_ROW_SUCCESS
  833.     SQL_ROW_UPDATED
  834.     SQL_ROW_UPDATES
  835.     SQL_SCCO_LOCK
  836.     SQL_SCCO_OPT_ROWVER
  837.     SQL_SCCO_OPT_TIMESTAMP
  838.     SQL_SCCO_OPT_VALUES
  839.     SQL_SCCO_READ_ONLY
  840.     SQL_SCOPE_CURROW
  841.     SQL_SCOPE_SESSION
  842.     SQL_SCOPE_TRANSACTION
  843.     SQL_SCROLL_CONCURRENCY
  844.     SQL_SCROLL_OPTIONS
  845.     SQL_SC_NON_UNIQUE
  846.     SQL_SC_TRY_UNIQUE
  847.     SQL_SC_UNIQUE
  848.     SQL_SEARCHABLE
  849.     SQL_SEARCH_PATTERN_ESCAPE
  850.     SQL_SERVER_NAME
  851.     SQL_SETPARAM_VALUE_MAX
  852.     SQL_SET_DEFAULT
  853.     SQL_SET_NULL
  854.     SQL_SIGNED_OFFSET
  855.     SQL_SIMULATE_CURSOR
  856.     SQL_SMALLINT
  857.     SQL_SO_DYNAMIC
  858.     SQL_SO_FORWARD_ONLY
  859.     SQL_SO_KEYSET_DRIVEN
  860.     SQL_SO_MIXED
  861.     SQL_SO_STATIC
  862.     SQL_SPECIAL_CHARACTERS
  863.     SQL_SQLSTATE_SIZE
  864.     SQL_SQ_COMPARISON
  865.     SQL_SQ_CORRELATED_SUBQUERIES
  866.     SQL_SQ_EXISTS
  867.     SQL_SQ_IN
  868.     SQL_SQ_QUANTIFIED
  869.     SQL_SS_ADDITIONS
  870.     SQL_SS_DELETIONS
  871.     SQL_SS_UPDATES
  872.     SQL_STATIC_SENSITIVITY
  873.     SQL_STILL_EXECUTING
  874.     SQL_STMTTXN_ISOLATION
  875.     SQL_STRING_FUNCTIONS
  876.     SQL_SUBQUERIES
  877.     SQL_SUCCESS
  878.     SQL_SUCCESS_WITH_INFO
  879.     SQL_SYNCPOINT_DEFAULT
  880.     SQL_SYNC_POINT
  881.     SQL_SYSTEM_FUNCTIONS
  882.     SQL_TABLE_STAT
  883.     SQL_TABLE_TERM
  884.     SQL_TC_ALL
  885.     SQL_TC_DDL_COMMIT
  886.     SQL_TC_DDL_IGNORE
  887.     SQL_TC_DML
  888.     SQL_TC_NONE
  889.     SQL_TIME
  890.     SQL_TIMEDATE_ADD_INTERVALS
  891.     SQL_TIMEDATE_DIFF_INTERVALS
  892.     SQL_TIMEDATE_FUNCTIONS
  893.     SQL_TIMESTAMP
  894.     SQL_TINYINT
  895.     SQL_TRANSLATE_DLL
  896.     SQL_TRANSLATE_OPTION
  897.     SQL_TRUE
  898.     SQL_TWOPHASE
  899.     SQL_TXN_CAPABLE
  900.     SQL_TXN_ISOLATION
  901.     SQL_TXN_ISOLATION_OPTION
  902.     SQL_TXN_NOCOMMIT
  903.     SQL_TXN_READ_COMMITTED
  904.     SQL_TXN_READ_UNCOMMITTED
  905.     SQL_TXN_REPEATABLE_READ
  906.     SQL_TXN_SERIALIZABLE
  907.     SQL_TXN_VERSIONING
  908.     SQL_UB_DEFAULT
  909.     SQL_UB_OFF
  910.     SQL_UB_ON
  911.     SQL_UNBIND
  912.     SQL_UNION
  913.     SQL_UNSEARCHABLE
  914.     SQL_UNSIGNED_OFFSET
  915.     SQL_UPDATE
  916.     SQL_USER_NAME
  917.     SQL_USE_BOOKMARKS
  918.     SQL_U_UNION
  919.     SQL_U_UNION_ALL
  920.     SQL_VARBINARY
  921.     SQL_VARCHAR
  922.     SQL_VARGRAPHIC
  923.     SQL_WCHARTYPE
  924.     SQL_WCHARTYPE_CONVERT
  925.     SQL_WCHARTYPE_DEFAULT
  926.     SQL_WCHARTYPE_NOCONVERT
  927. );
  928. sub AUTOLOAD {
  929.     # This AUTOLOAD is used to 'autoload' constants from the constant()
  930.     # XS function.  If a constant is not found then control is passed
  931.     # to the AUTOLOAD in AutoLoader.
  932.  
  933.     local($constname);
  934.     ($constname = $AUTOLOAD) =~ s/.*:://;
  935.     $val = constant($constname, @_ ? $_[0] : 0);
  936.     if ($! != 0) {
  937.     if ($! =~ /Invalid/) {
  938.         $AutoLoader::AUTOLOAD = $AUTOLOAD;
  939.         goto &AutoLoader::AUTOLOAD;
  940.     }
  941.     else {
  942.         ($pack,$file,$line) = caller;
  943.         die "Your vendor has not defined DB2CLI macro $constname, used at $file line $line.
  944. ";
  945.     }
  946.     }
  947.     eval "sub $AUTOLOAD { $val }";
  948.     goto &$AUTOLOAD;
  949. }
  950.  
  951. bootstrap DB2CLI;
  952.  
  953. # Preloaded methods go here.
  954.  
  955. # Autoload methods go after __END__, and are processed by the autosplit program.
  956.  
  957. 1;
  958. __END__
  959. #############################################################################
  960.  
  961. sub iMessage
  962. {
  963.     my ($henv, $hdbc, $hstmt, $where, $failrc) = @_;
  964.     my ($state, $code, $message, $text);
  965.     my $rc = SQLError($henv, $hdbc, $hstmt, $state, $code, $message);
  966.     $text = "\n$where";
  967.     $text .= "\n\trc=$failrc"
  968.     if $failrc;
  969.     $text .= "\nCannot obtain SQL error message, API rc=$rc:\n"
  970.     if $rc < 0;
  971.     $text .= ", state=$state, code=$code\n$message\n\n";
  972.     if ($failrc >= 0) {
  973.     croak $text;
  974.     return 1;
  975.     }
  976.     SQLTransact($hdbc, SQL_ROLLBACK);
  977.     confess $text;
  978. }
  979.  
  980. #############################################################################
  981. # Connections
  982.  
  983. sub Connect
  984. {
  985.     my ($class, $database, $user, $pw) = @_;
  986.     my ($henv, $hdbc, $rc);
  987.     if ($rc = SQLAllocEnv($henv)) {
  988.     warn "SQLAllocEnv failed with rc=$rc\n";
  989.     return undef;
  990.     }
  991.     if ($rc = SQLAllocConnect($henv, $hdbc)) {
  992.     iMessage($henv, undef, undef, "SQLAllocConnect", $rc);
  993.     SQLFreeEnv($henv);
  994.     return undef;
  995.     }
  996.     my $connRef = bless { HENV => $henv, HDBC => $hdbc, DATABASE => $database };
  997.     if ($rc = SQLConnect($hdbc, $database, $user, $pw)) {
  998.     $connRef->Message("SQLConnect to $database", $rc);
  999.     SQLFreeConnect($hdbc);
  1000.     SQLFreeEnv($henv);
  1001.     return undef;
  1002.     }
  1003.     return $connRef;
  1004. }
  1005.  
  1006. sub Transact
  1007. {
  1008.     my ($connRef, $arg) = @_;
  1009.     my ($rc);
  1010.     if ($rc = SQLTransact($connRef->{HDBC}, $arg)) {
  1011.     $connRef->Message("SQLTransact $connRef->{DATABASE}", $rc);
  1012.     }
  1013.     return $connRef;
  1014. }
  1015.  
  1016. sub Disconnect
  1017. {
  1018.     my ($connRef) = @_;
  1019.     my ($rc);
  1020.     if ($rc = SQLDisconnect($connRef->{HDBC})) {
  1021.     $connRef->Message("SQLDisconnect from $connRef->{DATABASE}", $rc);
  1022.     }
  1023.     SQLFreeConnect($connRef->{HDBC});
  1024.     SQLFreeEnv($connRef->{HDBC});
  1025.     return $_[0] = undef;
  1026. }
  1027.  
  1028. #############################################################################
  1029. # Statements
  1030.  
  1031. sub Statement
  1032. {
  1033.     my ($connRef, $comment) = @_;
  1034.     my ($hstmt, $rc);
  1035.     if ($rc = SQLAllocStmt($connRef->{HDBC}, $hstmt)) {
  1036.     $connRef->Message("SQLAllocStmt", $rc);
  1037.     return undef;
  1038.     }
  1039.     return bless { %$connRef, HSTMT => $hstmt, TEXT => $comment };
  1040. }
  1041.  
  1042. sub ExecDirect
  1043. {
  1044.     my ($connRef, $stmt, @args) = @_;
  1045.     my $stmtRef = $connRef->Prepare($stmt);
  1046.     my $rc = $stmtRef->Execute(@args);
  1047.     $stmtRef->Release();
  1048.     return $rc;
  1049. }
  1050.  
  1051. sub Prepare
  1052. {
  1053.     my ($connRef, $stmt, $refStmt) = @_;
  1054.     my ($hstmt, $rc);
  1055.     if ($rc = SQLAllocStmt($connRef->{HDBC}, $hstmt)) {
  1056.     $connRef->Message("SQLAllocStmt", $rc);
  1057.     return undef;
  1058.     }
  1059.     if ($refStmt) {
  1060.     my $cursor = "-Unknown-";
  1061.     SQLGetCursorName($refStmt->{HSTMT}, $cursor);
  1062.     $stmt .= " $cursor";
  1063.     }
  1064.     my $i = index($stmt, "\n", 1);
  1065.     my $s = ($i >= 0) ? substr($stmt, 0, $i) : $stmt;
  1066.     my $stmtRef = bless { %$connRef, HSTMT => $hstmt, TEXT => $s };
  1067.     if ($rc = SQLPrepare($hstmt, $stmt)) {
  1068.     $stmtRef->Message("SQLPrepare \"$s\"", $rc);
  1069.     return undef;
  1070.     }
  1071.     return $stmtRef;
  1072. }
  1073.  
  1074. sub Execute
  1075. {
  1076.     my ($stmtRef) = shift @_;
  1077.     my ($rc);
  1078.     if ($rc = SQLExecute($stmtRef->{HSTMT}, @_)) {
  1079.     $stmtRef->Message("SQLExecute \"$stmtRef->{TEXT}\"", $rc);
  1080.     }
  1081.     return $rc;
  1082. }
  1083.  
  1084. sub Fetch
  1085. {
  1086.     my ($stmtRef) = shift @_;
  1087.     my ($rc);
  1088.     if (($rc = SQLFetch($stmtRef->{HSTMT}, @_)) != SQL_SUCCESS && $rc != SQL_NO_DATA) {
  1089.     $stmtRef->Message("SQLFetch \"$stmtRef->{TEXT}\"", $rc);
  1090.     }
  1091.     return $rc;
  1092. }
  1093.  
  1094. sub Close
  1095. {
  1096.     my ($stmtRef) = @_;
  1097.     my ($rc);
  1098.     if ($rc = SQLFreeStmt($stmtRef->{HSTMT}, SQL_CLOSE)) {
  1099.     $stmtRef->Message("SQLFreeStmt \"$stmtRef->{TEXT}\"", $rc);
  1100.     }
  1101.     return $stmtRef;
  1102. }
  1103.  
  1104. sub Release
  1105. {
  1106.     my ($stmtRef) = @_;
  1107.     my ($rc);
  1108.     if ($rc = SQLFreeStmt($stmtRef->{HSTMT})) {
  1109.     $stmtRef->Message("SQLFreeStmt \"$stmtRef->{TEXT}\"", $rc);
  1110.     }
  1111.     return undef;
  1112. }
  1113.  
  1114. sub Message
  1115. {
  1116.     my ($stmtRef, $text, $rc) = @_;
  1117.     iMessage($stmtRef->{HENV}, $stmtRef->{HDBC},
  1118.          exists($stmtRef->{HSTMT}) ? $stmtRef->{HSTMT} : undef,
  1119.          $text, $rc);
  1120.     die if $rc < 0;
  1121. }
  1122.