xugu_sock.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package xugu
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. )
  7. func xgSockOpenConn(ctx context.Context, pConn *xuguConn) error {
  8. fmt.Println(" ---xgSockOpenConn(ctx context.Context, pConn *xuguConn)")
  9. //发送
  10. //fmt.Printf("login database = '%s' user = '%s' password = '%s' version='201' ", pConn.Database, pConn.User, pConn.Password)
  11. // message := "login database = 'SYSTEM' user = 'SYSDBA' password = 'SYSDBA' version='201' "
  12. dsnMessage := generateLoginString(pConn.dsnConfig)
  13. _, err := pConn.conn.Write([]byte(dsnMessage))
  14. if err != nil {
  15. return errors.New("conn 发送数据库连接失败:")
  16. }
  17. fmt.Println("数据已发送:", dsnMessage)
  18. buffer := make([]byte, 1024)
  19. n, err := pConn.conn.Read(buffer)
  20. if err != nil {
  21. return errors.New("conn 接收数据库连接相应失败:")
  22. }
  23. fmt.Println("读取数据库服务返回:", string(buffer[:n]))
  24. //SockSendCommand0(pConn, "set schema SYSTEM")
  25. return nil
  26. }
  27. func xgSockPrepare(pConn *xuguConn, sql string, prepareName *string) (int, error) {
  28. fmt.Println(">>>>>xgSockPrepare")
  29. if "" == *prepareName {
  30. ret := 0
  31. //p_params := &conn.params
  32. if pConn.havePrepare != 0 {
  33. ret = xgCmdUnprepare(pConn, pConn.prepareName)
  34. if ret < 0 {
  35. return ret, errors.New("XG_ERROR")
  36. }
  37. pConn.prepareName = ""
  38. pConn.prepareName = fmt.Sprintf(pConn.prepareName+"STC%d", pConn.prepareNo)
  39. ret, err := xgCmdPrepare(pConn, sql, &pConn.prepareName)
  40. if err != nil {
  41. return ret, err
  42. }
  43. }
  44. return ret, errors.New("xgSockPrepare_ERROR")
  45. }
  46. ret := 0
  47. // XGCSParam* p_params= pconn->params;
  48. old_p := pConn.havePrepare
  49. // char* sql=strdup(cmd_sql);
  50. *prepareName = fmt.Sprintf("STC%d", pConn.prepareNo)
  51. pConn.prepareNo++ // 递增 prepare_no 的值
  52. ret, err := xgCmdPrepare(pConn, sql, &pConn.prepareName)
  53. if err != nil {
  54. return 0, err
  55. }
  56. pConn.havePrepare = old_p // this keeped by prepare_name
  57. return ret, nil
  58. }