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

Function TestSqlParseAstCheck

rel/parse_sql_test.go:323–463  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

321}
322
323func TestSqlParseAstCheck(t *testing.T) {
324 t.Parallel()
325 sql := `
326 SELECT terms(repository.description)
327 FROM github_member
328 GROUP BY repository.language, author
329 `
330 req, err := rel.ParseSql(sql)
331 assert.True(t, err == nil && req != nil, "Must parse: %s \n\t%v", sql, err)
332 sel, ok := req.(*rel.SqlSelect)
333 assert.True(t, ok, "is SqlSelect: %T", req)
334 assert.True(t, len(sel.GroupBy) == 2, "has 2 group by: %v", sel.GroupBy)
335 gb := sel.GroupBy[0]
336 assert.True(t, gb.Expr != nil, "")
337 n := gb.Expr.(*expr.IdentityNode)
338 assert.True(t, n.String() == "repository.language", "%v", n)
339 assert.True(t, n.String() == "repository.language", "%v", n)
340
341 sql = `select @@version_comment limit 7`
342 req, err = rel.ParseSql(sql)
343 assert.True(t, err == nil && req != nil, "Must parse: %s \n\t%v", sql, err)
344 sel, ok = req.(*rel.SqlSelect)
345 assert.True(t, ok, "is SqlSelect: %T", req)
346 assert.True(t, sel.IsLiteral(), "Should be literal? %v", sql)
347 assert.True(t, sel.Limit == 7, "has limit = 7: %v", sel.Limit)
348 assert.True(t, len(sel.Columns) == 1, "has 1 col: %v", len(sel.Columns))
349 assert.True(t, sel.Columns[0].As == "@@version_comment", "")
350
351 sql = "select `repository.full_name` from `github_public` ORDER BY `respository.full_name` asc, TOINT(`fieldname`) DESC limit 100;"
352 req, err = rel.ParseSql(sql)
353 assert.True(t, err == nil && req != nil, "Must parse: %s \n\t%v", sql, err)
354 sel, ok = req.(*rel.SqlSelect)
355 assert.True(t, ok, "is SqlSelect: %T", req)
356 assert.True(t, sel.Limit == 100, "want limit = 100 but have %v", sel.Limit)
357 assert.True(t, len(sel.OrderBy) == 2, "want 2 orderby but has %v", len(sel.OrderBy))
358 assert.True(t, sel.OrderBy[0].Order == "ASC", "%v", sel.OrderBy[0].String())
359 assert.True(t, sel.OrderBy[1].Order == "DESC", "%v", sel.OrderBy[1].String())
360
361 sql = "select name from `github_public` limit 0, 100;"
362 req, err = rel.ParseSql(sql)
363 assert.True(t, err == nil && req != nil, "Must parse: %s \n\t%v", sql, err)
364 sel = req.(*rel.SqlSelect)
365 assert.True(t, sel.Limit == 100, "want limit = 100 but have %v", sel.Limit)
366 assert.True(t, sel.Offset == 0, "want offset = 0 but have %v", sel.Offset)
367
368 sql = "select `actor.id`, `actor.login` from github_watch where `actor.id` < 1000"
369 req, err = rel.ParseSql(sql)
370 assert.True(t, err == nil && req != nil, "Must parse: %s \n\t%v", sql, err)
371 sel, ok = req.(*rel.SqlSelect)
372 assert.True(t, ok, "is SqlSelect: %T", req)
373 assert.True(t, len(sel.Columns) == 2, "want 2 Columns but has %v", len(sel.Columns))
374 assert.True(t, sel.Where != nil, "where not nil?: %v", sel.Where.String())
375 assert.Equal(t, sel.Where.String(), "`actor.id` < 1000", "is where: %v", sel.Where.String())
376 // We also need to ensure that the From[].Sources are populated? Is this expected or needed?
377 // assert.True(t, len(sel.From) == 1, "Has 1 from")
378 // assert.True(t, len(sel.From[0].Columns) == 2, "wanted 2 columns in from: %#v", sel.From[0])
379
380 sql = `select repository.name, repository.stargazers from github_fork GROUP BY repository.name ORDER BY repository.stargazers DESC;`

Callers

nothing calls this directly

Calls 4

ParseSqlFunction · 0.92
StringMethod · 0.65
EqualMethod · 0.65
IsLiteralMethod · 0.45

Tested by

no test coverage detected