| 47 | QueryParser::~QueryParser() = default; |
| 48 | |
| 49 | grn_rc QueryParser::parse(const char *query, size_t query_length) { |
| 50 | MRN_DBUG_ENTER_METHOD(); |
| 51 | |
| 52 | const char *raw_query = NULL; |
| 53 | size_t raw_query_length = 0; |
| 54 | grn_operator default_operator = GRN_OP_OR; |
| 55 | grn_expr_flags expression_flags = 0; |
| 56 | parse_pragma(query, |
| 57 | query_length, |
| 58 | &raw_query, |
| 59 | &raw_query_length, |
| 60 | &default_operator, |
| 61 | &expression_flags); |
| 62 | |
| 63 | grn_obj *default_column = default_column_; |
| 64 | if (match_columns_) { |
| 65 | default_column = match_columns_; |
| 66 | } |
| 67 | grn_rc rc = grn_expr_parse(ctx_, |
| 68 | expression_, |
| 69 | raw_query, |
| 70 | raw_query_length, |
| 71 | default_column, |
| 72 | GRN_OP_MATCH, |
| 73 | default_operator, |
| 74 | expression_flags); |
| 75 | if (rc != GRN_SUCCESS) { |
| 76 | char error_message[MRN_MESSAGE_BUFFER_SIZE]; |
| 77 | snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE, |
| 78 | "failed to parse fulltext search keyword: <%.*s>: <%s>", |
| 79 | static_cast<int>(query_length), |
| 80 | query, |
| 81 | ctx_->errbuf); |
| 82 | variables::ActionOnError action = |
| 83 | variables::get_action_on_fulltext_query_error(thd_); |
| 84 | switch (action) { |
| 85 | case variables::ACTION_ON_ERROR_ERROR: |
| 86 | my_message(ER_PARSE_ERROR, error_message, MYF(0)); |
| 87 | break; |
| 88 | case variables::ACTION_ON_ERROR_ERROR_AND_LOG: |
| 89 | my_message(ER_PARSE_ERROR, error_message, MYF(0)); |
| 90 | GRN_LOG(ctx_, GRN_LOG_ERROR, "%s", error_message); |
| 91 | break; |
| 92 | case variables::ACTION_ON_ERROR_IGNORE: |
| 93 | break; |
| 94 | case variables::ACTION_ON_ERROR_IGNORE_AND_LOG: |
| 95 | GRN_LOG(ctx_, GRN_LOG_ERROR, "%s", error_message); |
| 96 | break; |
| 97 | } |
| 98 | } |
| 99 | |
| 100 | DBUG_RETURN(rc); |
| 101 | } |
| 102 | |
| 103 | void QueryParser::parse_pragma(const char *query, |
| 104 | size_t query_length, |
no test coverage detected