diff options
Diffstat (limited to 'storage/spider/spd_db_conn.cc')
-rw-r--r-- | storage/spider/spd_db_conn.cc | 149 |
1 files changed, 133 insertions, 16 deletions
diff --git a/storage/spider/spd_db_conn.cc b/storage/spider/spd_db_conn.cc index 70e125b6def..afdd3a4c828 100644 --- a/storage/spider/spd_db_conn.cc +++ b/storage/spider/spd_db_conn.cc @@ -1860,6 +1860,7 @@ int spider_db_append_key_where_internal( key_part++, key_count++ ) { + DBUG_PRINT("info", ("spider tgt_key_part_map=%lu", tgt_key_part_map)); store_length = key_part->store_length; field = key_part->field; key_name_length = dbton_share->get_column_name_length(field->field_index); @@ -1885,7 +1886,6 @@ int spider_db_append_key_where_internal( #endif } } else { - DBUG_PRINT("info", ("spider tgt_key_part_map=%lu", tgt_key_part_map)); if (tgt_key_part_map > 1) key_eq = TRUE; else @@ -1895,7 +1895,8 @@ int spider_db_append_key_where_internal( (key_eq && use_key == start_key) || (!key_eq && start_key_part_map) ) { - bool tgt_final = (use_key == start_key && tgt_key_part_map == 1); + bool tgt_final = (use_key == start_key && + (tgt_key_part_map == 1 || !end_key_part_map)); ptr = start_key->key + length; if ( (error_num = dbton_hdl->append_is_null_part(sql_type, key_part, @@ -1941,10 +1942,23 @@ int spider_db_append_key_where_internal( if (use_key == start_key) { +#ifdef SPIDER_HANDLER_SUPPORT_MULTIPLE_KEY_PARTS if (spider_dbton[dbton_id].db_util-> append_column_value(spider, str_part, field, ptr, share->access_charset)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); +#else + if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN) + { + if (str->reserve(SPIDER_SQL_EQUAL_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN); + if (spider_dbton[dbton_id].db_util-> + append_column_value(spider, str_part, field, ptr, + share->access_charset)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + } +#endif } } #if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET) @@ -1992,7 +2006,8 @@ int spider_db_append_key_where_internal( if (use_key == start_key) { - if (tgt_key_part_map == 1) +#ifdef SPIDER_HANDLER_SUPPORT_MULTIPLE_KEY_PARTS + if (tgt_key_part_map == 1 || !end_key_part_map) { if (str->reserve(SPIDER_SQL_EQUAL_LEN)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); @@ -2002,6 +2017,18 @@ int spider_db_append_key_where_internal( append_column_value(spider, str_part, field, ptr, share->access_charset)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); +#else + if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN) + { + if (str->reserve(SPIDER_SQL_EQUAL_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN); + if (spider_dbton[dbton_id].db_util-> + append_column_value(spider, str_part, field, ptr, + share->access_charset)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + } +#endif } } #if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET) @@ -2051,7 +2078,8 @@ int spider_db_append_key_where_internal( if (use_key == start_key) { - if (tgt_key_part_map == 1) +#ifdef SPIDER_HANDLER_SUPPORT_MULTIPLE_KEY_PARTS + if (tgt_key_part_map == 1 || !end_key_part_map) { if (str->reserve(SPIDER_SQL_GT_LEN)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); @@ -2061,6 +2089,18 @@ int spider_db_append_key_where_internal( append_column_value(spider, str_part, field, ptr, share->access_charset)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); +#else + if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN) + { + if (str->reserve(SPIDER_SQL_GT_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_GT_STR, SPIDER_SQL_GT_LEN); + if (spider_dbton[dbton_id].db_util-> + append_column_value(spider, str_part, field, ptr, + share->access_charset)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + } +#endif } } #if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET) @@ -2111,7 +2151,8 @@ int spider_db_append_key_where_internal( if (use_key == start_key) { - if (tgt_key_part_map == 1) +#ifdef SPIDER_HANDLER_SUPPORT_MULTIPLE_KEY_PARTS + if (tgt_key_part_map == 1 || !end_key_part_map) { if (str->reserve(SPIDER_SQL_LT_LEN)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); @@ -2121,6 +2162,18 @@ int spider_db_append_key_where_internal( append_column_value(spider, str_part, field, ptr, share->access_charset)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); +#else + if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN) + { + if (str->reserve(SPIDER_SQL_LT_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_LT_STR, SPIDER_SQL_LT_LEN); + if (spider_dbton[dbton_id].db_util-> + append_column_value(spider, str_part, field, ptr, + share->access_charset)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + } +#endif } } #if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET) @@ -2177,7 +2230,8 @@ int spider_db_append_key_where_internal( if (use_key == start_key) { - if (tgt_key_part_map == 1) +#ifdef SPIDER_HANDLER_SUPPORT_MULTIPLE_KEY_PARTS + if (tgt_key_part_map == 1 || !end_key_part_map) { if (str->reserve(SPIDER_SQL_LTEQUAL_LEN)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); @@ -2188,6 +2242,19 @@ int spider_db_append_key_where_internal( append_column_value(spider, str_part, field, ptr, share->access_charset)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); +#else + if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN) + { + if (str->reserve(SPIDER_SQL_LTEQUAL_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_LTEQUAL_STR, + SPIDER_SQL_LTEQUAL_LEN); + if (spider_dbton[dbton_id].db_util-> + append_column_value(spider, str_part, field, ptr, + share->access_charset)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + } +#endif } } #if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET) @@ -2326,7 +2393,8 @@ int spider_db_append_key_where_internal( if (use_key == start_key) { - if (tgt_key_part_map == 1) +#ifdef SPIDER_HANDLER_SUPPORT_MULTIPLE_KEY_PARTS + if (tgt_key_part_map == 1 || !end_key_part_map) { if (str->reserve(SPIDER_SQL_GTEQUAL_LEN)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); @@ -2337,6 +2405,19 @@ int spider_db_append_key_where_internal( append_column_value(spider, str_part, field, ptr, share->access_charset)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); +#else + if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN) + { + if (str->reserve(SPIDER_SQL_GTEQUAL_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_GTEQUAL_STR, + SPIDER_SQL_GTEQUAL_LEN); + if (spider_dbton[dbton_id].db_util-> + append_column_value(spider, str_part, field, ptr, + share->access_charset)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + } +#endif } } #if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET) @@ -2367,12 +2448,14 @@ int spider_db_append_key_where_internal( str_part2->q_append(SPIDER_SQL_AND_STR, SPIDER_SQL_AND_LEN); +#ifdef SPIDER_HANDLER_SUPPORT_MULTIPLE_KEY_PARTS if (use_key == start_key) { if (str_part->reserve(SPIDER_SQL_COMMA_LEN)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); str_part->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); } +#endif } } @@ -2428,18 +2511,23 @@ int spider_db_append_key_where_internal( if (use_key == end_key) { -/* - if (tgt_key_part_map == 1) +#ifdef SPIDER_HANDLER_SUPPORT_MULTIPLE_KEY_PARTS + if (spider_dbton[dbton_id].db_util-> + append_column_value(spider, str_part, field, ptr, + share->access_charset)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); +#else + if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN) { if (str->reserve(SPIDER_SQL_EQUAL_LEN)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN); + if (spider_dbton[dbton_id].db_util-> + append_column_value(spider, str_part, field, ptr, + share->access_charset)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); } -*/ - if (spider_dbton[dbton_id].db_util-> - append_column_value(spider, str_part, field, ptr, - share->access_charset)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); +#endif } } } else { @@ -2480,7 +2568,8 @@ int spider_db_append_key_where_internal( if (use_key == end_key) { - if (tgt_key_part_map == 1) +#ifdef SPIDER_HANDLER_SUPPORT_MULTIPLE_KEY_PARTS + if (tgt_key_part_map == 1 || !start_key_part_map) { if (str->reserve(SPIDER_SQL_LT_LEN)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); @@ -2490,6 +2579,18 @@ int spider_db_append_key_where_internal( append_column_value(spider, str_part, field, ptr, share->access_charset)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); +#else + if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN) + { + if (str->reserve(SPIDER_SQL_LT_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_LT_STR, SPIDER_SQL_LT_LEN); + if (spider_dbton[dbton_id].db_util-> + append_column_value(spider, str_part, field, ptr, + share->access_charset)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + } +#endif } } break; @@ -2526,7 +2627,8 @@ int spider_db_append_key_where_internal( if (use_key == end_key) { - if (tgt_key_part_map == 1) +#ifdef SPIDER_HANDLER_SUPPORT_MULTIPLE_KEY_PARTS + if (tgt_key_part_map == 1 || !start_key_part_map) { if (str->reserve(SPIDER_SQL_LTEQUAL_LEN)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); @@ -2537,6 +2639,19 @@ int spider_db_append_key_where_internal( append_column_value(spider, str_part, field, ptr, share->access_charset)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); +#else + if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN) + { + if (str->reserve(SPIDER_SQL_LTEQUAL_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_LTEQUAL_STR, + SPIDER_SQL_LTEQUAL_LEN); + if (spider_dbton[dbton_id].db_util-> + append_column_value(spider, str_part, field, ptr, + share->access_charset)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + } +#endif } } break; @@ -2554,12 +2669,14 @@ int spider_db_append_key_where_internal( str_part2->q_append(SPIDER_SQL_AND_STR, SPIDER_SQL_AND_LEN); +#ifdef SPIDER_HANDLER_SUPPORT_MULTIPLE_KEY_PARTS if (use_key == end_key) { if (str_part->reserve(SPIDER_SQL_COMMA_LEN)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); str_part->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); } +#endif } } if (use_both && (!start_key_part_map || !end_key_part_map)) |