diff options
Diffstat (limited to 'storage/spider/spd_direct_sql.cc')
-rw-r--r-- | storage/spider/spd_direct_sql.cc | 118 |
1 files changed, 46 insertions, 72 deletions
diff --git a/storage/spider/spd_direct_sql.cc b/storage/spider/spd_direct_sql.cc index 267ac36ed13..3b6d167d14b 100644 --- a/storage/spider/spd_direct_sql.cc +++ b/storage/spider/spd_direct_sql.cc @@ -916,13 +916,12 @@ error: if (!direct_sql->param_name) \ { \ if ((direct_sql->param_name = spider_get_string_between_quote( \ - start_ptr, TRUE))) \ + start_ptr, TRUE, ¶m_string_parse))) \ direct_sql->SPIDER_PARAM_STR_LEN(param_name) = \ strlen(direct_sql->param_name); \ - else { \ - error_num = ER_SPIDER_INVALID_CONNECT_INFO_NUM; \ - my_printf_error(error_num, ER_SPIDER_INVALID_CONNECT_INFO_STR, \ - MYF(0), tmp_ptr); \ + else \ + { \ + error_num = param_string_parse.print_param_error(); \ goto error; \ } \ DBUG_PRINT("info",("spider " title_name "=%s", direct_sql->param_name)); \ @@ -942,9 +941,7 @@ error: { \ if (hint_num < 0 || hint_num >= max_size) \ { \ - error_num = ER_SPIDER_INVALID_CONNECT_INFO_NUM; \ - my_printf_error(error_num, ER_SPIDER_INVALID_CONNECT_INFO_STR, \ - MYF(0), tmp_ptr); \ + error_num = param_string_parse.print_param_error(); \ goto error; \ } else if (direct_sql->param_name[hint_num] != -1) \ break; \ @@ -957,17 +954,13 @@ error: else if (direct_sql->param_name[hint_num] > max_val) \ direct_sql->param_name[hint_num] = max_val; \ } else { \ - error_num = ER_SPIDER_INVALID_CONNECT_INFO_NUM; \ - my_printf_error(error_num, ER_SPIDER_INVALID_CONNECT_INFO_STR, \ - MYF(0), tmp_ptr); \ + error_num = param_string_parse.print_param_error(); \ goto error; \ } \ DBUG_PRINT("info",("spider " title_name "[%d]=%d", hint_num, \ direct_sql->param_name[hint_num])); \ } else { \ - error_num = ER_SPIDER_INVALID_CONNECT_INFO_NUM; \ - my_printf_error(error_num, ER_SPIDER_INVALID_CONNECT_INFO_STR, \ - MYF(0), tmp_ptr); \ + error_num = param_string_parse.print_param_error(); \ goto error; \ } \ break; \ @@ -986,10 +979,11 @@ error: direct_sql->param_name = min_val; \ else if (direct_sql->param_name > max_val) \ direct_sql->param_name = max_val; \ + param_string_parse.set_param_value(tmp_ptr2, \ + tmp_ptr2 + \ + strlen(tmp_ptr2) + 1); \ } else { \ - error_num = ER_SPIDER_INVALID_CONNECT_INFO_NUM; \ - my_printf_error(error_num, ER_SPIDER_INVALID_CONNECT_INFO_STR, \ - MYF(0), tmp_ptr); \ + error_num = param_string_parse.print_param_error(); \ goto error; \ } \ DBUG_PRINT("info",("spider " title_name "=%d", \ @@ -1009,10 +1003,11 @@ error: direct_sql->param_name = atoi(tmp_ptr2); \ if (direct_sql->param_name < min_val) \ direct_sql->param_name = min_val; \ + param_string_parse.set_param_value(tmp_ptr2, \ + tmp_ptr2 + \ + strlen(tmp_ptr2) + 1); \ } else { \ - error_num = ER_SPIDER_INVALID_CONNECT_INFO_NUM; \ - my_printf_error(error_num, ER_SPIDER_INVALID_CONNECT_INFO_STR, \ - MYF(0), tmp_ptr); \ + error_num = param_string_parse.print_param_error(); \ goto error; \ } \ DBUG_PRINT("info",("spider " title_name "=%d", direct_sql->param_name)); \ @@ -1032,10 +1027,11 @@ error: my_strtoll10(tmp_ptr2, (char**) NULL, &error_num); \ if (direct_sql->param_name < min_val) \ direct_sql->param_name = min_val; \ + param_string_parse.set_param_value(tmp_ptr2, \ + tmp_ptr2 + \ + strlen(tmp_ptr2) + 1); \ } else { \ - error_num = ER_SPIDER_INVALID_CONNECT_INFO_NUM; \ - my_printf_error(error_num, ER_SPIDER_INVALID_CONNECT_INFO_STR, \ - MYF(0), tmp_ptr); \ + error_num = param_string_parse.print_param_error(); \ goto error; \ } \ DBUG_PRINT("info",("spider " title_name "=%lld", \ @@ -1055,6 +1051,7 @@ int spider_udf_parse_direct_sql_param( char *sprit_ptr[2]; char *tmp_ptr, *tmp_ptr2, *start_ptr; int title_length; + SPIDER_PARAM_STRING_PARSE param_string_parse; DBUG_ENTER("spider_udf_parse_direct_sql_param"); direct_sql->tgt_port = -1; direct_sql->tgt_ssl_vsc = -1; @@ -1091,6 +1088,7 @@ int spider_udf_parse_direct_sql_param( DBUG_PRINT("info",("spider param_string=%s", param_string)); sprit_ptr[0] = param_string; + param_string_parse.init(param_string, ER_SPIDER_INVALID_UDF_PARAM_NUM); while (sprit_ptr[0]) { if ((sprit_ptr[1] = strchr(sprit_ptr[0], ','))) @@ -1117,10 +1115,14 @@ int spider_udf_parse_direct_sql_param( title_length++; start_ptr++; } + param_string_parse.set_param_title(tmp_ptr, tmp_ptr + title_length); switch (title_length) { case 0: + error_num = param_string_parse.print_param_error(); + if (error_num) + goto error; continue; case 3: #if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET) @@ -1146,120 +1148,92 @@ int spider_udf_parse_direct_sql_param( SPIDER_PARAM_INT_WITH_MAX("urt", use_real_table, 0, 1); #endif SPIDER_PARAM_INT("wto", net_write_timeout, 0); - error_num = ER_SPIDER_INVALID_UDF_PARAM_NUM; - my_printf_error(error_num, ER_SPIDER_INVALID_UDF_PARAM_STR, - MYF(0), tmp_ptr); + error_num = param_string_parse.print_param_error(); goto error; case 4: SPIDER_PARAM_INT_WITH_MAX("erwm", error_rw_mode, 0, 1); SPIDER_PARAM_STR("host", tgt_host); SPIDER_PARAM_INT_WITH_MAX("port", tgt_port, 0, 65535); SPIDER_PARAM_STR("user", tgt_username); - error_num = ER_SPIDER_INVALID_UDF_PARAM_NUM; - my_printf_error(error_num, ER_SPIDER_INVALID_UDF_PARAM_STR, - MYF(0), tmp_ptr); + error_num = param_string_parse.print_param_error(); goto error; case 6: SPIDER_PARAM_STR("server", server_name); SPIDER_PARAM_STR("socket", tgt_socket); SPIDER_PARAM_HINT_WITH_MAX("iop", iop, 3, direct_sql->table_count, 0, 2); SPIDER_PARAM_STR("ssl_ca", tgt_ssl_ca); - error_num = ER_SPIDER_INVALID_UDF_PARAM_NUM; - my_printf_error(error_num, ER_SPIDER_INVALID_UDF_PARAM_STR, - MYF(0), tmp_ptr); + error_num = param_string_parse.print_param_error(); goto error; case 7: SPIDER_PARAM_STR("wrapper", tgt_wrapper); SPIDER_PARAM_STR("ssl_key", tgt_ssl_key); - error_num = ER_SPIDER_INVALID_UDF_PARAM_NUM; - my_printf_error(error_num, ER_SPIDER_INVALID_UDF_PARAM_STR, - MYF(0), tmp_ptr); + error_num = param_string_parse.print_param_error(); goto error; case 8: SPIDER_PARAM_STR("database", tgt_default_db_name); SPIDER_PARAM_STR("password", tgt_password); SPIDER_PARAM_LONGLONG("priority", priority, 0); SPIDER_PARAM_STR("ssl_cert", tgt_ssl_cert); - error_num = ER_SPIDER_INVALID_UDF_PARAM_NUM; - my_printf_error(error_num, ER_SPIDER_INVALID_UDF_PARAM_STR, - MYF(0), tmp_ptr); + error_num = param_string_parse.print_param_error(); goto error; case 10: SPIDER_PARAM_STR("ssl_cipher", tgt_ssl_cipher); SPIDER_PARAM_STR("ssl_capath", tgt_ssl_capath); - error_num = ER_SPIDER_INVALID_UDF_PARAM_NUM; - my_printf_error(error_num, ER_SPIDER_INVALID_UDF_PARAM_STR, - MYF(0), tmp_ptr); + error_num = param_string_parse.print_param_error(); goto error; case 11: #if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET) SPIDER_PARAM_INT_WITH_MAX("access_mode", access_mode, 0, 2); #endif - error_num = ER_SPIDER_INVALID_UDF_PARAM_NUM; - my_printf_error(error_num, ER_SPIDER_INVALID_UDF_PARAM_STR, - MYF(0), tmp_ptr); + error_num = param_string_parse.print_param_error(); goto error; case 12: SPIDER_PARAM_STR("default_file", tgt_default_file); - error_num = ER_SPIDER_INVALID_UDF_PARAM_NUM; - my_printf_error(error_num, ER_SPIDER_INVALID_UDF_PARAM_STR, - MYF(0), tmp_ptr); + error_num = param_string_parse.print_param_error(); goto error; case 13: SPIDER_PARAM_STR("default_group", tgt_default_group); SPIDER_PARAM_INT_WITH_MAX("error_rw_mode", error_rw_mode, 0, 1); - error_num = ER_SPIDER_INVALID_UDF_PARAM_NUM; - my_printf_error(error_num, ER_SPIDER_INVALID_UDF_PARAM_STR, - MYF(0), tmp_ptr); + error_num = param_string_parse.print_param_error(); goto error; case 14: #if MYSQL_VERSION_ID < 50500 #else SPIDER_PARAM_INT_WITH_MAX("use_real_table", use_real_table, 0, 1); #endif - error_num = ER_SPIDER_INVALID_UDF_PARAM_NUM; - my_printf_error(error_num, ER_SPIDER_INVALID_UDF_PARAM_STR, - MYF(0), tmp_ptr); + error_num = param_string_parse.print_param_error(); goto error; case 15: SPIDER_PARAM_INT_WITH_MAX("table_loop_mode", table_loop_mode, 0, 2); SPIDER_PARAM_INT("connect_timeout", connect_timeout, 0); - error_num = ER_SPIDER_INVALID_UDF_PARAM_NUM; - my_printf_error(error_num, ER_SPIDER_INVALID_UDF_PARAM_STR, - MYF(0), tmp_ptr); + error_num = param_string_parse.print_param_error(); goto error; case 16: SPIDER_PARAM_LONGLONG("bulk_insert_rows", bulk_insert_rows, 1); SPIDER_PARAM_INT("net_read_timeout", net_read_timeout, 0); - error_num = ER_SPIDER_INVALID_UDF_PARAM_NUM; - my_printf_error(error_num, ER_SPIDER_INVALID_UDF_PARAM_STR, - MYF(0), tmp_ptr); + error_num = param_string_parse.print_param_error(); goto error; case 17: SPIDER_PARAM_INT("net_write_timeout", net_write_timeout, 0); - error_num = ER_SPIDER_INVALID_UDF_PARAM_NUM; - my_printf_error(error_num, ER_SPIDER_INVALID_UDF_PARAM_STR, - MYF(0), tmp_ptr); + error_num = param_string_parse.print_param_error(); goto error; case 18: SPIDER_PARAM_INT_WITH_MAX( "connection_channel", connection_channel, 0, 63); - error_num = ER_SPIDER_INVALID_UDF_PARAM_NUM; - my_printf_error(error_num, ER_SPIDER_INVALID_UDF_PARAM_STR, - MYF(0), tmp_ptr); + error_num = param_string_parse.print_param_error(); goto error; case 22: SPIDER_PARAM_INT_WITH_MAX("ssl_verify_server_cert", tgt_ssl_vsc, 0, 1); - error_num = ER_SPIDER_INVALID_UDF_PARAM_NUM; - my_printf_error(error_num, ER_SPIDER_INVALID_UDF_PARAM_STR, - MYF(0), tmp_ptr); + error_num = param_string_parse.print_param_error(); goto error; default: - error_num = ER_SPIDER_INVALID_UDF_PARAM_NUM; - my_printf_error(error_num, ER_SPIDER_INVALID_UDF_PARAM_STR, - MYF(0), tmp_ptr); + error_num = param_string_parse.print_param_error(); goto error; } + + /* Verify that the remainder of the parameter value is whitespace */ + if ((error_num = param_string_parse.has_extra_parameter_values())) + goto error; } set_default: @@ -1656,7 +1630,7 @@ long long spider_direct_sql_body( table_list.table_name = direct_sql->table_names[roop_count]; #endif if (!(direct_sql->tables[roop_count] = - find_temporary_table(thd, &table_list))) + thd->find_temporary_table(&table_list))) { #if MYSQL_VERSION_ID < 50500 #else |