Adds checks for bad column-type and header csv-import flag values (#2525)

This commit is contained in:
zcstarr
2016-09-06 17:12:21 -07:00
committed by GitHub
parent ef11062cab
commit b1c0aeb9c5
2 changed files with 30 additions and 13 deletions
+11
View File
@@ -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))
+19 -13
View File
@@ -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() {