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