null+****@clear*****
null+****@clear*****
2011年 6月 18日 (土) 12:16:54 JST
Daijiro MORI 2011-06-18 03:16:54 +0000 (Sat, 18 Jun 2011)
New Revision: 518ddacf5a4509f9494afc23f9a27a28d5f0649e
Log:
db.c follows grn_dat
Modified files:
include/groonga.h
lib/dat.cpp
lib/dat.h
lib/db.c
lib/groonga_in.h
lib/proc.c
Modified: include/groonga.h (+3 -0)
===================================================================
--- include/groonga.h 2011-06-18 00:33:32 +0000 (ee17621)
+++ include/groonga.h 2011-06-18 03:16:54 +0000 (44aba09)
@@ -339,6 +339,7 @@ typedef unsigned short int grn_obj_flags;
#define GRN_OBJ_TABLE_TYPE_MASK (0x07)
#define GRN_OBJ_TABLE_HASH_KEY (0x00)
#define GRN_OBJ_TABLE_PAT_KEY (0x01)
+#define GRN_OBJ_TABLE_DAT_KEY (0x02)
#define GRN_OBJ_TABLE_NO_KEY (0x03)
#define GRN_OBJ_TABLE_VIEW (0x04)
@@ -401,6 +402,7 @@ typedef unsigned short int grn_obj_flags;
#define GRN_PATSNIP (0x0c)
#define GRN_CURSOR_TABLE_HASH_KEY (0x10)
#define GRN_CURSOR_TABLE_PAT_KEY (0x11)
+#define GRN_CURSOR_TABLE_DAT_KEY (0x12)
#define GRN_CURSOR_TABLE_NO_KEY (0x13)
#define GRN_CURSOR_TABLE_VIEW (0x14)
#define GRN_CURSOR_COLUMN_INDEX (0x18)
@@ -409,6 +411,7 @@ typedef unsigned short int grn_obj_flags;
#define GRN_EXPR (0x22)
#define GRN_TABLE_HASH_KEY (0x30)
#define GRN_TABLE_PAT_KEY (0x31)
+#define GRN_TABLE_DAT_KEY (0x32)
#define GRN_TABLE_NO_KEY (0x33)
#define GRN_TABLE_VIEW (0x34)
#define GRN_DB (0x37)
Modified: lib/dat.cpp (+49 -17)
===================================================================
--- lib/dat.cpp 2011-06-18 00:33:32 +0000 (5fcbcd1)
+++ lib/dat.cpp 2011-06-18 03:16:54 +0000 (639565a)
@@ -14,7 +14,6 @@
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include "groonga_in.h"
#include "dat.h"
#include "util.h"
@@ -42,16 +41,19 @@ class Trie {
extern "C" {
-static void grn_dat_init(grn_dat *dat) {
+static void
+grn_dat_init(grn_dat *dat) {
dat->handle = NULL;
}
-static void grn_dat_end(grn_dat *dat) {
+static void
+grn_dat_end(grn_dat *dat) {
delete static_cast<grn::dat::Trie *>(dat->handle);
dat->handle = NULL;
}
-grn_dat *grn_dat_create(grn_ctx *ctx, const char *path, unsigned int,
+grn_dat *
+grn_dat_create(grn_ctx *ctx, const char *path, unsigned int,
unsigned int, unsigned int) {
grn_dat *dat = static_cast<grn_dat *>(GRN_MALLOC(sizeof(grn_dat)));
if (dat == NULL) {
@@ -66,7 +68,8 @@ grn_dat *grn_dat_create(grn_ctx *ctx, const char *path, unsigned int,
return dat;
}
-grn_dat *grn_dat_open(grn_ctx *ctx, const char *path) {
+grn_dat *
+grn_dat_open(grn_ctx *ctx, const char *path) {
grn_dat *dat = static_cast<grn_dat *>(GRN_MALLOC(sizeof(grn_dat)));
if (dat == NULL) {
return NULL;
@@ -80,58 +83,87 @@ grn_dat *grn_dat_open(grn_ctx *ctx, const char *path) {
return dat;
}
-grn_rc grn_dat_close(grn_ctx *ctx, grn_dat *dat) {
+grn_rc
+grn_dat_close(grn_ctx *ctx, grn_dat *dat) {
grn_dat_end(dat);
GRN_FREE(dat);
return GRN_SUCCESS;
}
-grn_rc grn_dat_remove(grn_ctx *ctx, const char *path) {
+grn_rc
+grn_dat_remove(grn_ctx *ctx, const char *path) {
return GRN_SUCCESS;
}
-grn_id grn_dat_get(grn_ctx *ctx, grn_dat *dat, const void *key,
+grn_id
+grn_dat_get(grn_ctx *ctx, grn_dat *dat, const void *key,
unsigned int key_size, void **value) {
return GRN_ID_NIL;
}
-grn_id grn_dat_add(grn_ctx *ctx, grn_dat *dat, const void *key,
+grn_id
+grn_dat_add(grn_ctx *ctx, grn_dat *dat, const void *key,
unsigned int key_size, void **value, int *added) {
return GRN_ID_NIL;
}
-int grn_dat_get_key(grn_ctx *ctx, grn_dat *dat, grn_id id,
+int
+grn_dat_get_key(grn_ctx *ctx, grn_dat *dat, grn_id id,
void *keybuf, int bufsize) {
return 0;
}
-unsigned int grn_dat_size(grn_ctx *ctx, grn_dat *dat) {
+int
+grn_dat_get_key2(grn_ctx *ctx, grn_dat *dat, grn_id id, grn_obj *bulk)
+{
+ return 0;
+}
+
+unsigned int
+grn_dat_size(grn_ctx *ctx, grn_dat *dat)
+{
if (dat == NULL) {
return GRN_INVALID_ARGUMENT;
}
return static_cast<grn::dat::Trie *>(dat->handle)->num_keys();
}
-grn_dat_cursor *grn_dat_cursor_open(grn_ctx *ctx, grn_dat *dat,
+grn_dat_cursor *
+grn_dat_cursor_open(grn_ctx *ctx, grn_dat *dat,
const void *min, unsigned int min_size,
const void *max, unsigned int max_size,
- int offset, int limit, int flags) {
+ int offset, int limit, int flags)
+{
return NULL;
}
-grn_id grn_dat_cursor_next(grn_ctx *ctx, grn_dat_cursor *c) {
+grn_id
+grn_dat_cursor_next(grn_ctx *ctx, grn_dat_cursor *c)
+{
return GRN_ID_NIL;
}
-void grn_dat_cursor_close(grn_ctx *ctx, grn_dat_cursor *c) {
+void
+grn_dat_cursor_close(grn_ctx *ctx, grn_dat_cursor *c)
+{
}
-int grn_dat_cursor_get_key(grn_ctx *ctx, grn_dat_cursor *c, void **key) {
+int
+grn_dat_cursor_get_key(grn_ctx *ctx, grn_dat_cursor *c, void **key)
+{
return 0;
}
-grn_id grn_dat_curr_id(grn_ctx *ctx, grn_dat *dat) {
+grn_id
+grn_dat_curr_id(grn_ctx *ctx, grn_dat *dat)
+{
return 0;
}
+const char *
+_grn_dat_key(grn_ctx *ctx, grn_dat *dat, grn_id id, uint32_t *key_size)
+{
+ return NULL;
+}
+
} // extern "C"
Modified: lib/dat.h (+21 -10)
===================================================================
--- lib/dat.h 2011-06-18 00:33:32 +0000 (2357306)
+++ lib/dat.h 2011-06-18 03:16:54 +0000 (6dbc855)
@@ -21,27 +21,38 @@
#include "groonga_in.h"
#endif /* GROONGA_IN_H */
+#include "db.h"
+
#ifdef __cplusplus
extern "C" {
#endif
typedef void *grn_dat_handle;
+typedef struct _grn_dat grn_dat;
+typedef struct _grn_dat_cursor grn_dat_cursor;
struct _grn_dat {
+ grn_db_obj obj;
grn_dat_handle handle;
// grn_db_obj obj;
-// grn_io *io;
-// struct grn_dat_header *header;
-// grn_encoding encoding;
+ grn_io *io;
+ struct grn_dat_header *header;
+ grn_encoding encoding;
// uint32_t key_size;
// uint32_t value_size;
-// grn_obj *tokenizer;
+ grn_obj *tokenizer;
+};
+
+struct grn_dat_header {
+ uint32_t flags;
+ grn_encoding encoding;
+ grn_id tokenizer;
};
struct _grn_dat_cursor {
-// grn_db_obj obj;
-// grn_id curr_rec;
-// grn_dat *pat;
+ grn_db_obj obj;
+ grn_id curr_rec;
+ grn_dat *dat;
// grn_ctx *ctx;
// unsigned int size;
// unsigned int sp;
@@ -51,9 +62,6 @@ struct _grn_dat_cursor {
// uint8_t curr_key[GRN_TABLE_MAX_KEY_SIZE];
};
-typedef struct _grn_dat grn_dat;
-typedef struct _grn_dat_cursor grn_dat_cursor;
-
GRN_API grn_dat *grn_dat_create(grn_ctx *ctx, const char *path, unsigned int key_size,
unsigned int value_size, unsigned int flags);
@@ -69,6 +77,7 @@ GRN_API grn_id grn_dat_add(grn_ctx *ctx, grn_dat *dat, const void *key,
unsigned int key_size, void **value, int *added);
GRN_API int grn_dat_get_key(grn_ctx *ctx, grn_dat *dat, grn_id id, void *keybuf, int bufsize);
+GRN_API int grn_dat_get_key2(grn_ctx *ctx, grn_dat *dat, grn_id id, grn_obj *bulk);
GRN_API unsigned int grn_dat_size(grn_ctx *ctx, grn_dat *dat);
@@ -83,6 +92,8 @@ GRN_API int grn_dat_cursor_get_key(grn_ctx *ctx, grn_dat_cursor *c, void **key);
grn_id grn_dat_curr_id(grn_ctx *ctx, grn_dat *dat);
+const char *_grn_dat_key(grn_ctx *ctx, grn_dat *dat, grn_id id, uint32_t *key_size);
+
#ifdef __cplusplus
}
#endif
Modified: lib/db.c (+228 -9)
===================================================================
--- lib/db.c 2011-06-18 00:33:32 +0000 (0644020)
+++ lib/db.c 2011-06-18 03:16:54 +0000 (49388b3)
@@ -18,6 +18,7 @@
#include "db.h"
#include "hash.h"
#include "pat.h"
+#include "dat.h"
#include "ii.h"
#include "ql.h"
#include "token.h"
@@ -255,8 +256,9 @@ grn_obj_touch(grn_ctx *ctx, grn_obj *obj, grn_timeval *tv)
case GRN_DB :
((grn_db *)obj)->keys->io->header->lastmod = tv->tv_sec;
break;
- case GRN_TABLE_PAT_KEY :
case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
case GRN_TABLE_NO_KEY :
case GRN_COLUMN_VAR_SIZE :
case GRN_COLUMN_FIX_SIZE :
@@ -522,8 +524,9 @@ grn_table_create(grn_ctx *ctx, const char *name, unsigned name_size,
}
break;
case GRN_TABLE_HASH_KEY :
- case GRN_TABLE_NO_KEY :
case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ case GRN_TABLE_NO_KEY :
key_size = sizeof(grn_id);
break;
default :
@@ -551,8 +554,9 @@ grn_table_create(grn_ctx *ctx, const char *name, unsigned name_size,
}
break;
case GRN_TABLE_HASH_KEY :
- case GRN_TABLE_NO_KEY :
case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ case GRN_TABLE_NO_KEY :
value_size = sizeof(grn_id);
break;
default :
@@ -609,6 +613,13 @@ grn_table_create(grn_ctx *ctx, const char *name, unsigned name_size,
res = (grn_obj *)grn_pat_create(ctx, path, key_size, value_size, flags);
}
break;
+ case GRN_OBJ_TABLE_DAT_KEY :
+ if (key_type && key_type->header.type == GRN_TABLE_VIEW) {
+ res = grn_view_transcript(ctx, path, key_type, value_type, flags);
+ } else {
+ res = (grn_obj *)grn_dat_create(ctx, path, key_size, value_size, flags);
+ }
+ break;
case GRN_OBJ_TABLE_NO_KEY :
if (value_type && value_type->header.type == GRN_TABLE_VIEW) {
res = grn_view_transcript(ctx, path, key_type, value_type, flags);
@@ -670,6 +681,9 @@ grn_table_open(grn_ctx *ctx, const char *name, unsigned name_size, const char *p
case GRN_TABLE_PAT_KEY :
res = (grn_obj *)grn_pat_open(ctx, path);
break;
+ case GRN_TABLE_DAT_KEY :
+ res = (grn_obj *)grn_dat_open(ctx, path);
+ break;
case GRN_TABLE_NO_KEY :
res = (grn_obj *)grn_array_open(ctx, path);
break;
@@ -702,6 +716,19 @@ grn_table_lcp_search(grn_ctx *ctx, grn_obj *table, const void *key, unsigned key
});
}
break;
+ case GRN_TABLE_DAT_KEY :
+ {
+ grn_dat *dat = (grn_dat *)table;
+ WITH_NORMALIZE(dat, key, key_size, {
+ grn_dat_cursor *c;
+ if ((c = grn_dat_cursor_open(ctx, dat, NULL, 0, key, key_size,
+ 0, 1, GRN_CURSOR_PREFIX))) {
+ id = grn_dat_cursor_next(ctx, c);
+ grn_dat_cursor_close(ctx, c);
+ }
+ });
+ }
+ break;
case GRN_TABLE_HASH_KEY :
{
grn_hash *hash = (grn_hash *)table;
@@ -775,6 +802,16 @@ grn_table_add(grn_ctx *ctx, grn_obj *table, const void *key, unsigned key_size,
if (added) { *added = added_; }
}
break;
+ case GRN_TABLE_DAT_KEY :
+ {
+ grn_dat *dat = (grn_dat *)table;
+ WITH_NORMALIZE(dat, key, key_size, {
+ /* FIXME: lock is not supported yet */
+ id = grn_dat_add(ctx, dat, key, key_size, NULL, &added_);
+ });
+ if (added) { *added = added_; }
+ }
+ break;
case GRN_TABLE_HASH_KEY :
{
grn_hash *hash = (grn_hash *)table;
@@ -980,6 +1017,11 @@ grn_table_get(grn_ctx *ctx, grn_obj *table, const void *key, unsigned int key_si
id = grn_pat_get(ctx, (grn_pat *)table, key, key_size, NULL);
});
break;
+ case GRN_TABLE_DAT_KEY :
+ WITH_NORMALIZE((grn_dat *)table, key, key_size, {
+ id = grn_dat_get(ctx, (grn_dat *)table, key, key_size, NULL);
+ });
+ break;
case GRN_TABLE_HASH_KEY :
WITH_NORMALIZE((grn_hash *)table, key, key_size, {
id = grn_hash_get(ctx, (grn_hash *)table, key, key_size, NULL);
@@ -999,6 +1041,9 @@ grn_table_at(grn_ctx *ctx, grn_obj *table, grn_id id)
case GRN_TABLE_PAT_KEY :
id = grn_pat_at(ctx, (grn_pat *)table, id);
break;
+ case GRN_TABLE_DAT_KEY :
+ if (id > grn_dat_curr_id(ctx, (grn_dat *)table)) { id = GRN_ID_NIL; }
+ break;
case GRN_TABLE_HASH_KEY :
id = grn_hash_at(ctx, (grn_hash *)table, id);
break;
@@ -1026,6 +1071,11 @@ grn_table_add_v(grn_ctx *ctx, grn_obj *table, const void *key, int key_size,
id = grn_pat_add(ctx, (grn_pat *)table, key, key_size, value, added);
});
break;
+ case GRN_TABLE_DAT_KEY :
+ WITH_NORMALIZE((grn_dat *)table, key, key_size, {
+ id = grn_dat_add(ctx, (grn_dat *)table, key, key_size, value, added);
+ });
+ break;
case GRN_TABLE_HASH_KEY :
WITH_NORMALIZE((grn_hash *)table, key, key_size, {
id = grn_hash_add(ctx, (grn_hash *)table, key, key_size, value, added);
@@ -1053,6 +1103,11 @@ grn_table_get_v(grn_ctx *ctx, grn_obj *table, const void *key, int key_size,
id = grn_pat_get(ctx, (grn_pat *)table, key, key_size, value);
});
break;
+ case GRN_TABLE_DAT_KEY :
+ WITH_NORMALIZE((grn_dat *)table, key, key_size, {
+ id = grn_dat_get(ctx, (grn_dat *)table, key, key_size, value);
+ });
+ break;
case GRN_TABLE_HASH_KEY :
WITH_NORMALIZE((grn_hash *)table, key, key_size, {
id = grn_hash_get(ctx, (grn_hash *)table, key, key_size, value);
@@ -1076,6 +1131,9 @@ grn_table_get_key(grn_ctx *ctx, grn_obj *table, grn_id id, void *keybuf, int buf
case GRN_TABLE_PAT_KEY :
r = grn_pat_get_key(ctx, (grn_pat *)table, id, keybuf, buf_size);
break;
+ case GRN_TABLE_DAT_KEY :
+ r = grn_dat_get_key(ctx, (grn_dat *)table, id, keybuf, buf_size);
+ break;
case GRN_TABLE_NO_KEY :
{
grn_array *a = (grn_array *)table;
@@ -1106,6 +1164,9 @@ grn_table_get_key2(grn_ctx *ctx, grn_obj *table, grn_id id, grn_obj *bulk)
case GRN_TABLE_PAT_KEY :
r = grn_pat_get_key2(ctx, (grn_pat *)table, id, bulk);
break;
+ case GRN_TABLE_DAT_KEY :
+ r = grn_dat_get_key2(ctx, (grn_dat *)table, id, bulk);
+ break;
case GRN_TABLE_NO_KEY :
{
grn_array *a = (grn_array *)table;
@@ -1267,6 +1328,9 @@ grn_table_delete(grn_ctx *ctx, grn_obj *table, const void *key, unsigned key_siz
}
});
break;
+ case GRN_TABLE_DAT_KEY :
+ rc = GRN_OPERATION_NOT_SUPPORTED;
+ break;
case GRN_TABLE_HASH_KEY :
WITH_NORMALIZE((grn_hash *)table, key, key_size, {
grn_hash *hash = (grn_hash *)table;
@@ -1305,6 +1369,9 @@ _grn_table_delete_by_id(grn_ctx *ctx, grn_obj *table, grn_id id,
case GRN_TABLE_PAT_KEY :
rc = grn_pat_delete_by_id(ctx, (grn_pat *)table, id, optarg);
break;
+ case GRN_TABLE_DAT_KEY :
+ rc = GRN_OPERATION_NOT_SUPPORTED;
+ break;
case GRN_TABLE_HASH_KEY :
rc = grn_hash_delete_by_id(ctx, (grn_hash *)table, id, optarg);
break;
@@ -1330,6 +1397,9 @@ grn_obj_io(grn_obj *obj)
case GRN_TABLE_PAT_KEY :
io = ((grn_pat *)obj)->io;
break;
+ case GRN_TABLE_DAT_KEY :
+ io = ((grn_dat *)obj)->io;
+ break;
case GRN_TABLE_HASH_KEY :
io = ((grn_hash *)obj)->io;
break;
@@ -1439,6 +1509,9 @@ grn_table_truncate(grn_ctx *ctx, grn_obj *table)
}
rc = grn_pat_truncate(ctx, (grn_pat *)table);
break;
+ case GRN_TABLE_DAT_KEY :
+ rc = GRN_OPERATION_NOT_SUPPORTED;
+ break;
case GRN_TABLE_HASH_KEY :
for (hooks = DB_OBJ(table)->hooks[GRN_HOOK_INSERT]; hooks; hooks = hooks->next) {
default_set_value_hook_data *data = (void *)NEXT_ADDR(hooks);
@@ -1472,6 +1545,12 @@ grn_table_get_info(grn_ctx *ctx, grn_obj *table, grn_obj_flags *flags,
if (tokenizer) { *tokenizer = ((grn_pat *)table)->tokenizer; }
rc = GRN_SUCCESS;
break;
+ case GRN_TABLE_DAT_KEY :
+ if (flags) { *flags = ((grn_dat *)table)->obj.header.flags; }
+ if (encoding) { *encoding = ((grn_dat *)table)->encoding; }
+ if (tokenizer) { *tokenizer = ((grn_dat *)table)->tokenizer; }
+ rc = GRN_SUCCESS;
+ break;
case GRN_TABLE_HASH_KEY :
if (flags) { *flags = ((grn_hash *)table)->obj.header.flags; }
if (encoding) { *encoding = ((grn_hash *)table)->encoding; }
@@ -1502,6 +1581,9 @@ grn_table_size(grn_ctx *ctx, grn_obj *table)
case GRN_TABLE_PAT_KEY :
n = grn_pat_size(ctx, (grn_pat *)table);
break;
+ case GRN_TABLE_DAT_KEY :
+ n = grn_dat_size(ctx, (grn_dat *)table);
+ break;
case GRN_TABLE_HASH_KEY :
n = GRN_HASH_SIZE((grn_hash *)table);
break;
@@ -1726,6 +1808,10 @@ grn_table_cursor_target_id(grn_ctx *ctx, grn_table_cursor *tc, grn_obj *id)
GRN_RECORD_PUT(ctx, id, ((grn_pat_cursor *)tc)->pat->obj.id);
len = sizeof(grn_id);
break;
+ case GRN_CURSOR_TABLE_DAT_KEY :
+ GRN_RECORD_PUT(ctx, id, ((grn_dat_cursor *)tc)->dat->obj.id);
+ len = sizeof(grn_id);
+ break;
case GRN_CURSOR_TABLE_HASH_KEY :
GRN_RECORD_PUT(ctx, id, ((grn_hash_cursor *)tc)->hash->obj.id);
len = sizeof(grn_id);
@@ -1764,6 +1850,9 @@ grn_table_cursor_curr(grn_ctx *ctx, grn_table_cursor *tc)
case GRN_CURSOR_TABLE_PAT_KEY :
id = ((grn_pat_cursor *)tc)->curr_rec;
break;
+ case GRN_CURSOR_TABLE_DAT_KEY :
+ id = ((grn_dat_cursor *)tc)->curr_rec;
+ break;
case GRN_CURSOR_TABLE_HASH_KEY :
id = ((grn_hash_cursor *)tc)->curr_rec;
break;
@@ -1891,6 +1980,11 @@ grn_table_cursor_open(grn_ctx *ctx, grn_obj *table,
min, min_size,
max, max_size, offset, limit, flags);
break;
+ case GRN_TABLE_DAT_KEY :
+ tc = (grn_table_cursor *)grn_dat_cursor_open(ctx, (grn_dat *)table,
+ min, min_size,
+ max, max_size, offset, limit, flags);
+ break;
case GRN_TABLE_HASH_KEY :
tc = (grn_table_cursor *)grn_hash_cursor_open(ctx, (grn_hash *)table,
min, min_size,
@@ -1928,6 +2022,10 @@ grn_table_cursor_open_by_id(grn_ctx *ctx, grn_obj *table,
tc = (grn_table_cursor *)grn_pat_cursor_open(ctx, (grn_pat *)table,
NULL, 0, NULL, 0, 0, -1, flags);
break;
+ case GRN_TABLE_DAT_KEY :
+ tc = (grn_table_cursor *)grn_dat_cursor_open(ctx, (grn_dat *)table,
+ NULL, 0, NULL, 0, 0, -1, flags);
+ break;
case GRN_TABLE_HASH_KEY :
tc = (grn_table_cursor *)grn_hash_cursor_open(ctx, (grn_hash *)table,
NULL, 0, NULL, 0, 0, -1, flags);
@@ -1969,6 +2067,9 @@ grn_table_cursor_close(grn_ctx *ctx, grn_table_cursor *tc)
case GRN_CURSOR_TABLE_PAT_KEY :
grn_pat_cursor_close(ctx, (grn_pat_cursor *)tc);
break;
+ case GRN_CURSOR_TABLE_DAT_KEY :
+ grn_dat_cursor_close(ctx, (grn_dat_cursor *)tc);
+ break;
case GRN_CURSOR_TABLE_HASH_KEY :
grn_hash_cursor_close(ctx, (grn_hash_cursor *)tc);
break;
@@ -1998,6 +2099,9 @@ grn_table_cursor_next(grn_ctx *ctx, grn_table_cursor *tc)
case GRN_CURSOR_TABLE_PAT_KEY :
id = grn_pat_cursor_next(ctx, (grn_pat_cursor *)tc);
break;
+ case GRN_CURSOR_TABLE_DAT_KEY :
+ id = grn_dat_cursor_next(ctx, (grn_dat_cursor *)tc);
+ break;
case GRN_CURSOR_TABLE_HASH_KEY :
id = grn_hash_cursor_next(ctx, (grn_hash_cursor *)tc);
break;
@@ -2053,6 +2157,9 @@ grn_table_cursor_get_key(grn_ctx *ctx, grn_table_cursor *tc, void **key)
case GRN_CURSOR_TABLE_PAT_KEY :
len = grn_pat_cursor_get_key(ctx, (grn_pat_cursor *)tc, key);
break;
+ case GRN_CURSOR_TABLE_DAT_KEY :
+ len = grn_dat_cursor_get_key(ctx, (grn_dat_cursor *)tc, key);
+ break;
case GRN_CURSOR_TABLE_HASH_KEY :
len = grn_hash_cursor_get_key(ctx, (grn_hash_cursor *)tc, key);
break;
@@ -2076,6 +2183,10 @@ grn_table_cursor_get_value(grn_ctx *ctx, grn_table_cursor *tc, void **value)
case GRN_CURSOR_TABLE_PAT_KEY :
len = grn_pat_cursor_get_value(ctx, (grn_pat_cursor *)tc, value);
break;
+ case GRN_CURSOR_TABLE_DAT_KEY :
+ *value = NULL;
+ len = 0;
+ break;
case GRN_CURSOR_TABLE_HASH_KEY :
len = grn_hash_cursor_get_value(ctx, (grn_hash_cursor *)tc, value);
break;
@@ -2103,6 +2214,9 @@ grn_table_cursor_set_value(grn_ctx *ctx, grn_table_cursor *tc,
case GRN_CURSOR_TABLE_PAT_KEY :
rc = grn_pat_cursor_set_value(ctx, (grn_pat_cursor *)tc, value, flags);
break;
+ case GRN_CURSOR_TABLE_DAT_KEY :
+ rc = GRN_OPERATION_NOT_SUPPORTED;
+ break;
case GRN_CURSOR_TABLE_HASH_KEY :
rc = grn_hash_cursor_set_value(ctx, (grn_hash_cursor *)tc, value, flags);
break;
@@ -2129,6 +2243,9 @@ grn_table_cursor_delete(grn_ctx *ctx, grn_table_cursor *tc)
case GRN_CURSOR_TABLE_PAT_KEY :
rc = grn_pat_cursor_delete(ctx, (grn_pat_cursor *)tc, NULL);
break;
+ case GRN_CURSOR_TABLE_DAT_KEY :
+ rc = GRN_OPERATION_NOT_SUPPORTED;
+ break;
case GRN_CURSOR_TABLE_HASH_KEY :
rc = grn_hash_cursor_delete(ctx, (grn_hash_cursor *)tc, NULL);
break;
@@ -2155,6 +2272,9 @@ grn_table_cursor_table(grn_ctx *ctx, grn_table_cursor *tc)
case GRN_CURSOR_TABLE_PAT_KEY :
obj = (grn_obj *)(((grn_pat_cursor *)tc)->pat);
break;
+ case GRN_CURSOR_TABLE_DAT_KEY :
+ obj = (grn_obj *)(((grn_dat_cursor *)tc)->dat);
+ break;
case GRN_CURSOR_TABLE_HASH_KEY :
obj = (grn_obj *)(((grn_hash_cursor *)tc)->hash);
break;
@@ -2278,6 +2398,31 @@ grn_table_search(grn_ctx *ctx, grn_obj *table, const void *key, uint32_t key_siz
});
}
break;
+ case GRN_TABLE_DAT_KEY :
+ {
+ grn_dat *dat = (grn_dat *)table;
+ grn_id id;
+ WITH_NORMALIZE(dat, key, key_size, {
+ switch (mode) {
+ case GRN_OP_EXACT :
+ {
+ id = grn_dat_get(ctx, dat, key, key_size, NULL);
+ }
+ if (id) { grn_table_add(ctx, res, &id, sizeof(grn_id), NULL); }
+ break;
+ case GRN_OP_PREFIX :
+ rc = GRN_OPERATION_NOT_SUPPORTED;
+ break;
+ case GRN_OP_LCP :
+ rc = GRN_OPERATION_NOT_SUPPORTED;
+ break;
+ default :
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc, "invalid mode %d", mode);
+ }
+ });
+ }
+ break;
case GRN_TABLE_HASH_KEY :
{
grn_hash *hash = (grn_hash *)table;
@@ -2302,6 +2447,9 @@ grn_table_next(grn_ctx *ctx, grn_obj *table, grn_id id)
case GRN_TABLE_PAT_KEY :
r = grn_pat_next(ctx, (grn_pat *)table, id);
break;
+ case GRN_TABLE_DAT_KEY :
+ r = (id >= grn_dat_curr_id(ctx, (grn_dat *)table)) ? GRN_ID_NIL : id + 1;
+ break;
case GRN_TABLE_HASH_KEY :
r = grn_hash_next(ctx, (grn_hash *)table, id);
break;
@@ -2322,6 +2470,7 @@ grn_obj_search(grn_ctx *ctx, grn_obj *obj, grn_obj *query,
if (GRN_DB_OBJP(obj)) {
switch (obj->header.type) {
case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
case GRN_TABLE_HASH_KEY :
{
const void *key = GRN_BULK_HEAD(query);
@@ -2609,6 +2758,9 @@ grn_table_setoperation(grn_ctx *ctx, grn_obj *table1, grn_obj *table2, grn_obj *
case GRN_TABLE_PAT_KEY :
value_size = ((grn_pat *)table1)->value_size;
break;
+ case GRN_TABLE_DAT_KEY :
+ value_size = 0;
+ break;
case GRN_TABLE_NO_KEY :
value_size = ((grn_array *)table1)->value_size;
break;
@@ -2624,6 +2776,9 @@ grn_table_setoperation(grn_ctx *ctx, grn_obj *table1, grn_obj *table2, grn_obj *
value_size = ((grn_pat *)table2)->value_size;
}
break;
+ case GRN_TABLE_DAT_KEY :
+ value_size = 0;
+ break;
case GRN_TABLE_NO_KEY :
if (value_size < ((grn_array *)table2)->value_size) {
value_size = ((grn_array *)table2)->value_size;
@@ -2769,6 +2924,8 @@ _grn_table_key(grn_ctx *ctx, grn_obj *table, grn_id id, uint32_t *key_size)
return _grn_hash_key(ctx, (grn_hash *)table, id, key_size);
case GRN_TABLE_PAT_KEY :
return _grn_pat_key(ctx, (grn_pat *)table, id, key_size);
+ case GRN_TABLE_DAT_KEY :
+ return _grn_dat_key(ctx, (grn_dat *)table, id, key_size);
case GRN_TABLE_NO_KEY :
{
grn_array *a = (grn_array *)table;
@@ -2870,8 +3027,9 @@ grn_column_create(grn_ctx *ctx, grn_obj *table,
}
break;
case GRN_TABLE_HASH_KEY :
- case GRN_TABLE_NO_KEY :
case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ case GRN_TABLE_NO_KEY :
value_size = sizeof(grn_id);
break;
default :
@@ -3409,6 +3567,7 @@ grn_obj_get_accessor(grn_ctx *ctx, grn_obj *obj, const char *name, unsigned name
done++;
break;
case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
case GRN_TABLE_HASH_KEY :
(*rp)->action = GRN_ACCESSOR_GET_KEY;
break;
@@ -3447,6 +3606,7 @@ grn_obj_get_accessor(grn_ctx *ctx, grn_obj *obj, const char *name, unsigned name
done++;
break;
case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
case GRN_TABLE_HASH_KEY :
case GRN_TABLE_NO_KEY :
(*rp)->action = GRN_ACCESSOR_GET_KEY;
@@ -3494,6 +3654,7 @@ grn_obj_get_accessor(grn_ctx *ctx, grn_obj *obj, const char *name, unsigned name
}
break;
case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
case GRN_TABLE_HASH_KEY :
case GRN_TABLE_NO_KEY :
(*rp)->action = GRN_ACCESSOR_GET_KEY;
@@ -3518,6 +3679,7 @@ grn_obj_get_accessor(grn_ctx *ctx, grn_obj *obj, const char *name, unsigned name
} else {
switch (obj->header.type) {
case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
case GRN_TABLE_HASH_KEY :
(*rp)->action = GRN_ACCESSOR_GET_KEY;
break;
@@ -3552,6 +3714,7 @@ grn_obj_get_accessor(grn_ctx *ctx, grn_obj *obj, const char *name, unsigned name
} else {
switch (obj->header.type) {
case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
case GRN_TABLE_HASH_KEY :
(*rp)->action = GRN_ACCESSOR_GET_KEY;
break;
@@ -3614,6 +3777,7 @@ grn_obj_get_accessor(grn_ctx *ctx, grn_obj *obj, const char *name, unsigned name
}
switch (obj->header.type) {
case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
case GRN_TABLE_HASH_KEY :
case GRN_TABLE_NO_KEY :
(*rp)->action = GRN_ACCESSOR_GET_KEY;
@@ -4554,6 +4718,9 @@ grn_obj_set_value(grn_ctx *ctx, grn_obj *obj, grn_id id,
}
}
break;
+ case GRN_TABLE_DAT_KEY :
+ rc = GRN_OPERATION_NOT_SUPPORTED;
+ break;
case GRN_TABLE_HASH_KEY :
{
grn_obj buf;
@@ -4752,6 +4919,9 @@ grn_obj_get_value_(grn_ctx *ctx, grn_obj *obj, grn_id id, uint32_t *size)
case GRN_TABLE_PAT_KEY :
value = grn_pat_get_value_(ctx, (grn_pat *)obj, id, size);
break;
+ case GRN_TABLE_DAT_KEY :
+ ERR(GRN_FUNCTION_NOT_IMPLEMENTED, "GRN_TABLE_DAT_KEY not supported");
+ break;
case GRN_TABLE_HASH_KEY :
value = grn_hash_get_value_(ctx, (grn_hash *)obj, id, size);
break;
@@ -4834,6 +5004,9 @@ grn_obj_get_value(grn_ctx *ctx, grn_obj *obj, grn_id id, grn_obj *value)
value->header.domain = grn_obj_get_range(ctx, obj);
}
break;
+ case GRN_TABLE_DAT_KEY :
+ ERR(GRN_FUNCTION_NOT_IMPLEMENTED, "GRN_TABLE_DAT_KEY not supported");
+ break;
case GRN_TABLE_HASH_KEY :
{
grn_hash *hash = (grn_hash *)obj;
@@ -5057,6 +5230,10 @@ grn_obj_get_info(grn_ctx *ctx, grn_obj *obj, grn_info_type type, grn_obj *valueb
enc = ((grn_pat *)obj)->encoding;
grn_bulk_write(ctx, valuebuf, (const char *)&enc, sizeof(grn_encoding));
break;
+ case GRN_TABLE_DAT_KEY :
+ enc = ((grn_dat *)obj)->encoding;
+ grn_bulk_write(ctx, valuebuf, (const char *)&enc, sizeof(grn_encoding));
+ break;
case GRN_TABLE_HASH_KEY :
enc = ((grn_hash *)obj)->encoding;
grn_bulk_write(ctx, valuebuf, (const char *)&enc, sizeof(grn_encoding));
@@ -5087,6 +5264,9 @@ grn_obj_get_info(grn_ctx *ctx, grn_obj *obj, grn_info_type type, grn_obj *valueb
case GRN_TABLE_PAT_KEY :
valuebuf = ((grn_pat *)obj)->tokenizer;
break;
+ case GRN_TABLE_DAT_KEY :
+ valuebuf = ((grn_dat *)obj)->tokenizer;
+ break;
}
break;
default :
@@ -5158,6 +5338,7 @@ update_source_hook(grn_ctx *ctx, grn_obj *obj)
switch (source->header.type) {
case GRN_TABLE_HASH_KEY :
case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
grn_obj_add_hook(ctx, source, GRN_HOOK_INSERT, 0, NULL, &data);
grn_obj_add_hook(ctx, source, GRN_HOOK_DELETE, 0, NULL, &data);
break;
@@ -5207,6 +5388,7 @@ delete_source_hook(grn_ctx *ctx, grn_obj *obj)
switch (source->header.type) {
case GRN_TABLE_HASH_KEY :
case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
del_hook(ctx, source, GRN_HOOK_INSERT, &data);
del_hook(ctx, source, GRN_HOOK_DELETE, &data);
break;
@@ -5390,6 +5572,11 @@ grn_obj_set_info(grn_ctx *ctx, grn_obj *obj, grn_info_type type, grn_obj *value)
((grn_pat *)obj)->header->tokenizer = grn_obj_id(ctx, value);
rc = GRN_SUCCESS;
break;
+ case GRN_TABLE_DAT_KEY :
+ ((grn_dat *)obj)->tokenizer = value;
+ ((grn_dat *)obj)->header->tokenizer = grn_obj_id(ctx, value);
+ rc = GRN_SUCCESS;
+ break;
}
}
default :
@@ -5617,8 +5804,9 @@ grn_obj_remove(grn_ctx *ctx, grn_obj *obj)
if (tbl) {
switch (tbl->header.type) {
case GRN_TABLE_HASH_KEY :
- case GRN_TABLE_NO_KEY:
case GRN_TABLE_PAT_KEY:
+ case GRN_TABLE_DAT_KEY:
+ case GRN_TABLE_NO_KEY:
grn_obj_remove(ctx, tbl);
}
}
@@ -5644,6 +5832,17 @@ grn_obj_remove(grn_ctx *ctx, grn_obj *obj)
}
grn_obj_touch(ctx, db, NULL);
break;
+ case GRN_TABLE_DAT_KEY :
+ remove_index(ctx, obj, GRN_HOOK_INSERT);
+ remove_columns(ctx, obj);
+ grn_obj_close(ctx, obj);
+ if (path) {
+ grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET, NULL);
+ grn_obj_delete_by_id(ctx, db, id, 1);
+ grn_dat_remove(ctx, path);
+ }
+ grn_obj_touch(ctx, db, NULL);
+ break;
case GRN_TABLE_HASH_KEY :
remove_index(ctx, obj, GRN_HOOK_INSERT);
remove_columns(ctx, obj);
@@ -5911,6 +6110,11 @@ grn_ctx_at(grn_ctx *ctx, grn_id id)
vp->ptr = (grn_obj *)grn_pat_open(ctx, buffer);
UNPACK_INFO();
break;
+ case GRN_TABLE_DAT_KEY :
+ GET_PATH(spec, buffer, s, id);
+ vp->ptr = (grn_obj *)grn_dat_open(ctx, buffer);
+ UNPACK_INFO();
+ break;
case GRN_TABLE_NO_KEY :
GET_PATH(spec, buffer, s, id);
vp->ptr = (grn_obj *)grn_array_open(ctx, buffer);
@@ -5945,8 +6149,9 @@ grn_ctx_at(grn_ctx *ctx, grn_id id)
break;
case GRN_EXPR :
{
+ uint8_t *u = (uint8_t *)p;
size = grn_vector_get_element(ctx, &v, 4, &p, NULL, NULL);
- vp->ptr = grn_expr_open(ctx, spec, p, p + size);
+ vp->ptr = grn_expr_open(ctx, spec, u, u + size);
}
break;
}
@@ -6058,6 +6263,9 @@ grn_obj_close(grn_ctx *ctx, grn_obj *obj)
case GRN_CURSOR_TABLE_PAT_KEY :
grn_pat_cursor_close(ctx, (grn_pat_cursor *)obj);
break;
+ case GRN_CURSOR_TABLE_DAT_KEY :
+ grn_dat_cursor_close(ctx, (grn_dat_cursor *)obj);
+ break;
case GRN_CURSOR_TABLE_HASH_KEY :
grn_hash_cursor_close(ctx, (grn_hash_cursor *)obj);
break;
@@ -6084,6 +6292,9 @@ grn_obj_close(grn_ctx *ctx, grn_obj *obj)
case GRN_TABLE_PAT_KEY :
rc = grn_pat_close(ctx, (grn_pat *)obj);
break;
+ case GRN_TABLE_DAT_KEY :
+ rc = grn_dat_close(ctx, (grn_dat *)obj);
+ break;
case GRN_TABLE_HASH_KEY :
rc = grn_hash_close(ctx, (grn_hash *)obj);
break;
@@ -6470,8 +6681,9 @@ grn_obj_clear_lock(grn_ctx *ctx, grn_obj *obj)
if (tbl) {
switch (tbl->header.type) {
case GRN_TABLE_HASH_KEY :
- case GRN_TABLE_NO_KEY:
case GRN_TABLE_PAT_KEY:
+ case GRN_TABLE_DAT_KEY:
+ case GRN_TABLE_NO_KEY:
grn_obj_clear_lock(ctx, tbl);
}
}
@@ -6481,8 +6693,9 @@ grn_obj_clear_lock(grn_ctx *ctx, grn_obj *obj)
}
break;
case GRN_TABLE_HASH_KEY :
- case GRN_TABLE_NO_KEY :
case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ case GRN_TABLE_NO_KEY :
{
grn_hash *cols;
if ((cols = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
@@ -7204,6 +7417,7 @@ grn_column_index(grn_ctx *ctx, grn_obj *obj, grn_operator op,
grn_obj *tokenizer, *lexicon = grn_ctx_at(ctx, target->header.domain);
if (!lexicon) { continue; }
if (lexicon->header.type != GRN_TABLE_PAT_KEY) { continue; }
+ /* FIXME: GRN_TABLE_DAT_KEY should be supported */
grn_table_get_info(ctx, lexicon, NULL, NULL, &tokenizer);
if (tokenizer) { continue; }
}
@@ -7229,6 +7443,7 @@ grn_column_index(grn_ctx *ctx, grn_obj *obj, grn_operator op,
if (a->obj->header.type == GRN_TABLE_PAT_KEY) {
if (buf_size) { indexbuf[n++] = obj; }
}
+ /* FIXME: GRN_TABLE_DAT_KEY should be supported */
}
}
break;
@@ -7282,6 +7497,7 @@ grn_column_index(grn_ctx *ctx, grn_obj *obj, grn_operator op,
grn_obj *tokenizer, *lexicon = grn_ctx_at(ctx, target->header.domain);
if (!lexicon) { continue; }
if (lexicon->header.type != GRN_TABLE_PAT_KEY) { continue; }
+ /* FIXME: GRN_TABLE_DAT_KEY should be supported */
grn_table_get_info(ctx, lexicon, NULL, NULL, &tokenizer);
if (tokenizer) { continue; }
}
@@ -7707,6 +7923,7 @@ bracket_close(grn_ctx *ctx, grn_loader *loader)
switch (loader->table->header.type) {
case GRN_TABLE_HASH_KEY :
case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
if (loader->key_offset != -1 && ndata == ncols + 1) {
id = loader_add(ctx, value + loader->key_offset);
} else if (loader->key_offset == -1) {
@@ -7783,7 +8000,8 @@ bracket_close(grn_ctx *ctx, grn_loader *loader)
int i = 0;
while (ndata--) {
if ((loader->table->header.type == GRN_TABLE_HASH_KEY ||
- loader->table->header.type == GRN_TABLE_PAT_KEY) &&
+ loader->table->header.type == GRN_TABLE_PAT_KEY ||
+ loader->table->header.type == GRN_TABLE_DAT_KEY) &&
i == loader->key_offset) {
/* skip this value, because it's already used as key value */
value = values_next(ctx, value);
@@ -7825,6 +8043,7 @@ brace_close(grn_ctx *ctx, grn_loader *loader)
switch (loader->table->header.type) {
case GRN_TABLE_HASH_KEY :
case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
{
grn_obj *v, *key_value = 0;
for (v = value; v + 1 < ve; v = values_next(ctx, v)) {
Modified: lib/groonga_in.h (+2 -0)
===================================================================
--- lib/groonga_in.h 2011-06-18 00:33:32 +0000 (356b192)
+++ lib/groonga_in.h 2011-06-18 03:16:54 +0000 (b65bb8d)
@@ -20,7 +20,9 @@
#define GROONGA_IN_H
#ifdef __GNUC__
+#ifndef _GNU_SOURCE
#define _GNU_SOURCE
+#endif /* _GNU_SOURCE */
#endif /* __GNUC__ */
#if defined(__NetBSD__) && !defined(_NETBSD_SOURCE)
Modified: lib/proc.c (+18 -2)
===================================================================
--- lib/proc.c 2011-06-18 00:33:32 +0000 (698dc8e)
+++ lib/proc.c 2011-06-18 03:16:54 +0000 (fb7d14e)
@@ -438,6 +438,9 @@ grn_parse_table_create_flags(grn_ctx *ctx, const char *nptr, const char *end)
} else if (!memcmp(nptr, "TABLE_PAT_KEY", 13)) {
flags |= GRN_OBJ_TABLE_PAT_KEY;
nptr += 13;
+ } else if (!memcmp(nptr, "TABLE_DAT_KEY", 13)) {
+ flags |= GRN_OBJ_TABLE_DAT_KEY;
+ nptr += 13;
} else if (!memcmp(nptr, "TABLE_NO_KEY", 12)) {
flags |= GRN_OBJ_TABLE_NO_KEY;
nptr += 12;
@@ -507,6 +510,9 @@ grn_table_create_flags_to_text(grn_ctx *ctx, grn_obj *buf, grn_obj_flags flags)
case GRN_OBJ_TABLE_PAT_KEY:
GRN_TEXT_PUTS(ctx, buf, "TABLE_PAT_KEY");
break;
+ case GRN_OBJ_TABLE_DAT_KEY:
+ GRN_TEXT_PUTS(ctx, buf, "TABLE_DAT_KEY");
+ break;
case GRN_OBJ_TABLE_NO_KEY:
GRN_TEXT_PUTS(ctx, buf, "TABLE_NO_KEY");
break;
@@ -924,6 +930,7 @@ print_tableinfo(grn_ctx *ctx, grn_obj *table)
switch (table->header.type) {
case GRN_TABLE_HASH_KEY:
case GRN_TABLE_PAT_KEY:
+ case GRN_TABLE_DAT_KEY:
case GRN_TABLE_NO_KEY:
case GRN_TABLE_VIEW:
break;
@@ -1292,6 +1299,7 @@ proc_get_resolve_parameters(grn_ctx *ctx, grn_user_data *user_data, grn_obj **ta
break;
case GRN_TABLE_HASH_KEY:
case GRN_TABLE_PAT_KEY:
+ case GRN_TABLE_DAT_KEY:
case GRN_TABLE_VIEW:
if (key_length && id_length) {
ERR(GRN_INVALID_ARGUMENT,
@@ -1450,6 +1458,7 @@ dump_index_column_sources(grn_ctx *ctx, grn_obj *outbuf, grn_obj *column)
if (i) { GRN_TEXT_PUTC(ctx, outbuf, ','); }
switch (source->header.type) {
case GRN_TABLE_PAT_KEY:
+ case GRN_TABLE_DAT_KEY:
case GRN_TABLE_HASH_KEY:
case GRN_TABLE_VIEW:
GRN_TEXT_PUTS(ctx, outbuf, "_key");
@@ -1541,6 +1550,7 @@ reference_column_p(grn_ctx *ctx, grn_obj *column)
switch (range->header.type) {
case GRN_TABLE_HASH_KEY:
case GRN_TABLE_PAT_KEY:
+ case GRN_TABLE_DAT_KEY:
case GRN_TABLE_NO_KEY:
case GRN_TABLE_VIEW:
return GRN_TRUE;
@@ -1614,6 +1624,7 @@ dump_records(grn_ctx *ctx, grn_obj *outbuf, grn_obj *table)
switch (table->header.type) {
case GRN_TABLE_HASH_KEY:
case GRN_TABLE_PAT_KEY:
+ case GRN_TABLE_DAT_KEY:
case GRN_TABLE_NO_KEY:
break;
case GRN_TABLE_VIEW:
@@ -1649,7 +1660,8 @@ dump_records(grn_ctx *ctx, grn_obj *outbuf, grn_obj *table)
GRN_BULK_REWIND(&column_name);
grn_column_name_(ctx, columns[i], &column_name);
if (((table->header.type == GRN_TABLE_HASH_KEY ||
- table->header.type == GRN_TABLE_PAT_KEY) &&
+ table->header.type == GRN_TABLE_PAT_KEY ||
+ table->header.type == GRN_TABLE_DAT_KEY) &&
GRN_TEXT_LEN(&column_name) == 3 &&
!memcmp(GRN_TEXT_VALUE(&column_name), "_id", 3)) ||
(table->header.type == GRN_TABLE_NO_KEY &&
@@ -1791,6 +1803,7 @@ dump_table(grn_ctx *ctx, grn_obj *outbuf, grn_obj *table,
switch (table->header.type) {
case GRN_TABLE_HASH_KEY:
case GRN_TABLE_PAT_KEY:
+ case GRN_TABLE_DAT_KEY:
domain = grn_ctx_at(ctx, table->header.domain);
if (domain) {
default_flags |= domain->header.flags;
@@ -1869,6 +1882,7 @@ dump_scheme(grn_ctx *ctx, grn_obj *outbuf)
switch (object->header.type) {
case GRN_TABLE_HASH_KEY:
case GRN_TABLE_PAT_KEY:
+ case GRN_TABLE_DAT_KEY:
case GRN_TABLE_NO_KEY:
case GRN_TABLE_VIEW:
dump_table(ctx, outbuf, object, &pending_columns);
@@ -2049,6 +2063,7 @@ proc_check(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
case GRN_TABLE_PAT_KEY :
grn_pat_check(ctx, (grn_pat *)obj);
break;
+ case GRN_TABLE_DAT_KEY :
case GRN_TABLE_HASH_KEY :
case GRN_TABLE_NO_KEY :
case GRN_COLUMN_FIX_SIZE :
@@ -2150,8 +2165,9 @@ proc_truncate(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
"no such table: <%.*s>", table_name, table_name_len);
} else {
switch (table->header.type) {
- case GRN_TABLE_PAT_KEY :
case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
case GRN_TABLE_NO_KEY :
grn_table_truncate(ctx, table);
break;