holo-client-go/holo-client/request.go (277 lines of code) (raw):
package holoclient
/*
#cgo CFLAGS: -I./include
#cgo LDFLAGS: -L./lib -lholo-client
#include "request.h"
#include "table_schema.h"
#include <stdlib.h>
#include <stdbool.h>
*/
import "C"
import "unsafe"
type HoloMutationMode C.HoloMutationMode
const (
PUT HoloMutationMode = C.PUT
DELETE HoloMutationMode = C.DELETE
)
type HoloTableSchema struct {
ctableSchema *C.HoloTableSchema
}
func (schema *HoloTableSchema) NumColumns() int {
res := schema.ctableSchema.nColumns
return int(res)
}
func (schema *HoloTableSchema) GetColumnNameByColIndex(colIndex int) string {
return C.GoString(C.holo_client_get_column_name(schema.ctableSchema, C.int(colIndex)))
}
func (schema *HoloTableSchema) GetColumnTypeByColIndex(colIndex int) string {
return C.GoString(C.holo_client_get_column_type_name(schema.ctableSchema, C.int(colIndex)))
}
type mutationRequest struct {
cmutation C.HoloMutation
}
func NewMutationRequest(schema *HoloTableSchema) *mutationRequest {
m := new(mutationRequest)
m.cmutation = C.holo_client_new_mutation_request(schema.ctableSchema)
return m
}
func (mutation *mutationRequest) SetRequestMode(mode HoloMutationMode) {
C.holo_client_set_request_mode(mutation.cmutation, C.HoloMutationMode(mode))
}
// Set value by Colindex (recommended)
// 所有类型都可以以string类型设置
func (mutation *mutationRequest) SetValWithTextByColIndex(colIndex int, value string, len int) int {
cvalue := C.CString(value)
res := C.holo_client_set_req_val_with_text_by_colindex(mutation.cmutation, C.int(colIndex), cvalue, C.int(len))
C.free(unsafe.Pointer(cvalue))
return int(res)
}
// smallint
func (mutation *mutationRequest) SetInt16ValByColIndex(colIndex int, value int16) int {
res := C.holo_client_set_req_int16_val_by_colindex(mutation.cmutation, C.int(colIndex), C.int16_t(value))
return int(res)
}
// int
func (mutation *mutationRequest) SetInt32ValByColIndex(colIndex int, value int32) int {
res := C.holo_client_set_req_int32_val_by_colindex(mutation.cmutation, C.int(colIndex), C.int32_t(value))
return int(res)
}
// bigint
func (mutation *mutationRequest) SetInt64ValByColIndex(colIndex int, value int64) int {
res := C.holo_client_set_req_int64_val_by_colindex(mutation.cmutation, C.int(colIndex), C.int64_t(value))
return int(res)
}
// bool
func (mutation *mutationRequest) SetBoolValByColIndex(colIndex int, value bool) int {
res := C.holo_client_set_req_bool_val_by_colindex(mutation.cmutation, C.int(colIndex), C.bool(value))
return int(res)
}
// real(float4)
func (mutation *mutationRequest) SetFloat32ValByColIndex(colIndex int, value float32) int {
res := C.holo_client_set_req_float_val_by_colindex(mutation.cmutation, C.int(colIndex), C.float(value))
return int(res)
}
// float(float8 double precision)
func (mutation *mutationRequest) SetFloat64ValByColIndex(colIndex int, value float64) int {
res := C.holo_client_set_req_double_val_by_colindex(mutation.cmutation, C.int(colIndex), C.double(value))
return int(res)
}
// text
func (mutation *mutationRequest) SetTextValByColIndex(colIndex int, value string, len int) int {
cvalue := C.CString(value)
res := C.holo_client_set_req_text_val_by_colindex(mutation.cmutation, C.int(colIndex), cvalue, C.int(len))
C.free(unsafe.Pointer(cvalue))
return int(res)
}
// timestamp
func (mutation *mutationRequest) SetTimestampValByColIndex(colIndex int, value int64) int {
res := C.holo_client_set_req_timestamp_val_by_colindex(mutation.cmutation, C.int(colIndex), C.int64_t(value))
return int(res)
}
// timestamptz
func (mutation *mutationRequest) SetTimestamptzValByColIndex(colIndex int, value int64) int {
res := C.holo_client_set_req_timestamptz_val_by_colindex(mutation.cmutation, C.int(colIndex), C.int64_t(value))
return int(res)
}
// int[]
func (mutation *mutationRequest) SetInt32ArrayValByColIndex(colIndex int, value []int32) int {
var dataPtr *C.int32_t
if len(value) == 0 {
dataPtr = (*C.int32_t)(unsafe.Pointer(&value))
} else {
dataPtr = (*C.int32_t)(unsafe.Pointer(&value[0]))
}
res := C.holo_client_set_req_int32_array_val_by_colindex(mutation.cmutation, C.int(colIndex), dataPtr, C.int(len(value)))
return int(res)
}
// bigint[]
func (mutation *mutationRequest) SetInt64ArrayValByColIndex(colIndex int, value []int64) int {
var dataPtr *C.int64_t
if len(value) == 0 {
dataPtr = (*C.int64_t)(unsafe.Pointer(&value))
} else {
dataPtr = (*C.int64_t)(unsafe.Pointer(&value[0]))
}
res := C.holo_client_set_req_int64_array_val_by_colindex(mutation.cmutation, C.int(colIndex), dataPtr, C.int(len(value)))
return int(res)
}
// bool[]
func (mutation *mutationRequest) SetBoolArrayValByColIndex(colIndex int, value []bool) int {
var dataPtr *C.bool
if len(value) == 0 {
dataPtr = (*C.bool)(unsafe.Pointer(&value))
} else {
dataPtr = (*C.bool)(unsafe.Pointer(&value[0]))
}
res := C.holo_client_set_req_bool_array_val_by_colindex(mutation.cmutation, C.int(colIndex), dataPtr, C.int(len(value)))
return int(res)
}
// float4[]
func (mutation *mutationRequest) SetFloat32ArrayValByColIndex(colIndex int, value []float32) int {
var dataPtr *C.float
if len(value) == 0 {
dataPtr = (*C.float)(unsafe.Pointer(&value))
} else {
dataPtr = (*C.float)(unsafe.Pointer(&value[0]))
}
res := C.holo_client_set_req_float_array_val_by_colindex(mutation.cmutation, C.int(colIndex), dataPtr, C.int(len(value)))
return int(res)
}
// float8[]
func (mutation *mutationRequest) SetFloat64ArrayValByColIndex(colIndex int, value []float64) int {
var dataPtr *C.double
if len(value) == 0 {
dataPtr = (*C.double)(unsafe.Pointer(&value))
} else {
dataPtr = (*C.double)(unsafe.Pointer(&value[0]))
}
res := C.holo_client_set_req_double_array_val_by_colindex(mutation.cmutation, C.int(colIndex), dataPtr, C.int(len(value)))
return int(res)
}
func (mutation *mutationRequest) SetNullValByColIndex(colIndex int) int {
res := C.holo_client_set_req_null_val_by_colindex(mutation.cmutation, C.int(colIndex))
return int(res)
}
// Set value by Colname
// 所有类型
func (mutation *mutationRequest) SetValWithTextByColName(colName string, value string, len int) int {
cname := C.CString(colName)
cvalue := C.CString(value)
res := C.holo_client_set_req_val_with_text_by_colname(mutation.cmutation, cname, cvalue, C.int(len))
C.free(unsafe.Pointer(cvalue))
C.free(unsafe.Pointer(cname))
return int(res)
}
// smallint
func (mutation *mutationRequest) SetInt16ValByColName(colName string, value int16) int {
cname := C.CString(colName)
res := C.holo_client_set_req_int16_val_by_colname(mutation.cmutation, cname, C.int16_t(value))
C.free(unsafe.Pointer(cname))
return int(res)
}
// int
func (mutation *mutationRequest) SetInt32ValByColName(colName string, value int32) int {
cname := C.CString(colName)
res := C.holo_client_set_req_int32_val_by_colname(mutation.cmutation, cname, C.int32_t(value))
C.free(unsafe.Pointer(cname))
return int(res)
}
// bigint
func (mutation *mutationRequest) SetInt64ValByColName(colName string, value int64) int {
cname := C.CString(colName)
res := C.holo_client_set_req_int64_val_by_colname(mutation.cmutation, cname, C.int64_t(value))
C.free(unsafe.Pointer(cname))
return int(res)
}
// bool
func (mutation *mutationRequest) SetBoolValByColName(colName string, value bool) int {
cname := C.CString(colName)
res := C.holo_client_set_req_bool_val_by_colname(mutation.cmutation, cname, C.bool(value))
C.free(unsafe.Pointer(cname))
return int(res)
}
// real(float4)
func (mutation *mutationRequest) SetFloat32ValByColName(colName string, value float32) int {
cname := C.CString(colName)
res := C.holo_client_set_req_float_val_by_colname(mutation.cmutation, cname, C.float(value))
C.free(unsafe.Pointer(cname))
return int(res)
}
// float(float8 double precision)
func (mutation *mutationRequest) SetFloat64ValByColName(colName string, value float64) int {
cname := C.CString(colName)
res := C.holo_client_set_req_double_val_by_colname(mutation.cmutation, cname, C.double(value))
C.free(unsafe.Pointer(cname))
return int(res)
}
// text
func (mutation *mutationRequest) SetTextValByColName(colName string, value string, len int) int {
cname := C.CString(colName)
cvalue := C.CString(value)
res := C.holo_client_set_req_text_val_by_colname(mutation.cmutation, cname, cvalue, C.int(len))
C.free(unsafe.Pointer(cvalue))
C.free(unsafe.Pointer(cname))
return int(res)
}
// timestamp
func (mutation *mutationRequest) SetTimestampValByColName(colName string, value int64) int {
cname := C.CString(colName)
res := C.holo_client_set_req_timestamp_val_by_colname(mutation.cmutation, cname, C.int64_t(value))
C.free(unsafe.Pointer(cname))
return int(res)
}
// timestamptz
func (mutation *mutationRequest) SetTimestamptzValByColName(colName string, value int64) int {
cname := C.CString(colName)
res := C.holo_client_set_req_timestamptz_val_by_colname(mutation.cmutation, cname, C.int64_t(value))
C.free(unsafe.Pointer(cname))
return int(res)
}
// int[]
func (mutation *mutationRequest) SetInt32ArrayValByColName(colName string, value []int32) int {
cname := C.CString(colName)
var dataPtr *C.int32_t
if len(value) == 0 {
dataPtr = (*C.int32_t)(unsafe.Pointer(&value))
} else {
dataPtr = (*C.int32_t)(unsafe.Pointer(&value[0]))
}
res := C.holo_client_set_req_int32_array_val_by_colname(mutation.cmutation, cname, dataPtr, C.int(len(value)))
C.free(unsafe.Pointer(cname))
return int(res)
}
// bigint[]
func (mutation *mutationRequest) SetInt64ArrayValByColName(colName string, value []int64) int {
cname := C.CString(colName)
var dataPtr *C.int64_t
if len(value) == 0 {
dataPtr = (*C.int64_t)(unsafe.Pointer(&value))
} else {
dataPtr = (*C.int64_t)(unsafe.Pointer(&value[0]))
}
res := C.holo_client_set_req_int64_array_val_by_colname(mutation.cmutation, cname, dataPtr, C.int(len(value)))
C.free(unsafe.Pointer(cname))
return int(res)
}
// bool[]
func (mutation *mutationRequest) SetBoolArrayValByColName(colName string, value []bool) int {
cname := C.CString(colName)
var dataPtr *C.bool
if len(value) == 0 {
dataPtr = (*C.bool)(unsafe.Pointer(&value))
} else {
dataPtr = (*C.bool)(unsafe.Pointer(&value[0]))
}
res := C.holo_client_set_req_bool_array_val_by_colname(mutation.cmutation, cname, dataPtr, C.int(len(value)))
C.free(unsafe.Pointer(cname))
return int(res)
}
// float4[]
func (mutation *mutationRequest) SetFloat32ArrayValByColName(colName string, value []float32) int {
cname := C.CString(colName)
var dataPtr *C.float
if len(value) == 0 {
dataPtr = (*C.float)(unsafe.Pointer(&value))
} else {
dataPtr = (*C.float)(unsafe.Pointer(&value[0]))
}
res := C.holo_client_set_req_float_array_val_by_colname(mutation.cmutation, cname, dataPtr, C.int(len(value)))
C.free(unsafe.Pointer(cname))
return int(res)
}
// float8[]
func (mutation *mutationRequest) SetFloat64ArrayValByColName(colName string, value []float64) int {
cname := C.CString(colName)
var dataPtr *C.double
if len(value) == 0 {
dataPtr = (*C.double)(unsafe.Pointer(&value))
} else {
dataPtr = (*C.double)(unsafe.Pointer(&value[0]))
}
res := C.holo_client_set_req_double_array_val_by_colname(mutation.cmutation, cname, dataPtr, C.int(len(value)))
C.free(unsafe.Pointer(cname))
return int(res)
}
func (mutation *mutationRequest) SetNullValByColName(colName string) int {
cname := C.CString(colName)
res := C.holo_client_set_req_null_val_by_colname(mutation.cmutation, cname)
C.free(unsafe.Pointer(cname))
return int(res)
}
type GetRequest struct {
cget C.HoloGet
}
func NewGetRequest(schema *HoloTableSchema) *GetRequest {
get := new(GetRequest)
get.cget = C.holo_client_new_get_request(schema.ctableSchema)
return get
}
// 必须以string的形式设置值
func (get *GetRequest) SetGetValByColIndex(colIndex int, value string, len int) int {
cvalue := C.CString(value)
res := C.holo_client_set_get_val_with_text_by_colindex(get.cget, C.int(colIndex), cvalue, C.int(len))
C.free(unsafe.Pointer(cvalue))
return int(res)
}
func (get *GetRequest) DestroyGet() {
C.holo_client_destroy_get_request(get.cget)
}