1 /* 2 Copyright(C) 2009-2018 Brazil 3 Copyright(C) 2018-2022 Sutou Kouhei <kou@clear-code.com> 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 This library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with this library; if not, write to the Free Software 17 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 */ 19 module groonga_d.groonga; 20 21 22 private static import core.stdc.config; 23 private static import core.stdc.stdarg; 24 private static import core.sys.posix.sys.types; 25 26 extern(C): 27 nothrow @nogc: 28 29 //ToDo: temp 30 version (Windows) { 31 alias off_t = core.stdc.config.c_ulong; 32 } else { 33 alias off_t = core.sys.posix.sys.types.off_t; 34 } 35 36 /+ 37 #ifndef GRN_API 38 # if defined(_WIN32) || defined(_WIN64) 39 # define GRN_API __declspec(dllimport) 40 # else 41 # define GRN_API 42 # endif /* defined(_WIN32) || defined(_WIN64) */ 43 #endif /* GRN_API */ 44 +/ 45 46 alias grn_id = uint; 47 /* Deprecated since 9.0.2. Use bool directly. */ 48 deprecated alias grn_bool = bool; 49 50 enum GRN_ID_NIL = 0x00; 51 enum GRN_ID_MAX = 0x3FFFFFFF; 52 53 enum GRN_TRUE = true; 54 enum GRN_FALSE = false; 55 56 enum grn_rc 57 { 58 GRN_SUCCESS = 0, 59 GRN_END_OF_DATA = 1, 60 GRN_UNKNOWN_ERROR = -1, 61 GRN_OPERATION_NOT_PERMITTED = -2, 62 GRN_NO_SUCH_FILE_OR_DIRECTORY = -3, 63 GRN_NO_SUCH_PROCESS = -4, 64 GRN_INTERRUPTED_FUNCTION_CALL = -5, 65 GRN_INPUT_OUTPUT_ERROR = -6, 66 GRN_NO_SUCH_DEVICE_OR_ADDRESS = -7, 67 GRN_ARG_LIST_TOO_LONG = -8, 68 GRN_EXEC_FORMAT_ERROR = -9, 69 GRN_BAD_FILE_DESCRIPTOR = -10, 70 GRN_NO_CHILD_PROCESSES = -11, 71 GRN_RESOURCE_TEMPORARILY_UNAVAILABLE = -12, 72 GRN_NOT_ENOUGH_SPACE = -13, 73 GRN_PERMISSION_DENIED = -14, 74 GRN_BAD_ADDRESS = -15, 75 GRN_RESOURCE_BUSY = -16, 76 GRN_FILE_EXISTS = -17, 77 GRN_IMPROPER_LINK = -18, 78 GRN_NO_SUCH_DEVICE = -19, 79 GRN_NOT_A_DIRECTORY = -20, 80 GRN_IS_A_DIRECTORY = -21, 81 GRN_INVALID_ARGUMENT = -22, 82 GRN_TOO_MANY_OPEN_FILES_IN_SYSTEM = -23, 83 GRN_TOO_MANY_OPEN_FILES = -24, 84 GRN_INAPPROPRIATE_I_O_CONTROL_OPERATION = -25, 85 GRN_FILE_TOO_LARGE = -26, 86 GRN_NO_SPACE_LEFT_ON_DEVICE = -27, 87 GRN_INVALID_SEEK = -28, 88 GRN_READ_ONLY_FILE_SYSTEM = -29, 89 GRN_TOO_MANY_LINKS = -30, 90 GRN_BROKEN_PIPE = -31, 91 GRN_DOMAIN_ERROR = -32, 92 GRN_RESULT_TOO_LARGE = -33, 93 GRN_RESOURCE_DEADLOCK_AVOIDED = -34, 94 GRN_NO_MEMORY_AVAILABLE = -35, 95 GRN_FILENAME_TOO_LONG = -36, 96 GRN_NO_LOCKS_AVAILABLE = -37, 97 GRN_FUNCTION_NOT_IMPLEMENTED = -38, 98 GRN_DIRECTORY_NOT_EMPTY = -39, 99 GRN_ILLEGAL_BYTE_SEQUENCE = -40, 100 GRN_SOCKET_NOT_INITIALIZED = -41, 101 GRN_OPERATION_WOULD_BLOCK = -42, 102 GRN_ADDRESS_IS_NOT_AVAILABLE = -43, 103 GRN_NETWORK_IS_DOWN = -44, 104 GRN_NO_BUFFER = -45, 105 GRN_SOCKET_IS_ALREADY_CONNECTED = -46, 106 GRN_SOCKET_IS_NOT_CONNECTED = -47, 107 GRN_SOCKET_IS_ALREADY_SHUTDOWNED = -48, 108 GRN_OPERATION_TIMEOUT = -49, 109 GRN_CONNECTION_REFUSED = -50, 110 GRN_RANGE_ERROR = -51, 111 GRN_TOKENIZER_ERROR = -52, 112 GRN_FILE_CORRUPT = -53, 113 GRN_INVALID_FORMAT = -54, 114 GRN_OBJECT_CORRUPT = -55, 115 GRN_TOO_MANY_SYMBOLIC_LINKS = -56, 116 GRN_NOT_SOCKET = -57, 117 GRN_OPERATION_NOT_SUPPORTED = -58, 118 GRN_ADDRESS_IS_IN_USE = -59, 119 GRN_ZLIB_ERROR = -60, 120 GRN_LZ4_ERROR = -61, 121 122 /** 123 * Just for backward compatibility. We'll remove it at 5.0.0. 124 */ 125 GRN_LZO_ERROR = GRN_LZ4_ERROR, 126 127 GRN_STACK_OVER_FLOW = -62, 128 GRN_SYNTAX_ERROR = -63, 129 GRN_RETRY_MAX = -64, 130 GRN_INCOMPATIBLE_FILE_FORMAT = -65, 131 GRN_UPDATE_NOT_ALLOWED = -66, 132 GRN_TOO_SMALL_OFFSET = -67, 133 GRN_TOO_LARGE_OFFSET = -68, 134 GRN_TOO_SMALL_LIMIT = -69, 135 GRN_CAS_ERROR = -70, 136 GRN_UNSUPPORTED_COMMAND_VERSION = -71, 137 GRN_NORMALIZER_ERROR = -72, 138 GRN_TOKEN_FILTER_ERROR = -73, 139 GRN_COMMAND_ERROR = -74, 140 GRN_PLUGIN_ERROR = -75, 141 GRN_SCORER_ERROR = -76, 142 GRN_CANCEL = -77, 143 GRN_WINDOW_FUNCTION_ERROR = -78, 144 GRN_ZSTD_ERROR = -79, 145 GRN_CONNECTION_RESET = -80, 146 } 147 148 //Declaration name in C language 149 enum 150 { 151 GRN_SUCCESS = .grn_rc.GRN_SUCCESS, 152 GRN_END_OF_DATA = .grn_rc.GRN_END_OF_DATA, 153 GRN_UNKNOWN_ERROR = .grn_rc.GRN_UNKNOWN_ERROR, 154 GRN_OPERATION_NOT_PERMITTED = .grn_rc.GRN_OPERATION_NOT_PERMITTED, 155 GRN_NO_SUCH_FILE_OR_DIRECTORY = .grn_rc.GRN_NO_SUCH_FILE_OR_DIRECTORY, 156 GRN_NO_SUCH_PROCESS = .grn_rc.GRN_NO_SUCH_PROCESS, 157 GRN_INTERRUPTED_FUNCTION_CALL = .grn_rc.GRN_INTERRUPTED_FUNCTION_CALL, 158 GRN_INPUT_OUTPUT_ERROR = .grn_rc.GRN_INPUT_OUTPUT_ERROR, 159 GRN_NO_SUCH_DEVICE_OR_ADDRESS = .grn_rc.GRN_NO_SUCH_DEVICE_OR_ADDRESS, 160 GRN_ARG_LIST_TOO_LONG = .grn_rc.GRN_ARG_LIST_TOO_LONG, 161 GRN_EXEC_FORMAT_ERROR = .grn_rc.GRN_EXEC_FORMAT_ERROR, 162 GRN_BAD_FILE_DESCRIPTOR = .grn_rc.GRN_BAD_FILE_DESCRIPTOR, 163 GRN_NO_CHILD_PROCESSES = .grn_rc.GRN_NO_CHILD_PROCESSES, 164 GRN_RESOURCE_TEMPORARILY_UNAVAILABLE = .grn_rc.GRN_RESOURCE_TEMPORARILY_UNAVAILABLE, 165 GRN_NOT_ENOUGH_SPACE = .grn_rc.GRN_NOT_ENOUGH_SPACE, 166 GRN_PERMISSION_DENIED = .grn_rc.GRN_PERMISSION_DENIED, 167 GRN_BAD_ADDRESS = .grn_rc.GRN_BAD_ADDRESS, 168 GRN_RESOURCE_BUSY = .grn_rc.GRN_RESOURCE_BUSY, 169 GRN_FILE_EXISTS = .grn_rc.GRN_FILE_EXISTS, 170 GRN_IMPROPER_LINK = .grn_rc.GRN_IMPROPER_LINK, 171 GRN_NO_SUCH_DEVICE = .grn_rc.GRN_NO_SUCH_DEVICE, 172 GRN_NOT_A_DIRECTORY = .grn_rc.GRN_NOT_A_DIRECTORY, 173 GRN_IS_A_DIRECTORY = .grn_rc.GRN_IS_A_DIRECTORY, 174 GRN_INVALID_ARGUMENT = .grn_rc.GRN_INVALID_ARGUMENT, 175 GRN_TOO_MANY_OPEN_FILES_IN_SYSTEM = .grn_rc.GRN_TOO_MANY_OPEN_FILES_IN_SYSTEM, 176 GRN_TOO_MANY_OPEN_FILES = .grn_rc.GRN_TOO_MANY_OPEN_FILES, 177 GRN_INAPPROPRIATE_I_O_CONTROL_OPERATION = .grn_rc.GRN_INAPPROPRIATE_I_O_CONTROL_OPERATION, 178 GRN_FILE_TOO_LARGE = .grn_rc.GRN_FILE_TOO_LARGE, 179 GRN_NO_SPACE_LEFT_ON_DEVICE = .grn_rc.GRN_NO_SPACE_LEFT_ON_DEVICE, 180 GRN_INVALID_SEEK = .grn_rc.GRN_INVALID_SEEK, 181 GRN_READ_ONLY_FILE_SYSTEM = .grn_rc.GRN_READ_ONLY_FILE_SYSTEM, 182 GRN_TOO_MANY_LINKS = .grn_rc.GRN_TOO_MANY_LINKS, 183 GRN_BROKEN_PIPE = .grn_rc.GRN_BROKEN_PIPE, 184 GRN_DOMAIN_ERROR = .grn_rc.GRN_DOMAIN_ERROR, 185 GRN_RESULT_TOO_LARGE = .grn_rc.GRN_RESULT_TOO_LARGE, 186 GRN_RESOURCE_DEADLOCK_AVOIDED = .grn_rc.GRN_RESOURCE_DEADLOCK_AVOIDED, 187 GRN_NO_MEMORY_AVAILABLE = .grn_rc.GRN_NO_MEMORY_AVAILABLE, 188 GRN_FILENAME_TOO_LONG = .grn_rc.GRN_FILENAME_TOO_LONG, 189 GRN_NO_LOCKS_AVAILABLE = .grn_rc.GRN_NO_LOCKS_AVAILABLE, 190 GRN_FUNCTION_NOT_IMPLEMENTED = .grn_rc.GRN_FUNCTION_NOT_IMPLEMENTED, 191 GRN_DIRECTORY_NOT_EMPTY = .grn_rc.GRN_DIRECTORY_NOT_EMPTY, 192 GRN_ILLEGAL_BYTE_SEQUENCE = .grn_rc.GRN_ILLEGAL_BYTE_SEQUENCE, 193 GRN_SOCKET_NOT_INITIALIZED = .grn_rc.GRN_SOCKET_NOT_INITIALIZED, 194 GRN_OPERATION_WOULD_BLOCK = .grn_rc.GRN_OPERATION_WOULD_BLOCK, 195 GRN_ADDRESS_IS_NOT_AVAILABLE = .grn_rc.GRN_ADDRESS_IS_NOT_AVAILABLE, 196 GRN_NETWORK_IS_DOWN = .grn_rc.GRN_NETWORK_IS_DOWN, 197 GRN_NO_BUFFER = .grn_rc.GRN_NO_BUFFER, 198 GRN_SOCKET_IS_ALREADY_CONNECTED = .grn_rc.GRN_SOCKET_IS_ALREADY_CONNECTED, 199 GRN_SOCKET_IS_NOT_CONNECTED = .grn_rc.GRN_SOCKET_IS_NOT_CONNECTED, 200 GRN_SOCKET_IS_ALREADY_SHUTDOWNED = .grn_rc.GRN_SOCKET_IS_ALREADY_SHUTDOWNED, 201 GRN_OPERATION_TIMEOUT = .grn_rc.GRN_OPERATION_TIMEOUT, 202 GRN_CONNECTION_REFUSED = .grn_rc.GRN_CONNECTION_REFUSED, 203 GRN_RANGE_ERROR = .grn_rc.GRN_RANGE_ERROR, 204 GRN_TOKENIZER_ERROR = .grn_rc.GRN_TOKENIZER_ERROR, 205 GRN_FILE_CORRUPT = .grn_rc.GRN_FILE_CORRUPT, 206 GRN_INVALID_FORMAT = .grn_rc.GRN_INVALID_FORMAT, 207 GRN_OBJECT_CORRUPT = .grn_rc.GRN_OBJECT_CORRUPT, 208 GRN_TOO_MANY_SYMBOLIC_LINKS = .grn_rc.GRN_TOO_MANY_SYMBOLIC_LINKS, 209 GRN_NOT_SOCKET = .grn_rc.GRN_NOT_SOCKET, 210 GRN_OPERATION_NOT_SUPPORTED = .grn_rc.GRN_OPERATION_NOT_SUPPORTED, 211 GRN_ADDRESS_IS_IN_USE = .grn_rc.GRN_ADDRESS_IS_IN_USE, 212 GRN_ZLIB_ERROR = .grn_rc.GRN_ZLIB_ERROR, 213 GRN_LZ4_ERROR = .grn_rc.GRN_LZ4_ERROR, 214 GRN_LZO_ERROR = .grn_rc.GRN_LZO_ERROR, 215 GRN_STACK_OVER_FLOW = .grn_rc.GRN_STACK_OVER_FLOW, 216 GRN_SYNTAX_ERROR = .grn_rc.GRN_SYNTAX_ERROR, 217 GRN_RETRY_MAX = .grn_rc.GRN_RETRY_MAX, 218 GRN_INCOMPATIBLE_FILE_FORMAT = .grn_rc.GRN_INCOMPATIBLE_FILE_FORMAT, 219 GRN_UPDATE_NOT_ALLOWED = .grn_rc.GRN_UPDATE_NOT_ALLOWED, 220 GRN_TOO_SMALL_OFFSET = .grn_rc.GRN_TOO_SMALL_OFFSET, 221 GRN_TOO_LARGE_OFFSET = .grn_rc.GRN_TOO_LARGE_OFFSET, 222 GRN_TOO_SMALL_LIMIT = .grn_rc.GRN_TOO_SMALL_LIMIT, 223 GRN_CAS_ERROR = .grn_rc.GRN_CAS_ERROR, 224 GRN_UNSUPPORTED_COMMAND_VERSION = .grn_rc.GRN_UNSUPPORTED_COMMAND_VERSION, 225 GRN_NORMALIZER_ERROR = .grn_rc.GRN_NORMALIZER_ERROR, 226 GRN_TOKEN_FILTER_ERROR = .grn_rc.GRN_TOKEN_FILTER_ERROR, 227 GRN_COMMAND_ERROR = .grn_rc.GRN_COMMAND_ERROR, 228 GRN_PLUGIN_ERROR = .grn_rc.GRN_PLUGIN_ERROR, 229 GRN_SCORER_ERROR = .grn_rc.GRN_SCORER_ERROR, 230 GRN_CANCEL = .grn_rc.GRN_CANCEL, 231 GRN_WINDOW_FUNCTION_ERROR = .grn_rc.GRN_WINDOW_FUNCTION_ERROR, 232 GRN_ZSTD_ERROR = .grn_rc.GRN_ZSTD_ERROR, 233 GRN_CONNECTION_RESET = .grn_rc.GRN_CONNECTION_RESET, 234 } 235 236 //GRN_API 237 .grn_rc grn_init(); 238 239 //GRN_API 240 .grn_rc grn_fin(); 241 242 //GRN_API 243 const (char)* grn_get_global_error_message(); 244 245 enum grn_encoding 246 { 247 GRN_ENC_DEFAULT = 0, 248 GRN_ENC_NONE, 249 GRN_ENC_EUC_JP, 250 GRN_ENC_UTF8, 251 GRN_ENC_SJIS, 252 GRN_ENC_LATIN1, 253 GRN_ENC_KOI8R, 254 } 255 256 //Declaration name in C language 257 enum 258 { 259 GRN_ENC_DEFAULT = .grn_encoding.GRN_ENC_DEFAULT, 260 GRN_ENC_NONE = .grn_encoding.GRN_ENC_NONE, 261 GRN_ENC_EUC_JP = .grn_encoding.GRN_ENC_EUC_JP, 262 GRN_ENC_UTF8 = .grn_encoding.GRN_ENC_UTF8, 263 GRN_ENC_SJIS = .grn_encoding.GRN_ENC_SJIS, 264 GRN_ENC_LATIN1 = .grn_encoding.GRN_ENC_LATIN1, 265 GRN_ENC_KOI8R = .grn_encoding.GRN_ENC_KOI8R, 266 } 267 268 enum grn_command_version 269 { 270 GRN_COMMAND_VERSION_DEFAULT = 0, 271 GRN_COMMAND_VERSION_1, 272 GRN_COMMAND_VERSION_2, 273 GRN_COMMAND_VERSION_3, 274 } 275 276 //Declaration name in C language 277 enum 278 { 279 GRN_COMMAND_VERSION_DEFAULT = .grn_command_version.GRN_COMMAND_VERSION_DEFAULT, 280 GRN_COMMAND_VERSION_1 = .grn_command_version.GRN_COMMAND_VERSION_1, 281 GRN_COMMAND_VERSION_2 = .grn_command_version.GRN_COMMAND_VERSION_2, 282 GRN_COMMAND_VERSION_3 = .grn_command_version.GRN_COMMAND_VERSION_3, 283 } 284 285 enum GRN_COMMAND_VERSION_MIN = .grn_command_version.GRN_COMMAND_VERSION_1; 286 enum GRN_COMMAND_VERSION_STABLE = .grn_command_version.GRN_COMMAND_VERSION_1; 287 enum GRN_COMMAND_VERSION_MAX = .grn_command_version.GRN_COMMAND_VERSION_3; 288 289 enum grn_log_level 290 { 291 GRN_LOG_NONE = 0, 292 GRN_LOG_EMERG, 293 GRN_LOG_ALERT, 294 GRN_LOG_CRIT, 295 GRN_LOG_ERROR, 296 GRN_LOG_WARNING, 297 GRN_LOG_NOTICE, 298 GRN_LOG_INFO, 299 GRN_LOG_DEBUG, 300 GRN_LOG_DUMP, 301 } 302 303 //Declaration name in C language 304 enum 305 { 306 //GRN_LOG_NONE = .grn_log_level.GRN_LOG_NONE, 307 GRN_LOG_EMERG = .grn_log_level.GRN_LOG_EMERG, 308 GRN_LOG_ALERT = .grn_log_level.GRN_LOG_ALERT, 309 GRN_LOG_CRIT = .grn_log_level.GRN_LOG_CRIT, 310 GRN_LOG_ERROR = .grn_log_level.GRN_LOG_ERROR, 311 GRN_LOG_WARNING = .grn_log_level.GRN_LOG_WARNING, 312 GRN_LOG_NOTICE = .grn_log_level.GRN_LOG_NOTICE, 313 GRN_LOG_INFO = .grn_log_level.GRN_LOG_INFO, 314 GRN_LOG_DEBUG = .grn_log_level.GRN_LOG_DEBUG, 315 GRN_LOG_DUMP = .grn_log_level.GRN_LOG_DUMP, 316 } 317 318 //GRN_API 319 const (char)* grn_log_level_to_string(.grn_log_level level); 320 321 //GRN_API 322 .grn_bool grn_log_level_parse(const (char)* string_, .grn_log_level* level); 323 324 /* query log flags */ 325 enum GRN_QUERY_LOG_NONE = 0x00; 326 enum GRN_QUERY_LOG_COMMAND = 0x01 << 0; 327 enum GRN_QUERY_LOG_RESULT_CODE = 0x01 << 1; 328 enum GRN_QUERY_LOG_DESTINATION = 0x01 << 2; 329 enum GRN_QUERY_LOG_CACHE = 0x01 << 3; 330 enum GRN_QUERY_LOG_SIZE = 0x01 << 4; 331 enum GRN_QUERY_LOG_SCORE = 0x01 << 5; 332 enum GRN_QUERY_LOG_ALL = .GRN_QUERY_LOG_COMMAND | .GRN_QUERY_LOG_RESULT_CODE | .GRN_QUERY_LOG_DESTINATION | .GRN_QUERY_LOG_CACHE | .GRN_QUERY_LOG_SIZE | .GRN_QUERY_LOG_SCORE; 333 enum GRN_QUERY_LOG_DEFAULT = .GRN_QUERY_LOG_ALL; 334 335 enum grn_content_type 336 { 337 GRN_CONTENT_NONE = 0, 338 GRN_CONTENT_TSV, 339 GRN_CONTENT_JSON, 340 GRN_CONTENT_XML, 341 GRN_CONTENT_MSGPACK, 342 GRN_CONTENT_GROONGA_COMMAND_LIST, 343 GRN_CONTENT_APACHE_ARROW, 344 } 345 346 //Declaration name in C language 347 enum 348 { 349 GRN_CONTENT_NONE = .grn_content_type.GRN_CONTENT_NONE, 350 GRN_CONTENT_TSV = .grn_content_type.GRN_CONTENT_TSV, 351 GRN_CONTENT_JSON = .grn_content_type.GRN_CONTENT_JSON, 352 GRN_CONTENT_XML = .grn_content_type.GRN_CONTENT_XML, 353 GRN_CONTENT_MSGPACK = .grn_content_type.GRN_CONTENT_MSGPACK, 354 GRN_CONTENT_GROONGA_COMMAND_LIST = .grn_content_type.GRN_CONTENT_GROONGA_COMMAND_LIST, 355 GRN_CONTENT_APACHE_ARROW = .grn_content_type.GRN_CONTENT_APACHE_ARROW, 356 } 357 358 enum GRN_CTX_MSGSIZE = 0x80; 359 enum GRN_CTX_FIN = 0xFF; 360 361 alias grn_close_func = extern (C) void function (.grn_ctx* ctx, void* data); 362 363 union grn_user_data 364 { 365 int int_value; 366 .grn_id id; 367 void* ptr_; 368 369 deprecated 370 alias ptr = ptr_; 371 } 372 373 alias grn_proc_func = extern (C) .grn_obj* function(.grn_ctx* ctx, int nargs, .grn_obj** args, grn_user_data* user_data); 374 375 extern struct _grn_ctx_impl; 376 377 struct _grn_ctx 378 { 379 .grn_rc rc; 380 int flags; 381 .grn_encoding encoding; 382 ubyte ntrace; 383 ubyte errlvl; 384 ubyte stat; 385 uint seqno; 386 uint subno; 387 uint seqno2; 388 uint errline; 389 grn_user_data user_data; 390 .grn_ctx* prev; 391 .grn_ctx* next; 392 const (char)* errfile; 393 const (char)* errfunc; 394 ._grn_ctx_impl* impl; 395 396 //ToDo: Check 397 void*[16] trace; 398 399 char[.GRN_CTX_MSGSIZE] errbuf = '\0'; 400 } 401 402 alias grn_ctx = ._grn_ctx; 403 404 pragma(inline, true) 405 pure nothrow @trusted @nogc @live 406 grn_user_data* GRN_CTX_USER_DATA(return scope .grn_ctx* ctx) 407 408 in 409 { 410 assert(ctx != null); 411 } 412 413 do 414 { 415 return &(ctx.user_data); 416 } 417 418 /* Deprecated since 4.0.3. Don't use it. */ 419 enum GRN_CTX_USE_QL = 0x03; 420 /* Deprecated since 4.0.3. Don't use it. */ 421 enum GRN_CTX_BATCH_MODE = 0x04; 422 enum GRN_CTX_PER_DB = 0x08; 423 424 //GRN_API 425 .grn_rc grn_ctx_init(.grn_ctx* ctx, int flags); 426 427 //GRN_API 428 .grn_rc grn_ctx_fin(.grn_ctx* ctx); 429 430 //GRN_API 431 .grn_ctx* grn_ctx_open(int flags); 432 433 //GRN_API 434 .grn_rc grn_ctx_close(.grn_ctx* ctx); 435 436 //GRN_API 437 .grn_rc grn_ctx_set_finalizer(.grn_ctx* ctx, grn_proc_func* func); 438 439 //GRN_API 440 .grn_rc grn_ctx_push_temporary_open_space(.grn_ctx* ctx); 441 442 //GRN_API 443 .grn_rc grn_ctx_pop_temporary_open_space(.grn_ctx* ctx); 444 445 //GRN_API 446 .grn_rc grn_ctx_merge_temporary_open_space(.grn_ctx* ctx); 447 448 //GRN_API 449 .grn_encoding grn_get_default_encoding(); 450 451 //GRN_API 452 .grn_rc grn_set_default_encoding(.grn_encoding encoding); 453 454 pragma(inline, true) 455 pure nothrow @trusted @nogc @live 456 .grn_encoding GRN_CTX_GET_ENCODING(scope const .grn_ctx* ctx) 457 458 in 459 { 460 assert(ctx != null); 461 } 462 463 do 464 { 465 return ctx.encoding; 466 } 467 468 pragma(inline, true) 469 void GRN_CTX_SET_ENCODING(scope .grn_ctx* ctx, .grn_encoding enc) 470 471 in 472 { 473 assert(ctx != null); 474 } 475 476 do 477 { 478 ctx.encoding = (enc == .grn_encoding.GRN_ENC_DEFAULT) ? (.grn_get_default_encoding()) : (enc); 479 } 480 481 //GRN_API 482 const (char)* grn_get_version(); 483 484 //GRN_API 485 uint grn_get_version_major(); 486 487 //GRN_API 488 uint grn_get_version_minor(); 489 490 //GRN_API 491 uint grn_get_version_micro(); 492 493 //GRN_API 494 const (char)* grn_get_package(); 495 496 //GRN_API 497 const (char)* grn_get_package_label(); 498 499 //GRN_API 500 .grn_command_version grn_get_default_command_version(); 501 502 //GRN_API 503 .grn_rc grn_set_default_command_version(.grn_command_version input_version); 504 505 //GRN_API 506 .grn_command_version grn_ctx_get_command_version(.grn_ctx* ctx); 507 508 //GRN_API 509 .grn_rc grn_ctx_set_command_version(.grn_ctx* ctx, .grn_command_version input_version); 510 511 //GRN_API 512 long grn_ctx_get_match_escalation_threshold(.grn_ctx* ctx); 513 514 //GRN_API 515 .grn_rc grn_ctx_set_match_escalation_threshold(.grn_ctx* ctx, long threshold); 516 517 //GRN_API 518 .grn_bool grn_ctx_get_force_match_escalation(.grn_ctx* ctx); 519 520 //GRN_API 521 .grn_rc grn_ctx_set_force_match_escalation(.grn_ctx* ctx, .grn_bool force); 522 523 //GRN_API 524 long grn_get_default_match_escalation_threshold(); 525 526 //GRN_API 527 .grn_rc grn_set_default_match_escalation_threshold(long threshold); 528 529 //GRN_API 530 bool grn_is_back_trace_enable(); 531 532 //GRN_API 533 .grn_rc grn_set_back_trace_enable(bool enable); 534 535 //GRN_API 536 grn_rc grn_ctx_set_variable(.grn_ctx* ctx, const (char)* name, int name_size, void* data, .grn_close_func close_func); 537 538 //GRN_API 539 void* grn_ctx_get_variable(.grn_ctx* ctx, const (char)* name, int name_size); 540 541 //GRN_API 542 grn_rc grn_unset_variable(const (char)* name, int name_size); 543 544 //GRN_API 545 int grn_get_lock_timeout(); 546 547 //GRN_API 548 .grn_rc grn_set_lock_timeout(int timeout); 549 550 /* .grn_encoding */ 551 552 //GRN_API 553 const (char)* grn_encoding_to_string(.grn_encoding encoding); 554 555 //GRN_API 556 .grn_encoding grn_encoding_parse(const (char)* name); 557 558 /* obj */ 559 560 alias grn_obj_flags = ushort; 561 alias grn_table_flags = uint; 562 alias grn_column_flags = uint; 563 564 /* flags for grn_obj_flags and grn_table_flags */ 565 566 enum GRN_OBJ_FLAGS_MASK = 0xFFFF; 567 568 enum GRN_OBJ_TABLE_TYPE_MASK = 0x07; 569 enum GRN_OBJ_TABLE_HASH_KEY = 0x00; 570 enum GRN_OBJ_TABLE_PAT_KEY = 0x01; 571 enum GRN_OBJ_TABLE_DAT_KEY = 0x02; 572 enum GRN_OBJ_TABLE_NO_KEY = 0x03; 573 574 enum GRN_OBJ_KEY_MASK = 0x07 << 3; 575 enum GRN_OBJ_KEY_UINT = 0x00 << 3; 576 enum GRN_OBJ_KEY_INT = 0x01 << 3; 577 enum GRN_OBJ_KEY_FLOAT = 0x02 << 3; 578 enum GRN_OBJ_KEY_GEO_POINT = 0x03 << 3; 579 580 enum GRN_OBJ_KEY_WITH_SIS = 0x01 << 6; 581 enum GRN_OBJ_KEY_NORMALIZE = 0x01 << 7; 582 583 /* flags for grn_obj_flags and grn_column_flags */ 584 585 enum GRN_OBJ_COLUMN_TYPE_MASK = 0x07; 586 enum GRN_OBJ_COLUMN_SCALAR = 0x00; 587 enum GRN_OBJ_COLUMN_VECTOR = 0x01; 588 enum GRN_OBJ_COLUMN_INDEX = 0x02; 589 590 enum GRN_OBJ_COMPRESS_MASK = 0x07 << 4; 591 enum GRN_OBJ_COMPRESS_NONE = 0x00 << 4; 592 enum GRN_OBJ_COMPRESS_ZLIB = 0x01 << 4; 593 enum GRN_OBJ_COMPRESS_LZ4 = 0x02 << 4; 594 /* Just for backward compatibility. We'll remove it at 5.0.0. */ 595 enum GRN_OBJ_COMPRESS_LZO = .GRN_OBJ_COMPRESS_LZ4; 596 enum GRN_OBJ_COMPRESS_ZSTD = 0x03 << 4; 597 598 enum GRN_OBJ_WITH_SECTION = 0x01 << 7; 599 enum GRN_OBJ_WITH_WEIGHT = 0x01 << 8; 600 enum GRN_OBJ_WITH_POSITION = 0x01 << 9; 601 enum GRN_OBJ_RING_BUFFER = 0x01 << 10; 602 603 enum GRN_OBJ_UNIT_MASK = 0x0F << 8; 604 enum GRN_OBJ_UNIT_DOCUMENT_NONE = 0x00 << 8; 605 enum GRN_OBJ_UNIT_DOCUMENT_SECTION = 0x01 << 8; 606 enum GRN_OBJ_UNIT_DOCUMENT_POSITION = 0x02 << 8; 607 enum GRN_OBJ_UNIT_SECTION_NONE = 0x03 << 8; 608 enum GRN_OBJ_UNIT_SECTION_POSITION = 0x04 << 8; 609 enum GRN_OBJ_UNIT_POSITION_NONE = 0x05 << 8; 610 enum GRN_OBJ_UNIT_USERDEF_DOCUMENT = 0x06 << 8; 611 enum GRN_OBJ_UNIT_USERDEF_SECTION = 0x07 << 8; 612 enum GRN_OBJ_UNIT_USERDEF_POSITION = 0x08 << 8; 613 614 /* Don't use (0x01<<12) because it's used internally. */ 615 616 enum GRN_OBJ_NO_SUBREC = 0x00 << 13; 617 enum GRN_OBJ_WITH_SUBREC = 0x01 << 13; 618 619 enum GRN_OBJ_KEY_VAR_SIZE = 0x01 << 14; 620 621 enum GRN_OBJ_TEMPORARY = 0x00 << 15; 622 enum GRN_OBJ_PERSISTENT = 0x01 << 15; 623 624 /* flags only for grn_table_flags */ 625 626 enum GRN_OBJ_KEY_LARGE = 0x01 << 16; 627 628 /* flags only for grn_column_flags */ 629 630 enum GRN_OBJ_INDEX_SMALL = 0x01 << 16; 631 enum GRN_OBJ_INDEX_MEDIUM = 0x01 << 17; 632 enum GRN_OBJ_INDEX_LARGE = 0x01 << 18; 633 enum GRN_OBJ_WEIGHT_FLOAT32 = 0x01 << 19; 634 635 /* flags only for grn_table_flags and grn_column_flags */ 636 637 /* GRN_COLUMN_INDEX only uses this for now */ 638 enum GRN_OBJ_VISIBLE = cast(uint)(0x00 << 31); 639 enum GRN_OBJ_INVISIBLE = cast(uint)(0x01 << 31); 640 641 /* obj types */ 642 643 enum GRN_VOID = 0x00; 644 enum GRN_BULK = 0x02; 645 enum GRN_PTR = 0x03; 646 647 /* vector of fixed size data especially grn_id */ 648 enum GRN_UVECTOR = 0x04; 649 650 /* vector of .grn_obj* */ 651 enum GRN_PVECTOR = 0x05; 652 653 /* vector of arbitrary data */ 654 enum GRN_VECTOR = 0x06; 655 656 enum GRN_MSG = 0x07; 657 enum GRN_QUERY = 0x08; 658 enum GRN_ACCESSOR = 0x09; 659 enum GRN_SNIP = 0x0B; 660 enum GRN_PATSNIP = 0x0C; 661 enum GRN_STRING = 0x0D; 662 enum GRN_HIGHLIGHTER = 0x0E; 663 enum GRN_CURSOR_TABLE_HASH_KEY = 0x10; 664 enum GRN_CURSOR_TABLE_PAT_KEY = 0x11; 665 enum GRN_CURSOR_TABLE_DAT_KEY = 0x12; 666 enum GRN_CURSOR_TABLE_NO_KEY = 0x13; 667 enum GRN_CURSOR_COLUMN_INDEX = 0x18; 668 enum GRN_CURSOR_COLUMN_GEO_INDEX = 0x1A; 669 enum GRN_CURSOR_CONFIG = 0x1F; 670 enum GRN_TYPE = 0x20; 671 enum GRN_PROC = 0x21; 672 enum GRN_EXPR = 0x22; 673 enum GRN_TABLE_HASH_KEY = 0x30; 674 enum GRN_TABLE_PAT_KEY = 0x31; 675 enum GRN_TABLE_DAT_KEY = 0x32; 676 enum GRN_TABLE_NO_KEY = 0x33; 677 enum GRN_DB = 0x37; 678 enum GRN_COLUMN_FIX_SIZE = 0x40; 679 enum GRN_COLUMN_VAR_SIZE = 0x41; 680 enum GRN_COLUMN_INDEX = 0x48; 681 682 struct _grn_section 683 { 684 uint offset; 685 uint length; 686 float weight = 0; 687 .grn_id domain; 688 } 689 690 alias grn_section = ._grn_section; 691 692 struct _grn_obj_header 693 { 694 ubyte type; 695 ubyte impl_flags; 696 .grn_obj_flags flags; 697 .grn_id domain; 698 } 699 700 alias grn_obj_header = ._grn_obj_header; 701 702 struct _grn_obj 703 { 704 .grn_obj_header header; 705 706 union u_ 707 { 708 struct b_ 709 { 710 char* head; 711 char* curr; 712 char* tail; 713 } 714 715 b_ b; 716 717 struct v_ 718 { 719 .grn_obj* body_; 720 .grn_section* sections; 721 uint n_sections; 722 } 723 724 v_ v; 725 } 726 727 u_ u; 728 } 729 730 alias grn_obj = ._grn_obj; 731 732 enum GRN_OBJ_REFER = 0x01 << 0; 733 enum GRN_OBJ_OUTPLACE = 0x01 << 1; 734 enum GRN_OBJ_OWN = 0x01 << 5; 735 736 pragma(inline, true) 737 pure nothrow @trusted @nogc @live 738 void GRN_OBJ_INIT(scope .grn_obj* obj, ubyte obj_type, ubyte obj_flags, .grn_id obj_domain) 739 740 in 741 { 742 assert(obj != null); 743 } 744 745 do 746 { 747 obj.header.type = obj_type; 748 obj.header.impl_flags = obj_flags; 749 obj.header.flags = 0; 750 obj.header.domain = obj_domain; 751 obj.u.b.head = null; 752 obj.u.b.curr = null; 753 obj.u.b.tail = null; 754 } 755 756 alias GRN_OBJ_FIN = grn_obj_close; 757 758 //GRN_API 759 .grn_rc grn_ctx_use(.grn_ctx* ctx, .grn_obj* db); 760 761 //GRN_API 762 .grn_obj* grn_ctx_db(.grn_ctx* ctx); 763 764 //GRN_API 765 .grn_obj* grn_ctx_get(.grn_ctx* ctx, const (char)* name, int name_size); 766 767 //GRN_API 768 .grn_rc grn_ctx_get_all_tables(.grn_ctx* ctx, .grn_obj* tables_buffer); 769 770 //GRN_API 771 .grn_rc grn_ctx_get_all_types(.grn_ctx* ctx, .grn_obj* types_buffer); 772 773 //GRN_API 774 .grn_rc grn_ctx_get_all_tokenizers(.grn_ctx* ctx, .grn_obj* tokenizers_buffer); 775 776 //GRN_API 777 .grn_rc grn_ctx_get_all_normalizers(.grn_ctx* ctx, .grn_obj* normalizers_buffer); 778 779 //GRN_API 780 .grn_rc grn_ctx_get_all_token_filters(.grn_ctx* ctx, .grn_obj* token_filters_buffer); 781 782 enum grn_builtin_type 783 { 784 GRN_DB_VOID = 0, 785 GRN_DB_DB, 786 GRN_DB_OBJECT, 787 GRN_DB_BOOL, 788 GRN_DB_INT8, 789 GRN_DB_UINT8, 790 GRN_DB_INT16, 791 GRN_DB_UINT16, 792 GRN_DB_INT32, 793 GRN_DB_UINT32, 794 GRN_DB_INT64, 795 GRN_DB_UINT64, 796 GRN_DB_FLOAT, 797 GRN_DB_TIME, 798 GRN_DB_SHORT_TEXT, 799 GRN_DB_TEXT, 800 GRN_DB_LONG_TEXT, 801 GRN_DB_TOKYO_GEO_POINT, 802 GRN_DB_WGS84_GEO_POINT, 803 GRN_DB_FLOAT32, 804 } 805 806 //Declaration name in C language 807 enum 808 { 809 GRN_DB_VOID = .grn_builtin_type.GRN_DB_VOID, 810 GRN_DB_DB = .grn_builtin_type.GRN_DB_DB, 811 GRN_DB_OBJECT = .grn_builtin_type.GRN_DB_OBJECT, 812 GRN_DB_BOOL = .grn_builtin_type.GRN_DB_BOOL, 813 GRN_DB_INT8 = .grn_builtin_type.GRN_DB_INT8, 814 GRN_DB_UINT8 = .grn_builtin_type.GRN_DB_UINT8, 815 GRN_DB_INT16 = .grn_builtin_type.GRN_DB_INT16, 816 GRN_DB_UINT16 = .grn_builtin_type.GRN_DB_UINT16, 817 GRN_DB_INT32 = .grn_builtin_type.GRN_DB_INT32, 818 GRN_DB_UINT32 = .grn_builtin_type.GRN_DB_UINT32, 819 GRN_DB_INT64 = .grn_builtin_type.GRN_DB_INT64, 820 GRN_DB_UINT64 = .grn_builtin_type.GRN_DB_UINT64, 821 GRN_DB_FLOAT = .grn_builtin_type.GRN_DB_FLOAT, 822 GRN_DB_TIME = .grn_builtin_type.GRN_DB_TIME, 823 GRN_DB_SHORT_TEXT = .grn_builtin_type.GRN_DB_SHORT_TEXT, 824 GRN_DB_TEXT = .grn_builtin_type.GRN_DB_TEXT, 825 GRN_DB_LONG_TEXT = .grn_builtin_type.GRN_DB_LONG_TEXT, 826 GRN_DB_TOKYO_GEO_POINT = .grn_builtin_type.GRN_DB_TOKYO_GEO_POINT, 827 GRN_DB_WGS84_GEO_POINT = .grn_builtin_type.GRN_DB_WGS84_GEO_POINT, 828 GRN_DB_FLOAT32 = .grn_builtin_type.GRN_DB_FLOAT32, 829 } 830 831 enum grn_builtin_tokenizer 832 { 833 GRN_DB_MECAB = 64, 834 GRN_DB_DELIMIT, 835 GRN_DB_UNIGRAM, 836 GRN_DB_BIGRAM, 837 GRN_DB_TRIGRAM, 838 } 839 840 //Declaration name in C language 841 enum 842 { 843 GRN_DB_MECAB = .grn_builtin_tokenizer.GRN_DB_MECAB, 844 GRN_DB_DELIMIT = .grn_builtin_tokenizer.GRN_DB_DELIMIT, 845 GRN_DB_UNIGRAM = .grn_builtin_tokenizer.GRN_DB_UNIGRAM, 846 GRN_DB_BIGRAM = .grn_builtin_tokenizer.GRN_DB_BIGRAM, 847 GRN_DB_TRIGRAM = .grn_builtin_tokenizer.GRN_DB_TRIGRAM, 848 } 849 850 //GRN_API 851 .grn_obj* grn_ctx_at(.grn_ctx* ctx, .grn_id id); 852 853 //GRN_API 854 .grn_bool grn_ctx_is_opened(.grn_ctx* ctx, .grn_id id); 855 856 //GRN_API 857 .grn_rc grn_plugin_register(.grn_ctx* ctx, const (char)* name); 858 859 //GRN_API 860 .grn_rc grn_plugin_unregister(.grn_ctx* ctx, const (char)* name); 861 862 //GRN_API 863 .grn_rc grn_plugin_register_by_path(.grn_ctx* ctx, const (char)* path); 864 865 //GRN_API 866 .grn_rc grn_plugin_unregister_by_path(.grn_ctx* ctx, const (char)* path); 867 868 //GRN_API 869 const (char)* grn_plugin_get_system_plugins_dir(); 870 871 //GRN_API 872 const (char)* grn_plugin_get_suffix(); 873 874 //GRN_API 875 const (char)* grn_plugin_get_ruby_suffix(); 876 877 //GRN_API 878 .grn_rc grn_plugin_get_names(.grn_ctx* ctx, .grn_obj* names); 879 880 struct grn_expr_var 881 { 882 const (char)* name; 883 uint name_size; 884 .grn_obj value; 885 } 886 887 .grn_rc function (.grn_ctx* ctx) grn_plugin_func; 888 889 alias grn_table_cursor = .grn_obj; 890 891 enum grn_operator 892 { 893 GRN_OP_PUSH = 0, 894 GRN_OP_POP, 895 GRN_OP_NOP, 896 GRN_OP_CALL, 897 GRN_OP_INTERN, 898 GRN_OP_GET_REF, 899 GRN_OP_GET_VALUE, 900 GRN_OP_AND, 901 GRN_OP_AND_NOT, 902 903 /** 904 * Deprecated. Just for backward compatibility. 905 */ 906 GRN_OP_BUT = GRN_OP_AND_NOT, 907 908 GRN_OP_OR, 909 GRN_OP_ASSIGN, 910 GRN_OP_STAR_ASSIGN, 911 GRN_OP_SLASH_ASSIGN, 912 GRN_OP_MOD_ASSIGN, 913 GRN_OP_PLUS_ASSIGN, 914 GRN_OP_MINUS_ASSIGN, 915 GRN_OP_SHIFTL_ASSIGN, 916 GRN_OP_SHIFTR_ASSIGN, 917 GRN_OP_SHIFTRR_ASSIGN, 918 GRN_OP_AND_ASSIGN, 919 GRN_OP_XOR_ASSIGN, 920 GRN_OP_OR_ASSIGN, 921 GRN_OP_JUMP, 922 GRN_OP_CJUMP, 923 GRN_OP_COMMA, 924 GRN_OP_BITWISE_OR, 925 GRN_OP_BITWISE_XOR, 926 GRN_OP_BITWISE_AND, 927 GRN_OP_BITWISE_NOT, 928 GRN_OP_EQUAL, 929 GRN_OP_NOT_EQUAL, 930 GRN_OP_LESS, 931 GRN_OP_GREATER, 932 GRN_OP_LESS_EQUAL, 933 GRN_OP_GREATER_EQUAL, 934 GRN_OP_IN, 935 GRN_OP_MATCH, 936 GRN_OP_NEAR, 937 GRN_OP_NEAR_NO_OFFSET, 938 GRN_OP_SIMILAR, 939 GRN_OP_TERM_EXTRACT, 940 GRN_OP_SHIFTL, 941 GRN_OP_SHIFTR, 942 GRN_OP_SHIFTRR, 943 GRN_OP_PLUS, 944 GRN_OP_MINUS, 945 GRN_OP_STAR, 946 GRN_OP_SLASH, 947 GRN_OP_MOD, 948 GRN_OP_DELETE, 949 GRN_OP_INCR, 950 GRN_OP_DECR, 951 GRN_OP_INCR_POST, 952 GRN_OP_DECR_POST, 953 GRN_OP_NOT, 954 GRN_OP_ADJUST, 955 GRN_OP_EXACT, 956 GRN_OP_LCP, 957 GRN_OP_PARTIAL, 958 GRN_OP_UNSPLIT, 959 GRN_OP_PREFIX, 960 GRN_OP_SUFFIX, 961 GRN_OP_GEO_DISTANCE1, 962 GRN_OP_GEO_DISTANCE2, 963 GRN_OP_GEO_DISTANCE3, 964 GRN_OP_GEO_DISTANCE4, 965 GRN_OP_GEO_WITHINP5, 966 GRN_OP_GEO_WITHINP6, 967 GRN_OP_GEO_WITHINP8, 968 GRN_OP_OBJ_SEARCH, 969 GRN_OP_EXPR_GET_VAR, 970 GRN_OP_TABLE_CREATE, 971 GRN_OP_TABLE_SELECT, 972 GRN_OP_TABLE_SORT, 973 GRN_OP_TABLE_GROUP, 974 GRN_OP_JSON_PUT, 975 GRN_OP_GET_MEMBER, 976 GRN_OP_REGEXP, 977 GRN_OP_FUZZY, 978 GRN_OP_QUORUM, 979 GRN_OP_NEAR_PHRASE, 980 GRN_OP_ORDERED_NEAR_PHRASE, 981 GRN_OP_NEAR_PHRASE_PRODUCT, 982 GRN_OP_ORDERED_NEAR_PHRASE_PRODUCT, 983 } 984 985 //Declaration name in C language 986 enum 987 { 988 GRN_OP_PUSH = .grn_operator.GRN_OP_PUSH, 989 GRN_OP_POP = .grn_operator.GRN_OP_POP, 990 GRN_OP_NOP = .grn_operator.GRN_OP_NOP, 991 GRN_OP_CALL = .grn_operator.GRN_OP_CALL, 992 GRN_OP_INTERN = .grn_operator.GRN_OP_INTERN, 993 GRN_OP_GET_REF = .grn_operator.GRN_OP_GET_REF, 994 GRN_OP_GET_VALUE = .grn_operator.GRN_OP_GET_VALUE, 995 GRN_OP_AND = .grn_operator.GRN_OP_AND, 996 GRN_OP_AND_NOT = .grn_operator.GRN_OP_AND_NOT, 997 GRN_OP_BUT = .grn_operator.GRN_OP_BUT, 998 GRN_OP_OR = .grn_operator.GRN_OP_OR, 999 GRN_OP_ASSIGN = .grn_operator.GRN_OP_ASSIGN, 1000 GRN_OP_STAR_ASSIGN = .grn_operator.GRN_OP_STAR_ASSIGN, 1001 GRN_OP_SLASH_ASSIGN = .grn_operator.GRN_OP_SLASH_ASSIGN, 1002 GRN_OP_MOD_ASSIGN = .grn_operator.GRN_OP_MOD_ASSIGN, 1003 GRN_OP_PLUS_ASSIGN = .grn_operator.GRN_OP_PLUS_ASSIGN, 1004 GRN_OP_MINUS_ASSIGN = .grn_operator.GRN_OP_MINUS_ASSIGN, 1005 GRN_OP_SHIFTL_ASSIGN = .grn_operator.GRN_OP_SHIFTL_ASSIGN, 1006 GRN_OP_SHIFTR_ASSIGN = .grn_operator.GRN_OP_SHIFTR_ASSIGN, 1007 GRN_OP_SHIFTRR_ASSIGN = .grn_operator.GRN_OP_SHIFTRR_ASSIGN, 1008 GRN_OP_AND_ASSIGN = .grn_operator.GRN_OP_AND_ASSIGN, 1009 GRN_OP_XOR_ASSIGN = .grn_operator.GRN_OP_XOR_ASSIGN, 1010 GRN_OP_OR_ASSIGN = .grn_operator.GRN_OP_OR_ASSIGN, 1011 GRN_OP_JUMP = .grn_operator.GRN_OP_JUMP, 1012 GRN_OP_CJUMP = .grn_operator.GRN_OP_CJUMP, 1013 GRN_OP_COMMA = .grn_operator.GRN_OP_COMMA, 1014 GRN_OP_BITWISE_OR = .grn_operator.GRN_OP_BITWISE_OR, 1015 GRN_OP_BITWISE_XOR = .grn_operator.GRN_OP_BITWISE_XOR, 1016 GRN_OP_BITWISE_AND = .grn_operator.GRN_OP_BITWISE_AND, 1017 GRN_OP_BITWISE_NOT = .grn_operator.GRN_OP_BITWISE_NOT, 1018 GRN_OP_EQUAL = .grn_operator.GRN_OP_EQUAL, 1019 GRN_OP_NOT_EQUAL = .grn_operator.GRN_OP_NOT_EQUAL, 1020 GRN_OP_LESS = .grn_operator.GRN_OP_LESS, 1021 GRN_OP_GREATER = .grn_operator.GRN_OP_GREATER, 1022 GRN_OP_LESS_EQUAL = .grn_operator.GRN_OP_LESS_EQUAL, 1023 GRN_OP_GREATER_EQUAL = .grn_operator.GRN_OP_GREATER_EQUAL, 1024 GRN_OP_IN = .grn_operator.GRN_OP_IN, 1025 GRN_OP_MATCH = .grn_operator.GRN_OP_MATCH, 1026 GRN_OP_NEAR = .grn_operator.GRN_OP_NEAR, 1027 GRN_OP_NEAR_NO_OFFSET = .grn_operator.GRN_OP_NEAR_NO_OFFSET, 1028 GRN_OP_SIMILAR = .grn_operator.GRN_OP_SIMILAR, 1029 GRN_OP_TERM_EXTRACT = .grn_operator.GRN_OP_TERM_EXTRACT, 1030 GRN_OP_SHIFTL = .grn_operator.GRN_OP_SHIFTL, 1031 GRN_OP_SHIFTR = .grn_operator.GRN_OP_SHIFTR, 1032 GRN_OP_SHIFTRR = .grn_operator.GRN_OP_SHIFTRR, 1033 GRN_OP_PLUS = .grn_operator.GRN_OP_PLUS, 1034 GRN_OP_MINUS = .grn_operator.GRN_OP_MINUS, 1035 GRN_OP_STAR = .grn_operator.GRN_OP_STAR, 1036 GRN_OP_SLASH = .grn_operator.GRN_OP_SLASH, 1037 GRN_OP_MOD = .grn_operator.GRN_OP_MOD, 1038 GRN_OP_DELETE = .grn_operator.GRN_OP_DELETE, 1039 GRN_OP_INCR = .grn_operator.GRN_OP_INCR, 1040 GRN_OP_DECR = .grn_operator.GRN_OP_DECR, 1041 GRN_OP_INCR_POST = .grn_operator.GRN_OP_INCR_POST, 1042 GRN_OP_DECR_POST = .grn_operator.GRN_OP_DECR_POST, 1043 GRN_OP_NOT = .grn_operator.GRN_OP_NOT, 1044 GRN_OP_ADJUST = .grn_operator.GRN_OP_ADJUST, 1045 GRN_OP_EXACT = .grn_operator.GRN_OP_EXACT, 1046 GRN_OP_LCP = .grn_operator.GRN_OP_LCP, 1047 GRN_OP_PARTIAL = .grn_operator.GRN_OP_PARTIAL, 1048 GRN_OP_UNSPLIT = .grn_operator.GRN_OP_UNSPLIT, 1049 GRN_OP_PREFIX = .grn_operator.GRN_OP_PREFIX, 1050 GRN_OP_SUFFIX = .grn_operator.GRN_OP_SUFFIX, 1051 GRN_OP_GEO_DISTANCE1 = .grn_operator.GRN_OP_GEO_DISTANCE1, 1052 GRN_OP_GEO_DISTANCE2 = .grn_operator.GRN_OP_GEO_DISTANCE2, 1053 GRN_OP_GEO_DISTANCE3 = .grn_operator.GRN_OP_GEO_DISTANCE3, 1054 GRN_OP_GEO_DISTANCE4 = .grn_operator.GRN_OP_GEO_DISTANCE4, 1055 GRN_OP_GEO_WITHINP5 = .grn_operator.GRN_OP_GEO_WITHINP5, 1056 GRN_OP_GEO_WITHINP6 = .grn_operator.GRN_OP_GEO_WITHINP6, 1057 GRN_OP_GEO_WITHINP8 = .grn_operator.GRN_OP_GEO_WITHINP8, 1058 GRN_OP_OBJ_SEARCH = .grn_operator.GRN_OP_OBJ_SEARCH, 1059 GRN_OP_EXPR_GET_VAR = .grn_operator.GRN_OP_EXPR_GET_VAR, 1060 GRN_OP_TABLE_CREATE = .grn_operator.GRN_OP_TABLE_CREATE, 1061 GRN_OP_TABLE_SELECT = .grn_operator.GRN_OP_TABLE_SELECT, 1062 GRN_OP_TABLE_SORT = .grn_operator.GRN_OP_TABLE_SORT, 1063 GRN_OP_TABLE_GROUP = .grn_operator.GRN_OP_TABLE_GROUP, 1064 GRN_OP_JSON_PUT = .grn_operator.GRN_OP_JSON_PUT, 1065 GRN_OP_GET_MEMBER = .grn_operator.GRN_OP_GET_MEMBER, 1066 GRN_OP_REGEXP = .grn_operator.GRN_OP_REGEXP, 1067 GRN_OP_FUZZY = .grn_operator.GRN_OP_FUZZY, 1068 GRN_OP_QUORUM = .grn_operator.GRN_OP_QUORUM, 1069 GRN_OP_NEAR_PHRASE = .grn_operator.GRN_OP_NEAR_PHRASE, 1070 GRN_OP_ORDERED_NEAR_PHRASE = .grn_operator.GRN_OP_ORDERED_NEAR_PHRASE, 1071 GRN_OP_NEAR_PHRASE_PRODUCT = .grn_operator.GRN_OP_NEAR_PHRASE_PRODUCT, 1072 GRN_OP_ORDERED_NEAR_PHRASE_PRODUCT = .grn_operator.GRN_OP_ORDERED_NEAR_PHRASE_PRODUCT, 1073 } 1074 1075 /* Deprecated. Just for backward compatibility. */ 1076 deprecated alias GRN_OP_NEAR2 = .GRN_OP_NEAR_NO_OFFSET; 1077 1078 //GRN_API 1079 .grn_obj* grn_obj_column(.grn_ctx* ctx, .grn_obj* table, const (char)* name, uint name_size); 1080 1081 /*------------------------------------------------------------- 1082 * API for db, table and/or column 1083 */ 1084 1085 enum grn_info_type 1086 { 1087 GRN_INFO_ENCODING = 0, 1088 GRN_INFO_SOURCE, 1089 GRN_INFO_DEFAULT_TOKENIZER, 1090 GRN_INFO_ELEMENT_SIZE, 1091 GRN_INFO_CURR_MAX, 1092 GRN_INFO_MAX_ELEMENT_SIZE, 1093 GRN_INFO_SEG_SIZE, 1094 GRN_INFO_CHUNK_SIZE, 1095 GRN_INFO_MAX_SECTION, 1096 GRN_INFO_HOOK_LOCAL_DATA, 1097 GRN_INFO_ELEMENT_A, 1098 GRN_INFO_ELEMENT_CHUNK, 1099 GRN_INFO_ELEMENT_CHUNK_SIZE, 1100 GRN_INFO_ELEMENT_BUFFER_FREE, 1101 GRN_INFO_ELEMENT_NTERMS, 1102 GRN_INFO_ELEMENT_NTERMS_VOID, 1103 GRN_INFO_ELEMENT_SIZE_IN_CHUNK, 1104 GRN_INFO_ELEMENT_POS_IN_CHUNK, 1105 GRN_INFO_ELEMENT_SIZE_IN_BUFFER, 1106 GRN_INFO_ELEMENT_POS_IN_BUFFER, 1107 GRN_INFO_ELEMENT_ESTIMATE_SIZE, 1108 GRN_INFO_NGRAM_UNIT_SIZE, 1109 /* 1110 GRN_INFO_VERSION, 1111 GRN_INFO_CONFIGURE_OPTIONS, 1112 GRN_INFO_CONFIG_PATH, 1113 */ 1114 GRN_INFO_PARTIAL_MATCH_THRESHOLD, 1115 GRN_INFO_II_SPLIT_THRESHOLD, 1116 GRN_INFO_SUPPORT_ZLIB, 1117 GRN_INFO_SUPPORT_LZ4, 1118 /* Just for backward compatibility. We'll remove it at 5.0.0. */ 1119 GRN_INFO_SUPPORT_LZO = GRN_INFO_SUPPORT_LZ4, 1120 GRN_INFO_NORMALIZER, 1121 GRN_INFO_TOKEN_FILTERS, 1122 GRN_INFO_SUPPORT_ZSTD, 1123 1124 GRN_INFO_SUPPORT_APACHE_ARROW, 1125 GRN_INFO_NORMALIZERS, 1126 } 1127 1128 //Declaration name in C language 1129 enum 1130 { 1131 GRN_INFO_ENCODING = .grn_info_type.GRN_INFO_ENCODING, 1132 GRN_INFO_SOURCE = .grn_info_type.GRN_INFO_SOURCE, 1133 GRN_INFO_DEFAULT_TOKENIZER = .grn_info_type.GRN_INFO_DEFAULT_TOKENIZER, 1134 GRN_INFO_ELEMENT_SIZE = .grn_info_type.GRN_INFO_ELEMENT_SIZE, 1135 GRN_INFO_CURR_MAX = .grn_info_type.GRN_INFO_CURR_MAX, 1136 GRN_INFO_MAX_ELEMENT_SIZE = .grn_info_type.GRN_INFO_MAX_ELEMENT_SIZE, 1137 GRN_INFO_SEG_SIZE = .grn_info_type.GRN_INFO_SEG_SIZE, 1138 GRN_INFO_CHUNK_SIZE = .grn_info_type.GRN_INFO_CHUNK_SIZE, 1139 GRN_INFO_MAX_SECTION = .grn_info_type.GRN_INFO_MAX_SECTION, 1140 GRN_INFO_HOOK_LOCAL_DATA = .grn_info_type.GRN_INFO_HOOK_LOCAL_DATA, 1141 GRN_INFO_ELEMENT_A = .grn_info_type.GRN_INFO_ELEMENT_A, 1142 GRN_INFO_ELEMENT_CHUNK = .grn_info_type.GRN_INFO_ELEMENT_CHUNK, 1143 GRN_INFO_ELEMENT_CHUNK_SIZE = .grn_info_type.GRN_INFO_ELEMENT_CHUNK_SIZE, 1144 GRN_INFO_ELEMENT_BUFFER_FREE = .grn_info_type.GRN_INFO_ELEMENT_BUFFER_FREE, 1145 GRN_INFO_ELEMENT_NTERMS = .grn_info_type.GRN_INFO_ELEMENT_NTERMS, 1146 GRN_INFO_ELEMENT_NTERMS_VOID = .grn_info_type.GRN_INFO_ELEMENT_NTERMS_VOID, 1147 GRN_INFO_ELEMENT_SIZE_IN_CHUNK = .grn_info_type.GRN_INFO_ELEMENT_SIZE_IN_CHUNK, 1148 GRN_INFO_ELEMENT_POS_IN_CHUNK = .grn_info_type.GRN_INFO_ELEMENT_POS_IN_CHUNK, 1149 GRN_INFO_ELEMENT_SIZE_IN_BUFFER = .grn_info_type.GRN_INFO_ELEMENT_SIZE_IN_BUFFER, 1150 GRN_INFO_ELEMENT_POS_IN_BUFFER = .grn_info_type.GRN_INFO_ELEMENT_POS_IN_BUFFER, 1151 GRN_INFO_ELEMENT_ESTIMATE_SIZE = .grn_info_type.GRN_INFO_ELEMENT_ESTIMATE_SIZE, 1152 GRN_INFO_NGRAM_UNIT_SIZE = .grn_info_type.GRN_INFO_NGRAM_UNIT_SIZE, 1153 /* 1154 GRN_INFO_VERSION = .grn_info_type.GRN_INFO_VERSION, 1155 GRN_INFO_CONFIGURE_OPTIONS = .grn_info_type.GRN_INFO_CONFIGURE_OPTIONS, 1156 GRN_INFO_CONFIG_PATH = .grn_info_type.GRN_INFO_CONFIG_PATH, 1157 */ 1158 GRN_INFO_PARTIAL_MATCH_THRESHOLD = .grn_info_type.GRN_INFO_PARTIAL_MATCH_THRESHOLD, 1159 GRN_INFO_II_SPLIT_THRESHOLD = .grn_info_type.GRN_INFO_II_SPLIT_THRESHOLD, 1160 GRN_INFO_SUPPORT_ZLIB = .grn_info_type.GRN_INFO_SUPPORT_ZLIB, 1161 GRN_INFO_SUPPORT_LZ4 = .grn_info_type.GRN_INFO_SUPPORT_LZ4, 1162 GRN_INFO_SUPPORT_LZO = .grn_info_type.GRN_INFO_SUPPORT_LZO, 1163 GRN_INFO_NORMALIZER = .grn_info_type.GRN_INFO_NORMALIZER, 1164 GRN_INFO_TOKEN_FILTERS = .grn_info_type.GRN_INFO_TOKEN_FILTERS, 1165 GRN_INFO_SUPPORT_ZSTD = .grn_info_type.GRN_INFO_SUPPORT_ZSTD, 1166 1167 GRN_INFO_SUPPORT_APACHE_ARROW = .grn_info_type.GRN_INFO_SUPPORT_APACHE_ARROW, 1168 } 1169 1170 /* Just for backward compatibility. */ 1171 package alias GRN_INFO_SUPPORT_ARROW = .grn_info_type.GRN_INFO_SUPPORT_APACHE_ARROW; 1172 1173 //GRN_API 1174 .grn_obj* grn_obj_get_info(.grn_ctx* ctx, .grn_obj* obj, .grn_info_type type, .grn_obj* valuebuf); 1175 1176 //GRN_API 1177 .grn_rc grn_obj_set_info(.grn_ctx* ctx, .grn_obj* obj, .grn_info_type type, .grn_obj* value); 1178 1179 //GRN_API 1180 .grn_obj* grn_obj_get_element_info(.grn_ctx* ctx, .grn_obj* obj, .grn_id id, .grn_info_type type, .grn_obj* value); 1181 1182 //GRN_API 1183 .grn_rc grn_obj_set_element_info(.grn_ctx* ctx, .grn_obj* obj, .grn_id id, .grn_info_type type, .grn_obj* value); 1184 1185 //GRN_API 1186 .grn_obj* grn_obj_get_value(.grn_ctx* ctx, .grn_obj* obj, .grn_id id, .grn_obj* value); 1187 1188 //GRN_API 1189 int grn_obj_get_values(.grn_ctx* ctx, .grn_obj* obj, .grn_id offset, void** values); 1190 1191 1192 //ToDo: temp 1193 alias internal_block_func = extern (C) nothrow @nogc void function(); 1194 1195 //ToDo: check 1196 /+ 1197 pragma(inline, true) 1198 nothrow @nogc @disable 1199 void GRN_COLUMN_EACH(.grn_ctx* ctx, .grn_obj* column, uint id, void** value, internal_block_func block) 1200 1201 do 1202 { 1203 int _n; 1204 .grn_id id = 1; 1205 1206 while ((_n = .grn_obj_get_values(ctx, column, id, value)) > 0) { 1207 for (; _n; _n--, id++, value++) { 1208 block(); 1209 } 1210 } 1211 } 1212 +/ 1213 1214 enum GRN_OBJ_SET_MASK = 0x07; 1215 enum GRN_OBJ_SET = 0x01; 1216 enum GRN_OBJ_INCR = 0x02; 1217 enum GRN_OBJ_DECR = 0x03; 1218 enum GRN_OBJ_APPEND = 0x04; 1219 enum GRN_OBJ_PREPEND = 0x05; 1220 enum GRN_OBJ_GET = 0x01 << 4; 1221 enum GRN_OBJ_COMPARE = 0x01 << 5; 1222 enum GRN_OBJ_LOCK = 0x01 << 6; 1223 enum GRN_OBJ_UNLOCK = 0x01 << 7; 1224 1225 //GRN_API 1226 .grn_rc grn_obj_set_value(.grn_ctx* ctx, .grn_obj* obj, .grn_id id, .grn_obj* value, int flags); 1227 1228 //GRN_API 1229 .grn_rc grn_obj_remove(.grn_ctx* ctx, .grn_obj* obj); 1230 1231 //GRN_API 1232 .grn_rc grn_obj_remove_dependent(.grn_ctx* ctx, .grn_obj* obj); 1233 1234 //GRN_API 1235 .grn_rc grn_obj_remove_force(.grn_ctx* ctx, const (char)* name, int name_size); 1236 1237 //GRN_API 1238 .grn_rc grn_obj_rename(.grn_ctx* ctx, .grn_obj* obj, const (char)* name, uint name_size); 1239 1240 //GRN_API 1241 .grn_rc grn_table_rename(.grn_ctx* ctx, .grn_obj* table, const (char)* name, uint name_size); 1242 1243 //GRN_API 1244 .grn_rc grn_column_rename(.grn_ctx* ctx, .grn_obj* column, const (char)* name, uint name_size); 1245 1246 //GRN_API 1247 .grn_rc grn_obj_close(.grn_ctx* ctx, .grn_obj* obj); 1248 1249 //GRN_API 1250 .grn_rc grn_obj_reinit(.grn_ctx* ctx, .grn_obj* obj, .grn_id domain, ubyte flags); 1251 /* On non reference count mode (default): 1252 * This closes the following objects immediately: 1253 * 1254 * * Acceessor 1255 * * Bulk 1256 * * DB 1257 * * Temporary column 1258 * * Temporary table 1259 * 1260 * This does nothing for other objects such as persisted tables and 1261 * columns. 1262 * 1263 * On reference count mode (GRN_ENABLE_REFERENCE_COUNT=yes): 1264 * This closes the following objects immediately: 1265 * 1266 * * Bulk 1267 * * DB 1268 * 1269 * This decreases the reference count of the following objects: 1270 * 1271 * * Acceessor 1272 * * Column (both persisted and temporary) 1273 * * Table (both persisted and temporary) 1274 * 1275 * If the decreased reference count is zero, the object is closed. 1276 */ 1277 //GRN_API 1278 void grn_obj_unlink(.grn_ctx* ctx, .grn_obj* obj); 1279 1280 //GRN_API 1281 .grn_rc grn_obj_refer(.grn_ctx* ctx, .grn_obj* obj); 1282 1283 //GRN_API 1284 .grn_rc grn_obj_refer_recursive(.grn_ctx* ctx, .grn_obj* obj); 1285 1286 //GRN_API 1287 .grn_rc grn_obj_refer_recursive_dependent(.grn_ctx* ctx, .grn_obj* obj); 1288 /* This calls grn_obj_unlink() only on reference count mode 1289 * (GRN_ENABLE_REFERENCE_COUNT=yes) */ 1290 //GRN_API 1291 void grn_obj_unref(.grn_ctx* ctx, .grn_obj* obj); 1292 1293 //GRN_API 1294 void grn_obj_unref_recursive(.grn_ctx* ctx, .grn_obj* obj); 1295 1296 //GRN_API 1297 void grn_obj_unref_recursive_dependent(.grn_ctx* ctx, .grn_obj* obj); 1298 1299 //GRN_API 1300 grn_user_data* grn_obj_user_data(.grn_ctx* ctx, .grn_obj* obj); 1301 1302 //GRN_API 1303 .grn_rc grn_obj_set_finalizer(.grn_ctx* ctx, .grn_obj* obj, grn_proc_func* func); 1304 1305 //GRN_API 1306 const (char)* grn_obj_path(.grn_ctx* ctx, .grn_obj* obj); 1307 1308 //GRN_API 1309 int grn_obj_name(.grn_ctx* ctx, .grn_obj* obj, char* namebuf, int buf_size); 1310 1311 //GRN_API 1312 int grn_column_name(.grn_ctx* ctx, .grn_obj* obj, char* namebuf, int buf_size); 1313 1314 //GRN_API 1315 .grn_id grn_obj_get_range(.grn_ctx* ctx, .grn_obj* obj); 1316 1317 pragma(inline, true) 1318 pure nothrow @trusted @nogc @live 1319 .grn_id GRN_OBJ_GET_DOMAIN(scope const .grn_obj* obj) 1320 1321 in 1322 { 1323 assert(obj != null); 1324 } 1325 1326 do 1327 { 1328 return (obj.header.type == .GRN_TABLE_NO_KEY) ? (.GRN_ID_NIL) : (obj.header.domain); 1329 } 1330 1331 //GRN_API 1332 int grn_obj_expire(.grn_ctx* ctx, .grn_obj* obj, int threshold); 1333 1334 //GRN_API 1335 int grn_obj_check(.grn_ctx* ctx, .grn_obj* obj); 1336 1337 //GRN_API 1338 .grn_rc grn_obj_lock(.grn_ctx* ctx, .grn_obj* obj, .grn_id id, int timeout); 1339 1340 //GRN_API 1341 .grn_rc grn_obj_unlock(.grn_ctx* ctx, .grn_obj* obj, .grn_id id); 1342 1343 //GRN_API 1344 .grn_rc grn_obj_clear_lock(.grn_ctx* ctx, .grn_obj* obj); 1345 1346 //GRN_API 1347 uint grn_obj_is_locked(.grn_ctx* ctx, .grn_obj* obj); 1348 1349 //GRN_API 1350 .grn_rc grn_obj_flush(.grn_ctx* ctx, .grn_obj* obj); 1351 1352 //GRN_API 1353 .grn_rc grn_obj_flush_recursive(.grn_ctx* ctx, .grn_obj* obj); 1354 1355 //GRN_API 1356 .grn_rc grn_obj_flush_recursive_dependent(.grn_ctx* ctx, .grn_obj* obj); 1357 1358 //GRN_API 1359 .grn_rc grn_obj_flush_only_opened(.grn_ctx* ctx, .grn_obj* obj); 1360 1361 //GRN_API 1362 int grn_obj_defrag(.grn_ctx* ctx, .grn_obj* obj, int threshold); 1363 1364 //GRN_API 1365 .grn_obj* grn_obj_db(.grn_ctx* ctx, .grn_obj* obj); 1366 1367 //GRN_API 1368 .grn_id grn_obj_id(.grn_ctx* ctx, .grn_obj* obj); 1369 1370 /* Flags for grn_fuzzy_search_optarg.flags. */ 1371 enum GRN_TABLE_FUZZY_SEARCH_WITH_TRANSPOSITION = 0x01; 1372 1373 struct _grn_fuzzy_search_optarg 1374 { 1375 uint max_distance; 1376 uint max_expansion; 1377 uint prefix_match_size; 1378 int flags; 1379 } 1380 1381 alias grn_fuzzy_search_optarg = ._grn_fuzzy_search_optarg; 1382 1383 enum GRN_MATCH_INFO_GET_MIN_RECORD_ID = 0x01; 1384 enum GRN_MATCH_INFO_ONLY_SKIP_TOKEN = 0x02; 1385 1386 struct _grn_match_info 1387 { 1388 int flags; 1389 .grn_id min; 1390 } 1391 1392 alias grn_match_info = ._grn_match_info; 1393 1394 struct _grn_search_optarg 1395 { 1396 .grn_operator mode; 1397 int similarity_threshold; 1398 int max_interval; 1399 int* weight_vector; 1400 int vector_size; 1401 .grn_obj* proc; 1402 int max_size; 1403 .grn_obj* scorer; 1404 .grn_obj* scorer_args_expr; 1405 uint scorer_args_expr_offset; 1406 .grn_fuzzy_search_optarg fuzzy; 1407 .grn_match_info match_info; 1408 int quorum_threshold; 1409 int additional_last_interval; 1410 float* weight_vector_float; 1411 float weight_float = 0; 1412 .grn_obj* query_options; 1413 .grn_obj* max_element_intervals; 1414 } 1415 1416 alias grn_search_optarg = ._grn_search_optarg; 1417 1418 //GRN_API 1419 .grn_rc grn_obj_search(.grn_ctx* ctx, .grn_obj* obj, .grn_obj* query, .grn_obj* res, .grn_operator op, .grn_search_optarg* optarg); 1420 1421 //GRN_API 1422 .grn_rc grn_proc_set_is_stable(.grn_ctx* ctx, .grn_obj* proc, .grn_bool is_stable); 1423 1424 //GRN_API 1425 .grn_bool grn_proc_is_stable(.grn_ctx* ctx, .grn_obj* proc); 1426 1427 /*------------------------------------------------------------- 1428 * API for hook 1429 */ 1430 1431 //GRN_API 1432 int grn_proc_call_next(.grn_ctx* ctx, .grn_obj* exec_info, .grn_obj* in_, .grn_obj* out_); 1433 1434 //GRN_API 1435 void* grn_proc_get_ctx_local_data(.grn_ctx* ctx, .grn_obj* exec_info); 1436 1437 //GRN_API 1438 void* grn_proc_get_hook_local_data(.grn_ctx* ctx, .grn_obj* exec_info); 1439 1440 enum grn_hook_entry 1441 { 1442 GRN_HOOK_SET = 0, 1443 GRN_HOOK_GET, 1444 GRN_HOOK_INSERT, 1445 GRN_HOOK_DELETE, 1446 GRN_HOOK_SELECT, 1447 } 1448 1449 //Declaration name in C language 1450 enum 1451 { 1452 GRN_HOOK_SET = .grn_hook_entry.GRN_HOOK_SET, 1453 GRN_HOOK_GET = .grn_hook_entry.GRN_HOOK_GET, 1454 GRN_HOOK_INSERT = .grn_hook_entry.GRN_HOOK_INSERT, 1455 GRN_HOOK_DELETE = .grn_hook_entry.GRN_HOOK_DELETE, 1456 GRN_HOOK_SELECT = .grn_hook_entry.GRN_HOOK_SELECT, 1457 } 1458 1459 //GRN_API 1460 .grn_rc grn_obj_add_hook(.grn_ctx* ctx, .grn_obj* obj, .grn_hook_entry entry, int offset, .grn_obj* proc, .grn_obj* data); 1461 1462 //GRN_API 1463 int grn_obj_get_nhooks(.grn_ctx* ctx, .grn_obj* obj, .grn_hook_entry entry); 1464 1465 //GRN_API 1466 .grn_obj* grn_obj_get_hook(.grn_ctx* ctx, .grn_obj* obj, .grn_hook_entry entry, int offset, .grn_obj* data); 1467 1468 //GRN_API 1469 .grn_rc grn_obj_delete_hook(.grn_ctx* ctx, .grn_obj* obj, .grn_hook_entry entry, int offset); 1470 1471 //GRN_API 1472 .grn_obj* grn_obj_open(.grn_ctx* ctx, ubyte type, .grn_obj_flags flags, .grn_id domain); 1473 1474 /* Deprecated since 5.0.1. Use grn_column_find_index_data() instead. */ 1475 1476 //GRN_API 1477 int grn_column_index(.grn_ctx* ctx, .grn_obj* column, .grn_operator op, .grn_obj** indexbuf, int buf_size, int* section); 1478 1479 /* @since 5.0.1. */ 1480 struct _grn_index_datum 1481 { 1482 .grn_obj* index; 1483 uint section; 1484 } 1485 1486 alias grn_index_datum = ._grn_index_datum; 1487 1488 /* @since 5.0.1. */ 1489 1490 //GRN_API 1491 uint grn_column_find_index_data(.grn_ctx* ctx, .grn_obj* column, .grn_operator op, .grn_index_datum* index_data, uint n_index_data); 1492 /* @since 5.1.2. */ 1493 1494 //GRN_API 1495 uint grn_column_get_all_index_data(.grn_ctx* ctx, .grn_obj* column, .grn_index_datum* index_data, uint n_index_data); 1496 1497 /* @since 9.1.2. */ 1498 //GRN_API 1499 .grn_rc grn_column_get_all_index_columns(.grn_ctx* ctx, .grn_obj* column, .grn_obj* index_columns); 1500 1501 //GRN_API 1502 .grn_rc grn_obj_delete_by_id(.grn_ctx* ctx, .grn_obj* db, .grn_id id, .grn_bool removep); 1503 1504 //GRN_API 1505 .grn_rc grn_obj_path_by_id(.grn_ctx* ctx, .grn_obj* db, .grn_id id, char* buffer); 1506 1507 /* query & snippet */ 1508 1509 static if (!__traits(compiles, .GRN_QUERY_AND)) { 1510 enum GRN_QUERY_AND = '+'; 1511 } 1512 1513 static if (!__traits(compiles, .GRN_QUERY_AND_NOT)) { 1514 static if (__traits(compiles, .GRN_QUERY_BUT)) { 1515 /* Deprecated. Just for backward compatibility. */ 1516 enum GRN_QUERY_AND_NOT = .GRN_QUERY_BUT; 1517 } else { 1518 enum GRN_QUERY_AND_NOT = '-'; 1519 } 1520 } 1521 1522 static if (!__traits(compiles, .GRN_QUERY_ADJ_INC)) { 1523 enum GRN_QUERY_ADJ_INC = '>'; 1524 } 1525 1526 static if (!__traits(compiles, .GRN_QUERY_ADJ_DEC)) { 1527 enum GRN_QUERY_ADJ_DEC = '<'; 1528 } 1529 1530 static if (!__traits(compiles, .GRN_QUERY_ADJ_NEG)) { 1531 enum GRN_QUERY_ADJ_NEG = '~'; 1532 } 1533 1534 static if (!__traits(compiles, .GRN_QUERY_PREFIX)) { 1535 enum GRN_QUERY_PREFIX = '*'; 1536 } 1537 1538 static if (!__traits(compiles, .GRN_QUERY_PARENL)) { 1539 enum GRN_QUERY_PARENL = '('; 1540 } 1541 1542 static if (!__traits(compiles, .GRN_QUERY_PARENR)) { 1543 enum GRN_QUERY_PARENR = ')'; 1544 } 1545 1546 static if (!__traits(compiles, .GRN_QUERY_QUOTEL)) { 1547 enum GRN_QUERY_QUOTEL = '"'; 1548 } 1549 1550 static if (!__traits(compiles, .GRN_QUERY_QUOTER)) { 1551 enum GRN_QUERY_QUOTER = '"'; 1552 } 1553 1554 static if (!__traits(compiles, .GRN_QUERY_ESCAPE)) { 1555 enum GRN_QUERY_ESCAPE = '\\'; 1556 } 1557 1558 static if (!__traits(compiles, .GRN_QUERY_COLUMN)) { 1559 enum GRN_QUERY_COLUMN = ':'; 1560 } 1561 1562 struct _grn_snip_mapping 1563 { 1564 void* dummy; 1565 } 1566 1567 alias grn_snip_mapping = ._grn_snip_mapping; 1568 1569 enum GRN_SNIP_NORMALIZE = 0x01 << 0; 1570 enum GRN_SNIP_COPY_TAG = 0x01 << 1; 1571 enum GRN_SNIP_SKIP_LEADING_SPACES = 0x01 << 2; 1572 1573 /* 1574 //ToDo: 1575 #define GRN_SNIP_MAPPING_HTML_ESCAPE ((.grn_snip_mapping *)-1) 1576 */ 1577 1578 //GRN_API 1579 .grn_obj* grn_snip_open(.grn_ctx* ctx, int flags, uint width, uint max_results, const (char)* defaultopentag, uint defaultopentag_len, const (char)* defaultclosetag, uint defaultclosetag_len, .grn_snip_mapping* mapping); 1580 1581 //GRN_API 1582 .grn_rc grn_snip_add_cond(.grn_ctx* ctx, .grn_obj* snip, const (char)* keyword, uint keyword_len, const (char)* opentag, uint opentag_len, const (char)* closetag, uint closetag_len); 1583 1584 //GRN_API 1585 .grn_rc grn_snip_set_normalizer(.grn_ctx* ctx, .grn_obj* snip, .grn_obj* normalizer); 1586 1587 //GRN_API 1588 .grn_obj* grn_snip_get_normalizer(.grn_ctx* ctx, .grn_obj* snip); 1589 1590 //GRN_API 1591 .grn_rc grn_snip_set_delimiter_regexp(.grn_ctx* ctx, .grn_obj* snip, const (char)* pattern, int pattern_length); 1592 1593 //GRN_API 1594 const (char)* grn_snip_get_delimiter_regexp(.grn_ctx* ctx, .grn_obj* snip, size_t* pattern_length); 1595 1596 //GRN_API 1597 .grn_rc grn_snip_exec(.grn_ctx* ctx, .grn_obj* snip, const (char)* string_, uint string_len, uint* nresults, uint* max_tagged_len); 1598 1599 //GRN_API 1600 .grn_rc grn_snip_get_result(.grn_ctx* ctx, .grn_obj* snip, const uint index, char* result, uint* result_len); 1601 1602 /* log */ 1603 1604 enum GRN_LOG_NONE = 0x00 << 0; 1605 enum GRN_LOG_TIME = 0x01 << 0; 1606 enum GRN_LOG_TITLE = 0x01 << 1; 1607 enum GRN_LOG_MESSAGE = 0x01 << 2; 1608 enum GRN_LOG_LOCATION = 0x01 << 3; 1609 enum GRN_LOG_PID = 0x01 << 4; 1610 enum GRN_LOG_PROCESS_ID = .GRN_LOG_PID; 1611 enum GRN_LOG_THREAD_ID = 0x01 << 5; 1612 enum GRN_LOG_ALL = .GRN_LOG_TIME | .GRN_LOG_TITLE | .GRN_LOG_MESSAGE | .GRN_LOG_LOCATION | .GRN_LOG_PROCESS_ID | .GRN_LOG_THREAD_ID; 1613 enum GRN_LOG_DEFAULT = .GRN_LOG_TIME | .GRN_LOG_MESSAGE; 1614 1615 /* Deprecated since 2.1.2. Use .grn_logger instead. */ 1616 struct _grn_logger_info 1617 { 1618 extern (C): 1619 .grn_log_level max_level; 1620 int flags; 1621 void function (int, const (char)*, const (char)*, const (char)*, const (char)*, void*) func; 1622 void* func_arg; 1623 } 1624 1625 /* Deprecated since 2.1.2. Use .grn_logger instead. */ 1626 alias grn_logger_info = ._grn_logger_info; 1627 1628 /* Deprecated since 2.1.2. Use grn_logger_set() instead. */ 1629 1630 //GRN_API 1631 .grn_rc grn_logger_info_set(.grn_ctx* ctx, const (.grn_logger_info)* info); 1632 1633 struct _grn_logger 1634 { 1635 extern (C): 1636 .grn_log_level max_level; 1637 int flags; 1638 void* user_data; 1639 void function (.grn_ctx* ctx, .grn_log_level level, const (char)* timestamp, const (char)* title, const (char)* message, const (char)* location, void* user_data) log; 1640 void function (.grn_ctx* ctx, void* user_data) reopen; 1641 void function (.grn_ctx* ctx, void* user_data) fin; 1642 } 1643 1644 alias grn_logger = ._grn_logger; 1645 1646 //GRN_API 1647 .grn_bool grn_log_flags_parse(const (char)* string_, int string_size, int* flags); 1648 1649 //GRN_API 1650 .grn_rc grn_logger_set(.grn_ctx* ctx, const (.grn_logger)* logger); 1651 1652 //GRN_API 1653 void grn_logger_set_max_level(.grn_ctx* ctx, .grn_log_level max_level); 1654 1655 //GRN_API 1656 .grn_log_level grn_logger_get_max_level(.grn_ctx* ctx); 1657 1658 /+ 1659 #ifdef __GNUC__ 1660 # define GRN_ATTRIBUTE_PRINTF(fmt_pos) __attribute__ ((format(printf, fmt_pos, fmt_pos + 1))) 1661 #else 1662 # define GRN_ATTRIBUTE_PRINTF(fmt_pos) 1663 #endif /* __GNUC__ */ 1664 1665 #if defined(__clang__) 1666 # if __has_attribute(__alloc_size__) 1667 # define HAVE_ALLOC_SIZE_ATTRIBUTE 1668 # endif /* __has_attribute(__alloc_size__) */ 1669 #elif defined(__GNUC__) && ((__GNUC__ >= 5) || (__GNUC__ > 4 && __GNUC_MINOR__ >= 3)) 1670 # define HAVE_ALLOC_SIZE_ATTRIBUTE 1671 #endif /* __clang__ */ 1672 1673 #ifdef HAVE_ALLOC_SIZE_ATTRIBUTE 1674 # define GRN_ATTRIBUTE_ALLOC_SIZE(size) __attribute__ ((alloc_size(size))) 1675 # define GRN_ATTRIBUTE_ALLOC_SIZE_N(n, size) __attribute__ ((alloc_size(n, size))) 1676 #else 1677 # define GRN_ATTRIBUTE_ALLOC_SIZE(size) 1678 # define GRN_ATTRIBUTE_ALLOC_SIZE_N(n, size) 1679 #endif /* HAVE_ALLOC_SIZE_ATTRIBUTE */ 1680 1681 //GRN_API 1682 void grn_logger_put(.grn_ctx* ctx, .grn_log_level level, const (char)* file, int line, const (char)* func, const (char)* fmt, ...) GRN_ATTRIBUTE_PRINTF(6); 1683 +/ 1684 1685 //GRN_API 1686 void grn_logger_putv(.grn_ctx* ctx, .grn_log_level level, const (char)* file, int line, const (char)* func, const (char)* fmt, core.stdc.stdarg.va_list ap); 1687 1688 //GRN_API 1689 void grn_logger_reopen(.grn_ctx* ctx); 1690 1691 //GRN_API 1692 .grn_bool grn_logger_pass(.grn_ctx* ctx, .grn_log_level level); 1693 1694 //GRN_API 1695 .grn_bool grn_logger_is_default_logger(.grn_ctx* ctx); 1696 1697 static if (!__traits(compiles, GRN_LOG_DEFAULT_LEVEL)) { 1698 enum GRN_LOG_DEFAULT_LEVEL = .grn_log_level.GRN_LOG_NOTICE; 1699 } 1700 1701 //GRN_API 1702 void grn_default_logger_set_max_level(.grn_log_level level); 1703 1704 //GRN_API 1705 .grn_log_level grn_default_logger_get_max_level(); 1706 1707 //GRN_API 1708 void grn_default_logger_set_flags(int flags); 1709 1710 //GRN_API 1711 int grn_default_logger_get_flags(); 1712 1713 //GRN_API 1714 void grn_default_logger_set_path(const (char)* path); 1715 1716 //GRN_API 1717 const (char)* grn_default_logger_get_path(); 1718 1719 //GRN_API 1720 void grn_default_logger_set_rotate_threshold_size(.off_t threshold); 1721 1722 //GRN_API 1723 .off_t grn_default_logger_get_rotate_threshold_size(); 1724 1725 /* 1726 #define GRN_LOG(ctx, level, ...) 1727 if (grn_logger_pass(ctx, level)) { 1728 grn_logger_put(ctx, (level), __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__); 1729 } 1730 */ 1731 1732 struct _grn_query_logger 1733 { 1734 extern (C): 1735 uint flags; 1736 void* user_data; 1737 void function(.grn_ctx* ctx, uint flag, const (char)* timestamp, const (char)* info, const (char)* message, void* user_data) log; 1738 void function(.grn_ctx* ctx, void* user_data) reopen; 1739 void function(.grn_ctx* ctx, void* user_data) fin; 1740 } 1741 1742 alias grn_query_logger = ._grn_query_logger; 1743 1744 //GRN_API 1745 .grn_bool grn_query_log_flags_parse(const (char)* string_, int string_size, uint* flags); 1746 1747 //GRN_API 1748 .grn_rc grn_query_logger_set(.grn_ctx* ctx, const (.grn_query_logger)* logger); 1749 1750 //GRN_API 1751 void grn_query_logger_set_flags(.grn_ctx* ctx, uint flags); 1752 1753 //GRN_API 1754 void grn_query_logger_add_flags(.grn_ctx* ctx, uint flags); 1755 1756 //GRN_API 1757 void grn_query_logger_remove_flags(.grn_ctx* ctx, uint flags); 1758 1759 //GRN_API 1760 uint grn_query_logger_get_flags(.grn_ctx* ctx); 1761 1762 /+ 1763 //ToDo: 1764 //GRN_API 1765 void grn_query_logger_put(.grn_ctx* ctx, uint flag, const (char)* mark, const (char)* format, ...) GRN_ATTRIBUTE_PRINTF(4); 1766 +/ 1767 1768 //GRN_API 1769 void grn_query_logger_reopen(.grn_ctx* ctx); 1770 1771 //GRN_API 1772 .grn_bool grn_query_logger_pass(.grn_ctx* ctx, uint flag); 1773 1774 //GRN_API 1775 void grn_default_query_logger_set_flags(uint flags); 1776 1777 //GRN_API 1778 uint grn_default_query_logger_get_flags(); 1779 1780 //GRN_API 1781 void grn_default_query_logger_set_path(const (char)* path); 1782 1783 //GRN_API 1784 const (char)* grn_default_query_logger_get_path(); 1785 1786 //GRN_API 1787 void grn_default_query_logger_set_rotate_threshold_size(.off_t threshold); 1788 1789 //GRN_API 1790 .off_t grn_default_query_logger_get_rotate_threshold_size(); 1791 1792 /* 1793 //ToDo: 1794 #define GRN_QUERY_LOG(ctx, flag, mark, format, ...) 1795 if (grn_query_logger_pass(ctx, flag)) { 1796 grn_query_logger_put(ctx, (flag), (mark), format, __VA_ARGS__); 1797 } 1798 */ 1799 1800 /* grn_bulk */ 1801 1802 enum GRN_BULK_BUFSIZE = .grn_obj.sizeof - .grn_obj_header.sizeof; 1803 /* This assumes that .GRN_BULK_BUFSIZE is less than 32 (= 0x20). */ 1804 enum GRN_BULK_BUFSIZE_MAX = 0x1F; 1805 1806 pragma(inline, true) 1807 pure nothrow @trusted @nogc @live 1808 size_t GRN_BULK_SIZE_IN_FLAGS(size_t flags) 1809 1810 do 1811 { 1812 return flags & .GRN_BULK_BUFSIZE_MAX; 1813 } 1814 1815 pragma(inline, true) 1816 pure nothrow @trusted @nogc @live 1817 ubyte GRN_BULK_OUTP(scope const .grn_obj* bulk) 1818 1819 in 1820 { 1821 assert(bulk != null); 1822 } 1823 1824 do 1825 { 1826 return bulk.header.impl_flags & .GRN_OBJ_OUTPLACE; 1827 } 1828 1829 pragma(inline, true) 1830 pure nothrow @trusted @nogc @live 1831 void GRN_BULK_REWIND(scope .grn_obj* bulk) 1832 1833 in 1834 { 1835 assert(bulk != null); 1836 } 1837 1838 do 1839 { 1840 if (bulk.header.type == .GRN_VECTOR) { 1841 .grn_obj* _body = bulk.u.v.body_; 1842 1843 if (_body != null) { 1844 if (.GRN_BULK_OUTP(_body)) { 1845 _body.u.b.curr = _body.u.b.head; 1846 } else { 1847 _body.header.flags &= ~.GRN_BULK_BUFSIZE_MAX; 1848 } 1849 } 1850 1851 bulk.u.v.n_sections = 0; 1852 } else { 1853 if (.GRN_BULK_OUTP(bulk)) { 1854 bulk.u.b.curr = bulk.u.b.head; 1855 } else { 1856 bulk.header.flags &= ~.GRN_BULK_BUFSIZE_MAX; 1857 } 1858 } 1859 } 1860 1861 pragma(inline, true) 1862 pure nothrow @trusted @nogc @live 1863 void GRN_BULK_SET_CURR(scope .grn_obj* buf, char* p) 1864 1865 in 1866 { 1867 assert(buf != null); 1868 } 1869 1870 do 1871 { 1872 if (.GRN_BULK_OUTP(buf)) { 1873 buf.u.b.curr = p; 1874 } else { 1875 buf.header.flags = cast(.grn_obj_flags)(p -GRN_BULK_HEAD(buf)); 1876 } 1877 } 1878 1879 pragma(inline, true) 1880 pure nothrow @trusted @nogc @live 1881 void GRN_BULK_INCR_LEN(scope .grn_obj* bulk, size_t len) 1882 1883 in 1884 { 1885 assert(bulk != null); 1886 } 1887 1888 do 1889 { 1890 if (.GRN_BULK_OUTP(bulk)) { 1891 bulk.u.b.curr += len; 1892 } else { 1893 bulk.header.flags += cast(.grn_obj_flags)(len); 1894 } 1895 } 1896 1897 pragma(inline, true) 1898 pure nothrow @trusted @nogc @live 1899 size_t GRN_BULK_WSIZE(return scope .grn_obj* bulk) 1900 1901 in 1902 { 1903 assert(bulk != null); 1904 } 1905 1906 do 1907 { 1908 return (.GRN_BULK_OUTP(bulk)) ? (cast(size_t)(bulk.u.b.tail - bulk.u.b.head)) : (.GRN_BULK_BUFSIZE); 1909 } 1910 1911 pragma(inline, true) 1912 pure nothrow @trusted @nogc @live 1913 size_t GRN_BULK_REST(return scope .grn_obj* bulk) 1914 1915 in 1916 { 1917 assert(bulk != null); 1918 } 1919 1920 do 1921 { 1922 return (.GRN_BULK_OUTP(bulk)) ? (cast(size_t)(bulk.u.b.tail - bulk.u.b.curr)) : (.GRN_BULK_BUFSIZE - .GRN_BULK_SIZE_IN_FLAGS(bulk.header.flags)); 1923 } 1924 1925 pragma(inline, true) 1926 pure nothrow @trusted @nogc @live 1927 size_t GRN_BULK_VSIZE(return scope .grn_obj* bulk) 1928 1929 in 1930 { 1931 assert(bulk != null); 1932 } 1933 1934 do 1935 { 1936 return (.GRN_BULK_OUTP(bulk)) ? (cast(size_t)(bulk.u.b.curr - bulk.u.b.head)) : (.GRN_BULK_SIZE_IN_FLAGS(bulk.header.flags)); 1937 } 1938 1939 pragma(inline, true) 1940 pure nothrow @trusted @nogc @live 1941 char* GRN_BULK_EMPTYP(return scope .grn_obj* bulk) 1942 1943 in 1944 { 1945 assert(bulk != null); 1946 } 1947 1948 do 1949 { 1950 return (.GRN_BULK_OUTP(bulk)) ? (cast(char*)(bulk.u.b.curr == bulk.u.b.head)) : (cast(char*)(!(.GRN_BULK_SIZE_IN_FLAGS(bulk.header.flags)))); 1951 } 1952 1953 pragma(inline, true) 1954 pure nothrow @trusted @nogc @live 1955 char* GRN_BULK_HEAD(return scope .grn_obj* bulk) 1956 1957 in 1958 { 1959 assert(bulk != null); 1960 } 1961 1962 do 1963 { 1964 return (.GRN_BULK_OUTP(bulk)) ? (bulk.u.b.head) : (cast(char*)(&(bulk.u.b.head))); 1965 } 1966 1967 pragma(inline, true) 1968 pure nothrow @trusted @nogc @live 1969 char* GRN_BULK_CURR(return scope .grn_obj* bulk) 1970 1971 in 1972 { 1973 assert(bulk != null); 1974 } 1975 1976 do 1977 { 1978 return (.GRN_BULK_OUTP(bulk)) ? (bulk.u.b.curr) : (cast(char*)(&(bulk.u.b.head)) + .GRN_BULK_SIZE_IN_FLAGS(bulk.header.flags)); 1979 } 1980 1981 pragma(inline, true) 1982 pure nothrow @trusted @nogc @live 1983 char* GRN_BULK_TAIL(return scope .grn_obj* bulk) 1984 1985 in 1986 { 1987 assert(bulk != null); 1988 } 1989 1990 do 1991 { 1992 return (.GRN_BULK_OUTP(bulk)) ? (bulk.u.b.tail) : (cast(char*)(&(bulk[1]))); 1993 } 1994 1995 //GRN_API 1996 .grn_rc grn_bulk_reinit(.grn_ctx* ctx, .grn_obj* bulk, size_t size); 1997 1998 //GRN_API 1999 .grn_rc grn_bulk_resize(.grn_ctx* ctx, .grn_obj* bulk, size_t newsize); 2000 2001 //GRN_API 2002 .grn_rc grn_bulk_write(.grn_ctx* ctx, .grn_obj* bulk, const (char)* str, size_t len); 2003 2004 //GRN_API 2005 .grn_rc grn_bulk_write_from(.grn_ctx* ctx, .grn_obj* bulk, const (char)* str, size_t from, size_t len); 2006 2007 //GRN_API 2008 .grn_rc grn_bulk_reserve(.grn_ctx* ctx, .grn_obj* bulk, size_t len); 2009 2010 //GRN_API 2011 .grn_rc grn_bulk_space(.grn_ctx* ctx, .grn_obj* bulk, size_t len); 2012 2013 //GRN_API 2014 .grn_rc grn_bulk_truncate(.grn_ctx* ctx, .grn_obj* bulk, size_t len); 2015 2016 //GRN_API 2017 char* grn_bulk_detach(.grn_ctx* ctx, .grn_obj* bulk); 2018 2019 //GRN_API 2020 .grn_rc grn_bulk_fin(.grn_ctx* ctx, .grn_obj* bulk); 2021 2022 /* grn_text */ 2023 2024 //GRN_API 2025 .grn_rc grn_text_itoa(.grn_ctx* ctx, .grn_obj* bulk, int i); 2026 2027 //GRN_API 2028 .grn_rc grn_text_itoa_padded(.grn_ctx* ctx, .grn_obj* bulk, int i, char ch, size_t len); 2029 2030 //GRN_API 2031 .grn_rc grn_text_lltoa(.grn_ctx* ctx, .grn_obj* bulk, long i); 2032 2033 //GRN_API 2034 .grn_rc grn_text_f32toa(.grn_ctx* ctx, .grn_obj* bulk, float f); 2035 2036 //GRN_API 2037 .grn_rc grn_text_ftoa(.grn_ctx* ctx, .grn_obj* bulk, double d); 2038 2039 //GRN_API 2040 .grn_rc grn_text_itoh(.grn_ctx* ctx, .grn_obj* bulk, uint i, size_t len); 2041 2042 //GRN_API 2043 .grn_rc grn_text_itob(.grn_ctx* ctx, .grn_obj* bulk, .grn_id id); 2044 2045 //GRN_API 2046 .grn_rc grn_text_lltob32h(.grn_ctx* ctx, .grn_obj* bulk, long i); 2047 2048 //GRN_API 2049 .grn_rc grn_text_benc(.grn_ctx* ctx, .grn_obj* bulk, uint v); 2050 2051 //GRN_API 2052 .grn_rc grn_text_esc(.grn_ctx* ctx, .grn_obj* bulk, const (char)* s, size_t len); 2053 2054 //GRN_API 2055 .grn_rc grn_text_urlenc(.grn_ctx* ctx, .grn_obj* buf, const (char)* str, size_t len); 2056 2057 //GRN_API 2058 const (char)* grn_text_urldec(.grn_ctx* ctx, .grn_obj* buf, const (char)* s, const (char)* e, char d); 2059 2060 //GRN_API 2061 .grn_rc grn_text_escape_xml(.grn_ctx* ctx, .grn_obj* buf, const (char)* s, size_t len); 2062 2063 //GRN_API 2064 .grn_rc grn_text_time2rfc1123(.grn_ctx* ctx, .grn_obj* bulk, int sec); 2065 2066 /+ 2067 //ToDo: 2068 //GRN_API 2069 .grn_rc grn_text_printf(.grn_ctx* ctx, .grn_obj* bulk, const (char)* format, ...) GRN_ATTRIBUTE_PRINTF(3); 2070 +/ 2071 2072 //GRN_API 2073 .grn_rc grn_text_printfv(.grn_ctx* ctx, .grn_obj* bulk, const (char)* format, core.stdc.stdarg.va_list args); 2074 /* Deprecated since 10.0.3. Use grn_text_printfv() instead. */ 2075 //GRN_API 2076 .grn_rc grn_text_vprintf(.grn_ctx* ctx, .grn_obj* bulk, const (char)* format, core.stdc.stdarg.va_list args); 2077 2078 alias grn_recv_handler_func = extern (C) void function(.grn_ctx* ctx, int flags, void* user_data); 2079 2080 //GRN_API 2081 void grn_ctx_recv_handler_set(.grn_ctx*, .grn_recv_handler_func func, void* user_data); 2082 2083 2084 /* various values exchanged via .grn_obj */ 2085 2086 enum GRN_OBJ_DO_SHALLOW_COPY = .GRN_OBJ_REFER|.GRN_OBJ_OUTPLACE; 2087 enum GRN_OBJ_VECTOR = 0x01 << 7; 2088 2089 /+ 2090 #define GRN_OBJ_DO_SHALLOW_COPY (GRN_OBJ_REFER|GRN_OBJ_OUTPLACE) 2091 #define GRN_OBJ_VECTOR (0x01<<7) 2092 2093 #define GRN_OBJ_MUTABLE(obj) ((obj) && (obj)->header.type <= GRN_VECTOR) 2094 2095 #define GRN_VALUE_FIX_SIZE_INIT(obj,flags,domain)\ 2096 GRN_OBJ_INIT((obj), ((flags) & GRN_OBJ_VECTOR) ? GRN_UVECTOR : GRN_BULK,\ 2097 ((flags) & GRN_OBJ_DO_SHALLOW_COPY), (domain)) 2098 #define GRN_VALUE_VAR_SIZE_INIT(obj,flags,domain)\ 2099 GRN_OBJ_INIT((obj), ((flags) & GRN_OBJ_VECTOR) ? GRN_VECTOR : GRN_BULK,\ 2100 ((flags) & GRN_OBJ_DO_SHALLOW_COPY), (domain)) 2101 2102 #define GRN_VOID_INIT(obj) GRN_OBJ_INIT((obj), GRN_VOID, 0, GRN_DB_VOID) 2103 #define GRN_TEXT_INIT(obj,flags) \ 2104 GRN_VALUE_VAR_SIZE_INIT(obj, flags, GRN_DB_TEXT) 2105 #define GRN_SHORT_TEXT_INIT(obj,flags) \ 2106 GRN_VALUE_VAR_SIZE_INIT(obj, flags, GRN_DB_SHORT_TEXT) 2107 #define GRN_LONG_TEXT_INIT(obj,flags) \ 2108 GRN_VALUE_VAR_SIZE_INIT(obj, flags, GRN_DB_LONG_TEXT) 2109 #define GRN_TEXT_SET_REF(obj,str,len) do {\ 2110 (obj)->u.b.head = (char *)(str);\ 2111 (obj)->u.b.curr = (char *)(str) + (len);\ 2112 } while (0) 2113 #define GRN_TEXT_SET(ctx,obj,str,len) do {\ 2114 if ((obj)->header.impl_flags & GRN_OBJ_REFER) {\ 2115 GRN_TEXT_SET_REF((obj), (str), (len));\ 2116 } else {\ 2117 grn_bulk_write_from((ctx), (obj), (const char *)(str), 0, (unsigned int)(len));\ 2118 }\ 2119 } while (0) 2120 #define GRN_TEXT_PUT(ctx,obj,str,len) \ 2121 grn_bulk_write((ctx), (obj), (const char *)(str), (unsigned int)(len)) 2122 #define GRN_TEXT_PUTC(ctx,obj,c) do {\ 2123 char _c = (c); grn_bulk_write((ctx), (obj), &_c, 1);\ 2124 } while (0) 2125 2126 #define GRN_TEXT_PUTS(ctx,obj,str) GRN_TEXT_PUT((ctx), (obj), (str), strlen(str)) 2127 #define GRN_TEXT_SETS(ctx,obj,str) GRN_TEXT_SET((ctx), (obj), (str), strlen(str)) 2128 #define GRN_TEXT_VALUE(obj) GRN_BULK_HEAD(obj) 2129 #define GRN_TEXT_LEN(obj) GRN_BULK_VSIZE(obj) 2130 2131 #define GRN_TEXT_EQUAL_CSTRING(bulk, string_)\ 2132 (GRN_TEXT_LEN(bulk) == strlen(string_) &&\ 2133 memcmp(GRN_TEXT_VALUE(bulk), string_, GRN_TEXT_LEN(bulk)) == 0) 2134 2135 #define GRN_BOOL_INIT(obj,flags) \ 2136 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_BOOL) 2137 #define GRN_INT8_INIT(obj,flags) \ 2138 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_INT8) 2139 #define GRN_UINT8_INIT(obj,flags) \ 2140 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_UINT8) 2141 #define GRN_INT16_INIT(obj,flags) \ 2142 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_INT16) 2143 #define GRN_UINT16_INIT(obj,flags) \ 2144 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_UINT16) 2145 #define GRN_INT32_INIT(obj,flags) \ 2146 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_INT32) 2147 #define GRN_UINT32_INIT(obj,flags) \ 2148 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_UINT32) 2149 #define GRN_INT64_INIT(obj,flags) \ 2150 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_INT64) 2151 #define GRN_UINT64_INIT(obj,flags) \ 2152 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_UINT64) 2153 #define GRN_FLOAT32_INIT(obj, flags) \ 2154 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_FLOAT32) 2155 #define GRN_FLOAT_INIT(obj,flags) \ 2156 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_FLOAT) 2157 #define GRN_TIME_INIT(obj,flags) \ 2158 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_TIME) 2159 #define GRN_RECORD_INIT GRN_VALUE_FIX_SIZE_INIT 2160 #define GRN_PTR_INIT(obj,flags,domain)\ 2161 GRN_OBJ_INIT((obj), ((flags) & GRN_OBJ_VECTOR) ? GRN_PVECTOR : GRN_PTR,\ 2162 ((flags) & (GRN_OBJ_DO_SHALLOW_COPY | GRN_OBJ_OWN)),\ 2163 (domain)) 2164 #define GRN_TOKYO_GEO_POINT_INIT(obj,flags) \ 2165 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_TOKYO_GEO_POINT) 2166 #define GRN_WGS84_GEO_POINT_INIT(obj,flags) \ 2167 GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_WGS84_GEO_POINT) 2168 2169 #define GRN_BOOL_SET(ctx,obj,val) do {\ 2170 bool _val = (bool)(val);\ 2171 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(bool));\ 2172 } while (0) 2173 #define GRN_INT8_SET(ctx,obj,val) do {\ 2174 int8_t _val = (int8_t)(val);\ 2175 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(int8_t));\ 2176 } while (0) 2177 #define GRN_UINT8_SET(ctx,obj,val) do {\ 2178 uint8_t _val = (uint8_t)(val);\ 2179 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(uint8_t));\ 2180 } while (0) 2181 #define GRN_INT16_SET(ctx,obj,val) do {\ 2182 int16_t _val = (int16_t)(val);\ 2183 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(int16_t));\ 2184 } while (0) 2185 #define GRN_UINT16_SET(ctx,obj,val) do {\ 2186 uint16_t _val = (uint16_t)(val);\ 2187 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(uint16_t));\ 2188 } while (0) 2189 #define GRN_INT32_SET(ctx,obj,val) do {\ 2190 int32_t _val = (int32_t)(val);\ 2191 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(int32_t));\ 2192 } while (0) 2193 #define GRN_UINT32_SET(ctx,obj,val) do {\ 2194 uint32_t _val = (uint32_t)(val);\ 2195 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(uint32_t));\ 2196 } while (0) 2197 #define GRN_INT64_SET(ctx,obj,val) do {\ 2198 int64_t _val = (int64_t)(val);\ 2199 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(int64_t));\ 2200 } while (0) 2201 #define GRN_UINT64_SET(ctx,obj,val) do {\ 2202 uint64_t _val = (uint64_t)(val);\ 2203 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(uint64_t));\ 2204 } while (0) 2205 #define GRN_FLOAT32_SET(ctx, obj, val) \ 2206 do { \ 2207 float _val = (float) (val); \ 2208 grn_bulk_write_from((ctx), (obj), (char*) &_val, 0, sizeof(float)); \ 2209 } while (0) 2210 #define GRN_FLOAT_SET(ctx,obj,val) do {\ 2211 double _val = (double)(val);\ 2212 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(double));\ 2213 } while (0) 2214 #define GRN_TIME_SET GRN_INT64_SET 2215 #define GRN_RECORD_SET(ctx,obj,val) do {\ 2216 grn_id _val = (grn_id)(val);\ 2217 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(grn_id));\ 2218 } while (0) 2219 #define GRN_PTR_SET(ctx,obj,val) do {\ 2220 grn_obj *_val = (grn_obj *)(val);\ 2221 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(grn_obj *));\ 2222 } while (0) 2223 2224 #define GRN_GEO_DEGREE2MSEC(degree)\ 2225 ((int32_t)((degree) * 3600 * 1000 + ((degree) > 0 ? 0.5 : -0.5))) 2226 #define GRN_GEO_MSEC2DEGREE(msec)\ 2227 ((((int32_t)(msec)) / 3600.0) * 0.001) 2228 2229 #define GRN_GEO_POINT_SET(ctx,obj,_latitude,_longitude) do {\ 2230 grn_geo_point _val;\ 2231 _val.latitude = (int)(_latitude);\ 2232 _val.longitude = (int)(_longitude);\ 2233 grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(grn_geo_point));\ 2234 } while (0) 2235 2236 #define GRN_BOOL_SET_AT(ctx,obj,offset,val) do {\ 2237 bool _val = (bool)(val);\ 2238 grn_bulk_write_from((ctx), (obj), (char *)&_val,\ 2239 (offset), sizeof(bool));\ 2240 } while (0) 2241 #define GRN_INT8_SET_AT(ctx,obj,offset,val) do {\ 2242 int8_t _val = (int8_t)(val);\ 2243 grn_bulk_write_from((ctx), (obj), (char *)&_val,\ 2244 (offset) * sizeof(int8_t), sizeof(int8_t));\ 2245 } while (0) 2246 #define GRN_UINT8_SET_AT(ctx,obj,offset,val) do { \ 2247 uint8_t _val = (uint8_t)(val);\ 2248 grn_bulk_write_from((ctx), (obj), (char *)&_val,\ 2249 (offset) * sizeof(uint8_t), sizeof(uint8_t));\ 2250 } while (0) 2251 #define GRN_INT16_SET_AT(ctx,obj,offset,val) do {\ 2252 int16_t _val = (int16_t)(val);\ 2253 grn_bulk_write_from((ctx), (obj), (char *)&_val,\ 2254 (offset) * sizeof(int16_t), sizeof(int16_t));\ 2255 } while (0) 2256 #define GRN_UINT16_SET_AT(ctx,obj,offset,val) do { \ 2257 uint16_t _val = (uint16_t)(val);\ 2258 grn_bulk_write_from((ctx), (obj), (char *)&_val,\ 2259 (offset) * sizeof(uint16_t), sizeof(uint16_t));\ 2260 } while (0) 2261 #define GRN_INT32_SET_AT(ctx,obj,offset,val) do {\ 2262 int32_t _val = (int32_t)(val);\ 2263 grn_bulk_write_from((ctx), (obj), (char *)&_val,\ 2264 (offset) * sizeof(int32_t), sizeof(int32_t));\ 2265 } while (0) 2266 #define GRN_UINT32_SET_AT(ctx,obj,offset,val) do { \ 2267 uint32_t _val = (uint32_t)(val);\ 2268 grn_bulk_write_from((ctx), (obj), (char *)&_val,\ 2269 (offset) * sizeof(uint32_t), sizeof(uint32_t));\ 2270 } while (0) 2271 #define GRN_INT64_SET_AT(ctx,obj,offset,val) do {\ 2272 int64_t _val = (int64_t)(val);\ 2273 grn_bulk_write_from((ctx), (obj), (char *)&_val,\ 2274 (offset) * sizeof(int64_t), sizeof(int64_t));\ 2275 } while (0) 2276 #define GRN_UINT64_SET_AT(ctx,obj,offset,val) do {\ 2277 uint64_t _val = (uint64_t)(val);\ 2278 grn_bulk_write_from((ctx), (obj), (char *)&_val,\ 2279 (offset) * sizeof(uint64_t),\ 2280 sizeof(uint64_t));\ 2281 } while (0) 2282 #define GRN_FLOAT32_SET_AT(ctx, obj, offset, val) \ 2283 do { \ 2284 float _val = (float) (val); \ 2285 grn_bulk_write_from((ctx), (obj), (char*) &_val, (offset) * sizeof(float), sizeof(float)); \ 2286 } while (0) 2287 #define GRN_FLOAT_SET_AT(ctx,obj,offset,val) do {\ 2288 double _val = (double)(val);\ 2289 grn_bulk_write_from((ctx), (obj), (char *)&_val,\ 2290 (offset) * sizeof(double), sizeof(double));\ 2291 } while (0) 2292 #define GRN_TIME_SET_AT GRN_INT64_SET_AT 2293 #define GRN_RECORD_SET_AT(ctx,obj,offset,val) do {\ 2294 grn_id _val = (grn_id)(val);\ 2295 grn_bulk_write_from((ctx), (obj), (char *)&_val,\ 2296 (offset) * sizeof(grn_id), sizeof(grn_id));\ 2297 } while (0) 2298 #define GRN_PTR_SET_AT(ctx,obj,offset,val) do {\ 2299 grn_obj *_val = (grn_obj *)(val);\ 2300 grn_bulk_write_from((ctx), (obj), (char *)&_val,\ 2301 (offset) * sizeof(grn_obj *), sizeof(grn_obj *));\ 2302 } while (0) 2303 2304 #define GRN_BOOL_VALUE(obj) (*((bool *)GRN_BULK_HEAD(obj))) 2305 #define GRN_INT8_VALUE(obj) (*((int8_t *)GRN_BULK_HEAD(obj))) 2306 #define GRN_UINT8_VALUE(obj) (*((uint8_t *)GRN_BULK_HEAD(obj))) 2307 #define GRN_INT16_VALUE(obj) (*((int16_t *)GRN_BULK_HEAD(obj))) 2308 #define GRN_UINT16_VALUE(obj) (*((uint16_t *)GRN_BULK_HEAD(obj))) 2309 #define GRN_INT32_VALUE(obj) (*((int32_t *)GRN_BULK_HEAD(obj))) 2310 #define GRN_UINT32_VALUE(obj) (*((uint32_t *)GRN_BULK_HEAD(obj))) 2311 #define GRN_INT64_VALUE(obj) (*((int64_t *)GRN_BULK_HEAD(obj))) 2312 #define GRN_UINT64_VALUE(obj) (*((uint64_t *)GRN_BULK_HEAD(obj))) 2313 #define GRN_FLOAT32_VALUE(obj) (*((float*) GRN_BULK_HEAD(obj))) 2314 #define GRN_FLOAT_VALUE(obj) (*((double *)GRN_BULK_HEAD(obj))) 2315 #define GRN_TIME_VALUE GRN_INT64_VALUE 2316 #define GRN_RECORD_VALUE(obj) (*((grn_id *)GRN_BULK_HEAD(obj))) 2317 #define GRN_PTR_VALUE(obj) (*((grn_obj **)GRN_BULK_HEAD(obj))) 2318 #define GRN_GEO_POINT_VALUE(obj,_latitude,_longitude) do {\ 2319 grn_geo_point *_val = (grn_geo_point *)GRN_BULK_HEAD(obj);\ 2320 _latitude = _val->latitude;\ 2321 _longitude = _val->longitude;\ 2322 } while (0) 2323 2324 #define GRN_BOOL_VALUE_AT(obj,offset) (((bool *)GRN_BULK_HEAD(obj))[offset]) 2325 #define GRN_INT8_VALUE_AT(obj,offset) (((int8_t *)GRN_BULK_HEAD(obj))[offset]) 2326 #define GRN_UINT8_VALUE_AT(obj,offset) (((uint8_t *)GRN_BULK_HEAD(obj))[offset]) 2327 #define GRN_INT16_VALUE_AT(obj,offset) (((int16_t *)GRN_BULK_HEAD(obj))[offset]) 2328 #define GRN_UINT16_VALUE_AT(obj,offset) (((uint16_t *)GRN_BULK_HEAD(obj))[offset]) 2329 #define GRN_INT32_VALUE_AT(obj,offset) (((int32_t *)GRN_BULK_HEAD(obj))[offset]) 2330 #define GRN_UINT32_VALUE_AT(obj,offset) (((uint32_t *)GRN_BULK_HEAD(obj))[offset]) 2331 #define GRN_INT64_VALUE_AT(obj,offset) (((int64_t *)GRN_BULK_HEAD(obj))[offset]) 2332 #define GRN_UINT64_VALUE_AT(obj,offset) (((uint64_t *)GRN_BULK_HEAD(obj))[offset]) 2333 #define GRN_FLOAT32_VALUE_AT(obj, offset) (((float*) GRN_BULK_HEAD(obj))[offset]) 2334 #define GRN_FLOAT_VALUE_AT(obj,offset) (((double *)GRN_BULK_HEAD(obj))[offset]) 2335 #define GRN_TIME_VALUE_AT GRN_INT64_VALUE_AT 2336 #define GRN_RECORD_VALUE_AT(obj,offset) (((grn_id *)GRN_BULK_HEAD(obj))[offset]) 2337 #define GRN_PTR_VALUE_AT(obj,offset) (((grn_obj **)GRN_BULK_HEAD(obj))[offset]) 2338 2339 #define GRN_BOOL_PUT(ctx,obj,val) do {\ 2340 bool _val = (bool)(val);\ 2341 grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(bool));\ 2342 } while (0) 2343 #define GRN_INT8_PUT(ctx,obj,val) do {\ 2344 int8_t _val = (int8_t)(val); grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(int8_t));\ 2345 } while (0) 2346 #define GRN_UINT8_PUT(ctx,obj,val) do {\ 2347 uint8_t _val = (uint8_t)(val);\ 2348 grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(uint8_t));\ 2349 } while (0) 2350 #define GRN_INT16_PUT(ctx,obj,val) do {\ 2351 int16_t _val = (int16_t)(val); grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(int16_t));\ 2352 } while (0) 2353 #define GRN_UINT16_PUT(ctx,obj,val) do {\ 2354 uint16_t _val = (uint16_t)(val);\ 2355 grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(uint16_t));\ 2356 } while (0) 2357 #define GRN_INT32_PUT(ctx,obj,val) do {\ 2358 int32_t _val = (int32_t)(val); grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(int32_t));\ 2359 } while (0) 2360 #define GRN_UINT32_PUT(ctx,obj,val) do {\ 2361 uint32_t _val = (uint32_t)(val);\ 2362 grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(unsigned int));\ 2363 } while (0) 2364 #define GRN_INT64_PUT(ctx,obj,val) do {\ 2365 int64_t _val = (int64_t)(val);\ 2366 grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(int64_t));\ 2367 } while (0) 2368 #define GRN_UINT64_PUT(ctx,obj,val) do {\ 2369 uint64_t _val = (uint64_t)(val);\ 2370 grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(uint64_t));\ 2371 } while (0) 2372 #define GRN_FLOAT32_PUT(ctx, obj, val) \ 2373 do { \ 2374 float _val = (float) (val); \ 2375 grn_bulk_write((ctx), (obj), (char*) &_val, sizeof(float)); \ 2376 } while (0) 2377 #define GRN_FLOAT_PUT(ctx,obj,val) do {\ 2378 double _val = (double)(val); grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(double));\ 2379 } while (0) 2380 #define GRN_TIME_PUT GRN_INT64_PUT 2381 #define GRN_RECORD_PUT(ctx,obj,val) do {\ 2382 grn_id _val = (grn_id)(val); grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(grn_id));\ 2383 } while (0) 2384 #define GRN_PTR_PUT(ctx,obj,val) do {\ 2385 grn_obj *_val = (grn_obj *)(val);\ 2386 grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(grn_obj *));\ 2387 } while (0) 2388 2389 #define GRN_BULK_POP(obj, value, type, default) do {\ 2390 if (GRN_BULK_VSIZE(obj) >= sizeof(type)) {\ 2391 GRN_BULK_INCR_LEN((obj), -(sizeof(type)));\ 2392 value = *(type *)(GRN_BULK_CURR(obj));\ 2393 } else {\ 2394 value = default;\ 2395 }\ 2396 } while (0) 2397 #define GRN_BOOL_POP(obj, value) GRN_BULK_POP(obj, value, bool, 0) 2398 #define GRN_INT8_POP(obj, value) GRN_BULK_POP(obj, value, int8_t, 0) 2399 #define GRN_UINT8_POP(obj, value) GRN_BULK_POP(obj, value, uint8_t, 0) 2400 #define GRN_INT16_POP(obj, value) GRN_BULK_POP(obj, value, int16_t, 0) 2401 #define GRN_UINT16_POP(obj, value) GRN_BULK_POP(obj, value, uint16_t, 0) 2402 #define GRN_INT32_POP(obj, value) GRN_BULK_POP(obj, value, int32_t, 0) 2403 #define GRN_UINT32_POP(obj, value) GRN_BULK_POP(obj, value, uint32_t, 0) 2404 #define GRN_INT64_POP(obj, value) GRN_BULK_POP(obj, value, int64_t, 0) 2405 #define GRN_UINT64_POP(obj, value) GRN_BULK_POP(obj, value, uint64_t, 0) 2406 #define GRN_FLOAT32_POP(obj, value) GRN_BULK_POP(obj, value, float, 0.0) 2407 #define GRN_FLOAT_POP(obj, value) GRN_BULK_POP(obj, value, double, 0.0) 2408 #define GRN_TIME_POP GRN_INT64_POP 2409 #define GRN_RECORD_POP(obj, value) GRN_BULK_POP(obj, value, grn_id, GRN_ID_NIL) 2410 #define GRN_PTR_POP(obj, value) GRN_BULK_POP(obj, value, grn_obj *, NULL) 2411 2412 #define GRN_BULK_VECTOR_SIZE(obj, type) (GRN_BULK_VSIZE(obj) / sizeof(type)) 2413 #define GRN_BOOL_VECTOR_SIZE(obj) GRN_BULK_VECTOR_SIZE(obj, bool) 2414 #define GRN_INT8_VECTOR_SIZE(obj) GRN_BULK_VECTOR_SIZE(obj, int8_t) 2415 #define GRN_UINT8_VECTOR_SIZE(obj) GRN_BULK_VECTOR_SIZE(obj, uint8_t) 2416 #define GRN_INT16_VECTOR_SIZE(obj) GRN_BULK_VECTOR_SIZE(obj, int16_t) 2417 #define GRN_UINT16_VECTOR_SIZE(obj) GRN_BULK_VECTOR_SIZE(obj, uint16_t) 2418 #define GRN_INT32_VECTOR_SIZE(obj) GRN_BULK_VECTOR_SIZE(obj, int32_t) 2419 #define GRN_UINT32_VECTOR_SIZE(obj) GRN_BULK_VECTOR_SIZE(obj, uint32_t) 2420 #define GRN_INT64_VECTOR_SIZE(obj) GRN_BULK_VECTOR_SIZE(obj, int64_t) 2421 #define GRN_UINT64_VECTOR_SIZE(obj) GRN_BULK_VECTOR_SIZE(obj, uint64_t) 2422 #define GRN_FLOAT32_VECTOR_SIZE(obj) GRN_BULK_VECTOR_SIZE(obj, float) 2423 #define GRN_FLOAT_VECTOR_SIZE(obj) GRN_BULK_VECTOR_SIZE(obj, double) 2424 #define GRN_TIME_VECTOR_SIZE GRN_INT64_VECTOR_SIZE 2425 #define GRN_RECORD_VECTOR_SIZE(obj) GRN_BULK_VECTOR_SIZE(obj, grn_id) 2426 #define GRN_PTR_VECTOR_SIZE(obj) GRN_BULK_VECTOR_SIZE(obj, grn_obj *) 2427 +/ 2428 2429 //GRN_API 2430 .grn_rc grn_ctx_push(.grn_ctx* ctx, .grn_obj* obj); 2431 2432 //GRN_API 2433 .grn_obj* grn_ctx_pop(.grn_ctx* ctx); 2434 2435 //GRN_API 2436 int grn_obj_columns(.grn_ctx* ctx, .grn_obj* table, const (char)* str, uint str_size, .grn_obj* res); 2437 2438 //GRN_API 2439 .grn_rc grn_load(.grn_ctx* ctx, .grn_content_type input_type, const (char)* table, uint table_len, const (char)* columns, uint columns_len, const (char)* values, uint values_len, const (char)* ifexists, uint ifexists_len, const (char)* each, uint each_len); 2440 2441 enum GRN_CTX_MORE = 0x01 << 0; 2442 enum GRN_CTX_TAIL = 0x01 << 1; 2443 enum GRN_CTX_HEAD = 0x01 << 2; 2444 enum GRN_CTX_QUIET = 0x01 << 3; 2445 enum GRN_CTX_QUIT = 0x01 << 4; 2446 2447 //GRN_API 2448 .grn_rc grn_ctx_connect(.grn_ctx* ctx, const (char)* host, int port, int flags); 2449 2450 //GRN_API 2451 uint grn_ctx_send(.grn_ctx* ctx, const (char)* str, uint str_len, int flags); 2452 2453 //GRN_API 2454 uint grn_ctx_recv(.grn_ctx* ctx, char** str, uint* str_len, int* flags); 2455 2456 struct _grn_ctx_info 2457 { 2458 int fd; 2459 uint com_status; 2460 .grn_obj* outbuf; 2461 ubyte stat; 2462 } 2463 2464 alias grn_ctx_info = ._grn_ctx_info; 2465 2466 //GRN_API 2467 .grn_rc grn_ctx_info_get(.grn_ctx* ctx, .grn_ctx_info* info); 2468 2469 //GRN_API 2470 .grn_rc grn_set_segv_handler(); 2471 2472 //GRN_API 2473 .grn_rc grn_set_int_handler(); 2474 2475 //GRN_API 2476 .grn_rc grn_set_term_handler(); 2477 2478 struct _grn_table_delete_optarg 2479 { 2480 extern (C): 2481 int flags; 2482 int function(.grn_ctx* ctx, .grn_obj*, .grn_id, void*) func; 2483 void* func_arg; 2484 } 2485 2486 alias grn_table_delete_optarg = ._grn_table_delete_optarg; 2487 2488 struct _grn_table_scan_hit 2489 { 2490 .grn_id id; 2491 uint offset; 2492 uint length; 2493 } 2494 2495 struct grn_timeval 2496 { 2497 long tv_sec; 2498 int tv_nsec; 2499 }