- Timestamp:
- 08/15/09 19:07:55 (2 years ago)
- Location:
- branches/abbat
- Files:
-
- 3 edited
-
storage/mysql_storage.cpp (modified) (3 diffs)
-
storage/sqlite_storage.cpp (modified) (3 diffs)
-
version.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/abbat/storage/mysql_storage.cpp
r299 r301 2715 2715 case idsForum: 2716 2716 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 } 2721 2769 2722 2770 if (date.isValid() == true) … … 2823 2871 case idsForum: 2824 2872 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 } 2845 2965 2846 2966 if (date.isValid() == true) … … 2925 3045 2926 3046 // обновление информации о пользователе, которому был ответ 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 } 2952 3075 2953 3076 return returnSuccess(); -
branches/abbat/storage/sqlite_storage.cpp
r299 r301 2718 2718 case idsForum: 2719 2719 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 } 2724 2766 2725 2767 if (date.isValid() == true) … … 2862 2904 case idsForum: 2863 2905 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 } 2884 2995 2885 2996 if (date.isValid() == true) … … 2975 3086 2976 3087 // обновление информации о пользователе, которому был ответ 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 } 3002 3116 3003 3117 return returnSuccess(); -
branches/abbat/version.h
r299 r301 20 20 * \brief Дата билда (заменяется автоматически при каждом билде в version.h, что и приводит к смене номера ревизии) 21 21 */ 22 #define AVALON_DATE " Пнд Авг 10 20:55:41MSD 2009"22 #define AVALON_DATE "Сбт Авг 15 19:03:20 MSD 2009" 23 23 24 24 #endif
Note: See TracChangeset
for help on using the changeset viewer.
