ROOT logo
// @(#)root/oracle:$Id: TOracleStatement.h 27990 2009-03-30 14:33:07Z brun $
// Author: Sergey Linev   6/02/2006

/*************************************************************************
 * Copyright (C) 1995-2006, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TOracleStatement
#define ROOT_TOracleStatement

#ifndef ROOT_TSQLStatement
#include "TSQLStatement.h"
#endif

#if !defined(__CINT__)
#include <occi.h>
using namespace oracle::occi;
#ifdef CONST
#undef CONST
#endif
#else
class Environment;
class Connection;
class Statement;
class ResultSet;
class MetaData;
#endif

class TOracleStatement : public TSQLStatement {

protected:

   struct TBufferRec {
      char* strbuf;
      Long_t strbufsize;
      char* namebuf;
   };

   Environment           *fEnv;         // enviroment 
   Connection            *fConn;        // connection to Oracle
   Statement             *fStmt;        // executed statement
   ResultSet             *fResult;      // query result (rows)
   std::vector<MetaData> *fFieldInfo;   // info for each field in the row
   TBufferRec            *fBuffer;       // buffer of values and field names
   Int_t                  fBufferSize;   // size of fBuffer
   Int_t                  fNumIterations;  // size of internal statement buffer
   Int_t                  fIterCounter; //counts nextiteration calls and process iterations, if required
   Int_t                  fWorkingMode; // 1 - settingpars, 2 - getting results
   TString                fTimeFmt;     // format for date to string conversion, default "MM/DD/YYYY, HH24:MI:SS" 

   Bool_t      IsParSettMode() const { return fWorkingMode==1; }
   Bool_t      IsResultSet() const { return (fWorkingMode==2) && (fResult!=0); }

   void        SetBufferSize(Int_t size);
   void        CloseBuffer();
   
public:
   TOracleStatement(Environment* env, Connection* conn, Statement* stmt, Int_t niter, Bool_t errout = kTRUE);
   virtual ~TOracleStatement();

   virtual void        Close(Option_t * = "");

   virtual Int_t       GetBufferLength() const { return fNumIterations; }
   virtual Int_t       GetNumParameters();

   virtual Bool_t      SetNull(Int_t npar);
   virtual Bool_t      SetInt(Int_t npar, Int_t value);
   virtual Bool_t      SetUInt(Int_t npar, UInt_t value);
   virtual Bool_t      SetLong(Int_t npar, Long_t value);
   virtual Bool_t      SetLong64(Int_t npar, Long64_t value);
   virtual Bool_t      SetULong64(Int_t npar, ULong64_t value);
   virtual Bool_t      SetDouble(Int_t npar, Double_t value);
   virtual Bool_t      SetString(Int_t npar, const char* value, Int_t maxsize = 256);
   virtual Bool_t      SetBinary(Int_t npar, void* mem, Long_t size, Long_t maxsize = 0x1000);
   virtual Bool_t      SetDate(Int_t npar, Int_t year, Int_t month, Int_t day);
   virtual Bool_t      SetTime(Int_t npar, Int_t hour, Int_t min, Int_t sec);
   virtual Bool_t      SetDatime(Int_t npar, Int_t year, Int_t month, Int_t day, Int_t hour, Int_t min, Int_t sec);
   virtual Bool_t      SetTimestamp(Int_t npar, Int_t year, Int_t month, Int_t day, Int_t hour, Int_t min, Int_t sec, Int_t frac = 0);
   virtual void        SetTimeFormating(const char* fmt) { fTimeFmt = fmt; }
   virtual Bool_t      SetVInt(Int_t npar, const std::vector<Int_t> value, const char* schemaName, const char* typeName);
   virtual Bool_t      SetVUInt(Int_t npar, const std::vector<UInt_t> value, const char* schemaName, const char* typeName);
   virtual Bool_t      SetVLong(Int_t npar, const std::vector<Long_t> value, const char* schemaName, const char* typeName);
   virtual Bool_t      SetVLong64(Int_t npar, const std::vector<Long64_t> value, const char* schemaName, const char* typeName);
   virtual Bool_t      SetVULong64(Int_t npar, const std::vector<ULong64_t> value, const char* schemaName, const char* typeName);
   virtual Bool_t      SetVDouble(Int_t npar, const std::vector<Double_t> value, const char* schemaName, const char* typeName);

   virtual Bool_t      NextIteration();

   virtual Bool_t      Process();
   virtual Int_t       GetNumAffectedRows();

   virtual Bool_t      StoreResult();
   virtual Int_t       GetNumFields();
   virtual const char *GetFieldName(Int_t nfield);
   virtual Bool_t      SetMaxFieldSize(Int_t nfield, Long_t maxsize);
   virtual Bool_t      NextResultRow();

   virtual Bool_t      IsNull(Int_t);
   virtual Int_t       GetInt(Int_t npar);
   virtual UInt_t      GetUInt(Int_t npar);
   virtual Long_t      GetLong(Int_t npar);
   virtual Long64_t    GetLong64(Int_t npar);
   virtual ULong64_t   GetULong64(Int_t npar);
   virtual Double_t    GetDouble(Int_t npar);
   virtual const char *GetString(Int_t npar);
   virtual Bool_t      GetBinary(Int_t npar, void* &mem, Long_t& size);
   virtual Bool_t      GetDate(Int_t npar, Int_t& year, Int_t& month, Int_t& day);
   virtual Bool_t      GetTime(Int_t npar, Int_t& hour, Int_t& min, Int_t& sec);
   virtual Bool_t      GetDatime(Int_t npar, Int_t& year, Int_t& month, Int_t& day, Int_t& hour, Int_t& min, Int_t& sec);
   virtual Bool_t      GetTimestamp(Int_t npar, Int_t& year, Int_t& month, Int_t& day, Int_t& hour, Int_t& min, Int_t& sec, Int_t& frac);
   virtual Bool_t      GetVInt(Int_t npar, std::vector<Int_t> &value);
   virtual Bool_t      GetVUInt(Int_t npar, std::vector<UInt_t> &value);
   virtual Bool_t      GetVLong(Int_t npar, std::vector<Long_t> &value);
   virtual Bool_t      GetVLong64(Int_t npar, std::vector<Long64_t> &value);
   virtual Bool_t      GetVULong64(Int_t npar, std::vector<ULong64_t> &value);
   virtual Bool_t      GetVDouble(Int_t npar, std::vector<Double_t> &value);

   ClassDef(TOracleStatement, 0); // SQL statement class for Oracle
};

#endif
 TOracleStatement.h:1
 TOracleStatement.h:2
 TOracleStatement.h:3
 TOracleStatement.h:4
 TOracleStatement.h:5
 TOracleStatement.h:6
 TOracleStatement.h:7
 TOracleStatement.h:8
 TOracleStatement.h:9
 TOracleStatement.h:10
 TOracleStatement.h:11
 TOracleStatement.h:12
 TOracleStatement.h:13
 TOracleStatement.h:14
 TOracleStatement.h:15
 TOracleStatement.h:16
 TOracleStatement.h:17
 TOracleStatement.h:18
 TOracleStatement.h:19
 TOracleStatement.h:20
 TOracleStatement.h:21
 TOracleStatement.h:22
 TOracleStatement.h:23
 TOracleStatement.h:24
 TOracleStatement.h:25
 TOracleStatement.h:26
 TOracleStatement.h:27
 TOracleStatement.h:28
 TOracleStatement.h:29
 TOracleStatement.h:30
 TOracleStatement.h:31
 TOracleStatement.h:32
 TOracleStatement.h:33
 TOracleStatement.h:34
 TOracleStatement.h:35
 TOracleStatement.h:36
 TOracleStatement.h:37
 TOracleStatement.h:38
 TOracleStatement.h:39
 TOracleStatement.h:40
 TOracleStatement.h:41
 TOracleStatement.h:42
 TOracleStatement.h:43
 TOracleStatement.h:44
 TOracleStatement.h:45
 TOracleStatement.h:46
 TOracleStatement.h:47
 TOracleStatement.h:48
 TOracleStatement.h:49
 TOracleStatement.h:50
 TOracleStatement.h:51
 TOracleStatement.h:52
 TOracleStatement.h:53
 TOracleStatement.h:54
 TOracleStatement.h:55
 TOracleStatement.h:56
 TOracleStatement.h:57
 TOracleStatement.h:58
 TOracleStatement.h:59
 TOracleStatement.h:60
 TOracleStatement.h:61
 TOracleStatement.h:62
 TOracleStatement.h:63
 TOracleStatement.h:64
 TOracleStatement.h:65
 TOracleStatement.h:66
 TOracleStatement.h:67
 TOracleStatement.h:68
 TOracleStatement.h:69
 TOracleStatement.h:70
 TOracleStatement.h:71
 TOracleStatement.h:72
 TOracleStatement.h:73
 TOracleStatement.h:74
 TOracleStatement.h:75
 TOracleStatement.h:76
 TOracleStatement.h:77
 TOracleStatement.h:78
 TOracleStatement.h:79
 TOracleStatement.h:80
 TOracleStatement.h:81
 TOracleStatement.h:82
 TOracleStatement.h:83
 TOracleStatement.h:84
 TOracleStatement.h:85
 TOracleStatement.h:86
 TOracleStatement.h:87
 TOracleStatement.h:88
 TOracleStatement.h:89
 TOracleStatement.h:90
 TOracleStatement.h:91
 TOracleStatement.h:92
 TOracleStatement.h:93
 TOracleStatement.h:94
 TOracleStatement.h:95
 TOracleStatement.h:96
 TOracleStatement.h:97
 TOracleStatement.h:98
 TOracleStatement.h:99
 TOracleStatement.h:100
 TOracleStatement.h:101
 TOracleStatement.h:102
 TOracleStatement.h:103
 TOracleStatement.h:104
 TOracleStatement.h:105
 TOracleStatement.h:106
 TOracleStatement.h:107
 TOracleStatement.h:108
 TOracleStatement.h:109
 TOracleStatement.h:110
 TOracleStatement.h:111
 TOracleStatement.h:112
 TOracleStatement.h:113
 TOracleStatement.h:114
 TOracleStatement.h:115
 TOracleStatement.h:116
 TOracleStatement.h:117
 TOracleStatement.h:118
 TOracleStatement.h:119
 TOracleStatement.h:120
 TOracleStatement.h:121
 TOracleStatement.h:122
 TOracleStatement.h:123
 TOracleStatement.h:124
 TOracleStatement.h:125