Documentation
use crate::util::*;
testcase!(test);
fn test(mut glue: multisql::Glue) {
	let basic_table = |num: u16| {
		use fstrings::*;
		f!(r#"
			CREATE TABLE basic_{num} (
				id INTEGER,
				num INTEGER,
				name TEXT
			)
		"#)
	};
	glue.execute(&basic_table(0)).unwrap();
	glue.execute(&basic_table(1)).unwrap();

	glue.execute("INSERT INTO basic_0 (id, num, name) VALUES (1, 2, 'Hello')")
		.unwrap();
	glue.execute("INSERT INTO basic_0 (id, num, name) VALUES (1, 9, 'World')")
		.unwrap();
	glue.execute("INSERT INTO basic_0 (id, num, name) VALUES (3, 4, 'Great'), (4, 7, 'Job')")
		.unwrap();
	glue.execute("INSERT INTO basic_1 (id, num, name) SELECT id, num, name FROM basic_0")
		.unwrap();

	glue.execute("CREATE TABLE basic_a (id INTEGER);").unwrap();
	glue.execute("INSERT INTO basic_a (id) SELECT id FROM basic_0")
		.unwrap();

	assert_select!(glue, "SELECT * FROM basic_a" => id = I64: (1), (1), (3), (4));

	assert_select!(glue,
		"SELECT id, num, name FROM basic_0" =>
		id = I64, num = I64, name = Str:
		(1, 2, String::from("Hello")),
		(1, 9, String::from("World")),
		(3, 4, String::from("Great")),
		(4, 7, String::from("Job"))
	);

	assert_select!(glue,
		"SELECT id, num, name FROM basic_1" =>
		id = I64, num = I64, name = Str:
		(1, 2, String::from("Hello")),
		(1, 9, String::from("World")),
		(3, 4, String::from("Great")),
		(4, 7, String::from("Job"))
	);

	glue.execute("UPDATE basic_0 SET id = 2").unwrap();

	assert_select!(glue, "SELECT id FROM basic_0" => id = I64: (2), (2), (2), (2));
	assert_select!(glue, "SELECT id, num FROM basic_0" => id = I64, num = I64: (2, 2), (2, 9), (2, 4), (2, 7));
}