123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- package xugu
- import (
- "context"
- "errors"
- "fmt"
- )
- func xgSockOpenConn(ctx context.Context, pConn *xuguConn) error {
- fmt.Println(" ---xgSockOpenConn(ctx context.Context, pConn *xuguConn)")
- //发送
- //fmt.Printf("login database = '%s' user = '%s' password = '%s' version='201' ", pConn.Database, pConn.User, pConn.Password)
- // message := "login database = 'SYSTEM' user = 'SYSDBA' password = 'SYSDBA' version='201' "
- dsnMessage := generateLoginString(pConn.dsnConfig)
- _, err := pConn.conn.Write([]byte(dsnMessage))
- if err != nil {
- return errors.New("conn 发送数据库连接失败:")
- }
- fmt.Println("数据已发送:", dsnMessage)
- buffer := make([]byte, 1)
- n, err := pConn.conn.Read(buffer)
- if err != nil {
- return errors.New("conn 接收数据库连接相应失败:")
- }
- fmt.Println("读取数据库服务返回:", string(buffer[:n]))
- //SockSendCommand0(pConn, "set schema SYSTEM")
- return nil
- }
- // func xgSockPrepare(pConn *xuguConn, sql string, prepareName *string) (int, error) {
- // fmt.Println(">>>>>xgSockPrepare")
- // if "" == *prepareName {
- // ret := 0
- // //p_params := &conn.params
- // if pConn.havePrepare != 0 {
- // ret = xgCmdUnprepare(pConn, pConn.prepareName)
- // if ret < 0 {
- // return ret, errors.New("XG_ERROR")
- // }
- // pConn.prepareName = ""
- // pConn.prepareName = fmt.Sprintf(pConn.prepareName+"STC%d", pConn.prepareNo)
- // ret, err := xgCmdPrepare(pConn, sql, &pConn.prepareName)
- // if err != nil {
- // return ret, err
- // }
- // }
- // return ret, errors.New("xgSockPrepare_ERROR")
- // }
- // ret := 0
- // // XGCSParam* p_params= pconn->params;
- // old_p := pConn.havePrepare
- // // char* sql=strdup(cmd_sql);
- // *prepareName = fmt.Sprintf("STC%d", pConn.prepareNo)
- // pConn.prepareNo++ // 递增 prepare_no 的值
- // ret, err := xgCmdPrepare(pConn, sql, &pConn.prepareName)
- // if err != nil {
- // return 0, err
- // }
- // pConn.havePrepare = old_p // this keeped by prepare_name
- // return ret, nil
- // }
- func parseMsg(readBuf *buffer, pConn *xuguConn) (rs *xuguResult, err error) {
- result := &xuguResult{
- affectedRows: 0,
- insertId: 0,
- }
- for {
- char := readBuf.peekChar()
- fmt.Println("parseMsg 内的 peekChar: ", char, "-", string(char))
- switch char {
- case 'K':
- fmt.Println("消息类型为K")
- // readBuf.buf = make([]byte, 2048)
- //readBuf.idx++
- readBuf.buf = make([]byte, 2048)
- readBuf.idx = 0
- return result, nil
- case '$':
- readBuf.idx++
- fmt.Println("消息类型为$")
- parseFormArgDescri(readBuf)
- case 'A':
- readBuf.idx++
- fmt.Println("消息类型为A")
- parseSelectResult(readBuf)
- case 'I':
- readBuf.idx++
- fmt.Println("消息类型为I")
- parseInsertResult(readBuf)
- case 'U':
- fmt.Println("消息类型为U")
- readBuf.idx++
- parseUpdateResult(readBuf)
- case 'D':
- fmt.Println("消息类型为D")
- readBuf.idx++
- parseDeleteResult(readBuf)
- case 'E':
- fmt.Println("消息类型为E")
- readBuf.idx++
- pErr, err := parseErrInfo(readBuf)
- if err != nil {
- return nil, err
- }
- // fmt.Println("E ReadBuf : ", readBuf.buf[readBuf.idx:])
- // fmt.Println("E ReadBuf string: ", string(readBuf.buf[readBuf.idx:]))
- pConn.errStr = pErr.ErrStr
- // char := readBuf.peekChar()
- // fmt.Println("Exec 内的 peekChar: ", char)
- case 'W':
- fmt.Println("消息类型为W")
- readBuf.idx++
- parseWarnInfo(readBuf)
- case 'M':
- fmt.Println("消息类型为M")
- readBuf.idx++
- parseMessage(readBuf)
- default:
- fmt.Println("消息类型为其他")
- return nil, errors.New("parseMsg: unknown message type")
- }
- }
- }
- func xuguSockRecvMsg(pConn *xuguConn) (rs *xuguResult, err error) {
- pConn.conn.Read(pConn.readBuff.buf)
- fmt.Println("pConn.readBuff.buf ::", pConn.readBuff.buf, string(pConn.readBuff.buf))
- rs, err = parseMsg(&pConn.readBuff, pConn)
- if err != nil {
- fmt.Println("xuguPrepare parseMsg(&pConn.readBuff, pConn)")
- return nil, err
- }
- return rs, nil
- }
|