/* Result Sets Interface */
#ifndef SQL_CRSR
#  define SQL_CRSR
  struct sql_cursor
  {
    unsigned int curocn;
    void *ptr1;
    void *ptr2;
    unsigned int magic;
  };
  typedef struct sql_cursor sql_cursor;
  typedef struct sql_cursor SQL_CURSOR;
#endif /* SQL_CRSR */

/* Thread Safety */
typedef void * sql_context;
typedef void * SQL_CONTEXT;

/* Object support */
struct sqltvn
{
  unsigned char *tvnvsn; 
  unsigned short tvnvsnl; 
  unsigned char *tvnnm;
  unsigned short tvnnml; 
  unsigned char *tvnsnm;
  unsigned short tvnsnml;
};
typedef struct sqltvn sqltvn;

struct sqladts
{
  unsigned int adtvsn; 
  unsigned short adtmode; 
  unsigned short adtnum;  
  sqltvn adttvn[1];       
};
typedef struct sqladts sqladts;

static struct sqladts sqladt = {
  1,1,0,
};

/* Binding to PL/SQL Records */
struct sqltdss
{
  unsigned int tdsvsn; 
  unsigned short tdsnum; 
  unsigned char *tdsval[1]; 
};
typedef struct sqltdss sqltdss;
static struct sqltdss sqltds =
{
  1,
  0,
};

/* File name & Package Name */
struct sqlcxp
{
  unsigned short fillen;
           char  filnam[15];
};
static const struct sqlcxp sqlfpn =
{
    14,
    "hdbfileutil.pc"
};


static unsigned int sqlctx = 1151179;


static struct sqlexd {
   unsigned int   sqlvsn;
   unsigned int   arrsiz;
   unsigned int   iters;
   unsigned int   offset;
   unsigned short selerr;
   unsigned short sqlety;
   unsigned int   occurs;
      const short *cud;
   unsigned char  *sqlest;
      const char  *stmt;
   sqladts *sqladtp;
   sqltdss *sqltdsp;
            void  **sqphsv;
   unsigned int   *sqphsl;
            int   *sqphss;
            void  **sqpind;
            int   *sqpins;
   unsigned int   *sqparm;
   unsigned int   **sqparc;
   unsigned short  *sqpadto;
   unsigned short  *sqptdso;
   unsigned int   sqlcmax;
   unsigned int   sqlcmin;
   unsigned int   sqlcincr;
   unsigned int   sqlctimeout;
   unsigned int   sqlcnowait;
              int   sqfoff;
   unsigned int   sqcmod;
   unsigned int   sqfmod;
            void  *sqhstv[1];
   unsigned int   sqhstl[1];
            int   sqhsts[1];
            void  *sqindv[1];
            int   sqinds[1];
   unsigned int   sqharm[1];
   unsigned int   *sqharc[1];
   unsigned short  sqadto[1];
   unsigned short  sqtdso[1];
} sqlstm = {12,1};

// Prototypes
extern "C" {
  void sqlcxt (void **, unsigned int *,
               struct sqlexd *, const struct sqlcxp *);
  void sqlcx2t(void **, unsigned int *,
               struct sqlexd *, const struct sqlcxp *);
  void sqlbuft(void **, char *);
  void sqlgs2t(void **, char *);
  void sqlorat(void **, unsigned int *, void *);
}

// Forms Interface
static const int IAPSUCC = 0;
static const int IAPFAIL = 1403;
static const int IAPFTL  = 535;
extern "C" { void sqliem(char *, int *); }

typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR;
typedef struct { unsigned short len; unsigned char arr[1]; } varchar;

/* cud (compilation unit data) array */
static const short sqlcud0[] =
{12,4130,1,0,0,
5,0,0,1,0,0,29,32,0,0,0,0,0,1,0,
20,0,0,2,0,0,31,42,0,0,0,0,0,1,0,
35,0,0,3,0,0,24,76,0,0,1,1,0,1,0,1,97,0,0,
};


//*-- AUTHOR : Ilse Koenig
//*-- Modified : 14/09/2000

//_HADES_CLASS_DESCRIPTION 
/////////////////////////////////////////////////////////////
//
// HDbFileUtil
//
// Class for FileI/O to/from Oracle tables
//
/////////////////////////////////////////////////////////////
using namespace std;
#include "hdbfileutil.h"
#include "hdbconn.h"
#include <iostream>
#include <iomanip>

