rlBussignalDatabase Class Reference

#include <rlbussignaldatabase.h>

List of all members.

Public Member Functions

 rlBussignalDatabase ()
virtual ~rlBussignalDatabase ()
int openDatabase (const char *database, const char *table)
int writeDatabaseInt (const char *item, int val)
int writeDatabaseIntArray (const char *item, int *val, int len)
int writeDatabaseFloat (const char *item, float val)
int writeDatabaseFloatArray (const char *item, float *val, int len)
int writeDatabaseString (const char *item, char *val)
int readDatabase (const char *item, char *type, char *value)
int closeDatabase ()

Private Member Functions

int writeDatabaseString (const char *item)
int myquery (const char *query)

Private Attributes

void * database
void * connection
char * databaseName
char * tableName
char buf [rl_PRINTF_LENGTH]
char typebuf [16]

Detailed Description

Definition at line 21 of file rlbussignaldatabase.h.


Constructor & Destructor Documentation

rlBussignalDatabase::rlBussignalDatabase (  ) 

Definition at line 30 of file rlbussignaldatabase.cpp.

00031 {
00032   databaseName = NULL;
00033   tableName    = NULL;
00034   connection   = NULL;
00035   if(mysql_is_initialized == 0)
00036   {
00037     mysql_init(&mysql);
00038     mysql_is_initialized = 1;
00039   }
00040 }

rlBussignalDatabase::~rlBussignalDatabase (  )  [virtual]

Definition at line 42 of file rlbussignaldatabase.cpp.

00043 {
00044   closeDatabase();
00045   if(databaseName != NULL) delete [] databaseName;
00046   if(tableName != NULL) delete [] tableName;
00047 }


Member Function Documentation

int rlBussignalDatabase::closeDatabase (  ) 

Definition at line 197 of file rlbussignaldatabase.cpp.

00198 {
00199   mysql_close((MYSQL *) connection);
00200   return 0;
00201 }

int rlBussignalDatabase::myquery ( const char *  query  )  [private]

Definition at line 146 of file rlbussignaldatabase.cpp.

00147 {
00148   int state,num_rows;
00149   MYSQL_RES *result;
00150 
00151   //printf("query=%s\n",query);
00152   state = mysql_query((MYSQL *) connection, query);
00153   if(state != 0)
00154   {
00155     //printf("query failed state=%d query=%s\n",state,query);
00156     return -1;
00157   }
00158   num_rows = mysql_affected_rows((MYSQL *) connection);
00159   result = mysql_store_result((MYSQL *) connection);
00160   mysql_free_result(result);
00161   //printf("num_rows=%d\n",num_rows);
00162   return num_rows;
00163 }

int rlBussignalDatabase::openDatabase ( const char *  database,
const char *  table 
)

Definition at line 49 of file rlbussignaldatabase.cpp.

00050 {
00051   if(databaseName != NULL) delete [] databaseName;
00052   if(tableName != NULL) delete [] tableName;
00053   databaseName = new char[strlen(database)+1];
00054   strcpy(databaseName,database);
00055   tableName    = new char[strlen(table)+1];
00056   strcpy(tableName,table);
00057   connection = (void *) mysql_real_connect(&mysql, "localhost","bususr","buspw",databaseName,0,0,0);
00058   if(connection == NULL)
00059   {
00060     printf(mysql_error(&mysql));
00061     return -1;
00062   }
00063   return 0;
00064 }

int rlBussignalDatabase::readDatabase ( const char *  item,
char *  type,
char *  value 
)

Definition at line 165 of file rlbussignaldatabase.cpp.

00166 {
00167   char query[1024];
00168   int state,num_rows;
00169   MYSQL_RES *result;
00170   MYSQL_ROW row;
00171 
00172   *type = *value = '\0';
00173   sprintf(query,"select * from bus where name = '%s'",item);
00174   //printf("query=%s\n",query);
00175   state = mysql_query((MYSQL *) connection, query);
00176   if(state != 0)
00177   {
00178     //printf("query failed state=%d query=%s\n",state,query);
00179     return -1;
00180   }
00181   num_rows = mysql_affected_rows((MYSQL *) connection);
00182   result = mysql_store_result((MYSQL *) connection);
00183   if(result != NULL)
00184   {
00185     row = mysql_fetch_row(result);
00186     if(row != NULL)
00187     {
00188       if(row[1] != NULL) strcpy(type ,row[1]);
00189       if(row[2] != NULL) strcpy(value,row[2]);
00190     }
00191     mysql_free_result(result);
00192   }
00193   //printf("num_rows=%d\n",num_rows);
00194   return num_rows;
00195 }

