home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / vgserv45.zip / BASE / HPTWGS2 / include / fcwmsqr.h < prev    next >
Text File  |  2001-03-21  |  14KB  |  356 lines

  1. /*****************************************************************************/
  2. /*                                                                           */
  3. /*                           OCO SOURCE MATERIALS                            */
  4. /*                             IBM CONFIDENTIAL                              */
  5. /*                                    OR                                     */
  6. /*                        IBM CONFIDENTIAL RESTRICTED                        */
  7. /*            WHEN COMBINED WITH THE AGGREGATED OCO SOURCE MODULES           */
  8. /*                           FOR THIS PROGRAM PRODUCT                        */
  9. /*                                                                           */
  10. /*      VisualAge Generator Server for OS/2, AIX, HP-UX, and Windows NT      */
  11. /*                          Version 3.1  5697-C28                            */
  12. /*                    (C) COPYRIGHT IBM CORP. 1994,1998                      */
  13. /*                                                                           */
  14. /*****************************************************************************/
  15. /* ************************************************************************* */
  16. /*    Date      Userid          Description of problem                       */
  17. /*                                                                           */
  18. /*  11/10/98    dewittsc        PQ20911 - Handle VARCHARs correctly          */
  19. /*  07/18/00    dewittsc        PQ38022 - Handle LIKE predicate correctly    */
  20. /*                                                                           */
  21. /* ************************************************************************* */
  22.  
  23. #ifndef  FCWMSQR_H
  24. #define  FCWMSQR_H
  25.  
  26. #include <fcwcsql.h>
  27. #include <fcwmsgno.h>
  28.  
  29. class Item;
  30.  
  31. // --------------------------------------------------------------------
  32. //         SQL Host variable parameter entry ( equivalent to SQLDA )
  33. // --------------------------------------------------------------------
  34. struct HVENTRY {
  35.      short    Type;
  36.      short    Precision;
  37.      short    Scale;
  38.      unsigned char *pData;
  39.      short    *pNullInd;                          // nid in data item
  40.      void     *pObj;
  41.      Bool     SQLVarChar;
  42.      short    *pNullSrc;                          // nid in generated src
  43. };
  44.  
  45. class HVLIST {
  46.    public:
  47.      HVLIST( short n );
  48.      ~HVLIST();
  49.      void StoreDA( short, Item&, short, short, short, unsigned char*, short *, Bool );
  50.      void SetHostVar( short, AHVPTR, AHVPTR );
  51.      unsigned char* GetEntryData( short idx );
  52.      void FixupBindCols();
  53.  
  54.    private:
  55.      short     MaxNumHv;
  56.      short     NumInUse;
  57.      HVENTRY   *pEntry;
  58. };
  59.  
  60. // --------------------------------------------------------------------
  61. //         FCW level of SQL statement handle
  62. // --------------------------------------------------------------------
  63. class SQLStmt {
  64.  
  65.   public:
  66.     SQLStmt( short, short, short, short, short );
  67.     ~SQLStmt();
  68.     Bool CursorIsOpen();
  69.     Bool ParmWasSet();
  70.     Bool ColWasBind();
  71.     Bool IsDynamic();
  72.     void SetParmStatus();
  73.     void SetBindColStatus();
  74.     void SetParm( short, Item&, Bool, Bool, Bool );          // PQ20911,PQ38022
  75.     void BindCol( short, Item&, Bool );
  76.     void SetHostVar( short, AHVPTR, AHVPTR );
  77.     void BindHostVar( short, AHVPTR, AHVPTR );
  78.     void ResetCursor();
  79.     short StmtID();
  80.     void FixupBindCols();
  81.     Bool GetCursorDef();
  82.     double New_atof( char* );                                // PN91982
  83.  
  84.   private:
  85.     short           Id1;                   // primary statement id
  86.     short           Id2;                   // secondary statement id
  87.     short           Option;                // statement exec option
  88.     short           Operation;             // Process Option
  89.     Bool            StatusSetParm;         // Status for SetParm
  90.     Bool            StatusBindCol;         // status for BindCol
  91.     Bool            NeedPrep;              // statement needs PREPARE flag
  92.     Bool            CursorStatus;          // indicator for cursor use
  93.     HVLIST          *pIHvLst;              // For SetParm
  94.     HVLIST          *pOHvLst;              // For BindCol on SELECT statement
  95.     void            *pImpData;             // implementation data
  96. };
  97.  
  98. // --------------------------------------------------------------------
  99. //                     SQL row interface
  100. // Usage: an APP object contains one or more SQLROWs which are based
  101. //        on MSQLRecord
  102. // --------------------------------------------------------------------
  103.  
  104. class MSQLRecord : public Record
  105. {
  106.   public:
  107.            MSQLRecord( char*, long l );
  108.           ~MSQLRecord();
  109.  
  110.      void Setup( void* = 0 );
  111.      int  BeginAdd( short stmtID, short opt, short ida, short oda );
  112.      int  EndAdd( void * );
  113.      int  BeginInq( short stmtID, short opt, short ida, short oda );
  114.      int  EndInq( void * );
  115.      int  BeginUpd( short stmtID, short opt, short ida, short oda );
  116.      int  EndUpd( void * );
  117.      int  BeginRep( short stmtID, short opt, short ida, short oda );
  118.      int  EndRep( void * );
  119.      int  BeginDel( short stmtID, short opt, short ida, short oda );
  120.      int  EndDel( void * );
  121.      int  BeginSetInq( short stmtID, short opt, short ida, short oda );
  122.      int  EndSetInq( void * );
  123.      int  BeginScan( short stmtID, short opt, short ida, short oda );
  124.      int  EndScan( void* );
  125.      int  BeginSetUpd( short stmtID, short opt, short ida, short oda );
  126.      int  EndSetUpd( void* );
  127.      int  BeginSQLExec( short stmtID, short opt, short ida, short oda );
  128.      int  EndSQLExec( void* );
  129.  
  130.      int  BeginCloseCursor();
  131.      int  EndCloseCursor( void * );
  132.  
  133.      int  BeginPrcOpt( short stmtID, short opr, short opt, short ida, short oda );
  134.      int  EndPrcOpt( short,  void *, int );
  135.  
  136.      int  Close( short opt = 0 );
  137.      virtual void CloseCursor() {};
  138.  
  139.      int  StmtInit( short StmtID, short Opr, short Opt, short ida, short oda );
  140.      void StmtFree();
  141.  
  142.      int  SetParm( unsigned short ParmNum,     // setup hostvars for WHERE
  143.                    AHVPTR pHv, AHVPTR pNid,
  144.                    Item&  Dte,
  145.                    short  SQLType );
  146.  
  147.      int  SetParm( unsigned short ParmNum,     // PQ38022
  148.                    AHVPTR pHv, AHVPTR pNid,    // setup hostvars for WHERE
  149.                    Item&  Dte,                 // include hostvar context info
  150.                    short  SQLType,
  151.                    Bool   SQLVarInLike );
  152.  
  153.  
  154.      int  BindCol( unsigned short ParmNum,
  155.                    AHVPTR pHv, AHVPTR pNid,
  156.                    Item& Dte, short SQLType );
  157.  
  158.      void CheckDBIOError( void* pCA, int msgno );
  159.  
  160.      void CheckAssociation( short id, char* procName );
  161.  
  162.      short GetCursorID();
  163.      void  SetCursorID( short );
  164.      void  EndAppOnInvalidCursorID();
  165.      SQLStmt* FindStmtWithCursorID( short id );
  166.  
  167.      int  Err() { return IOStatus; };                          /*D8295*/
  168.      int  Hrd() { return IOStatus & rcHRD; };
  169.      int  Nrf() { return IOStatus & rcNRF; };
  170.      int  Dup() { return IOStatus & rcDUP; };
  171.      int  Ded() { return IOStatus & rcDED; };
  172.      int  Unq() { return IOStatus & rcUNQ; };
  173.  
  174.      int  Lok() { return 0; };               // followings not supported by SQL:
  175.      int  Eof() { return 0; };               //     always return False!!!
  176.      int  Ful() { return 0; };
  177.      int  Fmt() { return 0; };
  178.      int  Fnf() { return 0; };
  179.      int  Fna() { return 0; };
  180.  
  181.      void SetupRpc();
  182.  
  183.      void CloseOnCommit();                    // reset cursor on LUW
  184.      void CloseOnRollback();
  185.      char*  Name() { return recName;} ;       // return name of SQL row  @0001
  186.  
  187.      int  ErrorDueToOpenCursor( int );        // retry if cursor already open
  188.                                               //                      <DUOW>
  189.    private:
  190.      FCWString       recName;                 // name of SQL row         @0001
  191.      unsigned short  IOStatus;                // rc for last operation
  192.      short           LastOpr;                 // last record operation
  193.      void*           pSQLCA;                  // ptr to SQLCA
  194.  
  195.      CmnSQLItf       *pSQLDrv;                // ptr to SQL driver object
  196.  
  197.      short           IdxCursor;               // index for current cursor
  198.      Bool            CursorWithHold;          // whether cursor is WITH HOLD
  199.      SQLStmt*        CurrStmt;                // current FCW statement handle
  200.      SQLStmt*        LastStmtSet;             // last FCW statement set
  201.      LIST (SQLStmt*) LStmts;                  // list of SQL statement handles
  202.  
  203.      void*           pImpData;                // internal implementation
  204.      Bool SQLTypeIsActualVarLenChar( short ); // PQ20911
  205. };
  206.  
  207. // --------------------------------------------------------------------
  208. //   inlines for MSQLRecord
  209. // --------------------------------------------------------------------
  210.  
  211. inline
  212. int MSQLRecord :: BeginAdd( short id, short opt, short ida, short oda )
  213. {
  214.     return( BeginPrcOpt( id, ADD_OPR, opt, ida, oda ) );
  215. };
  216.  
  217. inline
  218. int MSQLRecord :: EndAdd( void *pCA )
  219. {
  220.     return( EndPrcOpt( ADD_OPR, pCA, ERRMSG_SQL_IO ) );
  221. };
  222.  
  223. inline
  224. int MSQLRecord :: BeginSQLExec( short id, short opt, short ida, short oda )
  225. {
  226.     return( BeginPrcOpt( id, SQLEXEC_OPR, opt, ida, oda ) );
  227. };
  228.  
  229. inline
  230. int MSQLRecord :: EndSQLExec( void *pCA )
  231. {
  232.     return( EndPrcOpt( SQLEXEC_OPR, pCA, ERRMSG_SQL_IO ) );
  233. };
  234.  
  235. inline
  236. int MSQLRecord :: BeginInq( short id, short opt, short ida, short oda )
  237. {
  238.     return( BeginPrcOpt( id, INQUIRY_OPR, opt, ida, oda ) );
  239. };
  240.  
  241. inline
  242. int MSQLRecord :: BeginSetInq( short id, short opt, short ida, short oda )
  243. {
  244.     return( BeginPrcOpt( id, SETINQ_OPR, opt, ida, oda ) );
  245. };
  246.  
  247. inline
  248. int MSQLRecord :: BeginSetUpd( short id, short opt, short ida, short oda )
  249. {
  250.     return( BeginPrcOpt( id, SETUPD_OPR, opt, ida, oda ) );
  251. };
  252.  
  253. inline
  254. int MSQLRecord :: BeginUpd( short id, short opt, short ida, short oda )
  255. {
  256.     return( BeginPrcOpt( id, UPDATE_OPR, opt, ida, oda ) );
  257. };
  258.  
  259. // -------------------------------------------------------------------
  260. //  Function:  Dummy SQL row for SQLEXEC process option without
  261. //             a process object
  262. // -------------------------------------------------------------------
  263. struct rcdEZESQR : public MSQLRecord
  264. {
  265.    rcdEZESQR() : MSQLRecord( "EZESQR_", 0 ) {};
  266. };
  267.  
  268. struct STROpenCursor {                    // structure for open cursor  @0001
  269.    FCWString     appName;
  270.    FCWString     recName;
  271.    short         iCursor;
  272.    Bool          cursorType;
  273. };
  274.  
  275.  
  276. // --------------------------------------------------------------------
  277. //               Database object interface
  278. // Usage  :  RU contains a DBMOBJ
  279. // --------------------------------------------------------------------
  280. class MDBOBJ : public FCWDBOBJ                                 // ODBC
  281. {
  282.   public:
  283.                 MDBOBJ( InitValue );
  284.                ~MDBOBJ();
  285.     int         StartDBM();                  // start DBM
  286.     int         DftDBConnect( void* pCA );   // connect to database
  287.     int         EZEConnect( char* id, char* psw, char* dbname, char* product,
  288.                             char* release, char* uow, void* pCA );  /* DUOW*/
  289.     int         Commit( int option );
  290.     int         RollBack( int option );
  291.     int         Close( char opt );           // close cursors for SQL rows
  292.     void*       Register( void *p );         // associated row to DB object
  293.     int         DeRegister( void *p );       // release row from DB object
  294.     int         Bind( char* dbname, void* pCA );
  295.  
  296.     FCWString   GetProduct( void* pCA );
  297.     FCWString   GetRelease( void* pCA );
  298.  
  299.     CmnSQLItf* GetDrv();
  300.                                                                     // @0001
  301.     void SaveOpenCursor( char* App, char* Rec, short CursorID, Bool bWithHold );
  302.     void GetOpenCursor( char* App, char* Rec, short& cursor, Bool& bWithHold );
  303.  
  304.     void SetIO( Bool f );                       // Set I/O flag
  305.     Bool IOPending();                           // Return I/O flag
  306.  
  307.     int  SwitchSFDB ( SFDBValue newDB );        // Switch database   @PQ01395
  308.  
  309.     InitValue  DbmType();                       // DB2 or ODBC    <ODBC>
  310.  
  311.     Bool FileSystemIsManagedByDB2();            // PQ01395
  312.     void SetDBNameForNextSQLIO( char* n );
  313.  
  314.     Bool DriverExists();                        // PQ19733
  315.  
  316.   private:
  317.     CmnSQLItf *pSQLDrv;                         // ptr to SQL driver object
  318.     FCWString  DBName;                          // database name
  319.     FCWString  DBDrvName;                       // database driver name
  320.     LIST  (MSQLRecord*) LSQLRows;               // List of SQL row objects
  321.  
  322.     LIST  (STROpenCursor *) LOpenCursors;       // List of Open cursors  @0001
  323.  
  324.     Bool  ioFlag;                               // Database I/O indicator
  325.  
  326.                                                 //       PQ01395
  327.     short       dbVersion;                      // Database version, 1, 2 ...
  328.     FCWString   sqlDBName;                      // Database for SQL I/O
  329.     FCWString   fileDBName;                     // Database for File I/O
  330.     Bool        sfDBstate;                      // True if (fileDBName + sqlDBName) defined  flag
  331.                                                 // False,  otherwise.
  332.     InitValue   dbType;                         // DB2 or Oracle?
  333.  
  334.     void  *pImpData;                            // Internal data
  335. };
  336.  
  337.  
  338. // ----------------------------------------------------------------------
  339. //    Structure for SQL variable length character columns
  340. // ----------------------------------------------------------------------
  341. struct VARITM {
  342.    short         len;
  343.    unsigned char data[1];
  344. };
  345.  
  346. //typedef struct VARITM VARCHAR;
  347.  
  348. struct WARITM {
  349.    short         len;
  350.    wchar_t       data[1];
  351. };
  352.  
  353. //typedef struct WARITM WARCHAR;
  354.  
  355. #endif
  356.