~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to sql/sql_lex.h

  • Committer: Monty Taylor
  • Date: 2008-07-05 11:20:18 UTC
  • mto: This revision was merged to the branch mainline in revision 62.
  • Revision ID: monty@inaugust.com-20080705112018-fr12kkmgphtu7m29
Changes so that removal of duplicate curr_dir from my_sys.h work.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
 
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
 
 *
4
 
 *  Copyright (C) 2008 Sun Microsystems
5
 
 *
6
 
 *  This program is free software; you can redistribute it and/or modify
7
 
 *  it under the terms of the GNU General Public License as published by
8
 
 *  the Free Software Foundation; version 2 of the License.
9
 
 *
10
 
 *  This program is distributed in the hope that it will be useful,
11
 
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 
 *  GNU General Public License for more details.
14
 
 *
15
 
 *  You should have received a copy of the GNU General Public License
16
 
 *  along with this program; if not, write to the Free Software
17
 
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
 
 */
19
 
 
20
 
#ifndef DRIZZLE_SERVER_SQL_LEX_H
21
 
#define DRIZZLE_SERVER_SQL_LEX_H
 
1
/* Copyright (C) 2000-2006 MySQL AB
 
2
 
 
3
   This program is free software; you can redistribute it and/or modify
 
4
   it under the terms of the GNU General Public License as published by
 
5
   the Free Software Foundation; version 2 of the License.
 
6
 
 
7
   This program is distributed in the hope that it will be useful,
 
8
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
9
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
10
   GNU General Public License for more details.
 
11
 
 
12
   You should have received a copy of the GNU General Public License
 
13
   along with this program; if not, write to the Free Software
 
14
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
22
15
 
23
16
/**
24
17
  @defgroup Semantic_Analysis Semantic Analysis
25
18
*/
26
19
 
27
 
#include "sql_udf.h"
28
 
 
29
20
/* YACC and LEX Definitions */
30
21
 
31
22
/* These may not be declared yet */
32
23
class Table_ident;
33
24
class sql_exchange;
34
25
class LEX_COLUMN;
 
26
class st_alter_tablespace;
35
27
 
36
 
#ifdef DRIZZLE_SERVER
 
28
#ifdef MYSQL_SERVER
37
29
/*
38
30
  The following hack is needed because mysql_yacc.cc does not define
39
31
  YYSTYPE before including this file
41
33
 
42
34
#include "set_var.h"
43
35
 
44
 
#ifdef DRIZZLE_YACC
 
36
#ifdef MYSQL_YACC
45
37
#define LEX_YYSTYPE void *
46
38
#else
47
 
#if defined(DRIZZLE_LEX)
 
39
#if MYSQL_LEX
48
40
#include "lex_symbol.h"
49
41
#include "sql_yacc.h"
50
42
#define LEX_YYSTYPE YYSTYPE *
72
64
  SQLCOM_SHOW_KEYS, SQLCOM_SHOW_VARIABLES, SQLCOM_SHOW_STATUS,
73
65
  SQLCOM_SHOW_ENGINE_LOGS, SQLCOM_SHOW_ENGINE_STATUS, SQLCOM_SHOW_ENGINE_MUTEX,
74
66
  SQLCOM_SHOW_PROCESSLIST, SQLCOM_SHOW_MASTER_STAT, SQLCOM_SHOW_SLAVE_STAT,
75
 
  SQLCOM_SHOW_CREATE,
76
 
  SQLCOM_SHOW_CREATE_DB,
77
 
  SQLCOM_SHOW_TABLE_STATUS,
 
67
  SQLCOM_SHOW_CREATE, SQLCOM_SHOW_CHARSETS,
 
68
  SQLCOM_SHOW_COLLATIONS, SQLCOM_SHOW_CREATE_DB, SQLCOM_SHOW_TABLE_STATUS,
78
69
  SQLCOM_LOAD,SQLCOM_SET_OPTION,SQLCOM_LOCK_TABLES,SQLCOM_UNLOCK_TABLES,
79
70
  SQLCOM_CHANGE_DB, SQLCOM_CREATE_DB, SQLCOM_DROP_DB, SQLCOM_ALTER_DB,
80
71
  SQLCOM_REPAIR, SQLCOM_REPLACE, SQLCOM_REPLACE_SELECT,
81
72
  SQLCOM_OPTIMIZE, SQLCOM_CHECK,
82
 
  SQLCOM_ASSIGN_TO_KEYCACHE,
 
73
  SQLCOM_ASSIGN_TO_KEYCACHE, SQLCOM_PRELOAD_KEYS,
83
74
  SQLCOM_FLUSH, SQLCOM_KILL, SQLCOM_ANALYZE,
84
75
  SQLCOM_ROLLBACK, SQLCOM_ROLLBACK_TO_SAVEPOINT,
85
76
  SQLCOM_COMMIT, SQLCOM_SAVEPOINT, SQLCOM_RELEASE_SAVEPOINT,
88
79
  SQLCOM_RENAME_TABLE,  
89
80
  SQLCOM_RESET, SQLCOM_PURGE, SQLCOM_PURGE_BEFORE, SQLCOM_SHOW_BINLOGS,
90
81
  SQLCOM_SHOW_OPEN_TABLES,
91
 
  SQLCOM_DELETE_MULTI, SQLCOM_UPDATE_MULTI,
92
 
  SQLCOM_SHOW_WARNS,
93
 
  SQLCOM_EMPTY_QUERY,
94
 
  SQLCOM_SHOW_ERRORS,
 
82
  SQLCOM_SHOW_SLAVE_HOSTS, SQLCOM_DELETE_MULTI, SQLCOM_UPDATE_MULTI,
 
83
  SQLCOM_SHOW_BINLOG_EVENTS,
 
84
  SQLCOM_SHOW_WARNS, SQLCOM_EMPTY_QUERY, SQLCOM_SHOW_ERRORS,
95
85
  SQLCOM_CHECKSUM,
 
86
  SQLCOM_ALTER_TABLESPACE,
96
87
  SQLCOM_BINLOG_BASE64_EVENT,
97
88
  SQLCOM_SHOW_PLUGINS,
 
89
  SQLCOM_ALTER_DB_UPGRADE,
98
90
  /*
99
91
    When a command is added here, be sure it's also added in mysqld.cc
100
92
    in "struct show_var_st status_vars[]= {" ...
107
99
#define DESCRIBE_NORMAL         1
108
100
#define DESCRIBE_EXTENDED       2
109
101
 
110
 
#ifdef DRIZZLE_SERVER
 
102
#ifdef MYSQL_SERVER
 
103
 
 
104
enum enum_sp_data_access
 
105
{
 
106
  SP_DEFAULT_ACCESS= 0,
 
107
  SP_CONTAINS_SQL,
 
108
  SP_NO_SQL,
 
109
  SP_READS_SQL_DATA,
 
110
  SP_MODIFIES_SQL_DATA
 
111
};
 
112
 
 
113
const LEX_STRING sp_data_access_name[]=
 
114
{
 
115
  { C_STRING_WITH_LEN("") },
 
116
  { C_STRING_WITH_LEN("CONTAINS SQL") },
 
117
  { C_STRING_WITH_LEN("NO SQL") },
 
118
  { C_STRING_WITH_LEN("READS SQL DATA") },
 
119
  { C_STRING_WITH_LEN("MODIFIES SQL DATA") }
 
120
};
111
121
 
112
122
#define DERIVED_NONE    0
113
123
#define DERIVED_SUBQUERY        1
114
124
 
 
125
enum enum_drop_mode
 
126
{
 
127
  DROP_DEFAULT, // mode is not specified
 
128
  DROP_CASCADE, // CASCADE option
 
129
  DROP_RESTRICT // RESTRICT option
 
130
};
 
131
 
115
132
typedef List<Item> List_item;
116
133
 
117
134
/* SERVERS CACHE CHANGES */
118
135
typedef struct st_lex_server_options
119
136
{
120
 
  int32_t port;
121
 
  uint32_t server_name_length;
122
 
  char *server_name, *host, *db, *username, *password, *scheme, *owner;
 
137
  long port;
 
138
  uint server_name_length;
 
139
  char *server_name, *host, *db, *username, *password, *scheme, *socket, *owner;
123
140
} LEX_SERVER_OPTIONS;
124
141
 
