susumu.yata
null+****@clear*****
Thu Jul 2 16:33:23 JST 2015
susumu.yata 2015-07-02 16:33:23 +0900 (Thu, 02 Jul 2015) New Revision: 1facf4bebb05b7669decc77fb30f15d34eea94c3 https://github.com/groonga/grngo/commit/1facf4bebb05b7669decc77fb30f15d34eea94c3 Message: Change the order of data types. Put *GeoPointer next to *Text. Modified files: grngo.c grngo.go grngo.h grngo_test.go Modified: grngo.c (+59 -59) =================================================================== --- grngo.c 2015-07-02 16:19:04 +0900 (36df50c) +++ grngo.c 2015-07-02 16:33:23 +0900 (b182d6d) @@ -231,16 +231,16 @@ grngo_row_info grngo_table_insert_float(grn_ctx *ctx, grn_obj *table, return grngo_table_insert_row(ctx, table, &key, sizeof(key)); } -grngo_row_info grngo_table_insert_geo_point(grn_ctx *ctx, grn_obj *table, - grn_geo_point key) { - return grngo_table_insert_row(ctx, table, &key, sizeof(key)); -} - grngo_row_info grngo_table_insert_text(grn_ctx *ctx, grn_obj *table, const grngo_text *key) { return grngo_table_insert_row(ctx, table, key->ptr, key->size); } +grngo_row_info grngo_table_insert_geo_point(grn_ctx *ctx, grn_obj *table, + grn_geo_point key) { + return grngo_table_insert_row(ctx, table, &key, sizeof(key)); +} + grn_bool grngo_column_set_bool(grn_ctx *ctx, grn_obj *column, grn_id id, grn_bool value) { grn_obj obj; @@ -351,30 +351,30 @@ grn_bool grngo_column_set_float(grn_ctx *ctx, grn_obj *column, return rc == GRN_SUCCESS; } -grn_bool grngo_column_set_geo_point(grn_ctx *ctx, grn_obj *column, - grn_builtin_type data_type, - grn_id id, grn_geo_point value) { +grn_bool grngo_column_set_text(grn_ctx *ctx, grn_obj *column, + grn_id id, const grngo_text *value) { grn_obj obj; - if (data_type == GRN_DB_TOKYO_GEO_POINT) { - GRN_TOKYO_GEO_POINT_INIT(&obj, 0); + GRN_TEXT_INIT(&obj, 0); + if (value) { + GRN_TEXT_SET(ctx, &obj, value->ptr, value->size); } else { - GRN_WGS84_GEO_POINT_INIT(&obj, 0); + GRN_TEXT_SET(ctx, &obj, NULL, 0); } - GRN_GEO_POINT_SET(ctx, &obj, value.latitude, value.longitude); grn_rc rc = grn_obj_set_value(ctx, column, id, &obj, GRN_OBJ_SET); GRN_OBJ_FIN(ctx, &obj); return rc == GRN_SUCCESS; } -grn_bool grngo_column_set_text(grn_ctx *ctx, grn_obj *column, - grn_id id, const grngo_text *value) { +grn_bool grngo_column_set_geo_point(grn_ctx *ctx, grn_obj *column, + grn_builtin_type data_type, + grn_id id, grn_geo_point value) { grn_obj obj; - GRN_TEXT_INIT(&obj, 0); - if (value) { - GRN_TEXT_SET(ctx, &obj, value->ptr, value->size); + if (data_type == GRN_DB_TOKYO_GEO_POINT) { + GRN_TOKYO_GEO_POINT_INIT(&obj, 0); } else { - GRN_TEXT_SET(ctx, &obj, NULL, 0); + GRN_WGS84_GEO_POINT_INIT(&obj, 0); } + GRN_GEO_POINT_SET(ctx, &obj, value.latitude, value.longitude); grn_rc rc = grn_obj_set_value(ctx, column, id, &obj, GRN_OBJ_SET); GRN_OBJ_FIN(ctx, &obj); return rc == GRN_SUCCESS; @@ -534,6 +534,22 @@ grn_bool grngo_column_set_float_vector(grn_ctx *ctx, grn_obj *column, return rc == GRN_SUCCESS; } +grn_bool grngo_column_set_text_vector(grn_ctx *ctx, grn_obj *column, + grn_id id, + const grngo_vector *value) { + grn_obj obj; + GRN_TEXT_INIT(&obj, GRN_OBJ_VECTOR); + size_t i; + const grngo_text *values = (const grngo_text *)value->ptr; + for (i = 0; i < value->size; i++) { + grn_vector_add_element(ctx, &obj, values[i].ptr, values[i].size, + 0, obj.header.domain); + } + grn_rc rc = grn_obj_set_value(ctx, column, id, &obj, GRN_OBJ_SET); + GRN_OBJ_FIN(ctx, &obj); + return rc == GRN_SUCCESS; +} + grn_bool grngo_column_set_geo_point_vector(grn_ctx *ctx, grn_obj *column, grn_builtin_type data_type, grn_id id, @@ -554,22 +570,6 @@ grn_bool grngo_column_set_geo_point_vector(grn_ctx *ctx, grn_obj *column, return rc == GRN_SUCCESS; } -grn_bool grngo_column_set_text_vector(grn_ctx *ctx, grn_obj *column, - grn_id id, - const grngo_vector *value) { - grn_obj obj; - GRN_TEXT_INIT(&obj, GRN_OBJ_VECTOR); - size_t i; - const grngo_text *values = (const grngo_text *)value->ptr; - for (i = 0; i < value->size; i++) { - grn_vector_add_element(ctx, &obj, values[i].ptr, values[i].size, - 0, obj.header.domain); - } - grn_rc rc = grn_obj_set_value(ctx, column, id, &obj, GRN_OBJ_SET); - GRN_OBJ_FIN(ctx, &obj); - return rc == GRN_SUCCESS; -} - grn_bool grngo_column_get_bool(grn_ctx *ctx, grn_obj *column, grn_id id, grn_bool *value) { grn_obj value_obj; @@ -654,16 +654,6 @@ grn_bool grngo_column_get_float(grn_ctx *ctx, grn_obj *column, return GRN_TRUE; } -grn_bool grngo_column_get_geo_point(grn_ctx *ctx, grn_obj *column, - grn_id id, grn_geo_point *value) { - grn_obj value_obj; - GRN_WGS84_GEO_POINT_INIT(&value_obj, 0); - grn_obj_get_value(ctx, column, id, &value_obj); - GRN_GEO_POINT_VALUE(&value_obj, value->latitude, value->longitude); - GRN_OBJ_FIN(ctx, &value_obj); - return GRN_TRUE; -} - grn_bool grngo_column_get_text(grn_ctx *ctx, grn_obj *column, grn_id id, grngo_text *value) { grn_obj value_obj; @@ -678,6 +668,16 @@ grn_bool grngo_column_get_text(grn_ctx *ctx, grn_obj *column, return GRN_TRUE; } +grn_bool grngo_column_get_geo_point(grn_ctx *ctx, grn_obj *column, + grn_id id, grn_geo_point *value) { + grn_obj value_obj; + GRN_WGS84_GEO_POINT_INIT(&value_obj, 0); + grn_obj_get_value(ctx, column, id, &value_obj); + GRN_GEO_POINT_VALUE(&value_obj, value->latitude, value->longitude); + GRN_OBJ_FIN(ctx, &value_obj); + return GRN_TRUE; +} + grn_bool grngo_column_get_bool_vector(grn_ctx *ctx, grn_obj *column, grn_id id, grngo_vector *value) { grn_obj value_obj; @@ -844,21 +844,6 @@ grn_bool grngo_column_get_float_vector(grn_ctx *ctx, grn_obj *column, return GRN_TRUE; } -grn_bool grngo_column_get_geo_point_vector(grn_ctx *ctx, grn_obj *column, - grn_id id, grngo_vector *value) { - grn_obj value_obj; - GRN_WGS84_GEO_POINT_INIT(&value_obj, GRN_OBJ_VECTOR); - grn_obj_get_value(ctx, column, id, &value_obj); - size_t size_in_bytes = GRN_BULK_VSIZE(&value_obj); - size_t size = size_in_bytes / sizeof(grn_geo_point); - if (size <= value->size) { - memcpy(value->ptr, GRN_BULK_HEAD(&value_obj), size_in_bytes); - } - value->size = size; - GRN_OBJ_FIN(ctx, &value_obj); - return GRN_TRUE; -} - grn_bool grngo_column_get_text_vector(grn_ctx *ctx, grn_obj *column, grn_id id, grngo_vector *value) { grn_obj value_obj; @@ -884,3 +869,18 @@ grn_bool grngo_column_get_text_vector(grn_ctx *ctx, grn_obj *column, GRN_OBJ_FIN(ctx, &value_obj); return GRN_TRUE; } + +grn_bool grngo_column_get_geo_point_vector(grn_ctx *ctx, grn_obj *column, + grn_id id, grngo_vector *value) { + grn_obj value_obj; + GRN_WGS84_GEO_POINT_INIT(&value_obj, GRN_OBJ_VECTOR); + grn_obj_get_value(ctx, column, id, &value_obj); + size_t size_in_bytes = GRN_BULK_VSIZE(&value_obj); + size_t size = size_in_bytes / sizeof(grn_geo_point); + if (size <= value->size) { + memcpy(value->ptr, GRN_BULK_HEAD(&value_obj), size_in_bytes); + } + value->size = size; + GRN_OBJ_FIN(ctx, &value_obj); + return GRN_TRUE; +} Modified: grngo.go (+92 -92) =================================================================== --- grngo.go 2015-07-02 16:19:04 +0900 (ea3494a) +++ grngo.go 2015-07-02 16:33:23 +0900 (3ba9cfd) @@ -749,21 +749,6 @@ func (table *Table) insertFloat(key float64) (bool, uint32, error) { return rowInfo.inserted == C.GRN_TRUE, uint32(rowInfo.id), nil } -// insertGeoPoint inserts a row with GeoPoint key. -func (table *Table) insertGeoPoint(key GeoPoint) (bool, uint32, error) { - switch table.keyType { - case TokyoGeoPoint, WGS84GeoPoint: - default: - return false, NilID, newInvalidKeyTypeError(table.keyType, LazyGeoPoint) - } - grnKey := C.grn_geo_point{C.int(key.Latitude), C.int(key.Longitude)} - rowInfo := C.grngo_table_insert_geo_point(table.db.ctx, table.obj, grnKey) - if rowInfo.id == C.GRN_ID_NIL { - return false, NilID, fmt.Errorf("grngo_table_insert_geo_point() failed") - } - return rowInfo.inserted == C.GRN_TRUE, uint32(rowInfo.id), nil -} - // insertText inserts a row with Text key. func (table *Table) insertText(key []byte) (bool, uint32, error) { if table.keyType != ShortText { @@ -781,6 +766,21 @@ func (table *Table) insertText(key []byte) (bool, uint32, error) { return rowInfo.inserted == C.GRN_TRUE, uint32(rowInfo.id), nil } +// insertGeoPoint inserts a row with GeoPoint key. +func (table *Table) insertGeoPoint(key GeoPoint) (bool, uint32, error) { + switch table.keyType { + case TokyoGeoPoint, WGS84GeoPoint: + default: + return false, NilID, newInvalidKeyTypeError(table.keyType, LazyGeoPoint) + } + grnKey := C.grn_geo_point{C.int(key.Latitude), C.int(key.Longitude)} + rowInfo := C.grngo_table_insert_geo_point(table.db.ctx, table.obj, grnKey) + if rowInfo.id == C.GRN_ID_NIL { + return false, NilID, fmt.Errorf("grngo_table_insert_geo_point() failed") + } + return rowInfo.inserted == C.GRN_TRUE, uint32(rowInfo.id), nil +} + // InsertRow finds or inserts a row. func (table *Table) InsertRow(key interface{}) (inserted bool, id uint32, err error) { switch value := key.(type) { @@ -792,10 +792,10 @@ func (table *Table) InsertRow(key interface{}) (inserted bool, id uint32, err er return table.insertInt(value) case float64: return table.insertFloat(value) - case GeoPoint: - return table.insertGeoPoint(value) case []byte: return table.insertText(value) + case GeoPoint: + return table.insertGeoPoint(value) default: return false, NilID, fmt.Errorf( "unsupported key type: typeName = <%s>", reflect.TypeOf(key).Name()) @@ -1089,25 +1089,6 @@ func (column *Column) setFloat(id uint32, value float64) error { return nil } -// setGeoPoint assigns a GeoPoint value. -func (column *Column) setGeoPoint(id uint32, value GeoPoint) error { - switch column.valueType { - case TokyoGeoPoint, WGS84GeoPoint: - default: - return newInvalidValueTypeError(column.valueType, column.isVector, LazyGeoPoint, false) - } - if column.isVector { - return fmt.Errorf("value type conflict") - } - grnValue := C.grn_geo_point{C.int(value.Latitude), C.int(value.Longitude)} - if ok := C.grngo_column_set_geo_point(column.table.db.ctx, column.obj, - C.grn_builtin_type(column.valueType), - C.grn_id(id), grnValue); ok != C.GRN_TRUE { - return fmt.Errorf("grngo_column_set_geo_point() failed") - } - return nil -} - // setText assigns a Text value. func (column *Column) setText(id uint32, value []byte) error { switch column.valueType { @@ -1130,6 +1111,25 @@ func (column *Column) setText(id uint32, value []byte) error { return nil } +// setGeoPoint assigns a GeoPoint value. +func (column *Column) setGeoPoint(id uint32, value GeoPoint) error { + switch column.valueType { + case TokyoGeoPoint, WGS84GeoPoint: + default: + return newInvalidValueTypeError(column.valueType, column.isVector, LazyGeoPoint, false) + } + if column.isVector { + return fmt.Errorf("value type conflict") + } + grnValue := C.grn_geo_point{C.int(value.Latitude), C.int(value.Longitude)} + if ok := C.grngo_column_set_geo_point(column.table.db.ctx, column.obj, + C.grn_builtin_type(column.valueType), + C.grn_id(id), grnValue); ok != C.GRN_TRUE { + return fmt.Errorf("grngo_column_set_geo_point() failed") + } + return nil +} + // setBoolVector assigns a Bool vector. func (column *Column) setBoolVector(id uint32, value []bool) error { if (column.valueType != Bool) || !column.isVector { @@ -1211,29 +1211,6 @@ func (column *Column) setFloatVector(id uint32, value []float64) error { return nil } -// setGeoPointVector assigns a GeoPoint vector. -func (column *Column) setGeoPointVector(id uint32, value []GeoPoint) error { - if !column.isVector { - return newInvalidValueTypeError(column.valueType, column.isVector, LazyGeoPoint, true) - } - switch column.valueType { - case TokyoGeoPoint, WGS84GeoPoint: - default: - return newInvalidValueTypeError(column.valueType, column.isVector, LazyGeoPoint, true) - } - var grnVector C.grngo_vector - if len(value) != 0 { - grnVector.ptr = unsafe.Pointer(&value[0]) - grnVector.size = C.size_t(len(value)) - } - if ok := C.grngo_column_set_geo_point_vector(column.table.db.ctx, - column.obj, C.grn_builtin_type(column.valueType), - C.grn_id(id), &grnVector); ok != C.GRN_TRUE { - return fmt.Errorf("grngo_column_set_geo_point_vector() failed") - } - return nil -} - // setTextVector assigns a Text vector. func (column *Column) setTextVector(id uint32, value [][]byte) error { if !column.isVector { @@ -1263,6 +1240,29 @@ func (column *Column) setTextVector(id uint32, value [][]byte) error { return nil } +// setGeoPointVector assigns a GeoPoint vector. +func (column *Column) setGeoPointVector(id uint32, value []GeoPoint) error { + if !column.isVector { + return newInvalidValueTypeError(column.valueType, column.isVector, LazyGeoPoint, true) + } + switch column.valueType { + case TokyoGeoPoint, WGS84GeoPoint: + default: + return newInvalidValueTypeError(column.valueType, column.isVector, LazyGeoPoint, true) + } + var grnVector C.grngo_vector + if len(value) != 0 { + grnVector.ptr = unsafe.Pointer(&value[0]) + grnVector.size = C.size_t(len(value)) + } + if ok := C.grngo_column_set_geo_point_vector(column.table.db.ctx, + column.obj, C.grn_builtin_type(column.valueType), + C.grn_id(id), &grnVector); ok != C.GRN_TRUE { + return fmt.Errorf("grngo_column_set_geo_point_vector() failed") + } + return nil +} + // SetValue assigns a value. func (column *Column) SetValue(id uint32, value interface{}) error { switch v := value.(type) { @@ -1272,20 +1272,20 @@ func (column *Column) SetValue(id uint32, value interface{}) error { return column.setInt(id, v) case float64: return column.setFloat(id, v) - case GeoPoint: - return column.setGeoPoint(id, v) case []byte: return column.setText(id, v) + case GeoPoint: + return column.setGeoPoint(id, v) case []bool: return column.setBoolVector(id, v) case []int64: return column.setIntVector(id, v) case []float64: return column.setFloatVector(id, v) - case []GeoPoint: - return column.setGeoPointVector(id, v) case [][]byte: return column.setTextVector(id, v) + case []GeoPoint: + return column.setGeoPointVector(id, v) default: return fmt.Errorf("unsupported value type: name = <%s>", reflect.TypeOf(value).Name()) } @@ -1322,16 +1322,6 @@ func (column *Column) getFloat(id uint32) (interface{}, error) { return float64(grnValue), nil } -// getGeoPoint gets a GeoPoint value. -func (column *Column) getGeoPoint(id uint32) (interface{}, error) { - var grnValue C.grn_geo_point - if ok := C.grngo_column_get_geo_point(column.table.db.ctx, column.obj, - C.grn_id(id), &grnValue); ok != C.GRN_TRUE { - return nil, fmt.Errorf("grngo_column_get_geo_point() failed") - } - return GeoPoint{int32(grnValue.latitude), int32(grnValue.longitude)}, nil -} - // getText gets a Text value. func (column *Column) getText(id uint32) (interface{}, error) { var grnValue C.grngo_text @@ -1351,6 +1341,16 @@ func (column *Column) getText(id uint32) (interface{}, error) { return value, nil } +// getGeoPoint gets a GeoPoint value. +func (column *Column) getGeoPoint(id uint32) (interface{}, error) { + var grnValue C.grn_geo_point + if ok := C.grngo_column_get_geo_point(column.table.db.ctx, column.obj, + C.grn_id(id), &grnValue); ok != C.GRN_TRUE { + return nil, fmt.Errorf("grngo_column_get_geo_point() failed") + } + return GeoPoint{int32(grnValue.latitude), int32(grnValue.longitude)}, nil +} + // getBoolVector gets a BoolVector. func (column *Column) getBoolVector(id uint32) (interface{}, error) { var grnVector C.grngo_vector @@ -1414,25 +1414,6 @@ func (column *Column) getFloatVector(id uint32) (interface{}, error) { return value, nil } -// getGeoPointVector gets a GeoPointVector. -func (column *Column) getGeoPointVector(id uint32) (interface{}, error) { - var grnValue C.grngo_vector - if ok := C.grngo_column_get_geo_point_vector(column.table.db.ctx, column.obj, - C.grn_id(id), &grnValue); ok != C.GRN_TRUE { - return nil, fmt.Errorf("grngo_column_get_geo_point_vector() failed") - } - if grnValue.size == 0 { - return make([]GeoPoint, 0), nil - } - value := make([]GeoPoint, int(grnValue.size)) - grnValue.ptr = unsafe.Pointer(&value[0]) - if ok := C.grngo_column_get_geo_point_vector(column.table.db.ctx, column.obj, - C.grn_id(id), &grnValue); ok != C.GRN_TRUE { - return nil, fmt.Errorf("grngo_column_get_geo_point_vector() failed") - } - return value, nil -} - // getTextVector gets a TextVector. func (column *Column) getTextVector(id uint32) (interface{}, error) { var grnVector C.grngo_vector @@ -1463,6 +1444,25 @@ func (column *Column) getTextVector(id uint32) (interface{}, error) { return value, nil } +// getGeoPointVector gets a GeoPointVector. +func (column *Column) getGeoPointVector(id uint32) (interface{}, error) { + var grnValue C.grngo_vector + if ok := C.grngo_column_get_geo_point_vector(column.table.db.ctx, column.obj, + C.grn_id(id), &grnValue); ok != C.GRN_TRUE { + return nil, fmt.Errorf("grngo_column_get_geo_point_vector() failed") + } + if grnValue.size == 0 { + return make([]GeoPoint, 0), nil + } + value := make([]GeoPoint, int(grnValue.size)) + grnValue.ptr = unsafe.Pointer(&value[0]) + if ok := C.grngo_column_get_geo_point_vector(column.table.db.ctx, column.obj, + C.grn_id(id), &grnValue); ok != C.GRN_TRUE { + return nil, fmt.Errorf("grngo_column_get_geo_point_vector() failed") + } + return value, nil +} + // GetValue gets a value. func (column *Column) GetValue(id uint32) (interface{}, error) { if !column.isVector { Modified: grngo.h (+17 -17) =================================================================== --- grngo.h 2015-07-02 16:19:04 +0900 (83bf02c) +++ grngo.h 2015-07-02 16:33:23 +0900 (8d943e3) @@ -76,12 +76,12 @@ grngo_row_info grngo_table_insert_time(grn_ctx *ctx, grn_obj *table, // grngo_table_insert_float() inserts a row with Float key. grngo_row_info grngo_table_insert_float(grn_ctx *ctx, grn_obj *table, double key); -// grngo_table_insert_geo_point() inserts a row with GeoPoint key. -grngo_row_info grngo_table_insert_geo_point(grn_ctx *ctx, grn_obj *table, - grn_geo_point key); // grngo_table_insert_text() inserts a row with Text key. grngo_row_info grngo_table_insert_text(grn_ctx *ctx, grn_obj *table, const grngo_text *key); +// grngo_table_insert_geo_point() inserts a row with GeoPoint key. +grngo_row_info grngo_table_insert_geo_point(grn_ctx *ctx, grn_obj *table, + grn_geo_point key); // grngo_column_set_bool() assigns a Bool value. grn_bool grngo_column_set_bool(grn_ctx *ctx, grn_obj *column, @@ -108,13 +108,13 @@ grn_bool grngo_column_set_time(grn_ctx *ctx, grn_obj *column, // grngo_column_set_float() assigns a Float value. grn_bool grngo_column_set_float(grn_ctx *ctx, grn_obj *column, grn_id id, double value); +// grngo_column_set_text() assigns a Text value. +grn_bool grngo_column_set_text(grn_ctx *ctx, grn_obj *column, + grn_id id, const grngo_text *value); // grngo_column_set_geo_point() assigns a GeoPoint value. grn_bool grngo_column_set_geo_point(grn_ctx *ctx, grn_obj *column, grn_builtin_type data_type, grn_id id, grn_geo_point value); -// grngo_column_set_text() assigns a Text value. -grn_bool grngo_column_set_text(grn_ctx *ctx, grn_obj *column, - grn_id id, const grngo_text *value); // grngo_column_set_bool_vector() assigns a Bool vector. grn_bool grngo_column_set_bool_vector(grn_ctx *ctx, grn_obj *column, grn_id id, @@ -151,16 +151,16 @@ grn_bool grngo_column_set_time_vector(grn_ctx *ctx, grn_obj *column, grn_bool grngo_column_set_float_vector(grn_ctx *ctx, grn_obj *column, grn_id id, const grngo_vector *value); -// grngo_column_set_geo_point_vector() assigns a GeoPoint vector. -grn_bool grngo_column_set_geo_point_vector(grn_ctx *ctx, grn_obj *column, - grn_builtin_type data_type, - grn_id id, - const grngo_vector *value); // grngo_column_set_text_vector() assigns a Text vector. // value must refer to an array of grngo_text. grn_bool grngo_column_set_text_vector(grn_ctx *ctx, grn_obj *column, grn_id id, const grngo_vector *value); +// grngo_column_set_geo_point_vector() assigns a GeoPoint vector. +grn_bool grngo_column_set_geo_point_vector(grn_ctx *ctx, grn_obj *column, + grn_builtin_type data_type, + grn_id id, + const grngo_vector *value); // grngo_column_get_X_vector() sets *(X *)(value.ptr)[i] if value->size >= // the actual vector size. @@ -178,12 +178,12 @@ grn_bool grngo_column_get_int(grn_ctx *ctx, grn_obj *column, // grngo_column_get_float() gets a stored Float value. grn_bool grngo_column_get_float(grn_ctx *ctx, grn_obj *column, grn_id id, double *value); -// grngo_column_get_geo_point() gets a stored GeoPoint value. -grn_bool grngo_column_get_geo_point(grn_ctx *ctx, grn_obj *column, - grn_id id, grn_geo_point *value); // grngo_column_get_text() gets a stored Text value. grn_bool grngo_column_get_text(grn_ctx *ctx, grn_obj *column, grn_id id, grngo_text *value); +// grngo_column_get_geo_point() gets a stored GeoPoint value. +grn_bool grngo_column_get_geo_point(grn_ctx *ctx, grn_obj *column, + grn_id id, grn_geo_point *value); // grngo_column_get_bool_vector() gets a stored Bool vector. grn_bool grngo_column_get_bool_vector(grn_ctx *ctx, grn_obj *column, grn_id id, grngo_vector *value); @@ -194,12 +194,12 @@ grn_bool grngo_column_get_int_vector(grn_ctx *ctx, grn_obj *column, // grngo_column_get_float_vector() gets a stored Float vector. grn_bool grngo_column_get_float_vector(grn_ctx *ctx, grn_obj *column, grn_id id, grngo_vector *value); -// grngo_column_get_geo_point_vector() gets a stored GeoPoint vector. -grn_bool grngo_column_get_geo_point_vector(grn_ctx *ctx, grn_obj *column, - grn_id id, grngo_vector *value); // grngo_column_get_text_vector() gets a stored Text vector. // value must refer to an array of grngo_text. grn_bool grngo_column_get_text_vector(grn_ctx *ctx, grn_obj *column, grn_id id, grngo_vector *value); +// grngo_column_get_geo_point_vector() gets a stored GeoPoint vector. +grn_bool grngo_column_get_geo_point_vector(grn_ctx *ctx, grn_obj *column, + grn_id id, grngo_vector *value); #endif // GRNGO_H Modified: grngo_test.go (+42 -42) =================================================================== --- grngo_test.go 2015-07-02 16:19:04 +0900 (c28865d) +++ grngo_test.go 2015-07-02 16:33:23 +0900 (d648352) @@ -185,10 +185,10 @@ func generateRandomKey(keyType string) interface{} { return rand.Float64() case "Time": return generateRandomTime() - case "TokyoGeoPoint", "WGS84GeoPoint": - return generateRandomGeoPoint() case "ShortText": return generateRandomText() + case "TokyoGeoPoint", "WGS84GeoPoint": + return generateRandomGeoPoint() default: return nil } @@ -346,6 +346,10 @@ func TestDBCreateTableWithFloatKey(t *testing.T) { testDBCreateTableWithKey(t, "Float") } +func TestDBCreateTableWithShortTextKey(t *testing.T) { + testDBCreateTableWithKey(t, "ShortText") +} + func TestDBCreateTableWithTokyoGeoPointKey(t *testing.T) { testDBCreateTableWithKey(t, "TokyoGeoPoint") } @@ -354,10 +358,6 @@ func TestDBCreateTableWithWGS84GeoPointKey(t *testing.T) { testDBCreateTableWithKey(t, "WGS84GeoPoint") } -func TestDBCreateTableWithShortTextKey(t *testing.T) { - testDBCreateTableWithKey(t, "ShortText") -} - func TestDBCreateTableWithBoolValue(t *testing.T) { testDBCreateTableWithValue(t, "Bool") } @@ -398,6 +398,10 @@ func TestDBCreateTableWithTimeRefKey(t *testing.T) { testDBCreateTableWithRefKey(t, "Time") } +func TestDBCreateTableWithShortTextRefKey(t *testing.T) { + testDBCreateTableWithRefKey(t, "ShortText") +} + func TestDBCreateTableWithTokyoGeoPointRefKey(t *testing.T) { testDBCreateTableWithRefKey(t, "TokyoGeoPoint") } @@ -406,10 +410,6 @@ func TestDBCreateTableWithWGS84GeoPointRefKey(t *testing.T) { testDBCreateTableWithRefKey(t, "WGS84GeoPoint") } -func TestDBCreateTableWithShortTextRefKey(t *testing.T) { - testDBCreateTableWithRefKey(t, "ShortText") -} - func TestDBCreateTableWithBoolRefValue(t *testing.T) { testDBCreateTableWithRefValue(t, "Bool") } @@ -426,6 +426,10 @@ func TestDBCreateTableWithTimeRefValue(t *testing.T) { testDBCreateTableWithRefValue(t, "Time") } +func TestDBCreateTableWithShortTextRefValue(t *testing.T) { + testDBCreateTableWithRefValue(t, "ShortText") +} + func TestDBCreateTableWithTokyoGeoPointRefValue(t *testing.T) { testDBCreateTableWithRefValue(t, "TokyoGeoPoint") } @@ -434,10 +438,6 @@ func TestDBCreateTableWithWGS84GeoPointRefValue(t *testing.T) { testDBCreateTableWithRefValue(t, "WGS84GeoPoint") } -func TestDBCreateTableWithShortTextRefValue(t *testing.T) { - testDBCreateTableWithRefValue(t, "ShortText") -} - func testTableInsertRow(t *testing.T, keyType string) { options := NewTableOptions() options.KeyType = keyType @@ -505,6 +505,10 @@ func TestTableInsertRowWithTimeKey(t *testing.T) { testTableInsertRow(t, "Time") } +func TestTableInsertRowWithShortTextKey(t *testing.T) { + testTableInsertRow(t, "ShortText") +} + func TestTableInsertRowWithTokyoGeoPointKey(t *testing.T) { testTableInsertRow(t, "TokyoGeoPoint") } @@ -513,10 +517,6 @@ func TestTableInsertRowWithWGS84GeoPointKey(t *testing.T) { testTableInsertRow(t, "WGS84GeoPoint") } -func TestTableInsertRowWithShortTextKey(t *testing.T) { - testTableInsertRow(t, "ShortText") -} - func testTableCreateScalarColumn(t *testing.T, valueType string) { dirPath, _, db, table, _ := createTempColumn(t, "Table", nil, "Value", valueType, nil) @@ -615,14 +615,6 @@ func TestTableCreateColumnForTime(t *testing.T) { testTableCreateScalarColumn(t, "Time") } -func TestTableCreateColumnForTokyoGeoPoint(t *testing.T) { - testTableCreateScalarColumn(t, "TokyoGeoPoint") -} - -func TestTableCreateColumnForWGS84GeoPoint(t *testing.T) { - testTableCreateScalarColumn(t, "WGS84GeoPoint") -} - func TestTableCreateColumnForShortText(t *testing.T) { testTableCreateScalarColumn(t, "ShortText") } @@ -635,6 +627,14 @@ func TestTableCreateColumnForLongText(t *testing.T) { testTableCreateScalarColumn(t, "LongText") } +func TestTableCreateColumnForTokyoGeoPoint(t *testing.T) { + testTableCreateScalarColumn(t, "TokyoGeoPoint") +} + +func TestTableCreateColumnForWGS84GeoPoint(t *testing.T) { + testTableCreateScalarColumn(t, "WGS84GeoPoint") +} + func TestTableCreateColumnForBoolVector(t *testing.T) { testTableCreateVectorColumn(t, "Bool") } @@ -651,14 +651,6 @@ func TestTableCreateColumnForTimeVector(t *testing.T) { testTableCreateVectorColumn(t, "Time") } -func TestTableCreateColumnForTokyoGeoPointVector(t *testing.T) { - testTableCreateVectorColumn(t, "TokyoGeoPoint") -} - -func TestTableCreateColumnForWGS84GeoPointVector(t *testing.T) { - testTableCreateVectorColumn(t, "WGS84GeoPoint") -} - func TestTableCreateColumnForShortTextVector(t *testing.T) { testTableCreateVectorColumn(t, "ShortText") } @@ -671,6 +663,14 @@ func TestTableCreateColumnForLongTextVector(t *testing.T) { testTableCreateVectorColumn(t, "LongText") } +func TestTableCreateColumnForTokyoGeoPointVector(t *testing.T) { + testTableCreateVectorColumn(t, "TokyoGeoPoint") +} + +func TestTableCreateColumnForWGS84GeoPointVector(t *testing.T) { + testTableCreateVectorColumn(t, "WGS84GeoPoint") +} + func TestTableCreateColumnForRefToBool(t *testing.T) { testTableCreateScalarRefColumn(t, "Bool") } @@ -687,6 +687,10 @@ func TestTableCreateColumnForRefToTime(t *testing.T) { testTableCreateScalarRefColumn(t, "Time") } +func TestTableCreateColumnForRefToShortText(t *testing.T) { + testTableCreateScalarRefColumn(t, "ShortText") +} + func TestTableCreateColumnForRefToTokyoGeoPoint(t *testing.T) { testTableCreateScalarRefColumn(t, "TokyoGeoPoint") } @@ -695,10 +699,6 @@ func TestTableCreateColumnForRefToWGS84GeoPoint(t *testing.T) { testTableCreateScalarRefColumn(t, "WGS84GeoPoint") } -func TestTableCreateColumnForRefToShortText(t *testing.T) { - testTableCreateScalarRefColumn(t, "ShortText") -} - func TestTableCreateColumnForRefToBoolVector(t *testing.T) { testTableCreateVectorRefColumn(t, "Bool") } @@ -715,6 +715,10 @@ func TestTableCreateColumnForRefToTimeVector(t *testing.T) { testTableCreateVectorRefColumn(t, "Time") } +func TestTableCreateColumnForRefToShortTextVector(t *testing.T) { + testTableCreateVectorRefColumn(t, "ShortText") +} + func TestTableCreateColumnForRefToTokyoGeoPointVector(t *testing.T) { testTableCreateVectorRefColumn(t, "TokyoGeoPoint") } @@ -723,10 +727,6 @@ func TestTableCreateColumnForRefToWGS84GeoPointVector(t *testing.T) { testTableCreateVectorRefColumn(t, "WGS84GeoPoint") } -func TestTableCreateColumnForRefToShortTextVector(t *testing.T) { - testTableCreateVectorRefColumn(t, "ShortText") -} - func testColumnSetValue(t *testing.T, valueType string) { dirPath, _, db, table, column := createTempColumn(t, "Table", nil, "Value", valueType, nil) -------------- next part -------------- HTML����������������������������...Download