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