125
142
typedef struct st_lex_master_info
126
143
{
127
144
  char *host, *user, *password, *log_file_name;
128
 
  uint32_t port, connect_retry;
 
145
  uint port, connect_retry;
129
146
  float heartbeat_period;
130
 
  uint64_t pos;
131
 
  uint32_t server_id;
 
147
  ulonglong pos;
 
148
  ulong server_id;
132
149
  /*
133
150
    Enum is used for making it possible to detect if the user
134
151
    changed variable or if it should be left at old value
135
152
   */
136
 
  enum {LEX_MI_UNCHANGED, LEX_MI_DISABLE, LEX_MI_ENABLE} heartbeat_opt;
 
153
  enum {LEX_MI_UNCHANGED, LEX_MI_DISABLE, LEX_MI_ENABLE}
 
154
    ssl, ssl_verify_server_cert, heartbeat_opt;
 
155
  char *ssl_key, *ssl_cert, *ssl_ca, *ssl_capath, *ssl_cipher;
137
156
  char *relay_log_name;
138
 
  uint32_t relay_log_pos;
 
157
  ulong relay_log_pos;
139
158
} LEX_MASTER_INFO;
140
159
 
141
160
 
160
179
  Keep in sync with index_hint_type.
161
180
*/
162
181
extern const char * index_hint_type_name[];
163
 
typedef unsigned char index_clause_map;
 
182
typedef uchar index_clause_map;
164
183
 
165
184
/*
166
185
  Bits in index_clause_map : one for each possible FOR clause in
188
207
  LEX_STRING key_name;
189
208
 
190
209
  Index_hint (enum index_hint_type type_arg, index_clause_map clause_arg,
191
 
              char *str, uint32_t length) :
 
210
              char *str, uint length) :
192
211
    type(type_arg), clause(clause_arg)
193
212
  {
194
213
    key_name.str= str;
326
345
    *link_next, **link_prev;          /* list of whole SELECT_LEX */
327
346
public:
328
347
 
329
 
  uint64_t options;
 
348
  ulonglong options;
330
349
 
331
350
  /*
332
351
    result of this query can't be cached, bit field, can be :
336
355
      UNCACHEABLE_EXPLAIN
337
356
      UNCACHEABLE_PREPARE
338
357
  */
339
 
  uint8_t uncacheable;
 
358
  uint8 uncacheable;
340
359
  enum sub_select_type linkage;
341
360
  bool no_table_names_allowed; /* used for global order by */
342
361
  bool no_error; /* suppress error message (convert it to warnings) */
346
365
    return sql_alloc(size);
347
366
  }
348
367
  static void *operator new(size_t size, MEM_ROOT *mem_root)
349
 
  { return (void*) alloc_root(mem_root, (uint32_t) size); }
