Changeset 301 for branches


Ignore:
Timestamp:
08/15/09 19:07:55 (2 years ago)
Author:
antonbatenev.ya.ru
Message:

#55 и #56 - доделана работоспособность меню на дереве форумов "Мои сообщения" и "Ответы мне"

Location:
branches/abbat
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/abbat/storage/mysql_storage.cpp

    r299 r301  
    27152715                        case idsForum: 
    27162716 
    2717                                 sql += "DELETE FROM\n"; 
    2718                                 sql += "        `unread`\n"; 
    2719                                 sql += "WHERE\n"; 
    2720                                 sql += "        `id_forum` IN (" + ids + ")"; 
     2717                                if (list.count() == 1 && (list[0] == SPECIAL_ID_FORUM_MY_MESSAGES || list[0] == SPECIAL_ID_FORUM_ANSWERS_TO_ME)) 
     2718                                { 
     2719                                        // получение id текущего пользователя avalon (по хорошему, должна передаваться как параметр) 
     2720                                        int id_me = AGlobal::getInstance()->Me.ID; 
     2721 
     2722                                        if (id_me == 0) 
     2723                                                break; 
     2724 
     2725                                        if (list[0] == SPECIAL_ID_FORUM_MY_MESSAGES) 
     2726                                        { 
     2727                                                // спец-форум "Мои сообщения" 
     2728                                                // по хорошему, надо просто в табличку unread добавить поле id_user и индекс для пользователя, 
     2729                                                // что сильно ускорит запрос, однако, менять схему пока не хочется 
     2730                                                sql += "DELETE FROM\n"; 
     2731                                                sql += "        `unread`\n"; 
     2732                                                sql += "WHERE\n"; 
     2733                                                sql += "        `id_message` IN\n"; 
     2734                                                sql += "        (\n"; 
     2735                                                // fix ERROR 1093 (HY000): You can't specify target table X for update in FROM clause 
     2736                                                sql += "                SELECT\n"; 
     2737                                                sql += "                        `t`.`id_message`\n"; 
     2738                                                sql += "                FROM\n"; 
     2739                                                sql += "                        (\n"; 
     2740                                                sql += "                                SELECT\n"; 
     2741                                                sql += "                                        `unread`.`id_message`\n"; 
     2742                                                sql += "                                FROM\n"; 
     2743                                                sql += "                                        `unread`\n"; 
     2744                                                sql += "                                                INNER JOIN\n"; 
     2745                                                sql += "                                        `message`\n"; 
     2746                                                sql += "                                                ON\n"; 
     2747                                                sql += "                                        `unread`.`id_message` = `message`.`id` AND\n"; 
     2748                                                sql += "                                        `message`.`id_user`   = " + QString::number(id_me) + "\n"; 
     2749                                                sql += "                        ) `t`\n"; 
     2750                                                sql += "        )"; 
     2751                                        } 
     2752                                        else if (list[0] == SPECIAL_ID_FORUM_ANSWERS_TO_ME) 
     2753                                        { 
     2754                                                // спец-форум "Ответы мне" 
     2755                                                sql += "DELETE FROM\n"; 
     2756                                                sql += "        `unread`\n"; 
     2757                                                sql += "WHERE\n"; 
     2758                                                sql += "        `id_parent_user` = " + QString::number(id_me); 
     2759                                        } 
     2760                                } 
     2761                                else 
     2762                                { 
     2763                                        // все остальные форумы 
     2764                                        sql += "DELETE FROM\n"; 
     2765                                        sql += "        `unread`\n"; 
     2766                                        sql += "WHERE\n"; 
     2767                                        sql += "        `id_forum` IN (" + ids + ")"; 
     2768                                } 
    27212769 
    27222770                                if (date.isValid() == true) 
     
    28232871                        case idsForum: 
    28242872 
    2825                                 sql += "REPLACE INTO `unread`\n"; 
    2826                                 sql += "(\n"; 
    2827                                 sql += "        `id_message`,\n"; 
    2828                                 sql += "        `id_parent`,\n"; 
    2829                                 sql += "        `id_forum`,\n"; 
    2830                                 sql += "        `id_topic`,\n"; 
    2831                                 sql += "        `id_parent_user`,\n"; 
    2832                                 sql += "        `message_date`\n"; 
    2833                                 sql += ")\n"; 
    2834                                 sql += "SELECT\n"; 
    2835                                 sql += "        `id`,\n"; 
    2836                                 sql += "        `id_parent`,\n"; 
    2837                                 sql += "        `id_forum`,\n"; 
    2838                                 sql += "        `id_topic`,\n"; 
    2839                                 sql += "        0,\n"; 
    2840                                 sql += "        `message_date`\n"; 
    2841                                 sql += "FROM\n"; 
    2842                                 sql += "        `message`\n"; 
    2843                                 sql += "WHERE\n"; 
    2844                                 sql += "        `id_forum` IN (" + ids + ")"; 
     2873                                if (list.count() == 1 && (list[0] == SPECIAL_ID_FORUM_MY_MESSAGES || list[0] == SPECIAL_ID_FORUM_ANSWERS_TO_ME)) 
     2874                                { 
     2875                                        // получение id текущего пользователя avalon (по хорошему, должна передаваться как параметр) 
     2876                                        int id_me = AGlobal::getInstance()->Me.ID; 
     2877 
     2878                                        if (id_me == 0) 
     2879                                                break; 
     2880 
     2881                                        if (list[0] == SPECIAL_ID_FORUM_MY_MESSAGES) 
     2882                                        { 
     2883                                                // спец-форум "Мои сообщения" 
     2884                                                sql += "REPLACE INTO `unread`\n"; 
     2885                                                sql += "(\n"; 
     2886                                                sql += "        `id_message`,\n"; 
     2887                                                sql += "        `id_parent`,\n"; 
     2888                                                sql += "        `id_forum`,\n"; 
     2889                                                sql += "        `id_topic`,\n"; 
     2890                                                sql += "        `id_parent_user`,\n"; 
     2891                                                sql += "        `message_date`\n"; 
     2892                                                sql += ")\n"; 
     2893                                                sql += "SELECT\n"; 
     2894                                                sql += "        `id`,\n"; 
     2895                                                sql += "        `id_parent`,\n"; 
     2896                                                sql += "        `id_forum`,\n"; 
     2897                                                sql += "        `id_topic`,\n"; 
     2898                                                sql += "        0,\n"; 
     2899                                                sql += "        `message_date`\n"; 
     2900                                                sql += "FROM\n"; 
     2901                                                sql += "        `message`\n"; 
     2902                                                sql += "WHERE\n"; 
     2903                                                sql += "        `id_user` = " + QString::number(id_me); 
     2904                                        } 
     2905                                        else if (list[0] == SPECIAL_ID_FORUM_ANSWERS_TO_ME) 
     2906                                        { 
     2907                                                // спец-форум "Ответы мне" 
     2908                                                sql += "REPLACE INTO `unread`\n"; 
     2909                                                sql += "(\n"; 
     2910                                                sql += "        `id_message`,\n"; 
     2911                                                sql += "        `id_parent`,\n"; 
     2912                                                sql += "        `id_forum`,\n"; 
     2913                                                sql += "        `id_topic`,\n"; 
     2914                                                sql += "        `id_parent_user`,\n"; 
     2915                                                sql += "        `message_date`\n"; 
     2916                                                sql += ")\n"; 
     2917                                                sql += "SELECT\n"; 
     2918                                                sql += "        `m1`.`id`,\n"; 
     2919                                                sql += "        `m1`.`id_parent`,\n"; 
     2920                                                sql += "        `m1`.`id_forum`,\n"; 
     2921                                                sql += "        `m1`.`id_topic`,\n"; 
     2922                                                sql += "        0,\n"; 
     2923                                                sql += "        `m1`.`message_date`\n"; 
     2924                                                sql += "FROM\n"; 
     2925                                                sql += "        `message` `m1`\n"; 
     2926                                                sql += "                INNER JOIN\n"; 
     2927                                                sql += "        (\n"; 
     2928                                                sql += "                SELECT\n"; 
     2929                                                sql += "                        `id`\n"; 
     2930                                                sql += "                FROM\n"; 
     2931                                                sql += "                        `message`\n"; 
     2932                                                sql += "                WHERE\n"; 
     2933                                                sql += "                        `id_user` = " + QString::number(id_me) + "\n"; 
     2934                                                sql += "        ) `m2`\n"; 
     2935                                                sql += "                ON\n"; 
     2936                                                sql += "        `m1`.`id_parent` = `m2`.`id`\n"; 
     2937                                                sql += "WHERE\n"; 
     2938                                                sql += "        1"; 
     2939                                        } 
     2940                                } 
     2941                                else 
     2942                                { 
     2943                                        // все остальные форумы 
     2944                                        sql += "REPLACE INTO `unread`\n"; 
     2945                                        sql += "(\n"; 
     2946                                        sql += "        `id_message`,\n"; 
     2947                                        sql += "        `id_parent`,\n"; 
     2948                                        sql += "        `id_forum`,\n"; 
     2949                                        sql += "        `id_topic`,\n"; 
     2950                                        sql += "        `id_parent_user`,\n"; 
     2951                                        sql += "        `message_date`\n"; 
     2952                                        sql += ")\n"; 
     2953                                        sql += "SELECT\n"; 
     2954                                        sql += "        `id`,\n"; 
     2955                                        sql += "        `id_parent`,\n"; 
     2956                                        sql += "        `id_forum`,\n"; 
     2957                                        sql += "        `id_topic`,\n"; 
     2958                                        sql += "        0,\n"; 
     2959                                        sql += "        `message_date`\n"; 
     2960                                        sql += "FROM\n"; 
     2961                                        sql += "        `message`\n"; 
     2962                                        sql += "WHERE\n"; 
     2963                                        sql += "        `id_forum` IN (" + ids + ")"; 
     2964                                } 
    28452965 
    28462966                                if (date.isValid() == true) 
     
    29253045 
    29263046        // обновление информации о пользователе, которому был ответ 
    2927         sql  = ""; 
    2928         sql += "UPDATE\n"; 
    2929         sql += "        `unread`\n"; 
    2930         sql += "SET\n"; 
    2931         sql += "        `id_parent_user` = IFNULL(\n"; 
    2932         sql += "                (\n"; 
    2933         sql += "                        SELECT\n"; 
    2934         sql += "                                IFNULL(`message`.`id_user`, 0)\n"; 
    2935         sql += "                        FROM\n"; 
    2936         sql += "                                `message`\n"; 
    2937         sql += "                        WHERE\n"; 
    2938         sql += "                                `message`.`id` = `unread`.`id_parent`\n"; 
    2939         sql += "                ),\n"; 
    2940         sql += "                0\n"; 
    2941         sql += "        )\n"; 
    2942         sql += "WHERE\n"; 
    2943         sql += "        `id_parent` <> 0"; 
    2944  
    2945         std::auto_ptr<AQuery> query_update_unread(createQuery(sql)); 
    2946  
    2947         if (query_update_unread.get() == NULL) 
    2948                 return returnError(AMySQLDatabase::getLastError()); 
    2949  
    2950         if (query_update_unread->exec() == false) 
    2951                 return returnError(query_update_unread->getLastError()); 
     3047        if (read == false) 
     3048        { 
     3049                sql  = ""; 
     3050                sql += "UPDATE\n"; 
     3051                sql += "        `unread`\n"; 
     3052                sql += "SET\n"; 
     3053                sql += "        `id_parent_user` = IFNULL(\n"; 
     3054                sql += "                (\n"; 
     3055                sql += "                        SELECT\n"; 
     3056                sql += "                                IFNULL(`message`.`id_user`, 0)\n"; 
     3057                sql += "                        FROM\n"; 
     3058                sql += "                                `message`\n"; 
     3059                sql += "                        WHERE\n"; 
     3060                sql += "                                `message`.`id` = `unread`.`id_parent`\n"; 
     3061                sql += "                ),\n"; 
     3062                sql += "                0\n"; 
     3063                sql += "        )\n"; 
     3064                sql += "WHERE\n"; 
     3065                sql += "        `id_parent` <> 0"; 
     3066 
     3067                std::auto_ptr<AQuery> query_update_unread(createQuery(sql)); 
     3068 
     3069                if (query_update_unread.get() == NULL) 
     3070                        return returnError(AMySQLDatabase::getLastError()); 
     3071 
     3072                if (query_update_unread->exec() == false) 
     3073                        return returnError(query_update_unread->getLastError()); 
     3074        } 
    29523075 
    29533076        return returnSuccess(); 
  • branches/abbat/storage/sqlite_storage.cpp

    r299 r301  
    27182718                        case idsForum: 
    27192719 
    2720                                 sql += "DELETE FROM\n"; 
    2721                                 sql += "        `unread`\n"; 
    2722                                 sql += "WHERE\n"; 
    2723                                 sql += "        `id_forum` IN (" + ids + ")"; 
     2720                                if (list.count() == 1 && (list[0] == SPECIAL_ID_FORUM_MY_MESSAGES || list[0] == SPECIAL_ID_FORUM_ANSWERS_TO_ME)) 
     2721                                { 
     2722                                        // получение id текущего пользователя avalon (по хорошему, должна передаваться как параметр) 
     2723                                        int id_me = AGlobal::getInstance()->Me.ID; 
     2724 
     2725                                        if (id_me == 0) 
     2726                                                break; 
     2727 
     2728                                        if (list[0] == SPECIAL_ID_FORUM_MY_MESSAGES) 
     2729                                        { 
     2730                                                // спец-форум "Мои сообщения" 
     2731                                                // по хорошему, надо просто в табличку unread добавить поле id_user и индекс для пользователя, 
     2732                                                // что сильно ускорит запрос, однако, менять схему пока не хочется 
     2733                                                sql += "DELETE FROM\n"; 
     2734                                                sql += "        `unread`\n"; 
     2735                                                sql += "WHERE\n"; 
     2736                                                sql += "        `id_message` IN\n"; 
     2737                                                sql += "        (\n"; 
     2738                                                sql += "                SELECT\n"; 
     2739                                                sql += "                        `unread`.`id_message`\n"; 
     2740                                                sql += "                FROM\n"; 
     2741                                                sql += "                        `unread`\n"; 
     2742                                                sql += "                                INNER JOIN\n"; 
     2743                                                sql += "                        `message`\n"; 
     2744                                                sql += "                                ON\n"; 
     2745                                                sql += "                        `unread`.`id_message` = `message`.`id` AND\n"; 
     2746                                                sql += "                        `message`.`id_user`   = " + QString::number(id_me) + "\n"; 
     2747                                                sql += "        )"; 
     2748                                        } 
     2749                                        else if (list[0] == SPECIAL_ID_FORUM_ANSWERS_TO_ME) 
     2750                                        { 
     2751                                                // спец-форум "Ответы мне" 
     2752                                                sql += "DELETE FROM\n"; 
     2753                                                sql += "        `unread`\n"; 
     2754                                                sql += "WHERE\n"; 
     2755                                                sql += "        `id_parent_user` = " + QString::number(id_me); 
     2756                                        } 
     2757                                } 
     2758                                else 
     2759                                { 
     2760                                        // все остальные форумы 
     2761                                        sql += "DELETE FROM\n"; 
     2762                                        sql += "        `unread`\n"; 
     2763                                        sql += "WHERE\n"; 
     2764                                        sql += "        `id_forum` IN (" + ids + ")"; 
     2765                                } 
    27242766 
    27252767                                if (date.isValid() == true) 
     
    28622904                        case idsForum: 
    28632905 
    2864                                 sql += "REPLACE INTO `unread`\n"; 
    2865                                 sql += "(\n"; 
    2866                                 sql += "        `id_message`,\n"; 
    2867                                 sql += "        `id_parent`,\n"; 
    2868                                 sql += "        `id_forum`,\n"; 
    2869                                 sql += "        `id_topic`,\n"; 
    2870                                 sql += "        `id_parent_user`,\n"; 
    2871                                 sql += "        `message_date`\n"; 
    2872                                 sql += ")\n"; 
    2873                                 sql += "SELECT\n"; 
    2874                                 sql += "        `id`,\n"; 
    2875                                 sql += "        `id_parent`,\n"; 
    2876                                 sql += "        `id_forum`,\n"; 
    2877                                 sql += "        `id_topic`,\n"; 
    2878                                 sql += "        0,\n"; 
    2879                                 sql += "        `message_date`\n"; 
    2880                                 sql += "FROM\n"; 
    2881                                 sql += "        `message`\n"; 
    2882                                 sql += "WHERE\n"; 
    2883                                 sql += "        `id_forum` IN (" + ids + ")"; 
     2906                                if (list.count() == 1 && (list[0] == SPECIAL_ID_FORUM_MY_MESSAGES || list[0] == SPECIAL_ID_FORUM_ANSWERS_TO_ME)) 
     2907                                { 
     2908                                        // получение id текущего пользователя avalon (по хорошему, должна передаваться как параметр) 
     2909                                        int id_me = AGlobal::getInstance()->Me.ID; 
     2910 
     2911                                        if (id_me == 0) 
     2912                                                break; 
     2913 
     2914                                        if (list[0] == SPECIAL_ID_FORUM_MY_MESSAGES) 
     2915                                        { 
     2916                                                // спец-форум "Мои сообщения" 
     2917                                                sql += "REPLACE INTO `unread`\n"; 
     2918                                                sql += "(\n"; 
     2919                                                sql += "        `id_message`,\n"; 
     2920                                                sql += "        `id_parent`,\n"; 
     2921                                                sql += "        `id_forum`,\n"; 
     2922                                                sql += "        `id_topic`,\n"; 
     2923                                                sql += "        `id_parent_user`,\n"; 
     2924                                                sql += "        `message_date`\n"; 
     2925                                                sql += ")\n"; 
     2926                                                sql += "SELECT\n"; 
     2927                                                sql += "        `id`,\n"; 
     2928                                                sql += "        `id_parent`,\n"; 
     2929                                                sql += "        `id_forum`,\n"; 
     2930                                                sql += "        `id_topic`,\n"; 
     2931                                                sql += "        0,\n"; 
     2932                                                sql += "        `message_date`\n"; 
     2933                                                sql += "FROM\n"; 
     2934                                                sql += "        `message`\n"; 
     2935                                                sql += "WHERE\n"; 
     2936                                                sql += "        `id_user` = " + QString::number(id_me); 
     2937                                        } 
     2938                                        else if (list[0] == SPECIAL_ID_FORUM_ANSWERS_TO_ME) 
     2939                                        { 
     2940                                                // спец-форум "Ответы мне" 
     2941                                                sql += "REPLACE INTO `unread`\n"; 
     2942                                                sql += "(\n"; 
     2943                                                sql += "        `id_message`,\n"; 
     2944                                                sql += "        `id_parent`,\n"; 
     2945                                                sql += "        `id_forum`,\n"; 
     2946                                                sql += "        `id_topic`,\n"; 
     2947                                                sql += "        `id_parent_user`,\n"; 
     2948                                                sql += "        `message_date`\n"; 
     2949                                                sql += ")\n"; 
     2950                                                sql += "SELECT\n"; 
     2951                                                sql += "        `id`,\n"; 
     2952                                                sql += "        `id_parent`,\n"; 
     2953                                                sql += "        `id_forum`,\n"; 
     2954                                                sql += "        `id_topic`,\n"; 
     2955                                                sql += "        0,\n"; 
     2956                                                sql += "        `message_date`\n"; 
     2957                                                sql += "FROM\n"; 
     2958                                                sql += "        `message`\n"; 
     2959                                                sql += "WHERE\n"; 
     2960                                                sql += "        `id_parent` IN\n"; 
     2961                                                sql += "        (\n"; 
     2962                                                sql += "                SELECT\n"; 
     2963                                                sql += "                        `id`\n"; 
     2964                                                sql += "                FROM\n"; 
     2965                                                sql += "                        `message`\n"; 
     2966                                                sql += "                WHERE\n"; 
     2967                                                sql += "                        `id_user` = " + QString::number(id_me) + "\n"; 
     2968                                                sql += "        )"; 
     2969                                        } 
     2970                                } 
     2971                                else 
     2972                                { 
     2973                                        // все остальные форумы 
     2974                                        sql += "REPLACE INTO `unread`\n"; 
     2975                                        sql += "(\n"; 
     2976                                        sql += "        `id_message`,\n"; 
     2977                                        sql += "        `id_parent`,\n"; 
     2978                                        sql += "        `id_forum`,\n"; 
     2979                                        sql += "        `id_topic`,\n"; 
     2980                                        sql += "        `id_parent_user`,\n"; 
     2981                                        sql += "        `message_date`\n"; 
     2982                                        sql += ")\n"; 
     2983                                        sql += "SELECT\n"; 
     2984                                        sql += "        `id`,\n"; 
     2985                                        sql += "        `id_parent`,\n"; 
     2986                                        sql += "        `id_forum`,\n"; 
     2987                                        sql += "        `id_topic`,\n"; 
     2988                                        sql += "        0,\n"; 
     2989                                        sql += "        `message_date`\n"; 
     2990                                        sql += "FROM\n"; 
     2991                                        sql += "        `message`\n"; 
     2992                                        sql += "WHERE\n"; 
     2993                                        sql += "        `id_forum` IN (" + ids + ")"; 
     2994                                } 
    28842995 
    28852996                                if (date.isValid() == true) 
     
    29753086 
    29763087        // обновление информации о пользователе, которому был ответ 
    2977         sql  = ""; 
    2978         sql += "UPDATE\n"; 
    2979         sql += "        `unread`\n"; 
    2980         sql += "SET\n"; 
    2981         sql += "        `id_parent_user` = IFNULL(\n"; 
    2982         sql += "                (\n"; 
    2983         sql += "                        SELECT\n"; 
    2984         sql += "                                IFNULL(`message`.`id_user`, 0)\n"; 
    2985         sql += "                        FROM\n"; 
    2986         sql += "                                `message`\n"; 
    2987         sql += "                        WHERE\n"; 
    2988         sql += "                                `message`.`id` = `unread`.`id_parent`\n"; 
    2989         sql += "                ),\n"; 
    2990         sql += "                0\n"; 
    2991         sql += "        )\n"; 
    2992         sql += "WHERE\n"; 
    2993         sql += "        `id_parent` <> 0"; 
    2994  
    2995         std::auto_ptr<AQuery> query_update_unread(createQuery(sql)); 
    2996  
    2997         if (query_update_unread.get() == NULL) 
    2998                 return returnError(ASQLiteDatabase::getLastError()); 
    2999  
    3000         if (query_update_unread->exec() == false) 
    3001                 return returnError(query_update_unread->getLastError()); 
     3088        if (read == false) 
     3089        { 
     3090                sql  = ""; 
     3091                sql += "UPDATE\n"; 
     3092                sql += "        `unread`\n"; 
     3093                sql += "SET\n"; 
     3094                sql += "        `id_parent_user` = IFNULL(\n"; 
     3095                sql += "                (\n"; 
     3096                sql += "                        SELECT\n"; 
     3097                sql += "                                IFNULL(`message`.`id_user`, 0)\n"; 
     3098                sql += "                        FROM\n"; 
     3099                sql += "                                `message`\n"; 
     3100                sql += "                        WHERE\n"; 
     3101                sql += "                                `message`.`id` = `unread`.`id_parent`\n"; 
     3102                sql += "                ),\n"; 
     3103                sql += "                0\n"; 
     3104                sql += "        )\n"; 
     3105                sql += "WHERE\n"; 
     3106                sql += "        `id_parent` <> 0"; 
     3107 
     3108                std::auto_ptr<AQuery> query_update_unread(createQuery(sql)); 
     3109 
     3110                if (query_update_unread.get() == NULL) 
     3111                        return returnError(ASQLiteDatabase::getLastError()); 
     3112 
     3113                if (query_update_unread->exec() == false) 
     3114                        return returnError(query_update_unread->getLastError()); 
     3115        } 
    30023116 
    30033117        return returnSuccess(); 
  • branches/abbat/version.h

    r299 r301  
    2020 * \brief Дата билда (заменяется автоматически при каждом билде в version.h, что и приводит к смене номера ревизии) 
    2121 */ 
    22 #define AVALON_DATE "Пнд Авг 10 20:55:41 MSD 2009" 
     22#define AVALON_DATE "Сбт Авг 15 19:03:20 MSD 2009" 
    2323 
    2424#endif 
Note: See TracChangeset for help on using the changeset viewer.