Skip to content

Commit 0d48a93

Browse files
author
James Cor
committed
address insert tests
1 parent bfaab5d commit 0d48a93

File tree

7 files changed

+28
-22
lines changed

7 files changed

+28
-22
lines changed

enginetest/queries/script_queries.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -763,13 +763,13 @@ var ScriptTests = []ScriptTest{
763763
Dialect: "mysql",
764764
Name: "strings cast to numbers",
765765
SetUpScript: []string{
766-
"create table test01(pk varchar(20) primary key)",
766+
"create table test01(pk varchar(20) primary key);",
767767
`insert into test01 values (' 3 12 4'),
768768
(' 3.2 12 4'),('-3.1234'),('-3.1a'),('-5+8'),('+3.1234'),
769769
('11d'),('11wha?'),('11'),('12'),('1a1'),('a1a1'),('11-5'),
770-
('3. 12 4'),('5.932887e+07'),('5.932887e+07abc'),('5.932887e7'),('5.932887e7abc')`,
771-
"create table test02(pk int primary key)",
772-
"insert into test02 values(11),(12),(13),(14),(15)",
770+
('3. 12 4'),('5.932887e+07'),('5.932887e+07abc'),('5.932887e7'),('5.932887e7abc');`,
771+
"create table test02(pk int primary key);",
772+
"insert into test02 values(11),(12),(13),(14),(15);",
773773
},
774774
Assertions: []ScriptTestAssertion{
775775
{
@@ -952,18 +952,18 @@ var ScriptTests = []ScriptTest{
952952
},
953953
{
954954
// https://github.com/dolthub/dolt/issues/9739
955-
Skip: true,
955+
//Skip: true,
956956
Dialect: "mysql",
957-
Query: "select * from test02 where pk in ('11asdf')",
958-
Expected: []sql.Row{{"11"}},
957+
Query: "select * from test02 where pk in ('11asdf');",
958+
Expected: []sql.Row{{11}},
959959
ExpectedWarningsCount: 1,
960960
ExpectedWarning: mysql.ERTruncatedWrongValue,
961961
},
962962
{
963963
// https://github.com/dolthub/dolt/issues/9739
964-
Skip: true,
964+
//Skip: true,
965965
Dialect: "mysql",
966-
Query: "select * from test02 where pk='11.12asdf'",
966+
Query: "select * from test02 where pk='11.12asdf';",
967967
Expected: []sql.Row{},
968968
ExpectedWarningsCount: 1,
969969
ExpectedWarning: mysql.ERTruncatedWrongValue,

sql/expression/convert.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,6 @@ func convertValue(ctx *sql.Context, val interface{}, castTo string, originType s
398398
if err != nil {
399399
return types.Int64.Zero(), nil
400400
}
401-
402401
return num, nil
403402
case ConvertToTime:
404403
t, _, err := types.Time.Convert(ctx, val)

sql/expression/function/inet_convert.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ func (i *InetNtoa) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) {
242242

243243
// Convert val into int
244244
ipv4int, _, err := types.Int32.Convert(ctx, val)
245-
if ipv4int != nil && err != nil {
245+
if ipv4int != nil && err != nil && !sql.ErrTruncatedIncorrect.Is(err) {
246246
return nil, sql.ErrInvalidType.New(reflect.TypeOf(val).String())
247247
}
248248

sql/expression/set.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,9 @@ func (s *SetField) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) {
7878
if types.ErrLengthBeyondLimit.Is(err) {
7979
return nil, sql.NewWrappedTypeConversionError(val, getField.fieldIndex, types.ErrLengthBeyondLimit.New(val, getField.Name()))
8080
}
81+
if sql.ErrTruncatedIncorrect.Is(err) {
82+
err = sql.ErrInvalidValue.New(getField.fieldType, val)
83+
}
8184
return nil, sql.NewWrappedTypeConversionError(val, getField.fieldIndex, err)
8285
}
8386
val = convertedVal

sql/index_builder.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ import (
2121

2222
"github.com/shopspring/decimal"
2323
"gopkg.in/src-d/go-errors.v1"
24-
25-
"github.com/dolthub/vitess/go/mysql"
2624
)
2725

2826
var (
@@ -236,7 +234,7 @@ func (b *MySQLIndexBuilder) convertKey(ctx *Context, colType Type, keyType Type,
236234
if !ErrTruncatedIncorrect.Is(err) {
237235
return nil, err
238236
}
239-
ctx.Warn(mysql.ERTruncatedWrongValue, "%s", err.Error())
237+
//ctx.Warn(mysql.ERTruncatedWrongValue, "%s", err.Error())
240238
}
241239
return k, nil
242240
}

sql/types/conversion.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ package types
1616

1717
import (
1818
"fmt"
19+
"github.com/dolthub/vitess/go/mysql"
1920
"reflect"
2021
"strconv"
2122
"strings"
@@ -773,6 +774,10 @@ func ConvertOrTruncate(ctx *sql.Context, i interface{}, t sql.Type) (interface{}
773774
if err == nil {
774775
return converted, nil
775776
}
777+
if sql.ErrTruncatedIncorrect.Is(err) {
778+
ctx.Warn(mysql.ERTruncatedWrongValue, "%s", err.Error())
779+
return converted, nil
780+
}
776781

777782
// If a value can't be converted to an enum or set type, truncate it to a value that is guaranteed
778783
// to not match any enum value.

sql/types/number.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ func (t NumberTypeImpl_) Convert(ctx context.Context, v interface{}) (interface{
223223
case sqltypes.Int8:
224224
num, _, err := convertToInt64(t, v)
225225
if err != nil {
226-
return nil, sql.OutOfRange, err
226+
return int8(num), sql.OutOfRange, err
227227
}
228228
if num > math.MaxInt8 {
229229
return int8(math.MaxInt8), sql.OutOfRange, nil
@@ -235,7 +235,7 @@ func (t NumberTypeImpl_) Convert(ctx context.Context, v interface{}) (interface{
235235
case sqltypes.Uint8:
236236
num, _, err := convertToInt64(t, v)
237237
if err != nil {
238-
return nil, sql.OutOfRange, err
238+
return uint8(num), sql.OutOfRange, err
239239
}
240240
if num > math.MaxUint8 {
241241
return uint8(math.MaxUint8), sql.OutOfRange, nil
@@ -247,7 +247,7 @@ func (t NumberTypeImpl_) Convert(ctx context.Context, v interface{}) (interface{
247247
case sqltypes.Int16:
248248
num, _, err := convertToInt64(t, v)
249249
if err != nil {
250-
return nil, sql.OutOfRange, err
250+
return int16(num), sql.OutOfRange, err
251251
}
252252
if num > math.MaxInt16 {
253253
return int16(math.MaxInt16), sql.OutOfRange, nil
@@ -259,7 +259,7 @@ func (t NumberTypeImpl_) Convert(ctx context.Context, v interface{}) (interface{
259259
case sqltypes.Uint16:
260260
num, _, err := convertToInt64(t, v)
261261
if err != nil {
262-
return nil, sql.OutOfRange, err
262+
return uint16(num), sql.OutOfRange, err
263263
}
264264
if num > math.MaxUint16 {
265265
return uint16(math.MaxUint16), sql.OutOfRange, nil
@@ -271,7 +271,7 @@ func (t NumberTypeImpl_) Convert(ctx context.Context, v interface{}) (interface{
271271
case sqltypes.Int24:
272272
num, _, err := convertToInt64(t, v)
273273
if err != nil {
274-
return nil, sql.OutOfRange, err
274+
return int32(num), sql.OutOfRange, err
275275
}
276276
if num > (1<<23 - 1) {
277277
return int32(1<<23 - 1), sql.OutOfRange, nil
@@ -283,7 +283,7 @@ func (t NumberTypeImpl_) Convert(ctx context.Context, v interface{}) (interface{
283283
case sqltypes.Uint24:
284284
num, _, err := convertToInt64(t, v)
285285
if err != nil {
286-
return nil, sql.OutOfRange, err
286+
return uint32(num), sql.OutOfRange, err
287287
}
288288
if num >= (1 << 24) {
289289
return uint32(1<<24 - 1), sql.OutOfRange, nil
@@ -295,7 +295,7 @@ func (t NumberTypeImpl_) Convert(ctx context.Context, v interface{}) (interface{
295295
case sqltypes.Int32:
296296
num, _, err := convertToInt64(t, v)
297297
if err != nil {
298-
return nil, sql.OutOfRange, err
298+
return int32(num), sql.OutOfRange, err
299299
}
300300
if num > math.MaxInt32 {
301301
return int32(math.MaxInt32), sql.OutOfRange, nil
@@ -307,7 +307,7 @@ func (t NumberTypeImpl_) Convert(ctx context.Context, v interface{}) (interface{
307307
case sqltypes.Uint32:
308308
num, _, err := convertToInt64(t, v)
309309
if err != nil {
310-
return nil, sql.OutOfRange, err
310+
return uint32(num), sql.OutOfRange, err
311311
}
312312
if num > math.MaxUint32 {
313313
return uint32(math.MaxUint32), sql.OutOfRange, nil
@@ -1244,6 +1244,7 @@ func convertToFloat64(t NumberTypeImpl_, v interface{}) (float64, error) {
12441244
}
12451245
return float64(i), nil
12461246
case string:
1247+
// TODO: proper truncation and rounding behavior
12471248
v = strings.Trim(v, sql.NumericCutSet)
12481249
i, err := strconv.ParseFloat(v, 64)
12491250
if err != nil {

0 commit comments

Comments
 (0)