#define SQLCA_STORAGE_CLASS extern
#define ORACA_STORAGE_CLASS extern
 
// Oracle communication area
#include <oraca.h>
// SQL Communications Area
#include <sqlca.h>
 
ClassImp(HDbFileUtil)

void HDbFileUtil::commit(void) {
  // commits all changes
  if (!dbConn->isOpen()) return;
  /* EXEC SQL WHENEVER SQLERROR DO showSqlError("HDbConn::commit"); */ 

  /* EXEC SQL COMMIT WORK; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 0;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )5;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) showSqlError("HDbConn::commit");
}


  cout<<"*************************************************************"<<endl;
  cout<<"******************  Transaction committed  ******************"<<endl;
  cout<<"*************************************************************"<<endl;
}

void HDbFileUtil::rollback(void) {
  // discards all changes since last commit
  if (!dbConn->isOpen()) return;
  /* EXEC SQL WHENEVER SQLERROR DO showSqlError("HDbConn::rollback"); */ 

  /* EXEC SQL ROLLBACK WORK; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 0;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )20;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) showSqlError("HDbConn::rollback");
}


  cout<<"*************************************************************"<<endl;
  cout<<"*****************  Transaction rolled back  *****************"<<endl;
  cout<<"*************************************************************"<<endl;
  return;
}

void HDbFileUtil::showSqlError(const Char_t* f) {
  // shows SQL error messages
  cout<<"*************************************************************"<<endl;
  Error(f,"\n%s",sqlca.sqlerrm.sqlerrmc);
  cout<<"*************************************************************"<<endl;
}

void HDbFileUtil::showDynSqlError(const Char_t* f) {
  sqlca.sqlerrm.sqlerrmc[sqlca.sqlerrm.sqlerrml]='\0';
  oraca.orastxt.orastxtc[oraca.orastxt.orastxtl]='\0';
  oraca.orasfnm.orasfnmc[oraca.orasfnm.orasfnml]='\0';
  cout<<"**************************************************************"<<endl;
  Error(f,"\n%s\n  in %s...\n  on line %d of %s \n\n",sqlca.sqlerrm.sqlerrmc,
        oraca.orastxt.orastxtc,oraca.oraslnr,oraca.orasfnm.orasfnmc);
  cout<<"**************************************************************"<<endl;
}

Bool_t HDbFileUtil::executeDirect(TString& stm) {
  if (stm.Length()==0) {
    Error("HDbFileUtil::executeDirect","Empty statement string");
    return kFALSE;
  }
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* dynstmt;
  /* EXEC SQL END DECLARE SECTION; */ 

  /* EXEC SQL WHENEVER SQLERROR GOTO errorFound; */ 

  dynstmt=(Char_t*)stm.Data();
  /* EXEC SQL EXECUTE IMMEDIATE :dynstmt; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 1;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )35;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (         void  *)dynstmt;
  sqlstm.sqhstl[0] = (unsigned int  )0;
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         void  *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned int  )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) goto errorFound;
}


  return kTRUE;
errorFound:
  showSqlError("HDbFileUtil::executeDirect");
  cout<<"SQL statement: "<<endl<<stm<<endl;
  return kFALSE;
}

Int_t HDbFileUtil::getTokString(TString& s1, TString& s2, const Char_t* delim) {
  Int_t n=s1.First(delim);
  if (n>0) {
    s2=s1(0,n);
    s2=s2.Strip(s2.kBoth);
    n+=strlen(delim);
    s1=s1(n,s1.Length()-n);
    s1=s1.Strip(s1.kLeading);
    return s1.Length();
  }
  if (n==0) {
    s2="";
    s1.Remove(0,strlen(delim)); // remove delimiter
    s1=s1.Strip(s1.kLeading);
    return s1.Length();
  }
  s2=s1.Strip(s1.kLeading);
  s1="";
  return 0;
}

Bool_t HDbFileUtil::confirm(const Char_t * action) {
  Char_t buf[80];
  cout<<"Confirm "<<action<<" ('y' or 'n') > "<<endl;
  cin>>buf;
  if (buf[0]=='y' || buf[0]=='Y') return kTRUE;
  else return kFALSE;
}


Last change: Sat May 22 12:54:30 2010
Last generated: 2010-05-22 12:54

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.