(src *SqlSource)
| 1262 | } |
| 1263 | |
| 1264 | func (m *Sqlbridge) parseSourceJoin(src *SqlSource) error { |
| 1265 | |
| 1266 | switch m.Cur().T { |
| 1267 | case lex.TokenLeft, lex.TokenRight: |
| 1268 | src.LeftOrRight = m.Cur().T |
| 1269 | m.Next() |
| 1270 | } |
| 1271 | |
| 1272 | // Optional Inner/Outer |
| 1273 | switch m.Cur().T { |
| 1274 | case lex.TokenInner, lex.TokenOuter: |
| 1275 | src.JoinType = m.Cur().T |
| 1276 | m.Next() |
| 1277 | } |
| 1278 | |
| 1279 | if m.Cur().T == lex.TokenJoin { |
| 1280 | m.Next() // Consume join keyword |
| 1281 | } else { |
| 1282 | return m.ErrMsg("Requires join") |
| 1283 | } |
| 1284 | |
| 1285 | switch m.Cur().T { |
| 1286 | case lex.TokenLeftParenthesis: |
| 1287 | // SELECT [columns] FROM [table] AS t1 |
| 1288 | // INNER JOIN (select a,b,c from users WHERE d is not null) u ON u.user_id = t1.user_id |
| 1289 | if err := m.parseSourceSubQuery(src); err != nil { |
| 1290 | return err |
| 1291 | } |
| 1292 | case lex.TokenIdentity: |
| 1293 | // Name of table |
| 1294 | src.Name = m.Cur().V |
| 1295 | m.Next() |
| 1296 | default: |
| 1297 | return m.ErrMsg("unrecognized kw in join") |
| 1298 | } |
| 1299 | return nil |
| 1300 | } |
| 1301 | |
| 1302 | func (m *Sqlbridge) parseInto(req *SqlSelect) error { |
| 1303 |
no test coverage detected