null+****@clear*****
null+****@clear*****
2010年 8月 13日 (金) 12:36:28 JST
Kouhei Sutou 2010-08-13 03:36:28 +0000 (Fri, 13 Aug 2010)
New Revision: 9581521b7672dcc259b41c7e2f67cfd1b799eef0
Log:
grn_column_name() supports accessor.
Modified files:
lib/db.c
test/unit/core/Makefile.am
Modified: lib/db.c (+34 -0)
===================================================================
--- lib/db.c 2010-08-12 11:34:19 +0000 (514f348)
+++ lib/db.c 2010-08-13 03:36:28 +0000 (23638ef)
@@ -6035,6 +6035,7 @@ grn_column_name(grn_ctx *ctx, grn_obj *obj, char *namebuf, int buf_size)
{
int len = 0;
char buf[GRN_TABLE_MAX_KEY_SIZE];
+ if (!obj) { return len; }
GRN_API_ENTER;
if (GRN_DB_OBJP(obj)) {
if (DB_OBJ(obj)->id && DB_OBJ(obj)->id < GRN_ID_MAX) {
@@ -6052,6 +6053,39 @@ grn_column_name(grn_ctx *ctx, grn_obj *obj, char *namebuf, int buf_size)
}
}
}
+ } else if (obj->header.type == GRN_ACCESSOR) {
+ const char *name = NULL;
+ grn_accessor *a;
+ for (a = (grn_accessor *)obj; a; a = a->next) {
+ switch (a->action) {
+ case GRN_ACCESSOR_GET_ID :
+ name = "_id";
+ break;
+ case GRN_ACCESSOR_GET_KEY :
+ name = "_key";
+ break;
+ case GRN_ACCESSOR_GET_VALUE :
+ name = "_value";
+ break;
+ case GRN_ACCESSOR_GET_SCORE :
+ name = "_score";
+ break;
+ case GRN_ACCESSOR_GET_NSUBRECS :
+ name = "_nsubrecs";
+ break;
+ case GRN_ACCESSOR_GET_COLUMN_VALUE :
+ case GRN_ACCESSOR_GET_DB_OBJ :
+ case GRN_ACCESSOR_LOOKUP :
+ case GRN_ACCESSOR_FUNCALL :
+ break;
+ }
+ }
+ if (name) {
+ len = strlen(name);
+ if (len <= buf_size) {
+ memcpy(namebuf, name, len);
+ }
+ }
}
GRN_API_RETURN(len);
}
Modified: test/unit/core/Makefile.am (+3 -1)
===================================================================
--- test/unit/core/Makefile.am 2010-08-12 11:34:19 +0000 (d69bb5f)
+++ test/unit/core/Makefile.am 2010-08-13 03:36:28 +0000 (e78914e)
@@ -46,7 +46,8 @@ noinst_LTLIBRARIES = \
test-command-select-prefix-search.la \
test-command-cache-limit.la \
test-command-delete.la \
- test-geo.la
+ test-geo.la \
+ test-accessor.la
endif
INCLUDES = \
@@ -117,3 +118,4 @@ test_command_select_prefix_search_la_SOURCES = test-command-select-prefix-search
test_command_cache_limit_la_SOURCES = test-command-cache-limit.c
test_command_delete_la_SOURCES = test-command-delete.c
test_geo_la_SOURCES = test-geo.c
+test_accessor_la_SOURCES = test-accessor.c