home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / perl502b.zip / lib / DB2CLI.pm < prev    next >
Text File  |  1995-10-20  |  25KB  |  1,121 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_SQLERROR
  273.     SQL_API_SQLEXECDIRECT
  274.     SQL_API_SQLEXECUTE
  275.     SQL_API_SQLEXTENDEDFETCH
  276.     SQL_API_SQLFETCH
  277.     SQL_API_SQLFOREIGNKEYS
  278.     SQL_API_SQLFREECONNECT
  279.     SQL_API_SQLFREEENV
  280.     SQL_API_SQLFREESTMT
  281.     SQL_API_SQLGETCONNECTOPTION
  282.     SQL_API_SQLGETCURSORNAME
  283.     SQL_API_SQLGETDATA
  284.     SQL_API_SQLGETENVATTR
  285.     SQL_API_SQLGETFUNCTIONS
  286.     SQL_API_SQLGETINFO
  287.     SQL_API_SQLGETLENGTH
  288.     SQL_API_SQLGETPOSITION
  289.     SQL_API_SQLGETSQLCA
  290.     SQL_API_SQLGETSTMTOPTION
  291.     SQL_API_SQLGETSUBSTRING
  292.     SQL_API_SQLGETTYPEINFO
  293.     SQL_API_SQLMORERESULTS
  294.     SQL_API_SQLNATIVESQL
  295.     SQL_API_SQLNUMPARAMS
  296.     SQL_API_SQLNUMRESULTCOLS
  297.     SQL_API_SQLPARAMDATA
  298.     SQL_API_SQLPARAMOPTIONS
  299.     SQL_API_SQLPREPARE
  300.     SQL_API_SQLPRIMARYKEYS
  301.     SQL_API_SQLPROCEDURECOLUMNS
  302.     SQL_API_SQLPROCEDURES
  303.     SQL_API_SQLPUTDATA
  304.     SQL_API_SQLROWCOUNT
  305.     SQL_API_SQLSETCOLATTRIBUTES
  306.     SQL_API_SQLSETCONNECTION
  307.     SQL_API_SQLSETCONNECTOPTION
  308.     SQL_API_SQLSETCURSORNAME
  309.     SQL_API_SQLSETENVATTR
  310.     SQL_API_SQLSETPARAM
  311.     SQL_API_SQLSETPOS
  312.     SQL_API_SQLSETSCROLLOPTIONS
  313.     SQL_API_SQLSETSTMTOPTION
  314.     SQL_API_SQLSPECIALCOLUMNS
  315.     SQL_API_SQLSTATISTICS
  316.     SQL_API_SQLTABLEPRIVILEGES
  317.     SQL_API_SQLTABLES
  318.     SQL_API_SQLTRANSACT
  319.     SQL_ASYNC_ENABLE
  320.     SQL_ASYNC_ENABLE_DEFAULT
  321.     SQL_ASYNC_ENABLE_OFF
  322.     SQL_ASYNC_ENABLE_ON
  323.     SQL_ATOMIC_DEFAULT
  324.     SQL_ATOMIC_NO
  325.     SQL_ATOMIC_YES
  326.     SQL_ATTR_OUTPUT_NTS
  327.     SQL_ATTR_READONLY
  328.     SQL_ATTR_READWRITE_UNKNOWN
  329.     SQL_ATTR_WRITE
  330.     SQL_AT_ADD_COLUMN
  331.     SQL_AT_DROP_COLUMN
  332.     SQL_AUTOCOMMIT
  333.     SQL_AUTOCOMMIT_DEFAULT
  334.     SQL_AUTOCOMMIT_OFF
  335.     SQL_AUTOCOMMIT_ON
  336.     SQL_BEST_ROWID
  337.     SQL_BIGINT
  338.     SQL_BINARY
  339.     SQL_BIND_BY_COLUMN
  340.     SQL_BIND_TYPE
  341.     SQL_BIND_TYPE_DEFAULT
  342.     SQL_BIT
  343.     SQL_BLOB
  344.     SQL_BLOB_LOCATOR
  345.     SQL_BOOKMARK_PERSISTENCE
  346.     SQL_BP_CLOSE
  347.     SQL_BP_DELETE
  348.     SQL_BP_DROP
  349.     SQL_BP_OTHER_HSTMT
  350.     SQL_BP_SCROLL
  351.     SQL_BP_TRANSACTION
  352.     SQL_BP_UPDATE
  353.     SQL_CASCADE
  354.     SQL_CB_CLOSE
  355.     SQL_CB_DELETE
  356.     SQL_CB_NON_NULL
  357.     SQL_CB_NULL
  358.     SQL_CB_PRESERVE
  359.     SQL_CHAR
  360.     SQL_CLOB
  361.     SQL_CLOB_LOCATOR
  362.     SQL_CLOSE
  363.     SQL_CN_ANY
  364.     SQL_CN_DIFFERENT
  365.     SQL_CN_NONE
  366.     SQL_COLUMN_ALIAS
  367.     SQL_COLUMN_AUTO_INCREMENT
  368.     SQL_COLUMN_CASE_SENSITIVE
  369.     SQL_COLUMN_CATALOG_NAME
  370.     SQL_COLUMN_COUNT
  371.     SQL_COLUMN_DISPLAY_SIZE
  372.     SQL_COLUMN_DISTINCT_TYPE
  373.     SQL_COLUMN_LABEL
  374.     SQL_COLUMN_LENGTH
  375.     SQL_COLUMN_MONEY
  376.     SQL_COLUMN_NAME
  377.     SQL_COLUMN_NULLABLE
  378.     SQL_COLUMN_OWNER_NAME
  379.     SQL_COLUMN_PRECISION
  380.     SQL_COLUMN_QUALIFIER_NAME
  381.     SQL_COLUMN_SCALE
  382.     SQL_COLUMN_SCHEMA_NAME
  383.     SQL_COLUMN_SEARCHABLE
  384.     SQL_COLUMN_TABLE_NAME
  385.     SQL_COLUMN_TYPE
  386.     SQL_COLUMN_TYPE_NAME
  387.     SQL_COLUMN_UNSIGNED
  388.     SQL_COLUMN_UPDATABLE
  389.     SQL_COMMIT
  390.     SQL_CONCAT_NULL_BEHAVIOR
  391.     SQL_CONCURRENCY
  392.     SQL_CONCURRENT_TRANS
  393.     SQL_CONCUR_DEFAULT
  394.     SQL_CONCUR_LOCK
  395.     SQL_CONCUR_READ_ONLY
  396.     SQL_CONCUR_ROWVER
  397.     SQL_CONCUR_VALUES
  398.     SQL_CONNECTTYPE
  399.     SQL_CONNECTTYPE_DEFAULT
  400.     SQL_CONNECT_OPT_DRVR_START
  401.     SQL_CONVERT_BIGINT
  402.     SQL_CONVERT_BINARY
  403.     SQL_CONVERT_BIT
  404.     SQL_CONVERT_CHAR
  405.     SQL_CONVERT_DATE
  406.     SQL_CONVERT_DECIMAL
  407.     SQL_CONVERT_DOUBLE
  408.     SQL_CONVERT_FLOAT
  409.     SQL_CONVERT_FUNCTIONS
  410.     SQL_CONVERT_INTEGER
  411.     SQL_CONVERT_LONGVARBINARY
  412.     SQL_CONVERT_LONGVARCHAR
  413.     SQL_CONVERT_NUMERIC
  414.     SQL_CONVERT_REAL
  415.     SQL_CONVERT_SMALLINT
  416.     SQL_CONVERT_TIME
  417.     SQL_CONVERT_TIMESTAMP
  418.     SQL_CONVERT_TINYINT
  419.     SQL_CONVERT_VARBINARY
  420.     SQL_CONVERT_VARCHAR
  421.     SQL_COORDINATED_TRANS
  422.     SQL_CORRELATION_NAME
  423.     SQL_CURRENT_QUALIFIER
  424.     SQL_CURRENT_SCHEMA
  425.     SQL_CURSOR_COMMIT_BEHAVIOR
  426.     SQL_CURSOR_DYNAMIC
  427.     SQL_CURSOR_FORWARD_ONLY
  428.     SQL_CURSOR_HOLD
  429.     SQL_CURSOR_HOLD_DEFAULT
  430.     SQL_CURSOR_HOLD_OFF
  431.     SQL_CURSOR_HOLD_ON
  432.     SQL_CURSOR_KEYSET_DRIVEN
  433.     SQL_CURSOR_ROLLBACK_BEHAVIOR
  434.     SQL_CURSOR_STATIC
  435.     SQL_CURSOR_TYPE
  436.     SQL_CURSOR_TYPE_DEFAULT
  437.     SQL_CVT_BIGINT
  438.     SQL_CVT_BINARY
  439.     SQL_CVT_BIT
  440.     SQL_CVT_CHAR
  441.     SQL_CVT_DATE
  442.     SQL_CVT_DECIMAL
  443.     SQL_CVT_DOUBLE
  444.     SQL_CVT_FLOAT
  445.     SQL_CVT_INTEGER
  446.     SQL_CVT_LONGVARBINARY
  447.     SQL_CVT_LONGVARCHAR
  448.     SQL_CVT_NUMERIC
  449.     SQL_CVT_REAL
  450.     SQL_CVT_SMALLINT
  451.     SQL_CVT_TIME
  452.     SQL_CVT_TIMESTAMP
  453.     SQL_CVT_TINYINT
  454.     SQL_CVT_VARBINARY
  455.     SQL_CVT_VARCHAR
  456.     SQL_C_BINARY
  457.     SQL_C_BIT
  458.     SQL_C_BLOB_LOCATOR
  459.     SQL_C_CHAR
  460.     SQL_C_CLOB_LOCATOR
  461.     SQL_C_DATE
  462.     SQL_C_DBCHAR
  463.     SQL_C_DBCLOB_LOCATOR
  464.     SQL_C_DEFAULT
  465.     SQL_C_DOUBLE
  466.     SQL_C_FLOAT
  467.     SQL_C_LONG
  468.     SQL_C_SHORT
  469.     SQL_C_SLONG
  470.     SQL_C_SSHORT
  471.     SQL_C_STINYINT
  472.     SQL_C_TIME
  473.     SQL_C_TIMESTAMP
  474.     SQL_C_TINYINT
  475.     SQL_C_ULONG
  476.     SQL_C_USHORT
  477.     SQL_C_UTINYINT
  478.     SQL_DATABASE_NAME
  479.     SQL_DATA_AT_EXEC
  480.     SQL_DATA_SOURCE_NAME
  481.     SQL_DATA_SOURCE_READ_ONLY
  482.     SQL_DATE
  483.     SQL_DB2ESTIMATE
  484.     SQL_DB2ESTIMATE_DEFAULT
  485.     SQL_DB2ESTIMATE_OFF
  486.     SQL_DB2ESTIMATE_ON
  487.     SQL_DB2EXPLAIN
  488.     SQL_DB2EXPLAIN_DEFAULT
  489.     SQL_DB2EXPLAIN_OFF
  490.     SQL_DB2EXPLAIN_ON
  491.     SQL_DBCLOB
  492.     SQL_DBCLOB_LOCATOR
  493.     SQL_DBMS_NAME
  494.     SQL_DBMS_VER
  495.     SQL_DECIMAL
  496.     SQL_DEFAULT_PARAM
  497.     SQL_DEFAULT_TXN_ISOLATION
  498.     SQL_DELETE
  499.     SQL_DOUBLE
  500.     SQL_DRIVER_COMPLETE
  501.     SQL_DRIVER_COMPLETE_REQUIRED
  502.     SQL_DRIVER_HDBC
  503.     SQL_DRIVER_HENV
  504.     SQL_DRIVER_HLIB
  505.     SQL_DRIVER_HSTMT
  506.     SQL_DRIVER_NAME
  507.     SQL_DRIVER_NOPROMPT
  508.     SQL_DRIVER_ODBC_VER
  509.     SQL_DRIVER_PROMPT
  510.     SQL_DRIVER_VER
  511.     SQL_DROP
  512.     SQL_ENSURE
  513.     SQL_ENTIRE_ROWSET
  514.     SQL_ERROR
  515.     SQL_EXPRESSIONS_IN_ORDERBY
  516.     SQL_EXT_API_LAST
  517.     SQL_FALSE
  518.     SQL_FD_FETCH_ABSOLUTE
  519.     SQL_FD_FETCH_BOOKMARK
  520.     SQL_FD_FETCH_FIRST
  521.     SQL_FD_FETCH_LAST
  522.     SQL_FD_FETCH_NEXT
  523.     SQL_FD_FETCH_PREV
  524.     SQL_FD_FETCH_RELATIVE
  525.     SQL_FD_FETCH_RESUME
  526.     SQL_FETCH_ABSOLUTE
  527.     SQL_FETCH_BOOKMARK
  528.     SQL_FETCH_DIRECTION
  529.     SQL_FETCH_FIRST
  530.     SQL_FETCH_LAST
  531.     SQL_FETCH_NEXT
  532.     SQL_FETCH_PRIOR
  533.     SQL_FETCH_RELATIVE
  534.     SQL_FILE_APPEND
  535.     SQL_FILE_CREATE
  536.     SQL_FILE_NOT_SUPPORTED
  537.     SQL_FILE_OVERWRITE
  538.     SQL_FILE_QUALIFIER
  539.     SQL_FILE_READ
  540.     SQL_FILE_TABLE
  541.     SQL_FILE_USAGE
  542.     SQL_FLOAT
  543.     SQL_FN_CVT_CONVERT
  544.     SQL_FN_NUM_ABS
  545.     SQL_FN_NUM_ACOS
  546.     SQL_FN_NUM_ASIN
  547.     SQL_FN_NUM_ATAN
  548.     SQL_FN_NUM_ATAN2
  549.     SQL_FN_NUM_CEILING
  550.     SQL_FN_NUM_COS
  551.     SQL_FN_NUM_COT
  552.     SQL_FN_NUM_DEGREES
  553.     SQL_FN_NUM_EXP
  554.     SQL_FN_NUM_FLOOR
  555.     SQL_FN_NUM_LOG
  556.     SQL_FN_NUM_LOG10
  557.     SQL_FN_NUM_MOD
  558.     SQL_FN_NUM_PI
  559.     SQL_FN_NUM_POWER
  560.     SQL_FN_NUM_RADIANS
  561.     SQL_FN_NUM_RAND
  562.     SQL_FN_NUM_ROUND
  563.     SQL_FN_NUM_SIGN
  564.     SQL_FN_NUM_SIN
  565.     SQL_FN_NUM_SQRT
  566.     SQL_FN_NUM_TAN
  567.     SQL_FN_NUM_TRUNCATE
  568.     SQL_FN_STR_ASCII
  569.     SQL_FN_STR_CHAR
  570.     SQL_FN_STR_CONCAT
  571.     SQL_FN_STR_DIFFERENCE
  572.     SQL_FN_STR_INSERT
  573.     SQL_FN_STR_LCASE
  574.     SQL_FN_STR_LEFT
  575.     SQL_FN_STR_LENGTH
  576.     SQL_FN_STR_LOCATE
  577.     SQL_FN_STR_LOCATE_2
  578.     SQL_FN_STR_LTRIM
  579.     SQL_FN_STR_REPEAT
  580.     SQL_FN_STR_REPLACE
  581.     SQL_FN_STR_RIGHT
  582.     SQL_FN_STR_RTRIM
  583.     SQL_FN_STR_SOUNDEX
  584.     SQL_FN_STR_SPACE
  585.     SQL_FN_STR_SUBSTRING
  586.     SQL_FN_STR_UCASE
  587.     SQL_FN_SYS_DBNAME
  588.     SQL_FN_SYS_IFNULL
  589.     SQL_FN_SYS_USERNAME
  590.     SQL_FN_TD_CURDATE
  591.     SQL_FN_TD_CURTIME
  592.     SQL_FN_TD_DAYNAME
  593.     SQL_FN_TD_DAYOFMONTH
  594.     SQL_FN_TD_DAYOFWEEK
  595.     SQL_FN_TD_DAYOFYEAR
  596.     SQL_FN_TD_HOUR
  597.     SQL_FN_TD_MINUTE
  598.     SQL_FN_TD_MONTH
  599.     SQL_FN_TD_MONTHNAME
  600.     SQL_FN_TD_NOW
  601.     SQL_FN_TD_QUARTER
  602.     SQL_FN_TD_SECOND
  603.     SQL_FN_TD_TIMESTAMPADD
  604.     SQL_FN_TD_TIMESTAMPDIFF
  605.     SQL_FN_TD_WEEK
  606.     SQL_FN_TD_YEAR
  607.     SQL_FN_TSI_DAY
  608.     SQL_FN_TSI_FRAC_SECOND
  609.     SQL_FN_TSI_HOUR
  610.     SQL_FN_TSI_MINUTE
  611.     SQL_FN_TSI_MONTH
  612.     SQL_FN_TSI_QUARTER
  613.     SQL_FN_TSI_SECOND
  614.     SQL_FN_TSI_WEEK
  615.     SQL_FN_TSI_YEAR
  616.     SQL_FROM_LITERAL
  617.     SQL_FROM_LOCATOR
  618.     SQL_GB_GROUP_BY_CONTAINS_SELECT
  619.     SQL_GB_GROUP_BY_EQUALS_SELECT
  620.     SQL_GB_NOT_SUPPORTED
  621.     SQL_GB_NO_RELATION
  622.     SQL_GD_ANY_COLUMN
  623.     SQL_GD_ANY_ORDER
  624.     SQL_GD_BLOCK
  625.     SQL_GD_BOUND
  626.     SQL_GETDATA_EXTENSIONS
  627.     SQL_GET_BOOKMARK
  628.     SQL_GRAPHIC
  629.     SQL_GROUP_BY
  630.     SQL_H_SQLCLI
  631.     SQL_IC_LOWER
  632.     SQL_IC_MIXED
  633.     SQL_IC_SENSITIVE
  634.     SQL_IC_UPPER
  635.     SQL_IDENTIFIER_CASE
  636.     SQL_IDENTIFIER_QUOTE_CHAR
  637.     SQL_IGNORE
  638.     SQL_INDEX_ALL
  639.     SQL_INDEX_CLUSTERED
  640.     SQL_INDEX_HASHED
  641.     SQL_INDEX_OTHER
  642.     SQL_INDEX_UNIQUE
  643.     SQL_INFO_DRIVER_START
  644.     SQL_INFO_LAST
  645.     SQL_INTEGER
  646.     SQL_INVALID_HANDLE
  647.     SQL_KEYSET_SIZE
  648.     SQL_KEYSET_SIZE_DEFAULT
  649.     SQL_KEYWORDS
  650.     SQL_LCK_EXCLUSIVE
  651.     SQL_LCK_NO_CHANGE
  652.     SQL_LCK_UNLOCK
  653.     SQL_LD_COMPAT_DEFAULT
  654.     SQL_LD_COMPAT_NO
  655.     SQL_LD_COMPAT_YES
  656.     SQL_LEN_DATA_AT_EXEC_OFFSET
  657.     SQL_LIKE_ESCAPE_CLAUSE
  658.     SQL_LIKE_ONLY
  659.     SQL_LOCK_EXCLUSIVE
  660.     SQL_LOCK_NO_CHANGE
  661.     SQL_LOCK_TYPES
  662.     SQL_LOCK_UNLOCK
  663.     SQL_LOGIN_TIMEOUT
  664.     SQL_LOGIN_TIMEOUT_DEFAULT
  665.     SQL_LONGDATA_COMPAT
  666.     SQL_LONGVARBINARY
  667.     SQL_LONGVARCHAR
  668.     SQL_LONGVARGRAPHIC
  669.     SQL_MAXCONN
  670.     SQL_MAX_BINARY_LITERAL_LEN
  671.     SQL_MAX_CATALOG_NAME_LEN
  672.     SQL_MAX_CHAR_LITERAL_LEN
  673.     SQL_MAX_COLUMNS_IN_GROUP_BY
  674.     SQL_MAX_COLUMNS_IN_INDEX
  675.     SQL_MAX_COLUMNS_IN_ORDER_BY
  676.     SQL_MAX_COLUMNS_IN_SELECT
  677.     SQL_MAX_COLUMNS_IN_TABLE
  678.     SQL_MAX_COLUMN_NAME_LEN
  679.     SQL_MAX_CURSOR_NAME_LEN
  680.     SQL_MAX_DSN_LENGTH
  681.     SQL_MAX_ID_LENGTH
  682.     SQL_MAX_INDEX_SIZE
  683.     SQL_MAX_LENGTH
  684.     SQL_MAX_LENGTH_DEFAULT
  685.     SQL_MAX_MESSAGE_LENGTH
  686.     SQL_MAX_OPTION_STRING_LENGTH
  687.     SQL_MAX_OWNER_NAME_LEN
  688.     SQL_MAX_PROCEDURE_NAME_LEN
  689.     SQL_MAX_QUALIFIER_NAME_LEN
  690.     SQL_MAX_ROWS
  691.     SQL_MAX_ROWS_DEFAULT
  692.     SQL_MAX_ROW_SIZE
  693.     SQL_MAX_ROW_SIZE_INCLUDES_LONG
  694.     SQL_MAX_SCHEMA_NAME_LEN
  695.     SQL_MAX_STATEMENT_LEN
  696.     SQL_MAX_TABLES_IN_SELECT
  697.     SQL_MAX_TABLE_NAME_LEN
  698.     SQL_MAX_USER_NAME_LEN
  699.     SQL_MODE_DEFAULT
  700.     SQL_MODE_READ_ONLY
  701.     SQL_MODE_READ_WRITE
  702.     SQL_MULTIPLE_ACTIVE_TXN
  703.     SQL_MULT_RESULT_SETS
  704.     SQL_NC_END
  705.     SQL_NC_HIGH
  706.     SQL_NC_LOW
  707.     SQL_NC_START
  708.     SQL_NEED_DATA
  709.     SQL_NEED_LONG_DATA_LEN
  710.     SQL_NNC_NON_NULL
  711.     SQL_NNC_NULL
  712.     SQL_NODESCRIBE
  713.     SQL_NODESCRIBE_DEFAULT
  714.     SQL_NODESCRIBE_OFF
  715.     SQL_NODESCRIBE_ON
  716.     SQL_NON_NULLABLE_COLUMNS
  717.     SQL_NOSCAN
  718.     SQL_NOSCAN_DEFAULT
  719.     SQL_NOSCAN_OFF
  720.     SQL_NOSCAN_ON
  721.     SQL_NO_ACTION
  722.     SQL_NO_DATA
  723.     SQL_NO_DATA_FOUND
  724.     SQL_NO_NULLS
  725.     SQL_NO_TOTAL
  726.     SQL_NTS
  727.     SQL_NULLABLE
  728.     SQL_NULLABLE_UNKNOWN
  729.     SQL_NULL_COLLATION
  730.     SQL_NULL_DATA
  731.     SQL_NULL_HDBC
  732.     SQL_NULL_HENV
  733.     SQL_NULL_HSTMT
  734.     SQL_NUMERIC
  735.     SQL_NUMERIC_FUNCTIONS
  736.     SQL_OAC_LEVEL1
  737.     SQL_OAC_LEVEL2
  738.     SQL_OAC_NONE
  739.     SQL_ODBC_API_CONFORMANCE
  740.     SQL_ODBC_CURSORS
  741.     SQL_ODBC_SAG_CLI_CONFORMANCE
  742.     SQL_ODBC_SQL_CONFORMANCE
  743.     SQL_ODBC_SQL_OPT_IEF
  744.     SQL_ODBC_VER
  745.     SQL_OJ_ALL_COMPARISON_OPS
  746.     SQL_OJ_CAPABILITIES
  747.     SQL_OJ_FULL
  748.     SQL_OJ_INNER
  749.     SQL_OJ_LEFT
  750.     SQL_OJ_NESTED
  751.     SQL_OJ_NOT_ORDERED
  752.     SQL_OJ_RIGHT
  753.     SQL_ONEPHASE
  754.     SQL_OPT_TRACE
  755.     SQL_OPT_TRACEFILE
  756.     SQL_ORDER_BY_COLUMNS_IN_SELECT
  757.     SQL_OSCC_COMPLIANT
  758.     SQL_OSCC_NOT_COMPLIANT
  759.     SQL_OSC_CORE
  760.     SQL_OSC_EXTENDED
  761.     SQL_OSC_MINIMUM
  762.     SQL_OUTER_JOINS
  763.     SQL_OU_DML_STATEMENTS
  764.     SQL_OU_INDEX_DEFINITION
  765.     SQL_OU_PRIVILEGE_DEFINITION
  766.     SQL_OU_PROCEDURE_INVOCATION
  767.     SQL_OU_TABLE_DEFINITION
  768.     SQL_OWNER_TERM
  769.     SQL_OWNER_USAGE
  770.     SQL_PACKET_SIZE
  771.     SQL_PARAMOPT_ATOMIC
  772.     SQL_PARAM_INPUT
  773.     SQL_PARAM_INPUT_OUTPUT
  774.     SQL_PARAM_OUTPUT
  775.     SQL_PARAM_TYPE_DEFAULT
  776.     SQL_PARAM_TYPE_UNKNOWN
  777.     SQL_PC_NOT_PSEUDO
  778.     SQL_PC_PSEUDO
  779.     SQL_PC_UNKNOWN
  780.     SQL_POSITION
  781.     SQL_POSITIONED_STATEMENTS
  782.     SQL_POS_ADD
  783.     SQL_POS_DELETE
  784.     SQL_POS_OPERATIONS
  785.     SQL_POS_POSITION
  786.     SQL_POS_REFRESH
  787.     SQL_POS_UPDATE
  788.     SQL_PROCEDURES
  789.     SQL_PROCEDURE_TERM
  790.     SQL_PS_POSITIONED_DELETE
  791.     SQL_PS_POSITIONED_UPDATE
  792.     SQL_PS_SELECT_FOR_UPDATE
  793.     SQL_PT_FUNCTION
  794.     SQL_PT_PROCEDURE
  795.     SQL_PT_UNKNOWN
  796.     SQL_QL_END
  797.     SQL_QL_START
  798.     SQL_QUALIFIER_LOCATION
  799.     SQL_QUALIFIER_NAME_SEPARATOR
  800.     SQL_QUALIFIER_TERM
  801.     SQL_QUALIFIER_USAGE
  802.     SQL_QUERY_TIMEOUT
  803.     SQL_QUERY_TIMEOUT_DEFAULT
  804.     SQL_QUICK
  805.     SQL_QUIET_MODE
  806.     SQL_QUOTED_IDENTIFIER_CASE
  807.     SQL_QU_DML_STATEMENTS
  808.     SQL_QU_INDEX_DEFINITION
  809.     SQL_QU_PRIVILEGE_DEFINITION
  810.     SQL_QU_PROCEDURE_INVOCATION
  811.     SQL_QU_TABLE_DEFINITION
  812.     SQL_RD_DEFAULT
  813.     SQL_RD_OFF
  814.     SQL_RD_ON
  815.     SQL_REAL
  816.     SQL_REFRESH
  817.     SQL_RESET_PARAMS
  818.     SQL_RESTRICT
  819.     SQL_RESULT_COL
  820.     SQL_RETRIEVE_DATA
  821.     SQL_RETURN_VALUE
  822.     SQL_ROLLBACK
  823.     SQL_ROWSET_SIZE
  824.     SQL_ROWSET_SIZE_DEFAULT
  825.     SQL_ROWVER
  826.     SQL_ROW_ADDED
  827.     SQL_ROW_DELETED
  828.     SQL_ROW_ERROR
  829.     SQL_ROW_NOROW
  830.     SQL_ROW_NUMBER
  831.     SQL_ROW_SUCCESS
  832.     SQL_ROW_UPDATED
  833.     SQL_ROW_UPDATES
  834.     SQL_SCCO_LOCK
  835.     SQL_SCCO_OPT_ROWVER
  836.     SQL_SCCO_OPT_TIMESTAMP
  837.     SQL_SCCO_OPT_VALUES
  838.     SQL_SCCO_READ_ONLY
  839.     SQL_SCOPE_CURROW
  840.     SQL_SCOPE_SESSION
  841.     SQL_SCOPE_TRANSACTION
  842.     SQL_SCROLL_CONCURRENCY
  843.     SQL_SCROLL_OPTIONS
  844.     SQL_SC_NON_UNIQUE
  845.     SQL_SC_TRY_UNIQUE
  846.     SQL_SC_UNIQUE
  847.     SQL_SEARCHABLE
  848.     SQL_SEARCH_PATTERN_ESCAPE
  849.     SQL_SERVER_NAME
  850.     SQL_SETPARAM_VALUE_MAX
  851.     SQL_SET_DEFAULT
  852.     SQL_SET_NULL
  853.     SQL_SIGNED_OFFSET
  854.     SQL_SIMULATE_CURSOR
  855.     SQL_SMALLINT
  856.     SQL_SO_DYNAMIC
  857.     SQL_SO_FORWARD_ONLY
  858.     SQL_SO_KEYSET_DRIVEN
  859.     SQL_SO_MIXED
  860.     SQL_SO_STATIC
  861.     SQL_SPECIAL_CHARACTERS
  862.     SQL_SQLSTATE_SIZE
  863.     SQL_SQ_COMPARISON
  864.     SQL_SQ_CORRELATED_SUBQUERIES
  865.     SQL_SQ_EXISTS
  866.     SQL_SQ_IN
  867.     SQL_SQ_QUANTIFIED
  868.     SQL_SS_ADDITIONS
  869.     SQL_SS_DELETIONS
  870.     SQL_SS_UPDATES
  871.     SQL_STATIC_SENSITIVITY
  872.     SQL_STILL_EXECUTING
  873.     SQL_STMTTXN_ISOLATION
  874.     SQL_STRING_FUNCTIONS
  875.     SQL_SUBQUERIES
  876.     SQL_SUCCESS
  877.     SQL_SUCCESS_WITH_INFO
  878.     SQL_SYNCPOINT_DEFAULT
  879.     SQL_SYNC_POINT
  880.     SQL_SYSTEM_FUNCTIONS
  881.     SQL_TABLE_STAT
  882.     SQL_TABLE_TERM
  883.     SQL_TC_ALL
  884.     SQL_TC_DDL_COMMIT
  885.     SQL_TC_DDL_IGNORE
  886.     SQL_TC_DML
  887.     SQL_TC_NONE
  888.     SQL_TIME
  889.     SQL_TIMEDATE_ADD_INTERVALS
  890.     SQL_TIMEDATE_DIFF_INTERVALS
  891.     SQL_TIMEDATE_FUNCTIONS
  892.     SQL_TIMESTAMP
  893.     SQL_TINYINT
  894.     SQL_TRANSLATE_DLL
  895.     SQL_TRANSLATE_OPTION
  896.     SQL_TRUE
  897.     SQL_TWOPHASE
  898.     SQL_TXN_CAPABLE
  899.     SQL_TXN_ISOLATION
  900.     SQL_TXN_ISOLATION_OPTION
  901.     SQL_TXN_NOCOMMIT
  902.     SQL_TXN_READ_COMMITTED
  903.     SQL_TXN_READ_UNCOMMITTED
  904.     SQL_TXN_REPEATABLE_READ
  905.     SQL_TXN_SERIALIZABLE
  906.     SQL_TXN_VERSIONING
  907.     SQL_UB_DEFAULT
  908.     SQL_UB_OFF
  909.     SQL_UB_ON
  910.     SQL_UNBIND
  911.     SQL_UNION
  912.     SQL_UNSEARCHABLE
  913.     SQL_UNSIGNED_OFFSET
  914.     SQL_UPDATE
  915.     SQL_USER_NAME
  916.     SQL_USE_BOOKMARKS
  917.     SQL_U_UNION
  918.     SQL_U_UNION_ALL
  919.     SQL_VARBINARY
  920.     SQL_VARCHAR
  921.     SQL_VARGRAPHIC
  922.     SQL_WCHARTYPE
  923.     SQL_WCHARTYPE_CONVERT
  924.     SQL_WCHARTYPE_DEFAULT
  925.     SQL_WCHARTYPE_NOCONVERT
  926. );
  927. sub AUTOLOAD {
  928.     # This AUTOLOAD is used to 'autoload' constants from the constant()
  929.     # XS function.  If a constant is not found then control is passed
  930.     # to the AUTOLOAD in AutoLoader.
  931.  
  932.     local($constname);
  933.     ($constname = $AUTOLOAD) =~ s/.*:://;
  934.     $val = constant($constname, @_ ? $_[0] : 0);
  935.     if ($! != 0) {
  936.     if ($! =~ /Invalid/) {
  937.         $AutoLoader::AUTOLOAD = $AUTOLOAD;
  938.         goto &AutoLoader::AUTOLOAD;
  939.     }
  940.     else {
  941.         ($pack,$file,$line) = caller;
  942.         die "Your vendor has not defined DB2CLI macro $constname, used at $file line $line.
  943. ";
  944.     }
  945.     }
  946.     eval "sub $AUTOLOAD { $val }";
  947.     goto &$AUTOLOAD;
  948. }
  949.  
  950. bootstrap DB2CLI;
  951.  
  952. # Preloaded methods go here.
  953.  
  954. # Autoload methods go after __END__, and are processed by the autosplit program.
  955.  
  956. 1;
  957. __END__
  958. #############################################################################
  959.  
  960. sub iMessage
  961. {
  962.     my ($henv, $hdbc, $hstmt, $where, $failrc) = @_;
  963.     my ($state, $code, $message, $text);
  964.     my $rc = SQLError($henv, $hdbc, $hstmt, $state, $code, $message);
  965.     $text = "\n$where";
  966.     $text .= "\n\trc=$failrc"
  967.     if $failrc;
  968.     $text .= "\nCannot obtain SQL error message, API rc=$rc:\n"
  969.     if $rc < 0;
  970.     $text .= ", state=$state, code=$code\n$message\n\n";
  971.     if ($failrc >= 0) {
  972.     croak $text;
  973.     return 1;
  974.     }
  975.     SQLTransact($hdbc, SQL_ROLLBACK);
  976.     confess $text;
  977. }
  978.  
  979. #############################################################################
  980. # Connections
  981.  
  982. sub Connect
  983. {
  984.     my ($class, $database, $user, $pw) = @_;
  985.     my ($henv, $hdbc, $rc);
  986.     if ($rc = SQLAllocEnv($henv)) {
  987.     warn "SQLAllocEnv failed with rc=$rc\n";
  988.     return undef;
  989.     }
  990.     if ($rc = SQLAllocConnect($henv, $hdbc)) {
  991.     iMessage($henv, undef, undef, "SQLAllocConnect", $rc);
  992.     SQLFreeEnv($henv);
  993.     return undef;
  994.     }
  995.     my $connRef = bless { HENV => $henv, HDBC => $hdbc, DATABASE => $database };
  996.     if ($rc = SQLConnect($hdbc, $database, $user, $pw)) {
  997.     $connRef->Message("SQLConnect to $database", $rc);
  998.     SQLFreeConnect($hdbc);
  999.     SQLFreeEnv($henv);
  1000.     return undef;
  1001.     }
  1002.     return $connRef;
  1003. }
  1004.  
  1005. sub Transact
  1006. {
  1007.     my ($connRef, $arg) = @_;
  1008.     my ($rc);
  1009.     if ($rc = SQLTransact($connRef->{HDBC}, $arg)) {
  1010.     $connRef->Message("SQLTransact $connRef->{DATABASE}", $rc);
  1011.     }
  1012.     return $connRef;
  1013. }
  1014.  
  1015. sub Disconnect
  1016. {
  1017.     my ($connRef) = @_;
  1018.     my ($rc);
  1019.     if ($rc = SQLDisconnect($connRef->{HDBC})) {
  1020.     $connRef->Message("SQLDisconnect from $connRef->{DATABASE}", $rc);
  1021.     }
  1022.     SQLFreeConnect($connRef->{HDBC});
  1023.     SQLFreeEnv($connRef->{HDBC});
  1024.     return $_[0] = undef;
  1025. }
  1026.  
  1027. #############################################################################
  1028. # Statements
  1029.  
  1030. sub Statement
  1031. {
  1032.     my ($connRef, $comment) = @_;
  1033.     my ($hstmt, $rc);
  1034.     if ($rc = SQLAllocStmt($connRef->{HDBC}, $hstmt)) {
  1035.     $connRef->Message("SQLAllocStmt", $rc);
  1036.     return undef;
  1037.     }
  1038.     return bless { %$connRef, HSTMT => $hstmt, TEXT => $comment };
  1039. }
  1040.  
  1041. sub ExecDirect
  1042. {
  1043.     my ($connRef, $stmt, @args) = @_;
  1044.     my $stmtRef = $connRef->Prepare($stmt);
  1045.     my $rc = $stmtRef->Execute(@args);
  1046.     $stmtRef->Release();
  1047.     return $rc;
  1048. }
  1049.  
  1050. sub Prepare
  1051. {
  1052.     my ($connRef, $stmt, $refStmt) = @_;
  1053.     my ($hstmt, $rc);
  1054.     if ($rc = SQLAllocStmt($connRef->{HDBC}, $hstmt)) {
  1055.     $connRef->Message("SQLAllocStmt", $rc);
  1056.     return undef;
  1057.     }
  1058.     if ($refStmt) {
  1059.     my $cursor = "-Unknown-";
  1060.     SQLGetCursorName($refStmt->{HSTMT}, $cursor);
  1061.     $stmt .= " $cursor";
  1062.     }
  1063.     my $i = index($stmt, "\n", 1);
  1064.     my $s = ($i >= 0) ? substr($stmt, 0, $i) : $stmt;
  1065.     my $stmtRef = bless { %$connRef, HSTMT => $hstmt, TEXT => $s };
  1066.     if ($rc = SQLPrepare($hstmt, $stmt)) {
  1067.     $stmtRef->Message("SQLPrepare \"$s\"", $rc);
  1068.     return undef;
  1069.     }
  1070.     return $stmtRef;
  1071. }
  1072.  
  1073. sub Execute
  1074. {
  1075.     my ($stmtRef) = shift @_;
  1076.     my ($rc);
  1077.     if ($rc = SQLExecute($stmtRef->{HSTMT}, @_)) {
  1078.     $stmtRef->Message("SQLExecute \"$stmtRef->{TEXT}\"", $rc);
  1079.     }
  1080.     return $rc;
  1081. }
  1082.  
  1083. sub Fetch
  1084. {
  1085.     my ($stmtRef) = shift @_;
  1086.     my ($rc);
  1087.     if (($rc = SQLFetch($stmtRef->{HSTMT}, @_)) != SQL_SUCCESS && $rc != SQL_NO_DATA) {
  1088.     $stmtRef->Message("SQLFetch \"$stmtRef->{TEXT}\"", $rc);
  1089.     }
  1090.     return $rc;
  1091. }
  1092.  
  1093. sub Close
  1094. {
  1095.     my ($stmtRef) = @_;
  1096.     my ($rc);
  1097.     if ($rc = SQLFreeStmt($stmtRef->{HSTMT}, SQL_CLOSE)) {
  1098.     $stmtRef->Message("SQLFreeStmt \"$stmtRef->{TEXT}\"", $rc);
  1099.     }
  1100.     return $stmtRef;
  1101. }
  1102.  
  1103. sub Release
  1104. {
  1105.     my ($stmtRef) = @_;
  1106.     my ($rc);
  1107.     if ($rc = SQLFreeStmt($stmtRef->{HSTMT})) {
  1108.     $stmtRef->Message("SQLFreeStmt \"$stmtRef->{TEXT}\"", $rc);
  1109.     }
  1110.     return undef;
  1111. }
  1112.  
  1113. sub Message
  1114. {
  1115.     my ($stmtRef, $text, $rc) = @_;
  1116.     iMessage($stmtRef->{HENV}, $stmtRef->{HDBC},
  1117.          exists($stmtRef->{HSTMT}) ? $stmtRef->{HSTMT} : undef,
  1118.          $text, $rc);
  1119.     die if $rc < 0;
  1120. }
  1121.