ROOT logo
// @(#)root/sqlite:$Id$
// Author: o.freyermuth <o.f@cern.ch>, 01/06/2013

/*************************************************************************
 * Copyright (C) 1995-2013, 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 "TSQLiteResult.h"
#include "TSQLiteRow.h"

ClassImp(TSQLiteResult)

//______________________________________________________________________________
TSQLiteResult::TSQLiteResult(void *result)
{
   // SQLite query result.

   fResult = (sqlite3_stmt *) result;

   // RowCount is -1, as sqlite cannot determine RowCount beforehand:
   fRowCount = -1;
}

//______________________________________________________________________________
TSQLiteResult::~TSQLiteResult()
{
   // Cleanup SQLite query result.

   if (fResult)
      Close();
}

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

   if (!fResult)
      return;

   sqlite3_finalize(fResult);
   fResult     = 0;
}

//______________________________________________________________________________
Bool_t TSQLiteResult::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 TSQLiteResult::GetFieldCount()
{
   // Get number of fields in result.

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

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

   if (!fResult) {
      Error("GetFieldName", "result set closed");
      return 0;
   }
   return sqlite3_column_name(fResult, field);
}

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

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

   int ret = sqlite3_step(fResult);
   if ((ret != SQLITE_DONE) && (ret != SQLITE_ROW)) {
      Error("Statement", "SQL Error: %d %s", ret, sqlite3_errmsg(sqlite3_db_handle(fResult)));
      return NULL;
   }
   if (ret == SQLITE_DONE) {
      // Finished executing, no other row!
      return NULL;
   }
   return new TSQLiteRow((void *) fResult, -1);
}

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