[Groonga-commit] pgroonga/pgroonga at 76827a8 [master] wal: support writing array

Back to archive index

Kouhei Sutou null+****@clear*****
Sat Oct 29 01:33:24 JST 2016


Kouhei Sutou	2016-10-29 01:33:24 +0900 (Sat, 29 Oct 2016)

  New Revision: 76827a814871edeef51c0a38aba738be82641263
  https://github.com/pgroonga/pgroonga/commit/76827a814871edeef51c0a38aba738be82641263

  Message:
    wal: support writing array

  Modified files:
    src/pgrn_wal.c

  Modified: src/pgrn_wal.c (+109 -10)
===================================================================
--- src/pgrn_wal.c    2016-10-29 01:16:40 +0900 (8bd28fc)
+++ src/pgrn_wal.c    2016-10-29 01:33:24 +0900 (7f3f2b5)
@@ -501,22 +501,118 @@ PGrnWALInsertColumnValueBulk(PGrnWALData *data,
 		break;
 	default:
 		{
-			char name[GRN_TABLE_MAX_KEY_SIZE];
-			int nameSize;
-
-			nameSize = grn_table_get_key(ctx,
-										 grn_ctx_db(ctx),
-										 value->header.domain,
-										 name,
-										 GRN_TABLE_MAX_KEY_SIZE);
+			char domainName[GRN_TABLE_MAX_KEY_SIZE];
+			int domainNameSize;
+
+			domainNameSize = grn_table_get_key(ctx,
+											   grn_ctx_db(ctx),
+											   value->header.domain,
+											   domainName,
+											   GRN_TABLE_MAX_KEY_SIZE);
 			ereport(ERROR,
 					(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-					 errmsg("pgroonga: WAL: unsupported type: <%.*s>",
-							nameSize, name)));
+					 errmsg("pgroonga: WAL: insert: unsupported type: "
+							"<%s>: <%.*s>",
+							name,
+							domainNameSize, domainName)));
 		}
 		break;
 	}
 }
+
+static void
+PGrnWALInsertColumnValueVector(PGrnWALData *data,
+							   const char *name,
+							   grn_obj *value)
+{
+	msgpack_packer *packer;
+	unsigned int i, n;
+
+	packer = &(data->packer);
+
+	n = grn_vector_size(ctx, value);
+	msgpack_pack_array(packer, n);
+	for (i = 0; i < n; i++)
+	{
+		const char *element;
+		unsigned int elementSize;
+		grn_id domain;
+
+		elementSize = grn_vector_get_element(ctx,
+											 value,
+											 i,
+											 &element,
+											 NULL,
+											 &domain);
+		switch (domain)
+		{
+		case GRN_DB_BOOL:
+			if (*((grn_bool *)element))
+			{
+				msgpack_pack_true(packer);
+			}
+			else
+			{
+				msgpack_pack_false(packer);
+			}
+			break;
+		case GRN_DB_INT8:
+			msgpack_pack_int8(packer, *((int8_t *)element));
+			break;
+		case GRN_DB_UINT8:
+			msgpack_pack_uint8(packer, *((uint8_t *)element));
+			break;
+		case GRN_DB_INT16:
+			msgpack_pack_int16(packer, *((int16_t *)element));
+			break;
+		case GRN_DB_UINT16:
+			msgpack_pack_uint16(packer, *((uint16_t *)element));
+			break;
+		case GRN_DB_INT32:
+			msgpack_pack_int32(packer, *((int32_t *)element));
+			break;
+		case GRN_DB_UINT32:
+			msgpack_pack_uint32(packer, *((uint32_t *)element));
+			break;
+		case GRN_DB_INT64:
+			msgpack_pack_int64(packer, *((int64_t *)element));
+			break;
+		case GRN_DB_UINT64:
+			msgpack_pack_uint64(packer, *((uint64_t *)element));
+			break;
+		case GRN_DB_FLOAT:
+			msgpack_pack_double(packer, *((double *)element));
+			break;
+		case GRN_DB_TIME:
+			msgpack_pack_int64(packer, *((int64_t *)element));
+			break;
+		case GRN_DB_SHORT_TEXT:
+		case GRN_DB_TEXT:
+		case GRN_DB_LONG_TEXT:
+			msgpack_pack_str(packer, elementSize);
+			msgpack_pack_str_body(packer, element, elementSize);
+			break;
+		default:
+			{
+				char domainName[GRN_TABLE_MAX_KEY_SIZE];
+				int domainNameSize;
+
+				domainNameSize = grn_table_get_key(ctx,
+												   grn_ctx_db(ctx),
+												   domain,
+												   domainName,
+												   GRN_TABLE_MAX_KEY_SIZE);
+				ereport(ERROR,
+						(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+						 errmsg("pgroonga: WAL: insert: array: "
+								"unsupported type: <%s>: <%.*s>",
+								name,
+								domainNameSize, domainName)));
+			}
+			break;
+		}
+	}
+}
 #endif
 
 void
@@ -535,6 +631,9 @@ PGrnWALInsertColumn(PGrnWALData *data,
 	case GRN_BULK:
 		PGrnWALInsertColumnValueBulk(data, name, value);
 		break;
+	case GRN_VECTOR:
+		PGrnWALInsertColumnValueVector(data, name, value);
+		break;
 	default:
 		ereport(ERROR,
 				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-------------- next part --------------
HTML����������������������������...
Download 



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