int rlBussignalDatabase::writeDatabaseFloat ( const char *  item,
float  val 
)

Definition at line 89 of file rlbussignaldatabase.cpp.

00090 {
00091   sprintf(buf,"%f",val);
00092   sprintf(typebuf,"F1");
00093   return writeDatabaseString(item);
00094 }

int rlBussignalDatabase::writeDatabaseFloatArray ( const char *  item,
float *  val,
int  len 
)

Definition at line 96 of file rlbussignaldatabase.cpp.

00097 {
00098   int  i;
00099   char vbuf[80];
00100 
00101   buf[0] = '\0';
00102   for(i=0; i<len; i++)
00103   {
00104     sprintf(vbuf,"%f,",val[i]);
00105     if(strlen(buf)+strlen(vbuf) >= sizeof(buf)-1) return -1;
00106     strcat(buf,vbuf);
00107   }
00108   sprintf(typebuf,"F%d",len);
00109   return writeDatabaseString(item);
00110 }

int rlBussignalDatabase::writeDatabaseInt ( const char *  item,
int  val 
)

Definition at line 66 of file rlbussignaldatabase.cpp.

00067 {
00068   sprintf(buf,"%d",val);
00069   sprintf(typebuf,"I1");
00070   return writeDatabaseString(item);
00071 }

int rlBussignalDatabase::writeDatabaseIntArray ( const char *  item,
int *  val,
int  len 
)

Definition at line 73 of file rlbussignaldatabase.cpp.

00074 {
00075   int  i;
00076   char vbuf[80];
00077 
00078   buf[0] = '\0';
00079   for(i=0; i<len; i++)
00080   {
00081     sprintf(vbuf,"%d,",val[i]);
00082     if(strlen(buf)+strlen(vbuf) >= sizeof(buf)-1) return -1;
00083     strcat(buf,vbuf);
00084   }
00085   sprintf(typebuf,"I%d",len);
00086   return writeDatabaseString(item);
00087 }

int rlBussignalDatabase::writeDatabaseString ( const char *  item  )  [private]

Definition at line 119 of file rlbussignaldatabase.cpp.

00120 {
00121   int  ret;
00122   char sqlbuf[rl_PRINTF_LENGTH];
00123 
00124   // Try an UPDATE
00125   ret = snprintf(sqlbuf,sizeof(sqlbuf)-1,"UPDATE %s SET datatype='%s', datavalue='%s' WHERE name='%s'",tableName,typebuf,buf,item);
00126   if(ret < 0)
00127   {
00128     printf("sqlbuf too small in writeDatabaseString\n");
00129     return -1;
00130   }
00131   ret = myquery(sqlbuf);
00132   if(ret > 0) return 0; // success
00133 
00134   // Try an INSERT
00135   ret = snprintf(sqlbuf,sizeof(sqlbuf)-1,"INSERT INTO %s VALUES ('%s','%s','%s')",tableName,item,typebuf,buf);
00136   if(ret < 0)
00137   {
00138     printf("sqlbuf too small in writeDatabaseString\n");
00139     return -1;
00140   }
00141   ret = myquery(sqlbuf);
00142   if(ret >= 0) return 0; // success
00143   return -1;             // failure
00144 }

int rlBussignalDatabase::writeDatabaseString ( const char *  item,
char *  val 
)

Definition at line 112 of file rlbussignaldatabase.cpp.

00113 {
00114   sprintf(typebuf,"S%d",strlen(val));
00115   rlstrncpy(buf,val,sizeof(buf)-1);
00116   return writeDatabaseString(item);
00117 }


Member Data Documentation

char rlBussignalDatabase::buf[rl_PRINTF_LENGTH] [private]

Definition at line 41 of file rlbussignaldatabase.h.

Definition at line 38 of file rlbussignaldatabase.h.

Definition at line 37 of file rlbussignaldatabase.h.

Definition at line 39 of file rlbussignaldatabase.h.

Definition at line 40 of file rlbussignaldatabase.h.

char rlBussignalDatabase::typebuf[16] [private]

Definition at line 42 of file rlbussignaldatabase.h.


The documentation for this class was generated from the following files:
Generated on Mon Aug 30 20:16:16 2010 for rllib by  doxygen 1.6.3