Kouhei Sutou
null+****@clear*****
Sat Oct 29 16:41:02 JST 2016
Kouhei Sutou 2016-10-29 16:41:02 +0900 (Sat, 29 Oct 2016) New Revision: 1a2076ee26e7eeef6864ab155d841c002cfff53e https://github.com/pgroonga/pgroonga/commit/1a2076ee26e7eeef6864ab155d841c002cfff53e Message: wal: unify common code Modified files: src/pgrn_wal.c Modified: src/pgrn_wal.c (+33 -87) =================================================================== --- src/pgrn_wal.c 2016-10-29 16:39:41 +0900 (df35368) +++ src/pgrn_wal.c 2016-10-29 16:41:02 +0900 (ecd97bc) @@ -441,18 +441,20 @@ PGrnWALInsertColumnFinish(PGrnWALData *data) #ifdef PGRN_SUPPORT_WAL static void -PGrnWALInsertColumnValueBulk(PGrnWALData *data, - const char *name, - grn_obj *value) +PGrnWALInsertColumnValueRaw(PGrnWALData *data, + const char *name, + grn_id domain, + const char *value, + size_t valueSize) { msgpack_packer *packer; packer = &(data->packer); - switch (value->header.domain) + switch (domain) { case GRN_DB_BOOL: - if (GRN_BOOL_VALUE(value)) + if (*((grn_bool *)value)) { msgpack_pack_true(packer); } @@ -462,42 +464,40 @@ PGrnWALInsertColumnValueBulk(PGrnWALData *data, } break; case GRN_DB_INT8: - msgpack_pack_int8(packer, GRN_INT8_VALUE(value)); + msgpack_pack_int8(packer, *((int8_t *)(value))); break; case GRN_DB_UINT8: - msgpack_pack_uint8(packer, GRN_UINT8_VALUE(value)); + msgpack_pack_uint8(packer, *((uint8_t *)(value))); break; case GRN_DB_INT16: - msgpack_pack_int16(packer, GRN_INT16_VALUE(value)); + msgpack_pack_int16(packer, *((int16_t *)(value))); break; case GRN_DB_UINT16: - msgpack_pack_uint16(packer, GRN_UINT16_VALUE(value)); + msgpack_pack_uint16(packer, *((uint16_t *)(value))); break; case GRN_DB_INT32: - msgpack_pack_int32(packer, GRN_INT32_VALUE(value)); + msgpack_pack_int32(packer, *((int32_t *)(value))); break; case GRN_DB_UINT32: - msgpack_pack_uint32(packer, GRN_UINT32_VALUE(value)); + msgpack_pack_uint32(packer, *((uint32_t *)(value))); break; case GRN_DB_INT64: - msgpack_pack_int64(packer, GRN_INT64_VALUE(value)); + msgpack_pack_int64(packer, *((int64_t *)(value))); break; case GRN_DB_UINT64: - msgpack_pack_uint64(packer, GRN_UINT64_VALUE(value)); + msgpack_pack_uint64(packer, *((uint64_t *)(value))); break; case GRN_DB_FLOAT: - msgpack_pack_double(packer, GRN_FLOAT_VALUE(value)); + msgpack_pack_double(packer, *((float_t *)(value))); break; case GRN_DB_TIME: - msgpack_pack_int64(packer, GRN_TIME_VALUE(value)); + msgpack_pack_int64(packer, *((int64_t *)(value))); break; case GRN_DB_SHORT_TEXT: case GRN_DB_TEXT: case GRN_DB_LONG_TEXT: - msgpack_pack_str(packer, GRN_TEXT_LEN(value)); - msgpack_pack_str_body(packer, - GRN_TEXT_VALUE(value), - GRN_TEXT_LEN(value)); + msgpack_pack_str(packer, valueSize); + msgpack_pack_str_body(packer, value, valueSize); break; default: { @@ -506,7 +506,7 @@ PGrnWALInsertColumnValueBulk(PGrnWALData *data, domainNameSize = grn_table_get_key(ctx, grn_ctx_db(ctx), - value->header.domain, + domain, domainName, GRN_TABLE_MAX_KEY_SIZE); ereport(ERROR, @@ -521,6 +521,18 @@ PGrnWALInsertColumnValueBulk(PGrnWALData *data, } static void +PGrnWALInsertColumnValueBulk(PGrnWALData *data, + const char *name, + grn_obj *value) +{ + PGrnWALInsertColumnValueRaw(data, + name, + value->header.domain, + GRN_BULK_HEAD(value), + GRN_BULK_VSIZE(value)); +} + +static void PGrnWALInsertColumnValueVector(PGrnWALData *data, const char *name, grn_obj *value) @@ -544,73 +556,7 @@ PGrnWALInsertColumnValueVector(PGrnWALData *data, &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; - } + PGrnWALInsertColumnValueBraw(data, name, domain, element, elementSize); } } #endif -------------- next part -------------- HTML����������������������������... Download