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

Function ParseKeyValue

rel/parse_sql.go:2254–2313  ·  view source on GitHub ↗
(pg expr.TokenPager, jh u.JsonHelper)

Source from the content-addressed store, hash-verified

2252}
2253
2254func ParseKeyValue(pg expr.TokenPager, jh u.JsonHelper) error {
2255 if pg.Cur().T != lex.TokenIdentity {
2256 return pg.ErrMsg("Expected key/identity for key=value, array")
2257 }
2258
2259 for {
2260 key := pg.Cur().V
2261 pg.Next()
2262
2263 switch pg.Cur().T {
2264 case lex.TokenEOF, lex.TokenEOS:
2265 return nil
2266 }
2267 if pg.Cur().T != lex.TokenEqual {
2268 pg.Backup() // whoops, we consumed too much
2269 pg.Backup()
2270 //u.Debugf("exit keyvalue %v", pg.Cur())
2271 return nil
2272 }
2273 pg.Next() // consume equal
2274
2275 switch pg.Cur().T {
2276 case lex.TokenIdentity:
2277 bv, err := strconv.ParseBool(pg.Cur().V)
2278 if err == nil {
2279 jh[key] = bv
2280 } else {
2281 jh[key] = pg.Cur().V
2282 }
2283
2284 case lex.TokenValue:
2285 jh[key] = pg.Cur().V
2286 case lex.TokenBool:
2287 bv, err := strconv.ParseBool(pg.Cur().V)
2288 if err != nil {
2289 return err
2290 }
2291 jh[key] = bv
2292 case lex.TokenInteger:
2293 iv, err := strconv.ParseInt(pg.Cur().V, 10, 64)
2294 if err != nil {
2295 return err
2296 }
2297 jh[key] = iv
2298 case lex.TokenFloat:
2299 fv, err := strconv.ParseFloat(pg.Cur().V, 64)
2300 if err != nil {
2301 return err
2302 }
2303 jh[key] = fv
2304 default:
2305 return pg.ErrMsg("Expected value")
2306 }
2307 pg.Next() // consume value
2308 if pg.Cur().T != lex.TokenComma {
2309 return nil
2310 }
2311 pg.Next() // consume comma

Callers 1

ParseWithFunction · 0.85

Calls 4

CurMethod · 0.65
ErrMsgMethod · 0.65
NextMethod · 0.65
BackupMethod · 0.65

Tested by

no test coverage detected