null+****@clear*****
null+****@clear*****
2010年 8月 25日 (水) 13:35:00 JST
Daijiro MORI 2010-08-25 04:35:00 +0000 (Wed, 25 Aug 2010) New Revision: c53c01ad4335930dd314f54b6eb228cdd1c16906 Log: GRN_OBJ_RING_BUFFER appeared. Modified files: groonga.h lib/proc.c lib/ql.c lib/store.c lib/util.c Modified: groonga.h (+1 -1) =================================================================== --- groonga.h 2010-08-25 04:20:17 +0000 (6373c5b) +++ groonga.h 2010-08-25 04:35:00 +0000 (3ad040f) @@ -274,7 +274,7 @@ typedef unsigned short int grn_obj_flags; #define GRN_OBJ_WITH_SECTION (0x01<<7) #define GRN_OBJ_WITH_WEIGHT (0x01<<8) #define GRN_OBJ_WITH_POSITION (0x01<<9) -#define GRN_OBJ_WITH_BUFFER (0x01<<10) +#define GRN_OBJ_RING_BUFFER (0x01<<10) #define GRN_OBJ_UNIT_MASK (0x0f<<8) #define GRN_OBJ_UNIT_DOCUMENT_NONE (0x00<<8) Modified: lib/proc.c (+3 -0) =================================================================== --- lib/proc.c 2010-08-25 04:20:17 +0000 (cd0c718) +++ lib/proc.c 2010-08-25 04:35:00 +0000 (66d04f9) @@ -467,6 +467,9 @@ grn_parse_column_create_flags(grn_ctx *ctx, const char *nptr, const char *end) } else if (!memcmp(nptr, "WITH_POSITION", 13)) { flags |= GRN_OBJ_WITH_POSITION; nptr += 13; + } else if (!memcmp(nptr, "RING_BUFFER", 11)) { + flags |= GRN_OBJ_RING_BUFFER; + nptr += 11; } else { ERR(GRN_INVALID_ARGUMENT, "invalid flags option: %.*s", end - nptr, nptr); return 0; Modified: lib/ql.c (+1 -1) =================================================================== --- lib/ql.c 2010-08-25 04:20:17 +0000 (43b0caf) +++ lib/ql.c 2010-08-25 04:35:00 +0000 (fe4cd24) @@ -1196,7 +1196,7 @@ ha_table(grn_ctx *ctx, grn_cell *args, grn_ql_co *co) switch (*msg) { case 'b' : case 'B' : - flags |= GRN_OBJ_WITH_BUFFER; + flags |= GRN_OBJ_RING_BUFFER; break; case 'i' : case 'I' : Modified: lib/store.c (+4 -4) =================================================================== --- lib/store.c 2010-08-25 04:20:17 +0000 (42964a2) +++ lib/store.c 2010-08-25 04:35:00 +0000 (1e0dfb5) @@ -678,7 +678,7 @@ set_value(grn_ctx *ctx, grn_ja *ja, grn_id id, void *value, uint32_t value_len, { grn_rc rc = GRN_SUCCESS; grn_io_win iw; - if ((ja->header->flags & GRN_OBJ_WITH_BUFFER) && + if ((ja->header->flags & GRN_OBJ_RING_BUFFER) && value_len >= ja->header->max_element_size) { if ((rc = grn_ja_alloc(ctx, ja, id, value_len + sizeof(uint32_t), einfo, &iw))) { return rc; @@ -709,7 +709,7 @@ grn_ja_put_raw(grn_ctx *ctx, grn_ja *ja, grn_id id, uint32_t old_len; void *oldvalue = grn_ja_ref(ctx, ja, id, &jw, &old_len); if (oldvalue) { - if ((ja->header->flags & GRN_OBJ_WITH_BUFFER) && + if ((ja->header->flags & GRN_OBJ_RING_BUFFER) && old_len + value_len >= ja->header->max_element_size) { if (old_len >= ja->header->max_element_size) { byte *b = oldvalue; @@ -758,7 +758,7 @@ grn_ja_put_raw(grn_ctx *ctx, grn_ja *ja, grn_id id, uint32_t old_len; void *oldvalue = grn_ja_ref(ctx, ja, id, &jw, &old_len); if (oldvalue) { - if ((ja->header->flags & GRN_OBJ_WITH_BUFFER) && + if ((ja->header->flags & GRN_OBJ_RING_BUFFER) && old_len + value_len >= ja->header->max_element_size) { if (old_len >= ja->header->max_element_size) { byte *b = oldvalue; @@ -1072,7 +1072,7 @@ grn_ja_get_value(grn_ctx *ctx, grn_ja *ja, grn_id id, grn_obj *value) } } if ((v = grn_ja_ref(ctx, ja, id, &iw, &len))) { - if ((ja->header->flags & GRN_OBJ_WITH_BUFFER) && + if ((ja->header->flags & GRN_OBJ_RING_BUFFER) && len > ja->header->max_element_size) { byte *b = v; uint32_t el = len - sizeof(uint32_t); Modified: lib/util.c (+4 -0) =================================================================== --- lib/util.c 2010-08-25 04:20:17 +0000 (a1947db) +++ lib/util.c 2010-08-25 04:35:00 +0000 (92dc27d) @@ -216,6 +216,10 @@ grn_store_inspect_body(grn_ctx *ctx, grn_obj *buf, grn_obj *obj) break; } + if (obj->header.flags & GRN_OBJ_RING_BUFFER) { + GRN_TEXT_PUTS(ctx, buf, " ring_buffer:true"); + } + return GRN_SUCCESS; }