Skip to content

Commit 2f97a23

Browse files
committed
rows: move fields related code to fields.go
1 parent 0950d1b commit 2f97a23

File tree

2 files changed

+121
-109
lines changed

2 files changed

+121
-109
lines changed

fields.go

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
// Go MySQL Driver - A MySQL-Driver for Go's database/sql package
2+
//
3+
// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.
4+
//
5+
// This Source Code Form is subject to the terms of the Mozilla Public
6+
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
7+
// You can obtain one at http://mozilla.org/MPL/2.0/.
8+
9+
package mysql
10+
11+
import (
12+
"database/sql"
13+
"reflect"
14+
"time"
15+
)
16+
17+
var (
18+
scanTypeNil = reflect.TypeOf(nil)
19+
scanTypeNullInt = reflect.TypeOf(sql.NullInt64{})
20+
scanTypeUint8 = reflect.TypeOf(uint8(0))
21+
scanTypeInt8 = reflect.TypeOf(int8(0))
22+
scanTypeUint16 = reflect.TypeOf(uint16(0))
23+
scanTypeInt16 = reflect.TypeOf(int16(0))
24+
scanTypeUint32 = reflect.TypeOf(uint32(0))
25+
scanTypeInt32 = reflect.TypeOf(int32(0))
26+
scanTypeUint64 = reflect.TypeOf(uint64(0))
27+
scanTypeInt64 = reflect.TypeOf(int64(0))
28+
scanTypeNullFloat = reflect.TypeOf(sql.NullFloat64{})
29+
scanTypeFloat32 = reflect.TypeOf(float32(0))
30+
scanTypeFloat64 = reflect.TypeOf(float64(0))
31+
scanTypeNullString = reflect.TypeOf(sql.NullString{})
32+
scanTypeString = reflect.TypeOf("")
33+
scanTypeBytes = reflect.TypeOf([]byte{})
34+
scanTypeRawBytes = reflect.TypeOf(sql.RawBytes{})
35+
scanTypeTime = reflect.TypeOf(time.Time{})
36+
scanTypeUnknown = reflect.TypeOf(new(interface{}))
37+
)
38+
39+
type mysqlField struct {
40+
tableName string
41+
name string
42+
flags fieldFlag
43+
fieldType byte
44+
decimals byte
45+
}
46+
47+
func (mf *mysqlField) scanType() reflect.Type {
48+
switch mf.fieldType {
49+
case fieldTypeNULL:
50+
return scanTypeNil
51+
52+
case fieldTypeTiny:
53+
if mf.flags&flagNotNULL != 0 {
54+
if mf.flags&flagUnsigned != 0 {
55+
return scanTypeUint8
56+
}
57+
return scanTypeInt8
58+
}
59+
return scanTypeNullInt
60+
61+
case fieldTypeShort, fieldTypeYear:
62+
if mf.flags&flagNotNULL != 0 {
63+
if mf.flags&flagUnsigned != 0 {
64+
return scanTypeUint16
65+
}
66+
return scanTypeInt16
67+
}
68+
return scanTypeNullInt
69+
70+
case fieldTypeInt24, fieldTypeLong:
71+
if mf.flags&flagNotNULL != 0 {
72+
if mf.flags&flagUnsigned != 0 {
73+
return scanTypeUint32
74+
}
75+
return scanTypeInt32
76+
}
77+
return scanTypeNullInt
78+
79+
case fieldTypeLongLong:
80+
if mf.flags&flagNotNULL != 0 {
81+
if mf.flags&flagUnsigned != 0 {
82+
return scanTypeUint64
83+
}
84+
return scanTypeInt64
85+
}
86+
return scanTypeNullInt
87+
88+
case fieldTypeFloat:
89+
if mf.flags&flagNotNULL != 0 {
90+
return scanTypeFloat32
91+
}
92+
return scanTypeNullFloat
93+
94+
case fieldTypeDouble:
95+
if mf.flags&flagNotNULL != 0 {
96+
return scanTypeFloat64
97+
}
98+
return scanTypeNullFloat
99+
100+
case fieldTypeDecimal, fieldTypeNewDecimal, fieldTypeVarChar,
101+
fieldTypeBit, fieldTypeEnum, fieldTypeSet, fieldTypeTinyBLOB,
102+
fieldTypeMediumBLOB, fieldTypeLongBLOB, fieldTypeBLOB,
103+
fieldTypeVarString, fieldTypeString, fieldTypeGeometry, fieldTypeJSON,
104+
fieldTypeTime:
105+
if mf.flags&flagNotNULL != 0 {
106+
// alternatively we could return []byte or even RawBytes
107+
return scanTypeString
108+
}
109+
return scanTypeNullString
110+
111+
case fieldTypeDate, fieldTypeNewDate,
112+
fieldTypeTimestamp, fieldTypeDateTime:
113+
114+
// TODO: NULL
115+
// TODO: respect rows.mc.parseTime
116+
return scanTypeTime
117+
118+
default:
119+
return scanTypeUnknown
120+
}
121+
}

