Commit 51040beb authored by Kentoku SHIBA's avatar Kentoku SHIBA

handler clause

parent 120b6353
This diff is collapsed.
......@@ -4331,7 +4331,8 @@ int spider_handlersocket_handler::append_is_null_part(
KEY_PART_INFO *key_part,
const key_range *key,
const uchar **ptr,
bool key_eq
bool key_eq,
bool tgt_final
) {
int error_num;
spider_string *str;
......@@ -4349,7 +4350,7 @@ int spider_handlersocket_handler::append_is_null_part(
DBUG_RETURN(0);
}
error_num = append_is_null(sql_type, str, NULL, NULL, key_part, key, ptr,
key_eq);
key_eq, tgt_final);
DBUG_RETURN(error_num);
}
......@@ -4361,7 +4362,8 @@ int spider_handlersocket_handler::append_is_null(
KEY_PART_INFO *key_part,
const key_range *key,
const uchar **ptr,
bool key_eq
bool key_eq,
bool tgt_final
) {
DBUG_ENTER("spider_handlersocket_handler::append_is_null");
DBUG_PRINT("info",("spider this=%p", this));
......
......@@ -627,7 +627,8 @@ class spider_handlersocket_handler: public spider_db_handler
KEY_PART_INFO *key_part,
const key_range *key,
const uchar **ptr,
bool key_eq
bool key_eq,
bool tgt_final
);
int append_is_null(
ulong sql_type,
......@@ -637,7 +638,8 @@ class spider_handlersocket_handler: public spider_db_handler
KEY_PART_INFO *key_part,
const key_range *key,
const uchar **ptr,
bool key_eq
bool key_eq,
bool tgt_final
);
int append_where_terminator_part(
ulong sql_type,
......
......@@ -1124,7 +1124,8 @@ class spider_db_handler
KEY_PART_INFO *key_part,
const key_range *key,
const uchar **ptr,
bool key_eq
bool key_eq,
bool tgt_final
) = 0;
virtual int append_where_terminator_part(
ulong sql_type,
......
......@@ -6682,7 +6682,8 @@ int spider_mysql_handler::append_is_null_part(
KEY_PART_INFO *key_part,
const key_range *key,
const uchar **ptr,
bool key_eq
bool key_eq,
bool tgt_final
) {
int error_num;
spider_string *str, *str_part = NULL, *str_part2 = NULL;
......@@ -6709,7 +6710,7 @@ int spider_mysql_handler::append_is_null_part(
DBUG_RETURN(0);
}
error_num = append_is_null(sql_type, str, str_part, str_part2,
key_part, key, ptr, key_eq);
key_part, key, ptr, key_eq, tgt_final);
DBUG_RETURN(error_num);
}
......@@ -6721,32 +6722,54 @@ int spider_mysql_handler::append_is_null(
KEY_PART_INFO *key_part,
const key_range *key,
const uchar **ptr,
bool key_eq
bool key_eq,
bool tgt_final
) {
DBUG_ENTER("spider_mysql_handler::append_is_null");
DBUG_PRINT("info",("spider this=%p", this));
DBUG_PRINT("info",("spider key_eq=%s", key_eq ? "TRUE" : "FALSE"));
if (key_part->null_bit)
{
if (*(*ptr)++)
{
if (sql_type == SPIDER_SQL_TYPE_HANDLER)
{
str = str_part;
if (
key_eq ||
key->flag == HA_READ_KEY_EXACT ||
key->flag == HA_READ_KEY_OR_NEXT
) {
if (str->reserve(SPIDER_SQL_IS_NULL_LEN))
if (tgt_final)
{
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);
}
str = str_part;
if (str->reserve(SPIDER_SQL_NULL_LEN))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
str->q_append(SPIDER_SQL_IS_NULL_STR, SPIDER_SQL_IS_NULL_LEN);
str->q_append(SPIDER_SQL_NULL_STR, SPIDER_SQL_NULL_LEN);
} else {
str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN);
ha_next_pos = str->length();
if (str->reserve(SPIDER_SQL_FIRST_LEN))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
str->q_append(SPIDER_SQL_FIRST_STR, SPIDER_SQL_FIRST_LEN);
spider->result_list.ha_read_kind = 1;
if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
{
str = str_part;
/* first index column */
str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN);
ha_next_pos = str->length();
if (str->reserve(SPIDER_SQL_FIRST_LEN))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
str->q_append(SPIDER_SQL_FIRST_STR, SPIDER_SQL_FIRST_LEN);
spider->result_list.ha_read_kind = 1;
} else if (tgt_final)
{
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);
str = str_part;
if (str->reserve(SPIDER_SQL_NULL_LEN))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
str->q_append(SPIDER_SQL_NULL_STR, SPIDER_SQL_NULL_LEN);
}
}
str = str_part2;
}
......
......@@ -790,7 +790,8 @@ class spider_mysql_handler: public spider_db_handler
KEY_PART_INFO *key_part,
const key_range *key,
const uchar **ptr,
bool key_eq
bool key_eq,
bool tgt_final
);
int append_is_null(
ulong sql_type,
......@@ -800,7 +801,8 @@ class spider_mysql_handler: public spider_db_handler
KEY_PART_INFO *key_part,
const key_range *key,
const uchar **ptr,
bool key_eq
bool key_eq,
bool tgt_final
);
int append_where_terminator_part(
ulong sql_type,
......
......@@ -6618,7 +6618,8 @@ int spider_oracle_handler::append_is_null_part(
KEY_PART_INFO *key_part,
const key_range *key,
const uchar **ptr,
bool key_eq
bool key_eq,
bool tgt_final
) {
int error_num;
spider_string *str, *str_part = NULL, *str_part2 = NULL;
......@@ -6645,7 +6646,7 @@ int spider_oracle_handler::append_is_null_part(
DBUG_RETURN(0);
}
error_num = append_is_null(sql_type, str, str_part, str_part2,
key_part, key, ptr, key_eq);
key_part, key, ptr, key_eq, tgt_final);
DBUG_RETURN(error_num);
}
......@@ -6657,7 +6658,8 @@ int spider_oracle_handler::append_is_null(
KEY_PART_INFO *key_part,
const key_range *key,
const uchar **ptr,
bool key_eq
bool key_eq,
bool tgt_final
) {
DBUG_ENTER("spider_oracle_handler::append_is_null");
DBUG_PRINT("info",("spider this=%p", this));
......
......@@ -870,7 +870,8 @@ class spider_oracle_handler: public spider_db_handler
KEY_PART_INFO *key_part,
const key_range *key,
const uchar **ptr,
bool key_eq
bool key_eq,
bool tgt_final
);
int append_is_null(
ulong sql_type,
......@@ -880,7 +881,8 @@ class spider_oracle_handler: public spider_db_handler
KEY_PART_INFO *key_part,
const key_range *key,
const uchar **ptr,
bool key_eq
bool key_eq,
bool tgt_final
);
int append_where_terminator_part(
ulong sql_type,
......
......@@ -13,7 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define SPIDER_DETAIL_VERSION "3.1.7"
#define SPIDER_DETAIL_VERSION "3.1.8"
#define SPIDER_HEX_VERSION 0x0301
#if MYSQL_VERSION_ID < 50500
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment