Skip to content

Commit

Permalink
refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
julienschmidt committed Mar 6, 2013
1 parent 51e9b2d commit d1deaee
Show file tree
Hide file tree
Showing 6 changed files with 153 additions and 170 deletions.
2 changes: 1 addition & 1 deletion buffer.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ func (b *buffer) fill(need int) (err error) {
b.idx = 0
b.length = 0

n := 0
var n int
for b.length < need {
n, err = b.rd.Read(b.buf[b.length:])
b.length += n
Expand Down
54 changes: 19 additions & 35 deletions connection.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import (

type mysqlConn struct {
cfg *config
flags ClientFlag
flags clientFlag
charset byte
cipher []byte
netConn net.Conn
Expand Down Expand Up @@ -87,7 +87,7 @@ func (mc *mysqlConn) Begin() (driver.Tx, error) {
}

func (mc *mysqlConn) Close() (err error) {
mc.writeCommandPacket(COM_QUIT)
mc.writeCommandPacket(comQuit)
mc.cfg = nil
mc.buf = nil
mc.netConn.Close()
Expand All @@ -97,7 +97,7 @@ func (mc *mysqlConn) Close() (err error) {

func (mc *mysqlConn) Prepare(query string) (driver.Stmt, error) {
// Send command
err := mc.writeCommandPacketStr(COM_STMT_PREPARE, query)
err := mc.writeCommandPacketStr(comStmtPrepare, query)
if err != nil {
return nil, err
}
Expand All @@ -124,37 +124,30 @@ func (mc *mysqlConn) Prepare(query string) (driver.Stmt, error) {
return stmt, err
}

func (mc *mysqlConn) Exec(query string, args []driver.Value) (_ driver.Result, err error) {
if len(args) > 0 { // with args, must use prepared stmt
var res driver.Result
var stmt driver.Stmt
stmt, err = mc.Prepare(query)
if err == nil {
res, err = stmt.Exec(args)
if err == nil {
return res, stmt.Close()
}
}
} else { // no args, fastpath
func (mc *mysqlConn) Exec(query string, args []driver.Value) (driver.Result, error) {
if len(args) == 0 { // no args, fastpath
mc.affectedRows = 0
mc.insertId = 0

err = mc.exec(query)
err := mc.exec(query)
if err == nil {
return &mysqlResult{
affectedRows: int64(mc.affectedRows),
insertId: int64(mc.insertId),
}, err
}
return nil, err
}
return nil, err

// with args, must use prepared stmt
return nil, driver.ErrSkip

}

// Internal function to execute commands
func (mc *mysqlConn) exec(query string) (err error) {
// Send command
err = mc.writeCommandPacketStr(COM_QUERY, query)
err = mc.writeCommandPacketStr(comQuery, query)
if err != nil {
return
}
Expand All @@ -174,28 +167,16 @@ func (mc *mysqlConn) exec(query string) (err error) {
return
}

func (mc *mysqlConn) Query(query string, args []driver.Value) (_ driver.Rows, err error) {
if len(args) > 0 { // with args, must use prepared stmt
var rows driver.Rows
var stmt driver.Stmt
stmt, err = mc.Prepare(query)
if err == nil {
rows, err = stmt.Query(args)
if err == nil {
return rows, stmt.Close()
}
}
return
} else { // no args, fastpath
var rows *mysqlRows
func (mc *mysqlConn) Query(query string, args []driver.Value) (driver.Rows, error) {
if len(args) == 0 { // no args, fastpath
// Send command
err = mc.writeCommandPacketStr(COM_QUERY, query)
err := mc.writeCommandPacketStr(comQuery, query)
if err == nil {
// Read Result
var resLen int
resLen, err = mc.readResultSetHeaderPacket()
if err == nil {
rows = &mysqlRows{mc, false, nil, false}
rows := &mysqlRows{mc, false, nil, false}

if resLen > 0 {
// Columns
Expand All @@ -204,7 +185,10 @@ func (mc *mysqlConn) Query(query string, args []driver.Value) (_ driver.Rows, er
return rows, err
}
}

return nil, err
}

return nil, err
// with args, must use prepared stmt
return nil, driver.ErrSkip
}
188 changes: 94 additions & 94 deletions const.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,119 +10,119 @@
package mysql

const (
MIN_PROTOCOL_VERSION byte = 10
//MAX_PACKET_SIZE = 1<<24 - 1
TIME_FORMAT = "2006-01-02 15:04:05"
minProtocolVersion byte = 10
//maxPacketSize = 1<<24 - 1
timeFormat = "2006-01-02 15:04:05"
)

// MySQL constants documentation:
// http:https://dev.mysql.com/doc/internals/en/client-server-protocol.html

type ClientFlag uint32
type clientFlag uint32

const (
CLIENT_LONG_PASSWORD ClientFlag = 1 << iota
CLIENT_FOUND_ROWS
CLIENT_LONG_FLAG
CLIENT_CONNECT_WITH_DB
CLIENT_NO_SCHEMA
CLIENT_COMPRESS
CLIENT_ODBC
CLIENT_LOCAL_FILES
CLIENT_IGNORE_SPACE
CLIENT_PROTOCOL_41
CLIENT_INTERACTIVE
CLIENT_SSL
CLIENT_IGNORE_SIGPIPE
CLIENT_TRANSACTIONS
CLIENT_RESERVED
CLIENT_SECURE_CONN
CLIENT_MULTI_STATEMENTS
CLIENT_MULTI_RESULTS
clientLongPassword clientFlag = 1 << iota
clientFoundRows
clientLongFlag
clientConnectWithDB
clientNoSchema
clientCompress
clientODBC
clientLocalFiles
clientIgnoreSpace
clientProtocol41
clientInteractive
clientSSL
clientIgnoreSIGPIPE
clientTransactions
clientReserved
clientSecureConn
clientMultiStatements
clientMultiResults
)

type commandType byte

const (
COM_QUIT commandType = iota + 1
COM_INIT_DB
COM_QUERY
COM_FIELD_LIST
COM_CREATE_DB
COM_DROP_DB
COM_REFRESH
COM_SHUTDOWN
COM_STATISTICS
COM_PROCESS_INFO
COM_CONNECT
COM_PROCESS_KILL
COM_DEBUG
COM_PING
COM_TIME
COM_DELAYED_INSERT
COM_CHANGE_USER
COM_BINLOG_DUMP
COM_TABLE_DUMP
COM_CONNECT_OUT
COM_REGISTER_SLAVE
COM_STMT_PREPARE
COM_STMT_EXECUTE
COM_STMT_SEND_LONG_DATA
COM_STMT_CLOSE
COM_STMT_RESET
COM_SET_OPTION
COM_STMT_FETCH
comQuit commandType = iota + 1
comInitDB
comQuery
comFieldList
comCreateDB
comDropDB
comRefresh
comShutdown
comStatistics
comProcessInfo
comConnect
comProcessKill
comDebug
comPing
comTime
comDelayedInsert
comChangeUser
comBinlogDump
comTableDump
comConnectOut
comRegiserSlave
comStmtPrepare
comStmtExecute
comStmtSendLongData
comStmtClose
comStmtReset
comSetOption
comStmtFetch
)

const (
FIELD_TYPE_DECIMAL byte = iota
FIELD_TYPE_TINY
FIELD_TYPE_SHORT
FIELD_TYPE_LONG
FIELD_TYPE_FLOAT
FIELD_TYPE_DOUBLE
FIELD_TYPE_NULL
FIELD_TYPE_TIMESTAMP
FIELD_TYPE_LONGLONG
FIELD_TYPE_INT24
FIELD_TYPE_DATE
FIELD_TYPE_TIME
FIELD_TYPE_DATETIME
FIELD_TYPE_YEAR
FIELD_TYPE_NEWDATE
FIELD_TYPE_VARCHAR
FIELD_TYPE_BIT
fieldTypeDecimal byte = iota
fieldTypeTiny
fieldTypeShort
fieldTypeLong
fieldTypeFloat
fieldTypeDouble
fieldTypeNULL
fieldTypeTimestamp
fieldTypeLongLong
fieldTypeInt24
fieldTypeDate
fieldTypeTime
fieldTypeDateTime
fieldTypeYear
fieldTypeNewDate
fieldTypeVarChar
fieldTypeBit
)
const (
FIELD_TYPE_NEWDECIMAL byte = iota + 0xf6
FIELD_TYPE_ENUM
FIELD_TYPE_SET
FIELD_TYPE_TINY_BLOB
FIELD_TYPE_MEDIUM_BLOB
FIELD_TYPE_LONG_BLOB
FIELD_TYPE_BLOB
FIELD_TYPE_VAR_STRING
FIELD_TYPE_STRING
FIELD_TYPE_GEOMETRY
fieldTypeNewDecimal byte = iota + 0xf6
fieldTypeEnum
fieldTypeSet
fieldTypeTinyBLOB
fieldTypeMediumBLOB
fieldTypeLongBLOB
fieldTypeBLOB
fieldTypeVarString
fieldTypeString
fieldTypeGeometry
)

type FieldFlag uint16
type fieldFlag uint16

const (
FLAG_NOT_NULL FieldFlag = 1 << iota
FLAG_PRI_KEY
FLAG_UNIQUE_KEY
FLAG_MULTIPLE_KEY
FLAG_BLOB
FLAG_UNSIGNED
FLAG_ZEROFILL
FLAG_BINARY
FLAG_ENUM
FLAG_AUTO_INCREMENT
FLAG_TIMESTAMP
FLAG_SET
FLAG_UNKNOWN_1
FLAG_UNKNOWN_2
FLAG_UNKNOWN_3
FLAG_UNKNOWN_4
flagNotNULL fieldFlag = 1 << iota
flagPriKey
flagUniqueKey
flagMultipleKey
flagBLOB
flagUnsigned
flagZeroFill
flagBinary
flagEnum
flagAutoIncrement
flagTimestamp
flagSet
flagUnknown1
flagUnknown2
flagUnknown3
flagUnknown4
)
Loading

0 comments on commit d1deaee

Please sign in to comment.