1 /*
2   Copyright(C) 2009-2017  Brazil
3   Copyright(C) 2019-2021  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.expr;
20 
21 
22 private static import groonga_d.groonga;
23 
24 extern(C):
25 nothrow @nogc:
26 
27 alias grn_expr_flags = uint;
28 
29 enum GRN_EXPR_SYNTAX_QUERY = 0x00;
30 enum GRN_EXPR_SYNTAX_SCRIPT = 0x01;
31 enum GRN_EXPR_SYNTAX_OUTPUT_COLUMNS = 0x20;
32 enum GRN_EXPR_SYNTAX_ADJUSTER = 0x40;
33 enum GRN_EXPR_SYNTAX_SORT_KEYS = 0x100;
34 /* Deprecated since Groonga 11.0.2. Use GRN_EXPR_SYNTAX_SORT_KEYS instead. */
35 enum GRN_EXPR_SYNTAX_GROUP_KEYS = .GRN_EXPR_SYNTAX_SORT_KEYS;
36 enum GRN_EXPR_SYNTAX_OPTIONS = 0x200;
37 enum GRN_EXPR_ALLOW_PRAGMA = 0x02;
38 enum GRN_EXPR_ALLOW_COLUMN = 0x04;
39 enum GRN_EXPR_ALLOW_UPDATE = 0x08;
40 enum GRN_EXPR_ALLOW_LEADING_NOT = 0x10;
41 enum GRN_EXPR_QUERY_NO_SYNTAX_ERROR = 0x80;
42 enum GRN_EXPR_DISABLE_PREFIX_SEARCH = 0x0400;
43 enum GRN_EXPR_DISABLE_AND_NOT = 0x0800;
44 
45 //GRN_API
46 groonga_d.groonga.grn_obj* grn_expr_create(groonga_d.groonga.grn_ctx* ctx, const (char)* name, uint name_size);
47 
48 //GRN_API
49 groonga_d.groonga.grn_rc grn_expr_close(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr);
50 
51 //GRN_API
52 groonga_d.groonga.grn_obj* grn_expr_add_var(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, const (char)* name, uint name_size);
53 
54 //GRN_API
55 groonga_d.groonga.grn_obj* grn_expr_get_var(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, const (char)* name, uint name_size);
56 
57 //GRN_API
58 groonga_d.groonga.grn_obj* grn_expr_get_var_by_offset(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, uint offset);
59 
60 //GRN_API
61 groonga_d.groonga.grn_rc grn_expr_clear_vars(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr);
62 
63 //GRN_API
64 void grn_expr_take_obj(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, groonga_d.groonga.grn_obj* obj);
65 
66 //GRN_API
67 groonga_d.groonga.grn_obj* grn_expr_append_obj(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, groonga_d.groonga.grn_obj* obj, groonga_d.groonga.grn_operator op, int nargs);
68 
69 //GRN_API
70 groonga_d.groonga.grn_obj* grn_expr_append_const(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, groonga_d.groonga.grn_obj* obj, groonga_d.groonga.grn_operator op, int nargs);
71 
72 //GRN_API
73 groonga_d.groonga.grn_obj* grn_expr_append_const_str(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, const (char)* str, uint str_size, groonga_d.groonga.grn_operator op, int nargs);
74 
75 /* Deprecated since Groonga 11.0.1. Use grn_expr_append_const_int32() instead. */
76 //GRN_API
77 deprecated
78 groonga_d.groonga.grn_obj* grn_expr_append_const_int(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, int value, groonga_d.groonga.grn_operator op, int nargs);
79 
80 //GRN_API
81 groonga_d.groonga.grn_obj* grn_expr_append_const_int32(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, int value, groonga_d.groonga.grn_operator op, int nargs);
82 
83 //GRN_API
84 groonga_d.groonga.grn_obj* grn_expr_append_const_float32(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, float value, groonga_d.groonga.grn_operator op, int nargs);
85 
86 //GRN_API
87 groonga_d.groonga.grn_obj* grn_expr_append_const_float(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, double value, groonga_d.groonga.grn_operator op, int nargs);
88 
89 //GRN_API
90 groonga_d.groonga.grn_obj* grn_expr_append_const_bool(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, groonga_d.groonga.grn_bool value, groonga_d.groonga.grn_operator op, int nargs);
91 
92 //GRN_API
93 groonga_d.groonga.grn_rc grn_expr_append_op(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, groonga_d.groonga.grn_operator op, int nargs);
94 
95 //GRN_API
96 groonga_d.groonga.grn_rc grn_expr_get_keywords(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, groonga_d.groonga.grn_obj* keywords);
97 
98 //GRN_API
99 groonga_d.groonga.grn_rc grn_expr_syntax_escape(groonga_d.groonga.grn_ctx* ctx, const (char)* query, int query_size, const (char)* target_characters, char escape_character, groonga_d.groonga.grn_obj* escaped_query);
100 
101 //GRN_API
102 groonga_d.groonga.grn_rc grn_expr_syntax_escape_query(groonga_d.groonga.grn_ctx* ctx, const (char)* query, int query_size, groonga_d.groonga.grn_obj* escaped_query);
103 
104 //GRN_API
105 groonga_d.groonga.grn_rc grn_expr_syntax_expand_query(groonga_d.groonga.grn_ctx* ctx, const (char)* query, int query_size, grn_expr_flags flags, groonga_d.groonga.grn_obj* expander, groonga_d.groonga.grn_obj* expanded_query);
106 
107 //GRN_API
108 groonga_d.groonga.grn_rc grn_expr_syntax_expand_query_by_table(groonga_d.groonga.grn_ctx* ctx, const (char)* query, int query_size, grn_expr_flags flags, groonga_d.groonga.grn_obj* term_column, groonga_d.groonga.grn_obj* expanded_term_column, groonga_d.groonga.grn_obj* expanded_query);
109 
110 //GRN_API
111 groonga_d.groonga.grn_rc grn_expr_compile(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr);
112 
113 //GRN_API
114 groonga_d.groonga.grn_obj* grn_expr_rewrite(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr);
115 
116 //GRN_API
117 groonga_d.groonga.grn_rc grn_expr_dump_plan(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, groonga_d.groonga.grn_obj* buffer);
118 
119 //GRN_API
120 groonga_d.groonga.grn_obj* grn_expr_exec(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, int nargs);
121 
122 //GRN_API
123 groonga_d.groonga.grn_obj* grn_expr_alloc(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, groonga_d.groonga.grn_id domain, ubyte flags);
124 
125 /+
126 #define GRN_EXPR_CREATE_FOR_QUERY(ctx, table, expr, var) if (((expr) = grn_expr_create((ctx), null, 0)) && ((var) = grn_expr_add_var((ctx), (expr), null, 0))) { groonga_d.groonga.GRN_RECORD_INIT((var), 0, grn_obj_id((ctx), (table))); } else { (var) = null; }
127 +/
128 
129 //GRN_API
130 groonga_d.groonga.grn_rc grn_expr_parse(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, const (char)* str, uint str_size, groonga_d.groonga.grn_obj* default_column, groonga_d.groonga.grn_operator default_mode, groonga_d.groonga.grn_operator default_op, grn_expr_flags flags);
131 
132 //GRN_API
133 groonga_d.groonga.grn_obj* grn_expr_snip(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, int flags, uint width, uint max_results, uint n_tags, const (char)** opentags, uint* opentag_lens, const (char)** closetags, uint* closetag_lens, groonga_d.groonga.grn_snip_mapping* mapping);
134 
135 //GRN_API
136 groonga_d.groonga.grn_rc grn_expr_snip_add_conditions(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, groonga_d.groonga.grn_obj* snip, uint n_tags, const (char)** opentags, uint* opentag_lens, const (char)** closetags, uint* closetag_lens);
137 
138 //GRN_API
139 uint grn_expr_estimate_size(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr);
140 
141 
142 //GRN_API
143 groonga_d.groonga.grn_rc grn_expr_set_query_log_tag_prefix(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, const (char)* prefix, int prefix_len);
144 
145 //GRN_API
146 const (char)* grn_expr_get_query_log_tag_prefix(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr);
147 
148 //GRN_API
149 groonga_d.groonga.grn_rc grn_expr_set_parent(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, groonga_d.groonga.grn_obj* parent);
150 
151 //GRN_API
152 groonga_d.groonga.grn_obj* grn_expr_get_parent(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr);
153 
154 //GRN_API
155 groonga_d.groonga.grn_rc grn_expr_set_condition(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr, groonga_d.groonga.grn_obj* condition);
156 
157 //GRN_API
158 groonga_d.groonga.grn_obj* grn_expr_get_condition(groonga_d.groonga.grn_ctx* ctx, groonga_d.groonga.grn_obj* expr);
159