func (m *MockCsvSource) loadTable(tableName string) error { csvRaw, ok := m.raw[tableName] if !ok { return schema.ErrNotFound } sr := strings.NewReader(csvRaw) u.Debugf("mockcsv:%p load mockcsv: %q data:%v", m, tableName, csvRaw) csvSource, _ := datasource.NewCsvSource(tableName, 0, sr, make(<-chan bool, 1)) tbl := membtree.NewStaticData(tableName) u.Infof("loaded columns %v", csvSource.Columns()) tbl.SetColumns(csvSource.Columns()) //u.Infof("set index col for %v: %v -- %v", tableName, 0, csvSource.Columns()[0]) m.tables[tableName] = tbl // Now we are going to page through the Csv rows and Put into // Static Data Source, ie copy into memory btree structure for { msg := csvSource.Next() if msg == nil { //u.Infof("table:%v len=%v", tableName, tbl.Length()) return nil } dm, ok := msg.Body().(*datasource.SqlDriverMessageMap) if !ok { return fmt.Errorf("Expected *datasource.SqlDriverMessageMap but got %T", msg.Body()) } // We don't know the Key tbl.Put(nil, nil, dm.Values()) } return nil }
func (m *JobExecutor) WalkSource(p *plan.Source) (Task, error) { //u.Debugf("%p NewSource? %p", m, p) if len(p.Static) > 0 { //u.Warnf("found static source") static := membtree.NewStaticData("static") static.SetColumns(p.Cols) _, err := static.Put(nil, nil, p.Static) if err != nil { u.Errorf("Could not put %v", err) } return NewSourceScanner(m.Ctx, p, static), nil } else if p.Conn == nil { u.Warnf("no conn? %T", p.DataSource) if p.DataSource == nil { u.Warnf("no datasource") return nil, fmt.Errorf("missing data source") } source, err := p.DataSource.Open(p.Stmt.SourceName()) if err != nil { return nil, err } p.Conn = source //u.Debugf("setting p.Conn %p %T", p.Conn, p.Conn) } e, hasSourceExec := p.Conn.(ExecutorSource) if hasSourceExec { return e.WalkExecSource(p) } return NewSource(m.Ctx, p) }