| 1 |
/*************************************************************************** |
/* SPDX-License-Identifier: GPL-3.0-or-later */ |
| 2 |
article_view_log.c - description |
/* |
| 3 |
------------------- |
* article_view_log |
| 4 |
Copyright : (C) 2004-2025 by Leaflet |
* - data persistence and query of article view log |
| 5 |
Email : leaflet@leafok.com |
* |
| 6 |
***************************************************************************/ |
* Copyright (C) 2004-2025 Leaflet <leaflet@leafok.com> |
| 7 |
|
*/ |
| 8 |
/*************************************************************************** |
|
| 9 |
* * |
#ifdef HAVE_CONFIG_H |
| 10 |
* This program is free software; you can redistribute it and/or modify * |
#include "config.h" |
| 11 |
* it under the terms of the GNU General Public License as published by * |
#endif |
|
* the Free Software Foundation; either version 3 of the License, or * |
|
|
* (at your option) any later version. * |
|
|
* * |
|
|
***************************************************************************/ |
|
| 12 |
|
|
| 13 |
#include "article_view_log.h" |
#include "article_view_log.h" |
| 14 |
#include "common.h" |
#include "common.h" |
| 28 |
|
|
| 29 |
if (p_view_log == NULL) |
if (p_view_log == NULL) |
| 30 |
{ |
{ |
| 31 |
log_error("NULL pointer error\n"); |
log_error("NULL pointer error"); |
| 32 |
return -1; |
return -1; |
| 33 |
} |
} |
| 34 |
|
|
| 49 |
|
|
| 50 |
if ((db = db_open()) == NULL) |
if ((db = db_open()) == NULL) |
| 51 |
{ |
{ |
| 52 |
log_error("article_view_log_load() error: Unable to open DB\n"); |
log_error("article_view_log_load() error: Unable to open DB"); |
| 53 |
return -2; |
return -2; |
| 54 |
} |
} |
| 55 |
|
|
| 59 |
uid); |
uid); |
| 60 |
if (mysql_query(db, sql) != 0) |
if (mysql_query(db, sql) != 0) |
| 61 |
{ |
{ |
| 62 |
log_error("Query view_article_log error: %s\n", mysql_error(db)); |
log_error("Query view_article_log error: %s", mysql_error(db)); |
| 63 |
return -3; |
return -3; |
| 64 |
} |
} |
| 65 |
if ((rs = mysql_store_result(db)) == NULL) |
if ((rs = mysql_store_result(db)) == NULL) |
| 66 |
{ |
{ |
| 67 |
log_error("Get view_article_log data failed\n"); |
log_error("Get view_article_log data failed"); |
| 68 |
return -3; |
return -3; |
| 69 |
} |
} |
| 70 |
|
|
| 72 |
p_view_log->aid_base = malloc(sizeof(int32_t) * mysql_num_rows(rs)); |
p_view_log->aid_base = malloc(sizeof(int32_t) * mysql_num_rows(rs)); |
| 73 |
if (p_view_log->aid_base == NULL) |
if (p_view_log->aid_base == NULL) |
| 74 |
{ |
{ |
| 75 |
log_error("malloc(INT32 * %d) error: OOM\n", mysql_num_rows(rs)); |
log_error("malloc(INT32 * %d) error: OOM", mysql_num_rows(rs)); |
| 76 |
mysql_free_result(rs); |
mysql_free_result(rs); |
| 77 |
mysql_close(db); |
mysql_close(db); |
| 78 |
return -4; |
return -4; |
| 86 |
|
|
| 87 |
mysql_close(db); |
mysql_close(db); |
| 88 |
|
|
| 89 |
log_common("Loaded %d view_article_log records for uid=%d\n", p_view_log->aid_base_cnt, uid); |
log_common("Loaded %d view_article_log records for uid=%d", p_view_log->aid_base_cnt, uid); |
| 90 |
|
|
| 91 |
if (!keep_inc) |
if (!keep_inc) |
| 92 |
{ |
{ |
| 100 |
{ |
{ |
| 101 |
if (p_view_log == NULL) |
if (p_view_log == NULL) |
| 102 |
{ |
{ |
| 103 |
log_error("NULL pointer error\n"); |
log_error("NULL pointer error"); |
| 104 |
return -1; |
return -1; |
| 105 |
} |
} |
| 106 |
|
|
| 124 |
|
|
| 125 |
if (p_view_log == NULL) |
if (p_view_log == NULL) |
| 126 |
{ |
{ |
| 127 |
log_error("NULL pointer error\n"); |
log_error("NULL pointer error"); |
| 128 |
return -1; |
return -1; |
| 129 |
} |
} |
| 130 |
|
|
| 135 |
|
|
| 136 |
if ((db = db_open()) == NULL) |
if ((db = db_open()) == NULL) |
| 137 |
{ |
{ |
| 138 |
log_error("article_view_log_load() error: Unable to open DB\n"); |
log_error("article_view_log_load() error: Unable to open DB"); |
| 139 |
return -2; |
return -2; |
| 140 |
} |
} |
| 141 |
|
|
| 153 |
{ |
{ |
| 154 |
if (mysql_query(db, sql) != 0) |
if (mysql_query(db, sql) != 0) |
| 155 |
{ |
{ |
| 156 |
log_error("Add view_article_log error: %s\n", mysql_error(db)); |
log_error("Add view_article_log error: %s", mysql_error(db)); |
| 157 |
mysql_close(db); |
mysql_close(db); |
| 158 |
return -3; |
return -3; |
| 159 |
} |
} |
| 169 |
} |
} |
| 170 |
} |
} |
| 171 |
|
|
| 172 |
log_common("Saved %d view_article_log records for uid=%d\n", affected_record, p_view_log->uid); |
log_common("Saved %d view_article_log records for uid=%d", affected_record, p_view_log->uid); |
| 173 |
|
|
| 174 |
mysql_close(db); |
mysql_close(db); |
| 175 |
|
|
| 185 |
|
|
| 186 |
if (p_view_log == NULL) |
if (p_view_log == NULL) |
| 187 |
{ |
{ |
| 188 |
log_error("NULL pointer error\n"); |
log_error("NULL pointer error"); |
| 189 |
return -1; |
return -1; |
| 190 |
} |
} |
| 191 |
|
|
| 199 |
aid_new = malloc(sizeof(int32_t) * (size_t)aid_new_cnt); |
aid_new = malloc(sizeof(int32_t) * (size_t)aid_new_cnt); |
| 200 |
if (aid_new == NULL) |
if (aid_new == NULL) |
| 201 |
{ |
{ |
| 202 |
log_error("malloc(INT32 * %d) error: OOM\n", aid_new_cnt); |
log_error("malloc(INT32 * %d) error: OOM", aid_new_cnt); |
| 203 |
return -2; |
return -2; |
| 204 |
} |
} |
| 205 |
|
|
| 209 |
{ |
{ |
| 210 |
if (p_view_log->aid_base[i] == p_view_log->aid_inc[j]) |
if (p_view_log->aid_base[i] == p_view_log->aid_inc[j]) |
| 211 |
{ |
{ |
| 212 |
log_error("Duplicate aid = %d found in both Base (offset = %d) and Inc (offset = %d)\n", |
log_error("Duplicate aid = %d found in both Base (offset = %d) and Inc (offset = %d)", |
| 213 |
p_view_log->aid_base[i], i, j); |
p_view_log->aid_base[i], i, j); |
| 214 |
j++; // Skip duplicate one in Inc |
j++; // Skip duplicate one in Inc |
| 215 |
} |
} |
| 255 |
|
|
| 256 |
if (p_view_log == NULL) |
if (p_view_log == NULL) |
| 257 |
{ |
{ |
| 258 |
log_error("NULL pointer error\n"); |
log_error("NULL pointer error"); |
| 259 |
return -1; |
return -1; |
| 260 |
} |
} |
| 261 |
|
|
| 304 |
|
|
| 305 |
if (p_view_log == NULL) |
if (p_view_log == NULL) |
| 306 |
{ |
{ |
| 307 |
log_error("NULL pointer error\n"); |
log_error("NULL pointer error"); |
| 308 |
return -1; |
return -1; |
| 309 |
} |
} |
| 310 |
|
|
| 347 |
// Save incremental article view log |
// Save incremental article view log |
| 348 |
if (article_view_log_save_inc(p_view_log) < 0) |
if (article_view_log_save_inc(p_view_log) < 0) |
| 349 |
{ |
{ |
| 350 |
log_error("article_view_log_save_inc() error\n"); |
log_error("article_view_log_save_inc() error"); |
| 351 |
return -2; |
return -2; |
| 352 |
} |
} |
| 353 |
|
|