350
 
  static void operator delete(void *ptr __attribute__((unused)),
351
 
                              size_t size __attribute__((unused)))
352
 
  { TRASH(ptr, size); }
353
 
  static void operator delete(void *ptr __attribute__((unused)),
354
 
                              MEM_ROOT *mem_root __attribute__((unused)))
355
 
  {}
 
368
  { return (void*) alloc_root(mem_root, (uint) size); }
 
369
  static void operator delete(void *ptr,size_t size) { TRASH(ptr, size); }
 
370
  static void operator delete(void *ptr, MEM_ROOT *mem_root) {}
356
371
  st_select_lex_node(): linkage(UNSPECIFIED_TYPE) {}
357
372
  virtual ~st_select_lex_node() {}
358
373
  inline st_select_lex_node* get_master() { return master; }
370
385
 
371
386
  virtual bool set_braces(bool value);
372
387
  virtual bool inc_in_sum_expr();
373
 
  virtual uint32_t get_in_sum_expr();
374
 
  virtual TableList* get_table_list();
 
388
  virtual uint get_in_sum_expr();
 
389
  virtual TABLE_LIST* get_table_list();
375
390
  virtual List<Item>* get_item_list();
376
 
  virtual uint32_t get_table_join_options();
377
 
  virtual TableList *add_table_to_list(THD *thd, Table_ident *table,
378
 
                                        LEX_STRING *alias,
379
 
                                        uint32_t table_options,
380
 
                                        thr_lock_type flags= TL_UNLOCK,
381
 
                                        List<Index_hint> *hints= 0,
 
391
  virtual ulong get_table_join_options();
 
392
  virtual TABLE_LIST *add_table_to_list(THD *thd, Table_ident *table,
 
393
                                        LEX_STRING *alias,
 
394
                                        ulong table_options,
 
395
                                        thr_lock_type flags= TL_UNLOCK,
 
396
                                        List<Index_hint> *hints= 0,
382
397
                                        LEX_STRING *option= 0);
383
 
  virtual void set_lock_for_tables(thr_lock_type lock_type __attribute__((unused)))
384
 
  {}
 
398
  virtual void set_lock_for_tables(thr_lock_type lock_type) {}
385
399
 
386
400
  friend class st_select_lex_unit;
387
401
  friend bool mysql_new_select(struct st_lex *lex, bool move_down);
400
414
class select_union;
401
415
class st_select_lex_unit: public st_select_lex_node {
402
416
protected:
403
 
  TableList result_table_list;
 
417
  TABLE_LIST result_table_list;
404
418
  select_union *union_result;
405
 
  Table *table; /* temporary table using for appending UNION results */
 
419
  TABLE *table; /* temporary table using for appending UNION results */
406
420
 
407
421
  select_result *result;
408
 
  uint64_t found_rows_for_union;
 
422
  ulonglong found_rows_for_union;
409
423
  bool saved_error;
410
424
 
411
425
public:
455
469
  st_select_lex* outer_select();
456
470
  st_select_lex* first_select()
457
471
  {
458
 
    return reinterpret_cast<st_select_lex*>(slave);
 
472
    return my_reinterpret_cast(st_select_lex*)(slave);
459
473
  }
460
474
  st_select_lex_unit* next_unit()
461
475
  {
462
 
    return reinterpret_cast<st_select_lex_unit*>(next);
 
476
    return my_reinterpret_cast(st_select_lex_unit*)(next);
463
477
  }
464
478
  st_select_lex* return_after_parsing() { return return_to; }
465
479
  void exclude_level();
466
480
  void exclude_tree();
467
481
 
468
482
  /* UNION methods */
469
 
  bool prepare(THD *thd, select_result *result, uint32_t additional_options);
 
483
  bool prepare(THD *thd, select_result *result, ulong additional_options);
470
484
  bool exec();
471
485
  bool cleanup();
472
486
  inline void unclean() { cleaned= 0; }
499
513
  Name_resolution_context context;
500
514
  char *db;
501
515
  Item *where, *having;                         /* WHERE & HAVING clauses */
 
516
  Item *prep_where; /* saved WHERE clause for prepared statement processing */
 
517
  Item *prep_having;/* saved HAVING clause for prepared statement processing */
502
518
  /* Saved values of the WHERE and HAVING clauses*/
503
519
  Item::cond_result cond_value, having_value;
504
520
  /* point on lex in which it was created, used in view subquery detection */
505
521
  st_lex *parent_lex;
506
522
  enum olap_type olap;
507
 
  /* FROM clause - points to the beginning of the TableList::next_local list. */
 
523
  /* FROM clause - points to the beginning of the TABLE_LIST::next_local list. */
508
524
  SQL_LIST            table_list;
509
525
  SQL_LIST            group_list; /* GROUP BY clause. */
510
526
  List<Item>          item_list;  /* list of fields & expressions */
517
533
  List<Item_real_func> *ftfunc_list;
518
534
  List<Item_real_func> ftfunc_list_alloc;
519
535
  JOIN *join; /* after JOIN::prepare it is pointer to corresponding JOIN */
520
 
  List<TableList> top_join_list; /* join list of the top level          */
521
 
  List<TableList> *join_list;    /* list for the currently parsed join  */
522
 
  TableList *embedding;          /* table embedding to the above list   */
523
 
  List<TableList> sj_nests;
 
536
  List<TABLE_LIST> top_join_list; /* join list of the top level          */
 
537
  List<TABLE_LIST> *join_list;    /* list for the currently parsed join  */
 
538
  TABLE_LIST *embedding;          /* table embedding to the above list   */
 
539
  List<TABLE_LIST> sj_nests;
524
540
  /*
525
541
    Beginning of the list of leaves in a FROM clause, where the leaves
526
542
    inlcude all base tables including view tables. The tables are connected
527
 
    by TableList::next_leaf, so leaf_tables points to the left-most leaf.
 
543
    by TABLE_LIST::next_leaf, so leaf_tables points to the left-most leaf.
528
544
  */
529
 
  TableList *leaf_tables;
 
545
  TABLE_LIST *leaf_tables;
530
546
  const char *type;               /* type of select for EXPLAIN          */
531
547
 
532
548
  SQL_LIST order_list;                /* ORDER clause */
540
556
    bigger then can be number of entries that will be added to all item
541
557
    list during split_sum_func
542
558
  */
543
 
  uint32_t select_n_having_items;
544
 
  uint32_t cond_count;    /* number of arguments of and/or/xor in where/having/on */
545
 
  uint32_t between_count; /* number of between predicates in where/having/on      */
546
 
  uint32_t max_equal_elems; /* maximal number of elements in multiple equalities  */   
 
559
  uint select_n_having_items;
 
560
  uint cond_count;    /* number of arguments of and/or/xor in where/having/on */
 
561
  uint between_count; /* number of between predicates in where/having/on      */
 
562
  uint max_equal_elems; /* maximal number of elements in multiple equalities  */   
547
563
  /*
548
564
    Number of fields used in select list or where clause of current select
549
565
    and all inner subselects.
550
566
  */
551
 
  uint32_t select_n_where_fields;
 
567
  uint select_n_where_fields;
552
568
  enum_parsing_place parsing_place; /* where we are parsing expression */
553
569
  bool with_sum_func;   /* sum function indicator */
554
570
  /* 
557
573
  */
558
574
  bool conds_processed_with_permanent_arena;
559
575
 
560
 
  uint32_t table_join_options;
561
 
  uint32_t in_sum_expr;
562
 
  uint32_t select_number; /* number of select (used for EXPLAIN) */
 
576
  ulong table_join_options;
 
577
  uint in_sum_expr;
 
578
  uint select_number; /* number of select (used for EXPLAIN) */
563
579
  int nest_level;     /* nesting level of select */
564
580
  Item_sum *inner_sum_func_list; /* list of sum func in nested selects */ 
565
 
  uint32_t with_wild; /* item list contain '*' */
 
581
  uint with_wild; /* item list contain '*' */
566
582
  bool  braces;         /* SELECT ... UNION (SELECT ... ) <- this braces */
567
 
  /* true when having fix field called in processing of this SELECT */
 
583
  /* TRUE when having fix field called in processing of this SELECT */
568
584
  bool having_fix_field;
569
585
  /* List of references to fields referenced from inner selects */
570
586
  List<Item_outer_ref> inner_refs_list;
571
587
  /* Number of Item_sum-derived objects in this SELECT */
572
 
  uint32_t n_sum_items;
 
588
  uint n_sum_items;
573
589
  /* Number of Item_sum-derived objects in children and descendant SELECTs */
574
 
  uint32_t n_child_sum_items;
 
590
  uint n_child_sum_items;
575
591
 
576
592
  /* explicit LIMIT clause was used */
577
593
  bool explicit_limit;
580
596
    query processing end even if we use temporary table
581
597
  */
582
598
  bool subquery_in_having;
583
 
  /* true <=> this SELECT is correlated w.r.t. some ancestor select */
 
599
  /* TRUE <=> this SELECT is correlated w.r.t. some ancestor select */
584
600
  bool is_correlated;
 
601
  /*
 
602
    This variable is required to ensure proper work of subqueries and
 
603
    stored procedures. Generally, one should use the states of
 
604
    Query_arena to determine if it's a statement prepare or first
 
605
    execution of a stored procedure. However, in case when there was an
 
606
    error during the first execution of a stored procedure, the SP body
 
607
    is not expelled from the SP cache. Therefore, a deeply nested
 
608
    subquery might be left unoptimized. So we need this per-subquery
 
609
    variable to inidicate the optimization/execution state of every
 
610
    subquery. Prepared statements work OK in that regard, as in
 
611
    case of an error during prepare the PS is not created.
 
612
  */
 
613
  bool first_execution;
 
614
  bool first_cond_optimization;
 
615
  /* do not wrap view fields with Item_ref */
 
616
  bool no_wrap_view_item;
585
617
  /* exclude this select from check of unique_table() */
586
618
  bool exclude_from_table_unique_test;
587
619
  /* List of fields that aren't under an aggregate function */
593
625
  /* 
594
626
    This is a copy of the original JOIN USING list that comes from
595
627
    the parser. The parser :
596
 
      1. Sets the natural_join of the second TableList in the join
 
628
      1. Sets the natural_join of the second TABLE_LIST in the join
597
629
         and the st_select_lex::prev_join_using.
598
 
      2. Makes a parent TableList and sets its is_natural_join/
 
630
      2. Makes a parent TABLE_LIST and sets its is_natural_join/
599
631
       join_using_fields members.
600
 
      3. Uses the wrapper TableList as a table in the upper level.
 
632
      3. Uses the wrapper TABLE_LIST as a table in the upper level.
601
633
    We cannot assign directly to join_using_fields in the parser because
602
 
    at stage (1.) the parent TableList is not constructed yet and
 
634
    at stage (1.) the parent TABLE_LIST is not constructed yet and
603
635
    the assignment will override the JOIN USING fields of the lower level
604
636
    joins on the right.
605
637
  */
613
645
      1 - aggregate functions are used in this select,
614
646
          defined as SUM_FUNC_USED.
615
647
  */
616
 
  uint8_t full_group_by_flag;
 
648
  uint8 full_group_by_flag;
617
649
  void init_query();
618
650
  void init_select();
619
651
  st_select_lex_unit* master_unit();
640
672
 
641
673
  bool set_braces(bool value);
642
674
  bool inc_in_sum_expr();
643
 
  uint32_t get_in_sum_expr();
 
675
  uint get_in_sum_expr();
644
676
 
645
677
  bool add_item_to_list(THD *thd, Item *item);
646
678
  bool add_group_to_list(THD *thd, Item *item, bool asc);
647
679
  bool add_order_to_list(THD *thd, Item *item, bool asc);
648
 
  TableList* add_table_to_list(THD *thd, Table_ident *table,
 
680
  TABLE_LIST* add_table_to_list(THD *thd, Table_ident *table,
649
681
                                LEX_STRING *alias,
650
 
                                uint32_t table_options,
 
682
                                ulong table_options,
651
683
                                thr_lock_type flags= TL_UNLOCK,
652
684
                                List<Index_hint> *hints= 0,
653
685
                                LEX_STRING *option= 0);
654
 
  TableList* get_table_list();
 
686
  TABLE_LIST* get_table_list();
655
687
  bool init_nested_join(THD *thd);
656
 
  TableList *end_nested_join(THD *thd);
657
 
  TableList *nest_last_join(THD *thd);
658
 
  void add_joined_table(TableList *table);
659
 
  TableList *convert_right_join();
 
688
  TABLE_LIST *end_nested_join(THD *thd);
 
689
  TABLE_LIST *nest_last_join(THD *thd);
 
690
  void add_joined_table(TABLE_LIST *table);
 
691
  TABLE_LIST *convert_right_join();
660
692
  List<Item>* get_item_list();
661
 
  uint32_t get_table_join_options();
 
693
  ulong get_table_join_options();
662
694
  void set_lock_for_tables(thr_lock_type lock_type);
663
695
  inline void init_order()
664
696
  {
665
697
    order_list.elements= 0;
666
698
    order_list.first= 0;
667
 
    order_list.next= (unsigned char**) &order_list.first;
 
699
    order_list.next= (uchar**) &order_list.first;
668
700
  }
669
701
  /*
670
702
    This method created for reiniting LEX in mysql_admin_table() and can be
682
714
    init_query();
683
715
    init_select();
684
716
  }
685
 
  bool setup_ref_array(THD *thd, uint32_t order_group_num);
 
717
  bool setup_ref_array(THD *thd, uint order_group_num);
686
718
  void print(THD *thd, String *str, enum_query_type query_type);
687
719
  static void print_order(String *str,
688
 
                          order_st *order,
 
720
                          ORDER *order,
689
721
                          enum_query_type query_type);
690
722
  void print_limit(THD *thd, String *str, enum_query_type query_type);
691
723
  void fix_prepare_information(THD *thd, Item **conds, Item **having_conds);
706
738
   Add a index hint to the tagged list of hints. The type and clause of the
707
739
   hint will be the current ones (set by set_index_hint()) 
708
740
  */
709
 
  bool add_index_hint (THD *thd, char *str, uint32_t length);
 
741
  bool add_index_hint (THD *thd, char *str, uint length);
710
742
 
711
743
  /* make a list to hold index hints */
712
744
  void alloc_index_hints (THD *thd);
757
789
#define ALTER_FOREIGN_KEY         (1L << 31)
758
790
 
759
791
/**
760
 
  @brief Parsing data for CREATE or ALTER Table.
 
792
  @brief Parsing data for CREATE or ALTER TABLE.
761
793
 
762
794
  This structure contains a list of columns or indexes to be created,
763
795
  altered or dropped.
770
802
  List<Alter_column>            alter_list;
771
803
  List<Key>                     key_list;
772
804
  List<Create_field>            create_list;
773
 
  uint32_t                          flags;
 
805
  uint                          flags;
774
806
  enum enum_enable_or_disable   keys_onoff;
775
807
  enum tablespace_op_type       tablespace_op;
776
 
  uint32_t                          no_parts;
 
808
  uint                          no_parts;
777
809
  enum ha_build_method          build_method;
778
810
  Create_field                 *datetime_field;
779
811
  bool                          error_if_not_empty;
786
818
    no_parts(0),
787
819
    build_method(HA_BUILD_DEFAULT),
788
820
    datetime_field(NULL),
789
 
    error_if_not_empty(false)
 
821
    error_if_not_empty(FALSE)
790
822
  {}
791
823
 
792
824
  void reset()
801
833
    no_parts= 0;
802
834
    build_method= HA_BUILD_DEFAULT;
803
835
    datetime_field= 0;
804
 
    error_if_not_empty= false;
 
836
    error_if_not_empty= FALSE;
805
837
  }
806
838
  Alter_info(const Alter_info &rhs, MEM_ROOT *mem_root);
807
839
private:
830
862
{
831
863
public:
832
864
  /* Global list of all tables used by this statement */
833
 
  TableList *query_tables;
 
865
  TABLE_LIST *query_tables;
834
866
  /* Pointer to next_global member of last element in the previous list. */
835
 
  TableList **query_tables_last;
 
867
  TABLE_LIST **query_tables_last;
836
868
  /*
837
869
    If non-0 then indicates that query requires prelocking and points to
838
870
    next_global member of last own element in query table list (i.e. last
839
871
    table which was not added to it as part of preparation to prelocking).
840
872
    0 - indicates that this query does not need prelocking.
841
873
  */
842
 
  TableList **query_tables_own_last;
 
874
  TABLE_LIST **query_tables_own_last;
843
875
  /*
844
876
    Set of stored routines called by statement.
845
877
    (Note that we use lazy-initialization for this hash).
856
888
    in which it was right after query parsing.
857
889
  */
858
890
  SQL_LIST sroutines_list;
859
 
  unsigned char    **sroutines_list_own_last;
860
 
  uint32_t     sroutines_list_own_elements;
 
891
  uchar    **sroutines_list_own_last;
 
892
  uint     sroutines_list_own_elements;
861
893
 
862
894
  /*
863
895
    These constructor and destructor serve for creation/destruction
879
911
    If you are using this function, you must ensure that the table
880
912
    object, in particular table->db member, is initialized.
881
913
  */
882
 
  void add_to_query_tables(TableList *table)
 
914
  void add_to_query_tables(TABLE_LIST *table)
883
915
  {
884
916
    *(table->prev_global= query_tables_last)= table;
885
917
    query_tables_last= &table->next_global;
886
918
  }
887
919
  /* Return pointer to first not-own table in query-tables or 0 */
888
 
  TableList* first_not_own_table()
 
920
  TABLE_LIST* first_not_own_table()
889
921
  {
890
922
    return ( query_tables_own_last ? *query_tables_own_last : 0);
891
923
  }
939
971
    a reliable binlog/replication, or if we will use stored functions
940
972
    or triggers which themselves need require row-based binlogging.
941
973
  */
942
 
  uint32_t binlog_stmt_flags;
 
974
  uint32 binlog_stmt_flags;
943
975
};
944
976
 
945
977
 
1207
1239
  }
1208
1240
 
1209
1241
  /** Get the length of the current token, in the raw buffer. */
1210
 
  uint32_t yyLength()
 
1242
  uint yyLength()
1211
1243
  {
1212
1244
    /*
1213
1245
      The assumption is that the lexical analyser is always 1 character ahead,
1214
1246
      which the -1 account for.
1215
1247
    */
1216
 
    assert(m_ptr > m_tok_start);
1217
 
    return (uint32_t) ((m_ptr - m_tok_start) - 1);
 
1248
    DBUG_ASSERT(m_ptr > m_tok_start);
 
1249
    return (uint) ((m_ptr - m_tok_start) - 1);
1218
1250
  }
1219
1251
 
1220
1252
  /** Get the utf8-body string. */
1224
1256
  }
