Skip to content

fix builds for platforms with 32-bit integer size #2987

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions sql/expression/function/extract.go
Original file line number Diff line number Diff line change
Expand Up @@ -169,11 +169,11 @@ func (td *Extract) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) {
ss := dateTime.Second()
return dd + hh + mm + ss, nil
case "DAY_MICROSECOND":
dd := dateTime.Day() * 1_00_00_00_000000
hh := dateTime.Hour() * 1_00_00_000000
mm := dateTime.Minute() * 1_00_000000
ss := dateTime.Second() * 1_000000
mmmmmm := dateTime.Nanosecond() / 1000
dd := uint64(dateTime.Day()) * 1_00_00_00_000000
hh := uint64(dateTime.Hour()) * 1_00_00_000000
mm := uint64(dateTime.Minute()) * 1_00_000000
ss := uint64(dateTime.Second()) * 1_000000
mmmmmm := uint64(dateTime.Nanosecond()) / 1000
return dd + hh + mm + ss + mmmmmm, nil
case "HOUR_MINUTE":
hh := dateTime.Hour() * 1_00
Expand All @@ -185,10 +185,10 @@ func (td *Extract) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) {
ss := dateTime.Second()
return hh + mm + ss, nil
case "HOUR_MICROSECOND":
hh := dateTime.Hour() * 1_00_00_000000
mm := dateTime.Minute() * 1_00_000000
ss := dateTime.Second() * 1_000000
mmmmmm := dateTime.Nanosecond() / 1000
hh := uint64(dateTime.Hour()) * 1_00_00_000000
mm := uint64(dateTime.Minute()) * 1_00_000000
ss := uint64(dateTime.Second()) * 1_000000
mmmmmm := uint64(dateTime.Nanosecond()) / 1000
return hh + mm + ss + mmmmmm, nil
case "MINUTE_SECOND":
mm := dateTime.Minute() * 1_00
Expand Down
4 changes: 2 additions & 2 deletions sql/expression/function/extract_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ func TestExtract(t *testing.T) {
name: "get day_microsecond",
unit: "DAY_MICROSECOND",
dateTime: "2023-11-12 11:22:33.445566",
expected: 12112233445566,
expected: uint64(12112233445566),
},
{
name: "get hour_minute",
Expand All @@ -150,7 +150,7 @@ func TestExtract(t *testing.T) {
name: "get hour_microsecond",
unit: "HOUR_MICROSECOND",
dateTime: "2023-11-12 11:22:33.445566",
expected: 112233445566,
expected: uint64(112233445566),
},
{
name: "get minute_second",
Expand Down
4 changes: 2 additions & 2 deletions sql/rowexec/proc.go
Original file line number Diff line number Diff line change
Expand Up @@ -304,9 +304,9 @@ func (b *BaseBuilder) buildLoop(ctx *sql.Context, n *plan.Loop, row sql.Row) (sq
selectSeen := false

// It's technically valid to make an infinite loop, but we don't want to actually allow that
const maxIterationCount = 10_000_000_000
const maxIterationCount uint64 = 10_000_000_000

for loopIteration := 0; loopIteration <= maxIterationCount; loopIteration++ {
for loopIteration := uint64(0); loopIteration <= maxIterationCount; loopIteration++ {
if loopIteration >= maxIterationCount {
return nil, fmt.Errorf("infinite LOOP detected")
}
Expand Down
2 changes: 1 addition & 1 deletion sql/types/geometry.go
Original file line number Diff line number Diff line change
Expand Up @@ -546,7 +546,7 @@ func (t GeometryType) MatchSRID(v interface{}) error {
}

func ValidateSRID(srid int, funcName string) error {
if srid < 0 || srid > math.MaxUint32 {
if srid < 0 || int64(srid) > int64(math.MaxUint32) {
return sql.ErrInvalidSRID.New(funcName)
}
if _, ok := SupportedSRIDs[uint32(srid)]; !ok {
Expand Down
28 changes: 14 additions & 14 deletions sql/types/number.go
Original file line number Diff line number Diff line change
Expand Up @@ -1114,27 +1114,27 @@ func convertToUint64(t NumberTypeImpl_, v interface{}) (uint64, sql.ConvertInRan
return uint64(v.UTC().Unix()), sql.InRange, nil
case int:
if v < 0 {
return uint64(math.MaxUint64 - uint(-v-1)), sql.OutOfRange, nil
return uint64(math.MaxUint64 - uint64(-v-1)), sql.OutOfRange, nil
}
return uint64(v), sql.InRange, nil
case int8:
if v < 0 {
return uint64(math.MaxUint64 - uint(-v-1)), sql.OutOfRange, nil
return uint64(math.MaxUint64 - uint64(-v-1)), sql.OutOfRange, nil
}
return uint64(v), sql.InRange, nil
case int16:
if v < 0 {
return uint64(math.MaxUint64 - uint(-v-1)), sql.OutOfRange, nil
return uint64(math.MaxUint64 - uint64(-v-1)), sql.OutOfRange, nil
}
return uint64(v), sql.InRange, nil
case int32:
if v < 0 {
return uint64(math.MaxUint64 - uint(-v-1)), sql.OutOfRange, nil
return uint64(math.MaxUint64 - uint64(-v-1)), sql.OutOfRange, nil
}
return uint64(v), sql.InRange, nil
case int64:
if v < 0 {
return uint64(math.MaxUint64 - uint(-v-1)), sql.OutOfRange, nil
return uint64(math.MaxUint64 - uint64(-v-1)), sql.OutOfRange, nil
}
return uint64(v), sql.InRange, nil
case uint:
Expand Down Expand Up @@ -1204,35 +1204,35 @@ func convertToUint32(t NumberTypeImpl_, v interface{}) (uint32, sql.ConvertInRan
switch v := v.(type) {
case int:
if v < 0 {
return uint32(math.MaxUint32 - uint(-v-1)), sql.OutOfRange, nil
} else if v > math.MaxUint32 {
return uint32(math.MaxUint32 - uint64(-v-1)), sql.OutOfRange, nil
} else if int64(v) > int64(math.MaxUint32) {
return uint32(math.MaxUint32), sql.OutOfRange, nil
}
return uint32(v), sql.InRange, nil
case int8:
if v < 0 {
return uint32(math.MaxUint32 - uint(-v-1)), sql.OutOfRange, nil
} else if int(v) > math.MaxUint32 {
return uint32(math.MaxUint32 - uint64(-v-1)), sql.OutOfRange, nil
} else if int64(v) > int64(math.MaxUint32) {
return uint32(math.MaxUint32), sql.OutOfRange, nil
}
return uint32(v), sql.InRange, nil
case int16:
if v < 0 {
return uint32(math.MaxUint32 - uint(-v-1)), sql.OutOfRange, nil
} else if int(v) > math.MaxUint32 {
return uint32(math.MaxUint32 - uint64(-v-1)), sql.OutOfRange, nil
} else if int64(v) > int64(math.MaxUint32) {
return uint32(math.MaxUint32), sql.OutOfRange, nil
}
return uint32(v), sql.InRange, nil
case int32:
if v < 0 {
return uint32(math.MaxUint32 - uint(-v-1)), sql.OutOfRange, nil
} else if int(v) > math.MaxUint32 {
return uint32(math.MaxUint32 - uint64(-v-1)), sql.OutOfRange, nil
} else if int64(v) > int64(math.MaxUint32) {
return uint32(math.MaxUint32), sql.OutOfRange, nil
}
return uint32(v), sql.InRange, nil
case int64:
if v < 0 {
return uint32(math.MaxUint32 - uint(-v-1)), sql.OutOfRange, nil
return uint32(math.MaxUint32 - uint64(-v-1)), sql.OutOfRange, nil
} else if v > math.MaxUint32 {
return uint32(math.MaxUint32), sql.OutOfRange, nil
}
Expand Down
3 changes: 2 additions & 1 deletion sql/types/strings.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
"bytes"
"context"
"fmt"
"math"
"reflect"
"strconv"
strings2 "strings"
Expand All @@ -41,7 +42,7 @@ const (
TinyTextBlobMax = charBinaryMax
TextBlobMax = varcharVarbinaryMax
MediumTextBlobMax = 16_777_215
LongTextBlobMax = int64(4_294_967_295)
LongTextBlobMax = int64(math.MaxInt32)
)

var (
Expand Down
Loading