svnno****@sourc*****
svnno****@sourc*****
2007年 9月 27日 (木) 16:50:08 JST
Revision: 22 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=tritonn&view=rev&rev=22 Author: mir Date: 2007-09-27 16:50:08 +0900 (Thu, 27 Sep 2007) Log Message: ----------- fixed kwic sql function bug regarding to max_results. Modified Paths: -------------- mysql-5.0.45-tritonn-1.0.6/sql/item_strfunc.cc Modified: mysql-5.0.45-tritonn-1.0.6/sql/item_strfunc.cc =================================================================== --- mysql-5.0.45-tritonn-1.0.6/sql/item_strfunc.cc 2007-09-10 17:48:23 UTC (rev 21) +++ mysql-5.0.45-tritonn-1.0.6/sql/item_strfunc.cc 2007-09-27 07:50:08 UTC (rev 22) @@ -3509,6 +3509,7 @@ return &my_empty_string; } + if (!(result = sql_alloc(max_tagged_len))) { SEN_LOG(sen_log_error, "sql_alloc failed", rc); SEN_LOG(sen_log_debug, "Item_func_senna_kwic::val_str => sen_snip_close: " \ @@ -3519,32 +3520,36 @@ return &my_empty_string; } - SEN_LOG(sen_log_debug, "Item_func_senna_kwic::val_str => sen_snip_get_result: " \ - "%p, 0, %p, %p", snip, result, &result_len); - if ((rc = sen_snip_get_result(snip, 0, result, &result_len))) { - SEN_LOG(sen_log_error, "sen_snip_get_result failed: sen_rc= %d", rc); - SEN_LOG(sen_log_debug, "Item_func_senna_kwic::val_str => sen_snip_close: " \ - "snip = %p", snip); - if ((rc = sen_snip_close(snip))) { - SEN_LOG(sen_log_error, "sen_snip_close failed: sen_rc = %d", rc); - } - return &my_empty_string; - } + str->copy("", 0, target->charset()); - if (result_len <= 0) { - SEN_LOG(sen_log_error, "result_len is not positive value: %d", result_len); - SEN_LOG(sen_log_debug, "Item_func_senna_kwic::val_str => sen_snip_close: " \ - "snip = %p", snip); - if ((rc = sen_snip_close(snip))) { - SEN_LOG(sen_log_error, "sen_snip_close failed: sen_rc = %d", rc); + for (i = 0; i < nresults; i++) { + SEN_LOG(sen_log_debug, "Item_func_senna_kwic::val_str => sen_snip_get_result: " \ + "%p, 0, %p, %p", snip, result, &result_len); + if ((rc = sen_snip_get_result(snip, i, result, &result_len))) { + SEN_LOG(sen_log_error, "sen_snip_get_result failed: sen_rc= %d", rc); + SEN_LOG(sen_log_debug, "Item_func_senna_kwic::val_str => sen_snip_close: " \ + "snip = %p", snip); + if ((rc = sen_snip_close(snip))) { + SEN_LOG(sen_log_error, "sen_snip_close failed: sen_rc = %d", rc); + } + return &my_empty_string; } - return &my_empty_string; + + if (result_len <= 0) { + SEN_LOG(sen_log_error, "result_len is not positive value: %d", result_len); + SEN_LOG(sen_log_debug, "Item_func_senna_kwic::val_str => sen_snip_close: " \ + "snip = %p", snip); + if ((rc = sen_snip_close(snip))) { + SEN_LOG(sen_log_error, "sen_snip_close failed: sen_rc = %d", rc); + } + return &my_empty_string; + } + + str->append(start->ptr(), start->length(), target->charset()); + str->append(result, result_len, target->charset()); + str->append(end->ptr(), end->length(), target->charset()); } - str->copy(start->ptr(), start->length(), target->charset()); - str->append(result, result_len, target->charset()); - str->append(end->ptr(), end->length(), target->charset()); - SEN_LOG(sen_log_debug, "Item_func_senna_kwic::val_str => sen_snip_close: " \ "snip = %p", snip); if ((rc = sen_snip_close(snip))) {