Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

SqliteInterface Class Reference

#include <SqliteInterface.h>

Inheritance diagram for SqliteInterface:

DbInterface DbInterface List of all members.

Public Member Functions

int connect ()
int connect ()
int disconnect ()
int disconnect ()
bool is_connected ()
bool is_connected ()
int query (std::string dbname, std::string query, DatabaseRecordVector &records)
int query (std::string dbname, std::string query)
int query (std::string dbname, std::string query, DatabaseRecordVector &records)
int query (std::string dbname, std::string query)
int select_db (std::string dbname)
int select_db (std::string dbname)
void set_dbpath (std::string path)
void set_dbpath (std::string path)
void set_host (std::string host)
void set_host (std::string host)
void set_passwd (std::string passwd)
void set_passwd (std::string passwd)
void set_reuse_connection (bool flag)
void set_reuse_connection (bool flag)
void set_user (std::string user)
void set_user (std::string user)
 SqliteInterface ()
 SqliteInterface ()
 ~SqliteInterface ()
 ~SqliteInterface ()

Protected Member Functions

int connect (std::string fname)
int connect (std::string fname)

Protected Attributes

std::string m_dbHost
std::string m_dbName
std::string m_dbPasswd
std::string m_dbPath
std::string m_dbUser
bool m_isConnected
bool m_reuseConnection

Private Attributes

sqlite3 * m_conn
sqlite3 * m_conn

Constructor & Destructor Documentation

SqliteInterface::SqliteInterface  ) 
 

00024 {}

SqliteInterface::~SqliteInterface  ) 
 

00026 {}

SqliteInterface::SqliteInterface  ) 
 

SqliteInterface::~SqliteInterface  ) 
 


Member Function Documentation

int SqliteInterface::connect std::string  fname  )  [protected]
 

int SqliteInterface::connect  )  [virtual]
 

Implements DbInterface.

int SqliteInterface::connect std::string  fname  )  [protected]
 

00034 {
00035   int status = sqlite3_open_v2(fname.c_str(), &m_conn, SQLITE_OPEN_READONLY,0);
00036   if( status ){
00037     cerr << "Can't open database " << fname << ": "
00038          << sqlite3_errmsg(m_conn) << endl;
00039     cerr.flush();
00040     sqlite3_close(m_conn);
00041     return -1;
00042   }
00043 
00044   std::cout << "Open database " << fname << std::endl;
00045 
00046   m_isConnected = true;
00047 
00048   return 0;
00049 }

int SqliteInterface::connect  )  [virtual]
 

Implements DbInterface.

00029 {
00030   return 0;
00031 }

int SqliteInterface::disconnect  )  [virtual]
 

Implements DbInterface.

int SqliteInterface::disconnect  )  [virtual]
 

Implements DbInterface.

00157 {
00158   sqlite3_close(m_conn);
00159   m_isConnected = false;
00160   return 0;
00161 }

bool DbInterface::is_connected  )  [inline, inherited]
 

00027 { return m_isConnected; }  

bool DbInterface::is_connected  )  [inline, inherited]
 

00027 { return m_isConnected; }  

int SqliteInterface::query std::string  dbname,
std::string  query,
DatabaseRecordVector records
[virtual]
 

Implements DbInterface.

int SqliteInterface::query std::string  dbname,
std::string  query
[virtual]
 

Implements DbInterface.

int SqliteInterface::query std::string  dbname,
std::string  query,
DatabaseRecordVector records
[virtual]
 

Implements DbInterface.

