Develop and Download Open Source Software

Browse CVS Repository

Diff of /xoonips/AL/commonal.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.72 by tani, Fri Feb 25 01:03:42 2005 UTC revision 1.73 by tani, Fri Feb 25 07:41:35 2005 UTC
# Line 2  Line 2 
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   *   *
# Line 1256  result_t getAccounts( sessionid_t sid, c Line 1260  result_t getAccounts( sessionid_t sid, c
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 ){
# Line 1275  result_t getAccounts( sessionid_t sid, c Line 1279  result_t getAccounts( sessionid_t sid, c
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++ ){
# Line 1324  result_t getAccounts( sessionid_t sid, c Line 1330  result_t getAccounts( sessionid_t sid, c
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;
# Line 1505  result_t insertAccount( sessionid_t sid, Line 1513  result_t insertAccount( sessionid_t sid,
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);
# Line 1524  result_t insertAccount( sessionid_t sid, Line 1536  result_t insertAccount( sessionid_t sid,
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, &notice_mail, 0, &cbNotice_mail);                  SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &notice_mail, 0, &cbNotice_mail);
1538                  SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &notice_mail_since, 0, &cbNotice_mail_since);                  SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &notice_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 );
# Line 1535  result_t insertAccount( sessionid_t sid, Line 1550  result_t insertAccount( sessionid_t sid,
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;
# Line 1819  result_t updateAccount( sessionid_t sid, Line 1837  result_t updateAccount( sessionid_t sid,
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);
# Line 2559  result_t insertGroup( sessionid_t sid, c Line 2580  result_t insertGroup( sessionid_t sid, c
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 ){
# Line 2674  result_t updateGroup( sessionid_t sid, c Line 2704  result_t updateGroup( sessionid_t sid, c
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 );
# Line 2811  result_t getGroups( sessionid_t sid, gro Line 2845  result_t getGroups( sessionid_t sid, gro
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 ] ) );
# Line 2832  result_t getGroups( sessionid_t sid, gro Line 2866  result_t getGroups( sessionid_t sid, gro
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;
# Line 4087  result_t getPrivateItemID( sessionid_t s Line 4124  result_t getPrivateItemID( sessionid_t s
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 );

Legend:
Removed from v.1.72  
changed lines
  Added in v.1.73

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26