123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451 |
- #include "CDBResultSet.h"
- #include <string.h>
- namespace YADB
- {
- CDBResultSet::CDBResultSet()
- {
- __pQueryRes = 0;
- __CurRow = 0;
- __FieldCount = 0;
- }
- CDBResultSet::~CDBResultSet()
- {
- Close();
- }
- void CDBResultSet::__BuildFNameIdxLst()
- {
- if (0 == __pQueryRes)
- {
- return;
- }
- for ( int i = 0; i < __FieldCount; i++ )
- {
- MYSQL_FIELD *pField = mysql_fetch_field_direct( __pQueryRes, i );
- if ( pField == NULL )
- {
- continue;
- }
- __FNameIndexList.insert( std::make_pair( pField->name, i ) );
- }
- }
- bool CDBResultSet::Bind( MYSQL_RES *pQueryRes, std::string& Error )
- {
- Close();
- __pQueryRes = pQueryRes;
- if ( __pQueryRes != 0 )
- {
- __FieldCount = mysql_num_fields( pQueryRes );
- }
- else
- {
- Error = "Error,pQueryRes is null!";
- __FieldCount = 0;
- return false;
- }
- __BuildFNameIdxLst();
- return true;
- }
- void CDBResultSet::Close()
- {
- if ( 0 == __pQueryRes )
- {
- return;
- }
- mysql_free_result( __pQueryRes );
- __pQueryRes = 0;
- __CurRow = 0;
- __FieldCount = 0;
- __FNameIndexList.clear();
- }
- bool CDBResultSet::SeekData( my_ulonglong Offset, std::string& Error )
- {
- if ( 0 == __pQueryRes )
- {
- Error = "Error,__pQueryRes is not initialized!";
- return false;
- }
- mysql_data_seek( __pQueryRes, Offset );
- return true;
- }
- bool CDBResultSet::GetNextRecod( std::string & Error )
- {
- if ( 0 == __pQueryRes )
- {
- Error = "Error,__pQueryRes is not initialized!";
- return false;
- }
- if ( ( __CurRow = mysql_fetch_row( __pQueryRes ) ) != NULL )
- {
- return true;
- }
- else
- {
- Error = "Error, failed to mysql_fetch_row!";
- return false;
- }
- return true;
- }
- my_ulonglong CDBResultSet::GetRecordCount( std::string & Error )
- {
- if ( 0 == __pQueryRes )
- {
- Error = "Error,__pQueryRes is not initialized!";
- return DB_ERR_QUERY_RES_NOT_INITED;
- }
- return mysql_num_rows( __pQueryRes );
- }
- bool CDBResultSet::__GetField( int fdIndex, char*& szValue, bool& IsNull, std::string& Error )
- {
- IsNull = false;
- if ( 0 == __CurRow )
- {
- Error = "Error,__CurRow is not initialized!";
- return false;
- }
- if ( fdIndex < 0 || fdIndex >= __FieldCount )
- {
- Error = "fdIndex is invalid!";
- return false;
- }
- szValue = __CurRow[fdIndex];
- if ( szValue == NULL || szValue[0] == 0)
- {
- IsNull = true;
- }
- return true;
- }
- bool CDBResultSet::GetField( int fdIndex, int & value, std::string & Error )
- {
- value = 0;
- char* pField = 0;
- bool IsNull = false;
- if ( !__GetField( fdIndex, pField, IsNull, Error ) )
- {
- return false;
- }
- if ( !IsNull )
- {
- value = atoi( pField );
- }
- return true;
- }
- bool CDBResultSet::GetField( int fdIndex, unsigned int & value, std::string & Error )
- {
- value = 0;
- char* pField = 0;
- bool IsNull = false;
- if ( !__GetField( fdIndex, pField, IsNull, Error ) )
- {
- return false;
- }
- if ( !IsNull )
- {
- value = atoi( pField );
- }
- return true;
- }
- bool CDBResultSet::GetField( int fdIndex, long long & value, std::string & Error )
- {
- value = 0;
- char* pField = 0;
- bool IsNull = false;
- if ( !__GetField( fdIndex, pField, IsNull, Error ) )
- {
- return false;
- }
- if ( !IsNull )
- {
- value = atoll(pField);
- }
- return true;
- }
- bool CDBResultSet::GetField( int fdIndex, std::string & value, std::string & Error )
- {
- value = "";
- char* pField = 0;
- bool IsNull = false;
- if ( !__GetField( fdIndex, pField, IsNull, Error ) )
- {
- return false;
- }
- if ( !IsNull )
- {
- value = pField;
- }
- return true;
- }
- bool CDBResultSet::GetField( int fdIndex, char * value, int Length, std::string & Error )
- {
- memset( value, 0, Length );
- char* pField = 0;
- bool IsNull = false;
- if ( !__GetField( fdIndex, pField, IsNull, Error ) )
- {
- return false;
- }
- if ( !IsNull )
- {
- strncpy( value, pField, Length );
- }
- return true;
- }
- bool CDBResultSet::GetField( int fdIndex, bool & value, std::string & Error )
- {
- value = false;
- char* pField = 0;
- bool IsNull = false;
- if ( !__GetField( fdIndex, pField, IsNull, Error ) )
- {
- return false;
- }
- if ( !IsNull )
- {
- value = atoi( pField );
- }
- return true;
- }
- bool CDBResultSet::GetField( int fdIndex, float & value, std::string & Error )
- {
- value = 0.0;
- char* pField = 0;
- bool IsNull = false;
- if ( !__GetField( fdIndex, pField, IsNull, Error ) )
- {
- return false;
- }
- if ( !IsNull )
- {
- value = atof( pField );
- }
- return true;
- }
- bool CDBResultSet::GetField( int fdIndex, double & value, std::string & Error )
- {
- value = 0.0;
- char* pField = 0;
- bool IsNull = false;
- if (!__GetField( fdIndex, pField, IsNull, Error ) )
- {
- return false;
- }
- if ( !IsNull )
- {
- value = std::stod( pField );
- }
- return true;
- }
- bool CDBResultSet::GetField( int fdIndex, MYSQL_TIME & value, std::string & Error )
- {
- __DBHelper.InitMySQLTime( value );
- char* pField = 0;
- bool IsNull = false;
- if ( !__GetField( fdIndex, pField, IsNull, Error ) )
- {
- return false;
- }
- if ( !IsNull )
- {
- __DBHelper.String2DateTime( pField, value );
- }
- return true;
- }
- int CDBResultSet::GetFdIndexByName( const char * fdName, std::string & Error )
- {
- std::map<std::string,int>::iterator mit_fi;
- mit_fi = __FNameIndexList.find( fdName );
- if ( mit_fi != __FNameIndexList.end() )
- {
- return mit_fi->second;
- }
- Error = "Failed to find field: ";
- Error += fdName;
- return -1;
- }
- bool CDBResultSet::GetField( const char * fdName, int & value, std::string & Error )
- {
- int fdIndex = GetFdIndexByName( fdName, Error );
- if ( fdIndex >= 0 )
- {
- return GetField( fdIndex, value, Error );
- }
- return false;
- }
- bool CDBResultSet::GetField( const char * fdName, long long & value, std::string & Error )
- {
- int fdIndex = GetFdIndexByName( fdName, Error );
- if ( fdIndex >= 0 )
- {
- return GetField( fdIndex, value, Error );
- }
- return false;
- }
- bool CDBResultSet::GetField( const char * fdName, unsigned int & value, std::string & Error )
- {
- int fdIndex = GetFdIndexByName( fdName, Error );
- if ( fdIndex >= 0 )
- {
- return GetField( fdIndex, value, Error );
- }
- return false;
- }
- bool CDBResultSet::GetField( const char * fdName, std::string & value, std::string & Error )
- {
- int fdIndex = GetFdIndexByName( fdName, Error );
- if ( fdIndex >= 0 )
- {
- return GetField( fdIndex, value, Error );
- }
- return false;
- }
- bool CDBResultSet::GetField( const char * fdName, char * value, int Length, std::string & Error )
- {
- int fdIndex = GetFdIndexByName( fdName, Error );
- if ( fdIndex >= 0 )
- {
- return GetField( fdIndex, value, Length, Error );
- }
- return false;
- }
- bool CDBResultSet::GetField( const char * fdName, bool & value, std::string & Error )
- {
- int fdIndex = GetFdIndexByName( fdName, Error );
- if ( fdIndex >= 0 )
- {
- return GetField( fdIndex, value, Error );
- }
- return false;
- }
- bool CDBResultSet::GetField( const char * fdName, float & value, std::string & Error )
- {
- int fdIndex = GetFdIndexByName( fdName, Error );
- if ( fdIndex >= 0 )
- {
- return GetField( fdIndex, value, Error );
- }
- return false;
- }
- bool CDBResultSet::GetField( const char * fdName, double & value, std::string & Error )
- {
- int fdIndex = GetFdIndexByName( fdName, Error );
- if ( fdIndex >= 0 )
- {
- return GetField( fdIndex, value, Error );
- }
- return false;
- }
- bool CDBResultSet::GetField( const char * fdName, MYSQL_TIME & value, std::string & Error )
- {
- int fdIndex = GetFdIndexByName( fdName, Error );
- if ( fdIndex >= 0 )
- {
- return GetField( fdIndex, value, Error );
- }
- return false;
- }
- int CDBResultSet::IsNull( int fdIndex, std::string& Error )
- {
- if (0 == __CurRow)
- {
- Error = "Error,__CurRow is not initialized!";
- return -1;
- }
- if ( fdIndex < 0 || fdIndex >= __FieldCount )
- {
- Error = "fdIndex is invalid!";
- return -1;
- }
- char* pField = __CurRow[fdIndex];
- if ( pField == NULL || pField[0] == 0 )
- {
- return 1;
- }
- return 0;
- }
- }
|