Add blueprint for RELATE SQL query
This commit is contained in:
parent
feea12f93d
commit
7e9c595ff7
2 changed files with 47 additions and 0 deletions
13
sql/exprs.go
13
sql/exprs.go
|
@ -106,6 +106,19 @@ func (p *parser) parseIdent() (*Ident, error) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *parser) parseTable() (*Table, error) {
|
||||||
|
|
||||||
|
_, lit, err := p.shouldBe(IDENT, NUMBER, DOUBLE)
|
||||||
|
if err != nil {
|
||||||
|
return nil, &ParseError{Found: lit, Expected: []string{"name"}}
|
||||||
|
}
|
||||||
|
|
||||||
|
val, err := p.declare(TABLE, lit)
|
||||||
|
|
||||||
|
return val.(*Table), err
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (p *parser) parseThing() (*Thing, error) {
|
func (p *parser) parseThing() (*Thing, error) {
|
||||||
|
|
||||||
_, lit, err := p.shouldBe(THING)
|
_, lit, err := p.shouldBe(THING)
|
||||||
|
|
|
@ -22,6 +22,40 @@ func (p *parser) parseRelateStatement() (stmt *RelateStatement, err error) {
|
||||||
stmt.NS = p.c.Get("NS").(string)
|
stmt.NS = p.c.Get("NS").(string)
|
||||||
stmt.DB = p.c.Get("DB").(string)
|
stmt.DB = p.c.Get("DB").(string)
|
||||||
|
|
||||||
|
if stmt.Type, err = p.parseTable(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, _, err = p.shouldBe(FROM); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if stmt.From, err = p.parseWhat(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, _, err = p.shouldBe(TO); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if stmt.With, err = p.parseWhat(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, _, stmt.Uniq = p.mightBe(UNIQUE)
|
||||||
|
|
||||||
|
if stmt.Data, err = p.parseData(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if stmt.Echo, err = p.parseEcho(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, _, err = p.shouldBe(EOF, SEMICOLON); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue