()
| 1358 | } |
| 1359 | |
| 1360 | func (m *Sqlbridge) parseWhere() (*SqlWhere, error) { |
| 1361 | |
| 1362 | var err error |
| 1363 | if m.Cur().T != lex.TokenWhere { |
| 1364 | return nil, nil |
| 1365 | } |
| 1366 | |
| 1367 | m.Next() // Consume the Where |
| 1368 | //u.Debugf("cur: %v peek=%v", m.Cur(), m.Peek()) |
| 1369 | |
| 1370 | where := SqlWhere{} |
| 1371 | |
| 1372 | // We are going to Peek forward at the next 3 tokens used |
| 1373 | // to determine which type of where clause |
| 1374 | m.Next() // x |
| 1375 | t2 := m.Cur().T |
| 1376 | m.Next() |
| 1377 | t3 := m.Cur().T |
| 1378 | m.Next() |
| 1379 | t4 := m.Cur().T |
| 1380 | m.Backup() |
| 1381 | m.Backup() |
| 1382 | m.Backup() |
| 1383 | |
| 1384 | // Check for Types of Where |
| 1385 | // t1 T2 T3 T4 |
| 1386 | // SELECT x FROM user WHERE user_id IN ( SELECT user_id from orders where ...) |
| 1387 | // SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2); |
| 1388 | // select a FROM movies WHERE director IN ( "Quentin","copola","Bay","another") |
| 1389 | // select b FROM movies WHERE director = "bob"; |
| 1390 | // select b FROM movies WHERE create BETWEEN "2015" AND "2010"; |
| 1391 | // select b from movies WHERE director LIKE "%bob" |
| 1392 | // TODO: |
| 1393 | // SELECT * FROM t3 WHERE ROW(5*t2.s1,77) = ( SELECT 50,11*s1 FROM t4) |
| 1394 | switch { |
| 1395 | case (t2 == lex.TokenIN || t2 == lex.TokenEqual) && t3 == lex.TokenLeftParenthesis && t4 == lex.TokenSelect: |
| 1396 | //u.Infof("in parseWhere: %v", m.Cur()) |
| 1397 | m.Next() // T1 ?? this might be udf? |
| 1398 | m.Next() // t2 (IN | =) |
| 1399 | m.Next() // t3 = ( |
| 1400 | //m.Next() // t4 = SELECT |
| 1401 | where.Op = t2 |
| 1402 | where.Source = &SqlSelect{} |
| 1403 | return &where, m.parseWhereSubSelect(where.Source) |
| 1404 | } |
| 1405 | exprNode, err := expr.ParseExprWithFuncs(m, m.funcs) |
| 1406 | if err != nil { |
| 1407 | return nil, err |
| 1408 | } |
| 1409 | where.Expr = exprNode |
| 1410 | return &where, err |
| 1411 | } |
| 1412 | |
| 1413 | func (m *Sqlbridge) parseGroupBy(req *SqlSelect) (err error) { |
| 1414 |
no test coverage detected