mirror of
https://github.com/dolthub/dolt.git
synced 2026-02-10 18:49:02 -06:00
[no-release-notes] Handle new sql.ConvertInRange values (#10189)
This commit is contained in:
@@ -61,7 +61,7 @@ require (
|
||||
github.com/dolthub/dolt-mcp v0.2.2
|
||||
github.com/dolthub/eventsapi_schema v0.0.0-20250915094920-eadfd39051ca
|
||||
github.com/dolthub/flatbuffers/v23 v23.3.3-dh.2
|
||||
github.com/dolthub/go-mysql-server v0.20.1-0.20251210203732-73e40081ee14
|
||||
github.com/dolthub/go-mysql-server v0.20.1-0.20251210220151-1979d2474d7d
|
||||
github.com/dolthub/gozstd v0.0.0-20240423170813-23a2903bca63
|
||||
github.com/edsrzf/mmap-go v1.2.0
|
||||
github.com/esote/minmaxheap v1.0.0
|
||||
|
||||
@@ -195,8 +195,8 @@ github.com/dolthub/fslock v0.0.3 h1:iLMpUIvJKMKm92+N1fmHVdxJP5NdyDK5bK7z7Ba2s2U=
|
||||
github.com/dolthub/fslock v0.0.3/go.mod h1:QWql+P17oAAMLnL4HGB5tiovtDuAjdDTPbuqx7bYfa0=
|
||||
github.com/dolthub/go-icu-regex v0.0.0-20250916051405-78a38d478790 h1:zxMsH7RLiG+dlZ/y0LgJHTV26XoiSJcuWq+em6t6VVc=
|
||||
github.com/dolthub/go-icu-regex v0.0.0-20250916051405-78a38d478790/go.mod h1:F3cnm+vMRK1HaU6+rNqQrOCyR03HHhR1GWG2gnPOqaE=
|
||||
github.com/dolthub/go-mysql-server v0.20.1-0.20251210203732-73e40081ee14 h1:LTysfefg3bPyJ1klzIrq/kkiwGfLPhlN/38ZCIg3Kxo=
|
||||
github.com/dolthub/go-mysql-server v0.20.1-0.20251210203732-73e40081ee14/go.mod h1:NjewWKoa5bVSLdKwL7fg7eAfrcIxDybWUKoWEHWRTw4=
|
||||
github.com/dolthub/go-mysql-server v0.20.1-0.20251210220151-1979d2474d7d h1:PO6Nwm6RRc9+tPbV0mDf1uN3SWaLA0XkD8lNSvXUbFY=
|
||||
github.com/dolthub/go-mysql-server v0.20.1-0.20251210220151-1979d2474d7d/go.mod h1:NjewWKoa5bVSLdKwL7fg7eAfrcIxDybWUKoWEHWRTw4=
|
||||
github.com/dolthub/gozstd v0.0.0-20240423170813-23a2903bca63 h1:OAsXLAPL4du6tfbBgK0xXHZkOlos63RdKYS3Sgw/dfI=
|
||||
github.com/dolthub/gozstd v0.0.0-20240423170813-23a2903bca63/go.mod h1:lV7lUeuDhH5thVGDCKXbatwKy2KW80L4rMT46n+Y2/Q=
|
||||
github.com/dolthub/ishell v0.0.0-20240701202509-2b217167d718 h1:lT7hE5k+0nkBdj/1UOSFwjWpNxf+LCApbRHgnCA17XE=
|
||||
|
||||
@@ -1747,7 +1747,7 @@ func convertValueToNewType(ctx *sql.Context, value interface{}, newTypeInfo type
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if !inRange {
|
||||
if inRange != sql.InRange {
|
||||
return nil, fmt.Errorf("out of range conversion for value %v to type %s", value, newTypeInfo.String())
|
||||
}
|
||||
return newValue, nil
|
||||
|
||||
@@ -1442,7 +1442,7 @@ func jsonMergeLargeDocumentTests(t *testing.T) []schemaMergeTest {
|
||||
insert := func(document sqltypes.MutableJSON, path string, val interface{}) sqltypes.MutableJSON {
|
||||
jsonVal, inRange, err := sqltypes.JSON.Convert(ctx, val)
|
||||
require.NoError(t, err)
|
||||
require.True(t, (bool)(inRange))
|
||||
require.True(t, inRange == sql.InRange)
|
||||
newDoc, changed, err := document.Insert(ctx, path, jsonVal.(sql.JSONWrapper))
|
||||
require.NoError(t, err)
|
||||
require.True(t, changed)
|
||||
@@ -1452,7 +1452,7 @@ func jsonMergeLargeDocumentTests(t *testing.T) []schemaMergeTest {
|
||||
set := func(document sqltypes.MutableJSON, path string, val interface{}) sqltypes.MutableJSON {
|
||||
jsonVal, inRange, err := sqltypes.JSON.Convert(ctx, val)
|
||||
require.NoError(t, err)
|
||||
require.True(t, (bool)(inRange))
|
||||
require.True(t, inRange == sql.InRange)
|
||||
newDoc, changed, err := document.Replace(ctx, path, jsonVal.(sql.JSONWrapper))
|
||||
require.NoError(t, err)
|
||||
require.True(t, changed)
|
||||
|
||||
@@ -139,7 +139,7 @@ func (c ProllyRowConverter) putFields(ctx context.Context, tup val.Tuple, proj v
|
||||
c.warnFn(rowconv.DatatypeCoercionFailureWarningCode, rowconv.DatatypeCoercionFailureWarning, col.Name)
|
||||
dstRow[j] = nil
|
||||
err = nil
|
||||
} else if !inRange {
|
||||
} else if inRange != sql.InRange && c.warnFn != nil {
|
||||
c.warnFn(rowconv.TruncatedOutOfRangeValueWarningCode, rowconv.TruncatedOutOfRangeValueWarning, t, f)
|
||||
dstRow[j] = nil
|
||||
} else if err != nil {
|
||||
|
||||
@@ -1407,8 +1407,9 @@ func getRangeCutValue(ctx context.Context, cut sql.MySQLRangeCut, typ sql.Type)
|
||||
if _, ok := cut.(sql.AboveNull); ok {
|
||||
return nil, nil
|
||||
}
|
||||
ret, oob, err := typ.Convert(ctx, sql.GetMySQLRangeCutKey(cut))
|
||||
if oob == sql.OutOfRange {
|
||||
ret, inRange, err := typ.Convert(ctx, sql.GetMySQLRangeCutKey(cut))
|
||||
// TODO: seems like we should check for error before inRange, but certain tests fail
|
||||
if inRange != sql.InRange {
|
||||
return ret, nil
|
||||
}
|
||||
return ret, err
|
||||
|
||||
@@ -169,46 +169,46 @@ func (t *DoltTable) LookupForExpressions(ctx *sql.Context, exprs ...sql.Expressi
|
||||
dbState.SessionCache().CacheStrictLookup(schKey, lookups)
|
||||
}
|
||||
|
||||
cols := schCols.GetColumns()
|
||||
for _, lookup := range lookups {
|
||||
if lookup.Cols.Intersection(colset).Len() == lookup.Cols.Len() {
|
||||
// (1) assign lookup columns to range expressions in the appropriate
|
||||
// order for the given lookup.
|
||||
// (2) aggregate the unused expressions into the return filter.
|
||||
rb := sql.NewEqualityIndexBuilder(lookup.Idx)
|
||||
for _, c2 := range lookupCols {
|
||||
var matched bool
|
||||
var matchIdx int
|
||||
for i, ord := range lookup.Ordinals {
|
||||
// the ordinals redirection accounts for index
|
||||
// columns not in schema order
|
||||
idx := ord - 1
|
||||
c := schCols.GetColumns()[idx]
|
||||
if strings.EqualFold(c2.Col, c.Name) {
|
||||
matched = true
|
||||
matchIdx = i
|
||||
break
|
||||
}
|
||||
}
|
||||
if matched {
|
||||
if err := rb.AddEquality(ctx, matchIdx, c2.Lit.Value()); err != nil {
|
||||
return sql.IndexLookup{}, nil, nil, false, nil
|
||||
}
|
||||
}
|
||||
if !matched || !expression.PreciseComparison(c2.Eq) {
|
||||
if leftoverExpr == nil {
|
||||
leftoverExpr = c2.Eq
|
||||
} else {
|
||||
leftoverExpr = expression.NewAnd(leftoverExpr, c2.Eq)
|
||||
}
|
||||
}
|
||||
}
|
||||
ret, err := rb.Build(ctx)
|
||||
if err != nil {
|
||||
return sql.IndexLookup{}, nil, nil, false, err
|
||||
}
|
||||
|
||||
return ret, lookup.Fds, leftoverExpr, true, nil
|
||||
// Every column must be specified in search
|
||||
if lookup.Cols.Intersection(colset).Len() != lookup.Cols.Len() {
|
||||
continue
|
||||
}
|
||||
// (1) assign lookup columns to range expressions in the appropriate order for the given lookup.
|
||||
// (2) aggregate the unused expressions into the return filter.
|
||||
rb := sql.NewEqualityIndexBuilder(lookup.Idx)
|
||||
for _, c2 := range lookupCols {
|
||||
matchIdx := -1
|
||||
for i, ord := range lookup.Ordinals {
|
||||
// the ordinals redirection accounts for index
|
||||
// columns not in schema order
|
||||
idx := ord - 1
|
||||
c := cols[idx]
|
||||
if strings.EqualFold(c2.Col, c.Name) {
|
||||
matchIdx = i
|
||||
break
|
||||
}
|
||||
}
|
||||
if matchIdx != -1 {
|
||||
if err = rb.AddEquality(ctx, matchIdx, c2.Lit.Value()); err != nil {
|
||||
return sql.IndexLookup{}, nil, nil, false, nil
|
||||
}
|
||||
continue
|
||||
}
|
||||
if leftoverExpr == nil {
|
||||
leftoverExpr = c2.Eq
|
||||
} else {
|
||||
leftoverExpr = expression.NewAnd(leftoverExpr, c2.Eq)
|
||||
}
|
||||
}
|
||||
|
||||
var ret sql.IndexLookup
|
||||
ret, err = rb.Build(ctx)
|
||||
if err != nil {
|
||||
return sql.IndexLookup{}, nil, nil, false, err
|
||||
}
|
||||
return ret, lookup.Fds, leftoverExpr, true, nil
|
||||
}
|
||||
|
||||
return sql.IndexLookup{}, nil, nil, false, nil
|
||||
|
||||
@@ -39,7 +39,7 @@ func largeJsonDiffTests(t *testing.T) []JsonDiffTest {
|
||||
insert := func(document types.MutableJSON, path string, val interface{}) types.MutableJSON {
|
||||
jsonVal, inRange, err := types.JSON.Convert(ctx, val)
|
||||
require.NoError(t, err)
|
||||
require.True(t, (bool)(inRange))
|
||||
require.True(t, inRange == sql.InRange)
|
||||
document = document.Clone(ctx).(types.MutableJSON)
|
||||
newDoc, changed, err := document.Insert(ctx, path, jsonVal.(sql.JSONWrapper))
|
||||
require.NoError(t, err)
|
||||
@@ -50,7 +50,7 @@ func largeJsonDiffTests(t *testing.T) []JsonDiffTest {
|
||||
set := func(document types.MutableJSON, path string, val interface{}) types.MutableJSON {
|
||||
jsonVal, inRange, err := types.JSON.Convert(ctx, val)
|
||||
require.NoError(t, err)
|
||||
require.True(t, (bool)(inRange))
|
||||
require.True(t, inRange == sql.InRange)
|
||||
newDoc, changed, err := document.Replace(ctx, path, jsonVal.(sql.JSONWrapper))
|
||||
require.NoError(t, err)
|
||||
require.True(t, changed)
|
||||
|
||||
@@ -322,7 +322,7 @@ func TestJsonCompare(t *testing.T) {
|
||||
if right != nil {
|
||||
rightJSON, inRange, err := types.JSON.Convert(ctx, right)
|
||||
require.NoError(t, err)
|
||||
require.True(t, bool(inRange))
|
||||
require.True(t, inRange == sql.InRange)
|
||||
rightInterface, err := rightJSON.(sql.JSONWrapper).ToInterface(ctx)
|
||||
require.NoError(t, err)
|
||||
right = types.JSONDocument{Val: rightInterface}
|
||||
|
||||
Reference in New Issue
Block a user