|
@@ -110,14 +110,24 @@ func assertParamType(dV driver.Value, values *[]xuguValue) error {
|
|
|
|
|
|
func parseMsg(readBuf *buffer, pConn *xuguConn) (*allResult, error) {
|
|
|
var err error
|
|
|
- aR := allResult{}
|
|
|
+ i := 0
|
|
|
+ //aR := allResult{}
|
|
|
+ aRPoint := &allResult{}
|
|
|
+ aR := aRPoint
|
|
|
for {
|
|
|
char := readBuf.peekChar()
|
|
|
+ if i != 0 {
|
|
|
+ re := &allResult{}
|
|
|
+ aR.next = re
|
|
|
+ aR = re
|
|
|
+ }
|
|
|
+ i++
|
|
|
switch char {
|
|
|
|
|
|
case 'K':
|
|
|
readBuf.reset()
|
|
|
- return &aR, nil
|
|
|
+ fmt.Printf("这他妈的 %#v \n 他们2222 %#v \n", aRPoint.s, aRPoint.next)
|
|
|
+ return aRPoint, nil
|
|
|
|
|
|
case '$':
|
|
|
readBuf.idx++
|
|
@@ -193,7 +203,7 @@ func parseMsg(readBuf *buffer, pConn *xuguConn) (*allResult, error) {
|
|
|
func parseSelectResult(readBuf *buffer) (*SelectResult, error) {
|
|
|
data := &SelectResult{}
|
|
|
|
|
|
- char := readBuf.peekChar()
|
|
|
+ var char byte
|
|
|
|
|
|
//Field_Num
|
|
|
fn, err := readBuf.readNext(4, true)
|
|
@@ -223,7 +233,7 @@ func parseSelectResult(readBuf *buffer) (*SelectResult, error) {
|
|
|
return nil, err
|
|
|
}
|
|
|
parts := strings.Split(string(Field_Name), ".")
|
|
|
- field.FieldName = parts[len(parts)-1]
|
|
|
+ field.FieldName = parts[len(parts)-1]
|
|
|
|
|
|
//Field_DType:
|
|
|
Field_DType, err := readBuf.readNext(4, true)
|
|
@@ -264,65 +274,55 @@ func parseSelectResult(readBuf *buffer) (*SelectResult, error) {
|
|
|
|
|
|
//获取字段的行值,并判断类型
|
|
|
// 使用 Peek 方法检查下一个字节是否为'R'或'K'
|
|
|
+ for {
|
|
|
+ char = readBuf.peekChar()
|
|
|
+ //readBuf.idx++
|
|
|
+ if char == 'K' {
|
|
|
+ return data, nil
|
|
|
+ } else if char == 'R' { //接收字段信息后不是k 那一定是 R
|
|
|
+ fmt.Println("读取字段值")
|
|
|
|
|
|
- char = readBuf.peekChar()
|
|
|
- //readBuf.idx++
|
|
|
- if char == 'K' {
|
|
|
- return data, nil
|
|
|
- } else if char == 'R' {
|
|
|
- colIdx := 0
|
|
|
- //typeIdx := 0
|
|
|
- readBuf.idx++
|
|
|
- for {
|
|
|
- col := FieldValue{}
|
|
|
- //获取数据的大小
|
|
|
- Col_len, err := readBuf.readNext(4, true)
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
- col.Col_len = binary.LittleEndian.Uint32(Col_len)
|
|
|
-
|
|
|
- //获取数据的值
|
|
|
- col.Col_Data, err = readBuf.readNext(int(col.Col_len), false)
|
|
|
+ colIdx := 0
|
|
|
+ //typeIdx := 0
|
|
|
+ readBuf.idx++
|
|
|
+ for i := 0; i < int(Field_Num); i++ {
|
|
|
+ col := FieldValue{}
|
|
|
+ //获取数据的大小
|
|
|
+ Col_len, err := readBuf.readNext(4, true)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ col.Col_len = binary.LittleEndian.Uint32(Col_len)
|
|
|
+
|
|
|
+ //获取数据的值
|
|
|
+ col.Col_Data, err = readBuf.readNext(int(col.Col_len), false)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ data.Values[colIdx] = append(data.Values[colIdx], col)
|
|
|
+ colIdx++
|
|
|
+
|
|
|
+ } //for end
|
|
|
+
|
|
|
+ } else if char == '$' {
|
|
|
+ fad, err := parseFormArgDescri(readBuf)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
|
|
|
- data.Values[colIdx] = append(data.Values[colIdx], col)
|
|
|
- colIdx++
|
|
|
-
|
|
|
char := readBuf.peekChar()
|
|
|
-
|
|
|
//既不是R 也不是K 代表该行还有其他字段内容没有读取完成
|
|
|
- if char == 'R' {
|
|
|
- readBuf.idx++
|
|
|
- colIdx = 0
|
|
|
- continue
|
|
|
- } else if char == 'K' {
|
|
|
-
|
|
|
+ if char == 'K' {
|
|
|
+ data.fad = fad
|
|
|
return data, nil
|
|
|
//break
|
|
|
}
|
|
|
|
|
|
- } //for end
|
|
|
-
|
|
|
- } else if char == '$' {
|
|
|
- fad, err := parseFormArgDescri(readBuf)
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
-
|
|
|
- char := readBuf.peekChar()
|
|
|
- //既不是R 也不是K 代表该行还有其他字段内容没有读取完成
|
|
|
- if char == 'K' {
|
|
|
- data.fad = fad
|
|
|
+ return nil, errors.New("select to $ 解析失败")
|
|
|
+ } else {
|
|
|
return data, nil
|
|
|
- //break
|
|
|
}
|
|
|
-
|
|
|
- return nil, errors.New("select to $ 解析失败")
|
|
|
- } else {
|
|
|
- return nil, errors.New("解析失败")
|
|
|
}
|
|
|
|
|
|
}
|