(t *testing.T)
| 5231 | } |
| 5232 | |
| 5233 | func TestSubquery(t *testing.T) { |
| 5234 | table := []testCase{ |
| 5235 | // for compare subquery |
| 5236 | {"SELECT 1 > (select 1)", true, "SELECT 1>(SELECT 1)"}, |
| 5237 | {"SELECT 1 > ANY (select 1)", true, "SELECT 1>ANY (SELECT 1)"}, |
| 5238 | {"SELECT 1 > ALL (select 1)", true, "SELECT 1>ALL (SELECT 1)"}, |
| 5239 | {"SELECT 1 > SOME (select 1)", true, "SELECT 1>ANY (SELECT 1)"}, |
| 5240 | |
| 5241 | // for exists subquery |
| 5242 | {"SELECT EXISTS select 1", false, ""}, |
| 5243 | {"SELECT EXISTS (select 1)", true, "SELECT EXISTS (SELECT 1)"}, |
| 5244 | {"SELECT + EXISTS (select 1)", true, "SELECT +EXISTS (SELECT 1)"}, |
| 5245 | {"SELECT - EXISTS (select 1)", true, "SELECT -EXISTS (SELECT 1)"}, |
| 5246 | {"SELECT NOT EXISTS (select 1)", true, "SELECT NOT EXISTS (SELECT 1)"}, |
| 5247 | {"SELECT + NOT EXISTS (select 1)", false, ""}, |
| 5248 | {"SELECT - NOT EXISTS (select 1)", false, ""}, |
| 5249 | {"SELECT * FROM t where t.a in (select a from t limit 1, 10)", true, "SELECT * FROM `t` WHERE `t`.`a` IN (SELECT `a` FROM `t` LIMIT 1,10)"}, |
| 5250 | {"SELECT * FROM t where t.a in ((select a from t limit 1, 10))", true, "SELECT * FROM `t` WHERE `t`.`a` IN ((SELECT `a` FROM `t` LIMIT 1,10))"}, |
| 5251 | {"SELECT * FROM t where t.a in ((select a from t limit 1, 10), 1)", true, "SELECT * FROM `t` WHERE `t`.`a` IN ((SELECT `a` FROM `t` LIMIT 1,10),1)"}, |
| 5252 | {"select * from ((select a from t) t1 join t t2) join t3", true, "SELECT * FROM ((SELECT `a` FROM `t`) AS `t1` JOIN `t` AS `t2`) JOIN `t3`"}, |
| 5253 | {"SELECT t1.a AS a FROM ((SELECT a FROM t) AS t1)", true, "SELECT `t1`.`a` AS `a` FROM (SELECT `a` FROM `t`) AS `t1`"}, |
| 5254 | {"select count(*) from (select a, b from x1 union all select a, b from x3 union all (select x1.a, x3.b from (select * from x3 union all select * from x2) x3 left join x1 on x3.a = x1.b))", true, "SELECT COUNT(1) FROM (SELECT `a`,`b` FROM `x1` UNION ALL SELECT `a`,`b` FROM `x3` UNION ALL (SELECT `x1`.`a`,`x3`.`b` FROM (SELECT * FROM `x3` UNION ALL SELECT * FROM `x2`) AS `x3` LEFT JOIN `x1` ON `x3`.`a`=`x1`.`b`))"}, |
| 5255 | {"(SELECT 1 a,3 b) UNION (SELECT 2,1) ORDER BY (SELECT 2)", true, "(SELECT 1 AS `a`,3 AS `b`) UNION (SELECT 2,1) ORDER BY (SELECT 2)"}, |
| 5256 | {"((select * from t1)) union (select * from t1)", true, "(SELECT * FROM `t1`) UNION (SELECT * FROM `t1`)"}, |
| 5257 | {"(((select * from t1))) union (select * from t1)", true, "(SELECT * FROM `t1`) UNION (SELECT * FROM `t1`)"}, |
| 5258 | {"select * from (((select * from t1)) union (select * from t1) union (select * from t1)) a", true, "SELECT * FROM ((SELECT * FROM `t1`) UNION (SELECT * FROM `t1`) UNION (SELECT * FROM `t1`)) AS `a`"}, |
| 5259 | {"SELECT COUNT(*) FROM plan_executions WHERE (EXISTS((SELECT * FROM triggers WHERE plan_executions.trigger_id=triggers.id AND triggers.type='CRON')))", true, "SELECT COUNT(1) FROM `plan_executions` WHERE (EXISTS (SELECT * FROM `triggers` WHERE `plan_executions`.`trigger_id`=`triggers`.`id` AND `triggers`.`type`=_UTF8MB4'CRON'))"}, |
| 5260 | {"select exists((select 1));", true, "SELECT EXISTS (SELECT 1)"}, |
| 5261 | {"select * from ((SELECT 1 a,3 b) UNION (SELECT 2,1) ORDER BY (SELECT 2)) t order by a,b", true, "SELECT * FROM ((SELECT 1 AS `a`,3 AS `b`) UNION (SELECT 2,1) ORDER BY (SELECT 2)) AS `t` ORDER BY `a`,`b`"}, |
| 5262 | {"select (select * from t1 where a != t.a union all (select * from t2 where a != t.a) order by a limit 1) from t1 t", true, "SELECT (SELECT * FROM `t1` WHERE `a`!=`t`.`a` UNION ALL (SELECT * FROM `t2` WHERE `a`!=`t`.`a`) ORDER BY `a` LIMIT 1) FROM `t1` AS `t`"}, |
| 5263 | {"(WITH v0 AS (SELECT TRUE) (SELECT 'abc' EXCEPT (SELECT TRUE)))", true, "WITH `v0` AS (SELECT TRUE) (SELECT _UTF8MB4'abc' EXCEPT (SELECT TRUE))"}, |
| 5264 | } |
| 5265 | RunTest(t, table, false) |
| 5266 | |
| 5267 | tests := []struct { |
| 5268 | input string |
| 5269 | text string |
| 5270 | }{ |
| 5271 | {"SELECT 1 > (select 1)", "select 1"}, |
| 5272 | {"SELECT 1 > (select 1 union select 2)", "select 1 union select 2"}, |
| 5273 | } |
| 5274 | p := parser.New() |
| 5275 | for _, tbl := range tests { |
| 5276 | stmt, err := p.ParseOneStmt(tbl.input, "", "") |
| 5277 | require.NoError(t, err) |
| 5278 | stmt.Accept(&subqueryChecker{ |
| 5279 | text: tbl.text, |
| 5280 | t: t, |
| 5281 | }) |
| 5282 | } |
| 5283 | } |
| 5284 | |
| 5285 | func TestSetOperator(t *testing.T) { |
| 5286 | table := []testCase{ |
nothing calls this directly
no test coverage detected