1225
1257
 
1226
1258
  /** Get the utf8-body length. */
1227
 
  uint32_t get_body_utf8_length()
 
1259
  uint get_body_utf8_length()
1228
1260
  {
1229
1261
    return m_body_utf8_ptr - m_body_utf8;
1230
1262
  }
1234
1266
  void body_utf8_append(const char *ptr, const char *end_ptr);
1235
1267
  void body_utf8_append_literal(THD *thd,
1236
1268
                                const LEX_STRING *txt,
1237
 
                                const CHARSET_INFO * const txt_cs,
 
1269
                                CHARSET_INFO *txt_cs,
1238
1270
                                const char *end_ptr);
1239
1271
 
1240
1272
  /** Current thread. */
1241
1273
  THD *m_thd;
1242
1274
 
1243
1275
  /** Current line number. */
1244
 
  uint32_t yylineno;
 
1276
  uint yylineno;
1245
1277
 
1246
1278
  /** Length of the last token parsed. */
1247
 
  uint32_t yytoklen;
 
1279
  uint yytoklen;
1248
1280
 
1249
1281
  /** Interface with bison, value of the last token parsed. */
1250
1282
  LEX_YYSTYPE yylval;
1275
1307
  const char *m_buf;
1276
1308
 
1277
1309
  /** Length of the raw buffer. */
