Make test compile

This commit is contained in:
Yuriy Dupyn 2024-02-01 14:57:45 +01:00
parent fbd7bf1f72
commit 22a2730b96
4 changed files with 128 additions and 143 deletions

View file

@ -2,7 +2,7 @@ use crate::internals::table::Table;
use crate::operation::{ColumnSelection, Condition, Operation};
use crate::restricted_row::RestrictedRow;
use crate::result::DbResult;
use crate::schema::{TableName, TablePosition, TableSchema};
use crate::schema::{Column, TableName, TablePosition, TableSchema};
use bimap::BiMap;
use serde::{Deserialize, Serialize};
@ -212,9 +212,6 @@ mod tests {
#[test]
fn test_insert_select_basic1() {
use IndexableValue::*;
use Value::*;
let mut state = State::new();
let users_schema = users_schema();
let users = 0;
@ -224,9 +221,9 @@ mod tests {
.unwrap();
let (id, name, age) = (
Indexable(Uuid(0)),
Indexable(String("Plato".to_string())),
Indexable(Int(64)),
Value::Uuid(0),
Value::String("Plato".to_string()),
Value::Int(64),
);
state
.interpret(Operation::Insert(
@ -256,9 +253,7 @@ mod tests {
#[test]
fn test_insert_select_basic2() {
use Condition::*;
use IndexableValue::*;
use Operation::*;
use Value::*;
let mut state = State::new();
let users_schema = users_schema();
@ -270,9 +265,9 @@ mod tests {
state.interpret(CreateTable(users_schema.clone())).unwrap();
let (id0, name0, age0) = (
Indexable(Uuid(0)),
Indexable(String("Plato".to_string())),
Indexable(Int(64)),
Value::Uuid(0),
Value::String("Plato".to_string()),
Value::Int(64),
);
state
.interpret(Insert(
@ -282,9 +277,9 @@ mod tests {
.unwrap();
let (id1, name1, age1) = (
Indexable(Uuid(1)),
Indexable(String("Aristotle".to_string())),
Indexable(Int(20)),
Value::Uuid(1),
Value::String("Aristotle".to_string()),
Value::Int(20),
);
state
.interpret(Insert(
@ -366,9 +361,7 @@ mod tests {
#[test]
fn test_delete() {
use Condition::*;
use IndexableValue::*;
use Operation::*;
use Value::*;
let mut state = State::new();
let users_schema = users_schema();
@ -379,9 +372,9 @@ mod tests {
state.interpret(CreateTable(users_schema.clone())).unwrap();
let (id0, name0, age0) = (
Indexable(Uuid(0)),
Indexable(String("Plato".to_string())),
Indexable(Int(64)),
Value::Uuid(0),
Value::String("Plato".to_string()),
Value::Int(64),
);
state
.interpret(Insert(
@ -391,9 +384,9 @@ mod tests {
.unwrap();
let (id1, name1, age1) = (
Indexable(Uuid(1)),
Indexable(String("Aristotle".to_string())),
Indexable(Int(20)),
Value::Uuid(1),
Value::String("Aristotle".to_string()),
Value::Int(20),
);
state
.interpret(Insert(
@ -429,9 +422,7 @@ mod tests {
#[test]
fn test_index() {
use IndexableValue::*;
use Operation::*;
use Value::*;
let mut state = State::new();
let users_schema = users_schema();
@ -446,9 +437,9 @@ mod tests {
.unwrap();
let (id0, name0, age0) = (
Indexable(Uuid(0)),
Indexable(String("Plato".to_string())),
Indexable(Int(64)),
Value::Uuid(0),
Value::String("Plato".to_string()),
Value::Int(64),
);
state
.interpret(Insert(
@ -458,9 +449,9 @@ mod tests {
.unwrap();
let (id1, name1, age1) = (
Indexable(Uuid(1)),
Indexable(String("Aristotle".to_string())),
Indexable(Int(20)),
Value::Uuid(1),
Value::String("Aristotle".to_string()),
Value::Int(20),
);
state
.interpret(Insert(
@ -482,7 +473,7 @@ mod tests {
let aristotle_id = 1;
let plato_ids = index
.get(&String("Plato".to_string()))
.get(&IndexableValue::String("Plato".to_string()))
.cloned()
.unwrap_or(HashSet::new());
assert!(plato_ids.contains(&plato_id));
@ -491,103 +482,98 @@ mod tests {
}
}
// TODO
// pub fn example() {
// use crate::type_system::{DbType, IndexableValue, Value};
// use Condition::*;
// use IndexableValue::*;
// use Operation::*;
// use Value::*;
pub fn example() {
use crate::type_system::{DbType, Value};
use Condition::*;
use Operation::*;
// let id_column: Column = 0;
// let name_column: Column = 1;
// // let age_column: ColumnPosition = 2;
let id_column: Column = 0;
let name_column: Column = 1;
// let age_column: ColumnPosition = 2;
// let users_schema: TableSchema = {
// TableSchema::new(
// "users".to_string(),
// "id".to_string(),
// vec![
// "id".to_string(), // 0
// "name".to_string(), // 1
// "age".to_string(), // 2
// ],
// vec![DbType::Uuid, DbType::String, DbType::Int],
// )
// };
// let users_position: TablePosition = 0;
let users_schema: TableSchema = {
TableSchema::new(
"users".to_string(),
"id".to_string(),
vec![
"id".to_string(), // 0
"name".to_string(), // 1
"age".to_string(), // 2
],
vec![DbType::Uuid, DbType::String, DbType::Int],
)
};
let users_position: TablePosition = 0;
// let mut state = State::new();
// state
// .interpret(Operation::CreateTable(users_schema.clone()))
// .unwrap();
let mut state = State::new();
state
.interpret(Operation::CreateTable(users_schema.clone()))
.unwrap();
// let (id0, name0, age0) = (
// Indexable(Uuid(0)),
// Indexable(String("Plato".to_string())),
// Indexable(Int(64)),
// );
// println!("==INSERT Plato==");
// state
// .interpret(Insert(
// users_position,
// vec![id0.clone(), name0.clone(), age0.clone()],
// ))
// .unwrap();
let (id0, name0, age0) = (
Value::Uuid(0),
Value::String("Plato".to_string()),
Value::Int(64),
);
println!("==INSERT Plato==");
state
.interpret(Insert(
users_position,
vec![id0.clone(), name0.clone(), age0.clone()],
))
.unwrap();
// let (id1, name1, age1) = (
// Indexable(Uuid(1)),
// Indexable(String("Aristotle".to_string())),
// Indexable(Int(20)),
// );
// println!("==INSERT Aristotle==");
// state
// .interpret(Insert(
// users_position,
// vec![id1.clone(), name1.clone(), age1.clone()],
// ))
// .unwrap();
// println!();
let (id1, name1, age1) = (
Value::Uuid(1),
Value::String("Aristotle".to_string()),
Value::Int(20),
);
println!("==INSERT Aristotle==");
state
.interpret(Insert(
users_position,
vec![id1.clone(), name1.clone(), age1.clone()],
))
.unwrap();
println!();
// {
// let response: Response = state
// .interpret(Operation::Select(
// users_position,
// users_schema.all_selection(),
// None,
// ))
// .unwrap();
// println!("==SELECT ALL==");
// println!("{:?}", response);
// println!();
// }
// {
// let response: Response = state
// .interpret(Select(
// users_position,
// users_schema.all_selection(),
// Some(Eq(id_column, id0.clone())),
// ))
// .unwrap();
// println!("==SELECT Plato==");
// println!("{:?}", response);
// println!();
// }
{
let response: Response = state
.interpret(Operation::Select(
users_position,
users_schema.all_selection(),
None,
))
.unwrap();
println!("==SELECT ALL==");
println!("{:?}", response);
println!();
}
{
let response: Response = state
.interpret(Select(
users_position,
users_schema.all_selection(),
Some(Eq(id_column, id0.clone())),
))
.unwrap();
println!("==SELECT Plato==");
println!("{:?}", response);
println!();
}
// {
// {
// // TODO: Why do I have to write these braces explicitely? Why doesn't Rust compiler
// // "infer" them?
// let _delete_response: Response = state
// .interpret(Delete(users_position, Some(Eq(id_column, id0.clone()))))
// .unwrap();
// println!("==DELETE Plato==");
// }
// let response: Response = state
// .interpret(Select(users_position, vec![name_column, id_column], None))
// .unwrap();
// println!("==SELECT All==");
// println!("{:?}", response);
// println!();
// }
// }
{
{
let _delete_response: Response = state
.interpret(Delete(users_position, Some(Eq(id_column, id0.clone()))))
.unwrap();
println!("==DELETE Plato==");
}
let response: Response = state
.interpret(Select(users_position, vec![name_column, id_column], None))
.unwrap();
println!("==SELECT All==");
println!("{:?}", response);
println!();
}
}

View file

@ -239,9 +239,8 @@ impl TryFrom<String> for Value {
#[cfg(test)]
mod tests {
use super::{IndexableValue, Value};
use super::Value;
use crate::error::TypeConversionError::UnknownType;
use crate::type_system::Value::{Indexable, Number};
#[test]
fn test_encode_number() {
@ -261,7 +260,7 @@ mod tests {
#[test]
fn test_encode_string() {
let value = Value::Indexable(IndexableValue::String("hello".to_string()));
let value = Value::String("hello".to_string());
let vtype = value.to_type();
let oid = vtype.type_oid();
let size = vtype.type_size();
@ -277,7 +276,7 @@ mod tests {
#[test]
fn test_encode_string_utf8() {
let value = Value::Indexable(IndexableValue::String("#速度与激情9 早上好中国 现在我有冰激淋 我很喜欢冰激淋 但是《速度与激情9》比冰激淋 🍧🍦🍨".to_string()));
let value = Value::String("#速度与激情9 早上好中国 现在我有冰激淋 我很喜欢冰激淋 但是《速度与激情9》比冰激淋 🍧🍦🍨".to_string());
let vtype = value.to_type();
let oid = vtype.type_oid();
let size = vtype.type_size();
@ -293,7 +292,7 @@ mod tests {
#[test]
fn test_encode_int() {
let value = Value::Indexable(IndexableValue::Int(123));
let value = Value::Int(123);
let vtype = value.to_type();
let oid = vtype.type_oid();
let size = vtype.type_size();
@ -309,7 +308,7 @@ mod tests {
#[test]
fn test_encode_uuid() {
let value = Value::Indexable(IndexableValue::Uuid(123));
let value = Value::Uuid(123);
let vtype = value.to_type();
let oid = vtype.type_oid();
let size = vtype.type_size();
@ -325,7 +324,7 @@ mod tests {
#[test]
fn test_mismatched_size() {
let value = Value::Indexable(IndexableValue::Uuid(123));
let value = Value::Uuid(123);
let vtype = value.to_type();
let oid = vtype.type_oid();
let size = 8;
@ -342,13 +341,13 @@ mod tests {
#[test]
fn test_value_stringification() {
let pairs = vec![
(Number(1.0), "Number(1)"),
(Value::Number(1.0), "Number(1)"),
(
Indexable(IndexableValue::String("hello".to_string())),
Value::String("hello".to_string()),
"Indexable(String(hello))",
),
(Indexable(IndexableValue::Int(123)), "Indexable(Int(123))"),
(Indexable(IndexableValue::Uuid(123)), "Indexable(Uuid(123))"),
(Value::Int(123), "Indexable(Int(123))"),
(Value::Uuid(123), "Indexable(Uuid(123))"),
];
for (value, string) in pairs {