3999
4019
if (str->reserve(
4000
4020
SPIDER_SQL_VALUE_QUOTE_LEN + SPIDER_SQL_CLOSE_PAREN_LEN +
4001
((spider->ft_init_flags & FT_BOOL) ? SPIDER_SQL_IN_BOOLEAN_MODE_LEN : 0) +
4002
((spider->ft_init_flags & FT_EXPAND) ?
4021
((ft_info->flags & FT_BOOL) ? SPIDER_SQL_IN_BOOLEAN_MODE_LEN : 0) +
4022
((ft_info->flags & FT_EXPAND) ?
4003
4023
SPIDER_SQL_WITH_QUERY_EXPANSION_LEN : 0)
4005
4025
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4006
4026
str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN);
4007
if (spider->ft_init_flags & FT_BOOL)
4027
if (ft_info->flags & FT_BOOL)
4008
4028
str->q_append(SPIDER_SQL_IN_BOOLEAN_MODE_STR,
4009
4029
SPIDER_SQL_IN_BOOLEAN_MODE_LEN);
4010
if (spider->ft_init_flags & FT_EXPAND)
4030
if (ft_info->flags & FT_EXPAND)
4011
4031
str->q_append(SPIDER_SQL_WITH_QUERY_EXPANSION_STR,
4012
4032
SPIDER_SQL_WITH_QUERY_EXPANSION_LEN);
4013
4033
str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN);
4037
int spider_db_append_match_select(
4044
DBUG_ENTER("spider_db_append_match_select");
4045
if (spider->ft_current)
4047
st_spider_ft_info *ft_info = spider->ft_first;
4050
if ((error_num = spider_db_append_match_against(str, spider, ft_info,
4051
alias, alias_length)))
4052
DBUG_RETURN(error_num);
4053
if (str->reserve(SPIDER_SQL_COMMA_LEN))
4054
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4055
str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
4056
if (ft_info == spider->ft_current)
4058
ft_info = ft_info->next;
4064
int spider_db_append_match_fetch(
4066
st_spider_ft_info *ft_first,
4067
st_spider_ft_info *ft_current,
4071
DBUG_ENTER("spider_db_append_match_fetch");
4074
st_spider_ft_info *ft_info = ft_first;
4077
DBUG_PRINT("info",("spider ft_info=%p", ft_info));
4079
ft_info->score = (float) atof(**row);
4081
DBUG_RETURN(ER_SPIDER_UNKNOWN_NUM);
4084
if (ft_info == ft_current)
4086
ft_info = ft_info->next;
4092
int spider_db_append_match_where(
4096
SPIDER_RESULT_LIST *result_list = &spider->result_list;
4097
String *str = &result_list->sql;
4099
st_spider_ft_info *ft_info = spider->ft_first;
4100
DBUG_ENTER("spider_db_append_match_where");
4102
if (spider->ft_current)
4106
if (ft_info->used_in_where)
4110
if (str->reserve(SPIDER_SQL_WHERE_LEN))
4111
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4112
str->q_append(SPIDER_SQL_WHERE_STR, SPIDER_SQL_WHERE_LEN);
4115
if ((error_num = spider_db_append_match_against(str, spider, ft_info,
4117
DBUG_RETURN(error_num);
4118
if (str->reserve(SPIDER_SQL_AND_LEN))
4119
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4120
str->q_append(SPIDER_SQL_AND_STR, SPIDER_SQL_AND_LEN);
4123
if (ft_info == spider->ft_current)
4125
ft_info = ft_info->next;
4128
str->length(str->length() - SPIDER_SQL_AND_LEN);
4015
4131
/* use condition */
4016
4132
if (spider_db_append_condition(spider, str, NULL, 0))
4131
4247
DBUG_RETURN(0);
4133
if (result_list->sorted == TRUE)
4249
if (result_list->direct_order_limit)
4135
if (result_list->desc_flg == TRUE)
4138
key_part = key_info->key_part + result_list->key_order,
4140
length + result_list->key_order < key_info->key_parts &&
4141
length < result_list->max_order;
4145
field = key_part->field;
4146
key_name_length = share->column_name_str[field->field_index].length();
4149
if (str->reserve(SPIDER_SQL_ORDER_LEN))
4150
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4151
str->q_append(SPIDER_SQL_ORDER_STR, SPIDER_SQL_ORDER_LEN);
4153
if (key_part->key_part_flag & HA_REVERSE_SORT)
4155
if (str->reserve(key_name_length + SPIDER_SQL_COMMA_LEN))
4156
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4157
spider_db_append_column_name(share, str, field->field_index);
4158
str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
4160
if (str->reserve(key_name_length +
4161
SPIDER_SQL_DESC_LEN + SPIDER_SQL_COMMA_LEN))
4162
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4163
spider_db_append_column_name(share, str, field->field_index);
4164
str->q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN);
4165
str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
4169
length + result_list->key_order <= key_info->key_parts &&
4170
length <= result_list->max_order
4172
field = key_part->field;
4173
key_name_length = share->column_name_str[field->field_index].length();
4176
if (str->reserve(SPIDER_SQL_ORDER_LEN))
4177
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4178
str->q_append(SPIDER_SQL_ORDER_STR, SPIDER_SQL_ORDER_LEN);
4180
if (key_part->key_part_flag & HA_REVERSE_SORT)
4182
if (str->reserve(key_name_length))
4183
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4184
spider_db_append_column_name(share, str, field->field_index);
4186
if (str->reserve(key_name_length + SPIDER_SQL_DESC_LEN))
4187
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4188
spider_db_append_column_name(share, str, field->field_index);
4189
str->q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN);
4194
key_part = key_info->key_part + result_list->key_order,
4196
length + result_list->key_order < key_info->key_parts &&
4197
length < result_list->max_order;
4201
field = key_part->field;
4202
key_name_length = share->column_name_str[field->field_index].length();
4205
if (str->reserve(SPIDER_SQL_ORDER_LEN))
4206
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4207
str->q_append(SPIDER_SQL_ORDER_STR, SPIDER_SQL_ORDER_LEN);
4209
if (key_part->key_part_flag & HA_REVERSE_SORT)
4211
if (str->reserve(key_name_length +
4212
SPIDER_SQL_DESC_LEN + SPIDER_SQL_COMMA_LEN))
4213
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4214
spider_db_append_column_name(share, str, field->field_index);
4215
str->q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN);
4216
str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
4218
if (str->reserve(key_name_length + SPIDER_SQL_COMMA_LEN))
4219
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4220
spider_db_append_column_name(share, str, field->field_index);
4221
str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
4225
length + result_list->key_order <= key_info->key_parts &&
4226
length <= result_list->max_order
4228
field = key_part->field;
4229
key_name_length = share->column_name_str[field->field_index].length();
4232
if (str->reserve(SPIDER_SQL_ORDER_LEN))
4233
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4234
str->q_append(SPIDER_SQL_ORDER_STR, SPIDER_SQL_ORDER_LEN);
4236
if (key_part->key_part_flag & HA_REVERSE_SORT)
4238
if (str->reserve(key_name_length + SPIDER_SQL_DESC_LEN))
4239
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4240
spider_db_append_column_name(share, str, field->field_index);
4241
str->q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN);
4243
if (str->reserve(key_name_length))
4244
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4245
spider_db_append_column_name(share, str, field->field_index);
4253
st_select_lex *select_lex;
4254
longlong select_limit;
4255
longlong offset_limit;
4256
spider_get_select_limit(spider, &select_lex, &select_limit,
4258
if (str->reserve(SPIDER_SQL_ORDER_LEN))
4259
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4260
str->q_append(SPIDER_SQL_ORDER_STR, SPIDER_SQL_ORDER_LEN);
4261
for (order = (ORDER *) select_lex->order_list.first; order;
4262
order = order->next)
4265
spider_db_print_item_type((*order->item), spider, str, NULL, 0)))
4267
DBUG_PRINT("info",("spider error=%d", error_num));
4268
DBUG_RETURN(error_num);
4272
if (str->reserve(SPIDER_SQL_COMMA_LEN))
4273
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4274
str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
4276
if (str->reserve(SPIDER_SQL_DESC_LEN + SPIDER_SQL_COMMA_LEN))
4277
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4278
str->q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN);
4279
str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
4282
str->length(str->length() - SPIDER_SQL_COMMA_LEN);
4284
if (result_list->sorted == TRUE)
4286
if (result_list->desc_flg == TRUE)
4289
key_part = key_info->key_part + result_list->key_order,
4291
length + result_list->key_order < key_info->key_parts &&
4292
length < result_list->max_order;
4296
field = key_part->field;
4298
share->column_name_str[field->field_index].length();
4301
if (str->reserve(SPIDER_SQL_ORDER_LEN))
4302
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4303
str->q_append(SPIDER_SQL_ORDER_STR, SPIDER_SQL_ORDER_LEN);
4305
if (key_part->key_part_flag & HA_REVERSE_SORT)
4307
if (str->reserve(key_name_length + SPIDER_SQL_COMMA_LEN))
4308
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4309
spider_db_append_column_name(share, str, field->field_index);
4310
str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
4312
if (str->reserve(key_name_length +
4313
SPIDER_SQL_DESC_LEN + SPIDER_SQL_COMMA_LEN))
4314
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4315
spider_db_append_column_name(share, str, field->field_index);
4316
str->q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN);
4317
str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
4321
length + result_list->key_order <= key_info->key_parts &&
4322
length <= result_list->max_order
4324
field = key_part->field;
4326
share->column_name_str[field->field_index].length();
4329
if (str->reserve(SPIDER_SQL_ORDER_LEN))
4330
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4331
str->q_append(SPIDER_SQL_ORDER_STR, SPIDER_SQL_ORDER_LEN);
4333
if (key_part->key_part_flag & HA_REVERSE_SORT)
4335
if (str->reserve(key_name_length))
4336
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4337
spider_db_append_column_name(share, str, field->field_index);
4339
if (str->reserve(key_name_length + SPIDER_SQL_DESC_LEN))
4340
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4341
spider_db_append_column_name(share, str, field->field_index);
4342
str->q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN);
4347
key_part = key_info->key_part + result_list->key_order,
4349
length + result_list->key_order < key_info->key_parts &&
4350
length < result_list->max_order;
4354
field = key_part->field;
4356
share->column_name_str[field->field_index].length();
4359
if (str->reserve(SPIDER_SQL_ORDER_LEN))
4360
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4361
str->q_append(SPIDER_SQL_ORDER_STR, SPIDER_SQL_ORDER_LEN);
4363
if (key_part->key_part_flag & HA_REVERSE_SORT)
4365
if (str->reserve(key_name_length +
4366
SPIDER_SQL_DESC_LEN + SPIDER_SQL_COMMA_LEN))
4367
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4368
spider_db_append_column_name(share, str, field->field_index);
4369
str->q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN);
4370
str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
4372
if (str->reserve(key_name_length + SPIDER_SQL_COMMA_LEN))
4373
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4374
spider_db_append_column_name(share, str, field->field_index);
4375
str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN);
4379
length + result_list->key_order <= key_info->key_parts &&
4380
length <= result_list->max_order
4382
field = key_part->field;
4384
share->column_name_str[field->field_index].length();
4387
if (str->reserve(SPIDER_SQL_ORDER_LEN))
4388
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4389
str->q_append(SPIDER_SQL_ORDER_STR, SPIDER_SQL_ORDER_LEN);
4391
if (key_part->key_part_flag & HA_REVERSE_SORT)
4393
if (str->reserve(key_name_length + SPIDER_SQL_DESC_LEN))
4394
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4395
spider_db_append_column_name(share, str, field->field_index);
4396
str->q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN);
4398
if (str->reserve(key_name_length))
4399
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
4400
spider_db_append_column_name(share, str, field->field_index);
10310
10540
} else if (func_name_length == 13 &&
10311
10541
!strncasecmp("utc_timestamp", func_name, func_name_length)
10313
str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN);
10544
str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN);
10314
10545
DBUG_RETURN(spider_db_open_item_string(item_func, spider, str,
10315
10546
alias, alias_length));
10316
10547
} else if (func_name_length == 14)
10318
10549
if (!strncasecmp("cast_as_binary", func_name, func_name_length))
10320
char tmp_buf[MAX_FIELD_WIDTH], *tmp_ptr, *tmp_ptr2;
10321
String tmp_str(tmp_buf, MAX_FIELD_WIDTH, str->charset());
10323
str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN);
10324
if (str->reserve(SPIDER_SQL_CAST_LEN))
10325
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10326
str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN);
10327
item_func->print(&tmp_str, QT_IS);
10328
if (tmp_str.reserve(1))
10329
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10330
tmp_ptr = tmp_str.c_ptr_quick();
10331
DBUG_PRINT("info",("spider tmp_ptr = %s", tmp_ptr));
10332
while ((tmp_ptr2 = strstr(tmp_ptr, SPIDER_SQL_AS_BINARY_STR)))
10333
tmp_ptr = tmp_ptr2 + 1;
10334
last_str = tmp_ptr - 1;
10335
last_str_length = strlen(last_str) - SPIDER_SQL_CLOSE_PAREN_LEN;
10553
char tmp_buf[MAX_FIELD_WIDTH], *tmp_ptr, *tmp_ptr2;
10554
String tmp_str(tmp_buf, MAX_FIELD_WIDTH, str->charset());
10556
str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN);
10557
if (str->reserve(SPIDER_SQL_CAST_LEN))
10558
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10559
str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN);
10560
item_func->print(&tmp_str, QT_IS);
10561
if (tmp_str.reserve(1))
10562
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10563
tmp_ptr = tmp_str.c_ptr_quick();
10564
DBUG_PRINT("info",("spider tmp_ptr = %s", tmp_ptr));
10565
while ((tmp_ptr2 = strstr(tmp_ptr, SPIDER_SQL_AS_BINARY_STR)))
10566
tmp_ptr = tmp_ptr2 + 1;
10567
last_str = tmp_ptr - 1;
10568
last_str_length = strlen(last_str) - SPIDER_SQL_CLOSE_PAREN_LEN;
10337
10571
} else if (!strncasecmp("cast_as_signed", func_name, func_name_length))
10339
str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN);
10340
if (str->reserve(SPIDER_SQL_CAST_LEN))
10341
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10342
str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN);
10575
str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN);
10576
if (str->reserve(SPIDER_SQL_CAST_LEN))
10577
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10578
str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN);
10343
10580
last_str = SPIDER_SQL_AS_SIGNED_STR;
10344
10581
last_str_length = SPIDER_SQL_AS_SIGNED_LEN;
10349
10586
if (!strncasecmp("cast_as_unsigned", func_name, func_name_length))
10351
str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN);
10352
if (str->reserve(SPIDER_SQL_CAST_LEN))
10353
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10354
str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN);
10590
str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN);
10591
if (str->reserve(SPIDER_SQL_CAST_LEN))
10592
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10593
str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN);
10355
10595
last_str = SPIDER_SQL_AS_UNSIGNED_STR;
10356
10596
last_str_length = SPIDER_SQL_AS_UNSIGNED_LEN;
10358
10598
} else if (!strncasecmp("decimal_typecast", func_name,
10359
10599
func_name_length))
10361
char tmp_buf[MAX_FIELD_WIDTH], *tmp_ptr, *tmp_ptr2;
10362
String tmp_str(tmp_buf, MAX_FIELD_WIDTH, str->charset());
10364
str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN);
10365
if (str->reserve(SPIDER_SQL_CAST_LEN))
10366
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10367
str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN);
10368
item_func->print(&tmp_str, QT_IS);
10369
if (tmp_str.reserve(1))
10370
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10371
tmp_ptr = tmp_str.c_ptr_quick();
10372
DBUG_PRINT("info",("spider tmp_ptr = %s", tmp_ptr));
10373
while ((tmp_ptr2 = strstr(tmp_ptr, SPIDER_SQL_AS_DECIMAL_STR)))
10374
tmp_ptr = tmp_ptr2 + 1;
10375
last_str = tmp_ptr - 1;
10376
last_str_length = strlen(last_str) - SPIDER_SQL_CLOSE_PAREN_LEN;
10603
char tmp_buf[MAX_FIELD_WIDTH], *tmp_ptr, *tmp_ptr2;
10604
String tmp_str(tmp_buf, MAX_FIELD_WIDTH, str->charset());
10606
str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN);
10607
if (str->reserve(SPIDER_SQL_CAST_LEN))
10608
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10609
str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN);
10610
item_func->print(&tmp_str, QT_IS);
10611
if (tmp_str.reserve(1))
10612
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10613
tmp_ptr = tmp_str.c_ptr_quick();
10614
DBUG_PRINT("info",("spider tmp_ptr = %s", tmp_ptr));
10615
while ((tmp_ptr2 = strstr(tmp_ptr, SPIDER_SQL_AS_DECIMAL_STR)))
10616
tmp_ptr = tmp_ptr2 + 1;
10617
last_str = tmp_ptr - 1;
10618
last_str_length = strlen(last_str) - SPIDER_SQL_CLOSE_PAREN_LEN;
10378
10621
} else if (!strncasecmp("cast_as_datetime", func_name,
10379
10622
func_name_length))
10381
str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN);
10382
if (str->reserve(SPIDER_SQL_CAST_LEN))
10383
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10384
str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN);
10626
str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN);
10627
if (str->reserve(SPIDER_SQL_CAST_LEN))
10628
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10629
str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN);
10385
10631
last_str = SPIDER_SQL_AS_DATETIME_STR;
10386
10632
last_str_length = SPIDER_SQL_AS_DATETIME_LEN;
10390
if (str->reserve(func_name_length + SPIDER_SQL_OPEN_PAREN_LEN))
10391
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10392
str->q_append(func_name, func_name_length);
10393
str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN);
10638
if (str->reserve(func_name_length + SPIDER_SQL_OPEN_PAREN_LEN))
10639
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10640
str->q_append(func_name, func_name_length);
10641
str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN);
10394
10643
func_name = SPIDER_SQL_COMMA_STR;
10395
10644
func_name_length = SPIDER_SQL_COMMA_LEN;
10396
10645
separete_str = SPIDER_SQL_COMMA_STR;
10399
10648
last_str_length = SPIDER_SQL_CLOSE_PAREN_LEN;
10401
10650
case Item_func::NOW_FUNC:
10402
str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN);
10652
str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN);
10403
10653
DBUG_RETURN(spider_db_open_item_string(item_func, spider, str,
10404
10654
alias, alias_length));
10405
10655
case Item_func::CHAR_TYPECAST_FUNC:
10407
char tmp_buf[MAX_FIELD_WIDTH], *tmp_ptr, *tmp_ptr2;
10408
String tmp_str(tmp_buf, MAX_FIELD_WIDTH, str->charset());
10410
str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN);
10411
if (str->reserve(SPIDER_SQL_CAST_LEN))
10412
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10413
str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN);
10414
item_func->print(&tmp_str, QT_IS);
10415
if (tmp_str.reserve(1))
10416
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10417
tmp_ptr = tmp_str.c_ptr_quick();
10418
DBUG_PRINT("info",("spider tmp_ptr = %s", tmp_ptr));
10419
while ((tmp_ptr2 = strstr(tmp_ptr, SPIDER_SQL_AS_CHAR_STR)))
10420
tmp_ptr = tmp_ptr2 + 1;
10421
last_str = tmp_ptr - 1;
10422
last_str_length = strlen(last_str) - SPIDER_SQL_CLOSE_PAREN_LEN;
10659
char tmp_buf[MAX_FIELD_WIDTH], *tmp_ptr, *tmp_ptr2;
10660
String tmp_str(tmp_buf, MAX_FIELD_WIDTH, str->charset());
10662
str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN);
10663
if (str->reserve(SPIDER_SQL_CAST_LEN))
10664
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10665
str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN);
10666
item_func->print(&tmp_str, QT_IS);
10667
if (tmp_str.reserve(1))
10668
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10669
tmp_ptr = tmp_str.c_ptr_quick();
10670
DBUG_PRINT("info",("spider tmp_ptr = %s", tmp_ptr));
10671
while ((tmp_ptr2 = strstr(tmp_ptr, SPIDER_SQL_AS_CHAR_STR)))
10672
tmp_ptr = tmp_ptr2 + 1;
10673
last_str = tmp_ptr - 1;
10674
last_str_length = strlen(last_str) - SPIDER_SQL_CLOSE_PAREN_LEN;
10425
10678
case Item_func::NOT_FUNC:
10426
10679
case Item_func::NEG_FUNC:
10427
func_name = (char*) item_func->func_name();
10428
func_name_length = strlen(func_name);
10429
if (str->reserve(func_name_length + SPIDER_SQL_SPACE_LEN))
10430
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10431
str->q_append(func_name, func_name_length);
10432
str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN);
10682
func_name = (char*) item_func->func_name();
10683
func_name_length = strlen(func_name);
10684
if (str->reserve(func_name_length + SPIDER_SQL_SPACE_LEN))
10685
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10686
str->q_append(func_name, func_name_length);
10687
str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN);
10434
10690
case Item_func::IN_FUNC:
10435
10691
if (((Item_func_opt_neg *) item_func)->negated)
10559
10838
if (item_func->functype() == Item_func::FT_FUNC)
10561
10840
Item_func_match *item_func_match = (Item_func_match *)item_func;
10562
if (str->reserve(SPIDER_SQL_AGAINST_LEN))
10563
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10564
str->q_append(SPIDER_SQL_AGAINST_STR, SPIDER_SQL_AGAINST_LEN);
10843
if (str->reserve(SPIDER_SQL_AGAINST_LEN))
10844
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10845
str->q_append(SPIDER_SQL_AGAINST_STR, SPIDER_SQL_AGAINST_LEN);
10565
10847
item = item_list[0];
10566
10848
if ((error_num = spider_db_print_item_type(item, spider, str,
10567
10849
alias, alias_length)))
10568
10850
DBUG_RETURN(error_num);
10570
((item_func_match->flags & FT_BOOL) ?
10571
SPIDER_SQL_IN_BOOLEAN_MODE_LEN : 0) +
10572
((item_func_match->flags & FT_EXPAND) ?
10573
SPIDER_SQL_WITH_QUERY_EXPANSION_LEN : 0)
10854
((item_func_match->flags & FT_BOOL) ?
10855
SPIDER_SQL_IN_BOOLEAN_MODE_LEN : 0) +
10856
((item_func_match->flags & FT_EXPAND) ?
10857
SPIDER_SQL_WITH_QUERY_EXPANSION_LEN : 0)
10859
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10860
if (item_func_match->flags & FT_BOOL)
10861
str->q_append(SPIDER_SQL_IN_BOOLEAN_MODE_STR,
10862
SPIDER_SQL_IN_BOOLEAN_MODE_LEN);
10863
if (item_func_match->flags & FT_EXPAND)
10864
str->q_append(SPIDER_SQL_WITH_QUERY_EXPANSION_STR,
10865
SPIDER_SQL_WITH_QUERY_EXPANSION_LEN);
10870
if (str->reserve(last_str_length + SPIDER_SQL_CLOSE_PAREN_LEN))
10575
10871
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10576
if (item_func_match->flags & FT_BOOL)
10577
str->q_append(SPIDER_SQL_IN_BOOLEAN_MODE_STR,
10578
SPIDER_SQL_IN_BOOLEAN_MODE_LEN);
10579
if (item_func_match->flags & FT_EXPAND)
10580
str->q_append(SPIDER_SQL_WITH_QUERY_EXPANSION_STR,
10581
SPIDER_SQL_WITH_QUERY_EXPANSION_LEN);
10872
str->q_append(last_str, last_str_length);
10873
str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN);
10583
if (str->reserve(last_str_length + SPIDER_SQL_CLOSE_PAREN_LEN))
10584
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10585
str->q_append(last_str, last_str_length);
10586
str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN);
10587
10875
DBUG_RETURN(0);
10603
10891
#ifdef HANDLER_HAS_TOP_TABLE_FIELDS
10604
10892
if (spider->set_top_table_fields)
10606
Field *field = spider->top_table_field[item_ident->cached_field_index];
10609
share->column_name_str[field->field_index].length() +
10610
(SPIDER_SQL_NAME_QUOTE_LEN) * 2))
10611
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10612
str->q_append(alias, alias_length);
10613
spider_db_append_column_name(share, str, field->field_index);
10896
Field *field = spider->top_table_field[item_ident->cached_field_index];
10899
share->column_name_str[field->field_index].length() +
10900
(SPIDER_SQL_NAME_QUOTE_LEN) * 2))
10901
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10902
str->q_append(alias, alias_length);
10903
spider_db_append_column_name(share, str, field->field_index);
10618
share->column_name_str[item_ident->cached_field_index].length() +
10619
(SPIDER_SQL_NAME_QUOTE_LEN) * 2))
10620
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10621
str->q_append(alias, alias_length);
10622
spider_db_append_column_name(share, str,
10623
item_ident->cached_field_index);
10911
share->column_name_str[item_ident->cached_field_index].length() +
10912
(SPIDER_SQL_NAME_QUOTE_LEN) * 2))
10913
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10914
str->q_append(alias, alias_length);
10915
spider_db_append_column_name(share, str,
10916
item_ident->cached_field_index);
10624
10918
#ifdef HANDLER_HAS_TOP_TABLE_FIELDS
10627
10921
DBUG_RETURN(0);
10629
if (item_ident->field_name)
10630
field_name_length = strlen(item_ident->field_name);
10632
field_name_length = 0;
10633
if (spider->share->access_charset->cset == system_charset_info->cset)
10635
if (str->reserve((SPIDER_SQL_NAME_QUOTE_LEN) * 2 + field_name_length))
10636
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10637
str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN);
10638
str->q_append(item_ident->field_name, field_name_length);
10639
str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN);
10641
if (str->reserve(SPIDER_SQL_NAME_QUOTE_LEN))
10642
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10643
str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN);
10644
str->append(item_ident->field_name, field_name_length,
10645
system_charset_info);
10646
if (str->reserve(SPIDER_SQL_NAME_QUOTE_LEN))
10647
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10648
str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN);
10925
if (item_ident->field_name)
10926
field_name_length = strlen(item_ident->field_name);
10928
field_name_length = 0;
10929
if (spider->share->access_charset->cset == system_charset_info->cset)
10931
if (str->reserve((SPIDER_SQL_NAME_QUOTE_LEN) * 2 + field_name_length))
10932
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10933
str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN);
10934
str->q_append(item_ident->field_name, field_name_length);
10935
str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN);
10937
if (str->reserve(SPIDER_SQL_NAME_QUOTE_LEN))
10938
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10939
str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN);
10940
str->append(item_ident->field_name, field_name_length,
10941
system_charset_info);
10942
if (str->reserve(SPIDER_SQL_NAME_QUOTE_LEN))
10943
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10944
str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN);
10650
10947
DBUG_RETURN(0);
10807
11136
bool where_pos;
10808
11137
DBUG_ENTER("spider_db_append_condition_internal");
10809
11138
if (sql_kind == SPIDER_SQL_KIND_SQL)
10810
where_pos = (str->length() == spider->result_list.where_pos);
10811
else if (sql_kind == SPIDER_SQL_KIND_HANDLER)
10814
str = &spider->result_list.ha_sql;
10815
if (spider->active_index == MAX_KEY)
11141
where_pos = (str->length() == spider->result_list.where_pos);
11142
} else if (sql_kind == SPIDER_SQL_KIND_HANDLER)
10817
spider->result_list.ha_read_pos = str->length();
10818
if (str->reserve(SPIDER_SQL_READ_LEN + SPIDER_SQL_FIRST_LEN))
10819
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10820
str->q_append(SPIDER_SQL_READ_STR, SPIDER_SQL_READ_LEN);
10821
spider->result_list.ha_next_pos = str->length();
10822
str->q_append(SPIDER_SQL_FIRST_STR, SPIDER_SQL_FIRST_LEN);
11147
str = &spider->result_list.ha_sql;
11148
if (spider->active_index == MAX_KEY)
11150
spider->result_list.ha_read_pos = str->length();
11151
if (str->reserve(SPIDER_SQL_READ_LEN + SPIDER_SQL_FIRST_LEN))
11152
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
11153
str->q_append(SPIDER_SQL_READ_STR, SPIDER_SQL_READ_LEN);
11154
spider->result_list.ha_next_pos = str->length();
11155
str->q_append(SPIDER_SQL_FIRST_STR, SPIDER_SQL_FIRST_LEN);
11157
spider->result_list.ha_where_pos = str->length();
10824
spider->result_list.ha_where_pos = str->length();
10826
11160
DBUG_RETURN(0);
10828
11162
while (tmp_cond)
10830
restart_pos = str->length();
10833
if (str->reserve(SPIDER_SQL_WHERE_LEN))
10834
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10835
str->q_append(SPIDER_SQL_WHERE_STR, SPIDER_SQL_WHERE_LEN);
10838
if (str->reserve(SPIDER_SQL_AND_LEN))
10839
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
10840
str->q_append(SPIDER_SQL_AND_STR, SPIDER_SQL_AND_LEN);
11166
restart_pos = str->length();
11169
if (str->reserve(SPIDER_SQL_WHERE_LEN))
11170
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
11171
str->q_append(SPIDER_SQL_WHERE_STR, SPIDER_SQL_WHERE_LEN);
11174
if (str->reserve(SPIDER_SQL_AND_LEN))
11175
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
11176
str->q_append(SPIDER_SQL_AND_STR, SPIDER_SQL_AND_LEN);
10842
11179
if ((error_num = spider_db_print_item_type(
10843
11180
(Item *) tmp_cond->cond, spider, str, alias, alias_length)))
10845
if (error_num == ER_SPIDER_COND_SKIP_NUM)
11182
if (str && error_num == ER_SPIDER_COND_SKIP_NUM)
10847
11184
DBUG_PRINT("info",("spider COND skip"));
10848
11185
str->length(restart_pos);