1278
 
  uint32_t m_buf_length;
 
1310
  uint m_buf_length;
1279
1311
 
1280
1312
  /** Echo the parsed stream to the pre-processed buffer. */
1281
1313
  bool m_echo;
1328
1360
  const char *found_semicolon;
1329
1361
 
1330
1362
  /** Token character bitmaps, to detect 7bit strings. */
1331
 
  unsigned char tok_bitmap;
 
1363
  uchar tok_bitmap;
1332
1364
 
1333
1365
  /** SQL_MODE = IGNORE_SPACE. */
1334
1366
  bool ignore_space;
1335
1367
 
 
1368
  /**
 
1369
    TRUE if we're parsing a prepared statement: in this mode
 
1370
    we should allow placeholders and disallow multi-statements.
 
1371
  */
 
1372
  bool stmt_prepare_mode;
 
1373
 
1336
1374
  /** State of the lexical analyser for comments. */
1337
1375
  enum_comment_state in_comment;
1338
1376
 
1357
1395
 
1358
1396
    NOTE: this member must be used within MYSQLlex() function only.
1359
1397
  */
1360
 
  const CHARSET_INFO *m_underscore_cs;
 
1398
  CHARSET_INFO *m_underscore_cs;
1361
1399
};
1362
1400
 
1363
1401
 
