// addSpecifiedData specializes the clause given the row provided and attemp to // retrieve the correspoinding clause data. func (p *queryPlan) addSpecifiedData(r table.Row, cls *semantic.GraphClause, lo *storage.LookupOptions) error { if cls.S == nil { v := getBindedValueForComponent(r, []string{cls.SBinding, cls.SAlias}) if v != nil { if v.N != nil { cls.S = v.N } } } if cls.P == nil { v := getBindedValueForComponent(r, []string{cls.PBinding, cls.PAlias}) if v != nil { if v.N != nil { cls.P = v.P } } nlo, err := updateTimeBoundsForRow(lo, cls, r) if err != nil { return err } lo = nlo } if cls.O == nil { v := getBindedValueForComponent(r, []string{cls.PBinding, cls.PAlias}) if v != nil { o, err := cellToObject(v) if err == nil { cls.O = o } } nlo, err := updateTimeBoundsForRow(lo, cls, r) if err != nil { return err } lo = nlo } tbl, err := simpleFetch(p.grfs, cls, lo) if err != nil { return err } p.tbl.AddBindings(tbl.Bindings()) for _, nr := range tbl.Rows() { p.tbl.AddRow(table.MergeRows([]table.Row{r, nr})) } return nil }