Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

SQLDBC.h

Go to the documentation of this file.
00001 #line 1 "C:\\SAPDevelop\\DEV\\develop\\sys\\src\\SAPDB\\Interfaces\\SQLDBC\\SQLDBC.h"
00002 
00027 #ifndef SQLDBC_H
00028 #define SQLDBC_H
00029 
00036 #ifdef  SQLDBC_FEATURE_TRACEOPTION_OFF
00037 #undef  SQLDBC_FEATURE_TRACEOPTION
00038 #else
00039 #define SQLDBC_FEATURE_TRACEOPTION
00040 #endif
00041 
00047 #ifdef  SQLDBC_FEATURE_PROFILE_OFF
00048 #undef  SQLDBC_FEATURE_PROFILE
00049 #else
00050 #define SQLDBC_FEATURE_PROFILE
00051 #endif
00052 
00059 #ifdef  SQLDBC_FEATURE_DECIMAL_OFF
00060 #undef  SQLDBC_FEATURE_DECIMAL
00061 #else
00062 #ifndef SQLDBC_FEATURE_DECIMAL
00063 #define SQLDBC_FEATURE_DECIMAL
00064 #endif
00065 #endif
00066 
00072 #ifdef  SQLDBC_FEATURE_OMS_ASCII_OFF
00073 #undef  SQLDBC_FEATURE_OMS_ASCII
00074 #else
00075 #ifndef SQLDBC_FEATURE_OMS_ASCII
00076 #define SQLDBC_FEATURE_OMS_ASCII
00077 #endif
00078 #endif
00079 
00085 #ifdef  SQLDBC_RESULTSET_ROWWISE_OFF
00086 #undef  SQLDBC_FEATURE_RESULTSET_ROWWISE
00087 #else
00088 #define SQLDBC_FEATURE_RESULTSET_ROWWISE
00089 #endif
00090 
00097 #ifdef SQLDBC_CONNECTION_FEATURES_OFF
00098 #undef SQLDBC_FEATURE_CONNECTION_FEATURES
00099 #else
00100 #define SQLDBC_FEATURE_CONNECTION_FEATURES
00101 #endif
00102 /*
00103  * If this macro is set it is possible to retrieve the connection object
00104  * to a statement.
00105  */
00106 #ifdef  SQLDBC_FEATURE_STATEMENT_GETCONNECTION_OFF
00107 #undef  SQLDBC_FEATURE_STATEMENT_GETCONNECTION
00108 #else
00109 #define SQLDBC_FEATURE_STATEMENT_GETCONNECTION
00110 #endif
00111 
00116 #ifdef  SQLDBC_FEATURE_METADATA_SCHEMATABLE_OFF
00117 #undef  SQLDBC_FEATURE_METADATA_SCHEMATABLE
00118 #else
00119 #define SQLDBC_FEATURE_METADATA_SCHEMATABLE
00120 #endif
00121 
00126 #ifdef  SQLDBC_FEATURE_METADATA_COLUMNLABEL_OFF
00127 #undef  SQLDBC_FEATURE_METADATA_COLUMNLABEL
00128 #else
00129 #define SQLDBC_FEATURE_METADATA_COLUMNLABEL
00130 #endif
00131 
00135 #ifdef  SQLDBC_FEATURE_LOB_KEEPALIVE_OFF
00136 #undef  SQLDBC_FEATURE_LOB_KEEPALIVE
00137 #else
00138 #define SQLDBC_FEATURE_LOB_KEEPALIVE
00139 #endif
00140 
00141 #include "SQLDBC_Types.h" /* no check */
00142 
00143 #ifdef IFR_NAMESPACE
00144 namespace IFR_NAMESPACE  {
00145 #endif
00146 class IFR_Environment;
00147 class IFR_Connection;
00148 class IFR_ConnectProperties;
00149 class IFR_ConnectionItem;
00150 class IFR_ErrorHndl;
00151 class IFR_Statement;
00152 class IFR_PreparedStmt;
00153 class IFR_SQLWarning;
00154 class IFR_ResultSet;
00155 class IFR_RowSet;
00156 class IFR_ParameterMetaData;
00157 class IFR_ResultSetMetaData;
00158 class IFR_LOB;
00159 class IFR_Profile;
00160 #ifdef IFR_NAMESPACE
00161 };
00162 using namespace IFR_NAMESPACE;
00163 #endif
00164 class SAPDBMem_IRawAllocator;
00165 
00166 /*
00167    HP compiler complains about constant primitives as return values.
00168    Removing the 'const' would break binary compatibility, so it's better
00169    to disable just the warning (using an undocumented #pragma ...).
00170 */
00171 #ifdef __hpux
00172 #ifdef __ia64
00173 #pragma diag_suppress 2815
00174 #endif
00175 #endif
00176 
00180 static const char* const SQLDBCHeaderVersion = "SQLDBC.H  7.7.4    BUILD 008-000-000-000";
00181 /*+
00182    type maps used by the script genSQLDBC_C.pl for generating a SQLDBC C-wrapper.
00183    #typemap  SQLDBC_StringEncodingType_Encoding SQLDBC_StringEncoding
00184    #typemap  ParameterMode SQLDBC_ParameterMetaData::ParameterMode
00185    #typemap  ParameterNullBehavior SQLDBC_ParameterMetaData::ParameterNullBehavior
00186    #typemap  ColumnNullBehavior SQLDBC_ResultSetMetaData::ColumnNullBehavior
00187    #typemap  SQLDBC_Statement_ResultSetType SQLDBC_Statement::ResultSetType
00188    #typemap  SQLDBC_Statement_ConcurrencyType SQLDBC_Statement::ConcurrencyType
00189 */
00190 
00191 #ifdef SQLDBC_RUNTIME_IN_NAMESPACE
00192 namespace SQLDBC {
00193     class SQLDBC_IRuntime;
00194 };
00195 #else
00196 class SQLDBC_IRuntime;
00197 #endif
00198 
00199 #ifdef WIN32
00200 #ifndef SQLDBC_FOR_KERNEL
00201 #define SQLDBC_DLLEXPORT __declspec(dllexport)
00202 #else
00203 #define SQLDBC_DLLEXPORT
00204 #endif
00205 #else
00206 #define SQLDBC_DLLEXPORT
00207 #endif
00208 
00209 namespace SQLDBC {
00210 class SQLDBC_Statement;
00211 class SQLDBC_ConnectProperties;
00212 class SQLDBC_Connection;
00213 
00217 class SQLDBC_ErrorHndl
00218 {
00219 public:
00225   SQLDBC_DLLEXPORT
00226   SQLDBC_ErrorHndl();
00227 
00231   SQLDBC_DLLEXPORT
00232   const SQLDBC_Int4 getErrorCode() const;
00233 
00237   SQLDBC_DLLEXPORT
00238   const char* getSQLState() const;
00239 
00244   SQLDBC_DLLEXPORT
00245   const char *getErrorText() const;
00246 
00254   SQLDBC_DLLEXPORT
00255   operator SQLDBC_Bool () const;
00256 
00257 private:
00258   friend class SQLDBC_ConnectionItem;
00259   friend struct SQLDBC_ConnectionItemStorage;
00260   friend class SQLDBC_Connection;
00261 
00267   SQLDBC_ErrorHndl(IFR_ErrorHndl* error);
00268 
00273   void setMemoryAllocationFailed();
00274 
00275 
00279   IFR_ErrorHndl *m_error;
00280 };
00281 
00290 class SQLDBC_SQLWarning
00291 {
00292 public:
00297   SQLDBC_DLLEXPORT
00298   SQLDBC_SQLWarning* getNextWarning() const;
00299 
00303   SQLDBC_DLLEXPORT
00304   SQLDBC_SQLWarningCode getWarningCode() const;
00305 
00306 private:
00307   friend class SQLDBC_ConnectionItem;
00308   friend struct SQLDBC_ConnectionItemStorage;
00314   SQLDBC_SQLWarning(IFR_SQLWarning* warning);
00315   IFR_SQLWarning    *m_warning;
00316 };
00317 
00318 struct SQLDBC_ConnectionItemStorage;
00319 
00330 class SQLDBC_ConnectionItem
00331 {
00332 public:
00333 
00343     SQLDBC_DLLEXPORT
00344     SQLDBC_ErrorHndl &error();
00345 
00349     SQLDBC_DLLEXPORT
00350     void clearError();
00351 
00360     SQLDBC_DLLEXPORT
00361     SQLDBC_SQLWarning* warning();
00362 
00366     SQLDBC_DLLEXPORT
00367     void clearWarnings();
00368 
00369 private:
00370     friend class SQLDBC_Environment;
00371     friend class SQLDBC_Connection;
00372     friend class SQLDBC_Statement;
00373     friend class SQLDBC_PreparedStatement;
00374     friend class SQLDBC_ResultSet;
00375     friend class SQLDBC_RowSet;
00376     friend class SQLDBC_UpdatableRowSet;
00377     friend struct SQLDBC_StatementStorage;
00378     friend struct SQLDBC_EnvironmentItemStorage;
00379 
00380     SQLDBC_ConnectionItem(IFR_ConnectionItem *item, SQLDBC_Bool isCreatedForSQLDBC_Connection, SQLDBC_Connection* self);
00381 
00382     ~SQLDBC_ConnectionItem();
00383 
00384     SQLDBC_ConnectionItemStorage *m_citem;
00385 };
00386 
00390 class SQLDBC_LOB
00391 {
00392 public:
00404     SQLDBC_DLLEXPORT SQLDBC_Retcode putData(void *paramAddr, SQLDBC_Length  *paramLengthIndicator);
00405 
00409     SQLDBC_DLLEXPORT SQLDBC_Retcode close();
00410 
00411 
00448     SQLDBC_DLLEXPORT SQLDBC_Retcode getData(void                 *paramAddr,
00449                                             SQLDBC_Length        *LengthIndicator,
00450                                             const SQLDBC_Length   Size,
00451                                             const SQLDBC_Bool     Terminate=SQLDBC_TRUE);
00452 
00492     /* #methodmap SQLDBC_LOB_getDataByPos getData */
00493     SQLDBC_DLLEXPORT SQLDBC_Retcode getData(void                 *paramAddr,
00494                                             SQLDBC_Length        *LengthIndicator,
00495                                             const SQLDBC_Length   Size,
00496                                             const SQLDBC_Length   position,
00497                                             const SQLDBC_Bool     Terminate=SQLDBC_TRUE);
00498 
00506     SQLDBC_DLLEXPORT SQLDBC_Length getLength();
00507 
00513     SQLDBC_DLLEXPORT SQLDBC_Length getPosition();
00514 
00515 
00525     SQLDBC_DLLEXPORT SQLDBC_Length getPreferredDataSize();
00526 
00527 #ifdef SQLDBC_FEATURE_LOB_KEEPALIVE
00528 
00542     SQLDBC_DLLEXPORT SQLDBC_Retcode setKeepAlive(SQLDBC_Bool keepalive);
00543 #endif
00544 private:
00545     friend class SQLDBC77_Extension;
00546     SQLDBC_Retcode _setKeepAlive(SQLDBC_Bool keepalive);
00547     IFR_LOB                  *m_lobdata;
00548     IFR_ConnectionItem       *m_citem;
00549 };
00550 
00555 class SQLDBC_ParameterMetaData
00556 {
00557 public:
00558 
00559 #ifndef __cplusplus
00560 typedef
00561 #endif
00562   enum ParameterNullBehavior {
00566     parameterNoNulls = 0,
00567 
00571     parameterNullable = 1,
00572 
00576     parameterNullableUnknown = 2
00577   }
00578 #ifndef __cplusplus
00579 ParameterNullBehavior
00580 #endif
00581 ;
00582 
00583 #ifndef __cplusplus
00584 typedef
00585 #endif
00586   enum ParameterMode {
00587 
00591     parameterModeUnknown = 0,
00592 
00596     parameterModeIn = 1,
00597 
00601     parameterModeInOut = 2,
00602 
00606     parameterModeOut = 4
00607   }
00608 #ifndef __cplusplus
00609 ParameterMode
00610 #endif
00611 ;
00612 
00619   SQLDBC_DLLEXPORT
00620   SQLDBC_Int2 getParameterCount();
00621 
00641   SQLDBC_DLLEXPORT
00642   SQLDBC_Retcode getParameterName(SQLDBC_Int2    param,
00643                                   char *buffer,
00644                                   const SQLDBC_StringEncoding encoding,
00645                                   const SQLDBC_Length  bufferSize,
00646                                   SQLDBC_Length *bufferLength) const;
00647 
00654   SQLDBC_DLLEXPORT
00655   SQLDBC_SQLType getParameterType(SQLDBC_Int2 param);
00656 
00667   SQLDBC_DLLEXPORT
00668   ParameterMode getParameterMode(SQLDBC_Int2 param);
00669 
00680   SQLDBC_DLLEXPORT
00681   SQLDBC_Int4 getParameterLength(SQLDBC_Int2 param);
00682 
00697   SQLDBC_DLLEXPORT
00698   SQLDBC_Int4 getPrecision(SQLDBC_Int2 param);
00699 
00712   SQLDBC_DLLEXPORT
00713   SQLDBC_Int4 getScale(SQLDBC_Int2 param);
00714 
00725   SQLDBC_DLLEXPORT
00726   SQLDBC_Int4 getPhysicalLength(SQLDBC_Int2 param);
00727 
00739   SQLDBC_DLLEXPORT
00740   ParameterNullBehavior isNullable(SQLDBC_Int2 param);
00741 
00742 private:
00743   friend class SQLDBC_PreparedStatement;
00744   friend struct SQLDBC_PreparedStatementStorage;
00745   SQLDBC_ParameterMetaData(IFR_ParameterMetaData *metadata);
00746   IFR_ParameterMetaData *m_metadata;
00747 };
00748 
00753 class SQLDBC_ResultSetMetaData
00754 {
00755 public:
00756 #ifndef __cplusplus
00757 typedef
00758 #endif
00759   enum ColumnNullBehavior {
00763     columnNoNulls = 0,
00764 
00768     columnNullable = 1,
00769 
00773     columnNullableUnknown = 2
00774   }
00775 #ifndef __cplusplus
00776 ColumnNullBehavior
00777 #endif
00778 ;
00784   SQLDBC_DLLEXPORT
00785   SQLDBC_Int2 getColumnCount();
00786 
00787 
00788 #ifdef SQLDBC_FEATURE_METADATA_SCHEMATABLE
00789 
00809   SQLDBC_DLLEXPORT
00810   SQLDBC_Retcode getSchemaName(SQLDBC_Int2 column,
00811                                char *buffer,
00812                                const SQLDBC_StringEncoding encoding,
00813                                const SQLDBC_Length  bufferSize,
00814                                SQLDBC_Length *bufferLength) const;
00815 
00816 
00836   SQLDBC_DLLEXPORT
00837   SQLDBC_Retcode getTableName(SQLDBC_Int2 column,
00838                               char *buffer,
00839                               const SQLDBC_StringEncoding encoding,
00840                               const SQLDBC_Length  bufferSize,
00841                               SQLDBC_Length *bufferLength) const;
00842 
00843 
00844 #endif
00845 
00865   SQLDBC_DLLEXPORT
00866   SQLDBC_Retcode getColumnName(SQLDBC_Int2 column,
00867                                  char *buffer,
00868                                  const SQLDBC_StringEncoding encoding,
00869                                  const SQLDBC_Length  bufferSize,
00870                                  SQLDBC_Length *bufferLength) const;
00871 
00872 #ifdef SQLDBC_FEATURE_METADATA_COLUMNLABEL
00873 
00894   SQLDBC_DLLEXPORT
00895   SQLDBC_Retcode getColumnLabel(SQLDBC_Int2 column,
00896                                  char *buffer,
00897                                  const SQLDBC_StringEncoding encoding,
00898                                  const SQLDBC_Length  bufferSize,
00899                                  SQLDBC_Length *bufferLength) const;
00900 
00901 #endif
00902 
00911   SQLDBC_DLLEXPORT
00912   SQLDBC_SQLType getColumnType(SQLDBC_Int2 column);
00913 
00922   SQLDBC_DLLEXPORT
00923   SQLDBC_Int4 getColumnLength(SQLDBC_Int2 column);
00924 
00938   SQLDBC_DLLEXPORT
00939   SQLDBC_Int4 getPrecision(SQLDBC_Int2 column);
00940 
00953   SQLDBC_DLLEXPORT
00954   SQLDBC_Int4 getScale(SQLDBC_Int2 column);
00955 
00965   SQLDBC_DLLEXPORT
00966   SQLDBC_Int4 getPhysicalLength(SQLDBC_Int2 column);
00967 
00978   SQLDBC_DLLEXPORT
00979   ColumnNullBehavior isNullable(SQLDBC_Int2 column);
00980 
00990   SQLDBC_DLLEXPORT
00991   SQLDBC_Bool isWritable(SQLDBC_Int2 column);
00992 
00993 private:
00994   friend class SQLDBC_PreparedStatement;
00995   friend class SQLDBC_ResultSet;
00996   friend struct SQLDBC_ResultSetStorage;
00997   friend struct SQLDBC_PreparedStatementStorage;
00998   friend class SQLDBC77_Extension;
00999   SQLDBC_Retcode _getColumnLabel(SQLDBC_Int2 column,
01000                                  char *buffer,
01001                                  const SQLDBC_StringEncoding encoding,
01002                                  const SQLDBC_Length  bufferSize,
01003                                  SQLDBC_Length *bufferLength) const;
01004   SQLDBC_Retcode _getTableName(SQLDBC_Int2 column,
01005                               char *buffer,
01006                               const SQLDBC_StringEncoding encoding,
01007                               const SQLDBC_Length  bufferSize,
01008                               SQLDBC_Length *bufferLength) const;
01009   SQLDBC_Retcode _getSchemaName(SQLDBC_Int2 column,
01010                                char *buffer,
01011                                const SQLDBC_StringEncoding encoding,
01012                                const SQLDBC_Length  bufferSize,
01013                                SQLDBC_Length *bufferLength) const;
01014   SQLDBC_ResultSetMetaData(IFR_ResultSetMetaData *metadata);
01015   IFR_ResultSetMetaData *m_metadata;
01016 };
01017 
01029 class SQLDBC_RowSet
01030   : public SQLDBC_ConnectionItem
01031 {
01032 public:
01033 
01043   SQLDBC_DLLEXPORT
01044   SQLDBC_Retcode setPos(SQLDBC_UInt4 pos);
01045 
01052   SQLDBC_DLLEXPORT
01053   SQLDBC_Retcode fetch();
01054 
01061   SQLDBC_DLLEXPORT
01062   const SQLDBC_Int4 getRowsAffected() const;
01063 
01075   SQLDBC_DLLEXPORT
01076   const SQLDBC_Int4 *getRowStatus() const;
01077 
01129   SQLDBC_DLLEXPORT
01130   SQLDBC_Retcode getObject(const SQLDBC_Int4     Index,
01131                            const SQLDBC_HostType Type,
01132                            void                 *paramAddr,
01133                            SQLDBC_Length        *LengthIndicator,
01134                            const SQLDBC_Length   Size,
01135                            const SQLDBC_Bool     Terminate=SQLDBC_TRUE);
01136 
01191   /* #methodmap SQLDBC_RowSet_getObjectByPos getObject */
01192   SQLDBC_DLLEXPORT
01193   SQLDBC_Retcode getObject(const SQLDBC_Int4     Index,
01194                            const SQLDBC_HostType Type,
01195                            void                 *paramAddr,
01196                            SQLDBC_Length        *LengthIndicator,
01197                            const SQLDBC_Length   Size,
01198                            SQLDBC_Length         StartPos,
01199                            const SQLDBC_Bool     Terminate=SQLDBC_TRUE);
01200 
01201 protected:
01202   friend class SQLDBC_ResultSet;
01203   friend struct SQLDBC_ResultSetStorage;
01204   SQLDBC_RowSet(IFR_ResultSet *resultset);
01205 };
01206 
01222 class SQLDBC_UpdatableRowSet
01223   : public SQLDBC_RowSet
01224 {
01225 public:
01226 
01234   SQLDBC_DLLEXPORT
01235   SQLDBC_Retcode insertAllRows();
01236 
01242   SQLDBC_DLLEXPORT
01243   SQLDBC_Retcode insertOneRow();
01244 
01251   SQLDBC_DLLEXPORT
01252   SQLDBC_Retcode insertRow(SQLDBC_UInt4 position);
01253 
01254 
01263   SQLDBC_DLLEXPORT
01264   SQLDBC_Retcode updateRow(SQLDBC_UInt4 position);
01265   SQLDBC_DLLEXPORT
01266   SQLDBC_Retcode updateRow(int position);
01267 
01275   SQLDBC_DLLEXPORT
01276   SQLDBC_Retcode deleteRow(SQLDBC_UInt4 position);
01277   SQLDBC_DLLEXPORT
01278   SQLDBC_Retcode deleteRow(int position);
01279 
01300   SQLDBC_DLLEXPORT
01301   SQLDBC_Retcode nextParameter(SQLDBC_Int2& paramIndex, void*& paramAddr);
01302 
01323    SQLDBC_DLLEXPORT
01324    SQLDBC_Retcode nextParameterByIndex(SQLDBC_Int2& paramIndex, void*& paramAddr);
01325 
01326 
01339   SQLDBC_DLLEXPORT
01340   SQLDBC_Retcode putData(void *paramAddr, SQLDBC_Length  *paramLengthIndicator);
01341 
01342 
01343 private:
01344   friend struct SQLDBC_ResultSetStorage;
01345   SQLDBC_UpdatableRowSet(IFR_ResultSet *resultset);
01346 };
01347 
01348 struct SQLDBC_ResultSetStorage;
01349 
01433 class SQLDBC_ResultSet
01434   : public SQLDBC_ConnectionItem
01435 {
01436 public:
01437 
01446   SQLDBC_DLLEXPORT
01447   SQLDBC_ResultSetMetaData* getResultSetMetaData();
01448 
01453   SQLDBC_DLLEXPORT
01454   const SQLDBC_Int4 getResultCount () const;
01455 
01495   SQLDBC_DLLEXPORT
01496   SQLDBC_Retcode bindColumn (const SQLDBC_UInt4    Index,
01497                              const SQLDBC_HostType Type,
01498                              void                 *paramAddr,
01499                              SQLDBC_Length        *LengthIndicator,
01500                              const SQLDBC_Length   Size,
01501                              const SQLDBC_Bool     Terminate=SQLDBC_TRUE);
01502 
01544   /* #methodmap SQLDBC_ResultSet_bindColumnByPos bindColumn */
01545   SQLDBC_DLLEXPORT
01546   SQLDBC_Retcode bindColumn (const SQLDBC_UInt4    Index,
01547                              const SQLDBC_HostType Type,
01548                              void                 *paramAddr,
01549                              SQLDBC_Length        *LengthIndicator,
01550                              SQLDBC_Length        *PositionIndicator,
01551                              const SQLDBC_Length   Size,
01552                              const SQLDBC_Bool     Terminate=SQLDBC_TRUE);
01553 
01554 
01572   SQLDBC_DLLEXPORT
01573   SQLDBC_Retcode setBindingType(SQLDBC_size_t size);
01574 
01581   SQLDBC_DLLEXPORT
01582   SQLDBC_Retcode clearColumns();
01583 
01595    SQLDBC_DLLEXPORT
01596    void setFetchSize(SQLDBC_Int2 fetchsize);
01597 
01603   SQLDBC_DLLEXPORT
01604   void setRowSetSize (SQLDBC_UInt4 rowsetsize);
01605 
01611   SQLDBC_DLLEXPORT
01612   const SQLDBC_UInt4 getRowSetSize () const;
01613 
01620   SQLDBC_DLLEXPORT
01621   SQLDBC_RowSet *getRowSet ();
01622 
01629   SQLDBC_DLLEXPORT
01630   SQLDBC_UpdatableRowSet *getUpdatableRowSet ();
01631 
01637   SQLDBC_DLLEXPORT
01638   SQLDBC_Statement *getStatement();
01639 
01644   SQLDBC_DLLEXPORT
01645   SQLDBC_Bool isUpdatable();
01646 
01657   SQLDBC_DLLEXPORT
01658   SQLDBC_Retcode first();
01659 
01675   SQLDBC_DLLEXPORT
01676   SQLDBC_Retcode next();
01677 
01687   SQLDBC_DLLEXPORT
01688   SQLDBC_Retcode previous();
01689 
01699   SQLDBC_DLLEXPORT
01700   SQLDBC_Retcode last();
01701 
01730   SQLDBC_DLLEXPORT
01731   SQLDBC_Retcode absolute (int row);
01732 
01754   SQLDBC_DLLEXPORT
01755   SQLDBC_Retcode relative(int relativePos);
01756 
01760   SQLDBC_DLLEXPORT
01761   void close();
01762 
01769   SQLDBC_DLLEXPORT
01770   const SQLDBC_UInt4 getRowNumber() const;
01771 
01823   SQLDBC_DLLEXPORT
01824   SQLDBC_Retcode getObject(const SQLDBC_Int4     Index,
01825                            const SQLDBC_HostType Type,
01826                            void                 *paramAddr,
01827                            SQLDBC_Length        *LengthIndicator,
01828                            const SQLDBC_Length   Size,
01829                            const SQLDBC_Bool     Terminate=SQLDBC_TRUE);
01830 
01831 
01886   /* #methodmap SQLDBC_ResultSet_getObjectByPos getObject */
01887   SQLDBC_DLLEXPORT
01888   SQLDBC_Retcode getObject(const SQLDBC_Int4     Index,
01889                            const SQLDBC_HostType Type,
01890                            void                 *paramAddr,
01891                            SQLDBC_Length        *LengthIndicator,
01892                            const SQLDBC_Length   Size,
01893                            SQLDBC_Length         StartPos,
01894                            const SQLDBC_Bool     Terminate=SQLDBC_TRUE);
01895 
01896 private:
01897   friend class SQLDBC_Statement;
01898   friend struct SQLDBC_StatementStorage;
01899 
01903   SQLDBC_ResultSet(SQLDBC_Statement* statement,
01904                    IFR_ResultSet *resultset);
01908   ~SQLDBC_ResultSet();
01909 
01910   SQLDBC_ResultSetStorage *m_cresult;
01911 };
01912 
01913 struct SQLDBC_StatementStorage;
01914 
01989 class SQLDBC_Statement
01990   : public SQLDBC_ConnectionItem
01991 {
01992 public:
02009   SQLDBC_DLLEXPORT
02010   SQLDBC_Retcode execute(const char *sql,
02011                          const SQLDBC_Length sqlLength,
02012                          const SQLDBC_StringEncoding encoding);
02013 
02029   /* #methodmap SQLDBC_Statement_executeNTS execute */
02030   SQLDBC_DLLEXPORT
02031   SQLDBC_Retcode execute(const char *sql,
02032                          const SQLDBC_StringEncoding encoding);
02033 
02046   /* #methodmap SQLDBC_Statement_executeASCII execute */
02047   SQLDBC_DLLEXPORT
02048   SQLDBC_Retcode execute(const char *sql);
02049 
02063   SQLDBC_DLLEXPORT
02064   void setResultSetFetchSize(SQLDBC_Int2 rows);
02065 
02078   SQLDBC_DLLEXPORT
02079   void setMaxRows(SQLDBC_UInt4 rows);
02080 
02089   SQLDBC_DLLEXPORT
02090   const SQLDBC_UInt4 getMaxRows() const;
02091 
02099   SQLDBC_DLLEXPORT
02100   SQLDBC_ResultSet *getResultSet();
02101 
02115   SQLDBC_DLLEXPORT
02116   void setCursorName(const char    *buffer,
02117                      SQLDBC_Length  bufferLength,
02118                      const SQLDBC_StringEncoding encoding);
02119 
02136   SQLDBC_DLLEXPORT
02137     SQLDBC_Retcode setCommandInfo(const char *buffer,
02138                                SQLDBC_Length bufferLength,
02139                                SQLDBC_Int4 lineNumber);
02162   SQLDBC_DLLEXPORT
02163   SQLDBC_Retcode getCursorName(char         *buffer,
02164                                const SQLDBC_StringEncoding encoding,
02165                                const SQLDBC_Length bufferSize,
02166                                SQLDBC_Length *bufferLength) const;
02167 
02186   SQLDBC_DLLEXPORT
02187   SQLDBC_Retcode getTableName(char          *buffer,
02188                               const SQLDBC_StringEncoding encoding,
02189                               const SQLDBC_Length  bufferSize,
02190                               SQLDBC_Length *bufferLength) const;
02191 
02205   SQLDBC_DLLEXPORT
02206   SQLDBC_Bool isQuery() const;
02207 
02217   SQLDBC_DLLEXPORT
02218   SQLDBC_Int4 getKernelVersion() const;
02219 
02220 
02230   SQLDBC_DLLEXPORT
02231   const SQLDBC_Int4 getRowsAffected() const;
02232 
02233   enum ResultSetType {
02234     FORWARD_ONLY = 1, 
02235     SCROLL_SENSITIVE = 2, 
02236     SCROLL_INSENSITIVE = 3 
02237   };
02238 
02258   SQLDBC_DLLEXPORT
02259   void setResultSetType (ResultSetType type );
02260 
02273   SQLDBC_DLLEXPORT
02274   const ResultSetType getResultSetType() const;
02275 
02276   enum ConcurrencyType {
02277     CONCUR_UPDATABLE = 10, 
02278     CONCUR_READ_ONLY = 11  
02279   };
02280 
02294   SQLDBC_DLLEXPORT
02295   void setResultSetConcurrencyType (ConcurrencyType type);
02296 
02297   enum HoldabilityType {
02298     CURSOR_HOLD_OVER_COMMIT = 20, 
02299     CURSOR_CLOSE_ON_COMMIT = 21   
02300   };
02301 
02311   SQLDBC_DLLEXPORT
02312   const ConcurrencyType getResultSetConcurrencyType() const;
02313 
02322     SQLDBC_DLLEXPORT
02323     const SQLDBC_Int4 *getRowStatus() const;
02324 
02330     SQLDBC_DLLEXPORT
02331     const SQLDBC_UInt4 getBatchSize() const;
02332 
02343     SQLDBC_DLLEXPORT
02344     const SQLDBC_Retcode addBatch(const char *sql,
02345                                   SQLDBC_Length sqlLength,
02346                                   SQLDBC_StringEncoding encoding);
02347 
02354     /* #methodmap SQLDBC_Statement_addBatchNTS addBatch */
02355     SQLDBC_DLLEXPORT
02356     const SQLDBC_Retcode addBatch(const char *sql,
02357                                   SQLDBC_StringEncoding encoding);
02358 
02365     /* #methodmap SQLDBC_Statement_addBatchASCII addBatch */
02366     SQLDBC_DLLEXPORT
02367     const SQLDBC_Retcode addBatch(const char *sql);
02368 
02375     SQLDBC_DLLEXPORT
02376     const SQLDBC_Retcode executeBatch();
02377 
02381     SQLDBC_DLLEXPORT
02382     void clearBatch();
02383 
02384 #ifdef SQLDBC_FEATURE_STATEMENT_GETCONNECTION
02385 
02389     SQLDBC_DLLEXPORT
02390     SQLDBC_Connection *getConnection();
02391 
02392 #endif
02393 
02407     SQLDBC_DLLEXPORT
02408    SQLDBC_Retcode getLastInsertedKey(SQLDBC_Int4      tag,
02409                                      SQLDBC_HostType type,
02410                                      void            *paramAddr,
02411                                      SQLDBC_Length   *lengthIndicator,
02412                                      SQLDBC_Length    size,
02413                                      SQLDBC_Bool      terminate=SQLDBC_TRUE);
02414 
02415 
02416 protected:
02420     void clearResultSet();
02421 
02422 
02423 private:
02424   friend struct SQLDBC_ConnectionItemStorageForConnection;
02425   friend class SQLDBC_Connection;
02426   friend class SQLDBC_PreparedStatement;
02427   friend class SQLDBC77_Extension;
02428   SQLDBC_Connection *_getConnection();
02434     SQLDBC_Statement(IFR_Statement *stmt);
02439     SQLDBC_Statement(IFR_PreparedStmt *stmt);
02440   ~SQLDBC_Statement();
02441   SQLDBC_StatementStorage *m_cstmt;
02442 };
02443 
02444 struct SQLDBC_PreparedStatementStorage;
02445 
02607 class SQLDBC_PreparedStatement
02608     : public SQLDBC_Statement
02609 {
02610 public:
02619   SQLDBC_DLLEXPORT
02620   SQLDBC_Retcode prepare(const char *sql,
02621                          const SQLDBC_Length sqlLength,
02622                          const SQLDBC_StringEncoding encoding);
02623 
02635     /* #methodmap SQLDBC_PreparedStatement_prepareNTS prepare */
02636   SQLDBC_DLLEXPORT
02637   SQLDBC_Retcode prepare(const char *sql,
02638                          const SQLDBC_StringEncoding encoding);
02639 
02648   /* #methodmap SQLDBC_PreparedStatement_prepareASCII prepare */
02649   SQLDBC_DLLEXPORT
02650   SQLDBC_Retcode prepare(const char *sql);
02651 
02664   /* #methodmap SQLDBC_PreparedStatement_executeASCII execute */
02665 SQLDBC_DLLEXPORT
02666   SQLDBC_Retcode execute();
02667 
02677   SQLDBC_DLLEXPORT
02678   SQLDBC_ParameterMetaData* getParameterMetaData();
02679 
02701   SQLDBC_DLLEXPORT
02702   SQLDBC_ResultSetMetaData* getResultSetMetaData();
02703 
02711   SQLDBC_DLLEXPORT
02712   SQLDBC_Retcode setBatchSize(SQLDBC_UInt4 rowarraysize);
02713 
02725   SQLDBC_DLLEXPORT
02726   SQLDBC_UInt4 getPreferredBatchSize();
02727 
02728 
02740   SQLDBC_DLLEXPORT
02741   SQLDBC_Retcode clearParameters();
02742 
02743 
02788   SQLDBC_DLLEXPORT
02789   SQLDBC_Retcode bindParameter (const SQLDBC_UInt2     Index,
02790                                 const SQLDBC_HostType  Type,
02791                                 void                  *paramAddr,
02792                                 SQLDBC_Length         *LengthIndicator,
02793                                 const SQLDBC_Length    Size,
02794                                 const SQLDBC_Bool      Terminate=SQLDBC_TRUE);
02795 
02843   SQLDBC_DLLEXPORT
02844   SQLDBC_Retcode bindParameterAddr(const SQLDBC_UInt2    Index,
02845                                    const SQLDBC_HostType Type,
02846                                    void                 *paramAddr,
02847                                    SQLDBC_Length        *LengthIndicator,
02848                                    const SQLDBC_Length   Size,
02849                                    const SQLDBC_Bool     Terminate=SQLDBC_TRUE);
02850 
02867   SQLDBC_DLLEXPORT
02868   SQLDBC_Retcode setBindingType(SQLDBC_size_t size);
02869 
02890   SQLDBC_DLLEXPORT
02891   SQLDBC_Retcode nextParameter(SQLDBC_Int2& paramIndex, void*& paramAddr);
02892 
02913    SQLDBC_DLLEXPORT
02914    SQLDBC_Retcode nextParameterByIndex(SQLDBC_Int2& paramIndex, void*& paramAddr);
02915 
02916 
02929   SQLDBC_DLLEXPORT
02930   SQLDBC_Retcode putData(void *paramAddr, SQLDBC_Length  *paramLengthIndicator);
02931 
02979   SQLDBC_DLLEXPORT
02980   SQLDBC_Retcode getObject(const SQLDBC_Int4     Index,
02981                            const SQLDBC_HostType Type,
02982                            void                 *paramAddr,
02983                            SQLDBC_Length        *LengthIndicator,
02984                            const SQLDBC_Length   Size,
02985                            const SQLDBC_Bool     Terminate=SQLDBC_TRUE);
02986 
02987 
03038    /* #methodmap SQLDBC_PreparedStatement_getObjectByPos getObject */
03039  SQLDBC_DLLEXPORT
03040   SQLDBC_Retcode getObject(const SQLDBC_Int4     Index,
03041                            const SQLDBC_HostType Type,
03042                            void                 *paramAddr,
03043                            SQLDBC_Length        *LengthIndicator,
03044                            const SQLDBC_Length   Size,
03045                            SQLDBC_Length         StartPos,
03046                            const SQLDBC_Bool     Terminate=SQLDBC_TRUE);
03047 
03048 
03049 private:
03050   friend class SQLDBC_Connection;
03051   friend struct SQLDBC_ConnectionItemStorageForConnection;
03060   SQLDBC_PreparedStatement(IFR_PreparedStmt *stmt);
03061   ~SQLDBC_PreparedStatement();
03062   SQLDBC_PreparedStatementStorage *m_pcstmt;
03063 };
03064 
03293 class SQLDBC_ConnectProperties
03294 {
03295 public:
03300   SQLDBC_DLLEXPORT
03301   SQLDBC_ConnectProperties();
03302 
03307   SQLDBC_DLLEXPORT
03308   SQLDBC_ConnectProperties(const SQLDBC_ConnectProperties& copy);
03309 
03316   SQLDBC_ConnectProperties(SAPDBMem_IRawAllocator& allocator);
03317 
03321   SQLDBC_DLLEXPORT
03322   ~SQLDBC_ConnectProperties();
03323 
03324 
03330   SQLDBC_DLLEXPORT
03331   void setProperty(const char *key, const char *value);
03332 
03339   SQLDBC_DLLEXPORT
03340   const char *getProperty(const char *key, const char *defaultvalue=0) const;
03341 
03342 private:
03343   friend class SQLDBC_Connection;
03344   friend class SQLDBC_Environment;
03345   IFR_ConnectProperties *m_prop;
03346 };
03347 
03348 
03359 class SQLDBC_Connection
03360   : public SQLDBC_ConnectionItem
03361 {
03362 public:
03386   SQLDBC_DLLEXPORT
03387   SQLDBC_Retcode connect(const char *connectURL,
03388                          SQLDBC_Length connectURLLength,
03389                          const char *connectCommand,
03390                          SQLDBC_Length connectCommandLength,
03391                          SQLDBC_StringEncoding connectCommandEncoding,
03392                          SQLDBC_ConnectProperties& connectProperties);
03393 
03415   SQLDBC_DLLEXPORT
03416   SQLDBC_Retcode connect(const char *servernode,
03417                          SQLDBC_Length servernodeLength,
03418                          const char *serverdb,
03419                          SQLDBC_Length serverdbLength,
03420                          const char *username,
03421                          SQLDBC_Length usernameLength,
03422                          const char *password,
03423                          SQLDBC_Length passwordLength,
03424                          const SQLDBC_StringEncoding userpwdEncoding);
03425 
03446   SQLDBC_DLLEXPORT
03447   SQLDBC_Retcode connect(const char *servernode,
03448                          const char *serverdb,
03449                          const char *username,
03450                          const char *password,
03451                          const SQLDBC_StringEncoding userpwdEncoding);
03452 
03467   SQLDBC_DLLEXPORT
03468   SQLDBC_Retcode connect(const char *servernode,
03469                          const char *serverdb,
03470                          const char *username,
03471                          const char *password);
03472 
03504   SQLDBC_DLLEXPORT
03505   SQLDBC_Retcode connect(const char* servernode,
03506                          SQLDBC_Length servernodeLength,
03507                          const char* serverdb,
03508                          SQLDBC_Length serverdbLength,
03509                          const char* username,
03510                          SQLDBC_Length usernameLength,
03511                          const char* password,
03512                          SQLDBC_Length passwordLength,
03513                          const SQLDBC_StringEncoding userpwdEncoding,
03514                          const SQLDBC_ConnectProperties& properties);
03515 
03537    /* #methodmap SQLDBC_Connection_connectNTS connect */
03538   SQLDBC_DLLEXPORT
03539   SQLDBC_Retcode connect(const char* servernode,
03540                          const char* serverdb,
03541                          const char* username,
03542                          const char* password,
03543                          const SQLDBC_StringEncoding userpwdEncoding,
03544                          const SQLDBC_ConnectProperties& properties);
03545 
03561   /* #methodmap SQLDBC_Connection_connectASCII connect */
03562   SQLDBC_DLLEXPORT
03563   SQLDBC_Retcode connect(const char* servernode,
03564                          const char* serverdb,
03565                          const char* username,
03566                          const char* password,
03567                          const SQLDBC_ConnectProperties& properties);
03568 
03569 
03581   SQLDBC_DLLEXPORT
03582   SQLDBC_Retcode connect();
03583 
03596   /* #methodmap SQLDBC_Connection_connectPROP connect */
03597   SQLDBC_DLLEXPORT
03598   SQLDBC_Retcode connect(const SQLDBC_ConnectProperties& properties);
03599 
03600 
03601 #ifdef SQLDBC_FEATURE_CONNECTION_FEATURES
03602 
03615   /* #methodmap SQLDBC_Connection_connectPROP connect   *
03616    */
03617   SQLDBC_DLLEXPORT
03618   SQLDBC_Retcode getConnectionFeatures(SQLDBC_ConnectProperties& properties);
03619 #endif
03620 
03633   SQLDBC_DLLEXPORT
03634   SQLDBC_Statement *createStatement();
03635 
03644   SQLDBC_DLLEXPORT
03645   SQLDBC_PreparedStatement *createPreparedStatement();
03646 
03656   SQLDBC_DLLEXPORT
03657   SQLDBC_Retcode commit();
03658 
03663   SQLDBC_DLLEXPORT
03664   SQLDBC_Retcode rollback();
03665 
03670   SQLDBC_DLLEXPORT
03671   void releaseStatement(SQLDBC_Statement *stmt);
03672 
03677   /* #methodmap SQLDBC_Connection_releasePreparedStatement releaseStatement */
03678   SQLDBC_DLLEXPORT
03679   void releaseStatement(SQLDBC_PreparedStatement *stmt);
03680 
03695   SQLDBC_DLLEXPORT
03696   SQLDBC_Retcode cancel();
03697 
03711   SQLDBC_DLLEXPORT
03712   SQLDBC_Retcode close();
03713 
03714 
03728   SQLDBC_DLLEXPORT
03729   SQLDBC_Retcode commitWorkRelease();
03730 
03731 
03747   SQLDBC_DLLEXPORT
03748   SQLDBC_Retcode disconnect();
03749 
03750 
03756   SQLDBC_DLLEXPORT
03757   void setAutoCommit(SQLDBC_Bool autocommit);
03758 
03765   SQLDBC_DLLEXPORT
03766   SQLDBC_Bool getAutoCommit() const;
03767 
03777   SQLDBC_DLLEXPORT
03778   void setSQLMode(SQLDBC_SQLMode sqlmode);
03779 
03790   SQLDBC_DLLEXPORT
03791   SQLDBC_Retcode setTransactionIsolation(SQLDBC_Int4 isolationlevel);
03792 
03799   SQLDBC_DLLEXPORT
03800   SQLDBC_Int4 getTransactionIsolation() const;
03801 
03809   SQLDBC_DLLEXPORT
03810   SQLDBC_Bool isConnected() const;
03811 
03824   SQLDBC_DLLEXPORT
03825   SQLDBC_Int4 getKernelVersion() const;
03826 
03832   SQLDBC_DLLEXPORT
03833   SQLDBC_Bool isUnicodeDatabase() const;
03834 
03839   SQLDBC_DLLEXPORT
03840   SQLDBC_DateTimeFormat::Format getDateTimeFormat() const;
03841 
03842 private:
03843   friend class SQLDBC_Environment;
03844   friend class SQLDBC77_Extension;
03845   SQLDBC_Retcode _getConnectionFeatures(SQLDBC_ConnectProperties& properties);
03852   SQLDBC_Connection(IFR_Connection *conn);
03853 };
03854 
03855 
03856 #ifdef SQLDBC_FEATURE_PROFILE
03857 
03874 class SQLDBC_Profile
03875 {
03876 public:
03877 
03881     SQLDBC_DLLEXPORT
03882   void resetCounters();
03883 
03887     SQLDBC_DLLEXPORT
03888     void collectCounters();
03889 
03896     SQLDBC_DLLEXPORT
03897     SQLDBC_UInt8 getCounter(SQLDBC_ProfileCountValues counter);
03898 
03899 private:
03900   friend class SQLDBC_Environment;
03901   friend struct SQLDBC_EnvironmentItemStorage;
03902   SQLDBC_Profile(IFR_Profile *profile);
03903   IFR_Profile *m_profile;
03904 };
03905 #endif
03906 
03907 struct SQLDBC_EnvironmentItemStorage;
03908 
03913 class SQLDBC_Environment
03914 {
03915 public:
03923   SQLDBC_DLLEXPORT
03924   SQLDBC_Environment(SQLDBC_IRuntime* runtime);
03925 
03929   SQLDBC_DLLEXPORT
03930   ~SQLDBC_Environment();
03931 
03937   SQLDBC_DLLEXPORT
03938   SQLDBC_Connection *createConnection() const;
03939 
03945   SQLDBC_DLLEXPORT
03946   SQLDBC_Connection *createConnection(SAPDBMem_IRawAllocator& allocator) const;
03947 
03953   SQLDBC_DLLEXPORT
03954   void releaseConnection(SQLDBC_Connection *connection) const;
03955 
03969   SQLDBC_DLLEXPORT
03970   const char *getLibraryVersion();
03971 
03981   SQLDBC_DLLEXPORT
03982   inline const char *getSDKVersion()
03983   const
03984   {
03985     return SQLDBCHeaderVersion;
03986   };
03987 
03991     SQLDBC_DLLEXPORT SAPDBMem_IRawAllocator&  getAllocator();
03992 
03993 #ifdef SQLDBC_FEATURE_TRACEOPTION
03994 
04063     SQLDBC_DLLEXPORT
04064     void setTraceOptions(const SQLDBC_ConnectProperties& traceoptions);
04065 
04072     SQLDBC_DLLEXPORT
04073     void getTraceOptions(SQLDBC_ConnectProperties& traceoptions);
04074 #endif
04075 
04076 #ifdef SQLDBC_FEATURE_PROFILE
04077 
04082     SQLDBC_DLLEXPORT
04083   SQLDBC_Profile* getProfile();
04084 
04085 #endif
04086 private:
04087     SQLDBC_EnvironmentItemStorage *m_eitem;
04088 };
04089 
04099 SQLDBC_DLLEXPORT SQLDBC_IRuntime* GetClientRuntime(char *errorText, const SQLDBC_Int4 errorTextSize);
04100 
04110 SQLDBC_DLLEXPORT SQLDBC_IRuntime* GetSingleThreadClientRuntime(char *errorText, const SQLDBC_Int4 errorTextSize);
04111 } /* namespace SQLDBC */
04112 
04113 
04114 #endif