mirror of
https://gitlab.com/famedly/conduit.git
synced 2024-11-04 17:38:53 +01:00
improvement: migrations, batch inserts
This commit is contained in:
parent
41dd620d74
commit
31f60ad6fd
2 changed files with 53 additions and 9 deletions
|
@ -735,40 +735,81 @@ impl Database {
|
||||||
let shortroomid = db.globals.next_count()?.to_be_bytes();
|
let shortroomid = db.globals.next_count()?.to_be_bytes();
|
||||||
db.rooms.roomid_shortroomid.insert(&room_id, &shortroomid)?;
|
db.rooms.roomid_shortroomid.insert(&room_id, &shortroomid)?;
|
||||||
db.rooms.shortroomid_roomid.insert(&shortroomid, &room_id)?;
|
db.rooms.shortroomid_roomid.insert(&shortroomid, &room_id)?;
|
||||||
|
println!("Migration: 8");
|
||||||
}
|
}
|
||||||
// Update pduids db layout
|
// Update pduids db layout
|
||||||
for (key, v) in db.rooms.pduid_pdu.iter() {
|
let mut batch = db.rooms.pduid_pdu.iter().filter_map(|(key, v)| {
|
||||||
|
if !key.starts_with(b"!") {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
let mut parts = key.splitn(2, |&b| b == 0xff);
|
let mut parts = key.splitn(2, |&b| b == 0xff);
|
||||||
let room_id = parts.next().unwrap();
|
let room_id = parts.next().unwrap();
|
||||||
let count = parts.next().unwrap();
|
let count = parts.next().unwrap();
|
||||||
|
|
||||||
let short_room_id = db.rooms.roomid_shortroomid.get(&room_id)?.unwrap();
|
let short_room_id = db
|
||||||
|
.rooms
|
||||||
|
.roomid_shortroomid
|
||||||
|
.get(&room_id)
|
||||||
|
.unwrap()
|
||||||
|
.expect("shortroomid should exist");
|
||||||
|
|
||||||
let mut new_key = short_room_id;
|
let mut new_key = short_room_id;
|
||||||
new_key.extend_from_slice(count);
|
new_key.extend_from_slice(count);
|
||||||
|
|
||||||
println!("{:?}", new_key);
|
Some((new_key, v))
|
||||||
|
});
|
||||||
|
|
||||||
|
db.rooms.pduid_pdu.insert_batch(&mut batch)?;
|
||||||
|
|
||||||
|
for (key, _) in db.rooms.pduid_pdu.iter() {
|
||||||
|
if key.starts_with(b"!") {
|
||||||
|
db.rooms.pduid_pdu.remove(&key);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
db.globals.bump_database_version(8)?;
|
||||||
|
|
||||||
|
println!("Migration: 7 -> 8 finished");
|
||||||
|
}
|
||||||
|
|
||||||
|
if db.globals.database_version()? < 9 {
|
||||||
// Update tokenids db layout
|
// Update tokenids db layout
|
||||||
for (key, _) in db.rooms.tokenids.iter() {
|
let mut batch = db.rooms.tokenids.iter().filter_map(|(key, _)| {
|
||||||
|
if !key.starts_with(b"!") {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
let mut parts = key.splitn(4, |&b| b == 0xff);
|
let mut parts = key.splitn(4, |&b| b == 0xff);
|
||||||
let room_id = parts.next().unwrap();
|
let room_id = parts.next().unwrap();
|
||||||
let word = parts.next().unwrap();
|
let word = parts.next().unwrap();
|
||||||
let _pdu_id_room = parts.next().unwrap();
|
let _pdu_id_room = parts.next().unwrap();
|
||||||
let pdu_id_count = parts.next().unwrap();
|
let pdu_id_count = parts.next().unwrap();
|
||||||
|
|
||||||
let short_room_id = db.rooms.roomid_shortroomid.get(&room_id)?.unwrap();
|
let short_room_id = db
|
||||||
|
.rooms
|
||||||
|
.roomid_shortroomid
|
||||||
|
.get(&room_id)
|
||||||
|
.unwrap()
|
||||||
|
.expect("shortroomid should exist");
|
||||||
let mut new_key = short_room_id;
|
let mut new_key = short_room_id;
|
||||||
new_key.extend_from_slice(word);
|
new_key.extend_from_slice(word);
|
||||||
new_key.push(0xff);
|
new_key.push(0xff);
|
||||||
new_key.extend_from_slice(pdu_id_count);
|
new_key.extend_from_slice(pdu_id_count);
|
||||||
println!("{:?}", new_key);
|
println!("old {:?}", key);
|
||||||
|
println!("new {:?}", new_key);
|
||||||
|
Some((new_key, Vec::new()))
|
||||||
|
});
|
||||||
|
|
||||||
|
db.rooms.tokenids.insert_batch(&mut batch)?;
|
||||||
|
|
||||||
|
for (key, _) in db.rooms.tokenids.iter() {
|
||||||
|
if key.starts_with(b"!") {
|
||||||
|
db.rooms.pduid_pdu.remove(&key)?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
db.globals.bump_database_version(8)?;
|
db.globals.bump_database_version(9)?;
|
||||||
|
|
||||||
println!("Migration: 7 -> 8 finished");
|
println!("Migration: 8 -> 9 finished");
|
||||||
}
|
}
|
||||||
|
|
||||||
panic!();
|
panic!();
|
||||||
|
|
|
@ -223,7 +223,10 @@ impl Tree for SqliteTable {
|
||||||
|
|
||||||
let statement = Box::leak(Box::new(
|
let statement = Box::leak(Box::new(
|
||||||
guard
|
guard
|
||||||
.prepare(&format!("SELECT key, value FROM {} ORDER BY key ASC", &self.name))
|
.prepare(&format!(
|
||||||
|
"SELECT key, value FROM {} ORDER BY key ASC",
|
||||||
|
&self.name
|
||||||
|
))
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue