5301
5299
uint32_t repertoire= session->lex->text_string_is_7bit &&
5302
5300
my_charset_is_ascii_based(cs_cli) ?
5303
5301
MY_REPERTOIRE_ASCII : MY_REPERTOIRE_UNICODE30;
5304
if (session->charset_is_collation_connection ||
5305
(repertoire == MY_REPERTOIRE_ASCII &&
5306
my_charset_is_ascii_based(cs_con)))
5309
session->convert_string(&tmp, cs_con, $1.str, $1.length, cs_cli);
5310
$$= new Item_string(tmp.str, tmp.length, cs_con,
5311
DERIVATION_COERCIBLE, repertoire);
5313
| UNDERSCORE_CHARSET TEXT_STRING
5315
Item_string *str= new Item_string($2.str, $2.length, $1);
5316
str->set_repertoire_from_value();
5317
str->set_cs_specified(true);
5303
$$= new Item_string(tmp.str, tmp.length, cs_con, DERIVATION_COERCIBLE, repertoire);
5321
5305
| text_literal TEXT_STRING_literal
5388
5372
| TRUE_SYM { $$= new Item_int((char*) "TRUE",1,1); }
5389
5373
| HEX_NUM { $$ = new Item_hex_string($1.str, $1.length);}
5390
5374
| BIN_NUM { $$= new Item_bin_string($1.str, $1.length); }
5391
| UNDERSCORE_CHARSET HEX_NUM
5393
Item *tmp= new Item_hex_string($2.str, $2.length);
5395
it is OK only emulate fix_fieds, because we need only
5399
tmp->quick_fix_field(), tmp->val_str((String*) 0) :
5402
Item_string *item_str=
5403
new Item_string(NULL, /* name will be set in select_item */
5404
str ? str->ptr() : "",
5405
str ? str->length() : 0,
5408
!item_str->check_well_formed_result(&item_str->str_value, true))
5413
item_str->set_repertoire_from_value();
5414
item_str->set_cs_specified(true);
5418
| UNDERSCORE_CHARSET BIN_NUM
5420
Item *tmp= new Item_bin_string($2.str, $2.length);
5422
it is OK only emulate fix_fieds, because we need only
5426
tmp->quick_fix_field(), tmp->val_str((String*) 0) :
5429
Item_string *item_str=
5430
new Item_string(NULL, /* name will be set in select_item */
5431
str ? str->ptr() : "",
5432
str ? str->length() : 0,
5435
!item_str->check_well_formed_result(&item_str->str_value, true))
5440
item_str->set_cs_specified(true);
5444
5375
| DATE_SYM text_literal { $$ = $2; }
5445
5376
| TIMESTAMP text_literal { $$ = $2; }
5637
5568
IDENT { $$= $1; }
5640
Session *session= YYSession;
5642
if (session->charset_is_system_charset)
5571
const CHARSET_INFO * const cs= system_charset_info;
5573
uint32_t wlen= cs->cset->well_formed_len(cs, $1.str,
5575
$1.length, &dummy_error);
5576
if (wlen < $1.length)
5644
const CHARSET_INFO * const cs= system_charset_info;
5646
uint32_t wlen= cs->cset->well_formed_len(cs, $1.str,
5648
$1.length, &dummy_error);
5649
if (wlen < $1.length)
5651
my_error(ER_INVALID_CHARACTER_STRING, MYF(0),
5652
cs->csname, $1.str + wlen);
5578
my_error(ER_INVALID_CHARACTER_STRING, MYF(0),
5579
cs->csname, $1.str + wlen);
5658
session->convert_string(&$$, system_charset_info,
5659
$1.str, $1.length, session->charset());
5663
5586
TEXT_STRING_sys:
5666
Session *session= YYSession;
5668
if (session->charset_is_system_charset)
5671
session->convert_string(&$$, system_charset_info,
5672
$1.str, $1.length, session->charset());
5676
5593
TEXT_STRING_literal:
5679
Session *session= YYSession;
5681
if (session->charset_is_collation_connection)
5684
session->convert_string(&$$, session->variables.getCollation(),
5685
$1.str, $1.length, session->charset());
5689
5600
TEXT_STRING_filesystem:
5692
Session *session= YYSession;
5694
if (session->charset_is_character_set_filesystem)
5697
session->convert_string(&$$, session->variables.character_set_filesystem,
5698
$1.str, $1.length, session->charset());