func (conv *Conv) SetDataMode() {
	conv.mode = dataOnly
}
SetDataMode configures conv to convert data and write it to Spanner.
In this mode, we also do a complete re-processing of all statements
for stats purposes (its hard to keep track of which stats are
collected in each phase, so we simply reset and recollect),
but we don't modify the schema.
package internal
import (
	"fmt"
	"time"
	"github.com/cloudspannerecosystem/harbourbridge/schema"
	"github.com/cloudspannerecosystem/harbourbridge/spanner/ddl"
)
type Conv struct {
	mode           mode                                 
	SpSchema       ddl.Schema                           
	SyntheticPKeys map[string]SyntheticPKey             
	SrcSchema      map[string]schema.Table              
	Issues         map[string]map[string][]SchemaIssue  
	ToSpanner      map[string]NameAndCols               
	ToSource       map[string]NameAndCols               
	UsedNames      map[string]bool                      
	dataSink       func(table string, cols []string, values []interface{})
	Location       *time.Location  
	sampleBadRows  rowSamples      
	Stats          stats
	TimezoneOffset string  
	TargetDb       string  
}
type mode int
const (
	schemaOnly mode = iota
	dataOnly
)
type SyntheticPKey struct {
	Col      string
	Sequence int64
}
type SchemaIssue int
const (
	DefaultValue SchemaIssue = iota
	ForeignKey
	MissingPrimaryKey
	MultiDimensionalArray
	NoGoodType
	Numeric
	NumericThatFits
	Decimal
	DecimalThatFits
	Serial
	AutoIncrement
	Timestamp
	Datetime
	Widened
	Time
)
type NameAndCols struct {
	Name string
	Cols map[string]string
}
type rowSamples struct {
	rows       []*row
	bytes      int64  
	bytesLimit int64  
}
type row struct {
	table string
	cols  []string
	vals  []string
}
type stats struct {
	Rows       map[string]int64           
	GoodRows   map[string]int64           
	BadRows    map[string]int64           
	Statement  map[string]*statementStat  
	Unexpected map[string]int64           
	Reparsed   int64                      
}
type statementStat struct {
	Schema int64
	Data   int64
	Skip   int64
	Error  int64
}
func MakeConv() *Conv {
	return &Conv{
		SpSchema:       ddl.NewSchema(),
		SyntheticPKeys: make(map[string]SyntheticPKey),
		SrcSchema:      make(map[string]schema.Table),
		Issues:         make(map[string]map[string][]SchemaIssue),
		ToSpanner:      make(map[string]NameAndCols),
		ToSource:       make(map[string]NameAndCols),
		UsedNames:      make(map[string]bool),
		Location:       time.Local,  
		sampleBadRows:  rowSamples{bytesLimit: 10 * 1000 * 1000},
		Stats: stats{
			Rows:       make(map[string]int64),
			GoodRows:   make(map[string]int64),
			BadRows:    make(map[string]int64),
			Statement:  make(map[string]*statementStat),
			Unexpected: make(map[string]int64),
		},
		TimezoneOffset: "+00:00",  
	}
}
func (conv *Conv) SetDataSink(ds func(table string, cols []string, values []interface{})) {
	conv.dataSink = ds
}
func (conv *Conv) SetSchemaMode() {
	conv.mode = schemaOnly
}