func (repo *DataSourceRepository) Get(dataSourceName, alias string) ([]Node, error) {
	ds, ok := repo.factories[dataSourceName]
	if !ok {
		var dss []string
		for k := range repo.factories {
			dss = append(dss, k)
		}
		return nil, errors.Errorf("no such datasource or common table expression: %s, available datasources and CTEs: %+v", dataSourceName, dss)
	}
	return ds(dataSourceName, alias), nil
}
Get gets a new builder for a given data source.
package physical
import (
	"context"
	"fmt"
	"github.com/cube2222/octosql"
	"github.com/cube2222/octosql/execution"
	"github.com/cube2222/octosql/graph"
	"github.com/cube2222/octosql/physical/metadata"
	"github.com/pkg/errors"
)
type FieldType string
const (
	Primary   FieldType = "primary"
	Secondary FieldType = "secondary"
)
type DataSourceBuilderFactory func(name, alias string) []Node
type DataSourceRepository struct {
	factories map[string]DataSourceBuilderFactory
}
func NewDataSourceRepository() *DataSourceRepository {
	return &DataSourceRepository{
		factories: make(map[string]DataSourceBuilderFactory),
	}
}