Skip to content

Commit cd621b1

Browse files
authored
Merge branch 'master' into master
2 parents 4acde0d + ad9fa14 commit cd621b1

File tree

7 files changed

+39
-29
lines changed

7 files changed

+39
-29
lines changed

.github/workflows/test.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ jobs:
2222
import json
2323
go = [
2424
# Keep the most recent production release at the top
25-
'1.17',
25+
'1.18',
2626
# Older production releases
27+
'1.17',
2728
'1.16',
2829
'1.15',
2930
'1.14',

AUTHORS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ Ziheng Lyu <zihenglv at gmail.com>
110110
Barracuda Networks, Inc.
111111
Counting Ltd.
112112
DigitalOcean Inc.
113+
dyves labs AG
113114
Facebook Inc.
114115
GitHub Inc.
115116
Google Inc.

errors.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,16 @@ func SetLogger(logger Logger) error {
5656

5757
// MySQLError is an error type which represents a single MySQL error
5858
type MySQLError struct {
59-
Number uint16
60-
Message string
59+
Number uint16
60+
SQLState [5]byte
61+
Message string
6162
}
6263

6364
func (me *MySQLError) Error() string {
65+
if me.SQLState != [5]byte{} {
66+
return fmt.Sprintf("Error %d (%s): %s", me.Number, me.SQLState, me.Message)
67+
}
68+
6469
return fmt.Sprintf("Error %d: %s", me.Number, me.Message)
6570
}
6671

errors_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,13 @@ func TestErrorsStrictIgnoreNotes(t *testing.T) {
4343
}
4444

4545
func TestMySQLErrIs(t *testing.T) {
46-
infraErr := &MySQLError{1234, "the server is on fire"}
47-
otherInfraErr := &MySQLError{1234, "the datacenter is flooded"}
46+
infraErr := &MySQLError{Number: 1234, Message: "the server is on fire"}
47+
otherInfraErr := &MySQLError{Number: 1234, Message: "the datacenter is flooded"}
4848
if !errors.Is(infraErr, otherInfraErr) {
4949
t.Errorf("expected errors to be the same: %+v %+v", infraErr, otherInfraErr)
5050
}
5151

52-
differentCodeErr := &MySQLError{5678, "the server is on fire"}
52+
differentCodeErr := &MySQLError{Number: 5678, Message: "the server is on fire"}
5353
if errors.Is(infraErr, differentCodeErr) {
5454
t.Fatalf("expected errors to be different: %+v %+v", infraErr, differentCodeErr)
5555
}

infile.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,12 @@ func deferredClose(err *error, closer io.Closer) {
9393
}
9494
}
9595

96+
const defaultPacketSize = 16 * 1024 // 16KB is small enough for disk readahead and large enough for TCP
97+
9698
func (mc *okHandler) handleInFileRequest(name string) (err error) {
9799
var rdr io.Reader
98100
var data []byte
99-
packetSize := 16 * 1024 // 16KB is small enough for disk readahead and large enough for TCP
101+
packetSize := defaultPacketSize
100102
if mc.maxWriteSize < packetSize {
101103
packetSize = mc.maxWriteSize
102104
}

packets.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -593,19 +593,20 @@ func (mc *mysqlConn) handleErrorPacket(data []byte) error {
593593
return driver.ErrBadConn
594594
}
595595

596+
me := &MySQLError{Number: errno}
597+
596598
pos := 3
597599

598600
// SQL State [optional: # + 5bytes string]
599601
if data[3] == 0x23 {
600-
//sqlstate := string(data[4 : 4+5])
602+
copy(me.SQLState[:], data[4:4+5])
601603
pos = 9
602604
}
603605

604606
// Error Message [string]
605-
return &MySQLError{
606-
Number: errno,
607-
Message: string(data[pos:]),
608-
}
607+
me.Message = string(data[pos:])
608+
609+
return me
609610
}
610611

611612
func readStatus(b []byte) statusFlag {

utils.go

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -542,7 +542,7 @@ func stringToInt(b []byte) int {
542542
return val
543543
}
544544

545-
// returns the string read as a bytes slice, wheter the value is NULL,
545+
// returns the string read as a bytes slice, whether the value is NULL,
546546
// the number of bytes read and an error, in case the string is longer than
547547
// the input slice
548548
func readLengthEncodedString(b []byte) ([]byte, bool, int, error) {
@@ -652,32 +652,32 @@ func escapeBytesBackslash(buf, v []byte) []byte {
652652
for _, c := range v {
653653
switch c {
654654
case '\x00':
655-
buf[pos] = '\\'
656655
buf[pos+1] = '0'
656+
buf[pos] = '\\'
657657
pos += 2
658658
case '\n':
659-
buf[pos] = '\\'
660659
buf[pos+1] = 'n'
660+
buf[pos] = '\\'
661661
pos += 2
662662
case '\r':
663-
buf[pos] = '\\'
664663
buf[pos+1] = 'r'
664+
buf[pos] = '\\'
665665
pos += 2
666666
case '\x1a':
667-
buf[pos] = '\\'
668667
buf[pos+1] = 'Z'
668+
buf[pos] = '\\'
669669
pos += 2
670670
case '\'':
671-
buf[pos] = '\\'
672671
buf[pos+1] = '\''
672+
buf[pos] = '\\'
673673
pos += 2
674674
case '"':
675-
buf[pos] = '\\'
676675
buf[pos+1] = '"'
676+
buf[pos] = '\\'
677677
pos += 2
678678
case '\\':
679-
buf[pos] = '\\'
680679
buf[pos+1] = '\\'
680+
buf[pos] = '\\'
681681
pos += 2
682682
default:
683683
buf[pos] = c
@@ -697,32 +697,32 @@ func escapeStringBackslash(buf []byte, v string) []byte {
697697
c := v[i]
698698
switch c {
699699
case '\x00':
700-
buf[pos] = '\\'
701700
buf[pos+1] = '0'
701+
buf[pos] = '\\'
702702
pos += 2
703703
case '\n':
704-
buf[pos] = '\\'
705704
buf[pos+1] = 'n'
705+
buf[pos] = '\\'
706706
pos += 2
707707
case '\r':
708-
buf[pos] = '\\'
709708
buf[pos+1] = 'r'
709+
buf[pos] = '\\'
710710
pos += 2
711711
case '\x1a':
712-
buf[pos] = '\\'
713712
buf[pos+1] = 'Z'
713+
buf[pos] = '\\'
714714
pos += 2
715715
case '\'':
716-
buf[pos] = '\\'
717716
buf[pos+1] = '\''
717+
buf[pos] = '\\'
718718
pos += 2
719719
case '"':
720-
buf[pos] = '\\'
721720
buf[pos+1] = '"'
721+
buf[pos] = '\\'
722722
pos += 2
723723
case '\\':
724-
buf[pos] = '\\'
725724
buf[pos+1] = '\\'
725+
buf[pos] = '\\'
726726
pos += 2
727727
default:
728728
buf[pos] = c
@@ -744,8 +744,8 @@ func escapeBytesQuotes(buf, v []byte) []byte {
744744

745745
for _, c := range v {
746746
if c == '\'' {
747-
buf[pos] = '\''
748747
buf[pos+1] = '\''
748+
buf[pos] = '\''
749749
pos += 2
750750
} else {
751751
buf[pos] = c
@@ -764,8 +764,8 @@ func escapeStringQuotes(buf []byte, v string) []byte {
764764
for i := 0; i < len(v); i++ {
765765
c := v[i]
766766
if c == '\'' {
767-
buf[pos] = '\''
768767
buf[pos+1] = '\''
768+
buf[pos] = '\''
769769
pos += 2
770770
} else {
771771
buf[pos] = c

0 commit comments

Comments
 (0)