ROOT logo
// @(#)root/odbc:$Id$
// 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.             *
 *************************************************************************/

#include "TODBCResult.h"
#include "TODBCRow.h"


ClassImp(TODBCResult)

//______________________________________________________________________________
TODBCResult::TODBCResult(SQLHSTMT stmt)
{
   // Constructor
   
   fHstmt = stmt;
   fFieldCount = 0;

   SQLSMALLINT   columnCount;

   SQLRETURN retcode = SQLNumResultCols(fHstmt, &columnCount);

   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
      fFieldCount = columnCount;
}

//______________________________________________________________________________
TODBCResult::~TODBCResult()
{
   // Cleanup ODBC query result.

   Close();
}

//______________________________________________________________________________
void TODBCResult::Close(Option_t *)
{
   // Close (cleanup) ODBC result object. Deletes statement
   
   SQLFreeHandle(SQL_HANDLE_STMT, fHstmt);
   fHstmt = 0;
}

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

   SQLCHAR columnName[1024];

   SQLSMALLINT nameLength;
   SQLSMALLINT dataType;
   SQLULEN     columnSize;
   SQLSMALLINT decimalDigits;
   SQLSMALLINT nullable;

   SQLRETURN retcode =
      SQLDescribeCol(fHstmt, field+1, columnName, 1024,
                     &nameLength, &dataType,
                     &columnSize, &decimalDigits, &nullable);

   if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) return 0;

   fNameBuffer = (const char*) columnName;

   return fNameBuffer;
}

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

   if (fHstmt==0) return 0;

   SQLRETURN retcode = SQLFetch(fHstmt);

   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
       return new TODBCRow(fHstmt, fFieldCount);

   return 0;
}
 TODBCResult.cxx:1
 TODBCResult.cxx:2
 TODBCResult.cxx:3
 TODBCResult.cxx:4
 TODBCResult.cxx:5
 TODBCResult.cxx:6
 TODBCResult.cxx:7
 TODBCResult.cxx:8
 TODBCResult.cxx:9
 TODBCResult.cxx:10
 TODBCResult.cxx:11
 TODBCResult.cxx:12
 TODBCResult.cxx:13
 TODBCResult.cxx:14
 TODBCResult.cxx:15
 TODBCResult.cxx:16
 TODBCResult.cxx:17
 TODBCResult.cxx:18
 TODBCResult.cxx:19
 TODBCResult.cxx:20
 TODBCResult.cxx:21
 TODBCResult.cxx:22
 TODBCResult.cxx:23
 TODBCResult.cxx:24
 TODBCResult.cxx:25
 TODBCResult.cxx:26
 TODBCResult.cxx:27
 TODBCResult.cxx:28
 TODBCResult.cxx:29
 TODBCResult.cxx:30
 TODBCResult.cxx:31
 TODBCResult.cxx:32
 TODBCResult.cxx:33
 TODBCResult.cxx:34
 TODBCResult.cxx:35
 TODBCResult.cxx:36
 TODBCResult.cxx:37
 TODBCResult.cxx:38
 TODBCResult.cxx:39
 TODBCResult.cxx:40
 TODBCResult.cxx:41
 TODBCResult.cxx:42
 TODBCResult.cxx:43
 TODBCResult.cxx:44
 TODBCResult.cxx:45
 TODBCResult.cxx:46
 TODBCResult.cxx:47
 TODBCResult.cxx:48
 TODBCResult.cxx:49
 TODBCResult.cxx:50
 TODBCResult.cxx:51
 TODBCResult.cxx:52
 TODBCResult.cxx:53
 TODBCResult.cxx:54
 TODBCResult.cxx:55
 TODBCResult.cxx:56
 TODBCResult.cxx:57
 TODBCResult.cxx:58
 TODBCResult.cxx:59
 TODBCResult.cxx:60
 TODBCResult.cxx:61
 TODBCResult.cxx:62
 TODBCResult.cxx:63
 TODBCResult.cxx:64
 TODBCResult.cxx:65
 TODBCResult.cxx:66
 TODBCResult.cxx:67
 TODBCResult.cxx:68
 TODBCResult.cxx:69
 TODBCResult.cxx:70
 TODBCResult.cxx:71
 TODBCResult.cxx:72
 TODBCResult.cxx:73
 TODBCResult.cxx:74
 TODBCResult.cxx:75
 TODBCResult.cxx:76
 TODBCResult.cxx:77
 TODBCResult.cxx:78
 TODBCResult.cxx:79
 TODBCResult.cxx:80
 TODBCResult.cxx:81
 TODBCResult.cxx:82
 TODBCResult.cxx:83
 TODBCResult.cxx:84
 TODBCResult.cxx:85
 TODBCResult.cxx:86
 TODBCResult.cxx:87
 TODBCResult.cxx:88
 TODBCResult.cxx:89
 TODBCResult.cxx:90