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

Method parseSources

rel/parse_sql.go:1158–1227  ·  view source on GitHub ↗
(req *SqlSelect)

Source from the content-addressed store, hash-verified

1156}
1157
1158func (m *Sqlbridge) parseSources(req *SqlSelect) error {
1159
1160 discardComments(m)
1161
1162 if m.Cur().T != lex.TokenFrom {
1163 return m.ErrMsg("expected From")
1164 }
1165
1166 m.Next() // consume From
1167
1168 if m.Cur().T == lex.TokenIdentity {
1169 if err := m.parseSourceTable(req); err != nil {
1170 return err
1171 }
1172 }
1173
1174 for {
1175
1176 discardComments(m)
1177
1178 src := &SqlSource{}
1179 //u.Debugf("parseSources %v", m.Cur())
1180 switch m.Cur().T {
1181 case lex.TokenRightParenthesis:
1182 return nil
1183 case lex.TokenLeftParenthesis:
1184 // SELECT [columns] FROM [table] AS t1
1185 // INNER JOIN (select a,b,c from users WHERE d is not null) u ON u.user_id = t1.user_id
1186 if err := m.parseSourceSubQuery(src); err != nil {
1187 return err
1188 }
1189 if m.Cur().T == lex.TokenRightParenthesis {
1190 m.Next()
1191 }
1192 case lex.TokenLeft, lex.TokenRight, lex.TokenInner, lex.TokenOuter, lex.TokenJoin:
1193 // JOIN
1194 if err := m.parseSourceJoin(src); err != nil {
1195 return err
1196 }
1197 case lex.TokenEOF, lex.TokenEOS, lex.TokenWhere, lex.TokenGroupBy, lex.TokenLimit,
1198 lex.TokenOffset, lex.TokenWith, lex.TokenAlias, lex.TokenOrderBy:
1199 return nil
1200 default:
1201 return m.ErrMsg("unexpected token")
1202 }
1203
1204 discardComments(m)
1205
1206 switch m.Cur().T {
1207 case lex.TokenAs:
1208 m.Next() // Skip over As, we don't need it
1209 src.Alias = m.Cur().V
1210 m.Next()
1211 // select u.name, order.date FROM user AS u INNER JOIN ....
1212 case lex.TokenIdentity:
1213 src.Alias = m.Cur().V
1214 m.Next()
1215 }

Callers 1

parseSqlSelectMethod · 0.95

Calls 8

parseSourceTableMethod · 0.95
parseSourceSubQueryMethod · 0.95
parseSourceJoinMethod · 0.95
ParseExprWithFuncsFunction · 0.92
discardCommentsFunction · 0.85
CurMethod · 0.65
ErrMsgMethod · 0.65
NextMethod · 0.65

Tested by

no test coverage detected