1375
1413
  char *length,*dec,*change;
1376
1414
  LEX_STRING name;
1377
1415
  char *help_arg;
 
1416
  LEX_STRING backup_dir;                                /* For RESTORE/BACKUP */
1378
1417
  char* to_log;                                 /* For PURGE MASTER LOGS TO */
 
1418
  char* x509_subject,*x509_issuer,*ssl_cipher;
1379
1419
  String *wild;
1380
1420
  sql_exchange *exchange;
1381
1421
  select_result *result;
1382
1422
  Item *default_value, *on_update_value;
1383
1423
  LEX_STRING comment, ident;
1384
1424
  XID *xid;
1385
 
  unsigned char* yacc_yyss, *yacc_yyvs;
 
1425
  uchar* yacc_yyss, *yacc_yyvs;
1386
1426
  THD *thd;
1387
 
  virtual_column_info *vcol_info;
1388
1427
 
1389
1428
  /* maintain a list of used plugins for this LEX */
1390
1429
  DYNAMIC_ARRAY plugins;
1391
1430
  plugin_ref plugins_static_buffer[INITIAL_LEX_PLUGIN_LIST_SIZE];
1392
1431
 
1393
 
  const CHARSET_INFO *charset;
 
1432
  CHARSET_INFO *charset;
1394
1433
  bool text_string_is_7bit;
