DB::Sqlite3_ResultSet Class Reference

#include <sqlite3_db.h>

Inheritance diagram for DB::Sqlite3_ResultSet:

DB::ResultSet List of all members.

Public Member Functions

bool close (void)
bool next (void)
unsigned long recordCount (void) const
unsigned int findColumn (const char *field) const
const char * getString (const int idx) const
const int getInteger (const int idx) const
const bool getBool (const int idx) const
const time_t getUnixTime (const int idx) const
const double getDouble (const int idx) const
const float getFloat (const int idx) const
const long getLong (const int idx) const
const short getShort (const int idx) const
void * operator new (size_t bytes)
void operator delete (void *ptr)

Protected Member Functions

 Sqlite3_ResultSet (sqlite3_stmt *res)
 ~Sqlite3_ResultSet ()

Private Member Functions

 Sqlite3_ResultSet ()
 Sqlite3_ResultSet (const Sqlite3_ResultSet &old)
const Sqlite3_ResultSetoperator= (const Sqlite3_ResultSet &old)

Private Attributes

sqlite3_stmt * res_

Friends

class Sqlite3_Connection

Detailed Description

Definition at line 31 of file sqlite3_db.h.


Constructor & Destructor Documentation

DB::Sqlite3_ResultSet::Sqlite3_ResultSet ( sqlite3_stmt *  res  )  [inline, protected]

Definition at line 35 of file sqlite3_db.h.

00035 : res_(res) {};

DB::Sqlite3_ResultSet::~Sqlite3_ResultSet (  )  [protected]

Definition at line 33 of file sqlite3_db.cpp.

References res_.

00034 {
00035     if (res_) {
00036         ACE_DEBUG((LM_ERROR,"Warning ResultSet wasn't closed or deleted.\n"));
00037     }
00038 }

DB::Sqlite3_ResultSet::Sqlite3_ResultSet (  )  [inline, private]

Definition at line 38 of file sqlite3_db.h.

00038 {};

DB::Sqlite3_ResultSet::Sqlite3_ResultSet ( const Sqlite3_ResultSet old  )  [private]


Member Function Documentation

bool DB::Sqlite3_ResultSet::close ( void   )  [virtual]

Implements DB::ResultSet.

Definition at line 41 of file sqlite3_db.cpp.

References res_.

00042 {
00043     int rc;
00044 
00045     if (!res_) return (false);
00046 
00047     // eat remaining rows, if there are some
00048     do {
00049         rc = sqlite3_step(res_);
00050     } while (rc != SQLITE_DONE && rc != SQLITE_ERROR && rc != SQLITE_MISUSE);
00051 
00052     sqlite3_finalize(res_);
00053     res_ = NULL;
00054     delete this;
00055 
00056     return (true);
00057 }

unsigned int DB::Sqlite3_ResultSet::findColumn ( const char *  field  )  const [virtual]

Implements DB::ResultSet.

Definition at line 84 of file sqlite3_db.cpp.

References res_.

00085 {
00086     unsigned int num_fields;
00087     unsigned int i;
00088     const char *field;
00089 
00090     num_fields = sqlite3_column_count(res_);
00091     for (i=0; i<num_fields; i++) {
00092         field = sqlite3_column_name(res_, i);
00093         if (ACE_OS::strcmp(field,fld) == 0) {
00094             return (i);
00095         }
00096     }
00097     return (i);
00098 }

const bool DB::Sqlite3_ResultSet::getBool ( const int  idx  )  const [virtual]

Implements DB::ResultSet.

Definition at line 113 of file sqlite3_db.cpp.

References res_.

00114 {
00115     register const char *v = (const char *) sqlite3_column_text(res_, idx);
00116     if (v && v[0] == '1') {
00117         return (true);
00118     }
00119     return (false);
00120 }

const double DB::Sqlite3_ResultSet::getDouble ( const int  idx  )  const [virtual]

Implements DB::ResultSet.

Definition at line 173 of file sqlite3_db.cpp.

References res_.

00174 {
00175     char *pEnd;
00176     return (ACE_OS::strtod((const char *) sqlite3_column_text(res_, idx), &pEnd));
00177 }

const float DB::Sqlite3_ResultSet::getFloat ( const int  idx  )  const [virtual]

Implements DB::ResultSet.

Definition at line 180 of file sqlite3_db.cpp.

References res_.

00181 {
00182     return (atof((const char *) sqlite3_column_text(res_, idx)));
00183 }

const int DB::Sqlite3_ResultSet::getInteger ( const int  idx  )  const [virtual]

Implements DB::ResultSet.

Definition at line 107 of file sqlite3_db.cpp.

References res_.

00108 {
00109     return ((const int) ACE_OS::atoi((const char *) sqlite3_column_text(res_, idx)));
00110 }

const long DB::Sqlite3_ResultSet::getLong ( const int  idx  )  const [virtual]

Implements DB::ResultSet.

Definition at line 186 of file sqlite3_db.cpp.

References res_.

00187 {
00188     return (atol((const char *) sqlite3_column_text(res_, idx)));
00189 }

const short DB::Sqlite3_ResultSet::getShort ( const int  idx  )  const [virtual]

Implements DB::ResultSet.

