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
use crate::*; test_case!(synthesize, async move { let create_sql = " CREATE TABLE TableA ( id INTEGER, test INTEGER, target_id INTEGER, ); "; run!(create_sql); let insert_sqls = [ "INSERT INTO TableA (id, test, target_id) VALUES (1, 100, 2);", "INSERT INTO TableA (id, test, target_id) VALUES (2, 100, 1);", "INSERT INTO TableA (id, test, target_id) VALUES (3, 300, 5);", "INSERT INTO TableA (target_id, id, test) VALUES (5, 3, 400);", "INSERT INTO TableA (test, id, target_id) VALUES (500, 3, 4);", "INSERT INTO TableA VALUES (4, 500, 3);", ]; for insert_sql in insert_sqls.iter() { run!(insert_sql); } let test_cases = [ (6, "SELECT * FROM TableA;"), (3, "SELECT * FROM TableA WHERE id = 3;"), ( 3, "SELECT * FROM TableA WHERE id = (SELECT id FROM TableA WHERE id = 3 LIMIT 1)", ), (3, "SELECT * FROM TableA WHERE id IN (1, 2, 4)"), (3, "SELECT * FROM TableA WHERE test IN (500, 300)"), ( 2, "SELECT * FROM TableA WHERE id IN (SELECT target_id FROM TableA LIMIT 3)", ), (1, "SELECT * FROM TableA WHERE id = 3 AND test = 500;"), (5, "SELECT * FROM TableA WHERE id = 3 OR test = 100;"), (1, "SELECT * FROM TableA WHERE id != 3 AND test != 100;"), (2, "SELECT * FROM TableA WHERE id = 3 LIMIT 2;"), (4, "SELECT * FROM TableA LIMIT 10 OFFSET 2;"), ( 1, "SELECT * FROM TableA WHERE (id = 3 OR test = 100) AND test = 300;", ), (4, "SELECT * FROM TableA a WHERE target_id = (SELECT id FROM TableA b WHERE b.target_id = a.id LIMIT 1);"), (4, "SELECT * FROM TableA a WHERE target_id = (SELECT id FROM TableA WHERE target_id = a.id LIMIT 1);"), (3, "SELECT * FROM TableA WHERE NOT (id = 3);"), (2, "UPDATE TableA SET test = 200 WHERE test = 100;"), (0, "SELECT * FROM TableA WHERE test = 100;"), (2, "SELECT * FROM TableA WHERE (test = 200);"), (3, "DELETE FROM TableA WHERE id != 3;"), (3, "SELECT * FROM TableA;"), (3, "DELETE FROM TableA;"), ]; for (num, sql) in test_cases.iter() { count!(*num, sql); } for insert_sql in insert_sqls.iter() { run!(insert_sql); } use Value::I64; let test_cases = vec![ ( select!(id | test; I64 | I64; 1 100), "SELECT id, test FROM TableA LIMIT 1;", ), (select!(id; I64; 1), "SELECT id FROM TableA LIMIT 1;"), ( select!(id | test | target_id; I64 | I64 | I64; 1 100 2), "SELECT * FROM TableA LIMIT 1;", ), ]; for (expected, sql) in test_cases.into_iter() { test!(Ok(expected), sql); } });