// @(#)root/tree:$Name: $:$Id: TTreeResult.cxx,v 1.3 2001/12/08 15:18:36 brun Exp $
// Author: Fons Rademakers 30/11/99
/*************************************************************************
* 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. *
*************************************************************************/
//////////////////////////////////////////////////////////////////////////
// //
// TTreeResult //
// //
// Class defining interface to a TTree query result with the same //
// interface as for SQL databases. A TTreeResult is returned by //
// TTree::Query() (actually TTreePlayer::Query()). //
// //
// Related classes are TTreeRow. //
// //
//////////////////////////////////////////////////////////////////////////
#include "TTreeResult.h"
#include "TTreeRow.h"
#include "TString.h"
#include "TObjArray.h"
ClassImp(TTreeResult)
//______________________________________________________________________________
TTreeResult::TTreeResult()
{
// Create a query result object.
fColumnCount = 0;
fRowCount = 0;
fFields = 0;
fResult = 0;
fNextRow = 0;
}
//______________________________________________________________________________
TTreeResult::TTreeResult(Int_t nfields)
{
// Create a query result object.
fColumnCount = nfields;
fRowCount = 0;
fFields = new TString [nfields];
fResult = new TObjArray;
fNextRow = 0;
}
//______________________________________________________________________________
TTreeResult::~TTreeResult()
{
// Cleanup result object.
if (fResult)
Close();
delete [] fFields;
}
//______________________________________________________________________________
void TTreeResult::Close(Option_t *)
{
// Close query result.
if (!fResult)
return;
fResult->Delete();
delete fResult;
fResult = 0;
fRowCount = 0;
}
//______________________________________________________________________________
Bool_t TTreeResult::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 TTreeResult::GetFieldCount()
{
// Get number of fields in result.
if (!fResult) {
Error("GetFieldCount", "result set closed");
return 0;
}
return fColumnCount;
}
//______________________________________________________________________________
const char *TTreeResult::GetFieldName(Int_t field)
{
// Get name of specified field.
if (!IsValid(field))
return 0;
return fFields[field].Data();
}
//______________________________________________________________________________
TSQLRow *TTreeResult::Next()
{
// Get next query result row. The returned object must be
// deleted by the user and becomes invalid when the result set is
// closed or deleted.
if (!fResult) {
Error("Next", "result set closed");
return 0;
}
if (fNextRow >= fRowCount)
return 0;
else {
TTreeRow *row = new TTreeRow((TTreeRow*)fResult->At(fNextRow));
fNextRow++;
return row;
}
}
//______________________________________________________________________________
void TTreeResult::AddField(Int_t field, const char *fieldname)
{
// Add field name to result set. This is an internal method that is not
// exported via the abstract interface and that should not be user called.
if (!IsValid(field))
return;
fFields[field] = fieldname;
}
//______________________________________________________________________________
void TTreeResult::AddRow(TSQLRow *row)
{
// Adopt a row to result set. This is an internal method that is not
// exported via the abstract interface and that should not be user called.
if (!fResult) {
Error("AddRow", "result set closed");
return;
}
fResult->Add(row);
fRowCount++;
}
ROOT page - Class index - Class Hierarchy - Top of the page
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.