[Groonga-commit] groonga/grngo at 73b2abe [master] Support setting integer vector values other than Int64.

Back to archive index

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 



More information about the Groonga-commit mailing list
Back to archive index