Definition at line 192 of file sqlite3_db.cpp.

References res_.

00193 {
00194     return ((short) (ACE_OS::atoi((const char *) sqlite3_column_text(res_, idx))));
00195 }

const char * DB::Sqlite3_ResultSet::getString ( const int  idx  )  const [virtual]

Implements DB::ResultSet.

Definition at line 101 of file sqlite3_db.cpp.

References res_.

00102 {
00103     return ((const char *) sqlite3_column_text(res_, idx));
00104 }

const time_t DB::Sqlite3_ResultSet::getUnixTime ( const int  idx  )  const [virtual]

Implements DB::ResultSet.

Definition at line 123 of file sqlite3_db.cpp.

References res_.

00124 {
00125     struct tm tmp;
00126     register const char *v = (const char *) sqlite3_column_text(res_, idx);
00127     // ACE_DEBUG((LM_DEBUG, ACE_TEXT("Read UnixTime: %s\n"), row_[idx]));
00128 
00129     if (v) {
00130         // switch on the type of field
00131         // Basically, there are two types of returns I've seen
00132         // 1. has a hypen and is fully parseable
00133         // 2. has no hypen and is an older timestamp field
00134         // The others are raw DATE or TIME
00135         int Ypos = 0;
00136         int Mpos = 4;
00137         int Dpos = 6;
00138         int hpos = 8;
00139         int mpos = 10;
00140         int spos = 12;
00141         if (strchr(v, '-') != NULL) {
00142             ++Mpos;
00143             Dpos = 8;
00144             hpos = 11;
00145             mpos = 14;
00146             spos = 17;
00147         }
00148         tmp.tm_wday = 0;
00149         tmp.tm_yday = 0;
00150         tmp.tm_isdst = 0;
00151         tmp.tm_year = (((v[Ypos] - '0') * 1000) + ((v[Ypos+1] - '0') * 100) + ((v[Ypos+2] - '0') * 10) + (v[Ypos+3] - '0')) - 1900;
00152         tmp.tm_mon = (((v[Mpos] - '0') * 10) + (v[Mpos+1] - '0')) - 1; /* 0 - 11 */
00153         tmp.tm_mday = (((v[Dpos] - '0') * 10) + (v[Dpos+1] - '0')); /* 1 - 31 */
00154         tmp.tm_hour = (((v[hpos] - '0') * 10) + (v[hpos+1] - '0')) - 1; /* 0 - 23 */
00155         tmp.tm_min = (((v[mpos] - '0') * 10) + (v[mpos+1] - '0')); /* 0-59 */
00156         tmp.tm_sec = (((v[spos] - '0') * 10) + (v[spos+1] - '0')); /* 0-59 */
00157 
00158         /*
00159         ACE_DEBUG((LM_DEBUG, ACE_TEXT("y=%d m=%d d=%d h=%d m=%d s=%d\n"), 
00160                    tmp.tm_year,
00161                    tmp.tm_mon,
00162                    tmp.tm_mday,
00163                    tmp.tm_hour,
00164                    tmp.tm_min,
00165                    tmp.tm_sec));
00166         */
00167         return (mktime(&tmp));
00168     }
00169     return (0);
00170 }

bool DB::Sqlite3_ResultSet::next ( void   )  [virtual]

Implements DB::ResultSet.

Definition at line 60 of file sqlite3_db.cpp.

References res_.

00061 {
00062     int rc;
00063 
00064     do {
00065         rc = sqlite3_step(res_);
00066         if (rc == SQLITE_BUSY) {
00067             sleep(1);
00068             continue;
00069         }
00070         if (rc == SQLITE_ROW) {
00071             return (true);
00072         }
00073     } while (rc != SQLITE_DONE && rc != SQLITE_ERROR && rc != SQLITE_MISUSE);
00074     return (false);
00075 }

void DB::Sqlite3_ResultSet::operator delete ( void *  ptr  ) 

Definition at line 217 of file sqlite3_db.cpp.

00218 {
00219   delete [] static_cast <char *> (ptr);
00220 }

void * DB::Sqlite3_ResultSet::operator new ( size_t  bytes  ) 

Definition at line 198 of file sqlite3_db.cpp.

00199 {
00200   return (::new char[bytes]);
00201 }

const Sqlite3_ResultSet& DB::Sqlite3_ResultSet::operator= ( const Sqlite3_ResultSet old  )  [private]

unsigned long DB::Sqlite3_ResultSet::recordCount ( void   )  const [virtual]

Implements DB::ResultSet.

Definition at line 78 of file sqlite3_db.cpp.

00079 {
00080     return (0); // not supported
00081 }


Friends And Related Function Documentation

friend class Sqlite3_Connection [friend]

Definition at line 33 of file sqlite3_db.h.


Member Data Documentation

sqlite3_stmt* DB::Sqlite3_ResultSet::res_ [private]

Definition at line 72 of file sqlite3_db.h.

Referenced by close(), findColumn(), getBool(), getDouble(), getFloat(), getInteger(), getLong(), getShort(), getString(), getUnixTime(), next(), and ~Sqlite3_ResultSet().


The documentation for this class was generated from the following files:
Generated on Tue Apr 24 18:59:42 2007 for DbAbstract by  doxygen 1.4.7