1 /* -*- c-basic-offset: 2 -*- */ 2 /* 3 Copyright(C) 2009-2018 Brazil 4 Copyright(C) 2018-2021 Sutou Kouhei <kou@clear-code.com> 5 6 This library is free software; you can redistribute it and/or 7 modify it under the terms of the GNU Lesser General Public 8 License as published by the Free Software Foundation; either 9 version 2.1 of the License, or (at your option) any later version. 10 11 This library is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 Lesser General Public License for more details. 15 16 You should have received a copy of the GNU Lesser General Public 17 License along with this library; if not, write to the Free Software 18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 module groonga_d.table; 21 22 23 private static import groonga_d.groonga; 24 private static import groonga_d.hash; 25 private static import groonga_d.posting; 26 27 extern(C): 28 nothrow @nogc: 29 30 enum GRN_TABLE_MAX_KEY_SIZE = 0x1000; 31 32 //GRN_API 33 groonga_d.groonga.grn_obj* grn_table_create(groonga_d.groonga.grn_ctx* ctx, const (char)* name, uint name_size, const (char)* path, groonga_d.groonga.grn_table_flags flags, groonga_d.groonga.grn_obj* key_type, groonga_d.groonga.grn_obj* value_type); 34 35 //GRN_API 36 groonga_d.groonga.grn_obj* grn_table_create_similar(groonga_d.groonga.grn_ctx* ctx, const (char)* name, uint name_size, const (char)* path, groonga_d.groonga.grn_obj* base_table); 37 38 /+ 39 #define GRN_TABLE_OPEN_OR_CREATE(ctx, name, name_size, path, flags, key_type, value_type, table) (((table) = grn_ctx_get((ctx), (name), (name_size))) || ((table) = grn_table_create((ctx), (name), (name_size), (path), (flags), (key_type), (value_type)))) 40 +/ 41 42 /* TODO: int *added -> groonga_d.groonga.grn_bool *added */ 43 44 //GRN_API 45 groonga_d.groonga.grn_id grn_table_add(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, const (void)* key, uint key_size, int* added); 46 47 //GRN_API 48 groonga_d.groonga.grn_id grn_table_get(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, const (void)* key, uint key_size); 49 50 //GRN_API 51 groonga_d.groonga.grn_id grn_table_at(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, groonga_d.groonga.grn_id id); 52 53 //GRN_API 54 groonga_d.groonga.grn_id grn_table_lcp_search(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, const (void)* key, uint key_size); 55 56 //GRN_API 57 int grn_table_get_key(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, groonga_d.groonga.grn_id id, void* keybuf, int buf_size); 58 59 //GRN_API 60 groonga_d.groonga.grn_rc grn_table_delete(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, const (void)* key, uint key_size); 61 62 //GRN_API 63 groonga_d.groonga.grn_rc grn_table_delete_by_id(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, groonga_d.groonga.grn_id id); 64 65 //GRN_API 66 groonga_d.groonga.grn_rc grn_table_update_by_id(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, groonga_d.groonga.grn_id id, const (void)* dest_key, uint dest_key_size); 67 68 //GRN_API 69 groonga_d.groonga.grn_rc grn_table_update(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, const (void)* src_key, uint src_key_size, const (void)* dest_key, uint dest_key_size); 70 71 //GRN_API 72 groonga_d.groonga.grn_rc grn_table_truncate(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table); 73 74 enum GRN_CURSOR_ASCENDING = 0x00 << 0; 75 enum GRN_CURSOR_DESCENDING = 0x01 << 0; 76 enum GRN_CURSOR_GE = 0x00 << 1; 77 enum GRN_CURSOR_GT = 0x01 << 1; 78 enum GRN_CURSOR_LE = 0x00 << 2; 79 enum GRN_CURSOR_LT = 0x01 << 2; 80 enum GRN_CURSOR_BY_KEY = 0x00 << 3; 81 enum GRN_CURSOR_BY_ID = 0x01 << 3; 82 enum GRN_CURSOR_PREFIX = 0x01 << 4; 83 enum GRN_CURSOR_SIZE_BY_BIT = 0x01 << 5; 84 enum GRN_CURSOR_RK = 0x01 << 6; 85 86 //GRN_API 87 groonga_d.groonga.grn_table_cursor* grn_table_cursor_open(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, const (void)* min, uint min_size, const (void)* max, uint max_size, int offset, int limit, int flags); 88 89 //GRN_API 90 groonga_d.groonga.grn_rc grn_table_cursor_close(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_table_cursor* tc); 91 92 //GRN_API 93 groonga_d.groonga.grn_id grn_table_cursor_next(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_table_cursor* tc); 94 95 //GRN_API 96 int grn_table_cursor_get_key(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_table_cursor* tc, void** key); 97 98 //GRN_API 99 int grn_table_cursor_get_value(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_table_cursor* tc, void** value); 100 101 //GRN_API 102 uint grn_table_cursor_get_key_value(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_table_cursor* tc, void** key, uint* key_size, void** value); 103 104 //GRN_API 105 groonga_d.groonga.grn_rc grn_table_cursor_set_value(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_table_cursor* tc, const (void)* value, int flags); 106 107 //GRN_API 108 groonga_d.groonga.grn_rc grn_table_cursor_delete(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_table_cursor* tc); 109 110 //GRN_API 111 size_t grn_table_cursor_get_max_n_records(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_table_cursor* cursor); 112 113 //GRN_API 114 groonga_d.groonga.grn_obj* grn_table_cursor_table(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_table_cursor* tc); 115 116 //GRN_API 117 groonga_d.groonga.grn_obj* grn_index_cursor_open(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_table_cursor* tc, groonga_d.groonga.grn_obj* index, groonga_d.groonga.grn_id rid_min, groonga_d.groonga.grn_id rid_max, int flags); 118 119 //GRN_API 120 groonga_d.groonga.grn_obj* grn_index_cursor_get_index_column(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* index_cursor); 121 122 //GRN_API 123 groonga_d.groonga.grn_rc grn_index_cursor_set_term_id(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* index_cursor, groonga_d.groonga.grn_id term_id); 124 125 //GRN_API 126 groonga_d.groonga.grn_rc grn_index_cursor_set_section_id(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* index_cursor, uint section_id); 127 128 //GRN_API 129 uint grn_index_cursor_get_section_id(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* index_cursor); 130 131 //GRN_API 132 groonga_d.groonga.grn_rc grn_index_cursor_set_scale(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* index_cursor, float scale); 133 134 //GRN_API 135 groonga_d.groonga.grn_rc grn_index_cursor_set_scales(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* index_cursor, float* scales, size_t n_scales); 136 137 //GRN_API 138 groonga_d.groonga.grn_rc grn_index_cursor_set_start_position(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* index_cursor, uint position); 139 140 //GRN_API 141 groonga_d.groonga.grn_rc grn_index_cursor_reset_start_position(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* index_cursor); 142 143 //GRN_API 144 uint grn_index_cursor_get_start_position(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* index_cursor); 145 146 //GRN_API 147 groonga_d.posting.grn_posting* grn_index_cursor_next(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* index_cursor, groonga_d.groonga.grn_id* term_id); 148 149 alias grn_table_cursor_foreach_func = extern (C) nothrow @nogc groonga_d.groonga.grn_rc function(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_table_cursor* cursor, groonga_d.groonga.grn_id id, void* user_data); 150 151 //GRN_API 152 groonga_d.groonga.grn_rc grn_table_cursor_foreach(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_table_cursor* cursor, grn_table_cursor_foreach_func func, void* user_data); 153 154 /+ 155 #define GRN_TABLE_EACH(ctx, table, head, tail, id, key, key_size, value, block) (ctx)->errlvl = groonga_d.groonga.grn_log_level.GRN_LOG_NOTICE; (ctx)->rc = groonga_d.groonga.grn_rc.GRN_SUCCESS; if ((ctx)->seqno & 1) { (ctx)->subno++; } else { (ctx)->seqno++; } if (table) { switch ((table)->header.type) { case groonga_d.groonga.GRN_TABLE_PAT_KEY : GRN_PAT_EACH((ctx), (grn_pat *)(table), (id), (key), (key_size), (value), block); break; case groonga_d.groonga.GRN_TABLE_DAT_KEY : GRN_DAT_EACH((ctx), (grn_dat *)(table), (id), (key), (key_size), block); break; case groonga_d.groonga.GRN_TABLE_HASH_KEY : GRN_HASH_EACH((ctx), (groonga_d.hash.grn_hash *)(table), (id), (key), (key_size), (value), block); break; case groonga_d.groonga.GRN_TABLE_NO_KEY : GRN_ARRAY_EACH((ctx), (grn_array *)(table), (head), (tail), (id), (value), block); break; } } if ((ctx)->subno) { (ctx)->subno--; } else { (ctx)->seqno++; } 156 157 #define GRN_TABLE_EACH_BEGIN(ctx, table, cursor, id) do { if ((table)) { groonga_d.groonga.grn_table_cursor *cursor; cursor = grn_table_cursor_open((ctx), (table), NULL, 0, NULL, 0, 0, -1, GRN_CURSOR_ASCENDING); if (cursor) { groonga_d.groonga.grn_id id; while ((id = grn_table_cursor_next((ctx), cursor))) { 158 159 #define GRN_TABLE_EACH_BEGIN_FLAGS(ctx, table, cursor, id, flags) do { if ((table)) { groonga_d.groonga.grn_table_cursor *cursor; cursor = grn_table_cursor_open((ctx), (table), NULL, 0, NULL, 0, 0, -1, (flags)); if (cursor) { groonga_d.groonga.grn_id id; while ((id = grn_table_cursor_next((ctx), cursor))) { 160 161 #define GRN_TABLE_EACH_BEGIN_MIN(ctx, table, cursor, id, min, min_size, flags) do { if ((table)) { groonga_d.groonga.grn_table_cursor *cursor; cursor = grn_table_cursor_open((ctx), (table), (min), (min_size), NULL, 0, 0, -1, (flags)); if (cursor) { groonga_d.groonga.grn_id id; while ((id = grn_table_cursor_next((ctx), cursor))) { 162 163 #define GRN_TABLE_EACH_END(ctx, cursor) } grn_table_cursor_close((ctx), cursor); } } } while (0) 164 +/ 165 166 alias grn_table_sort_key = _grn_table_sort_key; 167 alias grn_table_sort_flags = ubyte; 168 169 enum GRN_TABLE_SORT_ASC = 0x00 << 0; 170 enum GRN_TABLE_SORT_DESC = 0x01 << 0; 171 172 struct _grn_table_sort_key 173 { 174 groonga_d.groonga.grn_obj* key; 175 grn_table_sort_flags flags; 176 int offset; 177 } 178 179 //GRN_API 180 int grn_table_sort(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, int offset, int limit, groonga_d.groonga.grn_obj* result, grn_table_sort_key* keys, int n_keys); 181 182 alias grn_table_group_result = _grn_table_group_result; 183 alias grn_table_group_flags = uint; 184 185 enum GRN_TABLE_GROUP_CALC_COUNT = 0x01 << 3; 186 enum GRN_TABLE_GROUP_CALC_MAX = 0x01 << 4; 187 enum GRN_TABLE_GROUP_CALC_MIN = 0x01 << 5; 188 enum GRN_TABLE_GROUP_CALC_SUM = 0x01 << 6; 189 /* Deprecated since 10.0.4. Use GRN_TABLE_GROUP_CALC_MEAN instead. */ 190 enum GRN_TABLE_GROUP_CALC_AVG = GRN_TABLE_GROUP_CALC_MEAN; 191 enum GRN_TABLE_GROUP_CALC_MEAN = 0x01 << 7; 192 enum GRN_TABLE_GROUP_CALC_AGGREGATOR = 0x01 << 8; 193 194 struct _grn_table_group_aggregator; 195 alias grn_table_group_aggregator = _grn_table_group_aggregator; 196 197 //GRN_API 198 grn_table_group_aggregator* grn_table_group_aggregator_open(groonga_d.groonga.grn_ctx* ctx); 199 200 //GRN_API 201 groonga_d.groonga.grn_rc grn_table_group_aggregator_close(groonga_d.groonga.grn_ctx* ctx, grn_table_group_aggregator* aggregator); 202 203 //GRN_API 204 groonga_d.groonga.grn_rc grn_table_group_aggregator_set_output_column_name(groonga_d.groonga.grn_ctx* ctx, grn_table_group_aggregator* aggregator, const (char)* name, int name_len); 205 206 //GRN_API 207 const (char)* grn_table_group_aggregator_get_output_column_name(groonga_d.groonga.grn_ctx* ctx, grn_table_group_aggregator* aggregator, uint* len); 208 209 //GRN_API 210 groonga_d.groonga.grn_rc grn_table_group_aggregator_set_output_column_type(groonga_d.groonga.grn_ctx* ctx, grn_table_group_aggregator* aggregator, groonga_d.groonga.grn_obj* type); 211 212 //GRN_API 213 groonga_d.groonga.grn_obj* grn_table_group_aggregator_get_output_column_type(groonga_d.groonga.grn_ctx* ctx, grn_table_group_aggregator* aggregator); 214 215 //GRN_API 216 groonga_d.groonga.grn_rc grn_table_group_aggregator_set_output_column_flags(groonga_d.groonga.grn_ctx* ctx, grn_table_group_aggregator* aggregator, groonga_d.groonga.grn_column_flags flags); 217 218 //GRN_API 219 groonga_d.groonga.grn_column_flags grn_table_group_aggregator_get_output_column_flags(groonga_d.groonga.grn_ctx* ctx, grn_table_group_aggregator* aggregator); 220 221 //GRN_API 222 groonga_d.groonga.grn_rc grn_table_group_aggregator_set_expression(groonga_d.groonga.grn_ctx* ctx, grn_table_group_aggregator* aggregator, const (char)* expression, int expression_len); 223 224 //GRN_API 225 const (char)* grn_table_group_aggregator_get_expression(groonga_d.groonga.grn_ctx* ctx, grn_table_group_aggregator* aggregator, uint* expression_len); 226 227 struct _grn_table_group_result 228 { 229 groonga_d.groonga.grn_obj* table; 230 ubyte key_begin; 231 ubyte key_end; 232 int limit; 233 grn_table_group_flags flags; 234 groonga_d.groonga.grn_operator op; 235 uint max_n_subrecs; 236 groonga_d.groonga.grn_obj* calc_target; 237 grn_table_group_aggregator** aggregators; 238 uint n_aggregators; 239 } 240 241 //GRN_API 242 groonga_d.groonga.grn_rc grn_table_group(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, grn_table_sort_key* keys, int n_keys, grn_table_group_result* results, int n_results); 243 244 //GRN_API 245 grn_table_sort_key* grn_table_group_keys_parse(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, const (char)* raw_sort_keys, int raw_sort_keys_size, int* n_keys); 246 247 //GRN_API 248 groonga_d.groonga.grn_rc grn_table_setoperation(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table1, groonga_d.groonga.grn_obj* table2, groonga_d.groonga.grn_obj* res, groonga_d.groonga.grn_operator op); 249 250 //GRN_API 251 groonga_d.groonga.grn_rc grn_table_difference(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table1, groonga_d.groonga.grn_obj* table2, groonga_d.groonga.grn_obj* res1, groonga_d.groonga.grn_obj* res2); 252 253 //GRN_API 254 int grn_table_columns(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, const (char)* name, uint name_size, groonga_d.groonga.grn_obj* res); 255 256 //GRN_API 257 uint grn_table_size(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table); 258 259 //GRN_API 260 groonga_d.groonga.grn_rc grn_table_rename(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, const (char)* name, uint name_size); 261 262 //GRN_API 263 groonga_d.groonga.grn_obj* grn_table_select(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, groonga_d.groonga.grn_obj* expr, groonga_d.groonga.grn_obj* result_set, groonga_d.groonga.grn_operator op); 264 265 //GRN_API 266 grn_table_sort_key* grn_table_sort_key_from_str(groonga_d.groonga.grn_ctx* ctx, const (char)* str, uint str_size, groonga_d.groonga.grn_obj* table, uint* nkeys); 267 268 //GRN_API 269 grn_table_sort_key* grn_table_sort_keys_parse(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, const (char)* raw_sort_keys, int raw_sort_keys_size, int* n_keys); 270 271 //GRN_API 272 groonga_d.groonga.grn_rc grn_table_sort_key_close(groonga_d.groonga.grn_ctx* ctx, grn_table_sort_key* keys, uint nkeys); 273 274 //GRN_API 275 groonga_d.groonga.grn_bool grn_table_is_grouped(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table); 276 277 //GRN_API 278 uint grn_table_max_n_subrecs(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table); 279 280 //GRN_API 281 groonga_d.groonga.grn_obj* grn_table_create_for_group(groonga_d.groonga.grn_ctx* ctx, const (char)* name, uint name_size, const (char)* path, groonga_d.groonga.grn_obj* group_key, groonga_d.groonga.grn_obj* value_type, uint max_n_subrecs); 282 283 //GRN_API 284 uint grn_table_get_subrecs(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, groonga_d.groonga.grn_id id, groonga_d.groonga.grn_id* subrecbuf, int* scorebuf, int buf_size); 285 286 //GRN_API 287 groonga_d.groonga.grn_obj* grn_table_tokenize(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, const (char)* str, uint str_len, groonga_d.groonga.grn_obj* buf, groonga_d.groonga.grn_bool addp); 288 289 //GRN_API 290 groonga_d.groonga.grn_rc grn_table_apply_expr(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, groonga_d.groonga.grn_obj* output_column, groonga_d.groonga.grn_obj* expr); 291 292 //GRN_API 293 groonga_d.groonga.grn_id grn_table_find_reference_object(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table); 294 295 //GRN_API 296 groonga_d.groonga.grn_rc grn_table_copy(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* from, groonga_d.groonga.grn_obj* to); 297 298 //GRN_API 299 groonga_d.groonga.grn_rc grn_table_get_duplicated_keys(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, groonga_d.groonga.grn_obj** duplicated_keys); 300 301 //GRN_API 302 bool grn_table_have_duplicated_keys(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table); 303 304 extern struct _grn_table_selector; 305 alias grn_table_selector = _grn_table_selector; 306 307 //GRN_API 308 grn_table_selector* grn_table_selector_open(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* table, groonga_d.groonga.grn_obj* expr, groonga_d.groonga.grn_operator op); 309 310 //GRN_API 311 groonga_d.groonga.grn_rc grn_table_selector_close(groonga_d.groonga.grn_ctx* ctx, grn_table_selector* table_selector); 312 313 //GRN_API 314 groonga_d.groonga.grn_id grn_table_selector_get_min_id(groonga_d.groonga.grn_ctx* ctx, grn_table_selector* table_selector); 315 316 //GRN_API 317 groonga_d.groonga.grn_rc grn_table_selector_set_min_id(groonga_d.groonga.grn_ctx* ctx, grn_table_selector* table_selector, groonga_d.groonga.grn_id min_id); 318 319 //GRN_API 320 bool grn_table_selector_get_use_sequential_scan(groonga_d.groonga.grn_ctx* ctx, grn_table_selector* table_selector); 321 322 //GRN_API 323 groonga_d.groonga.grn_rc grn_table_selector_set_use_sequential_scan(groonga_d.groonga.grn_ctx* ctx, grn_table_selector* table_selector, bool use); 324 325 //GRN_API 326 float grn_table_selector_get_weight_factor(groonga_d.groonga.grn_ctx* ctx, grn_table_selector* table_selector); 327 328 //GRN_API 329 groonga_d.groonga.grn_rc grn_table_selector_set_weight_factor(groonga_d.groonga.grn_ctx* ctx, grn_table_selector* table_selector, float factor); 330 331 //GRN_API 332 double grn_table_selector_get_enough_filtered_ratio(groonga_d.groonga.grn_ctx* ctx, grn_table_selector* table_selector); 333 334 //GRN_API 335 groonga_d.groonga.grn_rc grn_table_selector_set_enough_filtered_ratio(groonga_d.groonga.grn_ctx* ctx, grn_table_selector* table_selector, double ratio); 336 337 //GRN_API 338 long grn_table_selector_get_max_n_enough_filtered_records(groonga_d.groonga.grn_ctx* ctx, grn_table_selector* table_selector); 339 340 //GRN_API 341 groonga_d.groonga.grn_rc grn_table_selector_set_max_n_enough_filtered_records(groonga_d.groonga.grn_ctx* ctx, grn_table_selector* table_selector, long n); 342 343 //GRN_API 344 groonga_d.groonga.grn_obj* grn_table_selector_select(groonga_d.groonga.grn_ctx* ctx, grn_table_selector* table_selector, groonga_d.groonga.grn_obj* result_set);