in akd_mysql/src/mysql_storables.rs [99:137]
fn set_batch_statement<St: Storable>(items: usize) -> String {
let mut parts = "".to_string();
for i in 0..items {
match St::data_type() {
StorageType::HistoryNodeState => {
parts = format!(
"{}(:label_len{}, :label_val{}, :epoch{}, :value{}, :child_states{})",
parts, i, i, i, i, i
);
}
StorageType::HistoryTreeNode => {
parts = format!(
"{}(:label_len{}, :label_val{}, :birth_epoch{}, :last_epoch{}, :parent_label_len{}, :parent_label_val{}, :node_type{})",
parts, i, i, i, i, i, i, i
);
}
StorageType::ValueState => {
parts = format!(
"{}(:username{}, :epoch{}, :version{}, :node_label_val{}, :node_label_len{}, :data{})",
parts, i, i, i, i, i, i
);
}
_ => {
// azks
}
}
if i < items - 1 {
parts += ", ";
}
}
match St::data_type() {
StorageType::Azks => format!("INSERT INTO `{}` (`key`, {}) VALUES (:key, :epoch, :num_nodes) as new ON DUPLICATE KEY UPDATE `epoch` = new.epoch, `num_nodes` = new.num_nodes", TABLE_AZKS, SELECT_AZKS_DATA),
StorageType::HistoryNodeState => format!("INSERT INTO `{}` ({}) VALUES {} as new ON DUPLICATE KEY UPDATE `value` = new.value, `child_states` = new.child_states", TABLE_HISTORY_NODE_STATES, SELECT_HISTORY_NODE_STATE_DATA, parts),
StorageType::HistoryTreeNode => format!("INSERT INTO `{}` ({}) VALUES {} as new ON DUPLICATE KEY UPDATE `label_len` = new.label_len, `label_val` = new.label_val, `birth_epoch` = new.birth_epoch, `last_epoch` = new.last_epoch, `parent_label_len` = new.parent_label_len, `parent_label_val` = new.parent_label_val, `node_type` = new.node_type", TABLE_HISTORY_TREE_NODES, SELECT_HISTORY_TREE_NODE_DATA, parts),
StorageType::ValueState => format!("INSERT INTO `{}` ({}) VALUES {} as new ON DUPLICATE KEY UPDATE `data` = new.data, `node_label_val` = new.node_label_val, `node_label_len` = new.node_label_len, `version` = new.version", TABLE_USER, SELECT_USER_DATA, parts),
}
}