susumu.yata
null+****@clear*****
Mon Jun 22 15:58:52 JST 2015
susumu.yata 2015-06-22 15:58:52 +0900 (Mon, 22 Jun 2015) New Revision: 73b2abe5d09b2103d0e777293c7cdc5a8f61ba31 https://github.com/groonga/grngo/commit/73b2abe5d09b2103d0e777293c7cdc5a8f61ba31 Message: Support setting integer vector values other than Int64. GitHub: #5 Modified files: grngo.c grngo.go grngo.h Modified: grngo.c (+101 -3) =================================================================== --- grngo.c 2015-06-22 15:46:43 +0900 (fd90338) +++ grngo.c 2015-06-22 15:58:52 +0900 (1d0ce8d) @@ -374,9 +374,51 @@ grn_bool grngo_column_set_bool_vector(grn_ctx *ctx, grn_obj *column, return rc == GRN_SUCCESS; } -grn_bool grngo_column_set_int_vector(grn_ctx *ctx, grn_obj *column, - grn_id id, - const grngo_vector *value) { +grn_bool grngo_column_set_int8_vector(grn_ctx *ctx, grn_obj *column, + grn_id id, + const grngo_vector *value) { + grn_obj obj; + GRN_INT8_INIT(&obj, GRN_OBJ_VECTOR); + size_t i; + for (i = 0; i < value->size; i++) { + GRN_INT8_SET_AT(ctx, &obj, i, ((const int64_t *)value->ptr)[i]); + } + grn_rc rc = grn_obj_set_value(ctx, column, id, &obj, GRN_OBJ_SET); + GRN_OBJ_FIN(ctx, &obj); + return rc == GRN_SUCCESS; +} + +grn_bool grngo_column_set_int16_vector(grn_ctx *ctx, grn_obj *column, + grn_id id, + const grngo_vector *value) { + grn_obj obj; + GRN_INT16_INIT(&obj, GRN_OBJ_VECTOR); + size_t i; + for (i = 0; i < value->size; i++) { + GRN_INT16_SET_AT(ctx, &obj, i, ((const int64_t *)value->ptr)[i]); + } + grn_rc rc = grn_obj_set_value(ctx, column, id, &obj, GRN_OBJ_SET); + GRN_OBJ_FIN(ctx, &obj); + return rc == GRN_SUCCESS; +} + +grn_bool grngo_column_set_int32_vector(grn_ctx *ctx, grn_obj *column, + grn_id id, + const grngo_vector *value) { + grn_obj obj; + GRN_INT32_INIT(&obj, GRN_OBJ_VECTOR); + size_t i; + for (i = 0; i < value->size; i++) { + GRN_INT32_SET_AT(ctx, &obj, i, ((const int64_t *)value->ptr)[i]); + } + grn_rc rc = grn_obj_set_value(ctx, column, id, &obj, GRN_OBJ_SET); + GRN_OBJ_FIN(ctx, &obj); + return rc == GRN_SUCCESS; +} + +grn_bool grngo_column_set_int64_vector(grn_ctx *ctx, grn_obj *column, + grn_id id, + const grngo_vector *value) { grn_obj obj; GRN_INT64_INIT(&obj, GRN_OBJ_VECTOR); size_t i; @@ -388,6 +430,62 @@ grn_bool grngo_column_set_int_vector(grn_ctx *ctx, grn_obj *column, return rc == GRN_SUCCESS; } +grn_bool grngo_column_set_uint8_vector(grn_ctx *ctx, grn_obj *column, + grn_id id, + const grngo_vector *value) { + grn_obj obj; + GRN_UINT8_INIT(&obj, GRN_OBJ_VECTOR); + size_t i; + for (i = 0; i < value->size; i++) { + GRN_UINT8_SET_AT(ctx, &obj, i, ((const int64_t *)value->ptr)[i]); + } + grn_rc rc = grn_obj_set_value(ctx, column, id, &obj, GRN_OBJ_SET); + GRN_OBJ_FIN(ctx, &obj); + return rc == GRN_SUCCESS; +} + +grn_bool grngo_column_set_uint16_vector(grn_ctx *ctx, grn_obj *column, + grn_id id, + const grngo_vector *value) { + grn_obj obj; + GRN_UINT16_INIT(&obj, GRN_OBJ_VECTOR); + size_t i; + for (i = 0; i < value->size; i++) { + GRN_UINT16_SET_AT(ctx, &obj, i, ((const int64_t *)value->ptr)[i]); + } + grn_rc rc = grn_obj_set_value(ctx, column, id, &obj, GRN_OBJ_SET); + GRN_OBJ_FIN(ctx, &obj); + return rc == GRN_SUCCESS; +} + +grn_bool grngo_column_set_uint32_vector(grn_ctx *ctx, grn_obj *column, + grn_id id, + const grngo_vector *value) { + grn_obj obj; + GRN_UINT32_INIT(&obj, GRN_OBJ_VECTOR); + size_t i; + for (i = 0; i < value->size; i++) { + GRN_UINT32_SET_AT(ctx, &obj, i, ((const int64_t *)value->ptr)[i]); + } + grn_rc rc = grn_obj_set_value(ctx, column, id, &obj, GRN_OBJ_SET); + GRN_OBJ_FIN(ctx, &obj); + return rc == GRN_SUCCESS; +} + +grn_bool grngo_column_set_uint64_vector(grn_ctx *ctx, grn_obj *column, + grn_id id, + const grngo_vector *value) { + grn_obj obj; + GRN_UINT64_INIT(&obj, GRN_OBJ_VECTOR); + size_t i; + for (i = 0; i < value->size; i++) { + GRN_UINT64_SET_AT(ctx, &obj, i, ((const int64_t *)value->ptr)[i]); + } + grn_rc rc = grn_obj_set_value(ctx, column, id, &obj, GRN_OBJ_SET); + GRN_OBJ_FIN(ctx, &obj); + return rc == GRN_SUCCESS; +} + grn_bool grngo_column_set_float_vector(grn_ctx *ctx, grn_obj *column, grn_id id, const grngo_vector *value) { Modified: grngo.go (+25 -3) =================================================================== --- grngo.go 2015-06-22 15:46:43 +0900 (05cc9da) +++ grngo.go 2015-06-22 15:58:52 +0900 (41bcc06) @@ -1023,9 +1023,31 @@ func (column *Column) setIntVector(id uint32, value []int64) error { grnVector.ptr = unsafe.Pointer(&value[0]) grnVector.size = C.size_t(len(value)) } - if ok := C.grngo_column_set_int_vector(column.table.db.ctx, column.obj, - C.grn_id(id), &grnVector); ok != C.GRN_TRUE { - return fmt.Errorf("grngo_column_set_int_vector() failed") + ctx := column.table.db.ctx + obj := column.obj + var ok C.grn_bool + switch column.valueType { + case Int8: + ok = C.grngo_column_set_int8_vector(ctx, obj, C.grn_id(id), &grnVector) + case Int16: + ok = C.grngo_column_set_int16_vector(ctx, obj, C.grn_id(id), &grnVector) + case Int32: + ok = C.grngo_column_set_int32_vector(ctx, obj, C.grn_id(id), &grnVector) + case Int64: + ok = C.grngo_column_set_int64_vector(ctx, obj, C.grn_id(id), &grnVector) + case UInt8: + ok = C.grngo_column_set_uint8_vector(ctx, obj, C.grn_id(id), &grnVector) + case UInt16: + ok = C.grngo_column_set_uint16_vector(ctx, obj, C.grn_id(id), &grnVector) + case UInt32: + ok = C.grngo_column_set_uint32_vector(ctx, obj, C.grn_id(id), &grnVector) + case UInt64: + ok = C.grngo_column_set_uint64_vector(ctx, obj, C.grn_id(id), &grnVector) + default: + return fmt.Errorf("value type conflict") + } + if ok != C.GRN_TRUE { + return fmt.Errorf("grngo_column_set_int*_vector() failed") } return nil } Modified: grngo.h (+24 -3) =================================================================== --- grngo.h 2015-06-22 15:46:43 +0900 (42c4b84) +++ grngo.h 2015-06-22 15:58:52 +0900 (4785c88) @@ -115,9 +115,30 @@ grn_bool grngo_column_set_bool_vector(grn_ctx *ctx, grn_obj *column, grn_id id, const grngo_vector *value); // grngo_column_set_int_vector() assigns an Int vector. -grn_bool grngo_column_set_int_vector(grn_ctx *ctx, grn_obj *column, - grn_id id, - const grngo_vector *value); +grn_bool grngo_column_set_int8_vector(grn_ctx *ctx, grn_obj *column, + grn_id id, + const grngo_vector *value); +grn_bool grngo_column_set_int16_vector(grn_ctx *ctx, grn_obj *column, + grn_id id, + const grngo_vector *value); +grn_bool grngo_column_set_int32_vector(grn_ctx *ctx, grn_obj *column, + grn_id id, + const grngo_vector *value); +grn_bool grngo_column_set_int64_vector(grn_ctx *ctx, grn_obj *column, + grn_id id, + const grngo_vector *value); +grn_bool grngo_column_set_uint8_vector(grn_ctx *ctx, grn_obj *column, + grn_id id, + const grngo_vector *value); +grn_bool grngo_column_set_uint16_vector(grn_ctx *ctx, grn_obj *column, + grn_id id, + const grngo_vector *value); +grn_bool grngo_column_set_uint32_vector(grn_ctx *ctx, grn_obj *column, + grn_id id, + const grngo_vector *value); +grn_bool grngo_column_set_uint64_vector(grn_ctx *ctx, grn_obj *column, + grn_id id, + const grngo_vector *value); // grngo_column_set_float_vector() assigns a Float vector. grn_bool grngo_column_set_float_vector(grn_ctx *ctx, grn_obj *column, grn_id id, -------------- next part -------------- HTML����������������������������...Download