// @(#)root/mysql:$Id$
// Author: Fons Rademakers   15/02/2000

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

#include "TMySQLResult.h"
#include "TMySQLRow.h"


ClassImp(TMySQLResult)

//______________________________________________________________________________
TMySQLResult::TMySQLResult(void *result)
{
   // MySQL query result.

   fResult    = (MYSQL_RES *) result;
   fRowCount  = fResult ? mysql_num_rows(fResult) : 0;
   fFieldInfo = 0;
}

//______________________________________________________________________________
TMySQLResult::~TMySQLResult()
{
   // Cleanup MySQL query result.

   if (fResult)
      Close();
}

//______________________________________________________________________________
void TMySQLResult::Close(Option_t *)
{
   // Close query result.

   if (!fResult)
      return;

   mysql_free_result(fResult);
   fResult    = 0;
   fFieldInfo = 0;
   fRowCount  = 0;
}

//______________________________________________________________________________
Bool_t TMySQLResult::IsValid(Int_t field)
{
   // Check if result set is open and field index within range.

   if (!fResult) {
      Error("IsValid", "result set closed");
      return kFALSE;
   }
   if (field < 0 || field >= GetFieldCount()) {
      Error("IsValid", "field index out of bounds");
      return kFALSE;
   }
   return kTRUE;
}

//______________________________________________________________________________
Int_t TMySQLResult::GetFieldCount()
{
   // Get number of fields in result.

   if (!fResult) {
      Error("GetFieldCount", "result set closed");
      return 0;
   }
   return mysql_num_fields(fResult);
}

//______________________________________________________________________________
const char *TMySQLResult::GetFieldName(Int_t field)
{
   // Get name of specified field.

   if (!IsValid(field))
      return 0;

   if (!fFieldInfo)
      fFieldInfo = mysql_fetch_fields(fResult);

   if (!fFieldInfo) {
      Error("GetFieldName", "cannot get field info");
      return 0;
   }

   return fFieldInfo[field].name;
}

//______________________________________________________________________________
TSQLRow *TMySQLResult::Next()
{
   // Get next query result row. The returned object must be
   // deleted by the user.

   MYSQL_ROW row;

   if (!fResult) {
      Error("Next", "result set closed");
      return 0;
   }
   row = mysql_fetch_row(fResult);
   if (!row)
      return 0;
   else
      return new TMySQLRow((void *) fResult, (ULong_t) row);
}
 TMySQLResult.cxx:1
 TMySQLResult.cxx:2
 TMySQLResult.cxx:3
 TMySQLResult.cxx:4
 TMySQLResult.cxx:5
 TMySQLResult.cxx:6
 TMySQLResult.cxx:7
 TMySQLResult.cxx:8
 TMySQLResult.cxx:9
 TMySQLResult.cxx:10
 TMySQLResult.cxx:11
 TMySQLResult.cxx:12
 TMySQLResult.cxx:13
 TMySQLResult.cxx:14
 TMySQLResult.cxx:15
 TMySQLResult.cxx:16
 TMySQLResult.cxx:17
 TMySQLResult.cxx:18
 TMySQLResult.cxx:19
 TMySQLResult.cxx:20
 TMySQLResult.cxx:21
 TMySQLResult.cxx:22
 TMySQLResult.cxx:23
 TMySQLResult.cxx:24
 TMySQLResult.cxx:25
 TMySQLResult.cxx:26
 TMySQLResult.cxx:27
 TMySQLResult.cxx:28
 TMySQLResult.cxx:29
 TMySQLResult.cxx:30
 TMySQLResult.cxx:31
 TMySQLResult.cxx:32
 TMySQLResult.cxx:33
 TMySQLResult.cxx:34
 TMySQLResult.cxx:35
 TMySQLResult.cxx:36
 TMySQLResult.cxx:37
 TMySQLResult.cxx:38
 TMySQLResult.cxx:39
 TMySQLResult.cxx:40
 TMySQLResult.cxx:41
 TMySQLResult.cxx:42
 TMySQLResult.cxx:43
 TMySQLResult.cxx:44
 TMySQLResult.cxx:45
 TMySQLResult.cxx:46
 TMySQLResult.cxx:47
 TMySQLResult.cxx:48
 TMySQLResult.cxx:49
 TMySQLResult.cxx:50
 TMySQLResult.cxx:51
 TMySQLResult.cxx:52
 TMySQLResult.cxx:53
 TMySQLResult.cxx:54
 TMySQLResult.cxx:55
 TMySQLResult.cxx:56
 TMySQLResult.cxx:57
 TMySQLResult.cxx:58
 TMySQLResult.cxx:59
 TMySQLResult.cxx:60
 TMySQLResult.cxx:61
 TMySQLResult.cxx:62
 TMySQLResult.cxx:63
 TMySQLResult.cxx:64
 TMySQLResult.cxx:65
 TMySQLResult.cxx:66
 TMySQLResult.cxx:67
 TMySQLResult.cxx:68
 TMySQLResult.cxx:69
 TMySQLResult.cxx:70
 TMySQLResult.cxx:71
 TMySQLResult.cxx:72
 TMySQLResult.cxx:73
 TMySQLResult.cxx:74
 TMySQLResult.cxx:75
 TMySQLResult.cxx:76
 TMySQLResult.cxx:77
 TMySQLResult.cxx:78
 TMySQLResult.cxx:79
 TMySQLResult.cxx:80
 TMySQLResult.cxx:81
 TMySQLResult.cxx:82
 TMySQLResult.cxx:83
 TMySQLResult.cxx:84
 TMySQLResult.cxx:85
 TMySQLResult.cxx:86
 TMySQLResult.cxx:87
 TMySQLResult.cxx:88
 TMySQLResult.cxx:89
 TMySQLResult.cxx:90
 TMySQLResult.cxx:91
 TMySQLResult.cxx:92
 TMySQLResult.cxx:93
 TMySQLResult.cxx:94
 TMySQLResult.cxx:95
 TMySQLResult.cxx:96
 TMySQLResult.cxx:97
 TMySQLResult.cxx:98
 TMySQLResult.cxx:99
 TMySQLResult.cxx:100
 TMySQLResult.cxx:101
 TMySQLResult.cxx:102
 TMySQLResult.cxx:103
 TMySQLResult.cxx:104
 TMySQLResult.cxx:105
 TMySQLResult.cxx:106
 TMySQLResult.cxx:107
 TMySQLResult.cxx:108
 TMySQLResult.cxx:109
 TMySQLResult.cxx:110
 TMySQLResult.cxx:111
 TMySQLResult.cxx:112
 TMySQLResult.cxx:113
 TMySQLResult.cxx:114
 TMySQLResult.cxx:115