ROOT logo
// @(#)root/mysql:$Id: TMySQLStatement.h 29976 2009-08-31 13:34:53Z rdm $
// 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_TMySQLStatement
#define ROOT_TMySQLStatement

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

#if !defined(__CINT__)
#ifdef R__WIN32
#include <winsock2.h>
#else
#include <sys/time.h>
#endif
#include <mysql.h>

#if MYSQL_VERSION_ID < 40100
typedef struct { int dummy; } MYSQL_STMT;
typedef struct { int dummy; } MYSQL_BIND;
#endif

#else
struct MYSQL_STMT;
struct MYSQL_BIND;
typedef char my_bool;
#endif

class TMySQLStatement : public TSQLStatement {

protected:

   struct TParamData {
      void*         fMem;        //! allocated data buffer
      Int_t         fSize;       //! size of allocated data
      Int_t         fSqlType;     //! sqltype of parameter
      Bool_t        fSign;        //! signed - not signed type
      ULong_t       fResLength;  //! length argument
      my_bool       fResNull;    //! indicates if argument is null
      char*         fStrBuffer;  //! special buffer to be used for string conversions
      char*         fFieldName;  //! buffer for field name
   };

   MYSQL_STMT           *fStmt;          //! executed statement
   Int_t                 fNumBuffers; //! number of statement parameters
   MYSQL_BIND           *fBind;          //! array of bind data
   TParamData           *fBuffer;         //! parameter definition structures
   Int_t                 fWorkingMode;   //! 1 - setting parameters, 2 - retrieving results
   Int_t                 fIterationCount;//! number of iteration
   Bool_t                fNeedParBind;   //! indicates when parameters bind should be called

   Bool_t      IsSetParsMode() const { return fWorkingMode==1; }
   Bool_t      IsResultSetMode() const { return fWorkingMode==2; }

   Bool_t      SetSQLParamType(Int_t npar, int sqltype, bool sig, unsigned long sqlsize = 0);

   long double ConvertToNumeric(Int_t npar);
   const char *ConvertToString(Int_t npar);

   void        FreeBuffers();
   void        SetBuffersNumber(Int_t n);

   void       *BeforeSet(const char* method, Int_t npar, Int_t sqltype, Bool_t sig = kTRUE, unsigned long size = 0);
   
   static ULong64_t fgAllocSizeLimit;

public:
   TMySQLStatement(MYSQL_STMT* stmt, Bool_t errout = kTRUE);
   virtual ~TMySQLStatement();
   
   static unsigned long GetAllocSizeLimit() { return fgAllocSizeLimit; }
   static void SetAllocSizeLimit(unsigned long sz) { fgAllocSizeLimit = sz; }

   virtual void        Close(Option_t * = "");

   virtual Int_t       GetBufferLength() const { return 1; }
   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 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      NextResultRow();

   virtual Bool_t      IsNull(Int_t npar);
   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&);

   ClassDef(TMySQLStatement, 0);  // SQL statement class for MySQL DB
};

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