MCPcopy Create free account
hub / github.com/araddon/qlbridge / parseWhere

Method parseWhere

rel/parse_sql.go:1360–1411  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1358}
1359
1360func (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
1413func (m *Sqlbridge) parseGroupBy(req *SqlSelect) (err error) {
1414

Callers 3

parseSqlUpdateMethod · 0.95
parseSqlUpsertMethod · 0.95
parseWhereSelectMethod · 0.95

Calls 5

parseWhereSubSelectMethod · 0.95
ParseExprWithFuncsFunction · 0.92
CurMethod · 0.65
NextMethod · 0.65
BackupMethod · 0.65

Tested by

no test coverage detected