1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
use crate::util::*;
testcase!(test);
fn test(mut glue: multisql::Glue) {
assert_success!(
glue,
"CREATE TABLE Foo (id INTEGER);",
multisql::Payload::Create
);
assert_success!(
glue,
"INSERT INTO Foo VALUES (1), (2), (3);",
multisql::Payload::Insert(3)
);
assert_select!(glue, "SELECT id FROM Foo" => id = I64: (1),(2),(3));
assert_error!(glue, "ALTER TABLE Foo2 RENAME TO Bar;"); //, multisql::AlterTableError::TableNotFound("Foo2".to_owned()));
assert_success!(
glue,
"ALTER TABLE Foo RENAME TO Bar;",
multisql::Payload::AlterTable
);
assert_select!(glue, "SELECT id FROM Bar" => id = I64: (1),(2),(3));
assert_success!(
glue,
"ALTER TABLE Bar RENAME COLUMN id TO new_id",
multisql::Payload::AlterTable
);
assert_select!(glue, "SELECT new_id FROM Bar" => new_id = I64: (1),(2),(3));
assert_error!(glue, "ALTER TABLE Bar RENAME COLUMN hello TO idid"); //, multisql::AlterTableError::RenamingColumnNotFound);
assert_success!(
glue,
"CREATE TABLE Foo (id INTEGER);",
multisql::Payload::Create
);
assert_success!(
glue,
"INSERT INTO Foo VALUES (1), (2);",
multisql::Payload::Insert(2)
);
assert_select!(glue, "SELECT * FROM Foo" => id = I64: (1),(2));
assert_error!(glue, "ALTER TABLE Foo ADD COLUMN amount INTEGER"); //, multisql::AlterTableError::DefaultValueRequired("amount INT".to_owned()));
assert_error!(glue, "ALTER TABLE Foo ADD COLUMN id INTEGER"); //, multisql::AlterTableError::AddingColumnAlreadyExists("id".to_owned()));
/* TODO: #72
assert_success!(glue, "ALTER TABLE Foo ADD COLUMN amount INTEGER DEFAULT 10", multisql::Payload::AlterTable);
assert_select!(glue, "SELECT * FROM Foo" => id = I64, amount = I64: (1, 10),(2, 10));
assert_success!(glue, "ALTER TABLE Foo ADD COLUMN opt BOOLEAN NULL", multisql::Payload::AlterTable);
// TODO: Null test assert_success!(glue, "SELECT * FROM Foo;", select_with_null! pt; I64(1) I64(10) Null I64(2) I64(10) Nu;
assert_success!(glue, "ALTER TABLE Foo ADD COLUMN opt2 BOOLEAN NULL DEFAULT true", multisql::Payload::AlterTable);
// TODO: Null test assert_success!(glue, "SELECT * FROM Foo;", select_with_null! pt | opt2; I64(1) I64(10) Null Bool(true) I64(2) I64(10) Null Bool(tru;
assert_error!(glue, "ALTER TABLE Foo ADD COLUMN something INTEGER DEFAULT (SELECT id FROM Bar LIMIT 1)", multisql::WIPError::TODO);
*/
assert_error!(glue, "ALTER TABLE Foo ADD COLUMN something SOMEWHAT"); //, multisql::AlterError::UnsupportedDataType("SOMEWHAT".to_owned()));
assert_error!(
glue,
"ALTER TABLE Foo ADD COLUMN something INTEGER CHECK (true)"
); //, multisql::AlterError::UnsupportedColumnOption("CHECK (true)".to_owned()));
assert_success!(
glue,
"ALTER TABLE Foo ADD COLUMN something FLOAT UNIQUE",
multisql::Payload::AlterTable
);
assert_success!(
glue,
"ALTER TABLE Foo DROP COLUMN IF EXISTS something;",
multisql::Payload::AlterTable
);
assert_error!(glue, "ALTER TABLE Foo DROP COLUMN something;"); //, multisql::AlterTableError::DroppingColumnNotFound("something".to_owned()));
assert_success!(
glue,
"ALTER TABLE Foo DROP COLUMN amount;",
multisql::Payload::AlterTable
);
// TODO: Null test assert_success!(glue, "SELECT * FROM Foo;", select_with_null! ; I64(1) Null Bool(true) I64(2) Null Bool(tru;
assert_success!(
glue,
"ALTER TABLE Foo DROP COLUMN IF EXISTS opt2;",
multisql::Payload::AlterTable
);
// TODO: Null test assert_success!(glue, "SELECT * FROM Foo;", select_with_null! id | opt;I64(1) Null; I64(2) Nu;
}