00080 {
00081   char *zErrMsg = 0;
00082  // char ***pazResult;
00083  // int pnRow;
00084  // int pnColumn;
00085 
00086   int status = select_db(dbname);
00087   if(status<0)
00088     return -1;
00089 
00090   records.clear();
00091  // status = sqlite3_exec(m_conn, sql.c_str(), callback, &records, &zErrMsg);
00092   sqlite3_stmt *ppStmt;
00093   sqlite3_prepare_v2(m_conn, sql.c_str(), -1, &ppStmt, 0);
00094 
00095   while ( true ) 
00096   {
00097     status = sqlite3_step(ppStmt); 
00098     if(status == SQLITE_DONE)
00099     {
00100       break;
00101     }
00102 
00103     if(status == SQLITE_ROW)
00104     {
00105       DatabaseRecord* dbrec = new DatabaseRecord;
00106         
00107       //loop over columns
00108       int ncolumns = sqlite3_column_count(ppStmt);
00109       int i;
00110       for(i=0; i<ncolumns; i++)
00111       {
00112         // create new record
00113         unsigned long field_len = sqlite3_column_bytes(ppStmt,i);
00114         char* new_record; 
00115         const char* col_name = sqlite3_column_name(ppStmt,i);
00116         char column_name[255];
00117         strcpy(column_name,col_name); 
00118         int type = sqlite3_column_type(ppStmt,i);
00119         if(type == SQLITE_BLOB)
00120         {
00121           new_record = new char[field_len];
00122           char* col_result = (char*)sqlite3_column_blob(ppStmt,i);
00123           memcpy(new_record,col_result,field_len);
00124         }
00125         else if (type != SQLITE_NULL)
00126         {
00127           new_record = new char[field_len+1];
00128           char* col_result = (char*)sqlite3_column_text(ppStmt,i);
00129           strcpy(new_record,col_result);
00130         }
00131         else 
00132         {
00133           new_record = NULL; 
00134         }
00135         (*dbrec)[column_name] = new_record;
00136       }
00137     
00138       records.push_back(dbrec);
00139 
00140       continue;
00141     }
00142 
00143    // anything else means that error happened
00144    cerr << "SQLITE query error: " << zErrMsg << endl;   
00145    return -1;
00146   }
00147 
00148   sqlite3_free(zErrMsg);
00149 
00150   if(! m_reuseConnection)
00151     disconnect();
00152 
00153   return records.size();
00154 }

int SqliteInterface::query std::string  dbname,
std::string  query
[virtual]
 

Implements DbInterface.

00073 {
00074     DatabaseRecordVector dummy;
00075     int status = query(dbname, sql, dummy);
00076     return status;
00077 }

int SqliteInterface::select_db std::string  dbname  )  [virtual]
 

Implements DbInterface.

int SqliteInterface::select_db std::string  dbname  )  [virtual]
 

Implements DbInterface.

00052 {
00053   if(m_isConnected)
00054   {
00055     if(m_dbName != dbname) // need to change db
00056         disconnect();
00057   }
00058 
00059   m_dbName = dbname;
00060   string fname = m_dbPath+"/"+m_dbName+".db";
00061 
00062   if(! m_isConnected)
00063     {
00064       int status = connect(fname);
00065       if(status<0)
00066         return -1;
00067     }
00068 
00069   return 0;
00070 }

void DbInterface::set_dbpath std::string  path  )  [inline, inherited]
 

00032 {m_dbPath=path;};

void DbInterface::set_dbpath std::string  path  )  [inline, inherited]
 

00032 {m_dbPath=path;};

void DbInterface::set_host std::string  host  )  [inline, inherited]
 

00029 {m_dbHost=host;};

void DbInterface::set_host std::string  host  )  [inline, inherited]
 

00029 {m_dbHost=host;};

void DbInterface::set_passwd std::string  passwd  )  [inline, inherited]
 

00031 {m_dbPasswd=passwd;};

void DbInterface::set_passwd std::string  passwd  )  [inline, inherited]
 

00031 {m_dbPasswd=passwd;};

void DbInterface::set_reuse_connection bool  flag  )  [inline, inherited]
 

00033 { m_reuseConnection=flag;};

void DbInterface::set_reuse_connection bool  flag  )  [inline, inherited]
 

00033 { m_reuseConnection=flag;};

void DbInterface::set_user std::string  user  )  [inline, inherited]
 

00030 {m_dbUser=user;};

void DbInterface::set_user std::string  user  )  [inline, inherited]
 

00030 {m_dbUser=user;};


Member Data Documentation

sqlite3* SqliteInterface::m_conn [private]
 

sqlite3* SqliteInterface::m_conn [private]
 

std::string DbInterface::m_dbHost [protected, inherited]
 

std::string DbInterface::m_dbName [protected, inherited]
 

std::string DbInterface::m_dbPasswd [protected, inherited]
 

std::string DbInterface::m_dbPath [protected, inherited]
 

std::string DbInterface::m_dbUser [protected, inherited]
 

bool DbInterface::m_isConnected [protected, inherited]
 

bool DbInterface::m_reuseConnection [protected, inherited]
 


The documentation for this class was generated from the following files:
Generated on Wed Feb 2 18:49:47 2011 for BOSS6.5.5 by  doxygen 1.3.9.1