1395
1434
  /* store original leaf_tables for INSERT SELECT and PS/SP */
1396
 
  TableList *leaf_tables_insert;
 
1435
  TABLE_LIST *leaf_tables_insert;
1397
1436
 
1398
1437
  List<Key_part_spec> col_list;
1399
1438
  List<Key_part_spec> ref_list;
1400
1439
  List<String>        interval_list;
 
1440
  List<LEX_USER>      users_list;
1401
1441
  List<LEX_COLUMN>    columns;
1402
1442
  List<Item>          *insert_list,field_list,value_list,update_list;
1403
1443
  List<List_item>     many_values;
1404
1444
  List<set_var_base>  var_list;
1405
1445
  List<Item_param>    param_list;
 
1446
  List<LEX_STRING>    view_list; // view list (list of field names in view)
1406
1447
  /*
1407
1448
    A stack of name resolution contexts for the query. This stack is used
1408
1449
    at parse time to set local name resolution contexts for various parts
1428
1469
  KEY_CREATE_INFO key_create_info;
1429
1470
  LEX_MASTER_INFO mi;                           // used by CHANGE MASTER
1430
1471
  LEX_SERVER_OPTIONS server_options;
1431
 
  uint32_t type;
 
1472
  USER_RESOURCES mqh;
 
1473
  ulong type;
1432
1474
  /*
1433
1475
    This variable is used in post-parse stage to declare that sum-functions,
1434
1476
    or functions which have sense only if GROUP BY is present, are allowed.
1447
1489
    syntax error back.
1448
1490
  */
1449
1491
  bool expr_allows_subselect;
1450
 
  /*
1451
 
    A special command "PARSE_VCOL_EXPR" is defined for the parser 
1452
 
    to translate an expression statement of a virtual column \
1453
 
    (stored in the *.frm file as a string) into an Item object.
1454
 
    The following flag is used to prevent other applications to use 
1455
 
    this command.
1456
 
  */
1457
 
  bool parse_vcol_expr;
1458
1492
 
1459
1493
  thr_lock_type lock_option;
1460
1494
  enum enum_duplicates duplicates;
1463
1497
  union {
1464
1498
    enum ha_rkey_function ha_rkey_mode;
1465
1499
    enum xa_option_words xa_opt;
1466
 
    bool lock_transactional;            /* For LOCK Table ... IN ... MODE */
 
1500
    bool lock_transactional;            /* For LOCK TABLE ... IN ... MODE */
1467
1501
  };
1468
1502
  enum enum_var_type option_type;
 
1503
  enum enum_drop_mode drop_mode;
1469
1504
 
1470
 
  uint32_t profile_query_id;
1471
 
  uint32_t profile_options;
 
1505
  uint profile_query_id;
 
1506
  uint profile_options;
 
1507
  enum ha_storage_media storage_type;
1472
1508
  enum column_format_type column_format;
1473
 
  uint32_t which_columns;
 
1509
  uint which_columns;
1474
1510
  enum Foreign_key::fk_match_opt fk_match_option;
1475
1511
  enum Foreign_key::fk_option fk_update_opt;
1476
1512
  enum Foreign_key::fk_option fk_delete_opt;
1477
 
  uint32_t slave_thd_opt, start_transaction_opt;
 
1513
  uint slave_thd_opt, start_transaction_opt;
1478
1514
  int nest_level;
1479
1515
  /*
1480
1516
    In LEX representing update which were transformed to multi-update
1481
1517
    stores total number of tables. For LEX representing multi-delete
1482
1518
    holds number of tables from which we will delete records.
1483
1519
  */
1484
 
  uint32_t table_count;
1485
 
  uint8_t describe;
 
1520
  uint table_count;
 
1521
  uint8 describe;
1486
1522
  /*
1487
1523
    A flag that indicates what kinds of derived tables are present in the
1488
1524
    query (0 if no derived tables, otherwise DERIVED_SUBQUERY).
1489
1525
  */
1490
 
  uint8_t derived_tables;
 
1526
  uint8 derived_tables;
1491
1527
  bool drop_if_exists, drop_temporary, local_file, one_shot_set;
1492
1528
  bool autocommit;
1493
 
  bool verbose;
 
1529
  bool verbose, no_write_to_binlog;
1494
1530
 
1495
1531
  bool tx_chain, tx_release;
 
1532
  /*
 
1533
    Special JOIN::prepare mode: changing of query is prohibited.
 
1534
    When creating a view, we need to just check its syntax omitting
 
1535
    any optimizations: afterwards definition of the view will be
 
1536
    reconstructed by means of ::print() methods and written to
 
1537
    to an .frm file. We need this definition to stay untouched.
 
1538
  */
 
