| 2 |
* |
* |
| 3 |
* $Revision$ |
* $Revision$ |
| 4 |
* $Log$ |
* $Log$ |
| 5 |
|
* Revision 1.16 2004/11/27 06:29:29 youi |
| 6 |
|
* getAccountCountを定義. |
| 7 |
|
* dumpGidsを定義. |
| 8 |
|
* insertGroup, deleteGroup, updateGroupを定義. |
| 9 |
|
* getGroup, getGroupsを定義. |
| 10 |
|
* データベース初期前の呼出に対し,RES_DB_NOT_INITIALIZEDを返す処理を各関数に追加 |
| 11 |
|
* (未対応の関数が残っている) |
| 12 |
|
* |
| 13 |
* Revision 1.15 2004/11/27 02:22:22 aga |
* Revision 1.15 2004/11/27 02:22:22 aga |
| 14 |
* ・initializeDB前にaddSlashes()を呼ぶと落ちるのを修正. |
* ・initializeDB前にaddSlashes()を呼ぶと落ちるのを修正. |
| 15 |
* |
* |
| 201 |
*/ |
*/ |
| 202 |
int getAccountCount( sessionid_t sid ) |
int getAccountCount( sessionid_t sid ) |
| 203 |
{ |
{ |
| 204 |
return 0; |
if( mysql == NULL ) return 0; |
| 205 |
|
if( !isValidSessionID( sid ) ) return 0; |
| 206 |
|
|
| 207 |
|
int ret = 0; |
| 208 |
|
string sql; |
| 209 |
|
MYSQL_RES* result; |
| 210 |
|
MYSQL_ROW row; |
| 211 |
|
|
| 212 |
|
//アカウント数を求める |
| 213 |
|
sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_users "; |
| 214 |
|
if( mysql_query( mysql, sql.c_str( ) ) ){ |
| 215 |
|
fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) ); |
| 216 |
|
return 0; |
| 217 |
|
} |
| 218 |
|
result = mysql_store_result( mysql ) ; |
| 219 |
|
if( row = mysql_fetch_row(result) ){ |
| 220 |
|
ret = atoi( row[ 0 ] ); |
| 221 |
|
}else{ |
| 222 |
|
mysql_free_result( result ); |
| 223 |
|
return 0; |
| 224 |
|
} |
| 225 |
|
mysql_free_result( result ); |
| 226 |
|
return ret; |
| 227 |
} |
} |
| 228 |
|
|
| 229 |
/** |
/** |
| 236 |
*/ |
*/ |
| 237 |
result_t deleteAccount( sessionid_t sid, userid_t uid ) |
result_t deleteAccount( sessionid_t sid, userid_t uid ) |
| 238 |
{ |
{ |
| 239 |
|
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
| 240 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 241 |
|
|
| 242 |
string sql; |
string sql; |
| 291 |
*/ |
*/ |
| 292 |
result_t getAccounts( sessionid_t sid, const userid_t* uids, int uidsLen, criteria_t* cri, const account_t** accounts, int* accountsLen ) |
result_t getAccounts( sessionid_t sid, const userid_t* uids, int uidsLen, criteria_t* cri, const account_t** accounts, int* accountsLen ) |
| 293 |
{ |
{ |
| 294 |
|
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
| 295 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 296 |
|
|
| 297 |
string sql; |
string sql; |
| 375 |
*/ |
*/ |
| 376 |
result_t insertAccount( sessionid_t sid, const account_t* account ) |
result_t insertAccount( sessionid_t sid, const account_t* account ) |
| 377 |
{ |
{ |
| 378 |
|
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
| 379 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 380 |
|
|
| 381 |
string sql; |
string sql; |
| 482 |
*/ |
*/ |
| 483 |
result_t updateAccount( sessionid_t sid, const account_t* account ) |
result_t updateAccount( sessionid_t sid, const account_t* account ) |
| 484 |
{ |
{ |
| 485 |
|
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
| 486 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 487 |
|
|
| 488 |
string sql; |
string sql; |
| 621 |
*/ |
*/ |
| 622 |
result_t dumpGids( sessionid_t sid, criteria_t* cri, groupid_t** gids, int* gidsLen ) |
result_t dumpGids( sessionid_t sid, criteria_t* cri, groupid_t** gids, int* gidsLen ) |
| 623 |
{ |
{ |
| 624 |
return RES_ERROR; |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
| 625 |
|
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 626 |
|
|
| 627 |
|
string sql; |
| 628 |
|
MYSQL_RES* result; |
| 629 |
|
MYSQL_ROW row; |
| 630 |
|
groupid_t* dst = 0; |
| 631 |
|
|
| 632 |
|
//グループ数を求める |
| 633 |
|
sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_groups "; |
| 634 |
|
sql += criteria2str( cri ); |
| 635 |
|
if( mysql_query( mysql, sql.c_str( ) ) ){ |
| 636 |
|
fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) ); |
| 637 |
|
return RES_DB_QUERY_ERROR; |
| 638 |
|
} |
| 639 |
|
result = mysql_store_result( mysql ) ; |
| 640 |
|
if( row = mysql_fetch_row(result) ){ |
| 641 |
|
*gidsLen = atoi( row[ 0 ] ); |
| 642 |
|
dst = new groupid_t[ *gidsLen ]; |
| 643 |
|
}else{ |
| 644 |
|
mysql_free_result( result ); |
| 645 |
|
return RES_ERROR; |
| 646 |
|
} |
| 647 |
|
mysql_free_result( result ); |
| 648 |
|
|
| 649 |
|
sql = "SELECT gid FROM " + dbprefix + "_vpaccount_groups "; |
| 650 |
|
sql += criteria2str( cri ); |
| 651 |
|
if( mysql_query( mysql, sql.c_str( ) ) ){ |
| 652 |
|
fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) ); |
| 653 |
|
return RES_DB_QUERY_ERROR; |
| 654 |
|
} |
| 655 |
|
|
| 656 |
|
result = mysql_use_result( mysql ) ; |
| 657 |
|
for( int i = 0; ( row = mysql_fetch_row(result) ) != 0 && i < *gidsLen ; i++ ){ |
| 658 |
|
dst[ i ] = atoi( row[ 0 ] ); |
| 659 |
|
} |
| 660 |
|
mysql_free_result( result ); |
| 661 |
|
*gids = dst; |
| 662 |
|
|
| 663 |
|
return RES_OK; |
| 664 |
} |
} |
| 665 |
|
|
| 666 |
/** |
/** |
| 725 |
*/ |
*/ |
| 726 |
result_t deleteGroup( sessionid_t sid, groupid_t gid ) |
result_t deleteGroup( sessionid_t sid, groupid_t gid ) |
| 727 |
{ |
{ |
| 728 |
return RES_ERROR; |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
| 729 |
|
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 730 |
|
|
| 731 |
|
string sql; |
| 732 |
|
sql = "DELETE FROM " + dbprefix + "_vpaccount_groups "; |
| 733 |
|
sql += "WHERE gid = " + string( unsignedIntToString( gid ) ); |
| 734 |
|
if( mysql_query( mysql, sql.c_str( ) ) ){ |
| 735 |
|
fprintf( stderr, "%s\n", sql.c_str( ) ); |
| 736 |
|
fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) ); |
| 737 |
|
return RES_DB_QUERY_ERROR; |
| 738 |
|
} |
| 739 |
|
return RES_OK; |
| 740 |
} |
} |
| 741 |
|
|
| 742 |
/** |
/** |
| 749 |
*/ |
*/ |
| 750 |
result_t insertGroup( sessionid_t sid, const group_t* group ) |
result_t insertGroup( sessionid_t sid, const group_t* group ) |
| 751 |
{ |
{ |
| 752 |
return RES_ERROR; |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
| 753 |
|
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 754 |
|
|
| 755 |
|
string sql; |
| 756 |
|
sql = "INSERT INTO " + dbprefix + "_vpaccount_groups ( gname, gdesc ) VALUES ("; |
| 757 |
|
sql += "'" + string( addSlashes( group -> getGname( ) ) ) + "', "; |
| 758 |
|
sql += "'" + string( addSlashes( group -> getDesc( ) ) ) + "' )"; |
| 759 |
|
if( mysql_query( mysql, sql.c_str( ) ) ){ |
| 760 |
|
fprintf( stderr, "%s\n", sql.c_str( ) ); |
| 761 |
|
fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) ); |
| 762 |
|
return RES_DB_QUERY_ERROR; |
| 763 |
|
} |
| 764 |
|
return RES_OK; |
| 765 |
} |
} |
| 766 |
|
|
| 767 |
/** |
/** |
| 774 |
*/ |
*/ |
| 775 |
result_t updateGroup( sessionid_t sid, const group_t* group ) |
result_t updateGroup( sessionid_t sid, const group_t* group ) |
| 776 |
{ |
{ |
| 777 |
return RES_ERROR; |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
| 778 |
|
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 779 |
|
|
| 780 |
|
string sql; |
| 781 |
|
sql = "UPDATE " + dbprefix + "_vpaccount_groups SET "; |
| 782 |
|
sql += "gname='" + string( addSlashes( group -> getGname( ) ) ) + "', "; |
| 783 |
|
sql += "gdesc='" + string( addSlashes( group -> getDesc( ) ) ) + "' "; |
| 784 |
|
sql += "WHERE gid=" + string( unsignedIntToString( group -> getGID( ) ) ); |
| 785 |
|
if( mysql_query( mysql, sql.c_str( ) ) ){ |
| 786 |
|
fprintf( stderr, "%s\n", sql.c_str( ) ); |
| 787 |
|
fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) ); |
| 788 |
|
return RES_DB_QUERY_ERROR; |
| 789 |
|
} |
| 790 |
|
return RES_OK; |
| 791 |
} |
} |
| 792 |
|
|
| 793 |
/** |
/** |
| 800 |
*/ |
*/ |
| 801 |
result_t getGroup( sessionid_t sid, groupid_t gid, const group_t** group ) |
result_t getGroup( sessionid_t sid, groupid_t gid, const group_t** group ) |
| 802 |
{ |
{ |
| 803 |
return RES_ERROR; |
int len; |
| 804 |
|
static criteria c; |
| 805 |
|
result_t res = getGroups( sid, &gid, 1, &c, group, &len ); |
| 806 |
|
if( len == 0 ) return RES_NO_SUCH_GROUP; |
| 807 |
|
return res; |
| 808 |
} |
} |
| 809 |
|
|
| 810 |
/** |
/** |
| 817 |
*/ |
*/ |
| 818 |
result_t getGroups( sessionid_t sid, groupid_t* gids, int gidsLen, criteria_t* cri, const group_t** groups, int* groupsLen ) |
result_t getGroups( sessionid_t sid, groupid_t* gids, int gidsLen, criteria_t* cri, const group_t** groups, int* groupsLen ) |
| 819 |
{ |
{ |
| 820 |
return RES_ERROR; |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
| 821 |
|
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 822 |
|
|
| 823 |
|
string sql; |
| 824 |
|
MYSQL_RES* result; |
| 825 |
|
MYSQL_ROW row; |
| 826 |
|
group_t* dst = new group_t[ gidsLen ]; |
| 827 |
|
|
| 828 |
|
sql += "SELECT gid, gname, gdesc "; |
| 829 |
|
sql += "FROM " + dbprefix + "_vpaccount_groups "; |
| 830 |
|
sql += "WHERE gid=" + string( unsignedIntToString( gids[ 0 ] ) ); |
| 831 |
|
for( int i = 1; i < gidsLen; i++ ){ |
| 832 |
|
sql += " OR gid=" + string( unsignedIntToString( gids[ i ] ) ); |
| 833 |
|
} |
| 834 |
|
sql += criteria2str( cri ); |
| 835 |
|
if( mysql_query( mysql, sql.c_str( ) ) ){ |
| 836 |
|
fprintf( stderr, "%s\n", sql.c_str( ) ); |
| 837 |
|
fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) ); |
| 838 |
|
return RES_DB_QUERY_ERROR; |
| 839 |
|
} |
| 840 |
|
result = mysql_use_result( mysql ) ; |
| 841 |
|
*groupsLen=0; |
| 842 |
|
for( int i = 0; ( row = mysql_fetch_row(result) ) != 0 && i < gidsLen ; i++ ){ |
| 843 |
|
dst[ i ].setGID( atoi( row[ 0 ] ) ); |
| 844 |
|
dst[ i ].setGname( row[ 1 ] ); |
| 845 |
|
dst[ i ].setDesc( row[ 2 ] ); |
| 846 |
|
( *groupsLen )++; |
| 847 |
|
} |
| 848 |
|
mysql_free_result( result ); |
| 849 |
|
*groups = dst; |
| 850 |
|
return RES_OK; |
| 851 |
} |
} |
| 852 |
|
|
| 853 |
/** |
/** |
| 875 |
*/ |
*/ |
| 876 |
result_t getUid( const char* uname, userid_t* uid ) |
result_t getUid( const char* uname, userid_t* uid ) |
| 877 |
{ |
{ |
| 878 |
string sql; |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
|
|
|
| 879 |
if( uname == NULL ) return RES_ERROR; |
if( uname == NULL ) return RES_ERROR; |
| 880 |
|
|
| 881 |
|
string sql; |
| 882 |
string uname2 = addSlashes( uname ); |
string uname2 = addSlashes( uname ); |
| 883 |
sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + uname2 + "';"; |
sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + uname2 + "';"; |
| 884 |
if( mysql_query( mysql, sql.c_str( ) ) ){ |
if( mysql_query( mysql, sql.c_str( ) ) ){ |
| 937 |
*/ |
*/ |
| 938 |
result_t loginUser(const char* uname, const char* passwd, sessionid_t* session ) |
result_t loginUser(const char* uname, const char* passwd, sessionid_t* session ) |
| 939 |
{ |
{ |
| 940 |
|
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
| 941 |
|
|
| 942 |
result_t ret; |
result_t ret; |
| 943 |
string sql; |
string sql; |
| 944 |
|
|
| 1012 |
*/ |
*/ |
| 1013 |
result_t createSession( const char* sessionid, userid_t uid, unsigned long remoteHost, sessionid_t* session ) |
result_t createSession( const char* sessionid, userid_t uid, unsigned long remoteHost, sessionid_t* session ) |
| 1014 |
{ |
{ |
| 1015 |
|
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1016 |
|
|
| 1017 |
result_t ret; |
result_t ret; |
| 1018 |
string sql; |
string sql; |
| 1019 |
|
|
| 1050 |
*/ |
*/ |
| 1051 |
result_t getSession( sessionid_t sess_id, const session_t** ppsession ) |
result_t getSession( sessionid_t sess_id, const session_t** ppsession ) |
| 1052 |
{ |
{ |
| 1053 |
|
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1054 |
|
|
| 1055 |
result_t ret; |
result_t ret; |
| 1056 |
string sql; |
string sql; |
| 1057 |
|
|
| 1094 |
*/ |
*/ |
| 1095 |
bool isValidSessionID( sessionid_t sid ) |
bool isValidSessionID( sessionid_t sid ) |
| 1096 |
{ |
{ |
| 1097 |
|
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1098 |
|
|
| 1099 |
string sql; |
string sql; |
| 1100 |
string sidstr; |
string sidstr; |
| 1101 |
char buf[ 12 ]; |
char buf[ 12 ]; |
| 1117 |
void freeResult( const account_t* ptr ){ delete[] ( account_t* )ptr; } |
void freeResult( const account_t* ptr ){ delete[] ( account_t* )ptr; } |
| 1118 |
void freeResult( const group_t* ptr ){ delete[] ( group_t* )ptr; } |
void freeResult( const group_t* ptr ){ delete[] ( group_t* )ptr; } |
| 1119 |
void freeResult( const session_t* ptr ){ delete[] ( session_t* )ptr; } |
void freeResult( const session_t* ptr ){ delete[] ( session_t* )ptr; } |
| 1120 |
void freeResult( const int* ptr ){ delete[] ( int* )ptr; } |
void freeResult( const unsigned int* ptr ){ delete[] ( unsigned int* )ptr; } |
| 1121 |
|
|
| 1122 |
static string errstr; |
static string errstr; |
| 1123 |
const char* getLastErrorString() |
const char* getLastErrorString() |