xugu_prepare.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package xugu
  2. import (
  3. "fmt"
  4. )
  5. const RETURN_PREPARE_SELECT = 19665
  6. func xuguPrepare(pConn *xuguConn, cmd_sql string, prepareName string) error {
  7. fmt.Println("\n ---xuguPrepare")
  8. sqlRet := fmt.Sprintf("PREPARE %s AS %s", prepareName, cmd_sql)
  9. //上锁
  10. //lockConnect(pConn)
  11. //pConn.mu.Lock()
  12. sockSendPutStatement(pConn, []byte(sqlRet), nil, 0)
  13. XGC_Execute(pConn)
  14. //接收服务器消息返回
  15. // pConn.conn.Read(pConn.readBuff.buf)
  16. // _, err := parseMsg(&pConn.readBuff, pConn)
  17. _, err := xuguSockRecvMsg(pConn)
  18. if err != nil {
  19. fmt.Println("xuguPrepare parseMsg(&pConn.readBuff, pConn)")
  20. return err
  21. }
  22. fmt.Println("Message from server:", pConn.readBuff.buf[pConn.readBuff.idx:])
  23. fmt.Println("Message from server:", string(pConn.readBuff.buf[pConn.readBuff.idx:]))
  24. fmt.Println("\n ---xuguPrepare end")
  25. return nil
  26. }
  27. // func xgCmdPrepare(pConn *xuguConn, cmd_sql string, prepareName *string) (int, error) {
  28. // fmt.Println("\n>>>>>xgCmdPrepare")
  29. // sqlRet := fmt.Sprintf("PREPARE %s AS %s", *prepareName, cmd_sql)
  30. // //上锁
  31. // //lockConnect(pConn)
  32. // pConn.mu.Lock()
  33. // SockSendCommand0(pConn, sqlRet)
  34. // var ch byte
  35. // var ret int
  36. // for {
  37. // recvRet, err := rhRecvChar(pConn, &ch)
  38. // if err != nil {
  39. // return 0, err
  40. // }
  41. // if !recvRet {
  42. // pConn.mu.Unlock()
  43. // return -4, errors.New("XG_NET_ERROR")
  44. // }
  45. // //A: SelectResult A在协议里为select返回
  46. // if ch == 'A' {
  47. // // pres := Result{}
  48. // // pres.Type = HT_RS
  49. // // ret, err = recvFiledsInfo(pConn, &pres)
  50. // // if err != nil {
  51. // // return ret, err
  52. // // }
  53. // // pConn.presPrepareCata = &pres
  54. // ret = RETURN_PREPARE_SELECT
  55. // continue
  56. // } else if ch == '$' {
  57. // var params XGCSParam
  58. // params.Type = HT_PARAMS
  59. // params.ImpExpType = 2
  60. // recvParamsInfo2(pConn, &params)
  61. // pConn.params = &params
  62. // continue
  63. // } else if ch == 'K' {
  64. // pConn.havePrepare = 1
  65. // } else {
  66. // var errStr []byte
  67. // ret, err = rhRecvStr(pConn, &errStr)
  68. // if ret < 0 || err != nil {
  69. // pConn.mu.Unlock()
  70. // return ret, err
  71. // }
  72. // pConn.errStr = errStr
  73. // ret = XG_ERROR
  74. // rhRecvChar(pConn, &ch)
  75. // if ch != 'K' {
  76. // pConn.bkChar = ch
  77. // continue
  78. // }
  79. // }
  80. // break
  81. // }
  82. // pConn.mu.Unlock()
  83. // return ret, nil
  84. // }
  85. // func xgCmdUnprepare(pConn *xuguConn, prepareName string) int {
  86. // fmt.Println("\n>>>>>xgCmdUnprepare")
  87. // var ch byte
  88. // var err error
  89. // ret := XG_OK