Skip to content

Commit a19b6d9

Browse files
author
James Cor
committed
new in range value
1 parent 7cff947 commit a19b6d9

File tree

4 files changed

+43
-40
lines changed

4 files changed

+43
-40
lines changed

go/libraries/doltcore/merge/merge_prolly_rows.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1747,7 +1747,7 @@ func convertValueToNewType(ctx *sql.Context, value interface{}, newTypeInfo type
17471747
if err != nil {
17481748
return nil, err
17491749
}
1750-
if !inRange {
1750+
if inRange != sql.InRange {
17511751
return nil, fmt.Errorf("out of range conversion for value %v to type %s", value, newTypeInfo.String())
17521752
}
17531753
return newValue, nil

go/libraries/doltcore/sqle/dtables/prolly_row_conv.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,11 +139,11 @@ func (c ProllyRowConverter) putFields(ctx context.Context, tup val.Tuple, proj v
139139
c.warnFn(rowconv.DatatypeCoercionFailureWarningCode, rowconv.DatatypeCoercionFailureWarning, col.Name)
140140
dstRow[j] = nil
141141
err = nil
142-
} else if !inRange {
143-
c.warnFn(rowconv.TruncatedOutOfRangeValueWarningCode, rowconv.TruncatedOutOfRangeValueWarning, t, f)
144-
dstRow[j] = nil
145142
} else if err != nil {
146143
return err
144+
} else if inRange != sql.InRange && c.warnFn != nil {
145+
c.warnFn(rowconv.TruncatedOutOfRangeValueWarningCode, rowconv.TruncatedOutOfRangeValueWarning, t, f)
146+
dstRow[j] = nil
147147
}
148148
} else {
149149
dstRow[j] = f

go/libraries/doltcore/sqle/index/dolt_index.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1407,11 +1407,14 @@ func getRangeCutValue(ctx context.Context, cut sql.MySQLRangeCut, typ sql.Type)
14071407
if _, ok := cut.(sql.AboveNull); ok {
14081408
return nil, nil
14091409
}
1410-
ret, oob, err := typ.Convert(ctx, sql.GetMySQLRangeCutKey(cut))
1411-
if oob == sql.OutOfRange {
1410+
ret, inRange, err := typ.Convert(ctx, sql.GetMySQLRangeCutKey(cut))
1411+
if err != nil {
1412+
return nil, err
1413+
}
1414+
if inRange != sql.InRange {
14121415
return ret, nil
14131416
}
1414-
return ret, err
1417+
return ret, nil
14151418
}
14161419

14171420
// DropTrailingAllColumnExprs returns the Range with any |AllColumnExprs| at the end of it removed.

go/libraries/doltcore/sqle/tables.go

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -169,46 +169,46 @@ func (t *DoltTable) LookupForExpressions(ctx *sql.Context, exprs ...sql.Expressi
169169
dbState.SessionCache().CacheStrictLookup(schKey, lookups)
170170
}
171171

172+
cols := schCols.GetColumns()
172173
for _, lookup := range lookups {
173-
if lookup.Cols.Intersection(colset).Len() == lookup.Cols.Len() {
174-
// (1) assign lookup columns to range expressions in the appropriate
175-
// order for the given lookup.
176-
// (2) aggregate the unused expressions into the return filter.
177-
rb := sql.NewEqualityIndexBuilder(lookup.Idx)
178-
for _, c2 := range lookupCols {
179-
var matched bool
180-
var matchIdx int
181-
for i, ord := range lookup.Ordinals {
182-
// the ordinals redirection accounts for index
183-
// columns not in schema order
184-
idx := ord - 1
185-
c := schCols.GetColumns()[idx]
186-
if strings.EqualFold(c2.Col, c.Name) {
187-
matched = true
188-
matchIdx = i
189-
break
190-
}
191-
}
192-
if matched {
193-
if err := rb.AddEquality(ctx, matchIdx, c2.Lit.Value()); err != nil {
194-
return sql.IndexLookup{}, nil, nil, false, nil
195-
}
174+
// Every column must be specified in search
175+
if lookup.Cols.Intersection(colset).Len() != lookup.Cols.Len() {
176+
continue
177+
}
178+
// (1) assign lookup columns to range expressions in the appropriate order for the given lookup.
179+
// (2) aggregate the unused expressions into the return filter.
180+
rb := sql.NewEqualityIndexBuilder(lookup.Idx)
181+
for _, c2 := range lookupCols {
182+
matchIdx := -1
183+
for i, ord := range lookup.Ordinals {
184+
// the ordinals redirection accounts for index
185+
// columns not in schema order
186+
idx := ord - 1
187+
c := cols[idx]
188+
if strings.EqualFold(c2.Col, c.Name) {
189+
matchIdx = i
190+
break
196191
}
197-
if !matched || !expression.PreciseComparison(c2.Eq) {
198-
if leftoverExpr == nil {
199-
leftoverExpr = c2.Eq
200-
} else {
201-
leftoverExpr = expression.NewAnd(leftoverExpr, c2.Eq)
202-
}
192+
}
193+
if matchIdx != -1 {
194+
if err = rb.AddEquality(ctx, matchIdx, c2.Lit.Value()); err != nil {
195+
return sql.IndexLookup{}, nil, nil, false, nil
203196
}
197+
continue
204198
}
205-
ret, err := rb.Build(ctx)
206-
if err != nil {
207-
return sql.IndexLookup{}, nil, nil, false, err
199+
if leftoverExpr == nil {
200+
leftoverExpr = c2.Eq
201+
} else {
202+
leftoverExpr = expression.NewAnd(leftoverExpr, c2.Eq)
208203
}
204+
}
209205

210-
return ret, lookup.Fds, leftoverExpr, true, nil
206+
var ret sql.IndexLookup
207+
ret, err = rb.Build(ctx)
208+
if err != nil {
209+
return sql.IndexLookup{}, nil, nil, false, err
211210
}
211+
return ret, lookup.Fds, leftoverExpr, true, nil
212212
}
213213

214214
return sql.IndexLookup{}, nil, nil, false, nil

0 commit comments

Comments
 (0)