~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/sql_lex.cc

  • Committer: Olaf van der Spek
  • Date: 2011-10-10 17:33:19 UTC
  • mto: (2430.1.6 rf)
  • mto: This revision was merged to the branch mainline in revision 2438.
  • Revision ID: olafvdspek@gmail.com-20111010173319-k840ouy4sdrixp60
USe data() and size()

Show diffs side-by-side

added added

removed removed

Lines of Context:
232
232
  lex->expr_allows_subselect= true;
233
233
  lex->use_only_table_context= false;
234
234
 
235
 
  lex->name.str= 0;
236
 
  lex->name.length= 0;
 
235
  lex->name.assign(NULL, 0);
237
236
  lex->nest_level=0 ;
238
237
  lex->allow_sum_func= 0;
239
238
  lex->in_sum_func= NULL;
297
296
{
298
297
  lex_string_t tmp;
299
298
  lip->yyUnget();                       // ptr points now after last token char
300
 
  tmp.length=lip->yytoklen=length;
301
 
  tmp.str= lip->m_session->mem.strdup(lip->get_tok_start() + skip, tmp.length);
 
299
  tmp.str= lip->m_session->mem.strdup(lip->get_tok_start() + skip, length);
 
300
  tmp.length= lip->yytoklen= length;
302
301
 
303
302
  lip->m_cpp_text_start= lip->get_cpp_tok_start() + skip;
304
 
  lip->m_cpp_text_end= lip->m_cpp_text_start + tmp.length;
 
303
  lip->m_cpp_text_end= lip->m_cpp_text_start + tmp.size();
305
304
 
306
305
  return tmp;
307
306
}
318
317
{
319
318
  lex_string_t tmp;
320
319
  lip->yyUnget();                       // ptr points now after last token char
321
 
  tmp.length= lip->yytoklen=length;
322
 
  tmp.str=(char*) lip->m_session->mem.alloc(tmp.length+1);
 
320
  tmp.str=(char*) lip->m_session->mem.alloc(length + 1);
 
321
  tmp.length= lip->yytoklen= length;
323
322
  const char* from= lip->get_tok_start() + skip;
324
323
  char* to= (char*)tmp.str;
325
324
  const char* end= to+length;
346
345
*/
347
346
static char *get_text(Lex_input_stream *lip, int pre_skip, int post_skip)
348
347
{
349
 
  unsigned char c,sep;
350
348
  bool found_escape= false;
351
 
  const charset_info_st * const cs= lip->m_session->charset();
 
349
  const charset_info_st* const cs= lip->m_session->charset();
352
350
 
353
351
  lip->tok_bitmap= 0;
354
 
  sep= lip->yyGetLast();                        // String should end with this
355
 
  while (! lip->eof())
 
352
  unsigned char sep= lip->yyGetLast();                        // String should end with this
 
353
  while (not lip->eof())
356
354
  {
357
 
    c= lip->yyGet();
 
355
    unsigned char c= lip->yyGet();
358
356
    lip->tok_bitmap|= c;
359
357
    {
360
358
      if (use_mb(cs))
657
655
    case MY_LEX_ESCAPE:
658
656
      if (lip->yyGet() == 'N')
659
657
      {                                 // Allow \N as shortcut for NULL
660
 
        yylval->lex_str.str=(char*) "\\N";
661
 
        yylval->lex_str.length=2;
 
658
        yylval->lex_str.assign("\\N", 2);
662
659
        return NULL_SYM;
663
660
      }
664
661
    case MY_LEX_CHAR:                   // Unknown or single char token
766
763
      return(result_state);                     // IDENT or IDENT_QUOTED
767
764
 
768
765
    case MY_LEX_IDENT_SEP:              // Found ident and now '.'
769
 
      yylval->lex_str.str= (char*) lip->get_ptr();
770
 
      yylval->lex_str.length= 1;
 
766
      yylval->lex_str.assign(lip->get_ptr(), 1);
771
767
      c= lip->yyGet();                  // should be '.'
772
768
      lip->next_state= MY_LEX_IDENT_START;// Next is an ident (not a keyword)
773
769
      if (!ident_map[(uint8_t)lip->yyPeek()])            // Probably ` or "
900
896
      if (c != '.')
901
897
      {                                 // Found complete integer number.
902
898
        yylval->lex_str=get_token(lip, 0, lip->yyLength());
903
 
        return int_token(yylval->lex_str.str,yylval->lex_str.length);
 
899
        return int_token(yylval->lex_str.data(), yylval->lex_str.size());
904
900
      }
905
901
      // fall through
906
902
    case MY_LEX_REAL:                   // Incomplete real number
1001
997
        state= MY_LEX_CHAR;             // Read char by char
1002
998
        break;
1003
999
      }
1004
 
      yylval->lex_str.length=lip->yytoklen;
 
1000
      yylval->lex_str.length= lip->yytoklen;
1005
1001
 
1006
1002
      lip->body_utf8_append(lip->m_cpp_text_start);
1007
1003
 
1195
1191
        lip->next_state=MY_LEX_HOSTNAME;
1196
1192
        break;
1197
1193
      }
1198
 
      yylval->lex_str.str=(char*) lip->get_ptr();
1199
 
      yylval->lex_str.length=1;
1200
 
      return((int) '@');
 
1194
      yylval->lex_str.assign(lip->get_ptr(), 1);
 
1195
      return '@';
1201
1196
 
1202
1197
    case MY_LEX_HOSTNAME:               // end '@' of user@hostname
1203
1198
      for (c=lip->yyGet() ;
1207
1202
      return(LEX_HOSTNAME);
1208
1203
 
1209
1204
    case MY_LEX_SYSTEM_VAR:
1210
 
      yylval->lex_str.str=(char*) lip->get_ptr();
1211
 
      yylval->lex_str.length=1;
 
1205
      yylval->lex_str.assign(lip->get_ptr(), 1);
1212
1206
      lip->yySkip();                                    // Skip '@'
1213
1207
      lip->next_state= (state_map[(uint8_t)lip->yyPeek()] ==
1214
1208
                        MY_LEX_USER_VARIABLE_DELIMITER ?