[Groonga-commit] pgroonga/pgroonga at 2f6c6cf [master] wal: support applying array

Back to archive index

Kouhei Sutou null+****@clear*****
Sat Oct 29 17:08:22 JST 2016


Kouhei Sutou	2016-10-29 17:08:22 +0900 (Sat, 29 Oct 2016)

  New Revision: 2f6c6cf366ebf906f98b6a7ceb35bc081f8c52b2
  https://github.com/pgroonga/pgroonga/commit/2f6c6cf366ebf906f98b6a7ceb35bc081f8c52b2

  Message:
    wal: support applying array

  Modified files:
    src/pgrn_wal.c

  Modified: src/pgrn_wal.c (+83 -1)
===================================================================
--- src/pgrn_wal.c    2016-10-29 17:08:17 +0900 (621c324)
+++ src/pgrn_wal.c    2016-10-29 17:08:22 +0900 (84e5e7e)
@@ -962,6 +962,84 @@ PGrnWALApplyValueGetGroongaObjectIDs(const char *context,
 }
 
 static void
+PGrnWALApplyInsertArray(PGrnWALApplyData *data,
+						msgpack_object_array *array,
+						grn_obj *value,
+						grn_id range_id)
+{
+	const char *context = "insert: array";
+	uint32_t i;
+
+	grn_obj_reinit(ctx, value, range_id, GRN_OBJ_VECTOR);
+	for (i = 0; i < array->size; i++)
+	{
+		msgpack_object *element;
+
+		element = &(array->ptr[i]);
+		switch (element->type)
+		{
+		case MSGPACK_OBJECT_BOOLEAN:
+			GRN_BOOL_PUT(ctx, value, element->via.boolean);
+			break;
+		case MSGPACK_OBJECT_POSITIVE_INTEGER:
+		case MSGPACK_OBJECT_NEGATIVE_INTEGER:
+#define ELEMENT_VALUE											\
+			(element->type == MSGPACK_OBJECT_POSITIVE_INTEGER ? \
+			 element->via.u64 :									\
+			 element->via.i64)
+			switch (range_id)
+			{
+			case GRN_DB_INT8:
+				GRN_INT8_PUT(ctx, value, ELEMENT_VALUE);
+				break;
+			case GRN_DB_UINT8:
+				GRN_UINT8_PUT(ctx, value, ELEMENT_VALUE);
+				break;
+			case GRN_DB_INT16:
+				GRN_INT16_PUT(ctx, value, ELEMENT_VALUE);
+				break;
+			case GRN_DB_UINT16:
+				GRN_UINT16_PUT(ctx, value, ELEMENT_VALUE);
+				break;
+			case GRN_DB_INT32:
+				GRN_INT32_PUT(ctx, value, ELEMENT_VALUE);
+				break;
+			case GRN_DB_UINT32:
+				GRN_UINT32_PUT(ctx, value, ELEMENT_VALUE);
+				break;
+			case GRN_DB_INT64:
+				GRN_INT64_PUT(ctx, value, ELEMENT_VALUE);
+				break;
+			case GRN_DB_UINT64:
+				GRN_UINT64_PUT(ctx, value, ELEMENT_VALUE);
+				break;
+			}
+			break;
+#undef ELEMENT_VALUE
+		case MSGPACK_OBJECT_FLOAT:
+			GRN_FLOAT_PUT(ctx, value, element->via.f64);
+			break;
+		case MSGPACK_OBJECT_STR:
+			grn_vector_add_element(ctx,
+								   value,
+								   element->via.str.ptr,
+								   element->via.str.size,
+								   0,
+								   range_id);
+			break;
+		default:
+			ereport(ERROR,
+					(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("pgroonga: WAL: apply: %s: "
+							"unexpected element type: <%#x>",
+							context,
+							element->type)));
+			break;
+		}
+	}
+}
+
+static void
 PGrnWALApplyInsert(PGrnWALApplyData *data,
 				   msgpack_object_map *map,
 				   uint32_t currentElement)
@@ -1063,9 +1141,13 @@ PGrnWALApplyInsert(PGrnWALApplyData *data,
 						 value->via.str.ptr,
 						 value->via.str.size);
 			break;
-/*
 		case MSGPACK_OBJECT_ARRAY:
+			PGrnWALApplyInsertArray(data,
+									&(value->via.array),
+									walValue,
+									grn_obj_get_range(ctx, column));
 			break;
+/*
 		case MSGPACK_OBJECT_MAP:
 			break;
 		case MSGPACK_OBJECT_BIN:
-------------- next part --------------
HTML����������������������������...
Download 



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