123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346 |
- package xugu
- import "fmt"
- type XGCSParam struct {
- Type HANDLE_TYPE
- ParamNum uint32
- PResourceNum int
- ParamArraySize int
- ValueP []byte
- VType []uint32
- VParamSize []uint32
- VDbType *int
- VActuallenp [][]int
- VParamName [][]byte
- VParamNo []uint32
- VInOut []int
- ErrStr []byte
- MemType int
- ImpExpType int
- }
- func xgSockBindparamByPos(pconn *xuguConn, param_no int, param_type int, datatype int, value []byte, param_size int, rlen_val []int) int {
- if pconn.Type == HT_CONN {
- if pconn.params == nil {
- pconn.params = &XGCSParam{Type: HT_PARAMS}
- }
- if param_no > 4000 {
- pconn.errStr = []byte(fmt.Sprintf("[EC051]Error invalid param NO %d out of range paramnum", param_no))
- return -51
- }
- if !(param_type == 1 || param_type == 2 || param_type == 3 || param_type == 6) {
- pconn.errStr = []byte(fmt.Sprintf("[EC052]Error invalid param type %d", param_type))
- return -52
- }
- if param_no < 1 {
- pconn.errStr = []byte(fmt.Sprintf("[EC054]Error param_no param seq %d invalid", param_no))
- return -54
- }
- } else if pconn.params.Type == HT_PARAMS {
- if param_no > 4000 {
- pconn.params.ErrStr = []byte(fmt.Sprintf("[EC051]Error invalid param NO %d out of range paramnum", param_no))
-
- return -51
- }
- if !(param_type == 1 || param_type == 2 || param_type == 3 || param_type == 6) {
- pconn.params.ErrStr = []byte(fmt.Sprintf("[EC052]Error invalid param type %d", param_type))
- return -52
- }
- if param_no < 1 {
- pconn.errStr = []byte(fmt.Sprintf("[EC054]Error param_no param seq %d invalid", param_no))
- return -54
- }
- } else {
-
- return XG_INVALID_ARG
- }
- ret := xgSockBindParamsByPos(*pconn.params, param_no, param_type, datatype, value, param_size, rlen_val)
- if ret < 0 {
- if ret == -55 {
- pconn.errStr = []byte(fmt.Sprintf("[EC055]Error bindparam jump long %d invalid", ret))
- return -55
- } else if ret == -8 {
- pconn.errStr = []byte(fmt.Sprintf("[EC056]Error bindparam unsurpported ret %d invalid", ret))
- return -8
- }
- }
- return ret
- }
- func xgSockBindParamsByPos(pParams XGCSParam, param_no int, param_type int, datatype int, value []byte, param_size int, rlen_val []int) int {
- ipar := param_no
- ipar--
- if pParams.ParamNum == 0 {
- pParams.PResourceNum = 128
- pParams.VType = make([]uint32, 128)
- pParams.VParamSize = make([]uint32, 128)
-
- pParams.VActuallenp = make([][]int, 128)
- pParams.VParamNo = make([]uint32, 128)
- pParams.VInOut = make([]int, 128)
- pParams.VParamName = nil
- }
- if int(pParams.ParamNum) < param_no {
- if pParams.PResourceNum < param_no {
- if pParams.PResourceNum+128 < param_no {
- return -55
- }
- }
-
- }
- if param_type == 6 {
-
- pParams.VParamNo[uint32(ipar)] = uint32(ipar)
- pParams.VType[uint32(ipar)] = uint32(datatype)
- pParams.ValueP = value
- pParams.VParamSize[uint32(ipar)] = uint32(param_size)
- pParams.VActuallenp[uint32(ipar)] = rlen_val
- pParams.VInOut[uint32(ipar)] = param_type
- } else if param_type == 1 {
- pParams.VParamNo[uint32(ipar)] = uint32(ipar)
- pParams.VType[uint32(ipar)] = uint32(datatype)
-
- pParams.ValueP = value
- pParams.VActuallenp[uint32(ipar)] = rlen_val
- pParams.MemType = 1
- pParams.VInOut[uint32(ipar)] = 1
- } else if param_type == 2 || param_type == 3 {
- pParams.VParamNo[uint32(ipar)] = uint32(ipar)
- pParams.VType[uint32(ipar)] = uint32(datatype)
- pParams.ValueP = value
- pParams.VParamSize[uint32(ipar)] = uint32(param_size)
- pParams.VActuallenp[uint32(ipar)] = rlen_val
- pParams.VInOut[uint32(ipar)] = param_type
- } else {
- return -8
-
- }
- return 0
- }
- func xgSockBindParamArrayByPos(pConn *xuguConn, param_no int, param_num int, param_type int, datatype int, array_size int, array_value []byte, param_size int, rlen_val []int) int {
- if pConn.Type == HT_CONN {
- if pConn.params == nil {
- pConn.params = new(XGCSParam)
- pConn.params.Type = HT_PARAMS
- }
- if param_no > 4000 || param_num > 4000 || param_num < -1 {
-
- pConn.errStr = []byte(fmt.Sprintf("[EC051]Error invalid param NO %d out of range paramnum", param_num))
- return -51
- }
- if !(param_type == 1 || param_type == 2 || param_type == 3 || param_type == 6) {
- pConn.errStr = []byte(fmt.Sprintf("[EC052]Error invalid param type %d", param_type))
- return -52
- }
- if param_no < 1 {
- pConn.errStr = []byte(fmt.Sprintf("[EC054]Error param_no param seq %d invalid", param_no))
- return -54
- }
- } else if pConn.Type == HT_PARAMS {
-
- if param_no > 4000 {
- pConn.params.ErrStr = []byte(fmt.Sprintf("[EC051]Error invalid param NO %d out of range paramnum", param_no))
- return -51
- }
- if !(param_type == 1 || param_type == 2 || param_type == 3 || param_type == 6) {
- pConn.params.ErrStr = []byte(fmt.Sprintf("[EC052]Error invalid param type %d", param_type))
- return -52
- }
- if param_no < 1 {
- pConn.params.ErrStr = []byte(fmt.Sprintf("[EC054]Error param_no param seq %d invalid", param_no))
- return -54
- }
- } else {
- return XG_INVALID_ARG
- }
- ret := xgSockBindParamsArrayByPos(pConn.params, param_no, param_num, param_type, datatype, array_size, array_value, param_size, rlen_val)
- return ret
- }
- func xgSockBindParamsArrayByPos(pParams *XGCSParam, param_no int, param_num int, param_type int, datatype int, array_size int,
- array_value []byte, param_size int, rlen_val []int) int {
- ipar := param_no - 1
- if pParams.ParamNum == 0 {
-
- if param_num == 0 {
- pParams.PResourceNum = 128
- pParams.VType = make([]uint32, 128)
- pParams.VParamSize = make([]uint32, 128)
-
- pParams.VActuallenp = make([][]int, 128)
- pParams.VParamNo = make([]uint32, 128)
- pParams.VInOut = make([]int, 128)
- pParams.VParamName = nil
- } else {
- pParams.ParamArraySize = array_size
- pParams.VType = make([]uint32, param_num)
- pParams.VParamSize = make([]uint32, param_num)
-
- pParams.VActuallenp = make([][]int, param_num)
- pParams.VParamNo = make([]uint32, param_num)
- pParams.VInOut = make([]int, param_num)
-
- }
- }
- if pParams.ParamNum < uint32(param_no) {
- if pParams.PResourceNum < param_no {
- }
- pParams.ParamNum = uint32(param_no)
- }
- if param_type == 6 {
-
- } else if param_type == 1 {
- pParams.VParamNo[ipar] = uint32(param_no)
- pParams.VType[ipar] = uint32(datatype)
-
-
- var ptr []byte
- copy(pParams.VActuallenp[ipar], rlen_val)
- if needCopyV(datatype) {
-
- copy(ptr, array_value)
- } else if datatype == XG_C_CHAR || datatype == XG_C_NCHAR {
- copy(ptr, array_value)
- } else {
-
-
- }
- for irow := 0; irow < array_size; irow++ {
- switch datatype {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- default:
- fmt.Println("bindparam unsurpported datatype")
- pParams.ErrStr = []byte(fmt.Sprintf("[EC058]Error bindparam unsurpported datatype %d invalid", datatype))
- return -58
- }
- }
- pParams.VParamSize[ipar] = uint32(param_size)
- pParams.VInOut[ipar] = 1
- } else if param_type == 2 {
-
- return -8
- } else {
- return -8
-
- }
- return XG_OK
- }
- func xgSockBindParamByName(pConn *xuguConn, param_name []byte, param_type int, datatype int, void []byte, param_sizeint, rt_code *int, rlen_val []int) int {
- pParams := pConn.params
- if pConn.Type == HT_CONN {
- if nil == pConn.params {
- pConn.params = &XGCSParam{}
- pConn.params.Type = HT_PARAMS
- }
- pParams = pConn.params
- } else if pConn.Type == HT_PARAMS {
- pParams = pConn.params
- } else {
-
- return XG_INVALID_ARG
- }
- if !(param_type == 1 || param_type == 2 || param_type == 3 || param_type == 6) {
- if pConn.Type == HT_CONN {
- pConn.params.ErrStr = []byte(fmt.Sprintf("[EC052]Error invalis param type %d", param_type))
- } else {
- pParams.ErrStr = []byte(fmt.Sprintf("[EC052]Error invalis param type %d", param_type))
- }
- return -52
- }
- return 0
- }
- func xgSockBindParamByNameSub(pParams *XGCSParam) {
- if pParams.ParamNum == 0 {
- pParams.PResourceNum = 128
- pParams.ValueP = make([]byte, 128)
- pParams.VType = make([]uint32, 128)
- pParams.VParamSize = make([]uint32, 128)
-
- pParams.VActuallenp = make([][]int, 128)
- pParams.VParamNo = make([]uint32, 128)
- pParams.VInOut = make([]int, 128)
- pParams.VParamName = nil
- }
- }
|