Commit 480ee022 authored by jmiller/ndbdev@mysql.com/ndb15.mysql.com's avatar jmiller/ndbdev@mysql.com/ndb15.mysql.com
Browse files

Adding dbutil to ndb test lib

parent bb6346fd
Loading
Loading
Loading
Loading
+97 −0
Original line number Diff line number Diff line
// dbutil.h: interface for the database utilities class.
//////////////////////////////////////////////////////////////////////
// Supplies a database to the test application
//////////////////////////////////////////////////////////////////////

#ifndef DBUTIL_HPP
#define DBUTIL_HPP

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <mysql.h>
//include "rand.h"
#include <stdlib.h>

//#define DEBUG
#define  DIE_UNLESS(expr) \
           ((void) ((expr) ? 0 : (Die(__FILE__, __LINE__, #expr), 0)))
#define DIE(expr) \
          Die(__FILE__, __LINE__, #expr)
#define myerror(msg) PrintError(msg)
#define mysterror(stmt, msg) PrintStError(stmt, msg)
#define  CheckStmt(stmt) \
{ \
if ( stmt == 0) \
  myerror(NULL); \
DIE_UNLESS(stmt != 0); \
}

#define  check_execute(stmt, r) \
{ \
if (r) \
  mysterror(stmt, NULL); \
DIE_UNLESS(r == 0);\
}

#define TRUE 1
#define FALSE 0


class dbutil
{
public:

  dbutil(const char * databaseName);
  ~dbutil();

  void  DatabaseLogin(const char * system,
                      const char * usr,
                      const char * password,
                      unsigned int portIn,
                      const char * sockIn,
                      bool transactional);
  char * GetDbName(){return dbs;};
  char * GetUser(){return user;};
  char * GetPassword(){return pass;};
  char * GetHost(){return host;};
  char * GetSocket(){return socket;};
  const char * GetServerType(){return mysql_get_server_info(myDbHandel);};
  MYSQL* GetDbHandel(){return myDbHandel;};
  MYSQL_STMT *STDCALL MysqlSimplePrepare(const char *query);
  int Select_DB();
  int Do_Query(char * stm);
  const char * GetError();
  int GetErrorNumber();
  unsigned long SelectCountTable(const char * table);

private:

  //Connect variables
  char * databaseName; //hold results file name
  char host[256];                   // Computer to connect to
  char user[256];                   // MySQL User
  char pass[256];                   // MySQL User Password
  char dbs[256];                    // Database to use (TPCB)
  unsigned int port;               // MySQL Server port
  char socket[256];             // MySQL Server Unix Socket
  MYSQL  *myDbHandel;

  void DatabaseLogout();

  void SetDbName(const char * name){strcpy((char *)dbs, name);};
  void SetUser(const char * userName){strcpy((char *)user, userName);};
  void SetPassword(const char * password){strcpy((char *)pass,password);};
  void SetHost(const char * system){strcpy((char*)host, system);};
  void SetPort(unsigned int portIn){port=portIn;};
  void SetSocket(const char * sockIn){strcpy((char *)socket, sockIn);};
  void PrintError(const char *msg);
  void PrintStError(MYSQL_STMT *stmt, const char *msg);
  void Die(const char *file, int line, const char *expr); // stop program
  
};
#endif
+1 −1
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@ libNDBT_a_SOURCES = \
	NdbRestarter.cpp NdbRestarts.cpp NDBT_Output.cpp \
	NdbBackup.cpp  NdbConfig.cpp NdbGrep.cpp NDBT_Table.cpp \
	NdbSchemaCon.cpp NdbSchemaOp.cpp getarg.c \
	CpcClient.cpp NdbMixRestarter.cpp NDBT_Thread.cpp
	CpcClient.cpp NdbMixRestarter.cpp NDBT_Thread.cpp dbutil.cpp

INCLUDES_LOC = -I$(top_srcdir)/storage/ndb/src/common/mgmcommon -I$(top_srcdir)/storage/ndb/include/mgmcommon -I$(top_srcdir)/storage/ndb/include/kernel -I$(top_srcdir)/storage/ndb/src/mgmapi

+176 −0
Original line number Diff line number Diff line
// dbutil.cpp: implementation of the database utilities class.
//
//////////////////////////////////////////////////////////////////////

#include "dbutil.hpp"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
dbutil::dbutil(const char * dbname)
{
  memset(host,' ',sizeof(host));
  memset(user,' ',sizeof(pass));
  memset(dbs,' ',sizeof(dbs));
  port = 0;
  memset(socket,' ',sizeof(socket));
  this->SetDbName(dbname);
}

dbutil::~dbutil()
{
  this->DatabaseLogout();
}

//////////////////////////////////////////////////////////////////////
// Database Login
//////////////////////////////////////////////////////////////////////
void dbutil::DatabaseLogin(const char* system,
                           const char* usr,
                           const char* password,
                           unsigned int portIn,
                           const char* sockIn,
                           bool transactional
                           ){
  if (!(myDbHandel = mysql_init(NULL))){
    myerror("mysql_init() failed");
    exit(1);
  }
  this->SetUser(usr);
  this->SetHost(system);
  this->SetPassword(password);
  this->SetPort(portIn);
  this->SetSocket(sockIn);

  if (!(mysql_real_connect(myDbHandel, host, user, pass, "test", port, socket, 0))){
    myerror("connection failed");
    mysql_close(myDbHandel);
    fprintf(stdout, "\n Check the connection options using --help or -?\n");
    exit(1);
  }

  myDbHandel->reconnect= 1;

  /* set AUTOCOMMIT */
  if(!transactional){
    mysql_autocommit(myDbHandel, TRUE);
  }
  else{
    mysql_autocommit(myDbHandel, FALSE);
  }

  fprintf(stdout, "\n\tConnected to MySQL server version: %s (%lu)\n\n", 
          mysql_get_server_info(myDbHandel),
    (unsigned long) mysql_get_server_version(myDbHandel));
}

//////////////////////////////////////////////////////////////////////
// Database Logout
//////////////////////////////////////////////////////////////////////
void dbutil::DatabaseLogout(){
  if (myDbHandel){
    fprintf(stdout, "\n\tClosing the MySQL database connection ...\n\n");
    mysql_close(myDbHandel);
  }
}

//////////////////////////////////////////////////////////////////////
// Prepare MySQL Statements Cont
//////////////////////////////////////////////////////////////////////
MYSQL_STMT *STDCALL dbutil::MysqlSimplePrepare(const char *query){
#ifdef DEBUG
printf("Inside dbutil::MysqlSimplePrepare\n");
#endif
int result = 0;
  MYSQL_STMT *my_stmt= mysql_stmt_init(this->GetDbHandel());
  if (my_stmt && (result = mysql_stmt_prepare(my_stmt, query, strlen(query)))){
    printf("res = %s\n",mysql_stmt_error(my_stmt));
    mysql_stmt_close(my_stmt);
    return 0;
  }
  return my_stmt;
}
//////////////////////////////////////////////////////////////////////
// Error Printing
//////////////////////////////////////////////////////////////////////
void dbutil::PrintError(const char *msg){
  if (this->GetDbHandel()
      && mysql_errno(this->GetDbHandel())){
      if (this->GetDbHandel()->server_version){
        fprintf(stdout, "\n [MySQL-%s]",
                this->GetDbHandel()->server_version);
      }
      else
        fprintf(stdout, "\n [MySQL]");
      fprintf(stdout, "[%d] %s\n",
              mysql_errno(this->GetDbHandel()),
              mysql_error(this->GetDbHandel()));
  }
  else if (msg)
    fprintf(stderr, " [MySQL] %s\n", msg);
}

void dbutil::PrintStError(MYSQL_STMT *stmt, const char *msg)
{
  if (stmt && mysql_stmt_errno(stmt))
  {
    if (this->GetDbHandel()
        && this->GetDbHandel()->server_version)
      fprintf(stdout, "\n [MySQL-%s]",
              this->GetDbHandel()->server_version);
    else
      fprintf(stdout, "\n [MySQL]");

    fprintf(stdout, "[%d] %s\n", mysql_stmt_errno(stmt),
    mysql_stmt_error(stmt));
  }
  else if (msg)
   fprintf(stderr, " [MySQL] %s\n", msg);
}
/////////////////////////////////////////////////////
int dbutil::Select_DB()
{
  return mysql_select_db(this->GetDbHandel(),
                         this->GetDbName());
}
////////////////////////////////////////////////////
int dbutil::Do_Query(char * stm)
{
  return mysql_query(this->GetDbHandel(), stm);
}
////////////////////////////////////////////////////
const char * dbutil::GetError()
{
  return mysql_error(this->GetDbHandel());
}
////////////////////////////////////////////////////
int dbutil::GetErrorNumber()
{
  return mysql_errno(this->GetDbHandel());
}
////////////////////////////////////////////////////
unsigned long dbutil::SelectCountTable(const char * table)
{
	unsigned long count = 0;
    MYSQL_RES *result;
    char query[1024];
    MYSQL_ROW row;
        
    sprintf(query,"select count(*) from `%s`", table);
    if (mysql_query(this->GetDbHandel(),query) || !(result=mysql_store_result(this->GetDbHandel())))
    {
      printf("error\n");
      return 1;
    }
    row= mysql_fetch_row(result);
    count= (ulong) strtoull(row[0], (char**) 0, 10);
    mysql_free_result(result);
    
    return count;
}
void dbutil::Die(const char *file, int line, const char *expr){
  fprintf(stderr, "%s:%d: check failed: '%s'\n", file, line, expr);
  abort();
}