diff --git a/enginetest/queries/script_queries.go b/enginetest/queries/script_queries.go index 66760e983a..62cc02ab30 100644 --- a/enginetest/queries/script_queries.go +++ b/enginetest/queries/script_queries.go @@ -9764,6 +9764,8 @@ where }, }, { + // this is failing due to a type coercion bug in comparison.Compare + // https://github.com/dolthub/dolt/issues/9510 Skip: true, Query: "select i, s + 0, s from t where s = '';", Expected: []sql.Row{ @@ -9773,7 +9775,6 @@ where }, }, { - Skip: true, Query: "select i, s + 0, s from tt;", Expected: []sql.Row{ {0, float64(3), "something,"}, diff --git a/sql/types/set.go b/sql/types/set.go index 3691639ab7..aadc64a376 100644 --- a/sql/types/set.go +++ b/sql/types/set.go @@ -347,9 +347,6 @@ func (t SetType) convertBitFieldToString(bitField uint64) (string, error) { if !ok { return "", sql.ErrInvalidSetValue.New(bitField) } - if len(val) == 0 { - continue - } if writeCommas { strBuilder.WriteByte(',') } else { @@ -367,6 +364,7 @@ func (t SetType) convertStringToBitField(str string) (uint64, error) { return 0, nil } var bitField uint64 + _, allowEmptyString := t.valToBit[""] lastI := 0 var val string for i := 0; i < len(str)+1; i++ { @@ -375,7 +373,7 @@ func (t SetType) convertStringToBitField(str string) (uint64, error) { } // empty string should hash to 0, so just skip - if lastI == i { + if lastI == i && !allowEmptyString { lastI = i + 1 continue } diff --git a/sql/types/set_test.go b/sql/types/set_test.go index 24787d650c..f4313a345e 100644 --- a/sql/types/set_test.go +++ b/sql/types/set_test.go @@ -272,7 +272,7 @@ func TestSetConvertToString(t *testing.T) { bit uint64 expectedStr string }{ - {[]string{"", "a", "b", "c"}, sql.Collation_Default, 15, "a,b,c"}, + {[]string{"", "a", "b", "c"}, sql.Collation_Default, 15, ",a,b,c"}, {[]string{"", "a", "b", "c"}, sql.Collation_Default, 14, "a,b,c"}, }