func GetSpannerCols(conv *Conv, srcTable string, srcCols []string) ([]string, error) {
	var spCols []string
	for _, srcCol := range srcCols {
		spCol, err := GetSpannerCol(conv, srcTable, srcCol, false)
		if err != nil {
			return nil, err
		}
		spCols = append(spCols, spCol)
	}
	return spCols, nil
}
GetSpannerCols maps a slice of source columns into their corresponding
Spanner columns using GetSpannerCol.
package internal
import (
	"fmt"
	"strconv"
	"strings"
	"github.com/cloudspannerecosystem/harbourbridge/spanner/ddl"
)
func GetSpannerTable(conv *Conv, srcTable string) (string, error) {
	if srcTable == "" {
		return "", fmt.Errorf("bad parameter: table string is empty")
	}
	if sp, found := conv.ToSpanner[srcTable]; found {
		return sp.Name, nil
	}
	spTable := getSpannerId(conv, srcTable)
	if spTable != srcTable {
		VerbosePrintf("Mapping source DB table %s to Spanner table %s\n", srcTable, spTable)
	}
	conv.ToSpanner[srcTable] = NameAndCols{Name: spTable, Cols: make(map[string]string)}
	conv.ToSource[spTable] = NameAndCols{Name: srcTable, Cols: make(map[string]string)}
	return spTable, nil
}
func GetSpannerCol(conv *Conv, srcTable, srcCol string, mustExist bool) (string, error) {
	if srcTable == "" {
		return "", fmt.Errorf("bad parameter: table string is empty")
	}
	if srcCol == "" {
		return "", fmt.Errorf("bad parameter: col string is empty")
	}
	sp, found := conv.ToSpanner[srcTable]
	if !found {
		return "", fmt.Errorf("unknown table %s", srcTable)
	}
	src, found := conv.ToSource[sp.Name]
	if !found || src.Name != srcTable {
		return "", fmt.Errorf("internal error: table mapping inconsistency for table %s (%s)", srcTable, src.Name)
	}
	if spCol, found := sp.Cols[srcCol]; found {
		return spCol, nil
	}
	if mustExist {
		return "", fmt.Errorf("table %s does not have a column %s", srcTable, srcCol)
	}
	spCol, _ := FixName(srcCol)
	if _, found := conv.ToSource[sp.Name].Cols[spCol]; found {
		id := len(sp.Cols)
		for {
			c := spCol + "_" + strconv.Itoa(id)
			if _, found := conv.ToSource[sp.Name].Cols[c]; !found {
				spCol = c
				break
			}
			id++
		}
	}
	if spCol != srcCol {
		VerbosePrintf("Mapping source DB col %s (table %s) to Spanner col %s\n", srcCol, srcTable, spCol)
	}
	conv.ToSpanner[srcTable].Cols[srcCol] = spCol
	conv.ToSource[sp.Name].Cols[spCol] = srcCol
	return spCol, nil
}