rows.go

Lines changed: 0 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -9,120 +9,11 @@
99
package mysql
1010

1111
import (
12-
"database/sql"
1312
"database/sql/driver"
1413
"io"
1514
"reflect"
16-
"time"
1715
)
1816

19-
var (
20-
scanTypeNil = reflect.TypeOf(nil)
21-
scanTypeNullInt = reflect.TypeOf(sql.NullInt64{})
22-
scanTypeUint8 = reflect.TypeOf(uint8(0))
23-
scanTypeInt8 = reflect.TypeOf(int8(0))
24-
scanTypeUint16 = reflect.TypeOf(uint16(0))
25-
scanTypeInt16 = reflect.TypeOf(int16(0))
26-
scanTypeUint32 = reflect.TypeOf(uint32(0))
27-
scanTypeInt32 = reflect.TypeOf(int32(0))
28-
scanTypeUint64 = reflect.TypeOf(uint64(0))
29-
scanTypeInt64 = reflect.TypeOf(int64(0))
30-
scanTypeNullFloat = reflect.TypeOf(sql.NullFloat64{})
31-
scanTypeFloat32 = reflect.TypeOf(float32(0))
32-
scanTypeFloat64 = reflect.TypeOf(float64(0))
33-
scanTypeNullString = reflect.TypeOf(sql.NullString{})
34-
scanTypeString = reflect.TypeOf("")
35-
scanTypeBytes = reflect.TypeOf([]byte{})
36-
scanTypeRawBytes = reflect.TypeOf(sql.RawBytes{})
37-
scanTypeTime = reflect.TypeOf(time.Time{})
38-
scanTypeUnknown = reflect.TypeOf(new(interface{}))
39-
)
40-
41-
type mysqlField struct {
42-
tableName string
43-
name string
44-
flags fieldFlag
45-
fieldType byte
46-
decimals byte
47-
}
48-
49-
func (mf *mysqlField) scanType() reflect.Type {
50-
switch mf.fieldType {
51-
case fieldTypeNULL:
52-
return scanTypeNil
53-
54-
case fieldTypeTiny:
55-
if mf.flags&flagNotNULL != 0 {
56-
if mf.flags&flagUnsigned != 0 {
57-
return scanTypeUint8
58-
}
59-
return scanTypeInt8
60-
}
61-
return scanTypeNullInt
62-
63-
case fieldTypeShort, fieldTypeYear:
64-
if mf.flags&flagNotNULL != 0 {
65-
if mf.flags&flagUnsigned != 0 {
66-
return scanTypeUint16
67-
}
68-
return scanTypeInt16
69-
}
70-
return scanTypeNullInt
71-
72-
case fieldTypeInt24, fieldTypeLong:
73-
if mf.flags&flagNotNULL != 0 {
74-
if mf.flags&flagUnsigned != 0 {
75-
return scanTypeUint32
76-
}
77-
return scanTypeInt32
78-
}
79-
return scanTypeNullInt
80-
81-
case fieldTypeLongLong:
82-
if mf.flags&flagNotNULL != 0 {
83-
if mf.flags&flagUnsigned != 0 {
84-
return scanTypeUint64
85-
}
86-
return scanTypeInt64
87-
}
88-
return scanTypeNullInt
89-
90-
case fieldTypeFloat:
91-
if mf.flags&flagNotNULL != 0 {
92-
return scanTypeFloat32
93-
}
94-
return scanTypeNullFloat
95-
96-
case fieldTypeDouble:
97-
if mf.flags&flagNotNULL != 0 {
98-
return scanTypeFloat64
99-
}
100-
return scanTypeNullFloat
101-
102-
case fieldTypeDecimal, fieldTypeNewDecimal, fieldTypeVarChar,
103-
fieldTypeBit, fieldTypeEnum, fieldTypeSet, fieldTypeTinyBLOB,
104-
fieldTypeMediumBLOB, fieldTypeLongBLOB, fieldTypeBLOB,
105-
fieldTypeVarString, fieldTypeString, fieldTypeGeometry, fieldTypeJSON,
106-
fieldTypeTime:
107-
if mf.flags&flagNotNULL != 0 {
108-
// alternatively we could return []byte or even RawBytes
109-
return scanTypeString
110-
}
111-
return scanTypeNullString
112-
113-
case
114-
fieldTypeDate, fieldTypeNewDate,
115-
fieldTypeTimestamp, fieldTypeDateTime:
116-
117-
// TODO: NULL
118-
// TODO: respect rows.mc.parseTime
119-
return scanTypeTime
120-
121-
default:
122-
return scanTypeUnknown
123-
}
124-
}
125-
12617
type resultSet struct {
12718
columns []mysqlField
12819
columnNames []string

0 commit comments

Comments
 (0)