@@ -484,7 +484,7 @@ func (mc *mysqlConn) readColumns(n int) (columns []mysqlField, e error) {
484
484
}
485
485
486
486
var pos , n int
487
- var name []byte
487
+ var name * []byte
488
488
//var catalog, database, table, orgTable, name, orgName []byte
489
489
//var defaultVal uint64
490
490
@@ -563,14 +563,14 @@ func (mc *mysqlConn) readColumns(n int) (columns []mysqlField, e error) {
563
563
// defaultVal, _, e = bytesToLengthCodedBinary(data[pos:])
564
564
//}
565
565
566
- columns = append (columns , mysqlField {name : string (name ), fieldType : fieldType , flags : flags })
566
+ columns = append (columns , mysqlField {name : string (* name ), fieldType : fieldType , flags : flags })
567
567
}
568
568
569
569
return
570
570
}
571
571
572
572
// Read Packets as Field Packets until EOF-Packet or an Error appears
573
- func (mc * mysqlConn ) readRows (columnsCount int ) (rows []* [][]byte , e error ) {
573
+ func (mc * mysqlConn ) readRows (columnsCount int ) (rows []* []* []byte , e error ) {
574
574
var data []byte
575
575
var i , pos , n int
576
576
var isNull bool
@@ -587,7 +587,7 @@ func (mc *mysqlConn) readRows(columnsCount int) (rows []*[][]byte, e error) {
587
587
}
588
588
589
589
// RowSet Packet
590
- row := make ([][]byte , columnsCount )
590
+ row := make ([]* []byte , columnsCount )
591
591
pos = 0
592
592
for i = 0 ; i < columnsCount ; i ++ {
593
593
// Read bytes and convert to string
@@ -862,7 +862,7 @@ func (mc *mysqlConn) readBinaryRows(rc *rowsContent) (e error) {
862
862
pos ++
863
863
864
864
// BinaryRowSet Packet
865
- row := make ([][]byte , columnsCount )
865
+ row := make ([]* []byte , columnsCount )
866
866
867
867
nullBitMap = data [pos : pos + (columnsCount + 7 + 2 )/ 8 ]
868
868
pos += (columnsCount + 7 + 2 ) / 8
@@ -883,47 +883,60 @@ func (mc *mysqlConn) readBinaryRows(rc *rowsContent) (e error) {
883
883
884
884
// Numeric Typs
885
885
case FIELD_TYPE_TINY :
886
+ var val []byte
886
887
if unsigned {
887
- row [ i ] = uintToByteStr (uint64 (byteToUint8 (data [pos ])))
888
+ val = uintToByteStr (uint64 (byteToUint8 (data [pos ])))
888
889
} else {
889
- row [ i ] = intToByteStr (int64 (int8 (byteToUint8 (data [pos ]))))
890
+ val = intToByteStr (int64 (int8 (byteToUint8 (data [pos ]))))
890
891
}
892
+ row [i ] = & val
891
893
pos ++
892
894
893
895
case FIELD_TYPE_SHORT , FIELD_TYPE_YEAR :
896
+ var val []byte
894
897
if unsigned {
895
- row [ i ] = uintToByteStr (uint64 (bytesToUint16 (data [pos : pos + 2 ])))
898
+ val = uintToByteStr (uint64 (bytesToUint16 (data [pos : pos + 2 ])))
896
899
} else {
897
- row [ i ] = intToByteStr (int64 (int16 (bytesToUint16 (data [pos : pos + 2 ]))))
900
+ val = intToByteStr (int64 (int16 (bytesToUint16 (data [pos : pos + 2 ]))))
898
901
}
902
+ row [i ] = & val
899
903
pos += 2
900
904
901
905
case FIELD_TYPE_INT24 , FIELD_TYPE_LONG :
906
+ var val []byte
902
907
if unsigned {
903
- row [ i ] = uintToByteStr (uint64 (bytesToUint32 (data [pos : pos + 4 ])))
908
+ val = uintToByteStr (uint64 (bytesToUint32 (data [pos : pos + 4 ])))
904
909
} else {
905
- row [ i ] = intToByteStr (int64 (int32 (bytesToUint32 (data [pos : pos + 4 ]))))
910
+ val = intToByteStr (int64 (int32 (bytesToUint32 (data [pos : pos + 4 ]))))
906
911
}
912
+ row [i ] = & val
907
913
pos += 4
908
914
909
915
case FIELD_TYPE_LONGLONG :
916
+ var val []byte
910
917
if unsigned {
911
- row [ i ] = uintToByteStr (bytesToUint64 (data [pos : pos + 8 ]))
918
+ val = uintToByteStr (bytesToUint64 (data [pos : pos + 8 ]))
912
919
} else {
913
- row [ i ] = intToByteStr (int64 (bytesToUint64 (data [pos : pos + 8 ])))
920
+ val = intToByteStr (int64 (bytesToUint64 (data [pos : pos + 8 ])))
914
921
}
922
+ row [i ] = & val
915
923
pos += 8
916
924
917
925
case FIELD_TYPE_FLOAT :
918
- row [i ] = float32ToByteStr (bytesToFloat32 (data [pos : pos + 4 ]))
926
+ var val []byte
927
+ val = float32ToByteStr (bytesToFloat32 (data [pos : pos + 4 ]))
928
+ row [i ] = & val
919
929
pos += 4
920
930
921
931
case FIELD_TYPE_DOUBLE :
922
- row [i ] = float64ToByteStr (bytesToFloat64 (data [pos : pos + 8 ]))
932
+ var val []byte
933
+ val = float64ToByteStr (bytesToFloat64 (data [pos : pos + 8 ]))
934
+ row [i ] = & val
923
935
pos += 8
924
936
925
937
case FIELD_TYPE_DECIMAL , FIELD_TYPE_NEWDECIMAL :
926
938
row [i ], n , isNull , e = readLengthCodedBinary (data [pos :])
939
+
927
940
if e != nil {
928
941
return
929
942
}
@@ -957,14 +970,16 @@ func (mc *mysqlConn) readBinaryRows(rc *rowsContent) (e error) {
957
970
}
958
971
pos += n
959
972
973
+ var val []byte
960
974
if num == 0 {
961
- row [ i ] = []byte ("0000-00-00" )
975
+ val = []byte ("0000-00-00" )
962
976
} else {
963
- row [ i ] = []byte (fmt .Sprintf ("%04d-%02d-%02d" ,
977
+ val = []byte (fmt .Sprintf ("%04d-%02d-%02d" ,
964
978
bytesToUint16 (data [pos :pos + 2 ]),
965
979
data [pos + 2 ],
966
980
data [pos + 3 ]))
967
981
}
982
+ row [i ] = & val
968
983
pos += int (num )
969
984
970
985
// Time HH:MM:SS
@@ -975,14 +990,16 @@ func (mc *mysqlConn) readBinaryRows(rc *rowsContent) (e error) {
975
990
return
976
991
}
977
992
993
+ var val []byte
978
994
if num == 0 {
979
- row [ i ] = []byte ("00:00:00" )
995
+ val = []byte ("00:00:00" )
980
996
} else {
981
- row [ i ] = []byte (fmt .Sprintf ("%02d:%02d:%02d" ,
997
+ val = []byte (fmt .Sprintf ("%02d:%02d:%02d" ,
982
998
data [pos + 6 ],
983
999
data [pos + 7 ],
984
1000
data [pos + 8 ]))
985
1001
}
1002
+ row [i ] = & val
986
1003
pos += n + int (num )
987
1004
988
1005
// Timestamp YYYY-MM-DD HH:MM:SS
@@ -994,26 +1011,28 @@ func (mc *mysqlConn) readBinaryRows(rc *rowsContent) (e error) {
994
1011
}
995
1012
pos += n
996
1013
1014
+ var val []byte
997
1015
switch num {
998
1016
case 0 :
999
- row [ i ] = []byte ("0000-00-00 00:00:00" )
1017
+ val = []byte ("0000-00-00 00:00:00" )
1000
1018
case 4 :
1001
- row [ i ] = []byte (fmt .Sprintf ("%04d-%02d-%02d 00:00:00" ,
1019
+ val = []byte (fmt .Sprintf ("%04d-%02d-%02d 00:00:00" ,
1002
1020
bytesToUint16 (data [pos :pos + 2 ]),
1003
1021
data [pos + 2 ],
1004
1022
data [pos + 3 ]))
1005
1023
default :
1006
1024
if num < 7 {
1007
1025
return fmt .Errorf ("Invalid datetime-packet length %d" , num )
1008
1026
}
1009
- row [ i ] = []byte (fmt .Sprintf ("%04d-%02d-%02d %02d:%02d:%02d" ,
1027
+ val = []byte (fmt .Sprintf ("%04d-%02d-%02d %02d:%02d:%02d" ,
1010
1028
bytesToUint16 (data [pos :pos + 2 ]),
1011
1029
data [pos + 2 ],
1012
1030
data [pos + 3 ],
1013
1031
data [pos + 4 ],
1014
1032
data [pos + 5 ],
1015
1033
data [pos + 6 ]))
1016
1034
}
1035
+ row [i ] = & val
1017
1036
pos += int (num )
1018
1037
1019
1038
// Please report if this happens!
0 commit comments