MCPcopy
hub / github.com/pingcap/tidb / TestSubquery

Function TestSubquery

pkg/parser/parser_test.go:5233–5283  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

5231}
5232
5233func 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
5285func TestSetOperator(t *testing.T) {
5286 table := []testCase{

Callers

nothing calls this directly

Calls 4

NewFunction · 0.92
ParseOneStmtMethod · 0.80
RunTestFunction · 0.70
AcceptMethod · 0.65

Tested by

no test coverage detected