Skip to content

Commit 6234158

Browse files
committed
feat: db
1 parent cc5b089 commit 6234158

File tree

1 file changed

+32
-21
lines changed
  • frameworks/Rust/hyperlane/src

1 file changed

+32
-21
lines changed

frameworks/Rust/hyperlane/src/db.rs

Lines changed: 32 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -137,31 +137,35 @@ pub async fn connection_db() -> DbPoolConnection {
137137
}
138138

139139
#[inline]
140-
pub async fn get_update_data(limit: Queries) -> (String, Vec<QueryRow>) {
140+
pub async fn get_update_data(
141+
limit: Queries,
142+
) -> (String, Vec<QueryRow>, Vec<Queries>, Vec<Queries>) {
141143
let db_pool: DbPoolConnection = get_db_connection().await;
142144
let mut query_res_list: Vec<QueryRow> = Vec::with_capacity(limit as usize);
143-
let rows: Vec<QueryRow> = get_some_row_id(limit as Queries, &db_pool).await;
144-
let mut sql: String = format!("UPDATE {} SET randomNumber = CASE id ", TABLE_NAME_WORLD);
145-
let mut id_list: Vec<i32> = Vec::with_capacity(limit as usize);
146-
let mut value_list: String = String::new();
147-
let mut id_in_clause: String = format!("{}", rows[0].id);
148-
let last_idx: usize = rows.len() - 1;
145+
let rows: Vec<QueryRow> = get_some_row_id(limit, &db_pool).await;
146+
let mut sql = format!("UPDATE {} SET randomNumber = CASE id ", TABLE_NAME_WORLD);
147+
let mut id_list: Vec<i32> = Vec::with_capacity(rows.len());
148+
let mut value_list: Vec<String> = Vec::with_capacity(rows.len() * 2);
149+
let mut random_numbers: Vec<i32> = Vec::with_capacity(rows.len());
149150
for (i, row) in rows.iter().enumerate() {
150-
let new_random_number: Queries = get_random_id();
151-
let id: i32 = row.id;
152-
id_list.push(id);
153-
value_list.push_str(&format!("WHEN {} THEN {} ", id, new_random_number));
154-
if i < last_idx {
155-
id_in_clause.push_str(&format!(",{}", id.to_string()));
156-
}
157-
query_res_list.push(QueryRow::new(id, new_random_number as i32));
151+
let new_random_number: i32 = get_random_id() as i32;
152+
id_list.push(row.id);
153+
random_numbers.push(new_random_number);
154+
value_list.push(format!("WHEN ${} THEN ${}", i * 2 + 1, i * 2 + 2));
155+
query_res_list.push(QueryRow::new(row.id, new_random_number));
158156
}
159-
sql.push_str(&value_list);
157+
sql.push_str(&value_list.join(" "));
158+
let id_params: String = id_list
159+
.iter()
160+
.enumerate()
161+
.map(|(i, _)| format!("${}", (rows.len() * 2 + 1) + i))
162+
.collect::<Vec<_>>()
163+
.join(",");
160164
sql.push_str(&format!(
161-
"ELSE randomNumber END WHERE id IN ({})",
162-
id_in_clause
165+
" ELSE randomNumber END WHERE id IN ({})",
166+
id_params
163167
));
164-
(sql, query_res_list)
168+
(sql, query_res_list, id_list, random_numbers)
165169
}
166170

167171
#[inline]
@@ -201,8 +205,15 @@ pub async fn query_world_row(db_pool: &DbPoolConnection, id: Queries) -> QueryRo
201205
#[inline]
202206
pub async fn update_world_rows(limit: Queries) -> Vec<QueryRow> {
203207
let db_pool: DbPoolConnection = get_db_connection().await;
204-
let (sql, data) = get_update_data(limit).await;
205-
let _ = query(&sql).execute(&db_pool).await;
208+
let (sql, data, id_list, random_numbers) = get_update_data(limit).await;
209+
let mut query_builder: query::Query<'_, Postgres, postgres::PgArguments> = query(&sql);
210+
for (id, random_number) in id_list.iter().zip(random_numbers.iter()) {
211+
query_builder = query_builder.bind(id).bind(random_number);
212+
}
213+
for id in &id_list {
214+
query_builder = query_builder.bind(id);
215+
}
216+
let _ = query_builder.execute(&db_pool).await;
206217
data
207218
}
208219

0 commit comments

Comments
 (0)