| 2 |
* |
* |
| 3 |
* $Revision$ |
* $Revision$ |
| 4 |
* $Log$ |
* $Log$ |
| 5 |
|
* Revision 1.73 2005/02/25 07:41:35 tani |
| 6 |
|
* getGroupItemID追加. |
| 7 |
|
* item, indexのlimitフィールドを登録,更新処理に追加. |
| 8 |
|
* |
| 9 |
* Revision 1.72 2005/02/25 01:03:42 tani |
* Revision 1.72 2005/02/25 01:03:42 tani |
| 10 |
* dbtype==DBTYPE_SQLITEの時の処理を分岐. |
* dbtype==DBTYPE_SQLITEの時の処理を分岐. |
| 11 |
* |
* |
| 1260 |
string sql; |
string sql; |
| 1261 |
account_t* dst = new account_t[ uidsLen ]; |
account_t* dst = new account_t[ uidsLen ]; |
| 1262 |
|
|
| 1263 |
sql += "SELECT u1.uid, u1.name, u1.uname, u1.email, u1.url, u1.user_avatar, u1.user_regdate, u1.user_icq, u1.user_from, u1.user_sig, u1.user_viewemail, u1.actkey, u1.user_aim, u1.user_yim, u1.user_msnm, u1.pass, u1.posts, u1.attachsig, u1.rank, u1.level, u1.theme, u1.timezone_offset, u1.last_login, u1.umode, u1.uorder, u1.notify_method, u1.notify_mode, u1.user_occ, u1.bio, u1.user_intrest, u1.user_mailok, u2.activate, u2.address, u2.division, u2.tel, u2.company_name, u2.country, u2.zipcode, u2.fax, u2.notice_mail, u2.notice_mail_since, u2.private_index_id "; |
sql += "SELECT u1.uid, u1.name, u1.uname, u1.email, u1.url, u1.user_avatar, u1.user_regdate, u1.user_icq, u1.user_from, u1.user_sig, u1.user_viewemail, u1.actkey, u1.user_aim, u1.user_yim, u1.user_msnm, u1.pass, u1.posts, u1.attachsig, u1.rank, u1.level, u1.theme, u1.timezone_offset, u1.last_login, u1.umode, u1.uorder, u1.notify_method, u1.notify_mode, u1.user_occ, u1.bio, u1.user_intrest, u1.user_mailok, u2.activate, u2.address, u2.division, u2.tel, u2.company_name, u2.country, u2.zipcode, u2.fax, u2.notice_mail, u2.notice_mail_since, u2.private_index_id, u2.private_item_number_limit, u2.private_index_number_limit, u2.private_item_storage_limit "; |
| 1264 |
sql += "FROM " + dbprefix + "_users AS u1, " + dbprefix + "_xnpaccount_users AS u2 "; |
sql += "FROM " + dbprefix + "_users AS u1, " + dbprefix + "_xnpaccount_users AS u2 "; |
| 1265 |
sql += "WHERE u1.uid = u2.uid "; |
sql += "WHERE u1.uid = u2.uid "; |
| 1266 |
if( uidsLen > 0 ){ |
if( uidsLen > 0 ){ |
| 1279 |
syslog_printf( "SQLAllocHandle" ); |
syslog_printf( "SQLAllocHandle" ); |
| 1280 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1281 |
syslog_printf( "SQLExecDirect" ); |
syslog_printf( "SQLExecDirect" ); |
| 1282 |
SQLLEN len = 0; |
SQLLEN cbUid = 0, cbStorageLimit = 0; |
| 1283 |
userid_t uid = 0; |
userid_t uid = 0; |
| 1284 |
SQLBindCol( hstmt, 1, SQL_C_ULONG, &uid, 0, &len ); |
SQLDOUBLE storage_limit = 0; |
| 1285 |
|
SQLBindCol( hstmt, 1, SQL_C_ULONG, &uid, 0, &cbUid ); |
| 1286 |
|
SQLBindCol( hstmt, 45, SQL_C_DOUBLE, &storage_limit, 0, &cbStorageLimit ); |
| 1287 |
syslog_printf( "SQLBindCol" ); |
syslog_printf( "SQLBindCol" ); |
| 1288 |
*accountsLen=0; |
*accountsLen=0; |
| 1289 |
for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < uidsLen ; i++ ){ |
for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < uidsLen ; i++ ){ |
| 1330 |
dst[ i ].setNoticeMail( atoi( getResultCol( hstmt, 40 ).c_str() )); |
dst[ i ].setNoticeMail( atoi( getResultCol( hstmt, 40 ).c_str() )); |
| 1331 |
dst[ i ].setNoticeMailSince( atoi( getResultCol( hstmt, 41 ).c_str() )); |
dst[ i ].setNoticeMailSince( atoi( getResultCol( hstmt, 41 ).c_str() )); |
| 1332 |
dst[ i ].setPrivateIndexID( atoi( getResultCol( hstmt, 42 ).c_str() )); |
dst[ i ].setPrivateIndexID( atoi( getResultCol( hstmt, 42 ).c_str() )); |
| 1333 |
syslog_printf( "set to account_t %d", i ); |
dst[ i ].setItemNumberLimit( atoi( getResultCol( hstmt, 43 ).c_str() )); |
| 1334 |
|
dst[ i ].setIndexNumberLimit( atoi( getResultCol( hstmt, 44 ).c_str() )); |
| 1335 |
|
dst[ i ].setItemStorageLimit( storage_limit ); |
| 1336 |
( *accountsLen )++; |
( *accountsLen )++; |
| 1337 |
} |
} |
| 1338 |
*accounts = dst; |
*accounts = dst; |
| 1513 |
SQLCHAR zipcode[XNP_ACCOUNT_ZIPCODE_LEN+1]; |
SQLCHAR zipcode[XNP_ACCOUNT_ZIPCODE_LEN+1]; |
| 1514 |
SQLCHAR fax[XNP_ACCOUNT_FAX_LEN+1]; |
SQLCHAR fax[XNP_ACCOUNT_FAX_LEN+1]; |
| 1515 |
SQLLEN cbAddress = SQL_NTS, cbDivision = SQL_NTS, cbTel = SQL_NTS, cbCompany_name = SQL_NTS, cbCountry = SQL_NTS, cbZipcode = SQL_NTS, cbFax = SQL_NTS; |
SQLLEN cbAddress = SQL_NTS, cbDivision = SQL_NTS, cbTel = SQL_NTS, cbCompany_name = SQL_NTS, cbCountry = SQL_NTS, cbZipcode = SQL_NTS, cbFax = SQL_NTS; |
| 1516 |
SQLLEN cbUid = 0, cbActivate = 0, cbNotice_mail = 0, cbNotice_mail_since = 0; |
SQLLEN cbUid = 0, cbActivate = 0, cbNotice_mail = 0, cbNotice_mail_since = 0, cbItem_number_limit = 0, cbIndex_number_limit = 0, cbItem_storage_limit = 0; |
| 1517 |
SQLUINTEGER notice_mail; |
SQLUINTEGER notice_mail; |
| 1518 |
SQLUINTEGER notice_mail_since; |
SQLUINTEGER notice_mail_since; |
| 1519 |
|
SQLINTEGER item_number_limit; |
| 1520 |
|
SQLINTEGER index_number_limit; |
| 1521 |
|
SQLDOUBLE item_storage_limit; |
| 1522 |
|
|
| 1523 |
if( ret == RES_OK && ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
if( ret == RES_OK && ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1524 |
string sql; |
string sql; |
| 1525 |
sql = "INSERT INTO " + dbprefix + "_xnpaccount_users (uid, activate, address, division, tel, company_name, country, zipcode, fax, notice_mail, notice_mail_since) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"; |
sql = "INSERT INTO " + dbprefix + "_xnpaccount_users (uid, activate, address, division, tel, company_name, country, zipcode, fax, notice_mail, notice_mail_since, private_item_number_limit, private_index_number_limit, private_item_storage_limit) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"; |
| 1526 |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 1527 |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 1528 |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, uid, 0, &cbUid); |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, uid, 0, &cbUid); |
| 1536 |
SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_FAX_LEN, 0, fax, 0, &cbFax); |
SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_ACCOUNT_FAX_LEN, 0, fax, 0, &cbFax); |
| 1537 |
SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail, 0, &cbNotice_mail); |
SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail, 0, &cbNotice_mail); |
| 1538 |
SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail_since, 0, &cbNotice_mail_since); |
SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail_since, 0, &cbNotice_mail_since); |
| 1539 |
|
SQLBindParameter(hstmt, 12, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &item_number_limit, 0, &cbItem_number_limit); |
| 1540 |
|
SQLBindParameter(hstmt, 13, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &index_number_limit, 0, &cbIndex_number_limit); |
| 1541 |
|
SQLBindParameter(hstmt, 14, SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_DOUBLE, 0, 0, &item_storage_limit, 0, &cbItem_storage_limit); |
| 1542 |
|
|
| 1543 |
activate = account -> getActivate() ? 1 : 0; |
activate = account -> getActivate() ? 1 : 0; |
| 1544 |
strncpy2( (char*)address, account -> getAddress(), XNP_ACCOUNT_ADDRESS_LEN ); |
strncpy2( (char*)address, account -> getAddress(), XNP_ACCOUNT_ADDRESS_LEN ); |
| 1550 |
strncpy2( (char*)fax, account -> getFax(), XNP_ACCOUNT_FAX_LEN ); |
strncpy2( (char*)fax, account -> getFax(), XNP_ACCOUNT_FAX_LEN ); |
| 1551 |
notice_mail = account -> getNoticeMail( ); |
notice_mail = account -> getNoticeMail( ); |
| 1552 |
notice_mail_since = account -> getNoticeMailSince( ); |
notice_mail_since = account -> getNoticeMailSince( ); |
| 1553 |
|
item_number_limit = account -> getItemNumberLimit( ); |
| 1554 |
|
index_number_limit = account -> getIndexNumberLimit( ); |
| 1555 |
|
item_storage_limit = account -> getItemStorageLimit( ); |
| 1556 |
|
|
| 1557 |
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 1558 |
SQLLEN count = 0; |
SQLLEN count = 0; |
| 1837 |
sql += "zipcode=?, "; |
sql += "zipcode=?, "; |
| 1838 |
sql += "fax=?, "; |
sql += "fax=?, "; |
| 1839 |
sql += "notice_mail=?, "; |
sql += "notice_mail=?, "; |
| 1840 |
sql += "notice_mail_since=? "; |
sql += "notice_mail_since=? ,"; |
| 1841 |
|
sql += "private_item_number_limit=" + unsignedIntToString( account -> getItemNumberLimit( ) ) + " ,"; |
| 1842 |
|
sql += "private_index_number_limit=" + unsignedIntToString( account -> getIndexNumberLimit( ) ) + " ,"; |
| 1843 |
|
sql += "private_item_storage_limit=" + doubleToString( account -> getItemStorageLimit( ) ) + " "; |
| 1844 |
sql += "WHERE uid=?"; |
sql += "WHERE uid=?"; |
| 1845 |
|
|
| 1846 |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 2580 |
result_t ret = RES_ERROR; |
result_t ret = RES_ERROR; |
| 2581 |
string sql; |
string sql; |
| 2582 |
SQLCHAR gname[XNP_GROUP_GNAME_LEN+1], gdesc[XNP_GROUP_GDESC_LEN+1]; |
SQLCHAR gname[XNP_GROUP_GNAME_LEN+1], gdesc[XNP_GROUP_GDESC_LEN+1]; |
| 2583 |
SQLLEN cbGname = SQL_NTS, cbGdesc = SQL_NTS; |
SQLINTEGER item_number_limit; |
| 2584 |
|
SQLINTEGER index_number_limit; |
| 2585 |
|
SQLDOUBLE item_storage_limit; |
| 2586 |
|
SQLLEN cbGname = SQL_NTS, cbGdesc = SQL_NTS, cbItem_number_limit = 0, cbIndex_number_limit = 0, cbItem_storage_limit = 0; |
| 2587 |
SQLRETURN sqlcode; |
SQLRETURN sqlcode; |
| 2588 |
|
|
| 2589 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2590 |
sql = "INSERT INTO " + dbprefix + "_xnpaccount_groups ( gname, gdesc ) VALUES ( ?, ? )"; |
sql = "INSERT INTO " + dbprefix + "_xnpaccount_groups ( gname, gdesc, group_item_number_limit, group_index_number_limit, group_item_storage_limit ) VALUES ( ?, ?, ?, ?, ? )"; |
| 2591 |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 2592 |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 2593 |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_GROUP_GNAME_LEN, 0, gname, 0, &cbGname ); |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_GROUP_GNAME_LEN, 0, gname, 0, &cbGname ); |
| 2594 |
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_GROUP_GDESC_LEN, 0, gdesc, 0, &cbGdesc ); |
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_GROUP_GDESC_LEN, 0, gdesc, 0, &cbGdesc ); |
| 2595 |
|
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &item_number_limit, 0, &cbItem_number_limit); |
| 2596 |
|
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &index_number_limit, 0, &cbIndex_number_limit); |
| 2597 |
|
SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_DOUBLE, 0, 0, &item_storage_limit, 0, &cbItem_storage_limit); |
| 2598 |
strncpy2( (char*)gname, group -> getGname( ), XNP_GROUP_GNAME_LEN ); |
strncpy2( (char*)gname, group -> getGname( ), XNP_GROUP_GNAME_LEN ); |
| 2599 |
strncpy2( (char*)gdesc, group -> getDesc( ), XNP_GROUP_GDESC_LEN ); |
strncpy2( (char*)gdesc, group -> getDesc( ), XNP_GROUP_GDESC_LEN ); |
| 2600 |
|
item_number_limit = group -> getItemNumberLimit( ); |
| 2601 |
|
index_number_limit = group -> getIndexNumberLimit( ); |
| 2602 |
|
item_storage_limit = group -> getItemStorageLimit( ); |
| 2603 |
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 2604 |
SQLLEN count = 0; |
SQLLEN count = 0; |
| 2605 |
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 2704 |
SQLRETURN sqlcode; |
SQLRETURN sqlcode; |
| 2705 |
|
|
| 2706 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2707 |
sql = "UPDATE " + dbprefix + "_xnpaccount_groups SET gname=?, gdesc=? WHERE gid=" + string( unsignedIntToString( group -> getGID( ) ) ); |
sql = "UPDATE " + dbprefix + "_xnpaccount_groups SET gname=?, gdesc=?, "; |
| 2708 |
|
sql += "group_item_number_limit=" + unsignedIntToString( group -> getItemNumberLimit( ) ) + " ,"; |
| 2709 |
|
sql += "group_index_number_limit=" + unsignedIntToString( group -> getIndexNumberLimit( ) ) + " ,"; |
| 2710 |
|
sql += "group_item_storage_limit=" + doubleToString( group -> getItemStorageLimit( ) ) + " "; |
| 2711 |
|
sql += "WHERE gid=" + string( unsignedIntToString( group -> getGID( ) ) ); |
| 2712 |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 2713 |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 2714 |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_GROUP_GNAME_LEN, 0, gname, 0, &cbGname ); |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, XNP_GROUP_GNAME_LEN, 0, gname, 0, &cbGname ); |
| 2845 |
string sql; |
string sql; |
| 2846 |
group_t* dst = new group_t[ gidsLen ]; |
group_t* dst = new group_t[ gidsLen ]; |
| 2847 |
|
|
| 2848 |
sql += "SELECT gid, gname, gdesc, group_index_id "; |
sql += "SELECT gid, gname, gdesc, group_index_id, group_item_number_limit, group_index_number_limit, group_item_storage_limit "; |
| 2849 |
sql += "FROM " + dbprefix + "_xnpaccount_groups "; |
sql += "FROM " + dbprefix + "_xnpaccount_groups "; |
| 2850 |
if( gidsLen > 0 ){ |
if( gidsLen > 0 ){ |
| 2851 |
sql += "WHERE gid=" + string( unsignedIntToString( gids[ 0 ] ) ); |
sql += "WHERE gid=" + string( unsignedIntToString( gids[ 0 ] ) ); |
| 2866 |
dst[ i ].setGname( getResultCol( hstmt, 2 ).c_str() ); |
dst[ i ].setGname( getResultCol( hstmt, 2 ).c_str() ); |
| 2867 |
dst[ i ].setDesc( getResultCol( hstmt, 3 ).c_str() ); |
dst[ i ].setDesc( getResultCol( hstmt, 3 ).c_str() ); |
| 2868 |
dst[ i ].setGroupIndexID( atoi(getResultCol( hstmt, 4 ).c_str()) ); |
dst[ i ].setGroupIndexID( atoi(getResultCol( hstmt, 4 ).c_str()) ); |
| 2869 |
|
dst[ i ].setItemNumberLimit( atoi(getResultCol( hstmt, 5 ).c_str()) ); |
| 2870 |
|
dst[ i ].setIndexNumberLimit( atoi(getResultCol( hstmt, 6 ).c_str()) ); |
| 2871 |
|
dst[ i ].setItemStorageLimit( strtod(getResultCol( hstmt, 7 ).c_str(), NULL) ); |
| 2872 |
( *groupsLen )++; |
( *groupsLen )++; |
| 2873 |
} |
} |
| 2874 |
*groups = dst; |
*groups = dst; |
| 4124 |
} |
} |
| 4125 |
}else { |
}else { |
| 4126 |
string s( "SQLExecDirect in getPrivateItemID " ); |
string s( "SQLExecDirect in getPrivateItemID " ); |
| 4127 |
|
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 4128 |
|
s += ", sql="; |
| 4129 |
|
s += string( sql ); |
| 4130 |
|
setLastErrorString( s.c_str( ) ); |
| 4131 |
|
ret = RES_DB_QUERY_ERROR; |
| 4132 |
|
} |
| 4133 |
|
}else{ |
| 4134 |
|
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getPrivateItemID" ); |
| 4135 |
|
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 4136 |
|
setLastErrorString( s.c_str( ) ); |
| 4137 |
|
ret = RES_ERROR; |
| 4138 |
|
} |
| 4139 |
|
|
| 4140 |
|
return ret; |
| 4141 |
|
} |
| 4142 |
|
|
| 4143 |
|
/** |
| 4144 |
|
* |
| 4145 |
|
* 指定グループがOwnerのインデックスに登録され,且つ承認されたアイテムのIDを取得します. |
| 4146 |
|
* |
| 4147 |
|
* @param sid セッションID |
| 4148 |
|
* @param gid 対象グループのID |
| 4149 |
|
* @param iids 登録されたアイテムIDを受け取る引数 |
| 4150 |
|
* @param iidsLen iidsに格納された個数を受け取る引数 |
| 4151 |
|
* @return RES_OK |
| 4152 |
|
* @return RES_DB_NOT_INITIALIZED |
| 4153 |
|
* @return RES_NO_SUCH_SESSION |
| 4154 |
|
* @return RES_DB_QUERY_ERROR |
| 4155 |
|
* @return RES_ERROR |
| 4156 |
|
* |
| 4157 |
|
*/ |
| 4158 |
|
result_t getGroupItemID( sessionid_t sid, groupid_t gid, const itemid_t** iids, int* iidsLen ) |
| 4159 |
|
{ |
| 4160 |
|
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 4161 |
|
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 4162 |
|
|
| 4163 |
|
SQLHANDLE hstmt = NULL; |
| 4164 |
|
result_t ret = RES_ERROR; |
| 4165 |
|
itemid_t* dst = 0; |
| 4166 |
|
int dst_max = 1024; |
| 4167 |
|
string sql; |
| 4168 |
|
SQLRETURN sqlcode; |
| 4169 |
|
userid_t sess_uid; |
| 4170 |
|
|
| 4171 |
|
if( ( ret = sessionID2UID( sid, &sess_uid ) ) != RES_OK ) return ret; |
| 4172 |
|
|
| 4173 |
|
sql = "SELECT DISTINCT tlink.item_id"; |
| 4174 |
|
sql += " FROM " + dbprefix + "_xnpaccount_index_item_link AS tlink"; |
| 4175 |
|
sql += " LEFT JOIN " + dbprefix + "_xnpaccount_index AS tx ON tlink.index_id=tx.index_id"; |
| 4176 |
|
sql += " LEFT JOIN " + dbprefix + "_xnpaccount_item_basic AS ti ON tlink.item_id=ti.item_id"; |
| 4177 |
|
sql += " LEFT JOIN " + dbprefix + "_xnpaccount_groups_users_link AS tgulink ON tgulink.gid = tx.gid"; |
| 4178 |
|
|
| 4179 |
|
sql += " WHERE open_level=" + unsignedIntToString( index::OL_GROUP_ONLY ); |
| 4180 |
|
sql += " AND certify_state=" + unsignedIntToString( index::CERTIFIED ); |
| 4181 |
|
sql += " AND item_type_id !=" + unsignedIntToString( item::ITID_INDEX ); |
| 4182 |
|
sql += " AND item_type_id !=" + unsignedIntToString( item::ITID_BINDER ); |
| 4183 |
|
sql += " AND tx.gid=" + unsignedIntToString( sess_uid ); |
| 4184 |
|
|
| 4185 |
|
syslog_printf( "\nsql at %d=%s", __LINE__, sql.c_str() ); |
| 4186 |
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 4187 |
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 4188 |
|
itemid_t iid = 0; |
| 4189 |
|
SQLLEN cbIid = 0; |
| 4190 |
|
SQLBindCol( hstmt, 1, SQL_C_ULONG, &iid, 0, &cbIid ); |
| 4191 |
|
for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ; i++ ){ |
| 4192 |
|
if( dst_max <= i ){ |
| 4193 |
|
itemid_t* old_dst = dst; |
| 4194 |
|
dst = new itemid_t[ dst_max * 2 ]; |
| 4195 |
|
if( *iids == 0 ){ |
| 4196 |
|
delete[] old_dst; |
| 4197 |
|
return RES_ERROR; // out of memory |
| 4198 |
|
} |
| 4199 |
|
memcpy( dst, old_dst, dst_max ); |
| 4200 |
|
dst_max *= 2; |
| 4201 |
|
*iids = dst; |
| 4202 |
|
delete[] old_dst; |
| 4203 |
|
} |
| 4204 |
|
dst[ i ] = iid; |
| 4205 |
|
(*iidsLen)++; |
| 4206 |
|
} |
| 4207 |
|
}else { |
| 4208 |
|
string s( "SQLExecDirect in getPrivateItemID " ); |
| 4209 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 4210 |
s += ", sql="; |
s += ", sql="; |
| 4211 |
s += string( sql ); |
s += string( sql ); |