1539
  bool view_prepare_mode;
1496
1540
  bool subqueries, ignore;
1497
1541
  st_parsing_options parsing_options;
1498
1542
  Alter_info alter_info;
1517
1561
    (see Item_field::fix_fields()). 
1518
1562
  */
1519
1563
  bool use_only_table_context;
 
1564
 
 
1565
  /*
 
1566
    Reference to a struct that contains information in various commands
 
1567
    to add/create/drop/change table spaces.
 
1568
  */
 
1569
  st_alter_tablespace *alter_tablespace_info;
1520
1570
  
1521
1571
  bool escape_used;
1522
1572
  bool is_lex_started; /* If lex_start() did run. For debugging. */
1530
1580
    delete_dynamic(&plugins);
1531
1581
  }
1532
1582
 
1533
 
  TableList *unlink_first_table(bool *link_to_local);
1534
 
  void link_first_table_back(TableList *first, bool link_to_local);
 
1583
  TABLE_LIST *unlink_first_table(bool *link_to_local);
 
1584
  void link_first_table_back(TABLE_LIST *first, bool link_to_local);
1535
1585
  void first_lists_tables_same();
1536
1586
 
1537
1587
  bool can_be_merged();
1539
1589
  bool can_not_use_merged();
1540
1590
  bool only_view_structure();
1541
1591
  bool need_correct_ident();
 
1592
  uint8 get_effective_with_check(TABLE_LIST *view);
 
1593
  /*
 
1594
    Is this update command where 'WHITH CHECK OPTION' clause is important
 
1595
 
 
1596
    SYNOPSIS
 
1597
      st_lex::which_check_option_applicable()
 
1598
 
 
1599
    RETURN
 
1600
      TRUE   have to take 'WHITH CHECK OPTION' clause into account
 
1601
      FALSE  'WHITH CHECK OPTION' clause do not need
 
1602
  */
 
1603
  inline bool which_check_option_applicable()
 
1604
  {
 
1605
    switch (sql_command) {
 
1606
    case SQLCOM_UPDATE:
 
1607
    case SQLCOM_UPDATE_MULTI:
 
1608
    case SQLCOM_INSERT:
 
1609
    case SQLCOM_INSERT_SELECT:
 
1610
    case SQLCOM_REPLACE:
 
1611
    case SQLCOM_REPLACE_SELECT:
 
1612
    case SQLCOM_LOAD:
 
1613
      return TRUE;
 
1614
    default:
 
1615
      return FALSE;
 
1616
    }
 
1617
  }
1542
1618
 
1543
1619
  void cleanup_after_one_table_open();
1544
1620
 
1571
1647
  /**
1572
1648
    @brief check if the statement is a single-level join
1573
1649
    @return result of the check
1574
 
      @retval true  The statement doesn't contain subqueries, unions and 
 
1650
      @retval TRUE  The statement doesn't contain subqueries, unions and 
1575
1651
                    stored procedure calls.
1576
 
      @retval false There are subqueries, UNIONs or stored procedure calls.
 
1652
      @retval FALSE There are subqueries, UNIONs or stored procedure calls.
1577
1653
  */
1578
1654
  bool is_single_level_stmt() 
1579
1655
  { 
1584
1660
    */ 
1585
1661
    if (&select_lex == all_selects_list && !sroutines.records)
1586
1662
    {
1587
 
      assert(!all_selects_list->next_select_in_list());
1588
 
      return true;
 
1663
      DBUG_ASSERT(!all_selects_list->next_select_in_list());
 
1664
      return TRUE;
1589
1665
    }
1590
 
    return false;
 
1666
    return FALSE;
1591
1667
  }
1592
1668
} LEX;
1593
1669
 
1599
1675
  }
1600
1676
  static void *operator new(size_t size, MEM_ROOT *mem_root) throw()
1601
1677
  {
1602
 
    return (void*) alloc_root(mem_root, (uint32_t) size);
 
1678
    return (void*) alloc_root(mem_root, (uint) size);
1603
1679
  }
1604
 
  static void operator delete(void *ptr __attribute__((unused)),
1605
 
                              size_t size __attribute__((unused)))
 
1680
  static void operator delete(void *ptr,size_t size)
1606
1681
  { TRASH(ptr, size); }
1607
 
  static void operator delete(void *ptr __attribute__((unused)),
1608
 
                              MEM_ROOT *mem_root __attribute__((unused)))
 
1682
  static void operator delete(void *ptr, MEM_ROOT *mem_root)
1609
1683
  { /* Never called */ }
1610
1684
};
1611
1685
 
1613
1687
extern void lex_free(void);
1614
1688
extern void lex_start(THD *thd);
1615
1689
extern void lex_end(LEX *lex);
 
1690
extern int MYSQLlex(void *arg, void *yythd);
1616
1691
 
1617
 
extern void trim_whitespace(const CHARSET_INFO * const cs, LEX_STRING *str);
 
1692
extern void trim_whitespace(CHARSET_INFO *cs, LEX_STRING *str);
1618
1693
 
1619
1694
extern bool is_lex_native_function(const LEX_STRING *name);
1620
1695
 
1622
1697
  @} (End of group Semantic_Analysis)
1623
1698
*/
1624
1699
 
1625
 
#endif /* DRIZZLE_SERVER */
1626
 
#endif /* DRIZZLE_SERVER_SQL_LEX_H */
 
1700
#endif /* MYSQL_SERVER */