susumu.yata
null+****@clear*****
Fri Jul 24 15:48:53 JST 2015
susumu.yata 2015-07-24 15:48:53 +0900 (Fri, 24 Jul 2015) New Revision: 73413ac1ab77fdb590ddd49a0c7179367e4e4dc9 https://github.com/groonga/grngo/commit/73413ac1ab77fdb590ddd49a0c7179367e4e4dc9 Message: Update GetValue() to support (Short/Long)Text. Modified files: grngo.c grngo.go grngo_test.go Modified: grngo.c (+33 -6) =================================================================== --- grngo.c 2015-07-24 14:29:23 +0900 (4025068) +++ grngo.c 2015-07-24 15:48:53 +0900 (c98c587) @@ -1098,14 +1098,41 @@ grngo_get(grngo_column *column, grn_id id, void **value) { n_ids = grn_vector_size(ctx, column->src_bufs[i]); } GRN_BULK_REWIND(column->src_bufs[i]); - for (j = 0; j < n_ids; j++) { - // TODO: Vector and Text. - grn_obj_get_value(ctx, column->srcs[i], ids[j], column->src_bufs[i]); - if (ctx->rc != GRN_SUCCESS) { - return ctx->rc; + // TODO: Vector. + if (column->text_buf) { + GRN_BULK_REWIND(column->text_buf); + size_t offset = 0; + for (j = 0; j < n_ids; j++) { + grn_obj_get_value(ctx, column->srcs[i], ids[j], column->src_bufs[i]); + if (ctx->rc != GRN_SUCCESS) { + return ctx->rc; + } + size_t size = GRN_BULK_VSIZE(column->src_bufs[i]); + grngo_text text = { NULL, size - offset }; + grn_rc rc = grn_bulk_write(ctx, column->text_buf, + (char *)&text, sizeof(text)); + if (rc != GRN_SUCCESS) { + return rc; + } + offset = size; + } + char *ptr = GRN_BULK_HEAD(column->src_bufs[i]); + grngo_text *texts = (grngo_text *)GRN_BULK_HEAD(column->text_buf); + for (j = 0; j < n_ids; j++) { + texts[j].ptr = ptr; + ptr += texts[j].size; + } + *value = texts; + } else { + for (j = 0; j < n_ids; j++) { + // TODO: Vector and Text. + grn_obj_get_value(ctx, column->srcs[i], ids[j], column->src_bufs[i]); + if (ctx->rc != GRN_SUCCESS) { + return ctx->rc; + } } + *value = GRN_BULK_HEAD(column->src_bufs[i]); } - *value = GRN_BULK_HEAD(column->src_bufs[i]); return GRN_SUCCESS; } Modified: grngo.go (+3 -4) =================================================================== --- grngo.go 2015-07-24 14:29:23 +0900 (8804997) +++ grngo.go 2015-07-24 15:48:53 +0900 (a5936b4) @@ -1045,10 +1045,6 @@ func (column *Column) GetValue(id uint32) (interface{}, error) { if column.c.dimension != 0 { return nil, fmt.Errorf("Vector is not supported yet") } - switch column.c.value_type { - case C.GRN_DB_SHORT_TEXT, C.GRN_DB_TEXT, C.GRN_DB_LONG_TEXT: - return nil, fmt.Errorf("Text is not supported yet") - } var ptr unsafe.Pointer rc := C.grngo_get(column.c, C.grn_id(id), &ptr) if rc != C.GRN_SUCCESS { @@ -1078,6 +1074,9 @@ func (column *Column) GetValue(id uint32) (interface{}, error) { return float64(*(*C.double)(ptr)), nil case C.GRN_DB_TIME: return int64(*(*C.int64_t)(ptr)), nil + case C.GRN_DB_SHORT_TEXT, C.GRN_DB_TEXT, C.GRN_DB_LONG_TEXT: + cValue := *(*C.grngo_text)(ptr) + return C.GoBytes(unsafe.Pointer(cValue.ptr), C.int(cValue.size)), nil case C.GRN_DB_TOKYO_GEO_POINT, C.GRN_DB_WGS84_GEO_POINT: cValue := *(*C.grn_geo_point)(ptr) return GeoPoint{int32(cValue.latitude), int32(cValue.longitude)}, nil Modified: grngo_test.go (+9 -9) =================================================================== --- grngo_test.go 2015-07-24 14:29:23 +0900 (3ccd6f5) +++ grngo_test.go 2015-07-24 15:48:53 +0900 (42e0196) @@ -1109,17 +1109,17 @@ func TestColumnGetValueForTime(t *testing.T) { testColumnGetValue(t, "Time") } -//func TestColumnGetValueForShortText(t *testing.T) { -// testColumnGetValue(t, "ShortText") -//} +func TestColumnGetValueForShortText(t *testing.T) { + testColumnGetValue(t, "ShortText") +} -//func TestColumnGetValueForText(t *testing.T) { -// testColumnGetValue(t, "Text") -//} +func TestColumnGetValueForText(t *testing.T) { + testColumnGetValue(t, "Text") +} -//func TestColumnGetValueForLongText(t *testing.T) { -// testColumnGetValue(t, "LongText") -//} +func TestColumnGetValueForLongText(t *testing.T) { + testColumnGetValue(t, "LongText") +} func TestColumnGetValueForTokyoGeoPoint(t *testing.T) { testColumnGetValue(t, "TokyoGeoPoint") -------------- next part -------------- HTML����������������������������...Download