Есть таблица, например
CREATE TABLE item (
id INTEGER PRIMARY KEY NOT NULL,
category SMALLINT,
title VARCHAR(255),
size DOUBLE,
reg_time DATETIME,
status SMALLINT
);
Есть два запроса к API:
первый возвращает все item из запрашиваемой категории с полями reg_time, status
HashMap<i32, (NaiveDateTime, i16)>
второй возвращает для запрашиваемых item все поля таблицы
HashMap<i32, ItemData>
В таблице есть данные, нужно обновить в ней информацию, обрабатывая по очереди выбранные категории.
После запроса к категории нужно сравнить reg_time каждой записи, если он совпадает, то обновить status.
Для тех, у кого reg_time не совпадает, нужно собрать id и сделать запрос с помощью второго метода и результат записать в таблицу.
Как это лучше сделать? Методы в diesel
ничего интересного не предлагают.
На данный момент я придумал три варианта, но не один из них мне не нравится
- Обработать каждый элемент отдельным запросом к базе, топорно, просто и скорее всего не эффективно.
- Используя
sql_query
попробовать написать запрос, где VALUES будут данными из массива
WITH tmp_table(id, reg_time, status) AS (VALUES (5593198, 1532781854, 1), (5595053, 1533145448, 0), (5596787, 1534590934, 1))
UPDATE item SET
status = (SELECT status FROM tmp_table WHERE item.id = tmp_table.id)
WHERE id IN (SELECT id FROM tmp_table WHERE tmp_table.reg_time = item.reg_time);
- Сделать NewType, который будет создавать мне временную таблицу, в которую я смогу делать INSERT массива, а по выходу дропать её