|
|
@ -636,48 +636,60 @@ impl Database {
|
|
|
|
|
|
|
|
|
|
|
|
if db.globals.database_version()? < 9 {
|
|
|
|
if db.globals.database_version()? < 9 {
|
|
|
|
// Update tokenids db layout
|
|
|
|
// Update tokenids db layout
|
|
|
|
let batch = db.rooms.tokenids.iter().filter_map(|(key, _)| {
|
|
|
|
let batch = db
|
|
|
|
if !key.starts_with(b"!") {
|
|
|
|
.rooms
|
|
|
|
return None;
|
|
|
|
.tokenids
|
|
|
|
}
|
|
|
|
.iter()
|
|
|
|
let mut parts = key.splitn(4, |&b| b == 0xff);
|
|
|
|
.filter_map(|(key, _)| {
|
|
|
|
let room_id = parts.next().unwrap();
|
|
|
|
if !key.starts_with(b"!") {
|
|
|
|
let word = parts.next().unwrap();
|
|
|
|
return None;
|
|
|
|
let _pdu_id_room = parts.next().unwrap();
|
|
|
|
}
|
|
|
|
let pdu_id_count = parts.next().unwrap();
|
|
|
|
let mut parts = key.splitn(4, |&b| b == 0xff);
|
|
|
|
|
|
|
|
let room_id = parts.next().unwrap();
|
|
|
|
|
|
|
|
let word = parts.next().unwrap();
|
|
|
|
|
|
|
|
let _pdu_id_room = parts.next().unwrap();
|
|
|
|
|
|
|
|
let pdu_id_count = parts.next().unwrap();
|
|
|
|
|
|
|
|
|
|
|
|
let short_room_id = db
|
|
|
|
let short_room_id = db
|
|
|
|
.rooms
|
|
|
|
.rooms
|
|
|
|
.roomid_shortroomid
|
|
|
|
.roomid_shortroomid
|
|
|
|
.get(&room_id)
|
|
|
|
.get(&room_id)
|
|
|
|
.unwrap()
|
|
|
|
.unwrap()
|
|
|
|
.expect("shortroomid should exist");
|
|
|
|
.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!("old {:?}", key);
|
|
|
|
println!("old {:?}", key);
|
|
|
|
println!("new {:?}", new_key);
|
|
|
|
println!("new {:?}", new_key);
|
|
|
|
Some((new_key, Vec::new()))
|
|
|
|
Some((new_key, Vec::new()))
|
|
|
|
}).collect::<Vec<_>>();
|
|
|
|
})
|
|
|
|
|
|
|
|
.collect::<Vec<_>>();
|
|
|
|
|
|
|
|
|
|
|
|
let mut iter = batch.into_iter().peekable();
|
|
|
|
let mut iter = batch.into_iter().peekable();
|
|
|
|
|
|
|
|
|
|
|
|
while iter.peek().is_some() {
|
|
|
|
while iter.peek().is_some() {
|
|
|
|
db.rooms.tokenids.insert_batch(&mut iter.by_ref().take(1000))?;
|
|
|
|
db.rooms
|
|
|
|
|
|
|
|
.tokenids
|
|
|
|
|
|
|
|
.insert_batch(&mut iter.by_ref().take(1000))?;
|
|
|
|
println!("smaller batch done");
|
|
|
|
println!("smaller batch done");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
println!("Deleting starts");
|
|
|
|
println!("Deleting starts");
|
|
|
|
|
|
|
|
|
|
|
|
let batch2 = db.rooms.tokenids.iter().filter_map(|(key, _)| {
|
|
|
|
let batch2 = db
|
|
|
|
if key.starts_with(b"!") {
|
|
|
|
.rooms
|
|
|
|
println!("del {:?}", key);
|
|
|
|
.tokenids
|
|
|
|
Some(key)
|
|
|
|
.iter()
|
|
|
|
} else {
|
|
|
|
.filter_map(|(key, _)| {
|
|
|
|
None
|
|
|
|
if key.starts_with(b"!") {
|
|
|
|
}
|
|
|
|
println!("del {:?}", key);
|
|
|
|
}).collect::<Vec<_>>();
|
|
|
|
Some(key)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
None
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
.collect::<Vec<_>>();
|
|
|
|
|
|
|
|
|
|
|
|
for key in batch2 {
|
|
|
|
for key in batch2 {
|
|
|
|
println!("del");
|
|
|
|
println!("del");
|
|
|
|