mirror of
https://github.com/dolthub/dolt.git
synced 2026-05-12 11:29:01 -05:00
Adds checks for bad column-type and header csv-import flag values (#2525)
This commit is contained in:
@@ -144,9 +144,20 @@ func main() {
|
||||
headers = strings.Split(*header, ",")
|
||||
}
|
||||
|
||||
uniqueHeaders := make(map[string]bool)
|
||||
for _, header := range headers {
|
||||
uniqueHeaders[header] = true
|
||||
}
|
||||
if len(uniqueHeaders) != len(headers) {
|
||||
d.CheckErrorNoUsage(fmt.Errorf("Invalid headers specified, headers must be unique"))
|
||||
}
|
||||
|
||||
kinds := []types.NomsKind{}
|
||||
if *columnTypes != "" {
|
||||
kinds = csv.StringsToKinds(strings.Split(*columnTypes, ","))
|
||||
if len(kinds) != len(uniqueHeaders) {
|
||||
d.CheckErrorNoUsage(fmt.Errorf("Invalid column-types specified, column types do not correspond to number of headers"))
|
||||
}
|
||||
}
|
||||
|
||||
ds, err := spec.GetDataset(flag.Arg(dataSetArgN))
|
||||
|
||||
@@ -257,7 +257,7 @@ func (s *testSuite) TestCSVImporterWithExternalHeader() {
|
||||
s.Equal(types.Number(8), st.Get("y"))
|
||||
}
|
||||
|
||||
func (s *testSuite) TestCSVImporterWithExternalHeaderAndCustomDelimiter() {
|
||||
func (s *testSuite) TestCSVImporterWithInvalidExternalHeader() {
|
||||
input, err := ioutil.TempFile(s.TempDir, "")
|
||||
d.Chk.NoError(err)
|
||||
defer input.Close()
|
||||
@@ -268,21 +268,27 @@ func (s *testSuite) TestCSVImporterWithExternalHeaderAndCustomDelimiter() {
|
||||
|
||||
setName := "csv"
|
||||
dataspec := spec.CreateValueSpecString("ldb", s.LdbDir, setName)
|
||||
stdout, stderr := s.MustRun(main, []string{"--no-progress", "--delimiter", "#", "--column-types", "String,Number", "--header", "x,y", input.Name(), dataspec})
|
||||
stdout, stderr, exitErr := s.Run(main, []string{"--no-progress", "--column-types", "String,Number", "--header", "x,x", input.Name(), dataspec})
|
||||
s.Equal("", stdout)
|
||||
s.Equal("", stderr)
|
||||
s.Equal("error: Invalid headers specified, headers must be unique\n", stderr)
|
||||
s.Equal(clienttest.ExitError{-1}, exitErr)
|
||||
}
|
||||
|
||||
cs := chunks.NewLevelDBStore(s.LdbDir, "", 1, false)
|
||||
ds := dataset.NewDataset(datas.NewDatabase(cs), setName)
|
||||
defer ds.Database().Close()
|
||||
defer os.RemoveAll(s.LdbDir)
|
||||
func (s *testSuite) TestCSVImporterWithInvalidNumColumnTypeSpec() {
|
||||
input, err := ioutil.TempFile(s.TempDir, "")
|
||||
d.Chk.NoError(err)
|
||||
defer input.Close()
|
||||
defer os.Remove(input.Name())
|
||||
|
||||
l := ds.HeadValue().(types.List)
|
||||
s.Equal(uint64(1), l.Len())
|
||||
v := l.Get(0)
|
||||
st := v.(types.Struct)
|
||||
s.Equal(types.String("7"), st.Get("x"))
|
||||
s.Equal(types.Number(8), st.Get("y"))
|
||||
_, err = input.WriteString("7,8\n")
|
||||
d.Chk.NoError(err)
|
||||
|
||||
setName := "csv"
|
||||
dataspec := spec.CreateValueSpecString("ldb", s.LdbDir, setName)
|
||||
stdout, stderr, exitErr := s.Run(main, []string{"--no-progress", "--column-types", "String", "--header", "x,y", input.Name(), dataspec})
|
||||
s.Equal("", stdout)
|
||||
s.Equal("error: Invalid column-types specified, column types do not correspond to number of headers\n", stderr)
|
||||
s.Equal(clienttest.ExitError{-1}, exitErr)
|
||||
}
|
||||
|
||||
func (s *testSuite) TestCSVImportSkipRecords() {
|
||||
|
||||
Reference in New Issue
Block a user