26 #if defined(_WIN32) || defined(_WIN64)
27 #define GRN_API __declspec(dllimport)
36 #define GRN_ID_NIL (0x00)
37 #define GRN_ID_MAX (0x3fffffff)
138 #define GRN_COMMAND_VERSION_MIN GRN_COMMAND_VERSION_1
139 #define GRN_COMMAND_VERSION_STABLE GRN_COMMAND_VERSION_1
140 #define GRN_COMMAND_VERSION_MAX GRN_COMMAND_VERSION_2
156 #define GRN_QUERY_LOG_NONE (0x00)
157 #define GRN_QUERY_LOG_COMMAND (0x01<<0)
158 #define GRN_QUERY_LOG_RESULT_CODE (0x01<<1)
159 #define GRN_QUERY_LOG_DESTINATION (0x01<<2)
160 #define GRN_QUERY_LOG_CACHE (0x01<<3)
161 #define GRN_QUERY_LOG_SIZE (0x01<<4)
162 #define GRN_QUERY_LOG_SCORE (0x01<<5)
163 #define GRN_QUERY_LOG_ALL\
164 (GRN_QUERY_LOG_COMMAND |\
165 GRN_QUERY_LOG_RESULT_CODE |\
166 GRN_QUERY_LOG_DESTINATION |\
167 GRN_QUERY_LOG_CACHE |\
168 GRN_QUERY_LOG_SIZE |\
170 #define GRN_QUERY_LOG_DEFAULT GRN_QUERY_LOG_ALL
183 #define GRN_CTX_MSGSIZE (0x80)
184 #define GRN_CTX_FIN (0xff)
216 #define GRN_CTX_USER_DATA(ctx) (&((ctx)->user_data))
218 #define GRN_CTX_USE_QL (0x03)
219 #define GRN_CTX_BATCH_MODE (0x04)
220 #define GRN_CTX_PER_DB (0x08)
231 #define GRN_CTX_GET_ENCODING(ctx) ((ctx)->encoding)
232 #define GRN_CTX_SET_ENCODING(ctx,enc) \
233 ((ctx)->encoding = (enc == GRN_ENC_DEFAULT) ? grn_get_default_encoding() : enc)
248 #define GRN_CACHE_DEFAULT_MAX_N_ENTRIES 100
272 #define GRN_OBJ_TABLE_TYPE_MASK (0x07)
273 #define GRN_OBJ_TABLE_HASH_KEY (0x00)
274 #define GRN_OBJ_TABLE_PAT_KEY (0x01)
275 #define GRN_OBJ_TABLE_DAT_KEY (0x02)
276 #define GRN_OBJ_TABLE_NO_KEY (0x03)
278 #define GRN_OBJ_KEY_MASK (0x07<<3)
279 #define GRN_OBJ_KEY_UINT (0x00<<3)
280 #define GRN_OBJ_KEY_INT (0x01<<3)
281 #define GRN_OBJ_KEY_FLOAT (0x02<<3)
282 #define GRN_OBJ_KEY_GEO_POINT (0x03<<3)
284 #define GRN_OBJ_KEY_WITH_SIS (0x01<<6)
285 #define GRN_OBJ_KEY_NORMALIZE (0x01<<7)
287 #define GRN_OBJ_COLUMN_TYPE_MASK (0x07)
288 #define GRN_OBJ_COLUMN_SCALAR (0x00)
289 #define GRN_OBJ_COLUMN_VECTOR (0x01)
290 #define GRN_OBJ_COLUMN_INDEX (0x02)
292 #define GRN_OBJ_COMPRESS_MASK (0x07<<4)
293 #define GRN_OBJ_COMPRESS_NONE (0x00<<4)
294 #define GRN_OBJ_COMPRESS_ZLIB (0x01<<4)
295 #define GRN_OBJ_COMPRESS_LZO (0x02<<4)
297 #define GRN_OBJ_WITH_SECTION (0x01<<7)
298 #define GRN_OBJ_WITH_WEIGHT (0x01<<8)
299 #define GRN_OBJ_WITH_POSITION (0x01<<9)
300 #define GRN_OBJ_RING_BUFFER (0x01<<10)
302 #define GRN_OBJ_UNIT_MASK (0x0f<<8)
303 #define GRN_OBJ_UNIT_DOCUMENT_NONE (0x00<<8)
304 #define GRN_OBJ_UNIT_DOCUMENT_SECTION (0x01<<8)
305 #define GRN_OBJ_UNIT_DOCUMENT_POSITION (0x02<<8)
306 #define GRN_OBJ_UNIT_SECTION_NONE (0x03<<8)
307 #define GRN_OBJ_UNIT_SECTION_POSITION (0x04<<8)
308 #define GRN_OBJ_UNIT_POSITION_NONE (0x05<<8)
309 #define GRN_OBJ_UNIT_USERDEF_DOCUMENT (0x06<<8)
310 #define GRN_OBJ_UNIT_USERDEF_SECTION (0x07<<8)
311 #define GRN_OBJ_UNIT_USERDEF_POSITION (0x08<<8)
313 #define GRN_OBJ_NO_SUBREC (0x00<<13)
314 #define GRN_OBJ_WITH_SUBREC (0x01<<13)
316 #define GRN_OBJ_KEY_VAR_SIZE (0x01<<14)
318 #define GRN_OBJ_TEMPORARY (0x00<<15)
319 #define GRN_OBJ_PERSISTENT (0x01<<15)
323 #define GRN_VOID (0x00)
324 #define GRN_BULK (0x02)
325 #define GRN_PTR (0x03)
326 #define GRN_UVECTOR (0x04)
327 #define GRN_PVECTOR (0x05)
328 #define GRN_VECTOR (0x06)
329 #define GRN_MSG (0x07)
330 #define GRN_QUERY (0x08)
331 #define GRN_ACCESSOR (0x09)
332 #define GRN_SNIP (0x0b)
333 #define GRN_PATSNIP (0x0c)
334 #define GRN_STRING (0x0d)
335 #define GRN_CURSOR_TABLE_HASH_KEY (0x10)
336 #define GRN_CURSOR_TABLE_PAT_KEY (0x11)
337 #define GRN_CURSOR_TABLE_DAT_KEY (0x12)
338 #define GRN_CURSOR_TABLE_NO_KEY (0x13)
339 #define GRN_CURSOR_COLUMN_INDEX (0x18)
340 #define GRN_CURSOR_COLUMN_GEO_INDEX (0x1a)
341 #define GRN_TYPE (0x20)
342 #define GRN_PROC (0x21)
343 #define GRN_EXPR (0x22)
344 #define GRN_TABLE_HASH_KEY (0x30)
345 #define GRN_TABLE_PAT_KEY (0x31)
346 #define GRN_TABLE_DAT_KEY (0x32)
347 #define GRN_TABLE_NO_KEY (0x33)
348 #define GRN_DB (0x37)
349 #define GRN_COLUMN_FIX_SIZE (0x40)
350 #define GRN_COLUMN_VAR_SIZE (0x41)
351 #define GRN_COLUMN_INDEX (0x48)
386 #define GRN_OBJ_REFER (0x01<<0)
387 #define GRN_OBJ_OUTPLACE (0x01<<1)
389 #define GRN_OBJ_INIT(obj,obj_type,obj_flags,obj_domain) do { \
390 (obj)->header.type = (obj_type);\
391 (obj)->header.impl_flags = (obj_flags);\
392 (obj)->header.flags = 0;\
393 (obj)->header.domain = (obj_domain);\
394 (obj)->u.b.head = NULL;\
395 (obj)->u.b.curr = NULL;\
396 (obj)->u.b.tail = NULL;\
399 #define GRN_OBJ_FIN(ctx,obj) (grn_obj_close((ctx), (obj)))
410 #define GRN_DB_OPEN_OR_CREATE(ctx,path,optarg,db) \
411 (((db) = grn_db_open((ctx), (path))) || (db = grn_db_create((ctx), (path), (optarg))))
453 grn_obj_flags flags,
unsigned int size);
487 #define GRN_TABLE_MAX_KEY_SIZE (0x1000)
490 const char *name,
unsigned int name_size,
491 const char *path, grn_obj_flags flags,
494 #define GRN_TABLE_OPEN_OR_CREATE(ctx,name,name_size,path,flags,key_type,value_type,table) \
495 (((table) = grn_ctx_get((ctx), (name), (name_size))) ||\
496 ((table) = grn_table_create((ctx), (name), (name_size), (path), (flags), (key_type), (value_type))))
500 const void *key,
unsigned int key_size,
int *added);
502 const void *key,
unsigned int key_size);
505 const void *key,
unsigned int key_size);
507 grn_id
id,
void *keybuf,
int buf_size);
509 const void *key,
unsigned int key_size);
512 const void *dest_key,
unsigned int dest_key_size);
514 const void *src_key,
unsigned int src_key_size,
515 const void *dest_key,
unsigned int dest_key_size);
520 #define GRN_CURSOR_ASCENDING (0x00<<0)
521 #define GRN_CURSOR_DESCENDING (0x01<<0)
522 #define GRN_CURSOR_GE (0x00<<1)
523 #define GRN_CURSOR_GT (0x01<<1)
524 #define GRN_CURSOR_LE (0x00<<2)
525 #define GRN_CURSOR_LT (0x01<<2)
526 #define GRN_CURSOR_BY_KEY (0x00<<3)
527 #define GRN_CURSOR_BY_ID (0x01<<3)
528 #define GRN_CURSOR_PREFIX (0x01<<4)
529 #define GRN_CURSOR_SIZE_BY_BIT (0x01<<5)
530 #define GRN_CURSOR_RK (0x01<<6)
533 const void *min,
unsigned int min_size,
534 const void *max,
unsigned int max_size,
535 int offset,
int limit,
int flags);
541 const void *value,
int flags);
555 grn_id rid_min, grn_id rid_max,
int flags);
558 #define GRN_TABLE_EACH(ctx,table,head,tail,id,key,key_size,value,block) do {\
559 (ctx)->errlvl = GRN_LOG_NOTICE;\
560 (ctx)->rc = GRN_SUCCESS;\
561 if ((ctx)->seqno & 1) {\
567 switch ((table)->header.type) {\
568 case GRN_TABLE_PAT_KEY :\
569 GRN_PAT_EACH((ctx), (grn_pat *)(table), (id), (key), (key_size), (value), block);\
571 case GRN_TABLE_DAT_KEY :\
572 GRN_DAT_EACH((ctx), (grn_dat *)(table), (id), (key), (key_size), block);\
574 case GRN_TABLE_HASH_KEY :\
575 GRN_HASH_EACH((ctx), (grn_hash *)(table), (id), (key), (key_size), (value), block);\
577 case GRN_TABLE_NO_KEY :\
578 GRN_ARRAY_EACH((ctx), (grn_array *)(table), (head), (tail), (id), (value), block);\
592 #define GRN_TABLE_SORT_ASC (0x00<<0)
593 #define GRN_TABLE_SORT_DESC (0x01<<0)
607 #define GRN_TABLE_GROUP_CALC_COUNT (0x01<<3)
608 #define GRN_TABLE_GROUP_CALC_MAX (0x01<<4)
609 #define GRN_TABLE_GROUP_CALC_MIN (0x01<<5)
610 #define GRN_TABLE_GROUP_CALC_SUM (0x01<<6)
611 #define GRN_TABLE_GROUP_CALC_AVG (0x01<<7)
624 #define GRN_OP_BUT GRN_OP_AND_NOT
712 const char *name,
unsigned int name_size,
716 const char *name,
unsigned int name_size);
725 const char *name,
unsigned int name_size,
726 const char *path, grn_obj_flags flags,
grn_obj *
type);
728 #define GRN_COLUMN_OPEN_OR_CREATE(ctx,table,name,name_size,path,flags,type,column) \
729 (((column) = grn_obj_column((ctx), (table), (name), (name_size))) ||\
730 ((column) = grn_column_create((ctx), (table), (name), (name_size), (path), (flags), (type))))
733 grn_id
id,
unsigned int section,
788 #define GRN_COLUMN_EACH(ctx,column,id,value,block) do {\
791 while ((_n = grn_obj_get_values(ctx, column, id, (void **)&value)) > 0) {\
792 for (; _n; _n--, id++, value++) {\
798 #define GRN_OBJ_SET_MASK (0x07)
799 #define GRN_OBJ_SET (0x01)
800 #define GRN_OBJ_INCR (0x02)
801 #define GRN_OBJ_DECR (0x03)
802 #define GRN_OBJ_APPEND (0x04)
803 #define GRN_OBJ_PREPEND (0x05)
804 #define GRN_OBJ_GET (0x01<<4)
805 #define GRN_OBJ_COMPARE (0x01<<5)
806 #define GRN_OBJ_LOCK (0x01<<6)
807 #define GRN_OBJ_UNLOCK (0x01<<7)
812 const char *name,
unsigned int name_size);
814 const char *name,
unsigned int name_size);
817 const char *name,
unsigned int name_size);
834 #define GRN_OBJ_GET_DOMAIN(obj) \
835 ((obj)->header.type == GRN_TABLE_NO_KEY ? GRN_ID_NIL : (obj)->header.domain)
871 const char *str,
unsigned int str_len,
872 unsigned int weight, grn_id domain);
875 unsigned int offset,
const char **str,
876 unsigned int *weight, grn_id *domain);
904 grn_obj **indexbuf,
int buf_size,
int *section);
937 #ifndef GRN_QUERY_AND
938 #define GRN_QUERY_AND '+'
940 #ifndef GRN_QUERY_AND_NOT
941 # ifdef GRN_QUERY_BUT
943 # define GRN_QUERY_AND_NOT GRN_QUERY_BUT
945 # define GRN_QUERY_AND_NOT '-'
948 #ifndef GRN_QUERY_ADJ_INC
949 #define GRN_QUERY_ADJ_INC '>'
951 #ifndef GRN_QUERY_ADJ_DEC
952 #define GRN_QUERY_ADJ_DEC '<'
954 #ifndef GRN_QUERY_ADJ_NEG
955 #define GRN_QUERY_ADJ_NEG '~'
957 #ifndef GRN_QUERY_PREFIX
958 #define GRN_QUERY_PREFIX '*'
960 #ifndef GRN_QUERY_PARENL
961 #define GRN_QUERY_PARENL '('
963 #ifndef GRN_QUERY_PARENR
964 #define GRN_QUERY_PARENR ')'
966 #ifndef GRN_QUERY_QUOTEL
967 #define GRN_QUERY_QUOTEL '"'
969 #ifndef GRN_QUERY_QUOTER
970 #define GRN_QUERY_QUOTER '"'
972 #ifndef GRN_QUERY_ESCAPE
973 #define GRN_QUERY_ESCAPE '\\'
975 #ifndef GRN_QUERY_COLUMN
976 #define GRN_QUERY_COLUMN ':'
988 #define GRN_SNIP_NORMALIZE (0x01<<0)
989 #define GRN_SNIP_COPY_TAG (0x01<<1)
990 #define GRN_SNIP_SKIP_LEADING_SPACES (0x01<<2)
992 #define GRN_SNIP_MAPPING_HTML_ESCAPE ((grn_snip_mapping *)-1)
997 unsigned int max_results,
998 const char *defaultopentag,
unsigned int defaultopentag_len,
999 const char *defaultclosetag,
unsigned int defaultclosetag_len,
1005 const char *keyword,
unsigned int keyword_len,
1006 const char *opentag,
unsigned int opentag_len,
1007 const char *closetag,
unsigned int closetag_len);
1009 const char *
string,
unsigned int string_len,
1010 unsigned int *nresults,
unsigned int *max_tagged_len);
1012 char *result,
unsigned int *result_len);
1016 #define GRN_LOG_TIME (0x01<<0)
1017 #define GRN_LOG_TITLE (0x01<<1)
1018 #define GRN_LOG_MESSAGE (0x01<<2)
1019 #define GRN_LOG_LOCATION (0x01<<3)
1028 void (*
func)(int,
const char *,
const char *,
const char *,
const char *,
void *);
1042 const char *timestamp,
const char *title,
const char *
message,
1054 #define GRN_ATTRIBUTE_PRINTF(fmt_pos) \
1055 __attribute__ ((format(printf, fmt_pos, fmt_pos + 1)))
1057 #define GRN_ATTRIBUTE_PRINTF(fmt_pos)
1066 #ifndef GRN_LOG_DEFAULT_LEVEL
1067 #define GRN_LOG_DEFAULT_LEVEL GRN_LOG_NOTICE
1075 #define GRN_LOG(ctx,level,...) do {\
1076 if (grn_logger_pass(ctx, level)) {\
1077 grn_logger_put(ctx, (level), __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__); \
1087 const char *timestamp,
const char *info,
const char *
message,
1107 #define GRN_QUERY_LOG(ctx, flag, mark, format, ...) do {\
1108 if (grn_query_logger_pass(ctx, flag)) {\
1109 grn_query_logger_put(ctx, (flag), (mark), format, __VA_ARGS__);\
1115 #define GRN_BULK_BUFSIZE (sizeof(grn_obj) - sizeof(grn_obj_header))
1116 #define GRN_BULK_OUTP(bulk) ((bulk)->header.impl_flags & GRN_OBJ_OUTPLACE)
1117 #define GRN_BULK_REWIND(bulk) do {\
1118 if ((bulk)->header.type == GRN_VECTOR) {\
1119 grn_obj *_body = (bulk)->u.v.body;\
1121 if (GRN_BULK_OUTP(_body)) {\
1122 (_body)->u.b.curr = (_body)->u.b.head;\
1124 (_body)->header.flags = 0;\
1127 (bulk)->u.v.n_sections = 0;\
1129 if (GRN_BULK_OUTP(bulk)) {\
1130 (bulk)->u.b.curr = (bulk)->u.b.head;\
1132 (bulk)->header.flags = 0;\
1136 #define GRN_BULK_WSIZE(bulk) \
1137 (GRN_BULK_OUTP(bulk)\
1138 ? ((bulk)->u.b.tail - (bulk)->u.b.head)\
1140 #define GRN_BULK_REST(bulk) \
1141 (GRN_BULK_OUTP(bulk)\
1142 ? ((bulk)->u.b.tail - (bulk)->u.b.curr)\
1143 : GRN_BULK_BUFSIZE - (bulk)->header.flags)
1144 #define GRN_BULK_VSIZE(bulk) \
1145 (GRN_BULK_OUTP(bulk)\
1146 ? ((bulk)->u.b.curr - (bulk)->u.b.head)\
1147 : (bulk)->header.flags)
1148 #define GRN_BULK_EMPTYP(bulk) \
1149 (GRN_BULK_OUTP(bulk)\
1150 ? ((bulk)->u.b.curr == (bulk)->u.b.head)\
1151 : !((bulk)->header.flags))
1152 #define GRN_BULK_HEAD(bulk) \
1153 (GRN_BULK_OUTP(bulk)\
1154 ? ((bulk)->u.b.head)\
1155 : (char *)&((bulk)->u.b.head))
1156 #define GRN_BULK_CURR(bulk) \
1157 (GRN_BULK_OUTP(bulk)\
1158 ? ((bulk)->u.b.curr)\
1159 : (char *)&((bulk)->u.b.head) + (bulk)->header.flags)
1160 #define GRN_BULK_TAIL(bulk) \
1161 (GRN_BULK_OUTP(bulk)\
1162 ? ((bulk)->u.b.tail)\
1163 : (char *)&((bulk)[1]))
1168 const char *str,
unsigned int len);
1170 const char *str,
unsigned int from,
unsigned int len);
1188 const char *str,
unsigned int len);
1190 const char *s,
const char *e,
char d);
1192 const char *s,
unsigned int len);
1197 #define GRN_OBJ_FORMAT_WITH_COLUMN_NAMES (0x01<<0)
1198 #define GRN_OBJ_FORMAT_ASARRAY (0x01<<3)
1214 #define GRN_OBJ_FORMAT_INIT(format,format_nhits,format_offset,format_limit,format_hits_offset) do { \
1215 GRN_PTR_INIT(&(format)->columns, GRN_OBJ_VECTOR, GRN_ID_NIL);\
1216 (format)->nhits = (format_nhits);\
1217 (format)->offset = (format_offset);\
1218 (format)->limit = (format_limit);\
1219 (format)->hits_offset = (format_hits_offset);\
1220 (format)->expression = NULL;\
1223 #define GRN_OBJ_FORMAT_FIN(ctx,format) do {\
1224 int ncolumns = GRN_BULK_VSIZE(&(format)->columns) / sizeof(grn_obj *);\
1225 grn_obj **columns = (grn_obj **)GRN_BULK_HEAD(&(format)->columns);\
1226 while (ncolumns--) { grn_obj_unlink((ctx), *columns++); }\
1227 GRN_OBJ_FIN((ctx), &(format)->columns);\
1228 if ((format)->expression) { GRN_OBJ_FIN((ctx), (format)->expression); } \
1235 const char *file,
int line);
1238 const char *name,
int nelements);
1241 const char *name,
int nelements);
1248 const char *value,
unsigned int value_len);
1256 void (*func)(
grn_ctx *,
int,
void *),
1265 #define GRN_OBJ_DO_SHALLOW_COPY (GRN_OBJ_REFER|GRN_OBJ_OUTPLACE)
1266 #define GRN_OBJ_VECTOR (0x01<<7)
1268 #define GRN_OBJ_MUTABLE(obj) ((obj) && (obj)->header.type <= GRN_VECTOR)
1270 #define GRN_VALUE_FIX_SIZE_INIT(obj,flags,domain)\
1271 GRN_OBJ_INIT((obj), ((flags) & GRN_OBJ_VECTOR) ? GRN_UVECTOR : GRN_BULK,\
1272 ((flags) & GRN_OBJ_DO_SHALLOW_COPY), (domain))
1273 #define GRN_VALUE_VAR_SIZE_INIT(obj,flags,domain)\
1274 GRN_OBJ_INIT((obj), ((flags) & GRN_OBJ_VECTOR) ? GRN_VECTOR : GRN_BULK,\
1275 ((flags) & GRN_OBJ_DO_SHALLOW_COPY), (domain))
1277 #define GRN_VOID_INIT(obj) GRN_OBJ_INIT((obj), GRN_VOID, 0, GRN_DB_VOID)
1278 #define GRN_TEXT_INIT(obj,flags) \
1279 GRN_VALUE_VAR_SIZE_INIT(obj, flags, GRN_DB_TEXT)
1280 #define GRN_SHORT_TEXT_INIT(obj,flags) \
1281 GRN_VALUE_VAR_SIZE_INIT(obj, flags, GRN_DB_SHORT_TEXT)
1282 #define GRN_LONG_TEXT_INIT(obj,flags) \
1283 GRN_VALUE_VAR_SIZE_INIT(obj, flags, GRN_DB_LONG_TEXT)
1284 #define GRN_TEXT_SET_REF(obj,str,len) do {\
1285 (obj)->u.b.head = (char *)(str);\
1286 (obj)->u.b.curr = (char *)(str) + (len);\
1288 #define GRN_TEXT_SET(ctx,obj,str,len) do {\
1289 if ((obj)->header.impl_flags & GRN_OBJ_REFER) {\
1290 GRN_TEXT_SET_REF((obj), (str), (len));\
1292 grn_bulk_write_from((ctx), (obj), (const char *)(str), 0, (unsigned int)(len));\
1295 #define GRN_TEXT_PUT(ctx,obj,str,len) \
1296 grn_bulk_write((ctx), (obj), (const char *)(str), (unsigned int)(len))
1297 #define GRN_TEXT_PUTC(ctx,obj,c) do {\
1298 char _c = (c); grn_bulk_write((ctx), (obj), &_c, 1);\
1301 #define GRN_TEXT_PUTS(ctx,obj,str) GRN_TEXT_PUT((ctx), (obj), (str), strlen(str))
1302 #define GRN_TEXT_SETS(ctx,obj,str) GRN_TEXT_SET((ctx), (obj), (str), strlen(str))
1303 #define GRN_TEXT_VALUE(obj) GRN_BULK_HEAD(obj)
1304 #define GRN_TEXT_LEN(obj) GRN_BULK_VSIZE(obj)
1306 #define GRN_BOOL_INIT(obj,flags) \
1307 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_BOOL)
1308 #define GRN_INT8_INIT(obj,flags) \
1309 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_INT8)
1310 #define GRN_UINT8_INIT(obj,flags) \
1311 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_UINT8)
1312 #define GRN_INT16_INIT(obj,flags) \
1313 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_INT16)
1314 #define GRN_UINT16_INIT(obj,flags) \
1315 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_UINT16)
1316 #define GRN_INT32_INIT(obj,flags) \
1317 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_INT32)
1318 #define GRN_UINT32_INIT(obj,flags) \
1319 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_UINT32)
1320 #define GRN_INT64_INIT(obj,flags) \
1321 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_INT64)
1322 #define GRN_UINT64_INIT(obj,flags) \
1323 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_UINT64)
1324 #define GRN_FLOAT_INIT(obj,flags) \
1325 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_FLOAT)
1326 #define GRN_TIME_INIT(obj,flags) \
1327 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_TIME)
1328 #define GRN_RECORD_INIT GRN_VALUE_FIX_SIZE_INIT
1329 #define GRN_PTR_INIT(obj,flags,domain)\
1330 GRN_OBJ_INIT((obj), ((flags) & GRN_OBJ_VECTOR) ? GRN_PVECTOR : GRN_PTR,\
1331 ((flags) & GRN_OBJ_DO_SHALLOW_COPY), (domain))
1332 #define GRN_TOKYO_GEO_POINT_INIT(obj,flags) \
1333 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_TOKYO_GEO_POINT)
1334 #define GRN_WGS84_GEO_POINT_INIT(obj,flags) \
1335 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_WGS84_GEO_POINT)
1337 #define GRN_BOOL_SET(ctx,obj,val) do {\
1338 unsigned char _val = (unsigned char)(val);\
1339 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(unsigned char));\
1341 #define GRN_INT8_SET(ctx,obj,val) do {\
1342 signed char _val = (signed char)(val);\
1343 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(signed char));\
1345 #define GRN_UINT8_SET(ctx,obj,val) do {\
1346 unsigned char _val = (unsigned char)(val);\
1347 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(unsigned char));\
1349 #define GRN_INT16_SET(ctx,obj,val) do {\
1350 signed short _val = (signed short)(val);\
1351 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(signed short));\
1353 #define GRN_UINT16_SET(ctx,obj,val) do {\
1354 unsigned short _val = (unsigned short)(val);\
1355 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(unsigned short));\
1357 #define GRN_INT32_SET(ctx,obj,val) do {\
1358 int _val = (int)(val);\
1359 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(int));\
1361 #define GRN_UINT32_SET(ctx,obj,val) do {\
1362 unsigned int _val = (unsigned int)(val);\
1363 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(unsigned int));\
1365 #define GRN_INT64_SET(ctx,obj,val) do {\
1366 long long int _val = (long long int)(val);\
1367 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(long long int));\
1369 #define GRN_UINT64_SET(ctx,obj,val) do {\
1370 long long unsigned int _val = (long long unsigned int)(val);\
1371 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(long long unsigned int));\
1373 #define GRN_FLOAT_SET(ctx,obj,val) do {\
1374 double _val = (double)(val);\
1375 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(double));\
1377 #define GRN_TIME_SET GRN_INT64_SET
1378 #define GRN_RECORD_SET(ctx,obj,val) do {\
1379 grn_id _val = (grn_id)(val);\
1380 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(grn_id));\
1382 #define GRN_PTR_SET(ctx,obj,val) do {\
1383 grn_obj *_val = (grn_obj *)(val);\
1384 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(grn_obj *));\
1387 #define GRN_GEO_DEGREE2MSEC(degree)\
1388 ((int)((degree) * 3600 * 1000 + ((degree) > 0 ? 0.5 : -0.5)))
1389 #define GRN_GEO_MSEC2DEGREE(msec)\
1390 ((((int)(msec)) / 3600.0) * 0.001)
1392 #define GRN_GEO_POINT_SET(ctx,obj,_latitude,_longitude) do {\
1393 grn_geo_point _val;\
1394 _val.latitude = (int)(_latitude);\
1395 _val.longitude = (int)(_longitude);\
1396 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(grn_geo_point));\
1399 #define GRN_BOOL_SET_AT(ctx,obj,offset,val) do {\
1400 unsigned char _val = (unsigned char)(val);\
1401 grn_bulk_write_from((ctx), (obj), (char *)&_val,\
1402 (offset), sizeof(unsigned char));\
1404 #define GRN_INT8_SET_AT(ctx,obj,offset,val) do {\
1405 signed char _val = (signed char)(val);\
1406 grn_bulk_write_from((ctx), (obj), (char *)&_val,\
1407 (offset) * sizeof(signed char), sizeof(signed char));\
1409 #define GRN_UINT8_SET_AT(ctx,obj,offset,val) do { \
1410 unsigned char _val = (unsigned char)(val);\
1411 grn_bulk_write_from((ctx), (obj), (char *)&_val,\
1412 (offset) * sizeof(unsigned char), sizeof(unsigned char));\
1414 #define GRN_INT16_SET_AT(ctx,obj,offset,val) do {\
1415 signed short _val = (signed short)(val);\
1416 grn_bulk_write_from((ctx), (obj), (char *)&_val,\
1417 (offset) * sizeof(signed short), sizeof(signed short));\
1419 #define GRN_UINT16_SET_AT(ctx,obj,offset,val) do { \
1420 unsigned short _val = (unsigned short)(val);\
1421 grn_bulk_write_from((ctx), (obj), (char *)&_val,\
1422 (offset) * sizeof(unsigned short), sizeof(unsigned short));\
1424 #define GRN_INT32_SET_AT(ctx,obj,offset,val) do {\
1425 int _val = (int)(val);\
1426 grn_bulk_write_from((ctx), (obj), (char *)&_val,\
1427 (offset) * sizeof(int), sizeof(int));\
1429 #define GRN_UINT32_SET_AT(ctx,obj,offset,val) do { \
1430 unsigned int _val = (unsigned int)(val);\
1431 grn_bulk_write_from((ctx), (obj), (char *)&_val,\
1432 (offset) * sizeof(unsigned int), sizeof(unsigned int));\
1434 #define GRN_INT64_SET_AT(ctx,obj,offset,val) do {\
1435 long long int _val = (long long int)(val);\
1436 grn_bulk_write_from((ctx), (obj), (char *)&_val,\
1437 (offset) * sizeof(long long int), sizeof(long long int));\
1439 #define GRN_UINT64_SET_AT(ctx,obj,offset,val) do {\
1440 long long unsigned int _val = (long long unsigned int)(val);\
1441 grn_bulk_write_from((ctx), (obj), (char *)&_val,\
1442 (offset) * sizeof(long long unsigned int),\
1443 sizeof(long long unsigned int));\
1445 #define GRN_FLOAT_SET_AT(ctx,obj,offset,val) do {\
1446 double _val = (double)(val);\
1447 grn_bulk_write_from((ctx), (obj), (char *)&_val,\
1448 (offset) * sizeof(double), sizeof(double));\
1450 #define GRN_TIME_SET_AT GRN_INT64_SET_AT
1451 #define GRN_RECORD_SET_AT(ctx,obj,offset,val) do {\
1452 grn_id _val = (grn_id)(val);\
1453 grn_bulk_write_from((ctx), (obj), (char *)&_val,\
1454 (offset) * sizeof(grn_id), sizeof(grn_id));\
1456 #define GRN_PTR_SET_AT(ctx,obj,offset,val) do {\
1457 grn_obj *_val = (grn_obj *)(val);\
1458 grn_bulk_write_from((ctx), (obj), (char *)&_val,\
1459 (offset) * sizeof(grn_obj *), sizeof(grn_obj *));\
1462 #define GRN_TIME_USEC_PER_SEC 1000000
1463 #define GRN_TIME_PACK(sec, usec) ((long long int)(sec) * GRN_TIME_USEC_PER_SEC + (usec))
1464 #define GRN_TIME_UNPACK(time_value, sec, usec) do {\
1465 sec = (time_value) / GRN_TIME_USEC_PER_SEC;\
1466 usec = (time_value) % GRN_TIME_USEC_PER_SEC;\
1471 #define GRN_TIME_NOW(ctx,obj) (grn_time_now((ctx), (obj)))
1473 #define GRN_BOOL_VALUE(obj) (*((unsigned char *)GRN_BULK_HEAD(obj)))
1474 #define GRN_INT8_VALUE(obj) (*((signed char *)GRN_BULK_HEAD(obj)))
1475 #define GRN_UINT8_VALUE(obj) (*((unsigned char *)GRN_BULK_HEAD(obj)))
1476 #define GRN_INT16_VALUE(obj) (*((signed short *)GRN_BULK_HEAD(obj)))
1477 #define GRN_UINT16_VALUE(obj) (*((unsigned short *)GRN_BULK_HEAD(obj)))
1478 #define GRN_INT32_VALUE(obj) (*((int *)GRN_BULK_HEAD(obj)))
1479 #define GRN_UINT32_VALUE(obj) (*((unsigned int *)GRN_BULK_HEAD(obj)))
1480 #define GRN_INT64_VALUE(obj) (*((long long int *)GRN_BULK_HEAD(obj)))
1481 #define GRN_UINT64_VALUE(obj) (*((long long unsigned int *)GRN_BULK_HEAD(obj)))
1482 #define GRN_FLOAT_VALUE(obj) (*((double *)GRN_BULK_HEAD(obj)))
1483 #define GRN_TIME_VALUE GRN_INT64_VALUE
1484 #define GRN_RECORD_VALUE(obj) (*((grn_id *)GRN_BULK_HEAD(obj)))
1485 #define GRN_PTR_VALUE(obj) (*((grn_obj **)GRN_BULK_HEAD(obj)))
1486 #define GRN_GEO_POINT_VALUE(obj,_latitude,_longitude) do {\
1487 grn_geo_point *_val = (grn_geo_point *)GRN_BULK_HEAD(obj);\
1488 _latitude = _val->latitude;\
1489 _longitude = _val->longitude;\
1492 #define GRN_BOOL_VALUE_AT(obj,offset) (((unsigned char *)GRN_BULK_HEAD(obj))[offset])
1493 #define GRN_INT8_VALUE_AT(obj,offset) (((signed char *)GRN_BULK_HEAD(obj))[offset])
1494 #define GRN_UINT8_VALUE_AT(obj,offset) (((unsigned char *)GRN_BULK_HEAD(obj))[offset])
1495 #define GRN_INT16_VALUE_AT(obj,offset) (((signed short *)GRN_BULK_HEAD(obj))[offset])
1496 #define GRN_UINT16_VALUE_AT(obj,offset) (((unsigned short *)GRN_BULK_HEAD(obj))[offset])
1497 #define GRN_INT32_VALUE_AT(obj,offset) (((int *)GRN_BULK_HEAD(obj))[offset])
1498 #define GRN_UINT32_VALUE_AT(obj,offset) (((unsigned int *)GRN_BULK_HEAD(obj))[offset])
1499 #define GRN_INT64_VALUE_AT(obj,offset) (((long long int *)GRN_BULK_HEAD(obj))[offset])
1500 #define GRN_UINT64_VALUE_AT(obj,offset) (((long long unsigned int *)GRN_BULK_HEAD(obj))[offset])
1501 #define GRN_FLOAT_VALUE_AT(obj,offset) (((double *)GRN_BULK_HEAD(obj))[offset])
1502 #define GRN_TIME_VALUE_AT GRN_INT64_VALUE_AT
1503 #define GRN_RECORD_VALUE_AT(obj,offset) (((grn_id *)GRN_BULK_HEAD(obj))[offset])
1504 #define GRN_PTR_VALUE_AT(obj,offset) (((grn_obj **)GRN_BULK_HEAD(obj))[offset])
1506 #define GRN_BOOL_PUT(ctx,obj,val) do {\
1507 unsigned char _val = (unsigned char)(val);\
1508 grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(unsigned char));\
1510 #define GRN_INT8_PUT(ctx,obj,val) do {\
1511 signed char _val = (signed char)(val); grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(signed char));\
1513 #define GRN_UINT8_PUT(ctx,obj,val) do {\
1514 unsigned char _val = (unsigned char)(val);\
1515 grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(unsigned char));\
1517 #define GRN_INT16_PUT(ctx,obj,val) do {\
1518 signed short _val = (signed short)(val); grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(signed short));\
1520 #define GRN_UINT16_PUT(ctx,obj,val) do {\
1521 unsigned short _val = (unsigned short)(val);\
1522 grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(unsigned short));\
1524 #define GRN_INT32_PUT(ctx,obj,val) do {\
1525 int _val = (int)(val); grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(int));\
1527 #define GRN_UINT32_PUT(ctx,obj,val) do {\
1528 unsigned int _val = (unsigned int)(val);\
1529 grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(unsigned int));\
1531 #define GRN_INT64_PUT(ctx,obj,val) do {\
1532 long long int _val = (long long int)(val);\
1533 grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(long long int));\
1535 #define GRN_UINT64_PUT(ctx,obj,val) do {\
1536 long long unsigned int _val = (long long unsigned int)(val);\
1537 grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(long long unsigned int));\
1539 #define GRN_FLOAT_PUT(ctx,obj,val) do {\
1540 double _val = (double)(val); grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(double));\
1542 #define GRN_TIME_PUT GRN_INT64_PUT
1543 #define GRN_RECORD_PUT(ctx,obj,val) do {\
1544 grn_id _val = (grn_id)(val); grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(grn_id));\
1546 #define GRN_PTR_PUT(ctx,obj,val) do {\
1547 grn_obj *_val = (grn_obj *)(val);\
1548 grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(grn_obj *));\
1565 #define GRN_STR_REMOVEBLANK (0x01<<0)
1566 #define GRN_STR_WITH_CTYPES (0x01<<1)
1567 #define GRN_STR_WITH_CHECKS (0x01<<2)
1568 #define GRN_STR_NORMALIZE GRN_OBJ_KEY_NORMALIZE
1576 #define GRN_STRING_REMOVE_BLANK (0x01<<0)
1577 #define GRN_STRING_WITH_TYPES (0x01<<1)
1578 #define GRN_STRING_WITH_CHECKS (0x01<<2)
1579 #define GRN_STRING_REMOVE_TOKENIZED_DELIMITER (0x01<<3)
1581 #define GRN_NORMALIZER_AUTO ((grn_obj *)1)
1583 #define GRN_CHAR_BLANK 0x80
1584 #define GRN_CHAR_IS_BLANK(c) ((c) & (GRN_CHAR_BLANK))
1585 #define GRN_CHAR_TYPE(c) ((c) & 0x7f)
1600 unsigned int length_in_bytes,
1601 grn_obj *normalizer,
int flags);
1603 const char **original,
1604 unsigned int *length_in_bytes);
1607 const char **normalized,
1608 unsigned int *length_in_bytes,
1609 unsigned int *n_characters);
1612 unsigned int length_in_bytes,
1613 unsigned int n_characters);
1621 unsigned char *types);
1632 const char *name,
unsigned int name_size);
1634 const char *name,
unsigned int name_size);
1642 const char *str,
unsigned int str_size,
1649 const char *query,
int query_size,
1650 const char *target_characters,
1651 char escape_character,
1654 const char *query,
int query_size,
1663 grn_id domain, grn_obj_flags flags);
1669 const char *str,
unsigned int str_size,
grn_obj *res);
1671 #define GRN_EXPR_CREATE_FOR_QUERY(ctx,table,expr,var) do {\
1672 if (((expr) = grn_expr_create((ctx), NULL, 0)) &&\
1673 ((var) = grn_expr_add_var((ctx), (expr), NULL, 0))) {\
1674 GRN_RECORD_INIT((var), 0, grn_obj_id((ctx), (table)));\
1682 #define GRN_EXPR_SYNTAX_QUERY (0x00)
1683 #define GRN_EXPR_SYNTAX_SCRIPT (0x01)
1684 #define GRN_EXPR_SYNTAX_OUTPUT_COLUMNS (0x20)
1685 #define GRN_EXPR_ALLOW_PRAGMA (0x02)
1686 #define GRN_EXPR_ALLOW_COLUMN (0x04)
1687 #define GRN_EXPR_ALLOW_UPDATE (0x08)
1688 #define GRN_EXPR_ALLOW_LEADING_NOT (0x10)
1691 const char *str,
unsigned int str_size,
1696 unsigned int width,
unsigned int max_results,
1697 unsigned int n_tags,
1698 const char **opentags,
unsigned int *opentag_lens,
1699 const char **closetags,
unsigned int *closetag_lens,
1703 const char *str,
unsigned int str_size,
1704 grn_obj *table,
unsigned int *nkeys);
1714 unsigned int name_size,
1718 unsigned int max_n_subrecs);
1721 grn_id
id, grn_id *subrecbuf,
1722 int *scorebuf,
int buf_size);
1725 const char *str,
unsigned int str_len,
1729 const char *table,
unsigned int table_len,
1730 const char *columns,
unsigned int columns_len,
1731 const char *values,
unsigned int values_len,
1732 const char *ifexists,
unsigned int ifexists_len,
1733 const char *each,
unsigned int each_len);
1735 #define GRN_CTX_MORE (0x01<<0)
1736 #define GRN_CTX_TAIL (0x01<<1)
1737 #define GRN_CTX_HEAD (0x01<<2)
1738 #define GRN_CTX_QUIET (0x01<<3)
1739 #define GRN_CTX_QUIT (0x01<<4)
1766 unsigned int value_size,
unsigned int flags);
1773 unsigned int key_size,
void **value,
int *added);
1775 unsigned int key_size,
void **value);
1781 const void *value,
int flags);
1794 const void *key,
unsigned int key_size,
1798 const void *min,
unsigned int min_size,
1799 const void *max,
unsigned int max_size,
1800 int offset,
int limit,
int flags);
1807 const void *value,
int flags);
1810 void **key,
unsigned int *key_size,
void **value);
1815 #define GRN_HASH_EACH(ctx,hash,id,key,key_size,value,block) do {\
1816 grn_hash_cursor *_sc = grn_hash_cursor_open(ctx, hash, NULL, 0, NULL, 0, 0, -1, 0); \
1819 while ((id = grn_hash_cursor_next(ctx, _sc))) {\
1820 grn_hash_cursor_get_key_value(ctx, _sc, (void **)(key),\
1821 (key_size), (void **)(value));\
1824 grn_hash_cursor_close(ctx, _sc);\
1834 unsigned int value_size,
unsigned int flags);
1840 grn_id
id,
void *func_arg),
1844 grn_id
id,
void *func_arg),
1849 const void *value,
int flags);
1851 grn_id min, grn_id max,
1852 int offset,
int limit,
int flags);
1856 const void *value,
int flags);
1867 #define GRN_ARRAY_EACH(ctx,array,head,tail,id,value,block) do {\
1868 grn_array_cursor *_sc = grn_array_cursor_open(ctx, array, head, tail, 0, -1, 0); \
1871 while ((id = grn_array_cursor_next(ctx, _sc))) {\
1872 grn_array_cursor_get_value(ctx, _sc, (void **)(value));\
1875 grn_array_cursor_close(ctx, _sc); \
1885 unsigned int value_size,
unsigned int flags);
1894 unsigned int key_size,
void **value);
1896 unsigned int key_size,
void **value,
int *added);
1902 const void *value,
int flags);
1923 const void *key,
unsigned int key_size,
grn_hash *h);
1925 const void *key,
unsigned int key_size,
grn_hash *h);
1927 const void *key,
unsigned int key_size);
1932 const void *min,
unsigned int min_size,
1933 const void *max,
unsigned int max_size,
1934 int offset,
int limit,
int flags);
1942 void **key,
unsigned int *key_size,
void **value);
1944 const void *value,
int flags);
1948 #define GRN_PAT_EACH(ctx,pat,id,key,key_size,value,block) do { \
1949 grn_pat_cursor *_sc = grn_pat_cursor_open(ctx, pat, NULL, 0, NULL, 0, 0, -1, 0); \
1952 while ((id = grn_pat_cursor_next(ctx, _sc))) {\
1953 grn_pat_cursor_get_key_value(ctx, _sc, (void **)(key),\
1954 (key_size), (void **)(value));\
1957 grn_pat_cursor_close(ctx, _sc);\
1967 unsigned int value_size,
unsigned int flags);
1976 unsigned int key_size,
void **value);
1978 unsigned int key_size,
void **value,
int *added);
1989 const void *dest_key,
unsigned int dest_key_size);
1991 const void *src_key,
unsigned int src_key_size,
1992 const void *dest_key,
unsigned int dest_key_size);
1997 const void *min,
unsigned int min_size,
1998 const void *max,
unsigned int max_size,
1999 int offset,
int limit,
int flags);
2007 #define GRN_DAT_EACH(ctx,dat,id,key,key_size,block) do {\
2008 grn_dat_cursor *_sc = grn_dat_cursor_open(ctx, dat, NULL, 0, NULL, 0, 0, -1, 0);\
2011 unsigned int *_ks = (key_size);\
2013 while ((id = grn_dat_cursor_next(ctx, _sc))) {\
2014 int _ks_raw = grn_dat_cursor_get_key(ctx, _sc, (const void **)(key));\
2015 *(_ks) = (unsigned int)_ks_raw;\
2019 while ((id = grn_dat_cursor_next(ctx, _sc))) {\
2020 grn_dat_cursor_get_key(ctx, _sc, (const void **)(key));\
2024 grn_dat_cursor_close(ctx, _sc);\
2036 grn_id rid,
unsigned int section,
grn_obj *value);