Documentation
use crate::util::*;
testcase!(test);
fn test(mut glue: multisql::Glue) {
	assert_success!(
		glue,
		"CREATE TABLE Item (name TEXT, opt_name TEXT NULL)",
		multisql::Payload::Create
	);
	assert_success!(
		glue,
		"INSERT INTO Item VALUES ('abcd', 'efgi'), ('Abcd', NULL), ('ABCD', 'EfGi')",
		multisql::Payload::Insert(3)
	);
	assert_select!(glue,
		"SELECT name FROM Item WHERE LOWER(name) = 'abcd'" => name = Str:
		(String::from("abcd")),
		(String::from("Abcd")),
		(String::from("ABCD"))
	);
	assert_select!(glue,
		"SELECT LOWER(name) AS lower, UPPER(name) as upper FROM Item;" => lower = Str, upper = Str:
		((String::from("abcd")), (String::from("ABCD"))),
		((String::from("abcd")), (String::from("ABCD"))),
		((String::from("abcd")), (String::from("ABCD")))
	);
	assert_select!(glue,
		"VALUES (LOWER('Abcd'), UPPER('abCd'))" => unnamed_0 = Str, unnamed_1 = Str:
		((String::from("abcd")), (String::from("ABCD")))
	);
	/* TODO: Null test
	assert_select!(glue,
		"SELECT LOWER(opt_name) AS lower, UPPER(opt_name) as upper FROM Item;" => lower = Str, upper = Str:
		((String::from("efgi")), (String::from("EFGI"))),
		(), (),
		((String::from("efgi")), (String::from("EFGI")))
	);*/
	assert_error!(
		glue,
		"SELECT LOWER() FROM Item",
		multisql::ValueError::NumberOfFunctionParamsNotMatching {
			expected: 1,
			found: 0,
		}
	);
	assert_error!(
		glue,
		"SELECT LOWER(1) FROM Item",
		multisql::ValueError::CannotConvert(multisql::Value::I64(1), "TEXT")
	);
	assert_error!(
		glue,
		"SELECT WHATEVER(1) FROM Item",
		multisql::RecipeError::UnimplementedMethod(String::from("WHATEVER"))
	);
}