Advertisement
Guest User

Untitled

a guest
May 8th, 2017
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.21 KB | None | 0 0
  1. #include "database.h"
  2. #include "../log.h"
  3.  
  4. // constructor
  5. CDatabase::CDatabase( char* server , char* username, char* password, char* database, unsigned int port , MYSQL* mysql)
  6. {
  7.     Server = server;
  8.     Username = username;
  9.     Password = password;
  10.     Database = database;
  11.     Port = port;    
  12.     Mysql = mysql;
  13.     SQLMutex = PTHREAD_MUTEX_INITIALIZER;
  14.     mysql_init( Mysql );
  15. }
  16.  
  17. // deconstructor
  18. CDatabase::~CDatabase( )
  19. {
  20. }
  21.  
  22. // disconnect from mysql
  23. void CDatabase::Disconnect( )
  24. {
  25.     mysql_close( Mysql );
  26. }
  27.  
  28. int CDatabase::Connect( )
  29. {
  30.     Log( MSG_INFO, "Connecting to MySQL" );
  31.     if(!mysql_real_connect( Mysql, Server, Username, Password, Database,Port, NULL, 0 ))
  32.     {
  33.         Log( MSG_FATALERROR, "Error connecting to MySQL server: %s\n", mysql_error( Mysql ) );
  34.         return -1;
  35.     }
  36.     if(!QExecute("SET SESSION interactive_timeout=%i", 2678400))
  37.         Log( MSG_WARNING, "Can't change timeout session");
  38.     else
  39.         Log( MSG_INFO, "SQL timeout set to %i seconds", 2678400);
  40.            
  41.     return 0;
  42. }
  43.  
  44. // reconnect to mysql
  45. int CDatabase::Reconnect( )
  46. {
  47.     if(!mysql_real_connect( Mysql, Server, Username, Password, Database,Port, NULL, 0 ))
  48.     {
  49.             Log( MSG_FATALERROR, "Error reconnecting to MySQL server: %s\n", mysql_error( Mysql ) );
  50.             return -1;
  51.     }
  52.     if(!QExecute("SET SESSION interactive_timeout=%i", 2678400))
  53.         Log( MSG_WARNING, "Can't change timeout session");
  54.     else
  55.         Log( MSG_INFO, "SQL timeout set to %i seconds", 2678400);
  56.        
  57.     return 0;
  58. }
  59.  
  60. // execute query
  61. bool CDatabase::QExecute( char *Format,... )
  62. {
  63.     bool Qfail = true;
  64.     char query[1024];
  65.     va_list ap;
  66.     va_start( ap, Format );
  67.     vsprintf( query, Format, ap );
  68.     va_end  ( ap );    
  69.     Log( MSG_QUERY, query );   
  70.     pthread_mutex_lock( &SQLMutex );
  71.     while(Qfail)
  72.     {
  73.         if(mysql_query( Mysql, query )!=0)
  74.         {
  75.             Log( MSG_FATALERROR, "Could not execute query: %s", mysql_error( Mysql ) );  
  76.             if(Reconnect( )==-1)
  77.             {
  78.                 Log( MSG_FATALERROR, "Could not execute query: %s", mysql_error( Mysql ) );  
  79.                 pthread_mutex_unlock( &SQLMutex );        
  80.                 return false;
  81.             }
  82.             else Qfail = false;
  83.         }
  84.         else Qfail = false;
  85.     }
  86.     pthread_mutex_unlock( &SQLMutex );            
  87.     return true;    
  88. }
  89.  
  90. MYSQL_RES* CDatabase::QStore( char *Format, ...)
  91. {
  92.     bool Qfail = true;    
  93.     char query[1024];
  94.     va_list ap;
  95.     va_start( ap, Format );
  96.     vsprintf( query, Format, ap );
  97.     va_end  ( ap );  
  98.     result = NULL;
  99.     Log( MSG_QUERY, query );    
  100.     pthread_mutex_lock( &SQLMutex );  
  101.     while(Qfail)
  102.     {    
  103.         if(mysql_query( Mysql, query )!=0)
  104.         {
  105.             Log( MSG_FATALERROR, "Could not execute query: %s", mysql_error( Mysql ) );  
  106.             if(Reconnect( )==-1)
  107.             {
  108.                 Log( MSG_FATALERROR, "Could not execute query: %s", mysql_error( Mysql ) );  
  109.                 pthread_mutex_unlock( &SQLMutex );        
  110.                 return false;
  111.             }
  112.             else Qfail = false;
  113.         }    
  114.         else Qfail = false;
  115.     }
  116.     result = mysql_store_result( Mysql );
  117.     return result;
  118. }
  119.  
  120. MYSQL_RES* CDatabase::QUse( char *Format, ...)
  121. {
  122.     bool Qfail = true;    
  123.     char query[1024];
  124.     va_list ap;
  125.     va_start( ap, Format );
  126.     vsprintf( query, Format, ap );
  127.     va_end  ( ap );  
  128.     result = NULL;
  129.     Log( MSG_QUERY, query );    
  130.     pthread_mutex_lock( &SQLMutex );  
  131.     while(Qfail)
  132.     {    
  133.         if(mysql_query( Mysql, query )!=0)
  134.         {
  135.             Log( MSG_FATALERROR, "Could not execute query: %s", mysql_error( Mysql ) );  
  136.             if(Reconnect( )==-1)
  137.             {
  138.                 Log( MSG_FATALERROR, "Could not execute query: %s", mysql_error( Mysql ) );  
  139.                 pthread_mutex_unlock( &SQLMutex );        
  140.                 return false;
  141.             }
  142.             else Qfail = false;
  143.         }    
  144.         else Qfail = false;
  145.     }
  146.     result = mysql_use_result( Mysql );
  147.     return result;
  148. }
  149.  
  150. void CDatabase::QFree( )
  151. {
  152.     mysql_free_result( result );
  153.     pthread_mutex_unlock( &SQLMutex );
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement