|
@@ -26,10 +26,8 @@ type xuguValue struct {
|
|
|
|
|
|
// 判断参数个数
|
|
|
func assertParamCount(query string) int {
|
|
|
- fmt.Println("----assertParamCount func 判断参数个数")
|
|
|
|
|
|
paramCount := strings.Count(query, "?")
|
|
|
- fmt.Println("Parse.param_count = ", paramCount)
|
|
|
|
|
|
return paramCount
|
|
|
}
|
|
@@ -97,7 +95,7 @@ func assertParamType(dV driver.Value, values *[]xuguValue) error {
|
|
|
}
|
|
|
|
|
|
case nil:
|
|
|
- dest.value = []byte{0}
|
|
|
+ dest.value = nil
|
|
|
dest.valueLength = 0
|
|
|
dest.islob = false
|
|
|
dest.types = fieldType_NULL
|
|
@@ -115,17 +113,14 @@ func parseMsg(readBuf *buffer, pConn *xuguConn) (*allResult, error) {
|
|
|
aR := allResult{}
|
|
|
for {
|
|
|
char := readBuf.peekChar()
|
|
|
- fmt.Println("parseMsg 内的 peekChar: ", char, "-", string(char))
|
|
|
switch char {
|
|
|
|
|
|
case 'K':
|
|
|
- fmt.Println("消息类型为K")
|
|
|
readBuf.reset()
|
|
|
return &aR, nil
|
|
|
|
|
|
case '$':
|
|
|
readBuf.idx++
|
|
|
- fmt.Println("消息类型为$")
|
|
|
if aR.f, err = parseFormArgDescri(readBuf); err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
@@ -133,7 +128,6 @@ func parseMsg(readBuf *buffer, pConn *xuguConn) (*allResult, error) {
|
|
|
return &aR, err
|
|
|
case 'A':
|
|
|
readBuf.idx++
|
|
|
- fmt.Println("消息类型为A")
|
|
|
if aR.s, err = parseSelectResult(readBuf); err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
@@ -142,7 +136,6 @@ func parseMsg(readBuf *buffer, pConn *xuguConn) (*allResult, error) {
|
|
|
|
|
|
case 'I':
|
|
|
readBuf.idx++
|
|
|
- fmt.Println("消息类型为I")
|
|
|
if aR.i, err = parseInsertResult(readBuf); err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
@@ -150,7 +143,6 @@ func parseMsg(readBuf *buffer, pConn *xuguConn) (*allResult, error) {
|
|
|
return &aR, err
|
|
|
|
|
|
case 'U':
|
|
|
- fmt.Println("消息类型为U")
|
|
|
readBuf.idx++
|
|
|
if aR.u, err = parseUpdateResult(readBuf); err != nil {
|
|
|
return nil, err
|
|
@@ -159,7 +151,6 @@ func parseMsg(readBuf *buffer, pConn *xuguConn) (*allResult, error) {
|
|
|
return &aR, err
|
|
|
|
|
|
case 'D':
|
|
|
- fmt.Println("消息类型为D")
|
|
|
readBuf.idx++
|
|
|
readBuf.idx++
|
|
|
if aR.d, err = parseDeleteResult(readBuf); err != nil {
|
|
@@ -169,7 +160,6 @@ func parseMsg(readBuf *buffer, pConn *xuguConn) (*allResult, error) {
|
|
|
return &aR, err
|
|
|
|
|
|
case 'E':
|
|
|
- fmt.Println("消息类型为E")
|
|
|
readBuf.idx++
|
|
|
|
|
|
if aR.e, err = parseErrInfo(readBuf); err != nil {
|
|
@@ -180,7 +170,6 @@ func parseMsg(readBuf *buffer, pConn *xuguConn) (*allResult, error) {
|
|
|
return &aR, err
|
|
|
|
|
|
case 'W':
|
|
|
- fmt.Println("消息类型为W")
|
|
|
readBuf.idx++
|
|
|
if aR.w, err = parseWarnInfo(readBuf); err != nil {
|
|
|
return nil, err
|
|
@@ -189,7 +178,6 @@ func parseMsg(readBuf *buffer, pConn *xuguConn) (*allResult, error) {
|
|
|
return &aR, err
|
|
|
|
|
|
case 'M':
|
|
|
- fmt.Println("消息类型为M")
|
|
|
readBuf.idx++
|
|
|
if aR.m, err = parseMessage(readBuf); err != nil {
|
|
|
return nil, err
|
|
@@ -198,18 +186,15 @@ func parseMsg(readBuf *buffer, pConn *xuguConn) (*allResult, error) {
|
|
|
return &aR, err
|
|
|
|
|
|
default:
|
|
|
- fmt.Println("消息类型为其他")
|
|
|
return nil, errors.New("parseMsg: unknown message type")
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
func parseSelectResult(readBuf *buffer) (*SelectResult, error) {
|
|
|
- fmt.Println("调用 parseSelectResult")
|
|
|
data := &SelectResult{}
|
|
|
|
|
|
char := readBuf.peekChar()
|
|
|
- fmt.Println("--=char: ", string(char), char)
|
|
|
|
|
|
//Field_Num
|
|
|
fn, err := readBuf.readNext(4, true)
|
|
@@ -220,7 +205,6 @@ func parseSelectResult(readBuf *buffer) (*SelectResult, error) {
|
|
|
Field_Num := binary.LittleEndian.Uint32(fn)
|
|
|
data.Field_Num = Field_Num
|
|
|
data.rowIdx = 0
|
|
|
- fmt.Println("Field_Num: ", data.Field_Num)
|
|
|
|
|
|
//获取字段信息
|
|
|
for i := 0; i < int(Field_Num); i++ {
|
|
@@ -233,7 +217,6 @@ func parseSelectResult(readBuf *buffer) (*SelectResult, error) {
|
|
|
return nil, err
|
|
|
}
|
|
|
field.FieldNameLen = int(binary.LittleEndian.Uint32(Field_Name_Len))
|
|
|
- fmt.Println("field.FieldNameLen: ", field.FieldNameLen)
|
|
|
|
|
|
//Field_Name:
|
|
|
Field_Name, err := readBuf.readNext(field.FieldNameLen, false)
|
|
@@ -241,7 +224,6 @@ func parseSelectResult(readBuf *buffer) (*SelectResult, error) {
|
|
|
return nil, err
|
|
|
}
|
|
|
field.FieldName = string(Field_Name)
|
|
|
- fmt.Println("field.Field_Name: ", field.FieldName)
|
|
|
|
|
|
//Field_DType:
|
|
|
Field_DType, err := readBuf.readNext(4, true)
|
|
@@ -249,7 +231,6 @@ func parseSelectResult(readBuf *buffer) (*SelectResult, error) {
|
|
|
return nil, err
|
|
|
}
|
|
|
field.FieldType = fieldType(binary.LittleEndian.Uint32(Field_DType))
|
|
|
- fmt.Println("field.FieldType: ", field.FieldType)
|
|
|
|
|
|
//Field_Preci_Scale:
|
|
|
Field_Preci_Scale, err := readBuf.readNext(4, true)
|
|
@@ -269,7 +250,6 @@ func parseSelectResult(readBuf *buffer) (*SelectResult, error) {
|
|
|
accuracy: uint16(fieldPreciScale & 0xFFFF),
|
|
|
}
|
|
|
}
|
|
|
- fmt.Println("field.FieldPreciScale: ", field.FieldPreciScale)
|
|
|
|
|
|
//Field_Flag:
|
|
|
Field_Flag, err := readBuf.readNext(4, true)
|
|
@@ -277,7 +257,6 @@ func parseSelectResult(readBuf *buffer) (*SelectResult, error) {
|
|
|
return nil, err
|
|
|
}
|
|
|
field.FieldFlag = binary.LittleEndian.Uint32(Field_Flag)
|
|
|
- fmt.Println("field.FieldFlag: ", field.FieldFlag)
|
|
|
data.Fields = append(data.Fields, field)
|
|
|
}
|
|
|
|
|
@@ -285,20 +264,14 @@ func parseSelectResult(readBuf *buffer) (*SelectResult, error) {
|
|
|
|
|
|
//获取字段的行值,并判断类型
|
|
|
// 使用 Peek 方法检查下一个字节是否为'R'或'K'
|
|
|
- fmt.Println("\n\n=========开始获取行数据=================================")
|
|
|
- defer func() {
|
|
|
- fmt.Println("\n\n=========获取行数据结束=================================")
|
|
|
- }()
|
|
|
|
|
|
char = readBuf.peekChar()
|
|
|
- fmt.Println(" --char: ", string(char))
|
|
|
readBuf.idx++
|
|
|
if char == 'K' {
|
|
|
return data, nil
|
|
|
} else if char == 'R' {
|
|
|
colIdx := 0
|
|
|
//typeIdx := 0
|
|
|
- fmt.Println("开始循环 ")
|
|
|
|
|
|
for {
|
|
|
col := FieldValue{}
|
|
@@ -314,15 +287,12 @@ func parseSelectResult(readBuf *buffer) (*SelectResult, error) {
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
- fmt.Println("col.Col_Data: ", col.Col_Data)
|
|
|
+
|
|
|
data.Values[colIdx] = append(data.Values[colIdx], col)
|
|
|
colIdx++
|
|
|
- // if col.Col_len > 8000 {
|
|
|
- // fmt.Println("数据为: ", col.Col_Data)
|
|
|
- // }
|
|
|
+
|
|
|
char := readBuf.peekChar()
|
|
|
|
|
|
- //fmt.Println("buf is ", readBuf.buf[readBuf.idx:])
|
|
|
//既不是R 也不是K 代表该行还有其他字段内容没有读取完成
|
|
|
if char == 'R' {
|
|
|
readBuf.idx++
|
|
@@ -336,7 +306,6 @@ func parseSelectResult(readBuf *buffer) (*SelectResult, error) {
|
|
|
} //for end
|
|
|
|
|
|
} else if char == '$' {
|
|
|
- fmt.Println(" 查询返回 $ ")
|
|
|
fad, err := parseFormArgDescri(readBuf)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
@@ -506,7 +475,6 @@ func parseFormArgDescri(readBuf *buffer) (*FormArgDescri, error) {
|
|
|
}
|
|
|
Arg_Num := binary.LittleEndian.Uint32(Arg_Nums)
|
|
|
formArgDescri := &FormArgDescri{ArgNum: Arg_Num}
|
|
|
- fmt.Println("-- parseFormArgDescri Arg_Num:", Arg_Num)
|
|
|
for i := 0; i < int(Arg_Num); i++ {
|
|
|
arg := ArgDescri{}
|
|
|
//Arg_Name_Len
|
|
@@ -540,6 +508,5 @@ func parseFormArgDescri(readBuf *buffer) (*FormArgDescri, error) {
|
|
|
arg.ArgPreciScale = binary.LittleEndian.Uint32(ArgPreciScale)
|
|
|
formArgDescri.Args = append(formArgDescri.Args, arg)
|
|
|
}
|
|
|
- fmt.Printf("formArgDescri %#v \n", formArgDescri)
|
|
|
return formArgDescri, nil
|
|
|
}
|