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
}
GetSpannerTable maps a source DB table name into a legal Spanner table
name. Note that source DB column names can be essentially any string, but
Spanner column names must use a limited character set. This means that
getSpannerTable may have to change a name to make it legal, we must ensure
that:
a) the new table name is legal
b) the new table name doesn't clash with other Spanner table names
c) we consistently return the same name for this table.

conv.UsedNames tracks Spanner names that have been used for table names, foreign key constraints
and indexes. We use this to ensure we generate unique names when
we map from source dbs to Spanner since Spanner requires all these names to be
distinct and should not differ only in case.
package internal
import (
	"fmt"
	"strconv"
	"strings"
	"github.com/cloudspannerecosystem/harbourbridge/spanner/ddl"
)