rllib  1
Public Member Functions | Private Member Functions | Private Attributes
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.

{
  databaseName = NULL;
  tableName    = NULL;
  connection   = NULL;
  if(mysql_is_initialized == 0)
  {
    mysql_init(&mysql);
    mysql_is_initialized = 1;
  }
}
rlBussignalDatabase::~rlBussignalDatabase ( ) [virtual]

Definition at line 42 of file rlbussignaldatabase.cpp.

{
  closeDatabase();
  if(databaseName != NULL) delete [] databaseName;
  if(tableName != NULL) delete [] tableName;
}

Member Function Documentation

int rlBussignalDatabase::closeDatabase ( )

Definition at line 197 of file rlbussignaldatabase.cpp.

{
  mysql_close((MYSQL *) connection);
  return 0;
}
int rlBussignalDatabase::myquery ( const char *  query) [private]

Definition at line 146 of file rlbussignaldatabase.cpp.

{
  int state,num_rows;
  MYSQL_RES *result;

  //printf("query=%s\n",query);
  state = mysql_query((MYSQL *) connection, query);
  if(state != 0)
  {
    //printf("query failed state=%d query=%s\n",state,query);
    return -1;
  }
  num_rows = mysql_affected_rows((MYSQL *) connection);
  result = mysql_store_result((MYSQL *) connection);
  mysql_free_result(result);
  //printf("num_rows=%d\n",num_rows);
  return num_rows;
}
int rlBussignalDatabase::openDatabase ( const char *  database,
const char *  table 
)

Definition at line 49 of file rlbussignaldatabase.cpp.

{
  if(databaseName != NULL) delete [] databaseName;
  if(tableName != NULL) delete [] tableName;
  databaseName = new char[strlen(database)+1];
  strcpy(databaseName,database);
  tableName    = new char[strlen(table)+1];
  strcpy(tableName,table);
  connection = (void *) mysql_real_connect(&mysql, "localhost","bususr","buspw",databaseName,0,0,0);
  if(connection == NULL)
  {
    printf(mysql_error(&mysql));
    return -1;
  }
  return 0;
}
int rlBussignalDatabase::readDatabase ( const char *  item,
char *  type,
char *  value 
)

Definition at line 165 of file rlbussignaldatabase.cpp.

{
  char query[1024];
  int state,num_rows;
  MYSQL_RES *result;
  MYSQL_ROW row;

  *type = *value = '\0';
  sprintf(query,"select * from bus where name = '%s'",item);
  //printf("query=%s\n",query);
  state = mysql_query((MYSQL *) connection, query);
  if(state != 0)
  {
    //printf("query failed state=%d query=%s\n",state,query);
    return -1;
  }
  num_rows = mysql_affected_rows((MYSQL *) connection);
  result = mysql_store_result((MYSQL *) connection);
  if(result != NULL)
  {
    row = mysql_fetch_row(result);
    if(row != NULL)
    {
      if(row[1] != NULL) strcpy(type ,row[1]);
      if(row[2] != NULL) strcpy(value,row[2]);
    }
    mysql_free_result(result);
  }
  //printf("num_rows=%d\n",num_rows);
  return num_rows;
}
int rlBussignalDatabase::writeDatabaseFloat ( const char *  item,
float  val 
)

Definition at line 89 of file rlbussignaldatabase.cpp.

{
  sprintf(buf,"%f",val);
  sprintf(typebuf,"F1");
  return writeDatabaseString(item);
}
int rlBussignalDatabase::writeDatabaseFloatArray ( const char *  item,
float *  val,
int  len 
)

Definition at line 96 of file rlbussignaldatabase.cpp.

{
  int  i;
  char vbuf[80];

  buf[0] = '\0';
  for(i=0; i<len; i++)
  {
    sprintf(vbuf,"%f,",val[i]);
    if(strlen(buf)+strlen(vbuf) >= sizeof(buf)-1) return -1;
    strcat(buf,vbuf);
  }
  sprintf(typebuf,"F%d",len);
  return writeDatabaseString(item);
}
int rlBussignalDatabase::writeDatabaseInt ( const char *  item,
int  val 
)

Definition at line 66 of file rlbussignaldatabase.cpp.

{
  sprintf(buf,"%d",val);
  sprintf(typebuf,"I1");
  return writeDatabaseString(item);
}
int rlBussignalDatabase::writeDatabaseIntArray ( const char *  item,
int *  val,
int  len 
)

Definition at line 73 of file rlbussignaldatabase.cpp.

{
  int  i;
  char vbuf[80];

  buf[0] = '\0';
  for(i=0; i<len; i++)
  {
    sprintf(vbuf,"%d,",val[i]);
    if(strlen(buf)+strlen(vbuf) >= sizeof(buf)-1) return -1;
    strcat(buf,vbuf);
  }
  sprintf(typebuf,"I%d",len);
  return writeDatabaseString(item);
}
int rlBussignalDatabase::writeDatabaseString ( const char *  item,
char *  val 
)

Definition at line 112 of file rlbussignaldatabase.cpp.

{
  sprintf(typebuf,"S%d",strlen(val));
  rlstrncpy(buf,val,sizeof(buf)-1);
  return writeDatabaseString(item);
}
int rlBussignalDatabase::writeDatabaseString ( const char *  item) [private]

Definition at line 119 of file rlbussignaldatabase.cpp.

{
  int  ret;
  char sqlbuf[rl_PRINTF_LENGTH];

  // Try an UPDATE
  ret = snprintf(sqlbuf,sizeof(sqlbuf)-1,"UPDATE %s SET datatype='%s', datavalue='%s' WHERE name='%s'",tableName,typebuf,buf,item);
  if(ret < 0)
  {
    printf("sqlbuf too small in writeDatabaseString\n");
    return -1;
  }
  ret = myquery(sqlbuf);
  if(ret > 0) return 0; // success

  // Try an INSERT
  ret = snprintf(sqlbuf,sizeof(sqlbuf)-1,"INSERT INTO %s VALUES ('%s','%s','%s')",tableName,item,typebuf,buf);
  if(ret < 0)
  {
    printf("sqlbuf too small in writeDatabaseString\n");
    return -1;
  }
  ret = myquery(sqlbuf);
  if(ret >= 0) return 0; // success
  return -1;             // failure
}

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:
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines