func (p *createPlan) String(ctx context.Context) string {
	return fmt.Sprintf("CREATE plan:\n\nstore(%q).NewGraph(_, %v)", p.store.Name(nil), p.stm.Graphs())
}
String returns a readable description of the execution plan.
package planner
import (
	"bytes"
	"context"
	"errors"
	"fmt"
	"io"
	"reflect"
	"strconv"
	"strings"
	"sync"
	"time"
	"github.com/google/badwolf/bql/lexer"
	"github.com/google/badwolf/bql/planner/filter"
	"github.com/google/badwolf/bql/planner/tracer"
	"github.com/google/badwolf/bql/semantic"
	"github.com/google/badwolf/bql/table"
	"github.com/google/badwolf/storage"
	"github.com/google/badwolf/triple"
	"github.com/google/badwolf/triple/literal"
	"github.com/google/badwolf/triple/predicate"
	"golang.org/x/sync/errgroup"
)
type Executor interface {
	Execute(ctx context.Context) (*table.Table, error)
	String(ctx context.Context) string
	Type() string
}
type createPlan struct {
	stm    *semantic.Statement
	store  storage.Store
	tracer io.Writer
}
func (p *createPlan) Type() string {
	return "CREATE"
}
func (p *createPlan) Execute(ctx context.Context) (*table.Table, error) {
	t, err := table.New([]string{})
	if err != nil {
		return nil, err
	}
	errs := []string{}
	for _, gName := range p.stm.GraphNames() {
		gNameCopy := gName  
		tracer.V(2).Trace(p.tracer, func() *tracer.Arguments {
			return &tracer.Arguments{
				Msgs: []string{fmt.Sprintf("Creating new graph %q", gNameCopy)},
			}
		})
		if _, err := p.store.NewGraph(ctx, gName); err != nil {
			errs = append(errs, err.Error())
		}
	}
	if len(errs) > 0 {
		return nil, errors.New(strings.Join(errs, "; "))
	}
	return t, nil
}