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);