diff options
author | Mats Kindahl <mats@sun.com> | 2010-03-31 16:05:33 +0200 |
---|---|---|
committer | Mats Kindahl <mats@sun.com> | 2010-03-31 16:05:33 +0200 |
commit | e409d6f69c91a9f097802455dd61a2387e16d5f0 (patch) | |
tree | 19f32879e77ada23d733f35173a25f410d655ebe /sql | |
parent | 36430c53f98931028ce318bed7f2834a4ff30195 (diff) | |
download | mariadb-git-e409d6f69c91a9f097802455dd61a2387e16d5f0.tar.gz |
WL#5030: Split and remove mysql_priv.h
This patch:
- Moves all definitions from the mysql_priv.h file into
header files for the component where the variable is
defined
- Creates header files if the component lacks one
- Eliminates all include directives from mysql_priv.h
- Eliminates all circular include cycles
- Rename time.cc to sql_time.cc
- Rename mysql_priv.h to sql_priv.h
Diffstat (limited to 'sql')
245 files changed, 13022 insertions, 3095 deletions
diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 913eb3464e2..31110c5e201 100755 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -66,7 +66,7 @@ SET (SQL_SOURCE sql_repl.cc sql_select.cc sql_show.cc sql_state.c sql_string.cc sql_table.cc sql_test.cc sql_trigger.cc sql_udf.cc sql_union.cc sql_update.cc sql_view.cc strfunc.cc table.cc thr_malloc.cc - time.cc tztime.cc uniques.cc unireg.cc item_xmlfunc.cc + sql_time.cc tztime.cc uniques.cc unireg.cc item_xmlfunc.cc rpl_tblmap.cc sql_binlog.cc event_scheduler.cc event_data_objects.cc event_queue.cc event_db_repository.cc sql_tablespace.cc events.cc ../sql-common/my_user.c diff --git a/sql/Makefile.am b/sql/Makefile.am index 9a60cbcbf66..696f608c879 100644 --- a/sql/Makefile.am +++ b/sql/Makefile.am @@ -84,22 +84,29 @@ noinst_HEADERS = item.h item_func.h item_sum.h item_cmpfunc.h \ item_strfunc.h item_timefunc.h \ item_xmlfunc.h sql_plugin_services.h \ item_create.h item_subselect.h item_row.h \ - mysql_priv.h item_geofunc.h sql_bitmap.h \ + sql_priv.h item_geofunc.h sql_bitmap.h \ procedure.h sql_class.h sql_lex.h sql_list.h \ sql_map.h sql_string.h unireg.h \ sql_error.h field.h handler.h mysqld_suffix.h \ - sql_profile.h \ + sql_profile.h mysqld.h sql_help.h frm_crypt.h \ ha_ndbcluster.h ha_ndbcluster_cond.h \ ha_ndbcluster_binlog.h ha_ndbcluster_tables.h \ ha_partition.h rpl_constants.h \ debug_sync.h \ opt_range.h protocol.h rpl_tblmap.h rpl_utility.h \ - rpl_reporting.h \ + rpl_reporting.h sql_locale.h sql_parse.h \ log.h sql_show.h rpl_rli.h rpl_mi.h \ sql_select.h structs.h table.h sql_udf.h hash_filo.h \ - lex.h lex_symbol.h sql_acl.h sql_crypt.h \ + lex.h lex_symbol.h sql_acl.h sql_crypt.h sql_base.h \ + sql_table.h key.h lock.h thr_malloc.h strfunc.h \ + sql_delete.h sql_insert.h sql_update.h sql_db.h \ + sql_connect.h sql_rename.h sql_time.h sql_tablespace.h \ + hostname.h sql_test.h records.h filesort.h \ + sql_derived.h sql_load.h sql_handler.h init.h \ + derror.h sql_union.h des_key_file.h sql_binlog.h \ + discover.h sql_manager.h sql_do.h \ sql_repl.h slave.h rpl_filter.h rpl_injector.h \ - log_event.h rpl_record.h \ + log_event.h rpl_record.h sql_const.h \ log_event_old.h rpl_record_old.h \ sql_sort.h sql_cache.h set_var.h sys_vars_shared.h \ spatial.h gstream.h client_settings.h tzfile.h \ @@ -137,7 +144,7 @@ mysqld_SOURCES = sql_lex.cc sql_handler.cc sql_partition.cc \ unireg.cc des_key_file.cc \ log_event.cc rpl_record.cc \ log_event_old.cc rpl_record_old.cc \ - discover.cc time.cc opt_range.cc opt_sum.cc \ + discover.cc sql_time.cc opt_range.cc opt_sum.cc \ records.cc filesort.cc handler.cc \ ha_partition.cc \ debug_sync.cc \ diff --git a/sql/debug_sync.cc b/sql/debug_sync.cc index a6a5dfe739a..d16fa4b2468 100644 --- a/sql/debug_sync.cc +++ b/sql/debug_sync.cc @@ -321,12 +321,13 @@ /* Due to weaknesses in our include files, we need to include - mysql_priv.h here. To have THD declared, we need to include + sql_priv.h here. To have THD declared, we need to include sql_class.h. This includes log_event.h, which in turn requires - declarations from mysql_priv.h (e.g. OPTION_AUTO_IS_NULL). - mysql_priv.h includes almost everything, so is sufficient here. + declarations from sql_priv.h (e.g. OPTION_AUTO_IS_NULL). + sql_priv.h includes almost everything, so is sufficient here. */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "sql_parse.h" /* Action to perform at a synchronization point. @@ -394,7 +395,7 @@ extern "C" void (*debug_sync_C_callback_ptr)(const char *, size_t); We cannot place a sync point directly in C files (like those in mysys or certain storage engines written mostly in C like MyISAM or Maria). Because - they are C code and do not include mysql_priv.h. So they do not know the + they are C code and do not include sql_priv.h. So they do not know the macro DEBUG_SYNC(thd, sync_point_name). The macro needs a 'thd' argument. Hence it cannot be used in files outside of the sql/ directory. diff --git a/sql/derror.cc b/sql/derror.cc index 8e47dda7bbe..04a82860d45 100644 --- a/sql/derror.cc +++ b/sql/derror.cc @@ -21,8 +21,13 @@ Read language depeneded messagefile */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "derror.h" #include "mysys_err.h" +#include "mysqld.h" // lc_messages_dir +#include "derror.h" // read_texts +#include "sql_class.h" // THD static void init_myfunc_errs(void); diff --git a/sql/derror.h b/sql/derror.h new file mode 100644 index 00000000000..cb8ae91acbc --- /dev/null +++ b/sql/derror.h @@ -0,0 +1,25 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef DERROR_INCLUDED +#define DERROR_INCLUDED + +#include "my_global.h" /* uint */ + +bool init_errmessage(void); +bool read_texts(const char *file_name, const char *language, + const char ***point, uint error_messages); + +#endif /* DERROR_INCLUDED */ diff --git a/sql/des_key_file.cc b/sql/des_key_file.cc index c2b632e521b..d2bf2ebdaa7 100644 --- a/sql/des_key_file.cc +++ b/sql/des_key_file.cc @@ -13,7 +13,10 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "my_global.h" // HAVE_* +#include "sql_priv.h" +#include "des_key_file.h" // st_des_keyschedule, st_des_keyblock +#include "log.h" // sql_print_error #include <m_ctype.h> #ifdef HAVE_OPENSSL diff --git a/sql/des_key_file.h b/sql/des_key_file.h new file mode 100644 index 00000000000..d817ff93949 --- /dev/null +++ b/sql/des_key_file.h @@ -0,0 +1,40 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef DES_KEY_FILE_INCLUDED +#define DES_KEY_FILE_INCLUDED + +#ifdef HAVE_OPENSSL +#include <openssl/des.h> + +#include "violite.h" /* DES_cblock, DES_key_schedule */ + +struct st_des_keyblock +{ + DES_cblock key1, key2, key3; +}; + +struct st_des_keyschedule +{ + DES_key_schedule ks1, ks2, ks3; +}; + +extern struct st_des_keyschedule des_keyschedule[10]; +extern uint des_default_key; + +bool load_des_key_file(const char *file_name); +#endif /* HAVE_OPENSSL */ + +#endif /* DES_KEY_FILE_INCLUDED */ diff --git a/sql/discover.cc b/sql/discover.cc index fcc26042fe2..f50f7deed99 100644 --- a/sql/discover.cc +++ b/sql/discover.cc @@ -21,7 +21,9 @@ Functions for discover of frm file from handler */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "discover.h" #include <my_dir.h> /** diff --git a/sql/discover.h b/sql/discover.h new file mode 100644 index 00000000000..54fb78ddd2f --- /dev/null +++ b/sql/discover.h @@ -0,0 +1,24 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef DISCOVER_INCLUDED +#define DISCOVER_INCLUDED + +#include "my_global.h" /* uchar */ + +int readfrm(const char *name, uchar **data, size_t *length); +int writefrm(const char* name, const uchar* data, size_t len); + +#endif /* DISCOVER_INCLUDED */ diff --git a/sql/event_data_objects.cc b/sql/event_data_objects.cc index 7f4104f4a77..e22bfbad141 100644 --- a/sql/event_data_objects.cc +++ b/sql/event_data_objects.cc @@ -14,11 +14,22 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #define MYSQL_LEX 1 -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "sql_parse.h" // parse_sql +#include "strfunc.h" // find_string_in_array +#include "sql_db.h" // get_default_db_collation +#include "sql_time.h" // interval_type_to_name, + // date_add_interval, + // calc_time_diff +#include "tztime.h" // my_tz_find, my_tz_OFFSET0, struct Time_zone +#include "sql_acl.h" // EVENT_ACL, SUPER_ACL +#include "sp.h" // load_charset, load_collation #include "events.h" #include "event_data_objects.h" #include "event_db_repository.h" #include "sp_head.h" +#include "sql_show.h" // append_definer, append_identifier /** @addtogroup Event_Scheduler diff --git a/sql/event_data_objects.h b/sql/event_data_objects.h index e32077b9c97..9d17213bcb8 100644 --- a/sql/event_data_objects.h +++ b/sql/event_data_objects.h @@ -23,6 +23,12 @@ */ #include "event_parse_data.h" +#include "thr_lock.h" /* thr_lock_type */ + +class Field; +class THD; +class Time_zone; +struct TABLE; class Event_queue_element_for_exec { diff --git a/sql/event_db_repository.cc b/sql/event_db_repository.cc index 0696652deb1..b7c01f10066 100644 --- a/sql/event_db_repository.cc +++ b/sql/event_db_repository.cc @@ -13,12 +13,21 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "sql_base.h" // close_thread_tables #include "event_db_repository.h" +#include "key.h" // key_copy +#include "sql_db.h" // get_default_db_collation +#include "sql_time.h" // interval_type_to_name +#include "tztime.h" // struct Time_zone +#include "sql_acl.h" // SUPER_ACL, MYSQL_DB_FIELD_COUNT, mysql_db_table_fields +#include "records.h" // init_read_record, end_read_record #include "sp_head.h" #include "event_data_objects.h" #include "events.h" #include "sql_show.h" +#include "lock.h" // MYSQL_LOCK_IGNORE_TIMEOUT /** @addtogroup Event_Scheduler diff --git a/sql/event_parse_data.cc b/sql/event_parse_data.cc index 86905b38627..c36567fc8e1 100644 --- a/sql/event_parse_data.cc +++ b/sql/event_parse_data.cc @@ -13,9 +13,11 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" #include "sp_head.h" #include "event_parse_data.h" +#include "sql_time.h" // TIME_to_timestamp /* Returns a new instance diff --git a/sql/event_parse_data.h b/sql/event_parse_data.h index 8b42eb23937..4ca46b40d3f 100644 --- a/sql/event_parse_data.h +++ b/sql/event_parse_data.h @@ -16,6 +16,12 @@ #ifndef _EVENT_PARSE_DATA_H_ #define _EVENT_PARSE_DATA_H_ +#include "sql_list.h" /* Sql_alloc */ + +class Item; +class THD; +class sp_name; + #define EVEX_GET_FIELD_FAILED -2 #define EVEX_BAD_PARAMS -5 #define EVEX_MICROSECOND_UNSUP -6 diff --git a/sql/event_queue.cc b/sql/event_queue.cc index 225029040b0..f0310c676d1 100644 --- a/sql/event_queue.cc +++ b/sql/event_queue.cc @@ -13,10 +13,14 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" #include "event_queue.h" #include "event_data_objects.h" #include "sql_audit.h" +#include "tztime.h" // my_tz_find, my_tz_OFFSET0, struct Time_zone +#include "log.h" // sql_print_error +#include "sql_class.h" // struct THD /** @addtogroup Event_Scheduler diff --git a/sql/event_queue.h b/sql/event_queue.h index aac9eb04e98..93af03ba901 100644 --- a/sql/event_queue.h +++ b/sql/event_queue.h @@ -30,6 +30,10 @@ extern PSI_mutex_key key_LOCK_event_queue; extern PSI_cond_key key_COND_queue_state; #endif /* HAVE_PSI_INTERFACE */ +#include "queues.h" // QUEUE +#include "sql_string.h" /* LEX_STRING */ +#include "my_time.h" /* my_time_t, interval_type */ + class Event_basic; class Event_queue_element; class Event_queue_element_for_exec; diff --git a/sql/event_scheduler.cc b/sql/event_scheduler.cc index 3ceb1597a41..c3cfd5c0fda 100755 --- a/sql/event_scheduler.cc +++ b/sql/event_scheduler.cc @@ -13,12 +13,15 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "event_scheduler.h" #include "events.h" #include "event_data_objects.h" -#include "event_scheduler.h" #include "event_queue.h" #include "event_db_repository.h" +#include "sql_connect.h" // init_new_connection_handler_thread +#include "sql_acl.h" // SUPER_ACL /** @addtogroup Event_Scheduler diff --git a/sql/event_scheduler.h b/sql/event_scheduler.h index 2988f354f63..ecd7031f546 100644 --- a/sql/event_scheduler.h +++ b/sql/event_scheduler.h @@ -34,7 +34,9 @@ class Event_queue; class Event_job_data; class Event_db_repository; +class Event_queue_element_for_exec; class Events; +class THD; void pre_init_event_thread(THD* thd); diff --git a/sql/events.cc b/sql/events.cc index a2375b1274b..96b86e6798f 100644 --- a/sql/events.cc +++ b/sql/events.cc @@ -13,8 +13,17 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "sql_parse.h" // check_access +#include "sql_base.h" // close_thread_tables +#include "sql_show.h" // append_definer #include "events.h" +#include "sql_db.h" // check_db_dir_existence +#include "sql_table.h" // write_bin_log +#include "tztime.h" // struct Time_zone +#include "sql_acl.h" // EVENT_ACL +#include "records.h" // init_read_record, end_read_record #include "event_data_objects.h" #include "event_db_repository.h" #include "event_queue.h" diff --git a/sql/events.h b/sql/events.h index 380b0d97f0a..c535dda9c31 100644 --- a/sql/events.h +++ b/sql/events.h @@ -32,10 +32,17 @@ extern PSI_cond_key key_event_scheduler_COND_state; extern PSI_thread_key key_thread_event_scheduler, key_thread_event_worker; #endif /* HAVE_PSI_INTERFACE */ -class Event_parse_data; +#include "sql_string.h" /* LEX_STRING */ +#include "my_time.h" /* interval_type */ + class Event_db_repository; +class Event_parse_data; class Event_queue; class Event_scheduler; +class TABLE_LIST; +class THD; +typedef class Item COND; +typedef struct charset_info_st CHARSET_INFO; /* Return codes */ enum enum_events_error_code diff --git a/sql/field.cc b/sql/field.cc index 7eade7f91bf..bd091f7eb57 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -25,10 +25,19 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" #include "sql_select.h" #include "rpl_rli.h" // Pull in Relay_log_info #include "slave.h" // Pull in rpl_master_has_bug() +#include "strfunc.h" // find_type2, find_set +#include "sql_time.h" // str_to_datetime_with_warn, + // str_to_time_with_warn, + // TIME_to_timestamp, + // make_time, make_date, + // make_truncated_value_warning +#include "tztime.h" // struct Time_zone +#include "filesort.h" // change_double_for_sort +#include "log_event.h" // class Table_map_log_event #include <m_ctype.h> #include <errno.h> diff --git a/sql/field.h b/sql/field.h index b4f5977d756..d1fcc40ff5d 100644 --- a/sql/field.h +++ b/sql/field.h @@ -25,6 +25,12 @@ #pragma interface /* gcc class implementation */ #endif +#include "mysqld.h" /* system_charset_info */ +#include "table.h" /* TABLE */ +#include "sql_string.h" /* String */ +#include "my_decimal.h" /* my_decimal */ +#include "sql_error.h" /* MYSQL_ERROR */ + #define DATETIME_DEC 6 const uint32 max_field_size= (uint32) 4294967295U; @@ -32,6 +38,33 @@ class Send_field; class Protocol; class Create_field; class Relay_log_info; +class Field; + +enum enum_check_fields +{ + CHECK_FIELD_IGNORE, + CHECK_FIELD_WARN, + CHECK_FIELD_ERROR_FOR_NULL +}; + + +enum Derivation +{ + DERIVATION_IGNORABLE= 6, + DERIVATION_NUMERIC= 5, + DERIVATION_COERCIBLE= 4, + DERIVATION_SYSCONST= 3, + DERIVATION_IMPLICIT= 2, + DERIVATION_NONE= 1, + DERIVATION_EXPLICIT= 0 +}; + +#define STORAGE_TYPE_MASK 7 +#define COLUMN_FORMAT_MASK 7 +#define COLUMN_FORMAT_SHIFT 3 + +#define my_charset_numeric my_charset_latin1 +#define MY_REPERTOIRE_NUMERIC MY_REPERTOIRE_ASCII struct st_cache_field; int field_conv(Field *to,Field *from); diff --git a/sql/field_conv.cc b/sql/field_conv.cc index 3574534722e..e3be33c0f3c 100644 --- a/sql/field_conv.cc +++ b/sql/field_conv.cc @@ -24,7 +24,8 @@ gives much more speed. */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "sql_class.h" // THD #include <m_ctype.h> static void do_field_eq(Copy_field *copy) diff --git a/sql/filesort.cc b/sql/filesort.cc index 79887577f8f..3f3dc4e1e3e 100644 --- a/sql/filesort.cc +++ b/sql/filesort.cc @@ -21,13 +21,17 @@ Sorts a database */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "filesort.h" +#include "unireg.h" // REQUIRED by other includes #ifdef HAVE_STDDEF_H #include <stddef.h> /* for macro offsetof */ #endif #include <m_ctype.h> #include "sql_sort.h" #include "probes_mysql.h" +#include "sql_test.h" // TEST_filesort +#include "opt_range.h" // SQL_SELECT #ifndef THREAD #define SKIP_DBUG_IN_FILESORT diff --git a/sql/filesort.h b/sql/filesort.h new file mode 100644 index 00000000000..c1a101cc1e8 --- /dev/null +++ b/sql/filesort.h @@ -0,0 +1,36 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef FILESORT_INCLUDED +#define FILESORT_INCLUDED + +class SQL_SELECT; + +#include "my_global.h" /* uint, uchar */ +#include "my_base.h" /* ha_rows */ + +class SQL_SELECT; +class THD; +struct TABLE; +typedef struct st_sort_field SORT_FIELD; + +ha_rows filesort(THD *thd, TABLE *table, st_sort_field *sortorder, + uint s_length, SQL_SELECT *select, + ha_rows max_rows, bool sort_positions, + ha_rows *examined_rows); +void filesort_free_buffers(TABLE *table, bool full); +void change_double_for_sort(double nr,uchar *to); + +#endif /* FILESORT_INCLUDED */ diff --git a/sql/frm_crypt.cc b/sql/frm_crypt.cc index 590205e83ab..821e61c5247 100644 --- a/sql/frm_crypt.cc +++ b/sql/frm_crypt.cc @@ -21,7 +21,8 @@ ** mysql binary. */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "frm_crypt.h" #ifdef HAVE_CRYPTED_FRM diff --git a/sql/frm_crypt.h b/sql/frm_crypt.h new file mode 100644 index 00000000000..e119dceae35 --- /dev/null +++ b/sql/frm_crypt.h @@ -0,0 +1,23 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef FRM_CRYPT_INCLUDED +#define FRM_CRYPT_INCLUDED + +class SQL_CRYPT; + +SQL_CRYPT *get_crypt_for_frm(void); + +#endif /* FRM_CRYPT_INCLUDED */ diff --git a/sql/gstream.cc b/sql/gstream.cc index e2bb41b8541..fcb9a91ac50 100644 --- a/sql/gstream.cc +++ b/sql/gstream.cc @@ -18,7 +18,9 @@ NOTE: These functions assumes that the string is end \0 terminated! */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "gstream.h" +#include "m_string.h" // LEX_STRING enum Gis_read_stream::enum_tok_types Gis_read_stream::get_next_toc_type() { diff --git a/sql/gstream.h b/sql/gstream.h index ea7158ee1a3..65acc2ff193 100644 --- a/sql/gstream.h +++ b/sql/gstream.h @@ -17,6 +17,13 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include "my_global.h" /* NULL, NullS */ +#include "my_sys.h" /* MY_ALLOW_ZERO_PTR */ +#include "m_ctype.h" /* my_charset_latin1, my_charset_bin */ + +typedef struct charset_info_st CHARSET_INFO; +typedef struct st_mysql_lex_string LEX_STRING; + class Gis_read_stream { public: diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index 05a42220caf..38324f3cf19 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -26,7 +26,15 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" // REQUIRED: for other includes +#include "sql_table.h" // build_table_filename, + // tablename_to_filename, + // filename_to_tablename +#include "sql_partition.h" // HA_CAN_*, partition_info, part_id_range +#include "sql_base.h" // close_cached_tables +#include "discover.h" // readfrm +#include "sql_acl.h" // wild_case_compare #include "rpl_mi.h" /* @@ -48,8 +56,11 @@ int ha_ndb_dummy; #include "ha_ndbcluster_binlog.h" #include "ha_ndbcluster_tables.h" -#include <mysql/plugin.h> +#include "sql_plugin.h" #include "probes_mysql.h" +#include "sql_show.h" // init_fill_schema_files_row, + // schema_table_store_record +#include "sql_test.h" // print_where #ifdef ndb_dynamite #undef assert diff --git a/sql/ha_ndbcluster.h b/sql/ha_ndbcluster.h index 63da24e8dda..17ba7451538 100644 --- a/sql/ha_ndbcluster.h +++ b/sql/ha_ndbcluster.h @@ -51,6 +51,8 @@ class NdbIndexStat; class NdbEventOperation; class ha_ndbcluster_cond; +#include "sql_partition.h" /* part_id_range */ + // connectstring to cluster if given by mysqld extern const char *ndbcluster_connectstring; diff --git a/sql/ha_ndbcluster_binlog.cc b/sql/ha_ndbcluster_binlog.cc index 7097c0a1a46..edb6aeebb5c 100644 --- a/sql/ha_ndbcluster_binlog.cc +++ b/sql/ha_ndbcluster_binlog.cc @@ -14,7 +14,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" // REQUIRED: for other includes #include "sql_show.h" #ifdef WITH_NDBCLUSTER_STORAGE_ENGINE #include "ha_ndbcluster.h" @@ -28,6 +29,14 @@ #include "ndb_cluster_connection.hpp" #include <util/NdbAutoPtr.hpp> +#include "sql_base.h" // close_thread_tables +#include "sql_table.h" // build_table_filename +#include "table.h" // open_table_from_share +#include "discover.h" // readfrm, writefrm +#include "lock.h" // MYSQL_LOCK_IGNORE_FLUSH, + // mysql_unlock_tables +#include "sql_parse.h" // mysql_parse + #ifdef ndb_dynamite #undef assert #define assert(x) do { if(x) break; ::printf("%s %d: assert failed: %s\n", __FILE__, __LINE__, #x); ::fflush(stdout); ::signal(SIGABRT,SIG_DFL); ::abort(); ::kill(::getpid(),6); ::kill(::getpid(),9); } while (0) diff --git a/sql/ha_ndbcluster_binlog.h b/sql/ha_ndbcluster_binlog.h index 32dac553ee8..4d2a49588b4 100644 --- a/sql/ha_ndbcluster_binlog.h +++ b/sql/ha_ndbcluster_binlog.h @@ -17,6 +17,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include "sql_class.h" /* THD */ + // Typedefs for long names typedef NdbDictionary::Object NDBOBJ; typedef NdbDictionary::Column NDBCOL; diff --git a/sql/ha_ndbcluster_cond.cc b/sql/ha_ndbcluster_cond.cc index bb35211944b..6df1f4881c3 100644 --- a/sql/ha_ndbcluster_cond.cc +++ b/sql/ha_ndbcluster_cond.cc @@ -22,7 +22,10 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" +#include "sql_class.h" // set_var.h: THD +#include "my_global.h" // WITH_* +#include "log.h" // sql_print_error #ifdef WITH_NDBCLUSTER_STORAGE_ENGINE #include <ndbapi/NdbApi.hpp> diff --git a/sql/ha_ndbcluster_cond.h b/sql/ha_ndbcluster_cond.h index 4ccc7e062ec..442eac2fafd 100644 --- a/sql/ha_ndbcluster_cond.h +++ b/sql/ha_ndbcluster_cond.h @@ -25,6 +25,13 @@ #pragma interface /* gcc class implementation */ #endif +/* + It is necessary to include set_var.h instead of item.h because there + are dependencies on include order for set_var.h and item.h. This + will be resolved later. +*/ +#include "set_var.h" /* Item, Item_field */ + typedef enum ndb_item_type { NDB_VALUE = 0, // Qualified more with Item::Type NDB_FIELD = 1, // Qualified from table definition diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index ea5b4079b3f..b8831127e3f 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -51,12 +51,14 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" +#include "sql_parse.h" // append_file_to_dir #ifdef WITH_PARTITION_STORAGE_ENGINE #include "ha_partition.h" - -#include <mysql/plugin.h> +#include "sql_table.h" // tablename_to_filename +#include "key.h" +#include "sql_plugin.h" static const char *ha_par_ext= ".par"; #ifdef NOT_USED diff --git a/sql/ha_partition.h b/sql/ha_partition.h index b3a347612f3..9f499e7b4a9 100644 --- a/sql/ha_partition.h +++ b/sql/ha_partition.h @@ -20,6 +20,9 @@ #pragma interface /* gcc class implementation */ #endif +#include "sql_partition.h" /* part_id_range, partition_element */ +#include "queues.h" /* QUEUE */ + enum partition_keywords { PKW_HASH= 0, PKW_RANGE, PKW_LIST, PKW_KEY, PKW_MAXVALUE, PKW_LINEAR, diff --git a/sql/handler.cc b/sql/handler.cc index 69ac4e72555..ad3ba908173 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -23,8 +23,19 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" #include "rpl_handler.h" +#include "sql_cache.h" // query_cache, query_cache_* +#include "key.h" // key_copy, key_unpack, key_cmp_if_same, key_cmp +#include "sql_table.h" // build_table_filename +#include "lock.h" // wait_if_global_read_lock, + // start_waiting_global_read_lock +#include "sql_parse.h" // check_stack_overrun +#include "sql_acl.h" // SUPER_ACL +#include "sql_base.h" // free_io_cache +#include "discover.h" // writefrm +#include "log_event.h" // *_rows_log_event #include "rpl_filter.h" #include <myisampack.h> #include "transaction.h" diff --git a/sql/handler.h b/sql/handler.h index 1734e5727dc..9f21cb0f25d 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -22,6 +22,13 @@ #pragma interface /* gcc class implementation */ #endif +#include "sql_const.h" +#include "mysqld.h" /* server_id */ +#include "sql_plugin.h" /* plugin_ref, st_plugin_int, plugin */ +#include "thr_lock.h" /* thr_lock_type, THR_LOCK_DATA */ +#include "sql_cache.h" +#include "structs.h" /* SHOW_COMP_OPTION */ + #include <my_handler.h> #include <ft_global.h> #include <keycache.h> @@ -2173,4 +2180,15 @@ int ha_binlog_end(THD *thd); #define ha_binlog_wait(a) do {} while (0) #define ha_binlog_end(a) do {} while (0) #endif + +const char *get_canonical_filename(handler *file, const char *path, + char *tmp_path); +bool mysql_xa_recover(THD *thd); + + +inline const char *table_case_name(HA_CREATE_INFO *info, const char *name) +{ + return ((lower_case_table_names == 2 && info->alias) ? info->alias : name); +} + #endif /* HANDLER_INCLUDED */ diff --git a/sql/hash_filo.cc b/sql/hash_filo.cc index 9303120e18a..d10b7fa4907 100644 --- a/sql/hash_filo.cc +++ b/sql/hash_filo.cc @@ -23,5 +23,5 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" #include "hash_filo.h" diff --git a/sql/hash_filo.h b/sql/hash_filo.h index 805e1262020..859b4713940 100644 --- a/sql/hash_filo.h +++ b/sql/hash_filo.h @@ -26,6 +26,10 @@ #pragma interface /* gcc class interface */ #endif +#include "hash.h" /* my_hash_get_key, my_hash_free_key, HASH */ +#include "m_string.h" /* bzero */ +#include "mysqld.h" /* key_hash_filo_lock */ + class hash_filo_element { hash_filo_element *next_used,*prev_used; diff --git a/sql/hostname.cc b/sql/hostname.cc index 5517d85527c..d309efc4196 100644 --- a/sql/hostname.cc +++ b/sql/hostname.cc @@ -24,9 +24,18 @@ doesn't resemble an IP address. */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "hostname.h" +#include "my_global.h" +#ifndef __WIN__ +#include <netdb.h> // getservbyname, servent +#endif #include "hash_filo.h" #include <m_ctype.h> +#include "log.h" // sql_print_warning, + // sql_print_information +#include "violite.h" // vio_getnameinfo, + // vio_get_normalized_ip_string #ifdef __cplusplus extern "C" { // Because of SCO 3.2V4.2 #endif diff --git a/sql/hostname.h b/sql/hostname.h new file mode 100644 index 00000000000..03611bb5813 --- /dev/null +++ b/sql/hostname.h @@ -0,0 +1,30 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef HOSTNAME_INCLUDED +#define HOSTNAME_INCLUDED + +#include "my_global.h" /* uint */ + +bool ip_to_hostname(struct sockaddr_storage *ip_storage, + const char *ip_string, + char **hostname, uint *connect_errors); +void inc_host_errors(const char *ip_string); +void reset_host_errors(const char *ip_string); +bool hostname_cache_init(); +void hostname_cache_free(); +void hostname_cache_refresh(void); + +#endif /* HOSTNAME_INCLUDED */ diff --git a/sql/init.cc b/sql/init.cc index cada907b013..c72787300b7 100644 --- a/sql/init.cc +++ b/sql/init.cc @@ -21,7 +21,12 @@ Init and dummy functions for interface with unireg */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "init.h" +#include "my_sys.h" +#include "mysqld.h" // abort_loop, ... +#include "my_time.h" // my_init_time +#include "unireg.h" // SPECIAL_SAME_DB_NAME #include <m_ctype.h> void unireg_init(ulong options) diff --git a/sql/init.h b/sql/init.h new file mode 100644 index 00000000000..2c160879223 --- /dev/null +++ b/sql/init.h @@ -0,0 +1,24 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef INIT_INCLUDED +#define INIT_INCLUDED + +#include "my_global.h" /* ulong */ + +void unireg_init(ulong options); +void unireg_end(void) __attribute__((noreturn)); + +#endif /* INIT_INCLUDED */ diff --git a/sql/item.cc b/sql/item.cc index 9a685c80c18..24b8e0d5401 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -17,7 +17,8 @@ #ifdef USE_PRAGMA_IMPLEMENTATION #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" // REQUIRED: for other includes #include <mysql.h> #include <m_ctype.h> #include "my_dir.h" @@ -25,6 +26,19 @@ #include "sp_head.h" #include "sql_trigger.h" #include "sql_select.h" +#include "sql_show.h" // append_identifier +#include "sql_view.h" // VIEW_ANY_SQL +#include "sql_time.h" // str_to_datetime_with_warn, + // make_truncated_value_warning +#include "sql_acl.h" // get_column_grant, + // SELECT_ACL, UPDATE_ACL, + // INSERT_ACL, + // check_grant_column +#include "sql_base.h" // enum_resolution_type, + // REPORT_EXCEPT_NOT_FOUND, + // find_item_in_list, + // RESOLVED_AGAINST_ALIAS, ... +#include "log_event.h" // append_query_string const String my_null_string("NULL", 4, default_charset_info); diff --git a/sql/item.h b/sql/item.h index 5d811b50bbc..4241074c659 100644 --- a/sql/item.h +++ b/sql/item.h @@ -21,10 +21,18 @@ #pragma interface /* gcc class implementation */ #endif +#include "sql_priv.h" /* STRING_BUFFER_USUAL_SIZE */ +#include "unireg.h" +#include "sql_const.h" /* RAND_TABLE_BIT, MAX_FIELD_NAME */ +#include "unireg.h" // REQUIRED: for other includes +#include "thr_malloc.h" /* sql_calloc */ +#include "field.h" /* Derivation */ + class Protocol; struct TABLE_LIST; void item_init(void); /* Init item functions */ class Item_field; +class user_var_entry; /* "Declared Type Collation" @@ -2689,6 +2697,7 @@ public: #include "item_timefunc.h" #include "item_subselect.h" #include "item_xmlfunc.h" +#include "item_create.h" #endif /** @@ -3021,18 +3030,6 @@ public: }; -/* - We need this two enums here instead of sql_lex.h because - at least one of them is used by Item_trigger_field interface. - - Time when trigger is invoked (i.e. before or after row actually - inserted/updated/deleted). -*/ -enum trg_action_time_type -{ - TRG_ACTION_BEFORE= 0, TRG_ACTION_AFTER= 1, TRG_ACTION_MAX -}; - class Table_triggers_list; /* @@ -3418,4 +3415,7 @@ extern Cached_item *new_Cached_item(THD *thd, Item *item); extern Item_result item_cmp_type(Item_result a,Item_result b); extern void resolve_const_item(THD *thd, Item **ref, Item *cmp_item); extern int stored_field_cmp_to_item(THD *thd, Field *field, Item *item); + +extern const String my_null_string; + #endif /* ITEM_INCLUDED */ diff --git a/sql/item_buff.cc b/sql/item_buff.cc index 2f45d0a17c2..a1bbd95c2c6 100644 --- a/sql/item_buff.cc +++ b/sql/item_buff.cc @@ -21,7 +21,14 @@ Buffers to save and compare item values */ -#include "mysql_priv.h" +#include "sql_priv.h" +/* + It is necessary to include set_var.h instead of item.h because there + are dependencies on include order for set_var.h and item.h. This + will be resolved later. +*/ +#include "sql_class.h" // THD +#include "set_var.h" // Cached_item, Cached_item_field, ... /** Create right type of Cached_item for an item. diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 36d05a2d0f4..19e8385539f 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -25,9 +25,11 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" #include <m_ctype.h> #include "sql_select.h" +#include "sql_parse.h" // check_stack_overrun +#include "sql_time.h" // make_truncated_value_warning static bool convert_constant_item(THD *, Item_field *, Item **); static longlong diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h index 767bc0a2b0f..afd25688e79 100644 --- a/sql/item_cmpfunc.h +++ b/sql/item_cmpfunc.h @@ -23,6 +23,9 @@ #pragma interface /* gcc class implementation */ #endif +#include "thr_malloc.h" /* sql_calloc */ +#include "item_func.h" /* Item_int_func, Item_bool_func */ + extern Item_result item_cmp_type(Item_result a,Item_result b); class Item_bool_func2; class Arg_comparator; @@ -1760,8 +1763,26 @@ inline Item *and_conds(Item *a, Item *b) return new Item_cond_and(a, b); } + Item *and_expressions(Item *a, Item *b, Item **org_item); +longlong get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg, + Item *warn_item, bool *is_null); + + bool get_mysql_time_from_str(THD *thd, String *str, timestamp_type warn_type, const char *warn_name, MYSQL_TIME *l_time); + +/* + These need definitions from this file but the variables are defined + in mysqld.h. The variables really belong in this component, but for + the time being we leave them in mysqld.cc to avoid merge problems. +*/ +extern Eq_creator eq_creator; +extern Ne_creator ne_creator; +extern Gt_creator gt_creator; +extern Lt_creator lt_creator; +extern Ge_creator ge_creator; +extern Le_creator le_creator; + #endif /* ITEM_CMPFUNC_INCLUDED */ diff --git a/sql/item_create.cc b/sql/item_create.cc index 89a7fbd696d..beb7b40dc18 100644 --- a/sql/item_create.cc +++ b/sql/item_create.cc @@ -20,8 +20,14 @@ Functions to create an item. Used by sql_yac.yy */ -#include "mysql_priv.h" -#include "item_create.h" +#include "sql_priv.h" +/* + It is necessary to include set_var.h instead of item.h because there + are dependencies on include order for set_var.h and item.h. This + will be resolved later. +*/ +#include "sql_class.h" // set_var.h: THD +#include "set_var.h" #include "sp_head.h" #include "sp.h" diff --git a/sql/item_create.h b/sql/item_create.h index d84c764a3d9..fc21e0a4d33 100644 --- a/sql/item_create.h +++ b/sql/item_create.h @@ -18,6 +18,8 @@ #ifndef ITEM_CREATE_H #define ITEM_CREATE_H +typedef struct st_udf_func udf_func; + /** Public function builder interface. The parser (sql/sql_yacc.yy) uses a factory / builder pattern to @@ -163,5 +165,9 @@ Item * create_func_cast(THD *thd, Item *a, Cast_target cast_type, const char *len, const char *dec, CHARSET_INFO *cs); + +int item_create_init(); +void item_create_cleanup(); + #endif diff --git a/sql/item_func.cc b/sql/item_func.cc index 2c0d90642b4..63af030a027 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -25,8 +25,20 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" +/* + It is necessary to include set_var.h instead of item.h because there + are dependencies on include order for set_var.h and item.h. This + will be resolved later. +*/ +#include "sql_class.h" // set_var.h: THD +#include "set_var.h" #include "slave.h" // for wait_for_master_pos +#include "sql_show.h" // append_identifier +#include "strfunc.h" // find_type +#include "sql_parse.h" // is_update_query +#include "sql_acl.h" // EXECUTE_ACL +#include "mysqld.h" // LOCK_uuid_generator #include "rpl_mi.h" #include <m_ctype.h> #include <hash.h> diff --git a/sql/item_func.h b/sql/item_func.h index 38253a73265..c3f8b254f28 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -1797,4 +1797,14 @@ public: bool check_partition_func_processor(uchar *int_arg) {return FALSE;} }; +Item *get_system_var(THD *thd, enum_var_type var_type, LEX_STRING name, + LEX_STRING component); +extern bool check_reserved_words(LEX_STRING *name); +extern enum_field_types agg_field_type(Item **items, uint nitems); +double my_double_round(double value, longlong dec, bool dec_unsigned, + bool truncate); +bool eval_const_cond(COND *cond); + +extern bool volatile mqh_used; + #endif /* ITEM_FUNC_INCLUDED */ diff --git a/sql/item_geofunc.cc b/sql/item_geofunc.cc index c5554265fbe..e046087b16a 100644 --- a/sql/item_geofunc.cc +++ b/sql/item_geofunc.cc @@ -25,7 +25,14 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" +/* + It is necessary to include set_var.h instead of item.h because there + are dependencies on include order for set_var.h and item.h. This + will be resolved later. +*/ +#include "sql_class.h" // THD, set_var.h: THD +#include "set_var.h" #ifdef HAVE_SPATIAL #include <m_ctype.h> diff --git a/sql/item_row.cc b/sql/item_row.cc index 7535c1fa80b..2fbf0c12499 100644 --- a/sql/item_row.cc +++ b/sql/item_row.cc @@ -13,7 +13,14 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +/* + It is necessary to include set_var.h instead of item.h because there + are dependencies on include order for set_var.h and item.h. This + will be resolved later. +*/ +#include "sql_class.h" // THD, set_var.h: THD +#include "set_var.h" /** Row items used for comparing rows and IN operations on rows: diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index dab29bb58c4..9ae15322265 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -29,7 +29,22 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "my_global.h" // HAVE_* + + +#include "sql_priv.h" +/* + It is necessary to include set_var.h instead of item.h because there + are dependencies on include order for set_var.h and item.h. This + will be resolved later. +*/ +#include "sql_class.h" // set_var.h: THD +#include "set_var.h" +#include "mysqld.h" // LOCK_uuid_generator +#include "sql_acl.h" // SUPER_ACL +#include "des_key_file.h" // st_des_keyschedule, st_des_keyblock +#include "password.h" // my_make_scrambled_password, + // my_make_scrambled_password_323 #include <m_ctype.h> #include "my_md5.h" #include "sha1.h" diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h index c9d62ac1052..e3008a5daab 100644 --- a/sql/item_strfunc.h +++ b/sql/item_strfunc.h @@ -23,6 +23,8 @@ #pragma interface /* gcc class implementation */ #endif +class MY_LOCALE; + class Item_str_func :public Item_func { public: @@ -877,4 +879,6 @@ public: String *val_str(String *); }; +extern String my_empty_string; + #endif /* ITEM_STRFUNC_INCLUDED */ diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index 83e1f9b0625..c341dd97460 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -28,8 +28,16 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" +/* + It is necessary to include set_var.h instead of item.h because there + are dependencies on include order for set_var.h and item.h. This + will be resolved later. +*/ +#include "sql_class.h" // set_var.h: THD +#include "set_var.h" #include "sql_select.h" +#include "sql_parse.h" // check_stack_overrun inline Item * and_items(Item* cond, Item *item) { diff --git a/sql/item_subselect.h b/sql/item_subselect.h index 3503d42edc0..04daab19adc 100644 --- a/sql/item_subselect.h +++ b/sql/item_subselect.h @@ -28,6 +28,15 @@ class JOIN; class select_subselect; class subselect_engine; class Item_bool_func2; +class Comp_creator; + +typedef class st_select_lex SELECT_LEX; + +/** + Convenience typedef used in this file, and further used by any files + including this file. +*/ +typedef Comp_creator* (*chooser_compare_func_creator)(bool invert); /* base class for subselects */ @@ -572,6 +581,15 @@ public: virtual void print (String *str, enum_query_type query_type); }; +/* + This function is actually defined in sql_parse.cc, but it depends on + chooser_compare_func_creator defined in this file. + */ +Item * all_any_subquery_creator(Item *left_expr, + chooser_compare_func_creator cmp, + bool all, + SELECT_LEX *select_lex); + inline bool Item_subselect::is_evaluated() const { diff --git a/sql/item_sum.cc b/sql/item_sum.cc index ce39fd245be..4746a6057c6 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -25,7 +25,7 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" #include "sql_select.h" /** diff --git a/sql/item_sum.h b/sql/item_sum.h index 65f64520156..5f2c4f166e6 100644 --- a/sql/item_sum.h +++ b/sql/item_sum.h @@ -24,6 +24,7 @@ #endif #include <my_tree.h> +#include "sql_udf.h" /* udf_handler */ class Item_sum; class Aggregator_distinct; diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc index 49d31bf1252..feff03e704a 100644 --- a/sql/item_timefunc.cc +++ b/sql/item_timefunc.cc @@ -28,7 +28,28 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" +/* + It is necessary to include set_var.h instead of item.h because there + are dependencies on include order for set_var.h and item.h. This + will be resolved later. +*/ +#include "sql_class.h" // set_var.h: THD +#include "set_var.h" +#include "sql_locale.h" // MY_LOCALE my_locale_en_US +#include "strfunc.h" // check_word +#include "sql_time.h" // make_truncated_value_warning, + // make_time, get_date_from_daynr, + // calc_weekday, calc_week, + // convert_month_to_period, + // convert_period_to_month, + // TIME_to_timestamp, make_date, + // calc_time_diff, + // calc_time_from_sec, + // known_date_time_format, + // get_date_time_format_str +#include "tztime.h" // struct Time_zone +#include "sql_class.h" // THD #include <m_ctype.h> #include <time.h> diff --git a/sql/item_timefunc.h b/sql/item_timefunc.h index 20e4d6488d6..2c08853fda4 100644 --- a/sql/item_timefunc.h +++ b/sql/item_timefunc.h @@ -23,6 +23,8 @@ #pragma interface /* gcc class implementation */ #endif +class MY_LOCALE; + enum date_time_format_types { TIME_ONLY= 0, TIME_MICROSECOND, DATE_ONLY, DATE_TIME, DATE_TIME_MICROSECOND @@ -1066,4 +1068,10 @@ public: } }; + +/* Function prototypes */ + +bool make_date_time(DATE_TIME_FORMAT *format, MYSQL_TIME *l_time, + timestamp_type type, String *str); + #endif /* ITEM_TIMEFUNC_INCLUDED */ diff --git a/sql/item_xmlfunc.cc b/sql/item_xmlfunc.cc index 3621733f456..f124c37f0eb 100644 --- a/sql/item_xmlfunc.cc +++ b/sql/item_xmlfunc.cc @@ -17,9 +17,17 @@ #pragma implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" +/* + It is necessary to include set_var.h instead of item.h because there + are dependencies on include order for set_var.h and item.h. This + will be resolved later. +*/ +#include "sql_class.h" // set_var.h: THD +#include "set_var.h" #include "my_xml.h" #include "sp_pcontext.h" +#include "sql_class.h" // THD /* TODO: future development directions: diff --git a/sql/key.cc b/sql/key.cc index 93197ec4ff5..d593850ca10 100644 --- a/sql/key.cc +++ b/sql/key.cc @@ -16,7 +16,10 @@ /* Functions to handle keys and fields in forms */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" // REQUIRED: by includes later +#include "key.h" // key_rec_cmp +#include "field.h" // Field /* Search after a key that starts with 'field' diff --git a/sql/key.h b/sql/key.h new file mode 100644 index 00000000000..8b416da5846 --- /dev/null +++ b/sql/key.h @@ -0,0 +1,39 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef KEY_INCLUDED +#define KEY_INCLUDED + +#include "my_global.h" /* uchar */ + +class Field; +class String; +struct TABLE; +typedef struct st_bitmap MY_BITMAP; +typedef struct st_key KEY; +typedef struct st_key_part_info KEY_PART_INFO; + +int find_ref_key(KEY *key, uint key_count, uchar *record, Field *field, + uint *key_length, uint *keypart); +void key_copy(uchar *to_key, uchar *from_record, KEY *key_info, uint key_length); +void key_restore(uchar *to_record, uchar *from_key, KEY *key_info, + uint key_length); +bool key_cmp_if_same(TABLE *form,const uchar *key,uint index,uint key_length); +void key_unpack(String *to,TABLE *form,uint index); +bool is_key_used(TABLE *table, uint idx, const MY_BITMAP *fields); +int key_cmp(KEY_PART_INFO *key_part, const uchar *key, uint key_length); +extern "C" int key_rec_cmp(void *key_info, uchar *a, uchar *b); + +#endif /* KEY_INCLUDED */ diff --git a/sql/keycaches.h b/sql/keycaches.h index 542a4d14c3d..66d24b59465 100644 --- a/sql/keycaches.h +++ b/sql/keycaches.h @@ -1,3 +1,6 @@ +#ifndef KEYCACHES_INCLUDED +#define KEYCACHES_INCLUDED + /* Copyright (C) 2002-2006 MySQL AB, 2009 Sun Microsystems, Inc. This program is free software; you can redistribute it and/or modify @@ -39,3 +42,4 @@ KEY_CACHE *get_or_create_key_cache(const char *name, uint length); void free_key_cache(const char *name, KEY_CACHE *key_cache); bool process_key_caches(process_key_cache_t func); +#endif /* KEYCACHES_INCLUDED */ diff --git a/sql/lex_hash.h b/sql/lex_hash.h new file mode 100644 index 00000000000..60b54ef118f --- /dev/null +++ b/sql/lex_hash.h @@ -0,0 +1,6383 @@ +/* + + Do not edit this file directly! + +*/ +/* Copyright 2001-2008 MySQL AB, 2008 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston + MA 02110-1301 USA. */ + +/* Do not edit this file! This is generated by gen_lex_hash.cc +that seeks for a perfect hash function */ + +#include "lex.h" + +static uchar sql_functions_map[12988]= { +'<', '>', 29, 0, +'!', '|', 32, 0, +'<', 'X', 150, 0, +'B', 'Y', 46, 1, +'A', 'W', 211, 2, +'A', 'V', 68, 4, +'A', 'W', 169, 5, +'C', 'Z', 100, 7, +'A', 'V', 31, 9, +'A', 'Y', 205, 9, +'C', 'U', 169, 10, +'C', 'V', 17, 11, +'D', 'U', 174, 11, +'A', 'U', 206, 11, +'A', 'S', 19, 12, +'H', 'U', 82, 12, +'C', 'S', 96, 12, +'C', 'S', 140, 12, +0, 0, 211, 1, +'M', 'M', 157, 12, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 29, 1, +0, 0, 31, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 27, 1, +0, 0, 1, 0, +0, 0, 5, 0, +0, 0, 6, 0, +0, 0, 4, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 0, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'<', '>', 124, 0, +0, 0, 61, 2, +'=', '>', 127, 0, +0, 0, 61, 2, +0, 0, 61, 2, +'S', 'T', 129, 0, +0, 0, 47, 0, +0, 0, 61, 2, +0, 0, 134, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'F', 'S', 131, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 71, 1, +'N', 'R', 145, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 2, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 55, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 60, 2, +0, 0, 8, 0, +0, 0, 2, 0, +0, 0, 3, 0, +0, 0, 7, 0, +0, 0, 9, 0, +0, 0, 23, 0, +0, 0, 27, 0, +0, 0, 205, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 209, 0, +0, 0, 229, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 232, 0, +0, 0, 82, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 90, 1, +0, 0, 10, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'D', 'V', 179, 0, +0, 0, 40, 0, +0, 0, 93, 0, +'A', 'I', 220, 0, +0, 0, 146, 0, +0, 0, 177, 0, +0, 0, 61, 2, +0, 0, 61, 2, +'N', 'P', 229, 0, +0, 0, 61, 2, +0, 0, 238, 0, +0, 0, 61, 2, +'A', 'O', 232, 0, +'D', 'O', 2, 1, +'N', 'U', 18, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 167, 1, +'E', 'U', 26, 1, +0, 0, 61, 2, +0, 0, 27, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'M', 'O', 43, 1, +0, 0, 13, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 17, 0, +0, 0, 61, 2, +'D', 'Y', 198, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 24, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 31, 0, +0, 0, 21, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 22, 0, +0, 0, 109, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 115, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 133, 0, +0, 0, 220, 0, +0, 0, 61, 2, +0, 0, 231, 0, +0, 0, 243, 255, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'D', 'N', 247, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 52, 1, +0, 0, 242, 255, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 241, 255, +0, 0, 66, 1, +0, 0, 69, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'T', 'W', 14, 1, +0, 0, 75, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 240, 255, +0, 0, 83, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 92, 1, +0, 0, 186, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 204, 1, +0, 0, 61, 2, +0, 0, 223, 1, +0, 0, 237, 255, +0, 0, 230, 255, +0, 0, 56, 2, +0, 0, 61, 2, +0, 0, 54, 2, +'L', 'Y', 70, 1, +'A', 'U', 90, 1, +'A', 'U', 135, 1, +'A', 'X', 162, 1, +'A', 'U', 204, 1, +0, 0, 61, 2, +'A', 'O', 225, 1, +'N', 'N', 243, 1, +0, 0, 237, 0, +'E', 'I', 20, 2, +'A', 'O', 25, 2, +0, 0, 53, 1, +'A', 'U', 78, 2, +0, 0, 85, 1, +'A', 'R', 99, 2, +0, 0, 61, 2, +'E', 'O', 117, 2, +'H', 'T', 138, 2, +'E', 'Y', 151, 2, +'N', 'S', 190, 2, +0, 0, 48, 2, +'A', 'O', 196, 2, +0, 0, 53, 2, +0, 0, 57, 2, +0, 0, 41, 0, +0, 0, 61, 2, +0, 0, 61, 2, +'O', 'T', 84, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 48, 0, +0, 0, 43, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 45, 0, +'L', 'S', 111, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 58, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 68, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 96, 0, +0, 0, 50, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'E', 'T', 119, 1, +0, 0, 53, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 251, 255, +'T', 'T', 156, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 123, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 130, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 136, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 137, 0, +'A', 'E', 157, 1, +0, 0, 103, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 107, 0, +0, 0, 141, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 142, 0, +0, 0, 61, 2, +'D', 'U', 186, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 160, 0, +0, 0, 147, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 150, 0, +0, 0, 166, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 170, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 181, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 182, 0, +0, 0, 194, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 196, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'S', 'U', 240, 1, +0, 0, 198, 0, +0, 0, 61, 2, +0, 0, 200, 0, +'T', 'T', 244, 1, +'1', 'O', 245, 1, +0, 0, 221, 0, +0, 0, 222, 0, +0, 0, 223, 0, +0, 0, 224, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 225, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 228, 0, +0, 0, 239, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 241, 0, +0, 0, 243, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'F', 'S', 40, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'K', 'S', 54, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'O', 63, 2, +0, 0, 247, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 248, 0, +0, 0, 250, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 255, 0, +0, 0, 0, 1, +0, 0, 61, 2, +0, 0, 4, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 7, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 8, 1, +0, 0, 11, 1, +0, 0, 62, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 70, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 74, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 77, 1, +0, 0, 98, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 109, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 113, 1, +'A', 'A', 128, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 168, 1, +'D', 'L', 129, 2, +0, 0, 126, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 130, 1, +0, 0, 188, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 194, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 198, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 228, 1, +0, 0, 248, 1, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'E', 172, 2, +0, 0, 251, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'I', 'U', 177, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 9, 2, +0, 0, 249, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 250, 1, +0, 0, 227, 255, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 7, 2, +0, 0, 15, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 28, 2, +0, 0, 42, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 44, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 45, 2, +0, 0, 49, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 50, 2, +'F', 'S', 234, 2, +'E', 'T', 248, 2, +'A', 'R', 8, 3, +0, 0, 61, 2, +'R', 'V', 31, 3, +'A', 'O', 42, 3, +'R', 'R', 75, 3, +0, 0, 199, 0, +'N', 'N', 91, 3, +0, 0, 61, 2, +0, 0, 61, 2, +'E', 'O', 104, 3, +'A', 'U', 151, 3, +'A', 'C', 172, 3, +'R', 'W', 175, 3, +'H', 'U', 181, 3, +'U', 'U', 195, 3, +'A', 'T', 201, 3, +'H', 'W', 240, 3, +'A', 'Y', 0, 4, +'N', 'S', 25, 4, +0, 0, 35, 2, +'H', 'R', 52, 4, +0, 0, 14, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 19, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 25, 0, +0, 0, 35, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 42, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 46, 0, +0, 0, 49, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'E', 26, 3, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 66, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 250, 255, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 95, 0, +0, 0, 55, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 0, +0, 0, 151, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'E', 'E', 36, 3, +'N', 'R', 37, 3, +0, 0, 155, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 157, 0, +0, 0, 165, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 168, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'R', 'X', 57, 3, +0, 0, 61, 2, +0, 0, 61, 2, +'O', 'U', 64, 3, +0, 0, 61, 2, +0, 0, 61, 2, +'R', 'U', 71, 3, +0, 0, 171, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 172, 0, +0, 0, 173, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 176, 0, +0, 0, 178, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 180, 0, +'A', 'O', 76, 3, +0, 0, 190, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 192, 0, +'D', 'O', 92, 3, +0, 0, 210, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 214, 0, +0, 0, 215, 0, +'A', 'V', 115, 3, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'M', 'N', 137, 3, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'C', 'C', 139, 3, +0, 0, 245, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 249, 0, +0, 0, 251, 0, +0, 0, 253, 0, +'A', 'K', 140, 3, +0, 0, 1, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 5, 1, +0, 0, 30, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 43, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 56, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 60, 1, +0, 0, 63, 1, +0, 0, 61, 2, +0, 0, 68, 1, +0, 0, 91, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 93, 1, +0, 0, 61, 2, +0, 0, 95, 1, +0, 0, 104, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 107, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 121, 1, +'E', 'I', 196, 3, +0, 0, 123, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 124, 1, +0, 0, 125, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'S', 221, 3, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 162, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 163, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 170, 1, +0, 0, 129, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 138, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 154, 1, +0, 0, 187, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 193, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 224, 1, +0, 0, 236, 1, +0, 0, 61, 2, +0, 0, 238, 1, +0, 0, 240, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 10, 2, +'I', 'T', 31, 4, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'I', 43, 4, +0, 0, 17, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 23, 2, +0, 0, 26, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 31, 2, +'E', 'I', 63, 4, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 52, 2, +0, 0, 46, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 47, 2, +0, 0, 12, 0, +'A', 'I', 90, 4, +'H', 'U', 125, 4, +'E', 'O', 141, 4, +'L', 'X', 152, 4, +'A', 'L', 172, 4, +'L', 'R', 192, 4, +0, 0, 195, 0, +'G', 'S', 199, 4, +0, 0, 61, 2, +0, 0, 61, 2, +'E', 'I', 226, 4, +'A', 'O', 231, 4, +0, 0, 61, 2, +'F', 'P', 0, 5, +'A', 'L', 11, 5, +0, 0, 61, 2, +'E', 'O', 23, 5, +'C', 'U', 55, 5, +0, 0, 242, 1, +'N', 'P', 162, 5, +0, 0, 36, 2, +0, 0, 33, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 34, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'G', 'T', 99, 4, +0, 0, 37, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'L', 113, 4, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 253, 255, +0, 0, 38, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 39, 0, +0, 0, 56, 0, +0, 0, 63, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 65, 0, +0, 0, 61, 2, +0, 0, 61, 2, +'L', 'M', 139, 4, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 94, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 101, 0, +0, 0, 71, 0, +0, 0, 75, 0, +0, 0, 122, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 135, 0, +0, 0, 143, 0, +0, 0, 61, 2, +'A', 'G', 165, 4, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 152, 0, +0, 0, 153, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 156, 0, +0, 0, 61, 2, +0, 0, 159, 0, +0, 0, 144, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 148, 0, +0, 0, 167, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 169, 0, +0, 0, 61, 2, +0, 0, 61, 2, +'O', 'O', 184, 4, +'A', 'A', 185, 4, +'T', 'T', 186, 4, +'4', '8', 187, 4, +0, 0, 174, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 175, 0, +0, 0, 189, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 191, 0, +0, 0, 206, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 208, 0, +'F', 'S', 212, 4, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 234, 0, +0, 0, 212, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 217, 0, +0, 0, 246, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 252, 0, +0, 0, 13, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'D', 'M', 246, 4, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 48, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 55, 1, +0, 0, 38, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 42, 1, +0, 0, 80, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 88, 1, +0, 0, 97, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 105, 1, +'G', 'V', 34, 5, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 165, 1, +0, 0, 137, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 144, 1, +0, 0, 145, 1, +0, 0, 146, 1, +0, 0, 61, 2, +'A', 'E', 50, 5, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 158, 1, +0, 0, 159, 1, +0, 0, 61, 2, +0, 0, 161, 1, +0, 0, 148, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 152, 1, +0, 0, 173, 1, +0, 0, 61, 2, +'C', 'R', 74, 5, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'G', 'M', 104, 5, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'C', 'U', 117, 5, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'R', 141, 5, +0, 0, 232, 255, +0, 0, 176, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 179, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'I', 'V', 90, 5, +0, 0, 182, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 185, 1, +'N', 'N', 111, 5, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 192, 1, +'A', 'E', 112, 5, +0, 0, 190, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 191, 1, +0, 0, 197, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 199, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'N', 'R', 136, 5, +0, 0, 200, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 201, 1, +'R', 'T', 159, 5, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 236, 255, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 231, 1, +0, 0, 226, 1, +0, 0, 61, 2, +0, 0, 227, 1, +'I', 'L', 165, 5, +0, 0, 61, 2, +0, 0, 24, 2, +0, 0, 18, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 20, 2, +'D', 'U', 192, 5, +'E', 'O', 210, 5, +'A', 'U', 247, 5, +'E', 'Y', 56, 6, +'N', 'X', 104, 6, +0, 0, 179, 0, +0, 0, 185, 0, +0, 0, 193, 0, +'N', 'T', 131, 6, +0, 0, 61, 2, +0, 0, 61, 2, +'E', 'O', 157, 6, +0, 0, 47, 1, +'A', 'U', 168, 6, +'P', 'U', 189, 6, +'A', 'R', 195, 6, +0, 0, 122, 1, +'E', 'O', 228, 6, +'C', 'Y', 2, 7, +'I', 'R', 50, 7, +'N', 'S', 60, 7, +'A', 'A', 69, 7, +0, 0, 51, 2, +0, 0, 255, 255, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 15, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 20, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 28, 0, +0, 0, 36, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'T', 'T', 221, 5, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 44, 0, +'_', '_', 222, 5, +'A', 'X', 223, 5, +0, 0, 254, 255, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 252, 255, +0, 0, 51, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'A', 12, 6, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'L', 'N', 18, 6, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'R', 'R', 38, 6, +'N', 'R', 13, 6, +0, 0, 57, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 60, 0, +'L', 'U', 21, 6, +'M', 'P', 31, 6, +'T', 'V', 35, 6, +0, 0, 69, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 73, 0, +0, 0, 74, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 77, 0, +0, 0, 89, 0, +0, 0, 61, 2, +0, 0, 92, 0, +'D', 'T', 39, 6, +0, 0, 249, 255, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 248, 255, +'C', 'L', 77, 6, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'S', 'S', 100, 6, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 140, 0, +'I', 'L', 87, 6, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'I', 91, 6, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 120, 0, +0, 0, 116, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 117, 0, +0, 0, 118, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 119, 0, +'A', 'C', 101, 6, +0, 0, 128, 0, +0, 0, 61, 2, +0, 0, 129, 0, +0, 0, 149, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 154, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'E', 'T', 115, 6, +0, 0, 158, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 162, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 245, 255, +'D', 'V', 138, 6, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 235, 0, +0, 0, 211, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 219, 0, +0, 0, 226, 0, +0, 0, 61, 2, +0, 0, 236, 0, +0, 0, 244, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 6, 1, +0, 0, 65, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 72, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 78, 1, +0, 0, 87, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 94, 1, +0, 0, 99, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 106, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 108, 1, +0, 0, 61, 2, +0, 0, 61, 2, +'E', 'O', 213, 6, +0, 0, 111, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 114, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'C', 'F', 224, 6, +0, 0, 117, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 119, 1, +'B', 'T', 239, 6, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 166, 1, +0, 0, 131, 1, +0, 0, 132, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 143, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 150, 1, +0, 0, 153, 1, +0, 0, 61, 2, +0, 0, 156, 1, +0, 0, 160, 1, +0, 0, 175, 1, +0, 0, 61, 2, +0, 0, 184, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 202, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 229, 1, +'B', 'S', 25, 7, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 229, 255, +'D', 'J', 43, 7, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 237, 1, +0, 0, 233, 255, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 233, 1, +0, 0, 0, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 5, 2, +'I', 'K', 66, 7, +0, 0, 61, 2, +0, 0, 25, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 30, 2, +0, 0, 16, 2, +0, 0, 61, 2, +0, 0, 19, 2, +'R', 'R', 70, 7, +'C', '_', 71, 7, +0, 0, 38, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 41, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 225, 255, +'A', 'O', 124, 7, +'A', 'U', 163, 7, +'N', 'X', 231, 7, +'U', 'U', 242, 7, +0, 0, 186, 0, +0, 0, 61, 2, +0, 0, 227, 0, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'O', 246, 7, +'A', 'O', 26, 8, +'A', 'V', 54, 8, +'N', 'P', 76, 8, +'A', 'R', 79, 8, +0, 0, 61, 2, +'E', 'O', 108, 8, +'C', 'W', 147, 8, +'I', 'R', 168, 8, +'N', 'T', 220, 8, +'A', 'A', 6, 9, +0, 0, 43, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 59, 2, +0, 0, 52, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 62, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'N', 139, 7, +0, 0, 67, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'T', 'T', 153, 7, +'A', 'I', 154, 7, +0, 0, 88, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 90, 0, +'T', 'Y', 184, 7, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 124, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 131, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 138, 0, +'A', 'E', 190, 7, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 110, 0, +'B', 'F', 195, 7, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'T', '_', 200, 7, +0, 0, 104, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 106, 0, +0, 0, 108, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'S', 212, 7, +0, 0, 247, 255, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 246, 255, +0, 0, 145, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 163, 0, +'L', 'N', 243, 7, +0, 0, 183, 0, +0, 0, 61, 2, +0, 0, 184, 0, +0, 0, 242, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'N', 'N', 5, 8, +'G', 'G', 6, 8, +'B', 'T', 7, 8, +0, 0, 9, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 10, 1, +'X', 'X', 41, 8, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 51, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 54, 1, +'V', '_', 42, 8, +0, 0, 37, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'R', 'S', 52, 8, +0, 0, 33, 1, +0, 0, 34, 1, +0, 0, 64, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 79, 1, +0, 0, 84, 1, +0, 0, 61, 2, +0, 0, 86, 1, +0, 0, 103, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 239, 255, +0, 0, 61, 2, +0, 0, 61, 2, +'E', 'O', 97, 8, +0, 0, 112, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 120, 1, +'D', 'S', 119, 8, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 164, 1, +0, 0, 134, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 139, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'I', 'T', 135, 8, +0, 0, 155, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 157, 1, +0, 0, 172, 1, +0, 0, 61, 2, +0, 0, 178, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 189, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 196, 1, +0, 0, 195, 1, +0, 0, 61, 2, +0, 0, 203, 1, +0, 0, 206, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 225, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 239, 1, +'N', 'N', 178, 8, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'U', 199, 8, +'Y', 'Y', 179, 8, +'B', 'T', 180, 8, +0, 0, 255, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 1, 2, +0, 0, 3, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 6, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 8, 2, +'D', 'S', 227, 8, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'C', 'C', 243, 8, +0, 0, 14, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 22, 2, +'_', '_', 244, 8, +'D', 'T', 245, 8, +0, 0, 32, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 33, 2, +'R', 'R', 7, 9, +'I', '_', 8, 9, +0, 0, 226, 255, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 224, 255, +'G', 'L', 53, 9, +0, 0, 61, 2, +'H', 'O', 59, 9, +'A', 'U', 70, 9, +0, 0, 161, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'O', 'S', 91, 9, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 2, 1, +'E', 'I', 96, 9, +0, 0, 73, 1, +0, 0, 61, 2, +'A', 'R', 101, 9, +0, 0, 61, 2, +'E', 'E', 146, 9, +'A', 'U', 151, 9, +'E', 'I', 175, 9, +'N', 'N', 188, 9, +'A', 'A', 195, 9, +0, 0, 16, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 18, 0, +0, 0, 59, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'L', 'N', 67, 9, +0, 0, 70, 0, +0, 0, 76, 0, +0, 0, 81, 0, +0, 0, 105, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 127, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 139, 0, +0, 0, 230, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 233, 0, +0, 0, 40, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 46, 1, +'C', 'R', 119, 9, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'E', 'O', 135, 9, +0, 0, 96, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 100, 1, +0, 0, 110, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 116, 1, +'A', 'D', 147, 9, +0, 0, 127, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 135, 1, +0, 0, 171, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'N', 'P', 172, 9, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 210, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 231, 255, +0, 0, 180, 1, +0, 0, 61, 2, +0, 0, 181, 1, +'M', 'M', 180, 9, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 252, 1, +'P', 'P', 181, 9, +'O', 'T', 182, 9, +0, 0, 245, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 246, 1, +'D', 'I', 189, 9, +0, 0, 12, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 21, 2, +'R', 'R', 196, 9, +'B', 'I', 197, 9, +0, 0, 37, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 40, 2, +'C', 'S', 230, 9, +0, 0, 61, 2, +'O', 'O', 247, 9, +'A', 'E', 31, 10, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 188, 0, +0, 0, 61, 2, +0, 0, 204, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 254, 0, +'A', 'U', 45, 10, +0, 0, 67, 1, +0, 0, 89, 1, +'A', 'R', 89, 10, +0, 0, 61, 2, +'E', 'O', 107, 10, +'Q', 'T', 134, 10, +'A', 'E', 148, 10, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 58, 2, +0, 0, 11, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 26, 0, +'M', 'N', 248, 9, +'P', 'P', 250, 9, +'C', 'S', 2, 10, +'L', 'R', 251, 9, +0, 0, 78, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 79, 0, +0, 0, 80, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 82, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'I', 'T', 19, 10, +0, 0, 83, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 84, 0, +'Y', 'Y', 36, 10, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 114, 0, +'_', '_', 37, 10, +'M', 'S', 38, 10, +0, 0, 112, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 113, 0, +0, 0, 21, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'D', 'D', 66, 10, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 58, 1, +'I', 'I', 67, 10, +'U', 'U', 68, 10, +'M', 'M', 69, 10, +'B', 'T', 70, 10, +0, 0, 39, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 41, 1, +0, 0, 102, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 115, 1, +'A', 'P', 118, 10, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 169, 1, +0, 0, 128, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 136, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 147, 1, +0, 0, 149, 1, +'L', 'L', 138, 10, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 235, 255, +'W', '_', 139, 10, +0, 0, 207, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 214, 1, +'B', 'B', 153, 10, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 247, 1, +'L', 'L', 154, 10, +'E', 'E', 155, 10, +'S', '_', 156, 10, +0, 0, 243, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 241, 1, +'O', 'U', 188, 10, +0, 0, 132, 0, +0, 0, 164, 0, +0, 0, 61, 2, +0, 0, 61, 2, +'O', 'O', 195, 10, +0, 0, 216, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'Y', 206, 10, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 118, 1, +0, 0, 61, 2, +0, 0, 151, 1, +'C', 'Y', 250, 10, +0, 0, 4, 2, +0, 0, 11, 2, +0, 0, 72, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 102, 0, +'U', 'U', 196, 10, +'R', 'R', 197, 10, +'_', '_', 198, 10, +'M', 'S', 199, 10, +0, 0, 202, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 203, 0, +'S', 'S', 231, 10, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 45, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 1, +'T', 'T', 232, 10, +'E', 'E', 233, 10, +'R', 'R', 234, 10, +'_', '_', 235, 10, +'H', 'U', 236, 10, +0, 0, 15, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 19, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 28, 1, +0, 0, 174, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 218, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 234, 255, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 228, 255, +'A', 'U', 37, 11, +0, 0, 125, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 244, 255, +0, 0, 61, 2, +0, 0, 213, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 12, 1, +'E', 'U', 82, 11, +0, 0, 61, 2, +0, 0, 81, 1, +0, 0, 101, 1, +0, 0, 61, 2, +0, 0, 142, 1, +'E', 'U', 99, 11, +0, 0, 253, 1, +0, 0, 61, 2, +0, 0, 39, 2, +0, 0, 54, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 64, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 91, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'R', 'R', 58, 11, +'R', 'R', 59, 11, +'E', 'E', 60, 11, +'N', 'N', 61, 11, +'T', 'T', 62, 11, +'_', '_', 63, 11, +'D', 'U', 64, 11, +0, 0, 97, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 98, 0, +0, 0, 100, 0, +0, 0, 44, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 59, 1, +'R', 'S', 116, 11, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'L', 'L', 118, 11, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 234, 1, +0, 0, 183, 1, +0, 0, 238, 255, +'E', '_', 119, 11, +0, 0, 205, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'N', 'T', 146, 11, +0, 0, 212, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'S', 'S', 153, 11, +'I', 'I', 154, 11, +'_', '_', 155, 11, +'H', 'Y', 156, 11, +0, 0, 217, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 219, 1, +0, 0, 61, 2, +0, 0, 222, 1, +0, 0, 126, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 197, 0, +0, 0, 218, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'I', 192, 11, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 141, 1, +'Q', 'U', 201, 11, +0, 0, 254, 1, +0, 0, 34, 2, +0, 0, 22, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 50, 1, +0, 0, 220, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 230, 1, +0, 0, 235, 1, +'U', 'V', 227, 11, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 240, 0, +0, 0, 3, 1, +'A', 'A', 229, 11, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 140, 1, +'Q', 'Q', 243, 11, +0, 0, 244, 1, +0, 0, 29, 2, +0, 0, 29, 0, +0, 0, 32, 0, +'S', 'S', 230, 11, +'T', 'T', 231, 11, +'E', 'E', 232, 11, +'R', 'R', 233, 11, +'_', '_', 234, 11, +'L', 'S', 235, 11, +0, 0, 17, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 26, 1, +'L', 'L', 244, 11, +'_', '_', 245, 11, +'B', 'T', 246, 11, +0, 0, 208, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'S', 'S', 9, 12, +'I', 'I', 10, 12, +'_', '_', 11, 12, +'M', 'S', 12, 12, +0, 0, 216, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 215, 1, +0, 0, 30, 0, +0, 0, 61, 2, +0, 0, 86, 0, +'A', 'E', 38, 12, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'U', 43, 12, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'Q', 'U', 77, 12, +0, 0, 111, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 121, 0, +'S', 'S', 64, 12, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 57, 1, +'T', 'T', 65, 12, +'E', 'E', 66, 12, +'R', 'R', 67, 12, +'_', '_', 68, 12, +'L', 'S', 69, 12, +0, 0, 16, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 18, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 24, 1, +0, 0, 221, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 232, 1, +0, 0, 201, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 20, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 133, 1, +0, 0, 213, 1, +0, 0, 61, 2, +0, 0, 13, 2, +'O', 'U', 113, 12, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 207, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'A', 120, 12, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 209, 1, +0, 0, 87, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 99, 0, +'S', 'S', 121, 12, +'T', 'T', 122, 12, +'E', 'E', 123, 12, +'R', 'R', 124, 12, +'_', '_', 125, 12, +'S', 'S', 126, 12, +'S', 'S', 127, 12, +'L', 'L', 128, 12, +'_', '_', 129, 12, +'C', 'C', 130, 12, +'A', 'I', 131, 12, +0, 0, 23, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 25, 1, +0, 0, 85, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 187, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 49, 1, +0, 0, 76, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 177, 1, +'A', 'A', 158, 12, +'S', 'X', 159, 12, +0, 0, 14, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'_', '_', 165, 12, +'Q', 'U', 166, 12, +0, 0, 32, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'P', 'S', 171, 12, +0, 0, 35, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 36, 1, +}; + +static uchar symbols_map[12128]= { +'<', '>', 29, 0, +'!', '|', 32, 0, +'<', 'X', 150, 0, +'B', 'Y', 14, 1, +'A', 'W', 150, 2, +'A', 'V', 7, 4, +'A', 'W', 101, 5, +'C', 'Z', 214, 6, +'A', 'V', 89, 8, +'A', 'Y', 3, 9, +'C', 'U', 220, 9, +'C', 'V', 60, 10, +'D', 'U', 215, 10, +'A', 'U', 247, 10, +'A', 'S', 60, 11, +'H', 'U', 123, 11, +'C', 'S', 137, 11, +'C', 'S', 181, 11, +0, 0, 211, 1, +'M', 'M', 198, 11, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 29, 1, +0, 0, 31, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 27, 1, +0, 0, 1, 0, +0, 0, 5, 0, +0, 0, 6, 0, +0, 0, 4, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 0, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'<', '>', 124, 0, +0, 0, 61, 2, +'=', '>', 127, 0, +0, 0, 61, 2, +0, 0, 61, 2, +'S', 'T', 129, 0, +0, 0, 47, 0, +0, 0, 61, 2, +0, 0, 134, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'F', 'S', 131, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 71, 1, +'N', 'R', 145, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 2, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 55, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 60, 2, +0, 0, 8, 0, +0, 0, 2, 0, +0, 0, 3, 0, +0, 0, 7, 0, +0, 0, 9, 0, +0, 0, 23, 0, +0, 0, 27, 0, +0, 0, 205, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 209, 0, +0, 0, 229, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 232, 0, +0, 0, 82, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 90, 1, +0, 0, 10, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'D', 'V', 179, 0, +0, 0, 40, 0, +0, 0, 93, 0, +'A', 'I', 220, 0, +0, 0, 146, 0, +0, 0, 177, 0, +0, 0, 61, 2, +0, 0, 61, 2, +'N', 'P', 229, 0, +0, 0, 61, 2, +0, 0, 238, 0, +0, 0, 61, 2, +0, 0, 52, 1, +'D', 'O', 232, 0, +'N', 'U', 244, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 167, 1, +'E', 'S', 252, 0, +0, 0, 61, 2, +0, 0, 27, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'M', 'O', 11, 1, +0, 0, 13, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 17, 0, +0, 0, 61, 2, +'D', 'Y', 198, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 24, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 31, 0, +0, 0, 21, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 22, 0, +0, 0, 109, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 115, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 133, 0, +0, 0, 220, 0, +0, 0, 61, 2, +0, 0, 231, 0, +0, 0, 66, 1, +0, 0, 69, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 75, 1, +0, 0, 83, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 92, 1, +0, 0, 186, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 204, 1, +0, 0, 61, 2, +0, 0, 223, 1, +0, 0, 56, 2, +0, 0, 61, 2, +0, 0, 54, 2, +'L', 'Y', 38, 1, +'A', 'U', 58, 1, +'A', 'U', 87, 1, +'A', 'X', 114, 1, +'A', 'U', 156, 1, +0, 0, 61, 2, +'A', 'O', 177, 1, +'N', 'N', 195, 1, +0, 0, 237, 0, +'E', 'I', 228, 1, +'A', 'O', 233, 1, +0, 0, 53, 1, +'A', 'U', 30, 2, +0, 0, 85, 1, +'A', 'R', 51, 2, +0, 0, 61, 2, +'E', 'O', 69, 2, +'H', 'T', 90, 2, +'E', 'Y', 103, 2, +'N', 'S', 129, 2, +0, 0, 48, 2, +'A', 'O', 135, 2, +0, 0, 53, 2, +0, 0, 57, 2, +0, 0, 41, 0, +0, 0, 61, 2, +0, 0, 61, 2, +'O', 'T', 52, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 48, 0, +0, 0, 43, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 45, 0, +'L', 'S', 79, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 58, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 68, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 96, 0, +0, 0, 50, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 53, 0, +'T', 'T', 108, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 123, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 130, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 136, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 137, 0, +'A', 'E', 109, 1, +0, 0, 103, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 107, 0, +0, 0, 141, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 142, 0, +0, 0, 61, 2, +'D', 'U', 138, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 160, 0, +0, 0, 147, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 150, 0, +0, 0, 166, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 170, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 181, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 182, 0, +0, 0, 194, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 196, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'S', 'U', 192, 1, +0, 0, 198, 0, +0, 0, 61, 2, +0, 0, 200, 0, +'T', 'T', 196, 1, +'1', 'O', 197, 1, +0, 0, 221, 0, +0, 0, 222, 0, +0, 0, 223, 0, +0, 0, 224, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 225, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 228, 0, +0, 0, 239, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 241, 0, +0, 0, 243, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'F', 'S', 248, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'K', 'S', 6, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'O', 15, 2, +0, 0, 247, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 248, 0, +0, 0, 250, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 255, 0, +0, 0, 0, 1, +0, 0, 61, 2, +0, 0, 4, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 7, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 8, 1, +0, 0, 11, 1, +0, 0, 62, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 70, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 74, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 77, 1, +0, 0, 98, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 109, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 113, 1, +'A', 'A', 80, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 168, 1, +'D', 'L', 81, 2, +0, 0, 126, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 130, 1, +0, 0, 188, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 194, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 198, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 228, 1, +0, 0, 248, 1, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'E', 124, 2, +0, 0, 251, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 7, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 9, 2, +0, 0, 249, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 250, 1, +0, 0, 15, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 28, 2, +0, 0, 42, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 44, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 45, 2, +0, 0, 49, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 50, 2, +'F', 'S', 173, 2, +'E', 'T', 187, 2, +'A', 'R', 203, 2, +0, 0, 61, 2, +'R', 'V', 226, 2, +'A', 'O', 237, 2, +'R', 'R', 14, 3, +0, 0, 199, 0, +'N', 'N', 30, 3, +0, 0, 61, 2, +0, 0, 61, 2, +'E', 'O', 43, 3, +'A', 'U', 90, 3, +'A', 'C', 111, 3, +'R', 'W', 114, 3, +'H', 'U', 120, 3, +'U', 'U', 134, 3, +'A', 'T', 140, 3, +'H', 'W', 179, 3, +'A', 'Y', 195, 3, +'N', 'S', 220, 3, +0, 0, 35, 2, +'H', 'R', 247, 3, +0, 0, 14, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 19, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 25, 0, +0, 0, 35, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 42, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 46, 0, +0, 0, 49, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'E', 221, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 66, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 95, 0, +0, 0, 55, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 0, +0, 0, 151, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'E', 'E', 231, 2, +'N', 'R', 232, 2, +0, 0, 155, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 157, 0, +0, 0, 165, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 168, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'R', 'X', 252, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'O', 'U', 3, 3, +0, 0, 61, 2, +0, 0, 61, 2, +'R', 'U', 10, 3, +0, 0, 171, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 172, 0, +0, 0, 173, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 176, 0, +0, 0, 178, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 180, 0, +'A', 'O', 15, 3, +0, 0, 190, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 192, 0, +'D', 'O', 31, 3, +0, 0, 210, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 214, 0, +0, 0, 215, 0, +'A', 'V', 54, 3, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'M', 'N', 76, 3, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'C', 'C', 78, 3, +0, 0, 245, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 249, 0, +0, 0, 251, 0, +0, 0, 253, 0, +'A', 'K', 79, 3, +0, 0, 1, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 5, 1, +0, 0, 30, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 43, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 56, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 60, 1, +0, 0, 63, 1, +0, 0, 61, 2, +0, 0, 68, 1, +0, 0, 91, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 93, 1, +0, 0, 61, 2, +0, 0, 95, 1, +0, 0, 104, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 107, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 121, 1, +'E', 'I', 135, 3, +0, 0, 123, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 124, 1, +0, 0, 125, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'S', 160, 3, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 162, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 163, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 170, 1, +0, 0, 129, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 138, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 154, 1, +0, 0, 187, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 193, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 224, 1, +0, 0, 236, 1, +0, 0, 61, 2, +0, 0, 238, 1, +0, 0, 240, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 10, 2, +'I', 'T', 226, 3, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'I', 238, 3, +0, 0, 17, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 23, 2, +0, 0, 26, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 31, 2, +'E', 'I', 2, 4, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 52, 2, +0, 0, 46, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 47, 2, +0, 0, 12, 0, +'A', 'I', 29, 4, +'H', 'U', 58, 4, +'E', 'O', 74, 4, +'L', 'X', 85, 4, +'A', 'L', 105, 4, +'L', 'R', 125, 4, +0, 0, 195, 0, +'G', 'S', 132, 4, +0, 0, 61, 2, +0, 0, 61, 2, +'E', 'I', 159, 4, +'A', 'O', 164, 4, +0, 0, 61, 2, +'F', 'P', 189, 4, +'A', 'L', 200, 4, +0, 0, 61, 2, +'E', 'O', 212, 4, +'C', 'T', 244, 4, +0, 0, 242, 1, +'N', 'P', 94, 5, +0, 0, 36, 2, +0, 0, 33, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 34, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'G', 'N', 38, 4, +0, 0, 37, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'L', 46, 4, +0, 0, 38, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 39, 0, +0, 0, 56, 0, +0, 0, 63, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 65, 0, +0, 0, 61, 2, +0, 0, 61, 2, +'L', 'M', 72, 4, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 94, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 101, 0, +0, 0, 71, 0, +0, 0, 75, 0, +0, 0, 122, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 135, 0, +0, 0, 143, 0, +0, 0, 61, 2, +'A', 'G', 98, 4, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 152, 0, +0, 0, 153, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 156, 0, +0, 0, 61, 2, +0, 0, 159, 0, +0, 0, 144, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 148, 0, +0, 0, 167, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 169, 0, +0, 0, 61, 2, +0, 0, 61, 2, +'O', 'O', 117, 4, +'A', 'A', 118, 4, +'T', 'T', 119, 4, +'4', '8', 120, 4, +0, 0, 174, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 175, 0, +0, 0, 189, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 191, 0, +0, 0, 206, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 208, 0, +'F', 'S', 145, 4, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 234, 0, +0, 0, 212, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 217, 0, +0, 0, 246, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 252, 0, +0, 0, 13, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'D', 'M', 179, 4, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 48, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 55, 1, +0, 0, 38, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 42, 1, +0, 0, 80, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 88, 1, +0, 0, 97, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 105, 1, +'G', 'V', 223, 4, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 165, 1, +0, 0, 137, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 144, 1, +0, 0, 145, 1, +0, 0, 146, 1, +0, 0, 61, 2, +'A', 'E', 239, 4, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 158, 1, +0, 0, 159, 1, +0, 0, 61, 2, +0, 0, 161, 1, +0, 0, 148, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 152, 1, +0, 0, 173, 1, +0, 0, 61, 2, +'C', 'R', 6, 5, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'G', 'M', 36, 5, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'C', 'U', 49, 5, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'R', 73, 5, +0, 0, 176, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 179, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'I', 'V', 22, 5, +0, 0, 182, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 185, 1, +'N', 'N', 43, 5, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 192, 1, +'A', 'E', 44, 5, +0, 0, 190, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 191, 1, +0, 0, 197, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 199, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'N', 'R', 68, 5, +0, 0, 200, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 201, 1, +'R', 'T', 91, 5, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 231, 1, +0, 0, 226, 1, +0, 0, 61, 2, +0, 0, 227, 1, +'I', 'L', 97, 5, +0, 0, 61, 2, +0, 0, 24, 2, +0, 0, 18, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 20, 2, +'G', 'U', 124, 5, +'E', 'O', 139, 5, +'A', 'O', 150, 5, +'E', 'Y', 191, 5, +'N', 'X', 239, 5, +0, 0, 179, 0, +0, 0, 185, 0, +0, 0, 193, 0, +'N', 'T', 6, 6, +0, 0, 61, 2, +0, 0, 61, 2, +'E', 'O', 32, 6, +0, 0, 47, 1, +'A', 'U', 43, 6, +'P', 'U', 64, 6, +'A', 'R', 70, 6, +0, 0, 122, 1, +'E', 'O', 103, 6, +'C', 'U', 133, 6, +'I', 'R', 170, 6, +'N', 'S', 180, 6, +'A', 'A', 189, 6, +0, 0, 51, 2, +0, 0, 15, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 20, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 28, 0, +0, 0, 36, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 44, 0, +0, 0, 51, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'A', 165, 5, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'L', 'N', 171, 5, +'N', 'R', 166, 5, +0, 0, 57, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 60, 0, +'L', 'U', 174, 5, +'M', 'P', 184, 5, +'T', 'V', 188, 5, +0, 0, 69, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 73, 0, +0, 0, 74, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 77, 0, +0, 0, 89, 0, +0, 0, 61, 2, +0, 0, 92, 0, +'C', 'L', 212, 5, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'S', 'S', 235, 5, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 140, 0, +'I', 'L', 222, 5, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'I', 226, 5, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 120, 0, +0, 0, 116, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 117, 0, +0, 0, 118, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 119, 0, +'A', 'C', 236, 5, +0, 0, 128, 0, +0, 0, 61, 2, +0, 0, 129, 0, +0, 0, 149, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 154, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'E', 'P', 250, 5, +0, 0, 158, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 162, 0, +'D', 'V', 13, 6, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 235, 0, +0, 0, 211, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 219, 0, +0, 0, 226, 0, +0, 0, 61, 2, +0, 0, 236, 0, +0, 0, 244, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 6, 1, +0, 0, 65, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 72, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 78, 1, +0, 0, 87, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 94, 1, +0, 0, 99, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 106, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 108, 1, +0, 0, 61, 2, +0, 0, 61, 2, +'E', 'O', 88, 6, +0, 0, 111, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 114, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'C', 'F', 99, 6, +0, 0, 117, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 119, 1, +'B', 'T', 114, 6, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 166, 1, +0, 0, 131, 1, +0, 0, 132, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 143, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 150, 1, +0, 0, 153, 1, +0, 0, 61, 2, +0, 0, 156, 1, +0, 0, 160, 1, +0, 0, 175, 1, +0, 0, 61, 2, +0, 0, 184, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 202, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 229, 1, +'B', 'S', 152, 6, +0, 0, 233, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 237, 1, +0, 0, 0, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 5, 2, +'I', 'K', 186, 6, +0, 0, 61, 2, +0, 0, 25, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 30, 2, +0, 0, 16, 2, +0, 0, 61, 2, +0, 0, 19, 2, +'R', 'R', 190, 6, +'C', 'Y', 191, 6, +0, 0, 38, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 41, 2, +'A', 'O', 238, 6, +'A', 'U', 21, 7, +'N', 'X', 58, 7, +'U', 'U', 69, 7, +0, 0, 186, 0, +0, 0, 61, 2, +0, 0, 227, 0, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'O', 73, 7, +'A', 'O', 109, 7, +'A', 'V', 137, 7, +'N', 'P', 159, 7, +'A', 'R', 162, 7, +0, 0, 61, 2, +'E', 'O', 191, 7, +'C', 'W', 230, 7, +'I', 'R', 251, 7, +'N', 'T', 47, 8, +0, 0, 61, 2, +0, 0, 43, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 59, 2, +0, 0, 52, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 62, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'N', 253, 6, +0, 0, 67, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'T', 'T', 11, 7, +'A', 'I', 12, 7, +0, 0, 88, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 90, 0, +'T', 'Y', 42, 7, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 124, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 131, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 138, 0, +'A', 'E', 48, 7, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 110, 0, +'B', 'F', 53, 7, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 108, 0, +0, 0, 104, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 106, 0, +0, 0, 145, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 163, 0, +'L', 'N', 70, 7, +0, 0, 183, 0, +0, 0, 61, 2, +0, 0, 184, 0, +0, 0, 242, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'N', 'N', 88, 7, +'G', 'G', 89, 7, +'B', 'T', 90, 7, +0, 0, 9, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 10, 1, +'X', 'X', 124, 7, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 51, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 54, 1, +'V', '_', 125, 7, +0, 0, 37, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'R', 'S', 135, 7, +0, 0, 33, 1, +0, 0, 34, 1, +0, 0, 64, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 79, 1, +0, 0, 84, 1, +0, 0, 61, 2, +0, 0, 86, 1, +0, 0, 103, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'E', 'O', 180, 7, +0, 0, 112, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 120, 1, +'D', 'S', 202, 7, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 164, 1, +0, 0, 134, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 139, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'I', 'T', 218, 7, +0, 0, 155, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 157, 1, +0, 0, 172, 1, +0, 0, 61, 2, +0, 0, 178, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 189, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 196, 1, +0, 0, 195, 1, +0, 0, 61, 2, +0, 0, 203, 1, +0, 0, 206, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 225, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 239, 1, +'N', 'N', 5, 8, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'U', 26, 8, +'Y', 'Y', 6, 8, +'B', 'T', 7, 8, +0, 0, 255, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 1, 2, +0, 0, 3, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 6, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 8, 2, +'D', 'S', 54, 8, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'C', 'C', 70, 8, +0, 0, 14, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 22, 2, +'_', '_', 71, 8, +'D', 'T', 72, 8, +0, 0, 32, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 33, 2, +'G', 'L', 111, 8, +0, 0, 61, 2, +'H', 'O', 117, 8, +'A', 'U', 128, 8, +0, 0, 161, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'O', 'S', 149, 8, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 2, 1, +'E', 'I', 154, 8, +0, 0, 73, 1, +0, 0, 61, 2, +'A', 'R', 159, 8, +0, 0, 61, 2, +'E', 'E', 204, 8, +'A', 'Q', 209, 8, +'E', 'I', 229, 8, +'N', 'N', 242, 8, +'A', 'A', 249, 8, +0, 0, 16, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 18, 0, +0, 0, 59, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'L', 'N', 125, 8, +0, 0, 70, 0, +0, 0, 76, 0, +0, 0, 81, 0, +0, 0, 105, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 127, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 139, 0, +0, 0, 230, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 233, 0, +0, 0, 40, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 46, 1, +'C', 'R', 177, 8, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'E', 'O', 193, 8, +0, 0, 96, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 100, 1, +0, 0, 110, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 116, 1, +'A', 'D', 205, 8, +0, 0, 127, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 135, 1, +0, 0, 171, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'N', 'P', 226, 8, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 210, 1, +0, 0, 180, 1, +0, 0, 61, 2, +0, 0, 181, 1, +'M', 'M', 234, 8, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 252, 1, +'P', 'P', 235, 8, +'O', 'T', 236, 8, +0, 0, 245, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 246, 1, +'D', 'I', 243, 8, +0, 0, 12, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 21, 2, +'R', 'R', 250, 8, +'B', 'I', 251, 8, +0, 0, 37, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 40, 2, +'C', 'S', 28, 9, +0, 0, 61, 2, +'O', 'O', 45, 9, +'A', 'E', 85, 9, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 188, 0, +0, 0, 61, 2, +0, 0, 204, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 254, 0, +'A', 'U', 99, 9, +0, 0, 67, 1, +0, 0, 89, 1, +'A', 'R', 143, 9, +0, 0, 61, 2, +'E', 'O', 161, 9, +'Q', 'Q', 188, 9, +'A', 'E', 199, 9, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 58, 2, +0, 0, 11, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 26, 0, +'M', 'N', 46, 9, +'P', 'P', 48, 9, +'C', 'S', 56, 9, +'L', 'R', 49, 9, +0, 0, 78, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 79, 0, +0, 0, 80, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 82, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'I', 'T', 73, 9, +0, 0, 83, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 84, 0, +'Y', 'Y', 90, 9, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 114, 0, +'_', '_', 91, 9, +'M', 'S', 92, 9, +0, 0, 112, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 113, 0, +0, 0, 21, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'D', 'D', 120, 9, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 58, 1, +'I', 'I', 121, 9, +'U', 'U', 122, 9, +'M', 'M', 123, 9, +'B', 'T', 124, 9, +0, 0, 39, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 41, 1, +0, 0, 102, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 115, 1, +'A', 'P', 172, 9, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 169, 1, +0, 0, 128, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 136, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 147, 1, +0, 0, 149, 1, +'L', 'L', 189, 9, +'W', '_', 190, 9, +0, 0, 207, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 214, 1, +'B', 'B', 204, 9, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 247, 1, +'L', 'L', 205, 9, +'E', 'E', 206, 9, +'S', '_', 207, 9, +0, 0, 243, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 241, 1, +'O', 'U', 239, 9, +0, 0, 132, 0, +0, 0, 164, 0, +0, 0, 61, 2, +0, 0, 61, 2, +'O', 'O', 246, 9, +0, 0, 216, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'Y', 1, 10, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 118, 1, +0, 0, 61, 2, +0, 0, 151, 1, +'C', 'Q', 45, 10, +0, 0, 4, 2, +0, 0, 11, 2, +0, 0, 72, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 102, 0, +'U', 'U', 247, 9, +'R', 'R', 248, 9, +'_', '_', 249, 9, +'M', 'S', 250, 9, +0, 0, 202, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 203, 0, +'S', 'S', 26, 10, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 45, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 1, +'T', 'T', 27, 10, +'E', 'E', 28, 10, +'R', 'R', 29, 10, +'_', '_', 30, 10, +'H', 'U', 31, 10, +0, 0, 15, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 19, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 28, 1, +0, 0, 174, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 218, 1, +'A', 'U', 80, 10, +0, 0, 125, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 213, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 12, 1, +'E', 'U', 125, 10, +0, 0, 61, 2, +0, 0, 81, 1, +0, 0, 101, 1, +0, 0, 61, 2, +0, 0, 142, 1, +'E', 'U', 142, 10, +0, 0, 253, 1, +0, 0, 61, 2, +0, 0, 39, 2, +0, 0, 54, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 64, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 91, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'R', 'R', 101, 10, +'R', 'R', 102, 10, +'E', 'E', 103, 10, +'N', 'N', 104, 10, +'T', 'T', 105, 10, +'_', '_', 106, 10, +'D', 'U', 107, 10, +0, 0, 97, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 98, 0, +0, 0, 100, 0, +0, 0, 44, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 59, 1, +0, 0, 183, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'L', 'L', 159, 10, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 234, 1, +'E', '_', 160, 10, +0, 0, 205, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'N', 'T', 187, 10, +0, 0, 212, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'S', 'S', 194, 10, +'I', 'I', 195, 10, +'_', '_', 196, 10, +'H', 'Y', 197, 10, +0, 0, 217, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 219, 1, +0, 0, 61, 2, +0, 0, 222, 1, +0, 0, 126, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 197, 0, +0, 0, 218, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'I', 233, 10, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 141, 1, +'Q', 'U', 242, 10, +0, 0, 254, 1, +0, 0, 34, 2, +0, 0, 22, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 50, 1, +0, 0, 220, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 230, 1, +0, 0, 235, 1, +'U', 'V', 12, 11, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 240, 0, +0, 0, 3, 1, +'A', 'A', 14, 11, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 140, 1, +'Q', 'Q', 28, 11, +0, 0, 244, 1, +0, 0, 29, 2, +0, 0, 29, 0, +0, 0, 32, 0, +'S', 'S', 15, 11, +'T', 'T', 16, 11, +'E', 'E', 17, 11, +'R', 'R', 18, 11, +'_', '_', 19, 11, +'L', 'S', 20, 11, +0, 0, 17, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 26, 1, +'L', 'L', 29, 11, +'_', '_', 30, 11, +'B', 'T', 31, 11, +0, 0, 208, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'S', 'S', 50, 11, +'I', 'I', 51, 11, +'_', '_', 52, 11, +'M', 'S', 53, 11, +0, 0, 216, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 215, 1, +0, 0, 30, 0, +0, 0, 61, 2, +0, 0, 86, 0, +'A', 'E', 79, 11, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'U', 84, 11, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'Q', 'U', 118, 11, +0, 0, 111, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 121, 0, +'S', 'S', 105, 11, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 57, 1, +'T', 'T', 106, 11, +'E', 'E', 107, 11, +'R', 'R', 108, 11, +'_', '_', 109, 11, +'L', 'S', 110, 11, +0, 0, 16, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 18, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 24, 1, +0, 0, 221, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 232, 1, +0, 0, 201, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 20, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 133, 1, +0, 0, 213, 1, +0, 0, 61, 2, +0, 0, 13, 2, +'O', 'U', 154, 11, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 207, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'A', 'A', 161, 11, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 209, 1, +0, 0, 87, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 99, 0, +'S', 'S', 162, 11, +'T', 'T', 163, 11, +'E', 'E', 164, 11, +'R', 'R', 165, 11, +'_', '_', 166, 11, +'S', 'S', 167, 11, +'S', 'S', 168, 11, +'L', 'L', 169, 11, +'_', '_', 170, 11, +'C', 'C', 171, 11, +'A', 'I', 172, 11, +0, 0, 23, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 25, 1, +0, 0, 85, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 187, 0, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 49, 1, +0, 0, 76, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 177, 1, +'A', 'A', 199, 11, +'S', 'X', 200, 11, +0, 0, 14, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'_', '_', 206, 11, +'Q', 'U', 207, 11, +0, 0, 32, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 61, 2, +'P', 'S', 212, 11, +0, 0, 35, 1, +0, 0, 61, 2, +0, 0, 61, 2, +0, 0, 36, 1, +}; + +static unsigned int sql_functions_max_len=29; + +static unsigned int symbols_max_len=29; + +static SYMBOL *get_hash_symbol(const char *s, + unsigned int len,bool function) +{ + register uchar *hash_map; + register const char *cur_str= s; + + if (len == 0) { + DBUG_PRINT("warning", ("get_hash_symbol() received a request for a zero-length symbol, which is probably a mistake.")); return(NULL); + } + if (function){ + if (len>sql_functions_max_len) return 0; + hash_map= sql_functions_map; + register uint32 cur_struct= uint4korr(hash_map+((len-1)*4)); + + for (;;){ + register uchar first_char= (uchar)cur_struct; + + if (first_char == 0) + { + register int16 ires= (int16)(cur_struct>>16); + if (ires==array_elements(symbols)) return 0; + register SYMBOL *res; + if (ires>=0) + res= symbols+ires; + else + res= sql_functions-ires-1; + register uint count= (uint) (cur_str - s); + return lex_casecmp(cur_str,res->name+count,len-count) ? 0 : res; + } + + register uchar cur_char= (uchar)to_upper_lex[(uchar)*cur_str]; + if (cur_char<first_char) return 0; + cur_struct>>=8; + if (cur_char>(uchar)cur_struct) return 0; + + cur_struct>>=8; + cur_struct= uint4korr(hash_map+ + (((uint16)cur_struct + cur_char - first_char)*4)); + cur_str++; + } + }else{ + if (len>symbols_max_len) return 0; + hash_map= symbols_map; + register uint32 cur_struct= uint4korr(hash_map+((len-1)*4)); + + for (;;){ + register uchar first_char= (uchar)cur_struct; + + if (first_char==0){ + register int16 ires= (int16)(cur_struct>>16); + if (ires==array_elements(symbols)) return 0; + register SYMBOL *res= symbols+ires; + register uint count= (uint) (cur_str - s); + return lex_casecmp(cur_str,res->name+count,len-count)!=0 ? 0 : res; + } + + register uchar cur_char= (uchar)to_upper_lex[(uchar)*cur_str]; + if (cur_char<first_char) return 0; + cur_struct>>=8; + if (cur_char>(uchar)cur_struct) return 0; + + cur_struct>>=8; + cur_struct= uint4korr(hash_map+ + (((uint16)cur_struct + cur_char - first_char)*4)); + cur_str++; + } + } +} diff --git a/sql/lock.cc b/sql/lock.cc index 7937878073e..758ea6cf914 100644 --- a/sql/lock.cc +++ b/sql/lock.cc @@ -73,8 +73,13 @@ we are forced to use mysql_lock_merge. */ -#include "mysql_priv.h" +#include "sql_priv.h" #include "debug_sync.h" +#include "unireg.h" // REQUIRED: for other includes +#include "lock.h" +#include "sql_base.h" // close_tables_for_reopen +#include "sql_parse.h" // is_log_table_write_query +#include "sql_acl.h" // SUPER_ACL #include <hash.h> #include <assert.h> diff --git a/sql/lock.h b/sql/lock.h new file mode 100644 index 00000000000..803bac960b3 --- /dev/null +++ b/sql/lock.h @@ -0,0 +1,104 @@ +#ifndef LOCK_INCLUDED +#define LOCK_INCLUDED + +#include "thr_lock.h" /* thr_lock_type */ + +// Forward declarations +class TABLE; +class TABLE_LIST; +class THD; +typedef struct st_mysql_lock MYSQL_LOCK; + +/* mysql_lock_tables() and open_table() flags bits */ +#define MYSQL_OPEN_IGNORE_GLOBAL_READ_LOCK 0x0001 +#define MYSQL_OPEN_IGNORE_FLUSH 0x0002 +#define MYSQL_OPEN_TEMPORARY_ONLY 0x0004 +#define MYSQL_LOCK_IGNORE_GLOBAL_READ_ONLY 0x0008 +#define MYSQL_LOCK_LOG_TABLE 0x0010 +#define MYSQL_OPEN_TAKE_UPGRADABLE_MDL 0x0020 +/** + Do not try to acquire a metadata lock on the table: we + already have one. +*/ +#define MYSQL_OPEN_HAS_MDL_LOCK 0x0040 +/** + If in locked tables mode, ignore the locked tables and get + a new instance of the table. +*/ +#define MYSQL_OPEN_GET_NEW_TABLE 0x0080 +/** Don't look up the table in the list of temporary tables. */ +#define MYSQL_OPEN_SKIP_TEMPORARY 0x0100 +/** Fail instead of waiting when conficting metadata lock is discovered. */ +#define MYSQL_OPEN_FAIL_ON_MDL_CONFLICT 0x0200 +/** Open tables using MDL_SHARED lock instead of one specified in parser. */ +#define MYSQL_OPEN_FORCE_SHARED_MDL 0x0400 +/** + Open tables using MDL_SHARED_HIGH_PRIO lock instead of one specified + in parser. +*/ +#define MYSQL_OPEN_FORCE_SHARED_HIGH_PRIO_MDL 0x0800 +/** + When opening or locking the table, use the maximum timeout + (LONG_TIMEOUT = 1 year) rather than the user-supplied timeout value. +*/ +#define MYSQL_LOCK_IGNORE_TIMEOUT 0x1000 + +/** Please refer to the internals manual. */ +#define MYSQL_OPEN_REOPEN (MYSQL_OPEN_IGNORE_FLUSH |\ + MYSQL_OPEN_IGNORE_GLOBAL_READ_LOCK |\ + MYSQL_LOCK_IGNORE_GLOBAL_READ_ONLY |\ + MYSQL_LOCK_IGNORE_TIMEOUT |\ + MYSQL_OPEN_GET_NEW_TABLE |\ + MYSQL_OPEN_SKIP_TEMPORARY |\ + MYSQL_OPEN_HAS_MDL_LOCK) + + +#include "thr_lock.h" /* thr_lock_type */ + +class TABLE_LIST; +class THD; +struct TABLE; +typedef struct st_mysql_lock MYSQL_LOCK; + +MYSQL_LOCK *mysql_lock_tables(THD *thd, TABLE **table, uint count, uint flags); +void mysql_unlock_tables(THD *thd, MYSQL_LOCK *sql_lock); +void mysql_unlock_read_tables(THD *thd, MYSQL_LOCK *sql_lock); +void mysql_unlock_some_tables(THD *thd, TABLE **table,uint count); +void mysql_lock_remove(THD *thd, MYSQL_LOCK *locked,TABLE *table); +void mysql_lock_abort(THD *thd, TABLE *table, bool upgrade_lock); +void mysql_lock_downgrade_write(THD *thd, TABLE *table, + thr_lock_type new_lock_type); +bool mysql_lock_abort_for_thread(THD *thd, TABLE *table); +MYSQL_LOCK *mysql_lock_merge(MYSQL_LOCK *a,MYSQL_LOCK *b); +TABLE_LIST *mysql_lock_have_duplicate(THD *thd, TABLE_LIST *needle, + TABLE_LIST *haystack); +bool lock_global_read_lock(THD *thd); +void unlock_global_read_lock(THD *thd); +bool wait_if_global_read_lock(THD *thd, bool abort_on_refresh, + bool is_not_commit); +void start_waiting_global_read_lock(THD *thd); +bool make_global_read_lock_block_commit(THD *thd); +bool set_protect_against_global_read_lock(void); +void unset_protect_against_global_read_lock(void); +/* Lock based on stored routine name */ +bool lock_routine_name(THD *thd, bool is_function, const char *db, + const char *name); +void broadcast_refresh(void); + +/* Lock based on name */ +int lock_and_wait_for_table_name(THD *thd, TABLE_LIST *table_list); +int lock_table_name(THD *thd, TABLE_LIST *table_list, bool check_in_use); +void unlock_table_name(THD *thd, TABLE_LIST *table_list); +bool wait_for_locked_table_names(THD *thd, TABLE_LIST *table_list); +bool lock_table_names(THD *thd, TABLE_LIST *table_list); +void unlock_table_names(THD *thd); +bool lock_table_names_exclusively(THD *thd, TABLE_LIST *table_list); +bool is_table_name_exclusively_locked_by_this_thread(THD *thd, + TABLE_LIST *table_list); +bool is_table_name_exclusively_locked_by_this_thread(THD *thd, uchar *key, + int key_length); +void broadcast_refresh(void); + + + +#endif /* LOCK_INCLUDED */ diff --git a/sql/log.cc b/sql/log.cc index 225fc51ffc6..a3b9a8f835f 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -24,8 +24,16 @@ Abort logging when we get an error in reading or writing log files */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "log.h" +#include "sql_base.h" // close_thread_tables #include "sql_repl.h" +#include "sql_delete.h" // mysql_truncate +#include "sql_parse.h" // command_name +#include "sql_time.h" // calc_time_from_sec, my_time_compare +#include "tztime.h" // my_tz_OFFSET0, struct Time_zone +#include "sql_acl.h" // SUPER_ACL +#include "log_event.h" // Query_log_event #include "rpl_filter.h" #include "rpl_rli.h" #include "sql_audit.h" @@ -38,7 +46,7 @@ #include "message.h" #endif -#include <mysql/plugin.h> +#include "sql_plugin.h" #include "rpl_handler.h" /* max size of the log message */ diff --git a/sql/log.h b/sql/log.h index e9429067a34..71c27f50f78 100644 --- a/sql/log.h +++ b/sql/log.h @@ -16,6 +16,9 @@ #ifndef LOG_H #define LOG_H +#include "unireg.h" // REQUIRED: for other includes +#include "handler.h" /* my_xid */ + class Relay_log_info; class Format_description_log_event; @@ -644,4 +647,36 @@ extern TYPELIB binlog_format_typelib; int query_error_code(THD *thd, bool not_killed); uint purge_log_get_error_code(int res); +int vprint_msg_to_log(enum loglevel level, const char *format, va_list args); +void sql_print_error(const char *format, ...) ATTRIBUTE_FORMAT(printf, 1, 2); +void sql_print_warning(const char *format, ...) ATTRIBUTE_FORMAT(printf, 1, 2); +void sql_print_information(const char *format, ...) + ATTRIBUTE_FORMAT(printf, 1, 2); +typedef void (*sql_print_message_func)(const char *format, ...) + ATTRIBUTE_FORMAT(printf, 1, 2); +extern sql_print_message_func sql_print_message_handlers[]; + +int error_log_print(enum loglevel level, const char *format, + va_list args); + +bool slow_log_print(THD *thd, const char *query, uint query_length, + ulonglong current_utime); + +bool general_log_print(THD *thd, enum enum_server_command command, + const char *format,...); + +bool general_log_write(THD *thd, enum enum_server_command command, + const char *query, uint query_length); + +void sql_perror(const char *message); +bool flush_error_log(); + +File open_binlog(IO_CACHE *log, const char *log_file_name, + const char **errmsg); + +char *make_log_name(char *buff, const char *name, const char* log_ext); + +extern MYSQL_PLUGIN_IMPORT MYSQL_BIN_LOG mysql_bin_log; +extern LOGGER logger; + #endif /* LOG_H */ diff --git a/sql/log_event.cc b/sql/log_event.cc index fe86e78f7e3..a1f8a791c49 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -16,7 +16,7 @@ #ifdef MYSQL_CLIENT -#include "mysql_priv.h" +#include "sql_priv.h" #else @@ -24,7 +24,19 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "my_global.h" // REQUIRED by log_event.h > m_string.h > my_bitmap.h +#include "log_event.h" +#include "sql_base.h" // close_thread_tables +#include "sql_cache.h" // QUERY_CACHE_FLAGS_SIZE +#include "sql_locale.h" // MY_LOCALE, my_locale_by_number, my_locale_en_US +#include "key.h" // key_copy +#include "lock.h" // mysql_unlock_tables +#include "sql_parse.h" // mysql_test_parse_for_slave +#include "tztime.h" // struct Time_zone +#include "sql_load.h" // mysql_load +#include "sql_db.h" // load_db_opt_by_name #include "slave.h" #include "rpl_rli.h" #include "rpl_mi.h" diff --git a/sql/log_event.h b/sql/log_event.h index 81669e24708..36397c427e5 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -28,7 +28,7 @@ #ifndef _log_event_h #define _log_event_h -#if defined(USE_PRAGMA_INTERFACE) && !defined(MYSQL_CLIENT) +#if defined(USE_PRAGMA_INTERFACE) && defined(MYSQL_SERVER) #pragma interface /* gcc class implementation */ #endif @@ -36,17 +36,22 @@ #include "rpl_constants.h" #ifdef MYSQL_CLIENT +#include "sql_const.h" #include "rpl_utility.h" #include "hash.h" #include "rpl_tblmap.h" #include "rpl_tblmap.cc" #endif -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER #include "rpl_record.h" #include "rpl_reporting.h" +#include "sql_class.h" /* THD */ #endif +/* Forward declarations */ +class String; + #define PREFIX_SQL_LOAD "SQL_LOAD-" /** @@ -607,7 +612,7 @@ enum Int_event_type }; -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER class String; class MYSQL_BIN_LOG; class THD; @@ -685,11 +690,9 @@ typedef struct st_print_event_info uint8 common_header_len; char delimiter[16]; -#ifdef MYSQL_CLIENT uint verbose; table_mapping m_table_map; table_mapping m_table_map_ignored; -#endif /* These two caches are used by the row-based replication events to @@ -963,7 +966,7 @@ public: */ ulong slave_exec_mode; -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER THD* thd; Log_event(); @@ -1035,7 +1038,7 @@ public: static void *operator new(size_t, void* ptr) { return ptr; } static void operator delete(void*, void*) { } -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER bool write_header(IO_CACHE* file, ulong data_length); virtual bool write(IO_CACHE* file) { @@ -1109,7 +1112,7 @@ public: /* Return start of query time or current time */ -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) public: /** @@ -1413,7 +1416,7 @@ protected: <td>Q_SQL_MODE_CODE == 1</td> <td>8 byte bitfield</td> <td>The @c sql_mode variable. See the section "SQL Modes" in the - MySQL manual, and see mysql_priv.h for a list of the possible + MySQL manual, and see sql_priv.h for a list of the possible flags. Currently (2007-10-04), the following flags are available: <pre> MODE_REAL_AS_FLOAT==0x1 @@ -1697,7 +1700,7 @@ public: */ uint32 master_data_written; -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER Query_log_event(THD* thd_arg, const char* query_arg, ulong query_length, bool using_trans, bool direct, bool suppress_use, int error); @@ -1720,7 +1723,7 @@ public: my_free((uchar*) data_buf, MYF(0)); } Log_event_type get_type_code() { return QUERY_EVENT; } -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER bool write(IO_CACHE* file); virtual bool write_post_header_for_derived(IO_CACHE* file) { return FALSE; } #endif @@ -1734,7 +1737,7 @@ public: /* Writes derived event-specific part of post header. */ public: /* !!! Public in this patch to allow old usage */ -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual enum_skip_reason do_shall_skip(Relay_log_info *rli); virtual int do_apply_event(Relay_log_info const *rli); virtual int do_update_pos(Relay_log_info *rli); @@ -1809,7 +1812,7 @@ public: int master_log_len; uint16 master_port; -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER Slave_log_event(THD* thd_arg, Relay_log_info* rli); void pack_info(Protocol* protocol); #else @@ -1821,12 +1824,12 @@ public: int get_data_size(); bool is_valid() const { return master_host != 0; } Log_event_type get_type_code() { return SLAVE_EVENT; } -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER bool write(IO_CACHE* file); #endif private: -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_apply_event(Relay_log_info const* rli); #endif }; @@ -2080,7 +2083,7 @@ public: return local_fname; } -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER String field_lens_buf; String fields_buf; @@ -2113,7 +2116,7 @@ public: { return sql_ex.new_format() ? NEW_LOAD_EVENT: LOAD_EVENT; } -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER bool write_data_header(IO_CACHE* file); bool write_data_body(IO_CACHE* file); #endif @@ -2126,7 +2129,7 @@ public: } public: /* !!! Public in this patch to allow old usage */ -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_apply_event(Relay_log_info const* rli) { return do_apply_event(thd->slave_net,rli,0); @@ -2188,7 +2191,7 @@ public: */ bool dont_set_created; -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER Start_log_event_v3(); #ifdef HAVE_REPLICATION void pack_info(Protocol* protocol); @@ -2202,7 +2205,7 @@ public: const Format_description_log_event* description_event); ~Start_log_event_v3() {} Log_event_type get_type_code() { return START_EVENT_V3;} -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER bool write(IO_CACHE* file); #endif bool is_valid() const { return 1; } @@ -2212,7 +2215,7 @@ public: } protected: -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_apply_event(Relay_log_info const *rli); virtual enum_skip_reason do_shall_skip(Relay_log_info*) { @@ -2264,7 +2267,7 @@ public: my_free((uchar*)post_header_len, MYF(MY_ALLOW_ZERO_PTR)); } Log_event_type get_type_code() { return FORMAT_DESCRIPTION_EVENT;} -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER bool write(IO_CACHE* file); #endif bool is_valid() const @@ -2286,7 +2289,7 @@ public: void calc_server_version_split(); protected: -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_apply_event(Relay_log_info const *rli); virtual int do_update_pos(Relay_log_info *rli); virtual enum_skip_reason do_shall_skip(Relay_log_info *rli); @@ -2338,7 +2341,7 @@ public: ulonglong val; uchar type; -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER Intvar_log_event(THD* thd_arg,uchar type_arg, ulonglong val_arg) :Log_event(thd_arg,0,0),val(val_arg),type(type_arg) {} @@ -2355,13 +2358,13 @@ public: Log_event_type get_type_code() { return INTVAR_EVENT;} const char* get_var_type_name(); int get_data_size() { return 9; /* sizeof(type) + sizeof(val) */;} -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER bool write(IO_CACHE* file); #endif bool is_valid() const { return 1; } private: -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_apply_event(Relay_log_info const *rli); virtual int do_update_pos(Relay_log_info *rli); virtual enum_skip_reason do_shall_skip(Relay_log_info *rli); @@ -2414,7 +2417,7 @@ class Rand_log_event: public Log_event ulonglong seed1; ulonglong seed2; -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER Rand_log_event(THD* thd_arg, ulonglong seed1_arg, ulonglong seed2_arg) :Log_event(thd_arg,0,0),seed1(seed1_arg),seed2(seed2_arg) {} @@ -2430,13 +2433,13 @@ class Rand_log_event: public Log_event ~Rand_log_event() {} Log_event_type get_type_code() { return RAND_EVENT;} int get_data_size() { return 16; /* sizeof(ulonglong) * 2*/ } -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER bool write(IO_CACHE* file); #endif bool is_valid() const { return 1; } private: -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_apply_event(Relay_log_info const *rli); virtual int do_update_pos(Relay_log_info *rli); virtual enum_skip_reason do_shall_skip(Relay_log_info *rli); @@ -2460,7 +2463,7 @@ class Xid_log_event: public Log_event public: my_xid xid; -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER Xid_log_event(THD* thd_arg, my_xid x): Log_event(thd_arg,0,0), xid(x) {} #ifdef HAVE_REPLICATION void pack_info(Protocol* protocol); @@ -2474,13 +2477,13 @@ class Xid_log_event: public Log_event ~Xid_log_event() {} Log_event_type get_type_code() { return XID_EVENT;} int get_data_size() { return sizeof(xid); } -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER bool write(IO_CACHE* file); #endif bool is_valid() const { return 1; } private: -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_apply_event(Relay_log_info const *rli); enum_skip_reason do_shall_skip(Relay_log_info *rli); #endif @@ -2510,7 +2513,7 @@ public: uint charset_number; bool is_null; uchar flags; -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER User_var_log_event(THD* thd_arg, char *name_arg, uint name_len_arg, char *val_arg, ulong val_len_arg, Item_result type_arg, uint charset_number_arg, uchar flags_arg) @@ -2527,13 +2530,13 @@ public: const Format_description_log_event *description_event); ~User_var_log_event() {} Log_event_type get_type_code() { return USER_VAR_EVENT;} -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER bool write(IO_CACHE* file); #endif bool is_valid() const { return 1; } private: -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_apply_event(Relay_log_info const *rli); virtual int do_update_pos(Relay_log_info *rli); virtual enum_skip_reason do_shall_skip(Relay_log_info *rli); @@ -2552,7 +2555,7 @@ private: class Stop_log_event: public Log_event { public: -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER Stop_log_event() :Log_event() {} #else @@ -2568,7 +2571,7 @@ public: bool is_valid() const { return 1; } private: -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_update_pos(Relay_log_info *rli); virtual enum_skip_reason do_shall_skip(Relay_log_info *rli) { @@ -2644,7 +2647,7 @@ public: ulonglong pos; uint ident_len; uint flags; -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER Rotate_log_event(const char* new_log_ident_arg, uint ident_len_arg, ulonglong pos_arg, uint flags); @@ -2665,12 +2668,12 @@ public: Log_event_type get_type_code() { return ROTATE_EVENT;} int get_data_size() { return ident_len + ROTATE_HEADER_LEN;} bool is_valid() const { return new_log_ident != 0; } -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER bool write(IO_CACHE* file); #endif private: -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_update_pos(Relay_log_info *rli); virtual enum_skip_reason do_shall_skip(Relay_log_info *rli); #endif @@ -2701,7 +2704,7 @@ public: uint file_id; bool inited_from_old; -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER Create_file_log_event(THD* thd, sql_exchange* ex, const char* db_arg, const char* table_name_arg, List<Item>& fields_arg, @@ -2735,7 +2738,7 @@ public: 4 + 1 + block_len); } bool is_valid() const { return inited_from_old || block != 0; } -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER bool write_data_header(IO_CACHE* file); bool write_data_body(IO_CACHE* file); /* @@ -2746,7 +2749,7 @@ public: #endif private: -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_apply_event(Relay_log_info const *rli); #endif }; @@ -2777,7 +2780,7 @@ public: */ const char* db; -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER Append_block_log_event(THD* thd, const char* db_arg, uchar* block_arg, uint block_len_arg, bool using_trans); #ifdef HAVE_REPLICATION @@ -2795,13 +2798,13 @@ public: Log_event_type get_type_code() { return APPEND_BLOCK_EVENT;} int get_data_size() { return block_len + APPEND_BLOCK_HEADER_LEN ;} bool is_valid() const { return block != 0; } -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER bool write(IO_CACHE* file); const char* get_db() { return db; } #endif private: -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_apply_event(Relay_log_info const *rli); #endif }; @@ -2819,7 +2822,7 @@ public: uint file_id; const char* db; /* see comment in Append_block_log_event */ -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER Delete_file_log_event(THD* thd, const char* db_arg, bool using_trans); #ifdef HAVE_REPLICATION void pack_info(Protocol* protocol); @@ -2836,13 +2839,13 @@ public: Log_event_type get_type_code() { return DELETE_FILE_EVENT;} int get_data_size() { return DELETE_FILE_HEADER_LEN ;} bool is_valid() const { return file_id != 0; } -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER bool write(IO_CACHE* file); const char* get_db() { return db; } #endif private: -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_apply_event(Relay_log_info const *rli); #endif }; @@ -2860,7 +2863,7 @@ public: uint file_id; const char* db; /* see comment in Append_block_log_event */ -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER Execute_load_log_event(THD* thd, const char* db_arg, bool using_trans); #ifdef HAVE_REPLICATION void pack_info(Protocol* protocol); @@ -2876,13 +2879,13 @@ public: Log_event_type get_type_code() { return EXEC_LOAD_EVENT;} int get_data_size() { return EXEC_LOAD_HEADER_LEN ;} bool is_valid() const { return file_id != 0; } -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER bool write(IO_CACHE* file); const char* get_db() { return db; } #endif private: -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_apply_event(Relay_log_info const *rli); #endif }; @@ -2900,7 +2903,7 @@ private: class Begin_load_query_log_event: public Append_block_log_event { public: -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER Begin_load_query_log_event(THD* thd_arg, const char *db_arg, uchar* block_arg, uint block_len_arg, bool using_trans); @@ -2915,7 +2918,7 @@ public: ~Begin_load_query_log_event() {} Log_event_type get_type_code() { return BEGIN_LOAD_QUERY_EVENT; } private: -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual enum_skip_reason do_shall_skip(Relay_log_info *rli); #endif }; @@ -2951,7 +2954,7 @@ public: */ enum_load_dup_handling dup_handling; -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER Execute_load_query_log_event(THD* thd, const char* query_arg, ulong query_length, uint fn_pos_start_arg, uint fn_pos_end_arg, @@ -2976,12 +2979,12 @@ public: bool is_valid() const { return Query_log_event::is_valid() && file_id != 0; } ulong get_post_header_size_for_derived(); -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER bool write_post_header_for_derived(IO_CACHE* file); #endif private: -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_apply_event(Relay_log_info const *rli); #endif }; @@ -3371,7 +3374,7 @@ public: flag_set get_flags(flag_set flag) const { return m_flags & flag; } -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER Table_map_log_event(THD *thd, TABLE *tbl, ulong tid, bool is_transactional); #endif #ifdef HAVE_REPLICATION @@ -3396,14 +3399,14 @@ public: virtual bool is_valid() const { return m_memory != NULL; /* we check malloc */ } virtual int get_data_size() { return (uint) m_data_size; } -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER virtual int save_field_metadata(); virtual bool write_data_header(IO_CACHE *file); virtual bool write_data_body(IO_CACHE *file); virtual const char *get_db() { return m_dbnam; } #endif -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual void pack_info(Protocol *protocol); #endif @@ -3413,13 +3416,13 @@ public: private: -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_apply_event(Relay_log_info const *rli); virtual int do_update_pos(Relay_log_info *rli); virtual enum_skip_reason do_shall_skip(Relay_log_info *rli); #endif -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER TABLE *m_table; #endif char const *m_dbnam; @@ -3515,7 +3518,7 @@ public: void clear_flags(flag_set flags_arg) { m_flags &= ~flags_arg; } flag_set get_flags(flag_set flags_arg) const { return m_flags & flags_arg; } -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual void pack_info(Protocol *protocol); #endif @@ -3530,7 +3533,7 @@ public: const uchar *ptr, const uchar *prefix); #endif -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER int add_row_data(uchar *data, size_t length) { return do_add_row_data(data,length); @@ -3544,7 +3547,7 @@ public: size_t get_width() const { return m_width; } ulong get_table_id() const { return m_table_id; } -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER virtual bool write_data_header(IO_CACHE *file); virtual bool write_data_body(IO_CACHE *file); virtual const char *get_db() { return m_table->s->db.str; } @@ -3567,7 +3570,7 @@ protected: The constructors are protected since you're supposed to inherit this class, not create instances of this class. */ -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER Rows_log_event(THD*, TABLE*, ulong table_id, MY_BITMAP const *cols, bool is_transactional); #endif @@ -3579,11 +3582,11 @@ protected: void print_helper(FILE *, PRINT_EVENT_INFO *, char const *const name); #endif -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER virtual int do_add_row_data(uchar *data, size_t length); #endif -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER TABLE *m_table; /* The table the rows belong to */ #endif ulong m_table_id; /* Table ID */ @@ -3612,7 +3615,7 @@ protected: /* helper functions */ -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) const uchar *m_curr_row; /* Start of the row being processed */ const uchar *m_curr_row_end; /* One-after the end of the current row */ uchar *m_key; /* Buffer to keep key value during searches */ @@ -3640,7 +3643,7 @@ protected: private: -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_apply_event(Relay_log_info const *rli); virtual int do_update_pos(Relay_log_info *rli); virtual enum_skip_reason do_shall_skip(Relay_log_info *rli); @@ -3695,7 +3698,7 @@ private: */ virtual int do_exec_row(const Relay_log_info *const rli) = 0; -#endif /* !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) */ +#endif /* defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) */ friend class Old_rows_log_event; }; @@ -3718,7 +3721,7 @@ public: TYPE_CODE = WRITE_ROWS_EVENT }; -#if !defined(MYSQL_CLIENT) +#if defined(MYSQL_SERVER) Write_rows_log_event(THD*, TABLE*, ulong table_id, MY_BITMAP const *cols, bool is_transactional); #endif @@ -3726,7 +3729,7 @@ public: Write_rows_log_event(const char *buf, uint event_len, const Format_description_log_event *description_event); #endif -#if !defined(MYSQL_CLIENT) +#if defined(MYSQL_SERVER) static bool binlog_row_logging_function(THD *thd, TABLE *table, bool is_transactional, MY_BITMAP *cols, @@ -3747,7 +3750,7 @@ private: void print(FILE *file, PRINT_EVENT_INFO *print_event_info); #endif -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_before_row_operations(const Slave_reporting_capability *const); virtual int do_after_row_operations(const Slave_reporting_capability *const,int); virtual int do_exec_row(const Relay_log_info *const); @@ -3776,7 +3779,7 @@ public: TYPE_CODE = UPDATE_ROWS_EVENT }; -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER Update_rows_log_event(THD*, TABLE*, ulong table_id, MY_BITMAP const *cols_bi, MY_BITMAP const *cols_ai, @@ -3796,7 +3799,7 @@ public: const Format_description_log_event *description_event); #endif -#if !defined(MYSQL_CLIENT) +#ifdef MYSQL_SERVER static bool binlog_row_logging_function(THD *thd, TABLE *table, bool is_transactional, MY_BITMAP *cols, @@ -3821,11 +3824,11 @@ protected: void print(FILE *file, PRINT_EVENT_INFO *print_event_info); #endif -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_before_row_operations(const Slave_reporting_capability *const); virtual int do_after_row_operations(const Slave_reporting_capability *const,int); virtual int do_exec_row(const Relay_log_info *const); -#endif /* !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) */ +#endif /* defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) */ }; /** @@ -3857,7 +3860,7 @@ public: TYPE_CODE = DELETE_ROWS_EVENT }; -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER Delete_rows_log_event(THD*, TABLE*, ulong, MY_BITMAP const *cols, bool is_transactional); #endif @@ -3865,7 +3868,7 @@ public: Delete_rows_log_event(const char *buf, uint event_len, const Format_description_log_event *description_event); #endif -#if !defined(MYSQL_CLIENT) +#ifdef MYSQL_SERVER static bool binlog_row_logging_function(THD *thd, TABLE *table, bool is_transactional, MY_BITMAP *cols, @@ -3886,7 +3889,7 @@ protected: void print(FILE *file, PRINT_EVENT_INFO *print_event_info); #endif -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_before_row_operations(const Slave_reporting_capability *const); virtual int do_after_row_operations(const Slave_reporting_capability *const,int); virtual int do_exec_row(const Relay_log_info *const); @@ -3934,7 +3937,7 @@ protected: */ class Incident_log_event : public Log_event { public: -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER Incident_log_event(THD *thd_arg, Incident incident) : Log_event(thd_arg, 0, FALSE), m_incident(incident) { @@ -3957,7 +3960,7 @@ public: } #endif -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER void pack_info(Protocol*); #endif @@ -3970,7 +3973,7 @@ public: virtual void print(FILE *file, PRINT_EVENT_INFO *print_event_info); #endif -#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_apply_event(Relay_log_info const *rli); #endif @@ -4002,7 +4005,7 @@ static inline bool copy_event_cache_to_file_and_reinit(IO_CACHE *cache, reinit_io_cache(cache, WRITE_CACHE, 0, FALSE, TRUE); } -#ifndef MYSQL_CLIENT +#ifdef MYSQL_SERVER /***************************************************************************** Heartbeat Log Event class @@ -4038,6 +4041,9 @@ private: }; #endif +int append_query_string(CHARSET_INFO *csinfo, + String const *from, String *to); + /** @} (end of group Replication) */ diff --git a/sql/log_event_old.cc b/sql/log_event_old.cc index c55aaa2b0fb..a80e8f4b1a2 100644 --- a/sql/log_event_old.cc +++ b/sql/log_event_old.cc @@ -1,6 +1,16 @@ -#include "mysql_priv.h" +#include "sql_priv.h" #ifndef MYSQL_CLIENT +#include "unireg.h" +#endif +#include "my_global.h" // REQUIRED by log_event.h > m_string.h > my_bitmap.h +#include "log_event.h" +#ifndef MYSQL_CLIENT +#include "sql_cache.h" // QUERY_CACHE_FLAGS_SIZE +#include "sql_base.h" // close_tables_for_reopen +#include "key.h" // key_copy +#include "lock.h" // mysql_unlock_tables +#include "sql_parse.h" // mysql_reset_thd_for_next_command #include "rpl_rli.h" #include "rpl_utility.h" #endif diff --git a/sql/mf_iocache.cc b/sql/mf_iocache.cc index 8c2d16c40b0..d20d93ff0b9 100644 --- a/sql/mf_iocache.cc +++ b/sql/mf_iocache.cc @@ -32,7 +32,8 @@ flush_io_cache(). */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "sql_class.h" // THD #ifdef HAVE_REPLICATION extern "C" { diff --git a/sql/my_decimal.cc b/sql/my_decimal.cc index 234a0a98782..68f9b582dd2 100644 --- a/sql/my_decimal.cc +++ b/sql/my_decimal.cc @@ -13,9 +13,12 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" #include <time.h> +#ifndef MYSQL_CLIENT +#include "sql_class.h" // THD +#endif #ifndef MYSQL_CLIENT /** diff --git a/sql/my_decimal.h b/sql/my_decimal.h index 21669e82c44..abf4b178422 100644 --- a/sql/my_decimal.h +++ b/sql/my_decimal.h @@ -28,10 +28,17 @@ #ifndef my_decimal_h #define my_decimal_h +#if defined(MYSQL_SERVER) || defined(EMBEDDED_LIBRARY) +#include "sql_string.h" /* String */ +#endif + C_MODE_START #include <decimal.h> C_MODE_END +class String; +typedef struct st_mysql_time MYSQL_TIME; + #define DECIMAL_LONGLONG_DIGITS 22 #define DECIMAL_LONG_DIGITS 10 #define DECIMAL_LONG3_DIGITS 8 @@ -133,6 +140,12 @@ const char *dbug_decimal_as_string(char *buff, const my_decimal *val); #define dbug_decimal_as_string(A) NULL #endif +bool str_set_decimal(uint mask, const my_decimal *val, uint fixed_prec, + uint fixed_dec, char filler, String *str, + CHARSET_INFO *cs); + +extern my_decimal decimal_zero; + #ifndef MYSQL_CLIENT int decimal_operation_results(int result); #else @@ -289,7 +302,14 @@ int my_decimal_ceiling(uint mask, const my_decimal *from, my_decimal *to) } +inline bool str_set_decimal(const my_decimal *val, String *str, + CHARSET_INFO *cs) +{ + return str_set_decimal(E_DEC_FATAL_ERROR, val, 0, 0, 0, str, cs); +} + #ifndef MYSQL_CLIENT +class String; int my_decimal2string(uint mask, const my_decimal *d, uint fixed_prec, uint fixed_dec, char filler, String *str); #endif diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h deleted file mode 100644 index 6b77c95c76f..00000000000 --- a/sql/mysql_priv.h +++ /dev/null @@ -1,2750 +0,0 @@ -/* Copyright 2000-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/** - @file - - @details - Mostly this file is used in the server. But a little part of it is used in - mysqlbinlog too (definition of SELECT_DISTINCT and others). - The consequence is that 90% of the file is wrapped in \#ifndef MYSQL_CLIENT, - except the part which must be in the server and in the client. -*/ - -#ifndef MYSQL_PRIV_H -#define MYSQL_PRIV_H - -#ifndef MYSQL_CLIENT - -/* - the following #define adds server-only members to enum_mysql_show_type, - that is defined in mysql/plugin.h - it has to be before mysql/plugin.h is included. -*/ -#define SHOW_always_last SHOW_KEY_CACHE_LONG, \ - SHOW_KEY_CACHE_LONGLONG, SHOW_LONG_STATUS, SHOW_DOUBLE_STATUS, \ - SHOW_HAVE, SHOW_MY_BOOL, SHOW_HA_ROWS, SHOW_SYS, \ - SHOW_LONG_NOFLUSH, SHOW_LONGLONG_STATUS, SHOW_LEX_STRING - -#include <my_global.h> -#include <mysql_version.h> -#include <mysql_embed.h> -#include <my_sys.h> -#include <my_time.h> -#include <m_string.h> -#include <hash.h> -#include <signal.h> -#include <thr_lock.h> -#include <my_base.h> /* Needed by field.h */ -#include <queues.h> -#include "sql_bitmap.h" -#include "sql_array.h" -#include "sql_plugin.h" -#include "scheduler.h" -#include <my_atomic.h> -#include <mysql/psi/mysql_file.h> -#ifndef __WIN__ -#include <netdb.h> -#endif - -class Parser_state; - -/** - Query type constants. - - QT_ORDINARY -- ordinary SQL query. - QT_IS -- SQL query to be shown in INFORMATION_SCHEMA (in utf8 and without - character set introducers). -*/ -enum enum_query_type -{ - QT_ORDINARY, - QT_IS -}; - -/* TODO convert all these three maps to Bitmap classes */ -typedef ulonglong table_map; /* Used for table bits in join */ -#if MAX_INDEXES <= 64 -typedef Bitmap<64> key_map; /* Used for finding keys */ -#else -typedef Bitmap<((MAX_INDEXES+7)/8*8)> key_map; /* Used for finding keys */ -#endif -typedef ulong nesting_map; /* Used for flags of nesting constructs */ -/* - Used to identify NESTED_JOIN structures within a join (applicable only to - structures that have not been simplified away and embed more the one - element) -*/ -typedef ulonglong nested_join_map; - -/* query_id */ -typedef int64 query_id_t; -extern query_id_t global_query_id; -extern int32 thread_running; -extern my_atomic_rwlock_t global_query_id_lock; -extern my_atomic_rwlock_t thread_running_lock; - -/* increment query_id and return it. */ -inline query_id_t next_query_id() -{ - query_id_t id; - my_atomic_rwlock_wrlock(&global_query_id_lock); - id= my_atomic_add64(&global_query_id, 1); - my_atomic_rwlock_wrunlock(&global_query_id_lock); - return (id+1); -} - -inline query_id_t get_query_id() -{ - query_id_t id; - my_atomic_rwlock_wrlock(&global_query_id_lock); - id= my_atomic_load64(&global_query_id); - my_atomic_rwlock_wrunlock(&global_query_id_lock); - return id; -} - -inline int32 -inc_thread_running() -{ - int32 num_thread_running; - my_atomic_rwlock_wrlock(&thread_running_lock); - num_thread_running= my_atomic_add32(&thread_running, 1); - my_atomic_rwlock_wrunlock(&thread_running_lock); - return (num_thread_running+1); -} - -inline int32 -dec_thread_running() -{ - int32 num_thread_running; - my_atomic_rwlock_wrlock(&thread_running_lock); - num_thread_running= my_atomic_add32(&thread_running, -1); - my_atomic_rwlock_wrunlock(&thread_running_lock); - return (num_thread_running-1); -} - -inline int32 -get_thread_running() -{ - int32 num_thread_running; - my_atomic_rwlock_wrlock(&thread_running_lock); - num_thread_running= my_atomic_load32(&thread_running); - my_atomic_rwlock_wrunlock(&thread_running_lock); - return num_thread_running; -} - -/* useful constants */ -extern MYSQL_PLUGIN_IMPORT const key_map key_map_empty; -extern MYSQL_PLUGIN_IMPORT key_map key_map_full; /* Should be threaded as const */ -extern MYSQL_PLUGIN_IMPORT const char *primary_key_name; - -#include "mysql_com.h" -#include <violite.h> -#include "unireg.h" - -void init_sql_alloc(MEM_ROOT *root, uint block_size, uint pre_alloc_size); -void *sql_alloc(size_t); -void *sql_calloc(size_t); -char *sql_strdup(const char *str); -char *sql_strmake(const char *str, size_t len); -void *sql_memdup(const void * ptr, size_t size); -void sql_element_free(void *ptr); -char *sql_strmake_with_convert(const char *str, size_t arg_length, - CHARSET_INFO *from_cs, - size_t max_res_length, - CHARSET_INFO *to_cs, size_t *result_length); -uint kill_one_thread(THD *thd, ulong id, bool only_kill_query); -void sql_kill(THD *thd, ulong id, bool only_kill_query); -bool net_request_file(NET* net, const char* fname); -char* query_table_status(THD *thd,const char *db,const char *table_name); - -#define x_free(A) { my_free((uchar*) (A),MYF(MY_WME | MY_FAE | MY_ALLOW_ZERO_PTR)); } -#define safeFree(x) { if(x) { my_free((uchar*) x,MYF(0)); x = NULL; } } -#define PREV_BITS(type,A) ((type) (((type) 1 << (A)) -1)) -#define all_bits_set(A,B) ((A) & (B) != (B)) - -/* - Generates a warning that a feature is deprecated. After a specified - version asserts that the feature is removed. - - Using it as - - WARN_DEPRECATED(thd, 6,2, "BAD", "'GOOD'"); - - Will result in a warning - - "The syntax 'BAD' is deprecated and will be removed in MySQL 6.2. Please - use 'GOOD' instead" - - Note that in macro arguments BAD is not quoted, while 'GOOD' is. - Note that the version is TWO numbers, separated with a comma - (two macro arguments, that is) -*/ -#define WARN_DEPRECATED(Thd,VerHi,VerLo,Old,New) \ - do { \ - compile_time_assert(MYSQL_VERSION_ID < VerHi * 10000 + VerLo * 100); \ - if (((THD *) Thd) != NULL) \ - push_warning_printf(((THD *) Thd), MYSQL_ERROR::WARN_LEVEL_WARN, \ - ER_WARN_DEPRECATED_SYNTAX, \ - ER(ER_WARN_DEPRECATED_SYNTAX), \ - (Old), (New)); \ - else \ - sql_print_warning("The syntax '%s' is deprecated and will be removed " \ - "in a future release. Please use %s instead.", \ - (Old), (New)); \ - } while(0) - -extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *system_charset_info; -extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *files_charset_info ; -extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *national_charset_info; -extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *table_alias_charset; - -/** - Character set of the buildin error messages loaded from errmsg.sys. -*/ -extern CHARSET_INFO *error_message_charset_info; - -enum Derivation -{ - DERIVATION_IGNORABLE= 6, - DERIVATION_NUMERIC= 5, - DERIVATION_COERCIBLE= 4, - DERIVATION_SYSCONST= 3, - DERIVATION_IMPLICIT= 2, - DERIVATION_NONE= 1, - DERIVATION_EXPLICIT= 0 -}; - -#define my_charset_numeric my_charset_latin1 -#define MY_REPERTOIRE_NUMERIC MY_REPERTOIRE_ASCII - -typedef struct my_locale_errmsgs -{ - const char *language; - const char **errmsgs; -} MY_LOCALE_ERRMSGS; - -extern char err_shared_dir[]; - -/** @note Keep this a POD-type because we use offsetof() on it */ -typedef struct my_locale_st -{ - uint number; - const char *name; - const char *description; - const bool is_ascii; - TYPELIB *month_names; - TYPELIB *ab_month_names; - TYPELIB *day_names; - TYPELIB *ab_day_names; - uint max_month_name_length; - uint max_day_name_length; - uint decimal_point; - uint thousand_sep; - const char *grouping; - MY_LOCALE_ERRMSGS *errmsgs; -#ifdef __cplusplus - my_locale_st(uint number_par, - const char *name_par, const char *descr_par, bool is_ascii_par, - TYPELIB *month_names_par, TYPELIB *ab_month_names_par, - TYPELIB *day_names_par, TYPELIB *ab_day_names_par, - uint max_month_name_length_par, uint max_day_name_length_par, - uint decimal_point_par, uint thousand_sep_par, - const char *grouping_par, MY_LOCALE_ERRMSGS *errmsgs_par) : - number(number_par), - name(name_par), description(descr_par), is_ascii(is_ascii_par), - month_names(month_names_par), ab_month_names(ab_month_names_par), - day_names(day_names_par), ab_day_names(ab_day_names_par), - max_month_name_length(max_month_name_length_par), - max_day_name_length(max_day_name_length_par), - decimal_point(decimal_point_par), - thousand_sep(thousand_sep_par), - grouping(grouping_par), - errmsgs(errmsgs_par) - {} -#endif -} MY_LOCALE; - -extern MY_LOCALE my_locale_en_US; -extern MY_LOCALE *my_locales[]; -extern MY_LOCALE *my_default_lc_messages; -extern MY_LOCALE *my_default_lc_time_names; - -MY_LOCALE *my_locale_by_name(const char *name); -MY_LOCALE *my_locale_by_number(uint number); - -void cleanup_errmsgs(void); - -/*************************************************************************/ - -/** - Object_creation_ctx -- interface for creation context of database objects - (views, stored routines, events, triggers). Creation context -- is a set - of attributes, that should be fixed at the creation time and then be used - each time the object is parsed or executed. -*/ - -class Object_creation_ctx -{ -public: - Object_creation_ctx *set_n_backup(THD *thd); - - void restore_env(THD *thd, Object_creation_ctx *backup_ctx); - -protected: - Object_creation_ctx() {} - virtual Object_creation_ctx *create_backup_ctx(THD *thd) const = 0; - - virtual void change_env(THD *thd) const = 0; - -public: - virtual ~Object_creation_ctx() - { } -}; - -/*************************************************************************/ - -/** - Default_object_creation_ctx -- default implementation of - Object_creation_ctx. -*/ - -class Default_object_creation_ctx : public Object_creation_ctx -{ -public: - CHARSET_INFO *get_client_cs() - { - return m_client_cs; - } - - CHARSET_INFO *get_connection_cl() - { - return m_connection_cl; - } - -protected: - Default_object_creation_ctx(THD *thd); - - Default_object_creation_ctx(CHARSET_INFO *client_cs, - CHARSET_INFO *connection_cl); - -protected: - virtual Object_creation_ctx *create_backup_ctx(THD *thd) const; - - virtual void change_env(THD *thd) const; - -protected: - /** - client_cs stores the value of character_set_client session variable. - The only character set attribute is used. - - Client character set is included into query context, because we save - query in the original character set, which is client character set. So, - in order to parse the query properly we have to switch client character - set on parsing. - */ - CHARSET_INFO *m_client_cs; - - /** - connection_cl stores the value of collation_connection session - variable. Both character set and collation attributes are used. - - Connection collation is included into query context, becase it defines - the character set and collation of text literals in internal - representation of query (item-objects). - */ - CHARSET_INFO *m_connection_cl; -}; - -/*************************************************************************** - Configuration parameters -****************************************************************************/ - -#define ACL_CACHE_SIZE 256 -#define MAX_PASSWORD_LENGTH 32 -#define HOST_CACHE_SIZE 128 -#define MAX_ACCEPT_RETRY 10 // Test accept this many times -#define MAX_FIELDS_BEFORE_HASH 32 -#define USER_VARS_HASH_SIZE 16 -#define TABLE_OPEN_CACHE_MIN 400 -#define TABLE_OPEN_CACHE_DEFAULT 400 -#define TABLE_DEF_CACHE_DEFAULT 400 -/** - We must have room for at least 400 table definitions in the table - cache, since otherwise there is no chance prepared - statements that use these many tables can work. - Prepared statements use table definition cache ids (table_map_id) - as table version identifiers. If the table definition - cache size is less than the number of tables used in a statement, - the contents of the table definition cache is guaranteed to rotate - between a prepare and execute. This leads to stable validation - errors. In future we shall use more stable version identifiers, - for now the only solution is to ensure that the table definition - cache can contain at least all tables of a given statement. -*/ -#define TABLE_DEF_CACHE_MIN 400 - -/* - Stack reservation. - Feel free to raise this by the smallest amount you can to get the - "execution_constants" test to pass. -*/ -#define STACK_MIN_SIZE 16000 // Abort if less stack during eval. - -#define STACK_MIN_SIZE_FOR_OPEN 1024*80 -#define STACK_BUFF_ALLOC 352 ///< For stack overrun checks -#ifndef MYSQLD_NET_RETRY_COUNT -#define MYSQLD_NET_RETRY_COUNT 10 ///< Abort read after this many int. -#endif -#define TEMP_POOL_SIZE 128 - -#define QUERY_ALLOC_BLOCK_SIZE 8192 -#define QUERY_ALLOC_PREALLOC_SIZE 8192 -#define TRANS_ALLOC_BLOCK_SIZE 4096 -#define TRANS_ALLOC_PREALLOC_SIZE 4096 -#define RANGE_ALLOC_BLOCK_SIZE 4096 -#define ACL_ALLOC_BLOCK_SIZE 1024 -#define UDF_ALLOC_BLOCK_SIZE 1024 -#define TABLE_ALLOC_BLOCK_SIZE 1024 -#define BDB_LOG_ALLOC_BLOCK_SIZE 1024 -#define WARN_ALLOC_BLOCK_SIZE 2048 -#define WARN_ALLOC_PREALLOC_SIZE 1024 -#define PROFILE_ALLOC_BLOCK_SIZE 2048 -#define PROFILE_ALLOC_PREALLOC_SIZE 1024 - -/* - The following parameters is to decide when to use an extra cache to - optimise seeks when reading a big table in sorted order -*/ -#define MIN_FILE_LENGTH_TO_USE_ROW_CACHE (10L*1024*1024) -#define MIN_ROWS_TO_USE_TABLE_CACHE 100 -#define MIN_ROWS_TO_USE_BULK_INSERT 100 - -/** - The following is used to decide if MySQL should use table scanning - instead of reading with keys. The number says how many evaluation of the - WHERE clause is comparable to reading one extra row from a table. -*/ -#define TIME_FOR_COMPARE 5 // 5 compares == one read - -/** - Number of comparisons of table rowids equivalent to reading one row from a - table. -*/ -#define TIME_FOR_COMPARE_ROWID (TIME_FOR_COMPARE*2) - -/* - For sequential disk seeks the cost formula is: - DISK_SEEK_BASE_COST + DISK_SEEK_PROP_COST * #blocks_to_skip - - The cost of average seek - DISK_SEEK_BASE_COST + DISK_SEEK_PROP_COST*BLOCKS_IN_AVG_SEEK =1.0. -*/ -#define DISK_SEEK_BASE_COST ((double)0.5) - -#define BLOCKS_IN_AVG_SEEK 128 - -#define DISK_SEEK_PROP_COST ((double)0.5/BLOCKS_IN_AVG_SEEK) - - -/** - Number of rows in a reference table when refereed through a not unique key. - This value is only used when we don't know anything about the key - distribution. -*/ -#define MATCHING_ROWS_IN_OTHER_TABLE 10 - -/** Don't pack string keys shorter than this (if PACK_KEYS=1 isn't used). */ -#define KEY_DEFAULT_PACK_LENGTH 8 - -/** Characters shown for the command in 'show processlist'. */ -#define PROCESS_LIST_WIDTH 100 -/* Characters shown for the command in 'information_schema.processlist' */ -#define PROCESS_LIST_INFO_WIDTH 65535 - -#define PRECISION_FOR_DOUBLE 53 -#define PRECISION_FOR_FLOAT 24 - -/* -[digits].E+## */ -#define MAX_FLOAT_STR_LENGTH (FLT_DIG + 6) -/* -[digits].E+### */ -#define MAX_DOUBLE_STR_LENGTH (DBL_DIG + 7) - -/* - Default time to wait before aborting a new client connection - that does not respond to "initial server greeting" timely -*/ -#define CONNECT_TIMEOUT 10 - -/* The following can also be changed from the command line */ -#define DEFAULT_CONCURRENCY 10 -#define DELAYED_LIMIT 100 /**< pause after xxx inserts */ -#define DELAYED_QUEUE_SIZE 1000 -#define DELAYED_WAIT_TIMEOUT 5*60 /**< Wait for delayed insert */ -#define FLUSH_TIME 0 /**< Don't flush tables */ -#define MAX_CONNECT_ERRORS 10 ///< errors before disabling host - -#if defined(__WIN__) -#undef FLUSH_TIME -#define FLUSH_TIME 1800 /**< Flush every half hour */ -#endif /* __WIN__ */ - - /* Bits from testflag */ -#define TEST_PRINT_CACHED_TABLES 1 -#define TEST_NO_KEY_GROUP 2 -#define TEST_MIT_THREAD 4 -#define TEST_BLOCKING 8 -#define TEST_KEEP_TMP_TABLES 16 -#define TEST_READCHECK 64 /**< Force use of readcheck */ -#define TEST_NO_EXTRA 128 -#define TEST_CORE_ON_SIGNAL 256 /**< Give core if signal */ -#define TEST_NO_STACKTRACE 512 -#define TEST_SIGINT 1024 /**< Allow sigint on threads */ -#define TEST_SYNCHRONIZATION 2048 /**< get server to do sleep in - some places */ -#endif - -/* - This is included in the server and in the client. - Options for select set by the yacc parser (stored in lex->options). - - NOTE - log_event.h defines OPTIONS_WRITTEN_TO_BIN_LOG to specify what THD - options list are written into binlog. These options can NOT change their - values, or it will break replication between version. - - context is encoded as following: - SELECT - SELECT_LEX_NODE::options - THD - THD::options - intern - neither. used only as - func(..., select_node->options | thd->options | OPTION_XXX, ...) - - TODO: separate three contexts above, move them to separate bitfields. -*/ - -#define SELECT_DISTINCT (1ULL << 0) // SELECT, user -#define SELECT_STRAIGHT_JOIN (1ULL << 1) // SELECT, user -#define SELECT_DESCRIBE (1ULL << 2) // SELECT, user -#define SELECT_SMALL_RESULT (1ULL << 3) // SELECT, user -#define SELECT_BIG_RESULT (1ULL << 4) // SELECT, user -#define OPTION_FOUND_ROWS (1ULL << 5) // SELECT, user -#define OPTION_TO_QUERY_CACHE (1ULL << 6) // SELECT, user -#define SELECT_NO_JOIN_CACHE (1ULL << 7) // intern -/** always the opposite of OPTION_NOT_AUTOCOMMIT except when in fix_autocommit() */ -#define OPTION_AUTOCOMMIT (1ULL << 8) // THD, user -#define OPTION_BIG_SELECTS (1ULL << 9) // THD, user -#define OPTION_LOG_OFF (1ULL << 10) // THD, user -#define OPTION_QUOTE_SHOW_CREATE (1ULL << 11) // THD, user, unused -#define TMP_TABLE_ALL_COLUMNS (1ULL << 12) // SELECT, intern -#define OPTION_WARNINGS (1ULL << 13) // THD, user -#define OPTION_AUTO_IS_NULL (1ULL << 14) // THD, user, binlog -#define OPTION_FOUND_COMMENT (1ULL << 15) // SELECT, intern, parser -#define OPTION_SAFE_UPDATES (1ULL << 16) // THD, user -#define OPTION_BUFFER_RESULT (1ULL << 17) // SELECT, user -#define OPTION_BIN_LOG (1ULL << 18) // THD, user -#define OPTION_NOT_AUTOCOMMIT (1ULL << 19) // THD, user -#define OPTION_BEGIN (1ULL << 20) // THD, intern -#define OPTION_TABLE_LOCK (1ULL << 21) // THD, intern -#define OPTION_QUICK (1ULL << 22) // SELECT (for DELETE) -#define OPTION_KEEP_LOG (1ULL << 23) // THD, user - -/* The following is used to detect a conflict with DISTINCT */ -#define SELECT_ALL (1ULL << 24) // SELECT, user, parser -/** The following can be set when importing tables in a 'wrong order' - to suppress foreign key checks */ -#define OPTION_NO_FOREIGN_KEY_CHECKS (1ULL << 26) // THD, user, binlog -/** The following speeds up inserts to InnoDB tables by suppressing unique - key checks in some cases */ -#define OPTION_RELAXED_UNIQUE_CHECKS (1ULL << 27) // THD, user, binlog -#define SELECT_NO_UNLOCK (1ULL << 28) // SELECT, intern -#define OPTION_SCHEMA_TABLE (1ULL << 29) // SELECT, intern -/** Flag set if setup_tables already done */ -#define OPTION_SETUP_TABLES_DONE (1ULL << 30) // intern -/** If not set then the thread will ignore all warnings with level notes. */ -#define OPTION_SQL_NOTES (1ULL << 31) // THD, user -/** - Force the used temporary table to be a MyISAM table (because we will use - fulltext functions when reading from it. -*/ -#define TMP_TABLE_FORCE_MYISAM (1ULL << 32) -#define OPTION_PROFILING (1ULL << 33) - - -/** - Maximum length of time zone name that we support - (Time zone name is char(64) in db). mysqlbinlog needs it. -*/ -#define MAX_TIME_ZONE_NAME_LENGTH (NAME_LEN + 1) - -/* The rest of the file is included in the server only */ -#ifndef MYSQL_CLIENT - -/* Bits for different SQL modes modes (including ANSI mode) */ -#define MODE_REAL_AS_FLOAT 1 -#define MODE_PIPES_AS_CONCAT 2 -#define MODE_ANSI_QUOTES 4 -#define MODE_IGNORE_SPACE 8 -#define MODE_NOT_USED 16 -#define MODE_ONLY_FULL_GROUP_BY 32 -#define MODE_NO_UNSIGNED_SUBTRACTION 64 -#define MODE_NO_DIR_IN_CREATE 128 -#define MODE_POSTGRESQL 256 -#define MODE_ORACLE 512 -#define MODE_MSSQL 1024 -#define MODE_DB2 2048 -#define MODE_MAXDB 4096 -#define MODE_NO_KEY_OPTIONS 8192 -#define MODE_NO_TABLE_OPTIONS 16384 -#define MODE_NO_FIELD_OPTIONS 32768 -#define MODE_MYSQL323 65536L -#define MODE_MYSQL40 (MODE_MYSQL323*2) -#define MODE_ANSI (MODE_MYSQL40*2) -#define MODE_NO_AUTO_VALUE_ON_ZERO (MODE_ANSI*2) -#define MODE_NO_BACKSLASH_ESCAPES (MODE_NO_AUTO_VALUE_ON_ZERO*2) -#define MODE_STRICT_TRANS_TABLES (MODE_NO_BACKSLASH_ESCAPES*2) -#define MODE_STRICT_ALL_TABLES (MODE_STRICT_TRANS_TABLES*2) -#define MODE_NO_ZERO_IN_DATE (MODE_STRICT_ALL_TABLES*2) -#define MODE_NO_ZERO_DATE (MODE_NO_ZERO_IN_DATE*2) -#define MODE_INVALID_DATES (MODE_NO_ZERO_DATE*2) -#define MODE_ERROR_FOR_DIVISION_BY_ZERO (MODE_INVALID_DATES*2) -#define MODE_TRADITIONAL (MODE_ERROR_FOR_DIVISION_BY_ZERO*2) -#define MODE_NO_AUTO_CREATE_USER (MODE_TRADITIONAL*2) -#define MODE_HIGH_NOT_PRECEDENCE (MODE_NO_AUTO_CREATE_USER*2) -#define MODE_NO_ENGINE_SUBSTITUTION (MODE_HIGH_NOT_PRECEDENCE*2) -#define MODE_PAD_CHAR_TO_FULL_LENGTH (ULL(1) << 31) - -/* @@optimizer_switch flags. These must be in sync with optimizer_switch_typelib */ -#define OPTIMIZER_SWITCH_INDEX_MERGE (1ULL << 0) -#define OPTIMIZER_SWITCH_INDEX_MERGE_UNION (1ULL << 1) -#define OPTIMIZER_SWITCH_INDEX_MERGE_SORT_UNION (1ULL << 2) -#define OPTIMIZER_SWITCH_INDEX_MERGE_INTERSECT (1ULL << 3) -#define OPTIMIZER_SWITCH_ENGINE_CONDITION_PUSHDOWN (1ULL << 4) -#define OPTIMIZER_SWITCH_LAST (1ULL << 5) - -/* The following must be kept in sync with optimizer_switch_str in mysqld.cc */ -#define OPTIMIZER_SWITCH_DEFAULT (OPTIMIZER_SWITCH_INDEX_MERGE | \ - OPTIMIZER_SWITCH_INDEX_MERGE_UNION | \ - OPTIMIZER_SWITCH_INDEX_MERGE_SORT_UNION | \ - OPTIMIZER_SWITCH_INDEX_MERGE_INTERSECT | \ - OPTIMIZER_SWITCH_ENGINE_CONDITION_PUSHDOWN) - - -/* - Replication uses 8 bytes to store SQL_MODE in the binary log. The day you - use strictly more than 64 bits by adding one more define above, you should - contact the replication team because the replication code should then be - updated (to store more bytes on disk). - - NOTE: When adding new SQL_MODE types, make sure to also add them to - the scripts used for creating the MySQL system tables - in scripts/mysql_system_tables.sql and scripts/mysql_system_tables_fix.sql - -*/ - -#define RAID_BLOCK_SIZE 1024 - -#define MY_CHARSET_BIN_MB_MAXLEN 1 - -// uncachable cause -#define UNCACHEABLE_DEPENDENT 1 -#define UNCACHEABLE_RAND 2 -#define UNCACHEABLE_SIDEEFFECT 4 -/// forcing to save JOIN for explain -#define UNCACHEABLE_EXPLAIN 8 -/** Don't evaluate subqueries in prepare even if they're not correlated */ -#define UNCACHEABLE_PREPARE 16 -/* For uncorrelated SELECT in an UNION with some correlated SELECTs */ -#define UNCACHEABLE_UNITED 32 -#define UNCACHEABLE_CHECKOPTION 64 - -/* Used to check GROUP BY list in the MODE_ONLY_FULL_GROUP_BY mode */ -#define UNDEF_POS (-1) - -/* BINLOG_DUMP options */ - -#define BINLOG_DUMP_NON_BLOCK 1 - -/* sql_show.cc:show_log_files() */ -#define SHOW_LOG_STATUS_FREE "FREE" -#define SHOW_LOG_STATUS_INUSE "IN USE" - -struct TABLE_LIST; -class String; -void view_store_options(THD *thd, TABLE_LIST *table, String *buff); - -/* Options to add_table_to_list() */ -#define TL_OPTION_UPDATING 1 -#define TL_OPTION_FORCE_INDEX 2 -#define TL_OPTION_IGNORE_LEAVES 4 -#define TL_OPTION_ALIAS 8 - -/* Some portable defines */ - -#define portable_sizeof_char_ptr 8 - -#define tmp_file_prefix "#sql" /**< Prefix for tmp tables */ -#define tmp_file_prefix_length 4 - -/* Flags for calc_week() function. */ -#define WEEK_MONDAY_FIRST 1 -#define WEEK_YEAR 2 -#define WEEK_FIRST_WEEKDAY 4 - -#define STRING_BUFFER_USUAL_SIZE 80 - -/* - Some defines for exit codes for ::is_equal class functions. -*/ -#define IS_EQUAL_NO 0 -#define IS_EQUAL_YES 1 -#define IS_EQUAL_PACK_LENGTH 2 - -enum enum_parsing_place -{ - NO_MATTER, - IN_HAVING, - SELECT_LIST, - IN_WHERE, - IN_ON -}; - - -#define thd_proc_info(thd, msg) set_thd_proc_info(thd, msg, __func__, __FILE__, __LINE__) -class THD; - -enum enum_check_fields -{ - CHECK_FIELD_IGNORE, - CHECK_FIELD_WARN, - CHECK_FIELD_ERROR_FOR_NULL -}; - - -/** Struct to handle simple linked lists. */ -typedef struct st_sql_list { - uint elements; - uchar *first; - uchar **next; - - st_sql_list() {} /* Remove gcc warning */ - inline void empty() - { - elements=0; - first=0; - next= &first; - } - inline void link_in_list(uchar *element,uchar **next_ptr) - { - elements++; - (*next)=element; - next= next_ptr; - *next=0; - } - inline void save_and_clear(struct st_sql_list *save) - { - *save= *this; - empty(); - } - inline void push_front(struct st_sql_list *save) - { - *save->next= first; /* link current list last */ - first= save->first; - elements+= save->elements; - } - inline void push_back(struct st_sql_list *save) - { - if (save->first) - { - *next= save->first; - next= save->next; - elements+= save->elements; - } - } -} SQL_LIST; - -#if defined(MYSQL_DYNAMIC_PLUGIN) && defined(_WIN32) -extern "C" THD *_current_thd_noinline(); -#define _current_thd() _current_thd_noinline() -#else -extern pthread_key(THD*, THR_THD); -inline THD *_current_thd(void) -{ - return my_pthread_getspecific_ptr(THD*,THR_THD); -} -#endif -#define current_thd _current_thd() - - -/** - The meat of thd_proc_info(THD*, char*), a macro that packs the last - three calling-info parameters. -*/ -extern "C" -const char *set_thd_proc_info(THD *thd, const char *info, - const char *calling_func, - const char *calling_file, - const unsigned int calling_line); - -/** - Enumerate possible types of a table from re-execution - standpoint. - TABLE_LIST class has a member of this type. - At prepared statement prepare, this member is assigned a value - as of the current state of the database. Before (re-)execution - of a prepared statement, we check that the value recorded at - prepare matches the type of the object we obtained from the - table definition cache. - - @sa check_and_update_table_version() - @sa Execute_observer - @sa Prepared_statement::reprepare() -*/ - -enum enum_table_ref_type -{ - /** Initial value set by the parser */ - TABLE_REF_NULL= 0, - TABLE_REF_VIEW, - TABLE_REF_BASE_TABLE, - TABLE_REF_I_S_TABLE, - TABLE_REF_TMP_TABLE -}; - -/* - External variables -*/ -extern ulong server_id, concurrency; - - -typedef my_bool (*qc_engine_callback)(THD *thd, char *table_key, - uint key_length, - ulonglong *engine_data); -#include "sql_string.h" -#include "sql_list.h" -#include "sql_map.h" -#include "my_decimal.h" -#include "handler.h" -#include "parse_file.h" -#include "table.h" -#include "sql_error.h" -#include "field.h" /* Field definitions */ -#include "protocol.h" -#include "sql_udf.h" -#include "sql_profile.h" -#include "sql_partition.h" - -class user_var_entry; -class Security_context; -enum enum_var_type -{ - OPT_DEFAULT= 0, OPT_SESSION, OPT_GLOBAL -}; -class sys_var; -#ifdef MYSQL_SERVER -class Comp_creator; -typedef Comp_creator* (*chooser_compare_func_creator)(bool invert); -#endif -#include "item.h" -extern my_decimal decimal_zero; - -/* my_decimal.cc */ -bool str_set_decimal(uint mask, const my_decimal *val, uint fixed_prec, - uint fixed_dec, char filler, String *str, - CHARSET_INFO *cs); -inline bool str_set_decimal(const my_decimal *val, String *str, - CHARSET_INFO *cs) -{ - return str_set_decimal(E_DEC_FATAL_ERROR, val, 0, 0, 0, str, cs); -} - -/* sql_parse.cc */ -void free_items(Item *item); -void cleanup_items(Item *item); -class THD; -void close_thread_tables(THD *thd); - -#ifndef NO_EMBEDDED_ACCESS_CHECKS -bool check_one_table_access(THD *thd, ulong privilege, TABLE_LIST *tables); -bool check_single_table_access(THD *thd, ulong privilege, - TABLE_LIST *tables, bool no_errors); -bool check_routine_access(THD *thd,ulong want_access,char *db,char *name, - bool is_proc, bool no_errors); -bool check_some_access(THD *thd, ulong want_access, TABLE_LIST *table); -bool check_some_routine_access(THD *thd, const char *db, const char *name, bool is_proc); -#else -inline bool check_one_table_access(THD *thd, ulong privilege, TABLE_LIST *tables) -{ return false; } -inline bool check_single_table_access(THD *thd, ulong privilege, - TABLE_LIST *tables, bool no_errors) -{ return false; } -inline bool check_routine_access(THD *thd,ulong want_access,char *db, - char *name, bool is_proc, bool no_errors) -{ return false; } -inline bool check_some_access(THD *thd, ulong want_access, TABLE_LIST *table) -{ - table->grant.privilege= want_access; - return false; -} -inline bool check_merge_table_access(THD *thd, char *db, TABLE_LIST *table_list) -{ return false; } -inline bool check_some_routine_access(THD *thd, const char *db, - const char *name, bool is_proc) -{ return false; } -#endif /*NO_EMBEDDED_ACCESS_CHECKS*/ - -bool multi_update_precheck(THD *thd, TABLE_LIST *tables); -bool multi_delete_precheck(THD *thd, TABLE_LIST *tables); -int mysql_multi_update_prepare(THD *thd); -int mysql_multi_delete_prepare(THD *thd); -bool mysql_insert_select_prepare(THD *thd); -bool update_precheck(THD *thd, TABLE_LIST *tables); -bool delete_precheck(THD *thd, TABLE_LIST *tables); -bool insert_precheck(THD *thd, TABLE_LIST *tables); -bool create_table_precheck(THD *thd, TABLE_LIST *tables, - TABLE_LIST *create_table); -int append_query_string(CHARSET_INFO *csinfo, - String const *from, String *to); - -void get_default_definer(THD *thd, LEX_USER *definer); -LEX_USER *create_default_definer(THD *thd); -LEX_USER *create_definer(THD *thd, LEX_STRING *user_name, LEX_STRING *host_name); -LEX_USER *get_current_user(THD *thd, LEX_USER *user); -bool check_string_byte_length(LEX_STRING *str, const char *err_msg, - uint max_byte_length); -bool check_string_char_length(LEX_STRING *str, const char *err_msg, - uint max_char_length, CHARSET_INFO *cs, - bool no_error); -bool check_host_name(LEX_STRING *str); - -CHARSET_INFO *merge_charset_and_collation(CHARSET_INFO *cs, CHARSET_INFO *cl); - -bool parse_sql(THD *thd, - Parser_state *parser_state, - Object_creation_ctx *creation_ctx); - -Item *negate_expression(THD *thd, Item *expr); - -/* log.cc */ -int vprint_msg_to_log(enum loglevel level, const char *format, va_list args); -void sql_print_error(const char *format, ...) ATTRIBUTE_FORMAT(printf, 1, 2); -void sql_print_warning(const char *format, ...) ATTRIBUTE_FORMAT(printf, 1, 2); -void sql_print_information(const char *format, ...) - ATTRIBUTE_FORMAT(printf, 1, 2); -typedef void (*sql_print_message_func)(const char *format, ...) - ATTRIBUTE_FORMAT(printf, 1, 2); -extern sql_print_message_func sql_print_message_handlers[]; - -int error_log_print(enum loglevel level, const char *format, - va_list args); - -bool slow_log_print(THD *thd, const char *query, uint query_length, - ulonglong current_utime); - -bool general_log_print(THD *thd, enum enum_server_command command, - const char *format,...); - -bool general_log_write(THD *thd, enum enum_server_command command, - const char *query, uint query_length); - -#include "sql_class.h" -#include "sql_acl.h" -#include "tztime.h" -#ifdef MYSQL_SERVER -#include "sql_servers.h" -#include "records.h" -#include "opt_range.h" - -#ifdef HAVE_QUERY_CACHE -struct Query_cache_query_flags -{ - unsigned int client_long_flag:1; - unsigned int client_protocol_41:1; - unsigned int protocol_type:2; - unsigned int more_results_exists:1; - unsigned int in_trans:1; - unsigned int autocommit:1; - unsigned int pkt_nr; - uint character_set_client_num; - uint character_set_results_num; - uint collation_connection_num; - ha_rows limit; - Time_zone *time_zone; - ulong sql_mode; - ulong max_sort_length; - ulong group_concat_max_len; - ulong default_week_format; - ulong div_precision_increment; - MY_LOCALE *lc_time_names; -}; -#define QUERY_CACHE_FLAGS_SIZE sizeof(Query_cache_query_flags) -#include "sql_cache.h" -#define query_cache_abort(A) query_cache.abort(A) -#define query_cache_end_of_result(A) query_cache.end_of_result(A) -#define query_cache_store_query(A, B) query_cache.store_query(A, B) -#define query_cache_destroy() query_cache.destroy() -#define query_cache_result_size_limit(A) query_cache.result_size_limit(A) -#define query_cache_init() query_cache.init() -#define query_cache_resize(A) query_cache.resize(A) -#define query_cache_set_min_res_unit(A) query_cache.set_min_res_unit(A) -#define query_cache_invalidate3(A, B, C) query_cache.invalidate(A, B, C) -#define query_cache_invalidate1(A) query_cache.invalidate(A) -#define query_cache_send_result_to_client(A, B, C) \ - query_cache.send_result_to_client(A, B, C) -#define query_cache_invalidate_by_MyISAM_filename_ref \ - &query_cache_invalidate_by_MyISAM_filename -/* note the "maybe": it's a read without mutex */ -#define query_cache_maybe_disabled(T) \ - (T->variables.query_cache_type == 0 || query_cache.query_cache_size == 0) -#define query_cache_is_cacheable_query(L) \ - (((L)->sql_command == SQLCOM_SELECT) && (L)->safe_to_cache_query) -#else -#define QUERY_CACHE_FLAGS_SIZE 0 -#define query_cache_store_query(A, B) -#define query_cache_destroy() -#define query_cache_result_size_limit(A) -#define query_cache_init() -#define query_cache_resize(A) -#define query_cache_set_min_res_unit(A) -#define query_cache_invalidate3(A, B, C) -#define query_cache_invalidate1(A) -#define query_cache_send_result_to_client(A, B, C) 0 -#define query_cache_invalidate_by_MyISAM_filename_ref NULL - -#define query_cache_abort(A) -#define query_cache_end_of_result(A) -#define query_cache_invalidate_by_MyISAM_filename_ref NULL -#define query_cache_maybe_disabled(T) 1 -#define query_cache_is_cacheable_query(L) 0 -#endif /*HAVE_QUERY_CACHE*/ - -int write_bin_log(THD *thd, bool clear_error, - char const *query, ulong query_length, - bool is_trans= FALSE); - -/* sql_connect.cc */ -int check_user(THD *thd, enum enum_server_command command, - const char *passwd, uint passwd_len, const char *db, - bool check_count); -pthread_handler_t handle_one_connection(void *arg); -void do_handle_one_connection(THD *thd_arg); -bool init_new_connection_handler_thread(); -void reset_mqh(LEX_USER *lu, bool get_them); -bool check_mqh(THD *thd, uint check_command); -void time_out_user_resource_limits(THD *thd, USER_CONN *uc); -void decrease_user_connections(USER_CONN *uc); -void thd_init_client_charset(THD *thd, uint cs_number); -bool setup_connection_thread_globals(THD *thd); - -int mysql_create_db(THD *thd, char *db, HA_CREATE_INFO *create, bool silent); -bool mysql_alter_db(THD *thd, const char *db, HA_CREATE_INFO *create); -bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent); -bool mysql_upgrade_db(THD *thd, LEX_STRING *old_db); -void mysql_binlog_send(THD* thd, char* log_ident, my_off_t pos, ushort flags); -void mysql_client_binlog_statement(THD *thd); -bool mysql_rm_table(THD *thd,TABLE_LIST *tables, my_bool if_exists, - my_bool drop_temporary); -int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists, - bool drop_temporary, bool drop_view, bool log_query); -bool quick_rm_table(handlerton *base,const char *db, - const char *table_name, uint flags); -bool mysql_rename_tables(THD *thd, TABLE_LIST *table_list, bool silent); -bool do_rename(THD *thd, TABLE_LIST *ren_table, char *new_db, - char *new_table_name, char *new_table_alias, - bool skip_error); - -bool mysql_change_db(THD *thd, const LEX_STRING *new_db_name, - bool force_switch); - -bool mysql_opt_change_db(THD *thd, - const LEX_STRING *new_db_name, - LEX_STRING *saved_db_name, - bool force_switch, - bool *cur_db_changed); - -void mysql_parse(THD *thd, const char *inBuf, uint length, - const char ** semicolon); - -bool mysql_test_parse_for_slave(THD *thd,char *inBuf,uint length); -bool is_update_query(enum enum_sql_command command); -bool is_log_table_write_query(enum enum_sql_command command); -bool alloc_query(THD *thd, const char *packet, uint packet_length); -void mysql_init_select(LEX *lex); -void mysql_reset_thd_for_next_command(THD *thd); -bool mysql_new_select(LEX *lex, bool move_down); -void create_select_for_variable(const char *var_name); -void mysql_init_multi_delete(LEX *lex); -bool multi_delete_set_locks_and_link_aux_tables(LEX *lex); -void create_table_set_open_action_and_adjust_tables(LEX *lex); -void init_max_user_conn(void); -void init_update_queries(void); -void free_max_user_conn(void); -pthread_handler_t handle_bootstrap(void *arg); -void do_handle_bootstrap(THD *thd); -int mysql_execute_command(THD *thd); -bool do_command(THD *thd); -bool dispatch_command(enum enum_server_command command, THD *thd, - char* packet, uint packet_length); -void log_slow_statement(THD *thd); -bool check_dup(const char *db, const char *name, TABLE_LIST *tables); -bool compare_record(TABLE *table); -bool append_file_to_dir(THD *thd, const char **filename_ptr, - const char *table_name); -bool table_def_init(void); -void table_def_start_shutdown(void); -void table_def_free(void); -void assign_new_table_id(TABLE_SHARE *share); -uint cached_open_tables(void); -uint cached_table_definitions(void); -void kill_mysql(void); -void close_connection(THD *thd, uint errcode, bool lock); -bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables, - bool *write_to_binlog); -#ifndef NO_EMBEDDED_ACCESS_CHECKS -bool check_access(THD *thd, ulong access, const char *db, ulong *save_priv, - GRANT_INTERNAL_INFO *grant_internal_info, - bool no_grant, bool no_errors); -bool check_table_access(THD *thd, ulong requirements, TABLE_LIST *tables, - bool any_combination_of_privileges_will_do, - uint number, - bool no_errors); -#else -inline bool check_access(THD *thd, ulong access, const char *db, - ulong *save_priv, - GRANT_INTERNAL_INFO *grant_internal_info, - bool no_grant, bool no_errors) -{ - if (save_priv) - *save_priv= GLOBAL_ACLS; - return false; -} -inline bool check_table_access(THD *thd, ulong requirements,TABLE_LIST *tables, - bool any_combination_of_privileges_will_do, - uint number, - bool no_errors) -{ return false; } -#endif /*NO_EMBEDDED_ACCESS_CHECKS*/ - -#endif /* MYSQL_SERVER */ -#if defined MYSQL_SERVER || defined INNODB_COMPATIBILITY_HOOKS -bool check_global_access(THD *thd, ulong want_access); -#endif /* MYSQL_SERVER || INNODB_COMPATIBILITY_HOOKS */ -#ifdef MYSQL_SERVER - -/* - Support routine for SQL parser on partitioning syntax -*/ -my_bool is_partition_management(LEX *lex); -/* - General routine to change field->ptr of a NULL-terminated array of Field - objects. Useful when needed to call val_int, val_str or similar and the - field data is not in table->record[0] but in some other structure. - set_key_field_ptr changes all fields of an index using a key_info object. - All methods presume that there is at least one field to change. -*/ - -void set_field_ptr(Field **ptr, const uchar *new_buf, const uchar *old_buf); -void set_key_field_ptr(KEY *key_info, const uchar *new_buf, - const uchar *old_buf); - -bool mysql_backup_table(THD* thd, TABLE_LIST* table_list); -bool mysql_restore_table(THD* thd, TABLE_LIST* table_list); - -bool mysql_checksum_table(THD* thd, TABLE_LIST* table_list, - HA_CHECK_OPT* check_opt); -bool mysql_check_table(THD* thd, TABLE_LIST* table_list, - HA_CHECK_OPT* check_opt); -bool mysql_repair_table(THD* thd, TABLE_LIST* table_list, - HA_CHECK_OPT* check_opt); -bool mysql_analyze_table(THD* thd, TABLE_LIST* table_list, - HA_CHECK_OPT* check_opt); -bool mysql_optimize_table(THD* thd, TABLE_LIST* table_list, - HA_CHECK_OPT* check_opt); -bool mysql_assign_to_keycache(THD* thd, TABLE_LIST* table_list, - LEX_STRING *key_cache_name); -bool mysql_preload_keys(THD* thd, TABLE_LIST* table_list); -int reassign_keycache_tables(THD* thd, KEY_CACHE *src_cache, - KEY_CACHE *dst_cache); -TABLE *create_virtual_tmp_table(THD *thd, List<Create_field> &field_list); - -bool mysql_xa_recover(THD *thd); - -bool check_simple_select(); -int mysql_alter_tablespace(THD* thd, st_alter_tablespace *ts_info); - -SORT_FIELD * make_unireg_sortorder(ORDER *order, uint *length, - SORT_FIELD *sortorder); -int setup_order(THD *thd, Item **ref_pointer_array, TABLE_LIST *tables, - List<Item> &fields, List <Item> &all_fields, ORDER *order); -int setup_group(THD *thd, Item **ref_pointer_array, TABLE_LIST *tables, - List<Item> &fields, List<Item> &all_fields, ORDER *order, - bool *hidden_group_fields); -bool fix_inner_refs(THD *thd, List<Item> &all_fields, SELECT_LEX *select, - Item **ref_pointer_array, ORDER *group_list= NULL); - -bool handle_select(THD *thd, LEX *lex, select_result *result, - ulong setup_tables_done_option); -bool mysql_select(THD *thd, Item ***rref_pointer_array, - TABLE_LIST *tables, uint wild_num, List<Item> &list, - COND *conds, uint og_num, ORDER *order, ORDER *group, - Item *having, ORDER *proc_param, ulonglong select_type, - select_result *result, SELECT_LEX_UNIT *unit, - SELECT_LEX *select_lex); -void free_underlaid_joins(THD *thd, SELECT_LEX *select); -bool mysql_explain_union(THD *thd, SELECT_LEX_UNIT *unit, - select_result *result); -int mysql_explain_select(THD *thd, SELECT_LEX *sl, char const *type, - select_result *result); -bool mysql_union(THD *thd, LEX *lex, select_result *result, - SELECT_LEX_UNIT *unit, ulong setup_tables_done_option); -bool mysql_handle_derived(LEX *lex, bool (*processor)(THD *thd, - LEX *lex, - TABLE_LIST *table)); -bool mysql_derived_prepare(THD *thd, LEX *lex, TABLE_LIST *t); -bool mysql_derived_filling(THD *thd, LEX *lex, TABLE_LIST *t); -Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type, - Item ***copy_func, Field **from_field, - Field **def_field, - bool group, bool modify_item, - bool table_cant_handle_bit_fields, - bool make_copy_field, - uint convert_blob_length); -void sp_prepare_create_field(THD *thd, Create_field *sql_field); -int prepare_create_field(Create_field *sql_field, - uint *blob_columns, - int *timestamps, int *timestamps_with_niladic, - longlong table_flags); -CHARSET_INFO* get_sql_field_charset(Create_field *sql_field, - HA_CREATE_INFO *create_info); -bool mysql_create_table(THD *thd, TABLE_LIST *create_table, - HA_CREATE_INFO *create_info, - Alter_info *alter_info); -bool mysql_create_table_no_lock(THD *thd, const char *db, - const char *table_name, - HA_CREATE_INFO *create_info, - Alter_info *alter_info, - bool tmp_table, uint select_field_count); - -bool mysql_alter_table(THD *thd, char *new_db, char *new_name, - HA_CREATE_INFO *create_info, - TABLE_LIST *table_list, - Alter_info *alter_info, - uint order_num, ORDER *order, bool ignore); -bool mysql_recreate_table(THD *thd, TABLE_LIST *table_list); -bool mysql_create_like_table(THD *thd, TABLE_LIST *table, - TABLE_LIST *src_table, - HA_CREATE_INFO *create_info); -bool mysql_rename_table(handlerton *base, const char *old_db, - const char * old_name, const char *new_db, - const char * new_name, uint flags); -bool mysql_prepare_update(THD *thd, TABLE_LIST *table_list, - Item **conds, uint order_num, ORDER *order); -int mysql_update(THD *thd,TABLE_LIST *tables,List<Item> &fields, - List<Item> &values,COND *conds, - uint order_num, ORDER *order, ha_rows limit, - enum enum_duplicates handle_duplicates, bool ignore, - ha_rows *found_return, ha_rows *updated_return); -bool mysql_multi_update(THD *thd, TABLE_LIST *table_list, - List<Item> *fields, List<Item> *values, - COND *conds, ulonglong options, - enum enum_duplicates handle_duplicates, bool ignore, - SELECT_LEX_UNIT *unit, SELECT_LEX *select_lex, - multi_update **result); -bool mysql_prepare_insert(THD *thd, TABLE_LIST *table_list, TABLE *table, - List<Item> &fields, List_item *values, - List<Item> &update_fields, - List<Item> &update_values, enum_duplicates duplic, - COND **where, bool select_insert, - bool check_fields, bool abort_on_warning); -bool mysql_insert(THD *thd,TABLE_LIST *table,List<Item> &fields, - List<List_item> &values, List<Item> &update_fields, - List<Item> &update_values, enum_duplicates flag, - bool ignore); -int check_that_all_fields_are_given_values(THD *thd, TABLE *entry, - TABLE_LIST *table_list); -void prepare_triggers_for_insert_stmt(TABLE *table); -int mysql_prepare_delete(THD *thd, TABLE_LIST *table_list, Item **conds); -bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, - SQL_LIST *order, ha_rows rows, ulonglong options, - bool reset_auto_increment); -bool mysql_truncate(THD *thd, TABLE_LIST *table_list, bool dont_send_ok); -bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create); -uint create_table_def_key(THD *thd, char *key, TABLE_LIST *table_list, - bool tmp_table); -TABLE_SHARE *get_table_share(THD *thd, TABLE_LIST *table_list, char *key, - uint key_length, uint db_flags, int *error, - my_hash_value_type hash_value); -void release_table_share(TABLE_SHARE *share); -TABLE_SHARE *get_cached_table_share(const char *db, const char *table_name); -TABLE *open_ltable(THD *thd, TABLE_LIST *table_list, thr_lock_type update, - uint lock_flags); -bool open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT* mem, - Open_table_context *backoff, uint flags); -bool tdc_open_view(THD *thd, TABLE_LIST *table_list, const char *alias, - char *cache_key, uint cache_key_length, - MEM_ROOT *mem_root, uint flags); -TABLE *find_locked_table(TABLE *list, const char *db, const char *table_name); -TABLE *find_table_for_mdl_upgrade(TABLE *list, const char *db, - const char *table_name, - bool no_error); -thr_lock_type read_lock_type_for_table(THD *thd, TABLE *table); -bool open_new_frm(THD *thd, TABLE_SHARE *share, const char *alias, - uint db_stat, uint prgflag, - uint ha_open_flags, TABLE *outparam, - TABLE_LIST *table_desc, MEM_ROOT *mem_root); -void execute_init_command(THD *thd, LEX_STRING *init_command, - mysql_rwlock_t *var_mutex); -extern Field *not_found_field; -extern Field *view_ref_found; - -enum find_item_error_report_type {REPORT_ALL_ERRORS, REPORT_EXCEPT_NOT_FOUND, - IGNORE_ERRORS, REPORT_EXCEPT_NON_UNIQUE, - IGNORE_EXCEPT_NON_UNIQUE}; -Field * -find_field_in_tables(THD *thd, Item_ident *item, - TABLE_LIST *first_table, TABLE_LIST *last_table, - Item **ref, find_item_error_report_type report_error, - bool check_privileges, bool register_tree_change); -Field * -find_field_in_table_ref(THD *thd, TABLE_LIST *table_list, - const char *name, uint length, - const char *item_name, const char *db_name, - const char *table_name, Item **ref, - bool check_privileges, bool allow_rowid, - uint *cached_field_index_ptr, - bool register_tree_change, TABLE_LIST **actual_table); -Field * -find_field_in_table(THD *thd, TABLE *table, const char *name, uint length, - bool allow_rowid, uint *cached_field_index_ptr); -Field * -find_field_in_table_sef(TABLE *table, const char *name); - -#endif /* MYSQL_SERVER */ - -#ifdef HAVE_OPENSSL -#include <openssl/des.h> -struct st_des_keyblock -{ - DES_cblock key1, key2, key3; -}; -struct st_des_keyschedule -{ - DES_key_schedule ks1, ks2, ks3; -}; -extern char *des_key_file; -extern struct st_des_keyschedule des_keyschedule[10]; -extern uint des_default_key; -extern mysql_mutex_t LOCK_des_key_file; -bool load_des_key_file(const char *file_name); -#endif /* HAVE_OPENSSL */ - -#ifdef MYSQL_SERVER -/* sql_do.cc */ -bool mysql_do(THD *thd, List<Item> &values); - -/* sql_analyse.h */ -bool append_escaped(String *to_str, String *from_str); - -/* sql_show.cc */ -bool mysqld_show_open_tables(THD *thd,const char *wild); -bool mysqld_show_logs(THD *thd); -void append_identifier(THD *thd, String *packet, const char *name, - uint length); -#endif /* MYSQL_SERVER */ -#if defined MYSQL_SERVER || defined INNODB_COMPATIBILITY_HOOKS -int get_quote_char_for_identifier(THD *thd, const char *name, uint length); -#endif /* MYSQL_SERVER || INNODB_COMPATIBILITY_HOOKS */ -#ifdef MYSQL_SERVER -void mysqld_list_fields(THD *thd,TABLE_LIST *table, const char *wild); -int mysqld_dump_create_info(THD *thd, TABLE_LIST *table_list, int fd); -bool mysqld_show_create(THD *thd, TABLE_LIST *table_list); -bool mysqld_show_create_db(THD *thd, char *dbname, HA_CREATE_INFO *create); - -void mysqld_list_processes(THD *thd,const char *user,bool verbose); -int mysqld_show_status(THD *thd); -int mysqld_show_variables(THD *thd,const char *wild); -bool mysqld_show_storage_engines(THD *thd); -bool mysqld_show_authors(THD *thd); -bool mysqld_show_contributors(THD *thd); -bool mysqld_show_privileges(THD *thd); -bool mysqld_show_column_types(THD *thd); -bool mysqld_help (THD *thd, const char *text); -void calc_sum_of_all_status(STATUS_VAR *to); - -void append_definer(THD *thd, String *buffer, const LEX_STRING *definer_user, - const LEX_STRING *definer_host); - -int add_status_vars(SHOW_VAR *list); -void remove_status_vars(SHOW_VAR *list); -void init_status_vars(); -void free_status_vars(); -void reset_status_vars(); -/* information schema */ -extern LEX_STRING INFORMATION_SCHEMA_NAME; -/* performance schema */ -extern LEX_STRING PERFORMANCE_SCHEMA_DB_NAME; -/* log tables */ -extern LEX_STRING MYSQL_SCHEMA_NAME; -extern LEX_STRING GENERAL_LOG_NAME; -extern LEX_STRING SLOW_LOG_NAME; - -extern const LEX_STRING partition_keywords[]; -ST_SCHEMA_TABLE *find_schema_table(THD *thd, const char* table_name); -ST_SCHEMA_TABLE *get_schema_table(enum enum_schema_tables schema_table_idx); -int prepare_schema_table(THD *thd, LEX *lex, Table_ident *table_ident, - enum enum_schema_tables schema_table_idx); -int make_schema_select(THD *thd, SELECT_LEX *sel, - enum enum_schema_tables schema_table_idx); -int mysql_schema_table(THD *thd, LEX *lex, TABLE_LIST *table_list); -int fill_schema_user_privileges(THD *thd, TABLE_LIST *tables, COND *cond); -int fill_schema_schema_privileges(THD *thd, TABLE_LIST *tables, COND *cond); -int fill_schema_table_privileges(THD *thd, TABLE_LIST *tables, COND *cond); -int fill_schema_column_privileges(THD *thd, TABLE_LIST *tables, COND *cond); -bool get_schema_tables_result(JOIN *join, - enum enum_schema_table_state executed_place); -enum enum_schema_tables get_schema_table_idx(ST_SCHEMA_TABLE *schema_table); - -inline bool is_infoschema_db(const char *name, size_t len) -{ - return (INFORMATION_SCHEMA_NAME.length == len && - !my_strcasecmp(system_charset_info, - INFORMATION_SCHEMA_NAME.str, name)); -} - -inline bool is_infoschema_db(const char *name) -{ - return !my_strcasecmp(system_charset_info, - INFORMATION_SCHEMA_NAME.str, name); -} - -void initialize_information_schema_acl(); - -/* sql_handler.cc */ -bool mysql_ha_open(THD *thd, TABLE_LIST *tables, bool reopen); -bool mysql_ha_close(THD *thd, TABLE_LIST *tables); -bool mysql_ha_read(THD *, TABLE_LIST *,enum enum_ha_read_modes,char *, - List<Item> *,enum ha_rkey_function,Item *,ha_rows,ha_rows); -void mysql_ha_flush(THD *thd); -void mysql_ha_rm_tables(THD *thd, TABLE_LIST *tables); -void mysql_ha_cleanup(THD *thd); -void mysql_ha_move_tickets_after_trans_sentinel(THD *thd); - -/* sql_base.cc */ -#define TMP_TABLE_KEY_EXTRA 8 -void set_item_name(Item *item,char *pos,uint length); -bool add_field_to_list(THD *thd, LEX_STRING *field_name, enum enum_field_types type, - char *length, char *decimal, - uint type_modifier, - Item *default_value, Item *on_update_value, - LEX_STRING *comment, - char *change, List<String> *interval_list, - CHARSET_INFO *cs, - uint uint_geom_type); -Create_field * new_create_field(THD *thd, char *field_name, enum_field_types type, - char *length, char *decimals, - uint type_modifier, - Item *default_value, Item *on_update_value, - LEX_STRING *comment, char *change, - List<String> *interval_list, CHARSET_INFO *cs, - uint uint_geom_type); -void store_position_for_column(const char *name); -bool add_to_list(THD *thd, SQL_LIST &list,Item *group,bool asc); -bool push_new_name_resolution_context(THD *thd, - TABLE_LIST *left_op, - TABLE_LIST *right_op); -void add_join_on(TABLE_LIST *b,Item *expr); -void add_join_natural(TABLE_LIST *a,TABLE_LIST *b,List<String> *using_fields, - SELECT_LEX *lex); -bool add_proc_to_list(THD *thd, Item *item); -bool wait_while_table_is_used(THD *thd, TABLE *table, - enum ha_extra_function function); -void drop_open_table(THD *thd, TABLE *table, const char *db_name, - const char *table_name); -void close_all_tables_for_name(THD *thd, TABLE_SHARE *share, - bool remove_from_locked_tables); -void update_non_unique_table_error(TABLE_LIST *update, - const char *operation, - TABLE_LIST *duplicate); - -SQL_SELECT *make_select(TABLE *head, table_map const_tables, - table_map read_tables, COND *conds, - bool allow_null_cond, int *error); -extern Item **not_found_item; - -/* - A set of constants used for checking non aggregated fields and sum - functions mixture in the ONLY_FULL_GROUP_BY_MODE. -*/ -#define NON_AGG_FIELD_USED 1 -#define SUM_FUNC_USED 2 - -/* - This enumeration type is used only by the function find_item_in_list - to return the info on how an item has been resolved against a list - of possibly aliased items. - The item can be resolved: - - against an alias name of the list's element (RESOLVED_AGAINST_ALIAS) - - against non-aliased field name of the list (RESOLVED_WITH_NO_ALIAS) - - against an aliased field name of the list (RESOLVED_BEHIND_ALIAS) - - ignoring the alias name in cases when SQL requires to ignore aliases - (e.g. when the resolved field reference contains a table name or - when the resolved item is an expression) (RESOLVED_IGNORING_ALIAS) -*/ -enum enum_resolution_type { - NOT_RESOLVED=0, - RESOLVED_IGNORING_ALIAS, - RESOLVED_BEHIND_ALIAS, - RESOLVED_WITH_NO_ALIAS, - RESOLVED_AGAINST_ALIAS -}; -Item ** find_item_in_list(Item *item, List<Item> &items, uint *counter, - find_item_error_report_type report_error, - enum_resolution_type *resolution); -bool get_key_map_from_key_list(key_map *map, TABLE *table, - List<String> *index_list); -bool insert_fields(THD *thd, Name_resolution_context *context, - const char *db_name, const char *table_name, - List_iterator<Item> *it, bool any_privileges); -bool setup_tables(THD *thd, Name_resolution_context *context, - List<TABLE_LIST> *from_clause, TABLE_LIST *tables, - TABLE_LIST **leaves, bool select_insert); -bool setup_tables_and_check_access(THD *thd, - Name_resolution_context *context, - List<TABLE_LIST> *from_clause, - TABLE_LIST *tables, - TABLE_LIST **leaves, - bool select_insert, - ulong want_access_first, - ulong want_access); -int setup_wild(THD *thd, TABLE_LIST *tables, List<Item> &fields, - List<Item> *sum_func_list, uint wild_num); -bool setup_fields(THD *thd, Item** ref_pointer_array, - List<Item> &item, enum_mark_columns mark_used_columns, - List<Item> *sum_func_list, bool allow_sum_func); -inline bool setup_fields_with_no_wrap(THD *thd, Item **ref_pointer_array, - List<Item> &item, - enum_mark_columns mark_used_columns, - List<Item> *sum_func_list, - bool allow_sum_func) -{ - bool res; - thd->lex->select_lex.no_wrap_view_item= TRUE; - res= setup_fields(thd, ref_pointer_array, item, mark_used_columns, sum_func_list, - allow_sum_func); - thd->lex->select_lex.no_wrap_view_item= FALSE; - return res; -} -int setup_conds(THD *thd, TABLE_LIST *tables, TABLE_LIST *leaves, - COND **conds); -int setup_ftfuncs(SELECT_LEX* select); -int init_ftfuncs(THD *thd, SELECT_LEX* select, bool no_order); -void wait_for_condition(THD *thd, mysql_mutex_t *mutex, - mysql_cond_t *cond); -bool open_tables(THD *thd, TABLE_LIST **tables, uint *counter, uint flags, - Prelocking_strategy *prelocking_strategy); -inline bool -open_tables(THD *thd, TABLE_LIST **tables, uint *counter, uint flags) -{ - DML_prelocking_strategy prelocking_strategy; - - return open_tables(thd, tables, counter, flags, &prelocking_strategy); -} -/* open_and_lock_tables with optional derived handling */ -bool open_and_lock_tables(THD *thd, TABLE_LIST *tables, - bool derived, uint flags, - Prelocking_strategy *prelocking_strategy); -inline bool open_and_lock_tables(THD *thd, TABLE_LIST *tables, - bool derived, uint flags) -{ - DML_prelocking_strategy prelocking_strategy; - - return open_and_lock_tables(thd, tables, derived, flags, - &prelocking_strategy); -} -/* simple open_and_lock_tables without derived handling for single table */ -TABLE *open_n_lock_single_table(THD *thd, TABLE_LIST *table_l, - thr_lock_type lock_type, uint flags); -bool open_normal_and_derived_tables(THD *thd, TABLE_LIST *tables, uint flags); -bool lock_tables(THD *thd, TABLE_LIST *tables, uint counter, uint flags); -TABLE *open_temporary_table(THD *thd, const char *path, const char *db, - const char *table_name, bool link_in_list); -bool rm_temporary_table(handlerton *base, char *path); -void free_io_cache(TABLE *entry); -void intern_close_table(TABLE *entry); -bool close_thread_table(THD *thd, TABLE **table_ptr); -void close_temporary_tables(THD *thd); -void close_tables_for_reopen(THD *thd, TABLE_LIST **tables, - MDL_ticket *mdl_savepoint); -TABLE_LIST *find_table_in_list(TABLE_LIST *table, - TABLE_LIST *TABLE_LIST::*link, - const char *db_name, - const char *table_name); -TABLE_LIST *unique_table(THD *thd, TABLE_LIST *table, TABLE_LIST *table_list, - bool check_alias); -TABLE *find_temporary_table(THD *thd, const char *db, const char *table_name); -TABLE *find_temporary_table(THD *thd, TABLE_LIST *table_list); -int drop_temporary_table(THD *thd, TABLE_LIST *table_list); -void close_temporary_table(THD *thd, TABLE *table, bool free_share, - bool delete_table); -void mark_tmp_table_for_reuse(TABLE *table); -void close_temporary(TABLE *table, bool free_share, bool delete_table); -bool rename_temporary_table(THD* thd, TABLE *table, const char *new_db, - const char *table_name); -void flush_tables(); -bool is_equal(const LEX_STRING *a, const LEX_STRING *b); -char *make_log_name(char *buff, const char *name, const char* log_ext); -extern char default_logfile_name[FN_REFLEN]; - -#ifdef WITH_PARTITION_STORAGE_ENGINE -uint fast_alter_partition_table(THD *thd, TABLE *table, - Alter_info *alter_info, - HA_CREATE_INFO *create_info, - TABLE_LIST *table_list, - char *db, - const char *table_name, - uint fast_alter_partition); -uint set_part_state(Alter_info *alter_info, partition_info *tab_part_info, - enum partition_state part_state); -uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info, - HA_CREATE_INFO *create_info, - handlerton *old_db_type, - bool *partition_changed, - uint *fast_alter_partition); -char *generate_partition_syntax(partition_info *part_info, - uint *buf_length, bool use_sql_alloc, - bool show_partition_options, - HA_CREATE_INFO *create_info, - Alter_info *alter_info); -#endif - -enum enum_tdc_remove_table_type {TDC_RT_REMOVE_ALL, TDC_RT_REMOVE_NOT_OWN, - TDC_RT_REMOVE_UNUSED}; -void tdc_remove_table(THD *thd, enum_tdc_remove_table_type remove_type, - const char *db, const char *table_name); - -#define NORMAL_PART_NAME 0 -#define TEMP_PART_NAME 1 -#define RENAMED_PART_NAME 2 -void create_partition_name(char *out, const char *in1, - const char *in2, uint name_variant, - bool translate); -void create_subpartition_name(char *out, const char *in1, - const char *in2, const char *in3, - uint name_variant); - -typedef struct st_lock_param_type -{ - TABLE_LIST *table_list; - ulonglong copied; - ulonglong deleted; - THD *thd; - HA_CREATE_INFO *create_info; - Alter_info *alter_info; - TABLE *table; - KEY *key_info_buffer; - const char *db; - const char *table_name; - uchar *pack_frm_data; - uint key_count; - uint db_options; - size_t pack_frm_len; - partition_info *part_info; -} ALTER_PARTITION_PARAM_TYPE; - -void mem_alloc_error(size_t size); - -enum ddl_log_entry_code -{ - /* - DDL_LOG_EXECUTE_CODE: - This is a code that indicates that this is a log entry to - be executed, from this entry a linked list of log entries - can be found and executed. - DDL_LOG_ENTRY_CODE: - An entry to be executed in a linked list from an execute log - entry. - DDL_IGNORE_LOG_ENTRY_CODE: - An entry that is to be ignored - */ - DDL_LOG_EXECUTE_CODE = 'e', - DDL_LOG_ENTRY_CODE = 'l', - DDL_IGNORE_LOG_ENTRY_CODE = 'i' -}; - -enum ddl_log_action_code -{ - /* - The type of action that a DDL_LOG_ENTRY_CODE entry is to - perform. - DDL_LOG_DELETE_ACTION: - Delete an entity - DDL_LOG_RENAME_ACTION: - Rename an entity - DDL_LOG_REPLACE_ACTION: - Rename an entity after removing the previous entry with the - new name, that is replace this entry. - */ - DDL_LOG_DELETE_ACTION = 'd', - DDL_LOG_RENAME_ACTION = 'r', - DDL_LOG_REPLACE_ACTION = 's' -}; - - -typedef struct st_ddl_log_entry -{ - const char *name; - const char *from_name; - const char *handler_name; - uint next_entry; - uint entry_pos; - enum ddl_log_entry_code entry_type; - enum ddl_log_action_code action_type; - /* - Most actions have only one phase. REPLACE does however have two - phases. The first phase removes the file with the new name if - there was one there before and the second phase renames the - old name to the new name. - */ - char phase; -} DDL_LOG_ENTRY; - -typedef struct st_ddl_log_memory_entry -{ - uint entry_pos; - struct st_ddl_log_memory_entry *next_log_entry; - struct st_ddl_log_memory_entry *prev_log_entry; - struct st_ddl_log_memory_entry *next_active_log_entry; -} DDL_LOG_MEMORY_ENTRY; - - -bool write_ddl_log_entry(DDL_LOG_ENTRY *ddl_log_entry, - DDL_LOG_MEMORY_ENTRY **active_entry); -bool write_execute_ddl_log_entry(uint first_entry, - bool complete, - DDL_LOG_MEMORY_ENTRY **active_entry); -bool deactivate_ddl_log_entry(uint entry_no); -void release_ddl_log_memory_entry(DDL_LOG_MEMORY_ENTRY *log_entry); -bool sync_ddl_log(); -void release_ddl_log(); -void execute_ddl_log_recovery(); -bool execute_ddl_log_entry(THD *thd, uint first_entry); - -extern mysql_mutex_t LOCK_gdl; - -#define WFRM_WRITE_SHADOW 1 -#define WFRM_INSTALL_SHADOW 2 -#define WFRM_PACK_FRM 4 -#define WFRM_KEEP_SHARE 8 -bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags); -int abort_and_upgrade_lock(ALTER_PARTITION_PARAM_TYPE *lpt); -void close_open_tables_and_downgrade(ALTER_PARTITION_PARAM_TYPE *lpt); - -/* Functions to work with system tables. */ -bool open_system_tables_for_read(THD *thd, TABLE_LIST *table_list, - Open_tables_backup *backup); -void close_system_tables(THD *thd, Open_tables_backup *backup); -TABLE *open_system_table_for_update(THD *thd, TABLE_LIST *one_table); - -TABLE *open_log_table(THD *thd, TABLE_LIST *one_table, Open_tables_backup *backup); -void close_log_table(THD *thd, Open_tables_backup *backup); - -bool close_cached_tables(THD *thd, TABLE_LIST *tables, bool have_lock, - bool wait_for_refresh); -bool close_cached_connection_tables(THD *thd, bool wait_for_refresh, - LEX_STRING *connect_string, - bool have_lock = FALSE); -void copy_field_from_tmp_record(Field *field,int offset); -bool fill_record(THD *thd, Field **field, List<Item> &values, - bool ignore_errors); -bool fill_record_n_invoke_before_triggers(THD *thd, List<Item> &fields, - List<Item> &values, - bool ignore_errors, - Table_triggers_list *triggers, - enum trg_event_type event); -bool fill_record_n_invoke_before_triggers(THD *thd, Field **field, - List<Item> &values, - bool ignore_errors, - Table_triggers_list *triggers, - enum trg_event_type event); -OPEN_TABLE_LIST *list_open_tables(THD *thd, const char *db, const char *wild); - -inline TABLE_LIST *find_table_in_global_list(TABLE_LIST *table, - const char *db_name, - const char *table_name) -{ - return find_table_in_list(table, &TABLE_LIST::next_global, - db_name, table_name); -} - -inline TABLE_LIST *find_table_in_local_list(TABLE_LIST *table, - const char *db_name, - const char *table_name) -{ - return find_table_in_list(table, &TABLE_LIST::next_local, - db_name, table_name); -} - - -/* sql_calc.cc */ -bool eval_const_cond(COND *cond); - -/* sql_load.cc */ -int mysql_load(THD *thd, sql_exchange *ex, TABLE_LIST *table_list, - List<Item> &fields_vars, List<Item> &set_fields, - List<Item> &set_values_list, - enum enum_duplicates handle_duplicates, bool ignore, - bool local_file); -int write_record(THD *thd, TABLE *table, COPY_INFO *info); - -/* sql_manager.cc */ -extern bool volatile mqh_used; -void start_handle_manager(); -void stop_handle_manager(); -bool mysql_manager_submit(void (*action)()); - - -/* sql_test.cc */ -#ifndef DBUG_OFF -void print_where(COND *cond,const char *info, enum_query_type query_type); -void print_cached_tables(void); -void TEST_filesort(SORT_FIELD *sortorder,uint s_length); -void print_plan(JOIN* join,uint idx, double record_count, double read_time, - double current_read_time, const char *info); -#endif -void mysql_print_status(); -/* key.cc */ -int find_ref_key(KEY *key, uint key_count, uchar *record, Field *field, - uint *key_length, uint *keypart); -void key_copy(uchar *to_key, uchar *from_record, KEY *key_info, uint key_length); -void key_restore(uchar *to_record, uchar *from_key, KEY *key_info, - uint key_length); -bool key_cmp_if_same(TABLE *form,const uchar *key,uint index,uint key_length); -void key_unpack(String *to,TABLE *form,uint index); -bool is_key_used(TABLE *table, uint idx, const MY_BITMAP *fields); -int key_cmp(KEY_PART_INFO *key_part, const uchar *key, uint key_length); -extern "C" int key_rec_cmp(void *key_info, uchar *a, uchar *b); - -bool init_errmessage(void); -#endif /* MYSQL_SERVER */ -void sql_perror(const char *message); -bool read_texts(const char *file_name, const char *language, - const char ***point, uint error_messages); - -bool fn_format_relative_to_data_home(char * to, const char *name, - const char *dir, const char *extension); -#ifdef MYSQL_SERVER -File open_binlog(IO_CACHE *log, const char *log_file_name, - const char **errmsg); - -/* mysqld.cc */ -extern void MYSQLerror(const char*); -void refresh_status(THD *thd); -my_bool mysql_rm_tmp_tables(void); -void handle_connection_in_main_thread(THD *thd); -void create_thread_to_handle_connection(THD *thd); -void unlink_thd(THD *thd); -bool one_thread_per_connection_end(THD *thd, bool put_in_cache); -void flush_thread_cache(); - -/* item_func.cc */ -extern bool check_reserved_words(LEX_STRING *name); -extern enum_field_types agg_field_type(Item **items, uint nitems); - -/* strfunc.cc */ -ulonglong find_set(TYPELIB *lib, const char *x, uint length, CHARSET_INFO *cs, - char **err_pos, uint *err_len, bool *set_warning); -uint find_type(const TYPELIB *lib, const char *find, uint length, - bool part_match); -uint find_type2(const TYPELIB *lib, const char *find, uint length, - CHARSET_INFO *cs); -void unhex_type2(TYPELIB *lib); -uint check_word(TYPELIB *lib, const char *val, const char *end, - const char **end_of_word); -int find_string_in_array(LEX_STRING * const haystack, LEX_STRING * const needle, - CHARSET_INFO * const cs); -char *set_to_string(THD *thd, LEX_STRING *result, ulonglong set, - const char *lib[]); -char *flagset_to_string(THD *thd, LEX_STRING *result, ulonglong set, - const char *lib[]); - - -bool is_keyword(const char *name, uint len); - -#define MY_DB_OPT_FILE "db.opt" -bool my_database_names_init(void); -void my_database_names_free(void); -bool check_db_dir_existence(const char *db_name); -bool load_db_opt(THD *thd, const char *path, HA_CREATE_INFO *create); -bool load_db_opt_by_name(THD *thd, const char *db_name, - HA_CREATE_INFO *db_create_info); -CHARSET_INFO *get_default_db_collation(THD *thd, const char *db_name); -bool my_dbopt_init(void); -void my_dbopt_cleanup(void); -extern int creating_database; // How many database locks are made -extern int creating_table; // How many mysql_create_table() are running - -/* - External variables -*/ - -extern time_t server_start_time, flush_status_time; -#endif /* MYSQL_SERVER */ -#if defined MYSQL_SERVER || defined INNODB_COMPATIBILITY_HOOKS -extern uint mysql_data_home_len, mysql_real_data_home_len; -extern const char *mysql_real_data_home_ptr; -extern uint thread_handling; - -extern MYSQL_PLUGIN_IMPORT char *mysql_data_home; -extern char server_version[SERVER_VERSION_LENGTH]; -extern MYSQL_PLUGIN_IMPORT char mysql_real_data_home[]; -extern char mysql_unpacked_real_data_home[]; - -extern CHARSET_INFO *character_set_filesystem; -#endif /* MYSQL_SERVER || INNODB_COMPATIBILITY_HOOKS */ -#ifdef MYSQL_SERVER -extern char *opt_mysql_tmpdir, mysql_charsets_dir[]; -extern int mysql_unpacked_real_data_home_len; -#define mysql_tmpdir (my_tmpdir(&mysql_tmpdir_list)) -extern MYSQL_PLUGIN_IMPORT MY_TMPDIR mysql_tmpdir_list; -extern const LEX_STRING command_name[]; - -extern LEX_STRING opt_init_connect, opt_init_slave; - -extern const char *first_keyword, *delayed_user, *binary_keyword; -extern MYSQL_PLUGIN_IMPORT const char *my_localhost; -extern MYSQL_PLUGIN_IMPORT const char **errmesg; /* Error messages */ - -extern const char *in_left_expr_name, *in_additional_cond, *in_having_cond; -extern const char * const TRG_EXT; -extern const char * const TRN_EXT; -extern Eq_creator eq_creator; -extern Ne_creator ne_creator; -extern Gt_creator gt_creator; -extern Lt_creator lt_creator; -extern Ge_creator ge_creator; -extern Le_creator le_creator; -extern char lc_messages_dir[FN_REFLEN]; -extern char *lc_messages_dir_ptr, *log_error_file_ptr; -#endif /* MYSQL_SERVER */ -#if defined MYSQL_SERVER || defined INNODB_COMPATIBILITY_HOOKS -extern MYSQL_PLUGIN_IMPORT char reg_ext[FN_EXTLEN]; -extern MYSQL_PLUGIN_IMPORT uint reg_ext_length; -#endif /* MYSQL_SERVER || INNODB_COMPATIBILITY_HOOKS */ -#ifdef MYSQL_SERVER -extern char *mysql_home_ptr, *pidfile_name_ptr; -extern char glob_hostname[FN_REFLEN], mysql_home[FN_REFLEN]; -extern char pidfile_name[FN_REFLEN], system_time_zone[30], *opt_init_file; -extern char log_error_file[FN_REFLEN], *opt_tc_log_file; -extern const double log_10[309]; -extern ulonglong log_10_int[20]; -extern ulonglong keybuff_size; -extern ulonglong thd_startup_options; -extern ulong thread_id; -extern ulong binlog_cache_use, binlog_cache_disk_use; -extern ulong aborted_threads,aborted_connects; -extern ulong delayed_insert_timeout; -extern ulong delayed_insert_limit, delayed_queue_size; -extern ulong delayed_insert_threads, delayed_insert_writes; -extern ulong delayed_rows_in_use,delayed_insert_errors; -extern ulong slave_open_temp_tables; -extern ulong query_cache_size, query_cache_min_res_unit; -extern ulong slow_launch_threads, slow_launch_time; -extern ulong table_cache_size, table_def_size; -extern MYSQL_PLUGIN_IMPORT ulong max_connections; -extern ulong max_connect_errors, connect_timeout; -extern ulong slave_trans_retries; -extern uint slave_net_timeout; -extern ulong what_to_log,flush_time; -extern ulong query_buff_size; -extern ulong max_prepared_stmt_count, prepared_stmt_count; -extern ulong binlog_cache_size, open_files_limit; -extern ulonglong max_binlog_cache_size; -extern ulong max_binlog_size, max_relay_log_size; -extern ulong opt_binlog_rows_event_max_size; -extern ulong rpl_recovery_rank, thread_cache_size, thread_pool_size; -extern ulong back_log; -#endif /* MYSQL_SERVER */ -#if defined MYSQL_SERVER || defined INNODB_COMPATIBILITY_HOOKS -extern ulong MYSQL_PLUGIN_IMPORT specialflag; -#endif /* MYSQL_SERVER || INNODB_COMPATIBILITY_HOOKS */ -#ifdef MYSQL_SERVER -extern ulong current_pid; -extern ulong expire_logs_days; -extern uint sync_binlog_period, sync_relaylog_period, - sync_relayloginfo_period, sync_masterinfo_period; -extern ulong opt_tc_log_size, tc_log_max_pages_used, tc_log_page_size; -extern ulong tc_log_page_waits; -extern my_bool relay_log_purge, opt_innodb_safe_binlog, opt_innodb; -extern my_bool relay_log_recovery; -extern uint test_flags,select_errors,ha_open_options; -extern uint protocol_version, mysqld_port, dropping_tables; -extern uint delay_key_write_options; -#endif /* MYSQL_SERVER */ -#if defined MYSQL_SERVER || defined INNODB_COMPATIBILITY_HOOKS -extern MYSQL_PLUGIN_IMPORT uint lower_case_table_names; -#endif /* MYSQL_SERVER || INNODB_COMPATIBILITY_HOOKS */ -#ifdef MYSQL_SERVER -extern bool opt_endinfo, using_udf_functions; -extern my_bool locked_in_memory; -extern bool opt_using_transactions; -#endif /* MYSQL_SERVER */ -#if defined MYSQL_SERVER || defined INNODB_COMPATIBILITY_HOOKS -extern MYSQL_PLUGIN_IMPORT bool mysqld_embedded; -#endif /* MYSQL_SERVER || INNODB_COMPATIBILITY_HOOKS */ -#ifdef MYSQL_SERVER -extern bool opt_large_files, server_id_supplied; -extern bool opt_bin_log, opt_error_log; -extern my_bool opt_log, opt_slow_log; -extern ulonglong log_output_options; -extern my_bool opt_log_queries_not_using_indexes; -extern bool opt_disable_networking, opt_skip_show_db; -extern bool opt_ignore_builtin_innodb; -extern my_bool opt_character_set_client_handshake; -extern bool volatile abort_loop, shutdown_in_progress; -extern bool in_bootstrap; -extern uint volatile thread_count, global_read_lock; -extern uint connection_count; -extern my_bool opt_sql_bin_update, opt_safe_user_create, opt_no_mix_types; -extern my_bool opt_local_infile, opt_myisam_use_mmap; -extern my_bool opt_slave_compressed_protocol, use_temp_pool; -extern uint slave_exec_mode_options; -extern ulonglong slave_type_conversions_options; -extern my_bool opt_readonly, lower_case_file_system; -extern my_bool opt_enable_named_pipe, opt_sync_frm, opt_allow_suspicious_udfs; -extern my_bool opt_secure_auth; -extern char* opt_secure_file_priv; -extern my_bool opt_log_slow_admin_statements, opt_log_slow_slave_statements; -extern my_bool sp_automatic_privileges, opt_noacl, disable_slaves; -extern my_bool opt_old_style_user_limits, trust_function_creators; -extern uint opt_crash_binlog_innodb; -extern char *shared_memory_base_name, *mysqld_unix_port; -extern my_bool opt_enable_shared_memory; -extern char *default_tz_name; -extern Time_zone *default_tz; -extern char *default_storage_engine; -#endif /* MYSQL_SERVER */ -#if defined MYSQL_SERVER || defined INNODB_COMPATIBILITY_HOOKS -extern my_bool opt_large_pages; -extern uint opt_large_page_size; -#endif /* MYSQL_SERVER || INNODB_COMPATIBILITY_HOOKS */ -#ifdef MYSQL_SERVER -extern char *opt_logname, *opt_slow_logname; -extern const char *log_output_str; -extern my_bool old_mode; - -extern MYSQL_PLUGIN_IMPORT MYSQL_BIN_LOG mysql_bin_log; -extern LOGGER logger; -extern TABLE_LIST general_log, slow_log; -extern MYSQL_FILE *bootstrap_file; -extern int bootstrap_error; -extern FILE *stderror_file; -extern pthread_key(MEM_ROOT**,THR_MALLOC); -extern mysql_mutex_t LOCK_mysql_create_db, LOCK_open, LOCK_lock_db, - LOCK_mapped_file, LOCK_user_locks, LOCK_status, - LOCK_error_log, LOCK_delayed_insert, LOCK_uuid_generator, - LOCK_delayed_status, LOCK_delayed_create, LOCK_crypt, LOCK_timezone, - LOCK_slave_list, LOCK_active_mi, LOCK_manager, LOCK_global_read_lock, - LOCK_global_system_variables, LOCK_user_conn, - LOCK_prepared_stmt_count, LOCK_error_messages, LOCK_connection_count; -extern MYSQL_PLUGIN_IMPORT mysql_mutex_t LOCK_thread_count; -#ifdef HAVE_OPENSSL -extern mysql_mutex_t LOCK_des_key_file; -#endif -extern mysql_mutex_t LOCK_server_started; -extern mysql_cond_t COND_server_started; -extern int mysqld_server_started; -extern mysql_rwlock_t LOCK_grant, LOCK_sys_init_connect, LOCK_sys_init_slave; -extern mysql_rwlock_t LOCK_system_variables_hash; -extern mysql_cond_t COND_thread_count; -extern mysql_cond_t COND_refresh, COND_manager; -extern mysql_cond_t COND_global_read_lock; -extern pthread_attr_t connection_attrib; -extern I_List<THD> threads; -extern MY_BITMAP temp_pool; -extern String my_empty_string; -extern const String my_null_string; -extern SHOW_VAR status_vars[]; -#endif /* MYSQL_SERVER */ -#if defined MYSQL_SERVER || defined INNODB_COMPATIBILITY_HOOKS -extern MYSQL_PLUGIN_IMPORT struct system_variables global_system_variables; -#endif /* MYSQL_SERVER || INNODB_COMPATIBILITY_HOOKS */ -#ifdef MYSQL_SERVER -extern struct system_variables max_system_variables; -extern struct system_status_var global_status_var; -extern struct rand_struct sql_rand; - -extern DATE_TIME_FORMAT global_date_format, global_datetime_format, global_time_format; -extern KNOWN_DATE_TIME_FORMAT known_date_time_formats[]; - -extern String null_string; -extern HASH table_def_cache, lock_db_cache; -extern TABLE *unused_tables; -extern uint table_cache_count; -extern const char* any_db; -extern const LEX_STRING view_type; -extern scheduler_functions thread_scheduler; -extern TYPELIB thread_handling_typelib; -extern uint sql_command_flags[]; -extern uint server_command_flags[]; -extern TYPELIB log_output_typelib; -extern const char *log_output_names[]; - -/* optional things, have_* variables */ -extern SHOW_COMP_OPTION have_csv, have_innodb; -extern SHOW_COMP_OPTION have_ndbcluster, have_partitioning; -extern SHOW_COMP_OPTION have_profiling; - -extern handlerton *partition_hton; -extern handlerton *myisam_hton; -extern handlerton *heap_hton; - -extern SHOW_COMP_OPTION have_ssl, have_symlink, have_dlopen; -extern SHOW_COMP_OPTION have_query_cache; -extern SHOW_COMP_OPTION have_geometry, have_rtree_keys; -extern SHOW_COMP_OPTION have_crypt; -extern SHOW_COMP_OPTION have_compress; - -extern int orig_argc; -extern char **orig_argv; -extern const char *load_default_groups[]; - -#ifndef __WIN__ -extern pthread_t signal_thread; -#endif - -extern char *opt_ssl_ca, *opt_ssl_capath, *opt_ssl_cert, *opt_ssl_cipher, - *opt_ssl_key; - -#ifdef HAVE_OPENSSL -extern struct st_VioSSLFd * ssl_acceptor_fd; -#endif /* HAVE_OPENSSL */ - -MYSQL_LOCK *mysql_lock_tables(THD *thd, TABLE **table, uint count, uint flags); -/* mysql_lock_tables() and open_table() flags bits */ -#define MYSQL_OPEN_IGNORE_GLOBAL_READ_LOCK 0x0001 -#define MYSQL_OPEN_IGNORE_FLUSH 0x0002 -#define MYSQL_OPEN_TEMPORARY_ONLY 0x0004 -#define MYSQL_LOCK_IGNORE_GLOBAL_READ_ONLY 0x0008 -#define MYSQL_LOCK_LOG_TABLE 0x0010 -#define MYSQL_OPEN_TAKE_UPGRADABLE_MDL 0x0020 -/** - Do not try to acquire a metadata lock on the table: we - already have one. -*/ -#define MYSQL_OPEN_HAS_MDL_LOCK 0x0040 -/** - If in locked tables mode, ignore the locked tables and get - a new instance of the table. -*/ -#define MYSQL_OPEN_GET_NEW_TABLE 0x0080 -/** Don't look up the table in the list of temporary tables. */ -#define MYSQL_OPEN_SKIP_TEMPORARY 0x0100 -/** Fail instead of waiting when conficting metadata lock is discovered. */ -#define MYSQL_OPEN_FAIL_ON_MDL_CONFLICT 0x0200 -/** Open tables using MDL_SHARED lock instead of one specified in parser. */ -#define MYSQL_OPEN_FORCE_SHARED_MDL 0x0400 -/** - Open tables using MDL_SHARED_HIGH_PRIO lock instead of one specified - in parser. -*/ -#define MYSQL_OPEN_FORCE_SHARED_HIGH_PRIO_MDL 0x0800 -/** - When opening or locking the table, use the maximum timeout - (LONG_TIMEOUT = 1 year) rather than the user-supplied timeout value. -*/ -#define MYSQL_LOCK_IGNORE_TIMEOUT 0x1000 - -/** Please refer to the internals manual. */ -#define MYSQL_OPEN_REOPEN (MYSQL_OPEN_IGNORE_FLUSH |\ - MYSQL_OPEN_IGNORE_GLOBAL_READ_LOCK |\ - MYSQL_LOCK_IGNORE_GLOBAL_READ_ONLY |\ - MYSQL_LOCK_IGNORE_TIMEOUT |\ - MYSQL_OPEN_GET_NEW_TABLE |\ - MYSQL_OPEN_SKIP_TEMPORARY |\ - MYSQL_OPEN_HAS_MDL_LOCK) - -void mysql_unlock_tables(THD *thd, MYSQL_LOCK *sql_lock); -void mysql_unlock_read_tables(THD *thd, MYSQL_LOCK *sql_lock); -void mysql_unlock_some_tables(THD *thd, TABLE **table,uint count); -void mysql_lock_remove(THD *thd, MYSQL_LOCK *locked,TABLE *table); -void mysql_lock_abort(THD *thd, TABLE *table, bool upgrade_lock); -void mysql_lock_downgrade_write(THD *thd, TABLE *table, - thr_lock_type new_lock_type); -bool mysql_lock_abort_for_thread(THD *thd, TABLE *table); -MYSQL_LOCK *mysql_lock_merge(MYSQL_LOCK *a,MYSQL_LOCK *b); -TABLE_LIST *mysql_lock_have_duplicate(THD *thd, TABLE_LIST *needle, - TABLE_LIST *haystack); -void broadcast_refresh(void); - -/* Lock based on name */ -bool lock_table_names(THD *thd, TABLE_LIST *table_list); -void unlock_table_names(THD *thd); - -/* Lock based on stored routine name */ -bool lock_routine_name(THD *thd, bool is_function, const char *db, - const char *name); - -/* old unireg functions */ - -void unireg_init(ulong options); -void unireg_end(void) __attribute__((noreturn)); -bool mysql_create_frm(THD *thd, const char *file_name, - const char *db, const char *table, - HA_CREATE_INFO *create_info, - List<Create_field> &create_field, - uint key_count,KEY *key_info,handler *db_type); -int rea_create_table(THD *thd, const char *path, - const char *db, const char *table_name, - HA_CREATE_INFO *create_info, - List<Create_field> &create_field, - uint key_count,KEY *key_info, - handler *file); -int format_number(uint inputflag,uint max_length,char * pos,uint length, - char * *errpos); - -/* table.cc */ -TABLE_SHARE *alloc_table_share(TABLE_LIST *table_list, char *key, - uint key_length); -void init_tmp_table_share(THD *thd, TABLE_SHARE *share, const char *key, - uint key_length, - const char *table_name, const char *path); -void free_table_share(TABLE_SHARE *share); -int open_table_def(THD *thd, TABLE_SHARE *share, uint db_flags); -void open_table_error(TABLE_SHARE *share, int error, int db_errno, int errarg); -int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias, - uint db_stat, uint prgflag, uint ha_open_flags, - TABLE *outparam, bool is_create_table); -int readfrm(const char *name, uchar **data, size_t *length); -int writefrm(const char* name, const uchar* data, size_t len); -int closefrm(TABLE *table, bool free_share); -int read_string(File file, uchar* *to, size_t length); -void free_blobs(TABLE *table); -void free_field_buffers_larger_than(TABLE *table, uint32 size); -int set_zone(int nr,int min_zone,int max_zone); -ulong convert_period_to_month(ulong period); -ulong convert_month_to_period(ulong month); -void get_date_from_daynr(long daynr,uint *year, uint *month, - uint *day); -my_time_t TIME_to_timestamp(THD *thd, const MYSQL_TIME *t, my_bool *not_exist); -/* Character set-aware version of str_to_time() */ -bool str_to_time(CHARSET_INFO *cs, const char *str,uint length, - MYSQL_TIME *l_time, int *warning); -/* Character set-aware version of str_to_datetime() */ -timestamp_type str_to_datetime(CHARSET_INFO *cs, - const char *str, uint length, - MYSQL_TIME *l_time, uint flags, int *was_cut); -bool str_to_time_with_warn(CHARSET_INFO *cs, const char *str,uint length, - MYSQL_TIME *l_time); -timestamp_type str_to_datetime_with_warn(CHARSET_INFO *cs, - const char *str, uint length, - MYSQL_TIME *l_time, uint flags); -void localtime_to_TIME(MYSQL_TIME *to, struct tm *from); -void calc_time_from_sec(MYSQL_TIME *to, long seconds, long microseconds); - -void make_truncated_value_warning(THD *thd, MYSQL_ERROR::enum_warning_level level, - const char *str_val, - uint str_length, timestamp_type time_type, - const char *field_name); - -bool date_add_interval(MYSQL_TIME *ltime, interval_type int_type, INTERVAL interval); -bool calc_time_diff(MYSQL_TIME *l_time1, MYSQL_TIME *l_time2, int l_sign, - longlong *seconds_out, long *microseconds_out); - -extern LEX_STRING interval_type_to_name[]; - - -bool parse_date_time_format(timestamp_type format_type, - const char *format, uint format_length, - DATE_TIME_FORMAT *date_time_format); -/* convenience wrapper */ -inline bool parse_date_time_format(timestamp_type format_type, - DATE_TIME_FORMAT *date_time_format) -{ - return parse_date_time_format(format_type, - date_time_format->format.str, - date_time_format->format.length, - date_time_format); -} - -extern DATE_TIME_FORMAT *date_time_format_make(timestamp_type format_type, - const char *format_str, - uint format_length); -extern DATE_TIME_FORMAT *date_time_format_copy(THD *thd, - DATE_TIME_FORMAT *format); -const char *get_date_time_format_str(KNOWN_DATE_TIME_FORMAT *format, - timestamp_type type); -extern bool make_date_time(DATE_TIME_FORMAT *format, MYSQL_TIME *l_time, - timestamp_type type, String *str); -void make_datetime(const DATE_TIME_FORMAT *format, const MYSQL_TIME *l_time, - String *str); -void make_date(const DATE_TIME_FORMAT *format, const MYSQL_TIME *l_time, - String *str); -void make_time(const DATE_TIME_FORMAT *format, const MYSQL_TIME *l_time, - String *str); -int my_time_compare(MYSQL_TIME *a, MYSQL_TIME *b); -longlong get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg, - Item *warn_item, bool *is_null); - -int test_if_number(char *str,int *res,bool allow_wildcards); -void change_byte(uchar *,uint,char,char); -ha_rows filesort(THD *thd, TABLE *form,struct st_sort_field *sortorder, - uint s_length, SQL_SELECT *select, - ha_rows max_rows, bool sort_positions, - ha_rows *examined_rows); -void filesort_free_buffers(TABLE *table, bool full); -void change_double_for_sort(double nr,uchar *to); -double my_double_round(double value, longlong dec, bool dec_unsigned, - bool truncate); -int get_quick_record(SQL_SELECT *select); - -int calc_weekday(long daynr,bool sunday_first_day_of_week); -uint calc_week(MYSQL_TIME *l_time, uint week_behaviour, uint *year); -void find_date(char *pos,uint *vek,uint flag); -TYPELIB *convert_strings_to_array_type(char * *typelibs, char * *end); -TYPELIB *typelib(MEM_ROOT *mem_root, List<String> &strings); -ulong get_form_pos(File file, uchar *head, TYPELIB *save_names); -ulong make_new_entry(File file,uchar *fileinfo,TYPELIB *formnames, - const char *newname); -ulong next_io_size(ulong pos); -void append_unescaped(String *res, const char *pos, uint length); -int create_frm(THD *thd, const char *name, const char *db, const char *table, - uint reclength, uchar *fileinfo, - HA_CREATE_INFO *create_info, uint keys, KEY *key_info); -void update_create_info_from_table(HA_CREATE_INFO *info, TABLE *form); -int rename_file_ext(const char * from,const char * to,const char * ext); -bool check_db_name(LEX_STRING *db); -bool check_column_name(const char *name); -bool check_table_name(const char *name, uint length); -char *get_field(MEM_ROOT *mem, Field *field); -bool get_field(MEM_ROOT *mem, Field *field, class String *res); -int wild_case_compare(CHARSET_INFO *cs, const char *str,const char *wildstr); -char *fn_rext(char *name); -bool check_duplicate_warning(THD *thd, char *msg, ulong length); - -/* Conversion functions */ -#endif /* MYSQL_SERVER */ -#if defined MYSQL_SERVER || defined INNODB_COMPATIBILITY_HOOKS -uint strconvert(CHARSET_INFO *from_cs, const char *from, - CHARSET_INFO *to_cs, char *to, uint to_length, uint *errors); -/* depends on errmsg.txt Database `db`, Table `t` ... */ -#define EXPLAIN_FILENAME_MAX_EXTRA_LENGTH 63 -enum enum_explain_filename_mode -{ - EXPLAIN_ALL_VERBOSE= 0, - EXPLAIN_PARTITIONS_VERBOSE, - EXPLAIN_PARTITIONS_AS_COMMENT -}; -uint explain_filename(THD* thd, const char *from, char *to, uint to_length, - enum_explain_filename_mode explain_mode); -uint filename_to_tablename(const char *from, char *to, uint to_length); -uint tablename_to_filename(const char *from, char *to, uint to_length); -uint check_n_cut_mysql50_prefix(const char *from, char *to, uint to_length); -#endif /* MYSQL_SERVER || INNODB_COMPATIBILITY_HOOKS */ -#ifdef MYSQL_SERVER -uint build_table_filename(char *buff, size_t bufflen, const char *db, - const char *table, const char *ext, uint flags); -const char *get_canonical_filename(handler *file, const char *path, - char *tmp_path); - -#define MYSQL50_TABLE_NAME_PREFIX "#mysql50#" -#define MYSQL50_TABLE_NAME_PREFIX_LENGTH 9 - -uint build_table_shadow_filename(char *buff, size_t bufflen, - ALTER_PARTITION_PARAM_TYPE *lpt); -/* Flags for conversion functions. */ -#define FN_FROM_IS_TMP (1 << 0) -#define FN_TO_IS_TMP (1 << 1) -#define FN_IS_TMP (FN_FROM_IS_TMP | FN_TO_IS_TMP) -#define NO_FRM_RENAME (1 << 2) -#define FRM_ONLY (1 << 3) - -/* from hostname.cc */ -bool ip_to_hostname(struct sockaddr_storage *ip_storage, - const char *ip_string, - char **hostname, uint *connect_errors); -void inc_host_errors(const char *ip_string); -void reset_host_errors(const char *ip_string); -bool hostname_cache_init(); -void hostname_cache_free(); -void hostname_cache_refresh(void); - -/* sql_cache.cc */ -extern bool sql_cache_init(); -extern void sql_cache_free(); -extern int sql_cache_hit(THD *thd, char *inBuf, uint length); - -/* item_func.cc */ -Item *get_system_var(THD *thd, enum_var_type var_type, LEX_STRING name, - LEX_STRING component); -int get_var_with_binlog(THD *thd, enum_sql_command sql_command, - LEX_STRING &name, user_var_entry **out_entry); -/* log.cc */ -bool flush_error_log(void); - -/* sql_list.cc */ -void free_list(I_List <i_string_pair> *list); -void free_list(I_List <i_string> *list); - -/* sql_yacc.cc */ -#ifndef DBUG_OFF -extern void turn_parser_debug_on(); -#endif - -/* frm_crypt.cc */ -#ifdef HAVE_CRYPTED_FRM -SQL_CRYPT *get_crypt_for_frm(void); -#endif - -/* password.c */ -extern "C" void my_make_scrambled_password_323(char *to, const char *password, - size_t pass_len); -extern "C" void my_make_scrambled_password(char *to, const char *password, - size_t pass_len); - -#include "sql_view.h" - -/* Some inline functions for more speed */ - -inline bool add_item_to_list(THD *thd, Item *item) -{ - return thd->lex->current_select->add_item_to_list(thd, item); -} - -inline bool add_value_to_list(THD *thd, Item *value) -{ - return thd->lex->value_list.push_back(value); -} - -inline bool add_order_to_list(THD *thd, Item *item, bool asc) -{ - return thd->lex->current_select->add_order_to_list(thd, item, asc); -} - -inline bool add_group_to_list(THD *thd, Item *item, bool asc) -{ - return thd->lex->current_select->add_group_to_list(thd, item, asc); -} - -inline void mark_as_null_row(TABLE *table) -{ - table->null_row=1; - table->status|=STATUS_NULL_ROW; - bfill(table->null_flags,table->s->null_bytes,255); -} - -inline void table_case_convert(char * name, uint length) -{ - if (lower_case_table_names) - files_charset_info->cset->casedn(files_charset_info, - name, length, name, length); -} - -inline const char *table_case_name(HA_CREATE_INFO *info, const char *name) -{ - return ((lower_case_table_names == 2 && info->alias) ? info->alias : name); -} - -inline ulong sql_rnd_with_mutex() -{ - mysql_mutex_lock(&LOCK_thread_count); - ulong tmp=(ulong) (my_rnd(&sql_rand) * 0xffffffff); /* make all bits random */ - mysql_mutex_unlock(&LOCK_thread_count); - return tmp; -} - -Comp_creator *comp_eq_creator(bool invert); -Comp_creator *comp_ge_creator(bool invert); -Comp_creator *comp_gt_creator(bool invert); -Comp_creator *comp_le_creator(bool invert); -Comp_creator *comp_lt_creator(bool invert); -Comp_creator *comp_ne_creator(bool invert); - -Item * all_any_subquery_creator(Item *left_expr, - chooser_compare_func_creator cmp, - bool all, - SELECT_LEX *select_lex); - -/** - clean/setup table fields and map. - - @param table TABLE structure pointer (which should be setup) - @param table_list TABLE_LIST structure pointer (owner of TABLE) - @param tablenr table number -*/ - - -inline void setup_table_map(TABLE *table, TABLE_LIST *table_list, uint tablenr) -{ - table->used_fields= 0; - table->const_table= 0; - table->null_row= 0; - table->status= STATUS_NO_RECORD; - table->maybe_null= table_list->outer_join; - TABLE_LIST *embedding= table_list->embedding; - while (!table->maybe_null && embedding) - { - table->maybe_null= embedding->outer_join; - embedding= embedding->embedding; - } - table->tablenr= tablenr; - table->map= (table_map) 1 << tablenr; - table->force_index= table_list->force_index; - table->force_index_order= table->force_index_group= 0; - table->covering_keys= table->s->keys_for_keyread; - table->merge_keys.clear_all(); -} - - -/** - convert a hex digit into number. -*/ - -inline int hexchar_to_int(char c) -{ - if (c <= '9' && c >= '0') - return c-'0'; - c|=32; - if (c <= 'f' && c >= 'a') - return c-'a'+10; - return -1; -} - -/** - return true if the table was created explicitly. -*/ -inline bool is_user_table(TABLE * table) -{ - const char *name= table->s->table_name.str; - return strncmp(name, tmp_file_prefix, tmp_file_prefix_length); -} - -/* - Some functions that are different in the embedded library and the normal - server -*/ - -#ifndef EMBEDDED_LIBRARY -extern "C" void unireg_abort(int exit_code) __attribute__((noreturn)); -void kill_delayed_threads(void); -#else -extern "C" void unireg_clear(int exit_code); -#define unireg_abort(exit_code) do { unireg_clear(exit_code); DBUG_RETURN(exit_code); } while(0) -inline void kill_delayed_threads(void) {} -#endif - -bool check_stack_overrun(THD *thd, long margin, uchar *dummy); - -/* This must match the path length limit in the ER_NOT_RW_DIR error msg. */ -#define ER_NOT_RW_DIR_PATHSIZE 200 -bool is_usable_directory(THD *thd, const char *varname, - const char *path, const char *prefix); - -/* Used by handlers to store things in schema tables */ -#define IS_FILES_FILE_ID 0 -#define IS_FILES_FILE_NAME 1 -#define IS_FILES_FILE_TYPE 2 -#define IS_FILES_TABLESPACE_NAME 3 -#define IS_FILES_TABLE_CATALOG 4 -#define IS_FILES_TABLE_SCHEMA 5 -#define IS_FILES_TABLE_NAME 6 -#define IS_FILES_LOGFILE_GROUP_NAME 7 -#define IS_FILES_LOGFILE_GROUP_NUMBER 8 -#define IS_FILES_ENGINE 9 -#define IS_FILES_FULLTEXT_KEYS 10 -#define IS_FILES_DELETED_ROWS 11 -#define IS_FILES_UPDATE_COUNT 12 -#define IS_FILES_FREE_EXTENTS 13 -#define IS_FILES_TOTAL_EXTENTS 14 -#define IS_FILES_EXTENT_SIZE 15 -#define IS_FILES_INITIAL_SIZE 16 -#define IS_FILES_MAXIMUM_SIZE 17 -#define IS_FILES_AUTOEXTEND_SIZE 18 -#define IS_FILES_CREATION_TIME 19 -#define IS_FILES_LAST_UPDATE_TIME 20 -#define IS_FILES_LAST_ACCESS_TIME 21 -#define IS_FILES_RECOVER_TIME 22 -#define IS_FILES_TRANSACTION_COUNTER 23 -#define IS_FILES_VERSION 24 -#define IS_FILES_ROW_FORMAT 25 -#define IS_FILES_TABLE_ROWS 26 -#define IS_FILES_AVG_ROW_LENGTH 27 -#define IS_FILES_DATA_LENGTH 28 -#define IS_FILES_MAX_DATA_LENGTH 29 -#define IS_FILES_INDEX_LENGTH 30 -#define IS_FILES_DATA_FREE 31 -#define IS_FILES_CREATE_TIME 32 -#define IS_FILES_UPDATE_TIME 33 -#define IS_FILES_CHECK_TIME 34 -#define IS_FILES_CHECKSUM 35 -#define IS_FILES_STATUS 36 -#define IS_FILES_EXTRA 37 - -#define IS_TABLESPACES_TABLESPACE_NAME 0 -#define IS_TABLESPACES_ENGINE 1 -#define IS_TABLESPACES_TABLESPACE_TYPE 2 -#define IS_TABLESPACES_LOGFILE_GROUP_NAME 3 -#define IS_TABLESPACES_EXTENT_SIZE 4 -#define IS_TABLESPACES_AUTOEXTEND_SIZE 5 -#define IS_TABLESPACES_MAXIMUM_SIZE 6 -#define IS_TABLESPACES_NODEGROUP_ID 7 -#define IS_TABLESPACES_TABLESPACE_COMMENT 8 - -void init_fill_schema_files_row(TABLE* table); -bool schema_table_store_record(THD *thd, TABLE *table); - -/* sql/item_create.cc */ -int item_create_init(); -void item_create_cleanup(); - -bool show_create_trigger(THD *thd, const sp_name *trg_name); - -inline void lex_string_set(LEX_STRING *lex_str, const char *c_str) -{ - lex_str->str= (char *) c_str; - lex_str->length= strlen(c_str); -} - -bool load_charset(MEM_ROOT *mem_root, - Field *field, - CHARSET_INFO *dflt_cs, - CHARSET_INFO **cs); - -bool load_collation(MEM_ROOT *mem_root, - Field *field, - CHARSET_INFO *dflt_cl, - CHARSET_INFO **cl); - -#define LONG_TIMEOUT ((ulong) 3600L*24L*365L) - -/** - only options that need special treatment in get_one_option() deserve - to be listed below -*/ -enum options_mysqld -{ - OPT_to_set_the_start_number=256, - OPT_BIND_ADDRESS, - OPT_BINLOG_DO_DB, - OPT_BINLOG_FORMAT, - OPT_BINLOG_IGNORE_DB, - OPT_BIN_LOG, - OPT_BOOTSTRAP, - OPT_CONSOLE, - OPT_DEBUG_SYNC_TIMEOUT, - OPT_ISAM_LOG, - OPT_KEY_BUFFER_SIZE, - OPT_KEY_CACHE_AGE_THRESHOLD, - OPT_KEY_CACHE_BLOCK_SIZE, - OPT_KEY_CACHE_DIVISION_LIMIT, - OPT_LOWER_CASE_TABLE_NAMES, - OPT_ONE_THREAD, - OPT_POOL_OF_THREADS, - OPT_REPLICATE_DO_DB, - OPT_REPLICATE_DO_TABLE, - OPT_REPLICATE_IGNORE_DB, - OPT_REPLICATE_IGNORE_TABLE, - OPT_REPLICATE_REWRITE_DB, - OPT_REPLICATE_WILD_DO_TABLE, - OPT_REPLICATE_WILD_IGNORE_TABLE, - OPT_SAFE, - OPT_SERVER_ID, - OPT_SKIP_HOST_CACHE, - OPT_SKIP_NEW, - OPT_SKIP_PRIOR, - OPT_SKIP_RESOLVE, - OPT_SKIP_STACK_TRACE, - OPT_SLOW_QUERY_LOG, - OPT_SSL_CA, - OPT_SSL_CAPATH, - OPT_SSL_CERT, - OPT_SSL_CIPHER, - OPT_SSL_KEY, - OPT_WANT_CORE, - OPT_ENGINE_CONDITION_PUSHDOWN, - OPT_LOG_ERROR -}; - -#endif /* MYSQL_SERVER */ -extern "C" int test_if_data_home_dir(const char *dir); - -#endif /* MYSQL_CLIENT */ - -#ifdef MYSQL_SERVER -#ifdef HAVE_PSI_INTERFACE -#ifdef HAVE_MMAP -extern PSI_mutex_key key_PAGE_lock, key_LOCK_sync, key_LOCK_active, - key_LOCK_pool; -#endif /* HAVE_MMAP */ - -#ifdef HAVE_OPENSSL -extern PSI_mutex_key key_LOCK_des_key_file; -#endif - -extern PSI_mutex_key key_BINLOG_LOCK_index, key_BINLOG_LOCK_prep_xids, - key_delayed_insert_mutex, key_hash_filo_lock, key_LOCK_active_mi, - key_LOCK_connection_count, key_LOCK_crypt, key_LOCK_delayed_create, - key_LOCK_delayed_insert, key_LOCK_delayed_status, key_LOCK_error_log, - key_LOCK_gdl, key_LOCK_global_read_lock, key_LOCK_global_system_variables, - key_LOCK_lock_db, key_LOCK_logger, key_LOCK_manager, key_LOCK_mapped_file, - key_LOCK_mysql_create_db, key_LOCK_open, key_LOCK_prepared_stmt_count, - key_LOCK_rpl_status, key_LOCK_server_started, key_LOCK_status, - key_LOCK_table_share, key_LOCK_thd_data, - key_LOCK_user_conn, key_LOCK_uuid_generator, key_LOG_LOCK_log, - key_master_info_data_lock, key_master_info_run_lock, - key_mutex_slave_reporting_capability_err_lock, key_relay_log_info_data_lock, - key_relay_log_info_log_space_lock, key_relay_log_info_run_lock, - key_structure_guard_mutex, key_TABLE_SHARE_LOCK_ha_data, key_LOCK_error_messages, - key_LOCK_thread_count; - -extern PSI_rwlock_key key_rwlock_LOCK_grant, key_rwlock_LOCK_logger, - key_rwlock_LOCK_sys_init_connect, key_rwlock_LOCK_sys_init_slave, - key_rwlock_LOCK_system_variables_hash, key_rwlock_query_cache_query_lock; - -#ifdef HAVE_MMAP -extern PSI_cond_key key_PAGE_cond, key_COND_active, key_COND_pool; -#endif /* HAVE_MMAP */ - -extern PSI_cond_key key_BINLOG_COND_prep_xids, key_BINLOG_update_cond, - key_COND_cache_status_changed, key_COND_global_read_lock, key_COND_manager, - key_COND_refresh, key_COND_rpl_status, key_COND_server_started, - key_delayed_insert_cond, key_delayed_insert_cond_client, - key_item_func_sleep_cond, key_master_info_data_cond, - key_master_info_start_cond, key_master_info_stop_cond, - key_relay_log_info_data_cond, key_relay_log_info_log_space_cond, - key_relay_log_info_start_cond, key_relay_log_info_stop_cond, - key_TABLE_SHARE_cond, key_user_level_lock_cond, - key_COND_thread_count, key_COND_thread_cache, key_COND_flush_thread_cache; - -extern PSI_thread_key key_thread_bootstrap, key_thread_delayed_insert, - key_thread_handle_manager, key_thread_kill_server, key_thread_main, - key_thread_one_connection, key_thread_signal_hand; - -#ifdef HAVE_MMAP -extern PSI_file_key key_file_map; -#endif /* HAVE_MMAP */ - -extern PSI_file_key key_file_binlog, key_file_binlog_index, key_file_casetest, - key_file_dbopt, key_file_des_key_file, key_file_ERRMSG, key_select_to_file, - key_file_fileparser, key_file_frm, key_file_global_ddl_log, key_file_load, - key_file_loadfile, key_file_log_event_data, key_file_log_event_info, - key_file_master_info, key_file_misc, key_file_MYSQL_LOG, key_file_partition, - key_file_pid, key_file_relay_log_info, key_file_send_file, key_file_tclog, - key_file_trg, key_file_trn, key_file_init; - -void init_server_psi_keys(); -#endif /* HAVE_PSI_INTERFACE */ -#endif /* MYSQL_SERVER */ - - -#endif /* MYSQL_PRIV_H */ diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 22aa91e7fc4..a2c1db09aa1 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -13,7 +13,43 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "my_global.h" +#include <signal.h> +#ifndef __WIN__ +#include <netdb.h> // getservbyname, servent +#endif +#include "sql_parse.h" // test_if_data_home_dir +#include "sql_cache.h" // query_cache, query_cache_* +#include "sql_locale.h" // MY_LOCALES, my_locales, my_locale_by_name +#include "sql_show.h" // free_status_vars, add_status_vars, + // reset_status_vars +#include "strfunc.h" // find_set_from_flags +#include "parse_file.h" // File_parser_dummy_hook +#include "sql_db.h" // my_database_names_free, + // my_database_names_init +#include "sql_table.h" // release_ddl_log, execute_ddl_log_recovery +#include "sql_connect.h" // free_max_user_conn, init_max_user_conn, + // handle_one_connection +#include "sql_time.h" // known_date_time_formats, + // get_date_time_format_str, + // date_time_format_make +#include "tztime.h" // my_tz_free, my_tz_init, my_tz_SYSTEM +#include "hostname.h" // hostname_cache_free, hostname_cache_init +#include "sql_acl.h" // acl_free, grant_free, acl_init, + // grant_init +#include "sql_base.h" // table_def_free, table_def_init, + // cached_open_tables, + // cached_table_definitions +#include "sql_test.h" // mysql_print_status +#include "item_create.h" // item_create_cleanup, item_create_init +#include "sql_servers.h" // servers_free, servers_init +#include "init.h" // unireg_init +#include "derror.h" // init_errmessage +#include "derror.h" // init_errmessage +#include "des_key_file.h" // load_des_key_file +#include "sql_manager.h" // stop_handle_manager, start_handle_manager #include <m_ctype.h> #include <my_dir.h> #include <my_bit.h> @@ -7653,7 +7689,7 @@ static char *get_relative_path(const char *path) 1 if len(path) > FN_REFLEN */ -bool +static bool fn_format_relative_to_data_home(char * to, const char *name, const char *dir, const char *extension) { diff --git a/sql/mysqld.h b/sql/mysqld.h new file mode 100644 index 00000000000..c57d92733ed --- /dev/null +++ b/sql/mysqld.h @@ -0,0 +1,510 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef MYSQLD_INCLUDED +#define MYSQLD_INCLUDED + +#include "my_global.h" /* MYSQL_PLUGIN_IMPORT, FN_REFLEN, FN_EXTLEN */ +#include "sql_bitmap.h" /* Bitmap */ +#include "my_decimal.h" /* my_decimal */ +#include "mysql_com.h" /* SERVER_VERSION_LENGTH */ +#include "my_atomic.h" /* my_atomic_rwlock_t */ +#include "mysql/psi/mysql_file.h" /* MYSQL_FILE */ +#include "sql_list.h" /* I_List */ + +class THD; +class handlerton; +class Time_zone; + +class scheduler_functions; + +typedef struct st_mysql_const_lex_string LEX_CSTRING; +typedef struct st_mysql_show_var SHOW_VAR; + +/* + This forward declaration is used from C files where the real + definition is included before. Since C does not allow repeated + typedef declarations, even when identical, the definition may not be + repeated. +*/ +#ifndef CHARSET_INFO_DEFINED +typedef struct charset_info_st CHARSET_INFO; +#endif /* CHARSET_INFO_DEFINED */ + +#if MAX_INDEXES <= 64 +typedef Bitmap<64> key_map; /* Used for finding keys */ +#else +typedef Bitmap<((MAX_INDEXES+7)/8*8)> key_map; /* Used for finding keys */ +#endif + + /* Bits from testflag */ +#define TEST_PRINT_CACHED_TABLES 1 +#define TEST_NO_KEY_GROUP 2 +#define TEST_MIT_THREAD 4 +#define TEST_BLOCKING 8 +#define TEST_KEEP_TMP_TABLES 16 +#define TEST_READCHECK 64 /**< Force use of readcheck */ +#define TEST_NO_EXTRA 128 +#define TEST_CORE_ON_SIGNAL 256 /**< Give core if signal */ +#define TEST_NO_STACKTRACE 512 +#define TEST_SIGINT 1024 /**< Allow sigint on threads */ +#define TEST_SYNCHRONIZATION 2048 /**< get server to do sleep in + some places */ +/* Function prototypes */ +void kill_mysql(void); +void close_connection(THD *thd, uint errcode, bool lock); +void handle_connection_in_main_thread(THD *thd); +void create_thread_to_handle_connection(THD *thd); +void unlink_thd(THD *thd); +bool one_thread_per_connection_end(THD *thd, bool put_in_cache); +void flush_thread_cache(); +void refresh_status(THD *thd); + +extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *system_charset_info; +extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *files_charset_info ; +extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *national_charset_info; +extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *table_alias_charset; + +extern TYPELIB log_output_typelib; +extern const char *log_output_names[]; + +/** + Character set of the buildin error messages loaded from errmsg.sys. +*/ +extern CHARSET_INFO *error_message_charset_info; + +extern CHARSET_INFO *character_set_filesystem; + +extern MY_BITMAP temp_pool; +extern bool opt_large_files, server_id_supplied; +extern bool opt_update_log, opt_bin_log, opt_error_log; +extern my_bool opt_log, opt_slow_log; +extern my_bool opt_backup_history_log; +extern my_bool opt_backup_progress_log; +extern ulonglong log_output_options; +extern ulong log_backup_output_options; +extern my_bool opt_log_queries_not_using_indexes; +extern bool opt_disable_networking, opt_skip_show_db; +extern bool opt_ignore_builtin_innodb; +extern my_bool opt_character_set_client_handshake; +extern bool volatile abort_loop; +extern bool in_bootstrap; +extern uint volatile thread_count, global_read_lock; +extern uint connection_count; +extern my_bool opt_sql_bin_update, opt_safe_user_create, opt_no_mix_types; +extern my_bool opt_safe_show_db, opt_local_infile, opt_myisam_use_mmap; +extern my_bool opt_slave_compressed_protocol, use_temp_pool; +extern uint slave_exec_mode_options; +extern ulonglong slave_type_conversions_options; +extern my_bool opt_readonly, lower_case_file_system; +extern my_bool opt_enable_named_pipe, opt_sync_frm, opt_allow_suspicious_udfs; +extern my_bool opt_secure_auth; +extern char* opt_secure_file_priv; +extern char* opt_secure_backup_file_priv; +extern size_t opt_secure_backup_file_priv_len; +extern my_bool opt_log_slow_admin_statements, opt_log_slow_slave_statements; +extern my_bool sp_automatic_privileges, opt_noacl; +extern my_bool opt_old_style_user_limits, trust_function_creators; +extern uint opt_crash_binlog_innodb; +extern char *shared_memory_base_name, *mysqld_unix_port; +extern my_bool opt_enable_shared_memory; +extern char *default_tz_name; +extern Time_zone *default_tz; +extern char *default_storage_engine; +extern bool opt_endinfo, using_udf_functions; +extern my_bool locked_in_memory; +extern bool opt_using_transactions; +extern ulong current_pid; +extern ulong expire_logs_days; +extern my_bool relay_log_recovery; +extern uint sync_binlog_period, sync_relaylog_period, + sync_relayloginfo_period, sync_masterinfo_period; +extern ulong opt_tc_log_size, tc_log_max_pages_used, tc_log_page_size; +extern ulong tc_log_page_waits; +extern my_bool relay_log_purge, opt_innodb_safe_binlog, opt_innodb; +extern my_bool relay_log_recovery; +extern uint test_flags,select_errors,ha_open_options; +extern uint protocol_version, mysqld_port, dropping_tables; +extern uint delay_key_write_options; +extern char *opt_logname, *opt_slow_logname; +extern char *opt_backup_history_logname, *opt_backup_progress_logname, + *opt_backup_settings_name; +extern const char *log_output_str; +extern const char *log_backup_output_str; +extern char *mysql_home_ptr, *pidfile_name_ptr; +extern char glob_hostname[FN_REFLEN], mysql_home[FN_REFLEN]; +extern char pidfile_name[FN_REFLEN], system_time_zone[30], *opt_init_file; +extern char default_logfile_name[FN_REFLEN]; +extern char log_error_file[FN_REFLEN], *opt_tc_log_file; +extern const double log_10[309]; +extern ulonglong keybuff_size; +extern ulonglong thd_startup_options; +extern ulong thread_id; +extern ulong binlog_cache_use, binlog_cache_disk_use; +extern ulong aborted_threads,aborted_connects; +extern ulong delayed_insert_timeout; +extern ulong delayed_insert_limit, delayed_queue_size; +extern ulong delayed_insert_threads, delayed_insert_writes; +extern ulong delayed_rows_in_use,delayed_insert_errors; +extern ulong slave_open_temp_tables; +extern ulong query_cache_size, query_cache_min_res_unit; +extern ulong slow_launch_threads, slow_launch_time; +extern ulong table_cache_size, table_def_size; +extern MYSQL_PLUGIN_IMPORT ulong max_connections; +extern ulong max_connect_errors, connect_timeout; +extern my_bool slave_allow_batching; +extern my_bool allow_slave_start; +extern LEX_CSTRING reason_slave_blocked; +extern ulong slave_trans_retries; +extern uint slave_net_timeout; +extern uint max_user_connections; +extern ulong what_to_log,flush_time; +extern ulong query_buff_size; +extern ulong max_prepared_stmt_count, prepared_stmt_count; +extern ulong binlog_cache_size, open_files_limit; +extern ulonglong max_binlog_cache_size; +extern ulong max_binlog_size, max_relay_log_size; +extern ulong opt_binlog_rows_event_max_size; +extern ulong rpl_recovery_rank, thread_cache_size, thread_pool_size; +extern ulong back_log; +extern char language[FN_REFLEN]; +extern ulong server_id, concurrency; +extern time_t server_start_time, flush_status_time; +extern char *opt_mysql_tmpdir, mysql_charsets_dir[]; +extern int mysql_unpacked_real_data_home_len; +extern MY_TMPDIR mysql_tmpdir_list; +extern const char *first_keyword, *delayed_user, *binary_keyword; +extern MYSQL_PLUGIN_IMPORT const char *my_localhost; +extern MYSQL_PLUGIN_IMPORT const char **errmesg; /* Error messages */ +extern const char *myisam_recover_options_str; +extern const char *in_left_expr_name, *in_additional_cond, *in_having_cond; +extern SHOW_VAR status_vars[]; +extern struct system_variables max_system_variables; +extern struct system_status_var global_status_var; +extern struct rand_struct sql_rand; +extern const char *opt_date_time_formats[]; +extern handlerton *partition_hton; +extern handlerton *myisam_hton; +extern handlerton *heap_hton; +extern const char *load_default_groups[]; +extern struct my_option my_long_options[]; +extern int mysqld_server_started; +extern int orig_argc; +extern char **orig_argv; +extern pthread_attr_t connection_attrib; +extern MYSQL_FILE *bootstrap_file; +extern my_bool old_mode; +extern LEX_STRING opt_init_connect, opt_init_slave; +extern int bootstrap_error; +extern FILE *stderror_file; +extern I_List<THD> threads; +extern char err_shared_dir[]; +extern scheduler_functions thread_scheduler; +extern TYPELIB thread_handling_typelib; +extern my_decimal decimal_zero; + +extern pthread_key(MEM_ROOT**,THR_MALLOC); + +#ifdef HAVE_PSI_INTERFACE +#ifdef HAVE_MMAP +extern PSI_mutex_key key_PAGE_lock, key_LOCK_sync, key_LOCK_active, + key_LOCK_pool; +#endif /* HAVE_MMAP */ + +#ifdef HAVE_OPENSSL +extern PSI_mutex_key key_LOCK_des_key_file; +#endif + +extern PSI_mutex_key key_BINLOG_LOCK_index, key_BINLOG_LOCK_prep_xids, + key_delayed_insert_mutex, key_hash_filo_lock, key_LOCK_active_mi, + key_LOCK_connection_count, key_LOCK_crypt, key_LOCK_delayed_create, + key_LOCK_delayed_insert, key_LOCK_delayed_status, key_LOCK_error_log, + key_LOCK_gdl, key_LOCK_global_read_lock, key_LOCK_global_system_variables, + key_LOCK_lock_db, key_LOCK_logger, key_LOCK_manager, key_LOCK_mapped_file, + key_LOCK_mysql_create_db, key_LOCK_open, key_LOCK_prepared_stmt_count, + key_LOCK_rpl_status, key_LOCK_server_started, key_LOCK_status, + key_LOCK_table_share, key_LOCK_thd_data, + key_LOCK_user_conn, key_LOCK_uuid_generator, key_LOG_LOCK_log, + key_master_info_data_lock, key_master_info_run_lock, + key_mutex_slave_reporting_capability_err_lock, key_relay_log_info_data_lock, + key_relay_log_info_log_space_lock, key_relay_log_info_run_lock, + key_structure_guard_mutex, key_TABLE_SHARE_LOCK_ha_data, key_LOCK_error_messages, + key_LOCK_thread_count; + +extern PSI_rwlock_key key_rwlock_LOCK_grant, key_rwlock_LOCK_logger, + key_rwlock_LOCK_sys_init_connect, key_rwlock_LOCK_sys_init_slave, + key_rwlock_LOCK_system_variables_hash, key_rwlock_query_cache_query_lock; + +#ifdef HAVE_MMAP +extern PSI_cond_key key_PAGE_cond, key_COND_active, key_COND_pool; +#endif /* HAVE_MMAP */ + +extern PSI_cond_key key_BINLOG_COND_prep_xids, key_BINLOG_update_cond, + key_COND_cache_status_changed, key_COND_global_read_lock, key_COND_manager, + key_COND_refresh, key_COND_rpl_status, key_COND_server_started, + key_delayed_insert_cond, key_delayed_insert_cond_client, + key_item_func_sleep_cond, key_master_info_data_cond, + key_master_info_start_cond, key_master_info_stop_cond, + key_relay_log_info_data_cond, key_relay_log_info_log_space_cond, + key_relay_log_info_start_cond, key_relay_log_info_stop_cond, + key_TABLE_SHARE_cond, key_user_level_lock_cond, + key_COND_thread_count, key_COND_thread_cache, key_COND_flush_thread_cache; + +extern PSI_thread_key key_thread_bootstrap, key_thread_delayed_insert, + key_thread_handle_manager, key_thread_kill_server, key_thread_main, + key_thread_one_connection, key_thread_signal_hand; + +#ifdef HAVE_MMAP +extern PSI_file_key key_file_map; +#endif /* HAVE_MMAP */ + +extern PSI_file_key key_file_binlog, key_file_binlog_index, key_file_casetest, + key_file_dbopt, key_file_des_key_file, key_file_ERRMSG, key_select_to_file, + key_file_fileparser, key_file_frm, key_file_global_ddl_log, key_file_load, + key_file_loadfile, key_file_log_event_data, key_file_log_event_info, + key_file_master_info, key_file_misc, key_file_MYSQL_LOG, key_file_partition, + key_file_pid, key_file_relay_log_info, key_file_send_file, key_file_tclog, + key_file_trg, key_file_trn, key_file_init; + +void init_server_psi_keys(); +#endif /* HAVE_PSI_INTERFACE */ + +#ifndef __WIN__ +extern pthread_t signal_thread; +#endif + +#ifdef HAVE_OPENSSL +extern struct st_VioSSLFd * ssl_acceptor_fd; +#endif /* HAVE_OPENSSL */ + +/* + The following variables were under INNODB_COMPABILITY_HOOKS + */ +extern my_bool opt_large_pages; +extern uint opt_large_page_size; +extern char lc_messages_dir[FN_REFLEN]; +extern char *lc_messages_dir_ptr, *log_error_file_ptr; +extern MYSQL_PLUGIN_IMPORT char reg_ext[FN_EXTLEN]; +extern MYSQL_PLUGIN_IMPORT uint reg_ext_length; +extern MYSQL_PLUGIN_IMPORT uint lower_case_table_names; +extern MYSQL_PLUGIN_IMPORT bool mysqld_embedded; +extern ulong specialflag; +extern uint mysql_data_home_len; +extern uint mysql_real_data_home_len; +extern const char *mysql_real_data_home_ptr; +extern uint thread_handling; +extern MYSQL_PLUGIN_IMPORT char *mysql_data_home; +extern char server_version[SERVER_VERSION_LENGTH]; +extern MYSQL_PLUGIN_IMPORT char mysql_real_data_home[]; +extern char mysql_unpacked_real_data_home[]; +extern MYSQL_PLUGIN_IMPORT struct system_variables global_system_variables; +extern char default_logfile_name[FN_REFLEN]; +extern char err_shared_dir[]; + +#define mysql_tmpdir (my_tmpdir(&mysql_tmpdir_list)) + +extern MYSQL_PLUGIN_IMPORT const key_map key_map_empty; +extern MYSQL_PLUGIN_IMPORT key_map key_map_full; /* Should be threaded as const */ + +/* + Server mutex locks and condition variables. + */ +extern mysql_mutex_t LOCK_mysql_create_db, LOCK_open, LOCK_lock_db, + LOCK_mapped_file, LOCK_user_locks, LOCK_status, + LOCK_error_log, LOCK_delayed_insert, LOCK_uuid_generator, + LOCK_delayed_status, LOCK_delayed_create, LOCK_crypt, LOCK_timezone, + LOCK_slave_list, LOCK_active_mi, LOCK_manager, LOCK_global_read_lock, + LOCK_global_system_variables, LOCK_user_conn, + LOCK_prepared_stmt_count, LOCK_error_messages, LOCK_connection_count; +extern MYSQL_PLUGIN_IMPORT mysql_mutex_t LOCK_thread_count; +#ifdef HAVE_OPENSSL +extern mysql_mutex_t LOCK_des_key_file; +#endif +extern mysql_mutex_t LOCK_server_started; +extern mysql_cond_t COND_server_started; +extern mysql_rwlock_t LOCK_grant, LOCK_sys_init_connect, LOCK_sys_init_slave; +extern mysql_rwlock_t LOCK_system_variables_hash; +extern mysql_cond_t COND_thread_count; +extern mysql_cond_t COND_refresh, COND_manager; +extern mysql_cond_t COND_global_read_lock; +extern int32 thread_running; +extern my_atomic_rwlock_t thread_running_lock; + +extern char *opt_ssl_ca, *opt_ssl_capath, *opt_ssl_cert, *opt_ssl_cipher, + *opt_ssl_key; + +extern MYSQL_PLUGIN_IMPORT pthread_key(THD*, THR_THD); + +/** + only options that need special treatment in get_one_option() deserve + to be listed below +*/ +enum options_mysqld +{ + OPT_to_set_the_start_number=256, + OPT_BIND_ADDRESS, + OPT_BINLOG_DO_DB, + OPT_BINLOG_FORMAT, + OPT_BINLOG_IGNORE_DB, + OPT_BIN_LOG, + OPT_BOOTSTRAP, + OPT_CONSOLE, + OPT_DEBUG_SYNC_TIMEOUT, + OPT_DELAY_KEY_WRITE_ALL, + OPT_ISAM_LOG, + OPT_KEY_BUFFER_SIZE, + OPT_KEY_CACHE_AGE_THRESHOLD, + OPT_KEY_CACHE_BLOCK_SIZE, + OPT_KEY_CACHE_DIVISION_LIMIT, + OPT_LOWER_CASE_TABLE_NAMES, + OPT_ONE_THREAD, + OPT_POOL_OF_THREADS, + OPT_REPLICATE_DO_DB, + OPT_REPLICATE_DO_TABLE, + OPT_REPLICATE_IGNORE_DB, + OPT_REPLICATE_IGNORE_TABLE, + OPT_REPLICATE_REWRITE_DB, + OPT_REPLICATE_WILD_DO_TABLE, + OPT_REPLICATE_WILD_IGNORE_TABLE, + OPT_SAFE, + OPT_SERVER_ID, + OPT_SKIP_HOST_CACHE, + OPT_SKIP_LOCK, + OPT_SKIP_NEW, + OPT_SKIP_PRIOR, + OPT_SKIP_RESOLVE, + OPT_SKIP_STACK_TRACE, + OPT_SKIP_SYMLINKS, + OPT_SLOW_QUERY_LOG, + OPT_SSL_CA, + OPT_SSL_CAPATH, + OPT_SSL_CERT, + OPT_SSL_CIPHER, + OPT_SSL_KEY, + OPT_UPDATE_LOG, + OPT_WANT_CORE, + OPT_ENGINE_CONDITION_PUSHDOWN, + OPT_LOG_ERROR +}; + + +/** + Query type constants. + + QT_ORDINARY -- ordinary SQL query. + QT_IS -- SQL query to be shown in INFORMATION_SCHEMA (in utf8 and without + character set introducers). +*/ +enum enum_query_type +{ + QT_ORDINARY, + QT_IS +}; + +/* query_id */ +typedef int64 query_id_t; +extern query_id_t global_query_id; +extern my_atomic_rwlock_t global_query_id_lock; + +void unireg_end(void) __attribute__((noreturn)); + +/* increment query_id and return it. */ +inline query_id_t next_query_id() +{ + query_id_t id; + my_atomic_rwlock_wrlock(&global_query_id_lock); + id= my_atomic_add64(&global_query_id, 1); + my_atomic_rwlock_wrunlock(&global_query_id_lock); + return (id+1); +} + +inline query_id_t get_query_id() +{ + query_id_t id; + my_atomic_rwlock_wrlock(&global_query_id_lock); + id= my_atomic_load64(&global_query_id); + my_atomic_rwlock_wrunlock(&global_query_id_lock); + return id; +} + + +/* + TODO: Replace this with an inline function. + */ +#ifndef EMBEDDED_LIBRARY +extern "C" void unireg_abort(int exit_code) __attribute__((noreturn)); +#else +extern "C" void unireg_clear(int exit_code); +#define unireg_abort(exit_code) do { unireg_clear(exit_code); DBUG_RETURN(exit_code); } while(0) +#endif + +inline void table_case_convert(char * name, uint length) +{ + if (lower_case_table_names) + files_charset_info->cset->casedn(files_charset_info, + name, length, name, length); +} + +inline ulong sql_rnd_with_mutex() +{ + mysql_mutex_lock(&LOCK_thread_count); + ulong tmp=(ulong) (my_rnd(&sql_rand) * 0xffffffff); /* make all bits random */ + mysql_mutex_unlock(&LOCK_thread_count); + return tmp; +} + +inline int32 +inc_thread_running() +{ + int32 num_thread_running; + my_atomic_rwlock_wrlock(&thread_running_lock); + num_thread_running= my_atomic_add32(&thread_running, 1); + my_atomic_rwlock_wrunlock(&thread_running_lock); + return (num_thread_running+1); +} + +inline int32 +dec_thread_running() +{ + int32 num_thread_running; + my_atomic_rwlock_wrlock(&thread_running_lock); + num_thread_running= my_atomic_add32(&thread_running, -1); + my_atomic_rwlock_wrunlock(&thread_running_lock); + return (num_thread_running-1); +} + +inline int32 +get_thread_running() +{ + int32 num_thread_running; + my_atomic_rwlock_wrlock(&thread_running_lock); + num_thread_running= my_atomic_load32(&thread_running); + my_atomic_rwlock_wrunlock(&thread_running_lock); + return num_thread_running; +} + +#if defined(MYSQL_DYNAMIC_PLUGIN) && defined(_WIN32) +extern "C" THD *_current_thd_noinline(); +#define _current_thd() _current_thd_noinline() +#else +extern pthread_key(THD*, THR_THD); +inline THD *_current_thd(void) +{ + return my_pthread_getspecific_ptr(THD*,THR_THD); +} +#endif +#define current_thd _current_thd() + +#endif /* MYSQLD_INCLUDED */ diff --git a/sql/net_serv.cc b/sql/net_serv.cc index 12cb1224064..fc8655ea2e7 100644 --- a/sql/net_serv.cc +++ b/sql/net_serv.cc @@ -39,7 +39,6 @@ */ #include <my_global.h> #include <mysql.h> -#include <mysql_embed.h> #include <mysql_com.h> #include <mysqld_error.h> #include <my_sys.h> @@ -88,7 +87,7 @@ void sql_print_error(const char *format,...); #ifdef MYSQL_SERVER /* The following variables/functions should really not be declared - extern, but as it's hard to include mysql_priv.h here, we have to + extern, but as it's hard to include sql_priv.h here, we have to live with this for a while. */ extern uint test_flags; diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 5483ed237db..a46bfcf2d0e 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -65,7 +65,13 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" +#include "key.h" // is_key_used, key_copy, key_cmp, key_restore +#include "sql_parse.h" // check_stack_overrun +#include "sql_partition.h" // get_part_id_func, PARTITION_ITERATOR, + // struct partition_info +#include "sql_base.h" // free_io_cache +#include "records.h" // init_read_record, end_read_record #include <m_ctype.h> #include "sql_select.h" diff --git a/sql/opt_range.h b/sql/opt_range.h index 0bb2243080a..3b3b36f7689 100644 --- a/sql/opt_range.h +++ b/sql/opt_range.h @@ -23,6 +23,20 @@ #pragma interface /* gcc class implementation */ #endif +#include "thr_malloc.h" /* sql_memdup */ +#include "records.h" /* READ_RECORD */ +#include "queues.h" /* QUEUE */ +/* + It is necessary to include set_var.h instead of item.h because there + are dependencies on include order for set_var.h and item.h. This + will be resolved later. +*/ +#include "sql_class.h" // set_var.h: THD +#include "set_var.h" /* Item */ + +class JOIN; +class Item_sum; + typedef struct st_key_part { uint16 key,part; /* See KEY_PART_INFO for meaning of the next two: */ @@ -742,10 +756,15 @@ QUICK_RANGE_SELECT *get_quick_select_for_ref(THD *thd, TABLE *table, struct st_table_ref *ref, ha_rows records); uint get_index_for_order(TABLE *table, ORDER *order, ha_rows limit); +SQL_SELECT *make_select(TABLE *head, table_map const_tables, + table_map read_tables, COND *conds, + bool allow_null_cond, int *error); #ifdef WITH_PARTITION_STORAGE_ENGINE bool prune_partitions(THD *thd, TABLE *table, Item *pprune_cond); void store_key_image_to_rec(Field *field, uchar *ptr, uint len); #endif +extern String null_string; + #endif diff --git a/sql/opt_sum.cc b/sql/opt_sum.cc index 5384c165d65..fd2040a4979 100644 --- a/sql/opt_sum.cc +++ b/sql/opt_sum.cc @@ -47,7 +47,8 @@ (assuming a index for column d of table t2 is defined) */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "key.h" // key_cmp_if_same #include "sql_select.h" static bool find_key_for_maxmin(bool max_fl, TABLE_REF *ref, Field* field, diff --git a/sql/parse_file.cc b/sql/parse_file.cc index d94ab3d940d..cce0bb262e7 100644 --- a/sql/parse_file.cc +++ b/sql/parse_file.cc @@ -20,7 +20,10 @@ Text .frm files management routines */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "parse_file.h" +#include "unireg.h" // CREATE_MODE +#include "sql_table.h" // build_table_filename #include <errno.h> #include <m_ctype.h> #include <my_sys.h> diff --git a/sql/parse_file.h b/sql/parse_file.h index 84647e45927..1833e90cadd 100644 --- a/sql/parse_file.h +++ b/sql/parse_file.h @@ -17,6 +17,14 @@ #ifndef _PARSE_FILE_H_ #define _PARSE_FILE_H_ +#include "my_global.h" // uchar +#include "sql_string.h" // LEX_STRING +#include "sql_list.h" // Sql_alloc + +class THD; + +typedef struct st_mem_root MEM_ROOT; + #define PARSE_FILE_TIMESTAMPLENGTH 19 enum file_opt_type { diff --git a/sql/partition_element.h b/sql/partition_element.h index 73f85ac275f..cefc32ecac4 100644 --- a/sql/partition_element.h +++ b/sql/partition_element.h @@ -16,6 +16,9 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "my_base.h" /* ha_rows */ +#include "handler.h" /* UNDEF_NODEGROUP */ + /** * An enum and a struct to handle partitioning and subpartitioning. */ diff --git a/sql/partition_info.cc b/sql/partition_info.cc index 65029a817de..f42a8ee2312 100644 --- a/sql/partition_info.cc +++ b/sql/partition_info.cc @@ -19,7 +19,13 @@ #pragma implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" +// Required to get server definitions for mysql/plugin.h right +#include "sql_plugin.h" +#include "sql_partition.h" /* partition_info.h: LIST_PART_ENTRY */ +#include "partition_info.h" +#include "sql_parse.h" // test_if_data_home_dir +#include "sql_acl.h" // *_ACL #ifdef WITH_PARTITION_STORAGE_ENGINE #include "ha_partition.h" diff --git a/sql/password.c b/sql/password.c index 9204c660b77..b77cb618a46 100644 --- a/sql/password.c +++ b/sql/password.c @@ -58,6 +58,7 @@ *****************************************************************************/ +#include <password.h> #include <my_global.h> #include <my_sys.h> #include <m_string.h> diff --git a/sql/procedure.cc b/sql/procedure.cc index c993ba976ac..66e09a42cb4 100644 --- a/sql/procedure.cc +++ b/sql/procedure.cc @@ -20,7 +20,7 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" #include "procedure.h" #include "sql_analyse.h" // Includes procedure #ifdef USE_PROC_RANGE diff --git a/sql/procedure.h b/sql/procedure.h index 25b30ac593d..f34eb228f28 100644 --- a/sql/procedure.h +++ b/sql/procedure.h @@ -23,6 +23,14 @@ #pragma interface /* gcc class implementation */ #endif +/* + It is necessary to include set_var.h instead of item.h because there + are dependencies on include order for set_var.h and item.h. This + will be resolved later. +*/ +#include "sql_class.h" /* select_result, set_var.h: THD */ +#include "set_var.h" /* Item */ + #define PROC_NO_SORT 1 /**< Bits in flags */ #define PROC_GROUP 2 /**< proc must have group */ diff --git a/sql/protocol.cc b/sql/protocol.cc index a8cf250689e..e036f255960 100644 --- a/sql/protocol.cc +++ b/sql/protocol.cc @@ -24,7 +24,10 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" // REQUIRED: for other includes +#include "protocol.h" +#include "sql_class.h" // THD #include <stdarg.h> static const unsigned int PACKET_BUFFER_EXTRA_ALLOC= 1024; diff --git a/sql/protocol.h b/sql/protocol.h index 142f7919d6f..f661c7663e5 100644 --- a/sql/protocol.h +++ b/sql/protocol.h @@ -21,8 +21,10 @@ #endif #include "sql_error.h" +#include "my_decimal.h" /* my_decimal */ class i_string; +class Field; class THD; class Item_param; typedef struct st_mysql_field MYSQL_FIELD; diff --git a/sql/records.cc b/sql/records.cc index c97ffa152dc..d85cb49e013 100644 --- a/sql/records.cc +++ b/sql/records.cc @@ -25,7 +25,11 @@ */ #include "records.h" -#include "mysql_priv.h" +#include "sql_priv.h" +#include "records.h" +#include "filesort.h" // filesort_free_buffers +#include "opt_range.h" // SQL_SELECT +#include "sql_class.h" // THD static int rr_quick(READ_RECORD *info); diff --git a/sql/repl_failsafe.cc b/sql/repl_failsafe.cc index 29443eb6e65..cddf798aac0 100644 --- a/sql/repl_failsafe.cc +++ b/sql/repl_failsafe.cc @@ -23,15 +23,18 @@ functions like register_slave()) are working. */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "sql_parse.h" // check_access #ifdef HAVE_REPLICATION #include "repl_failsafe.h" +#include "sql_acl.h" // REPL_SLAVE_ACL #include "sql_repl.h" #include "slave.h" #include "rpl_mi.h" #include "rpl_filter.h" #include "log_event.h" +#include "sql_db.h" // mysql_create_db #include <mysql.h> #define SLAVE_LIST_CHUNK 128 diff --git a/sql/replication.h b/sql/replication.h index 5e9c09adf31..1c83025e1d6 100644 --- a/sql/replication.h +++ b/sql/replication.h @@ -16,6 +16,8 @@ #ifndef REPLICATION_H #define REPLICATION_H +#include <mysql.h> + typedef struct st_mysql MYSQL; #ifdef __cplusplus diff --git a/sql/rpl_filter.cc b/sql/rpl_filter.cc index 392d8baf50e..63521c0398f 100644 --- a/sql/rpl_filter.cc +++ b/sql/rpl_filter.cc @@ -13,8 +13,11 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" // REQUIRED by other includes #include "rpl_filter.h" +#include "hash.h" // my_hash_free +#include "table.h" // TABLE_LIST #define TABLE_RULE_HASH_SIZE 16 #define TABLE_RULE_ARR_SIZE 16 diff --git a/sql/rpl_filter.h b/sql/rpl_filter.h index ff7e4081bb1..27bbccbc009 100644 --- a/sql/rpl_filter.h +++ b/sql/rpl_filter.h @@ -17,6 +17,12 @@ #define RPL_FILTER_H #include "mysql.h" +#include "sql_list.h" /* I_List */ +#include "hash.h" /* HASH */ + +class String; +class TABLE_LIST; +typedef struct st_dynamic_array DYNAMIC_ARRAY; typedef struct st_table_rule_ent { diff --git a/sql/rpl_handler.cc b/sql/rpl_handler.cc index 5a406866513..9cb5391075d 100644 --- a/sql/rpl_handler.cc +++ b/sql/rpl_handler.cc @@ -13,7 +13,8 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" #include "rpl_mi.h" #include "sql_repl.h" diff --git a/sql/rpl_handler.h b/sql/rpl_handler.h index 4fb7b4e035b..bf207e53e2d 100644 --- a/sql/rpl_handler.h +++ b/sql/rpl_handler.h @@ -16,7 +16,7 @@ #ifndef RPL_HANDLER_H #define RPL_HANDLER_H -#include "mysql_priv.h" +#include "sql_priv.h" #include "rpl_mi.h" #include "rpl_rli.h" #include "sql_plugin.h" diff --git a/sql/rpl_injector.cc b/sql/rpl_injector.cc index 08d81e10d59..0f636f5b2ab 100644 --- a/sql/rpl_injector.cc +++ b/sql/rpl_injector.cc @@ -13,9 +13,13 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" // REQUIRED by later includes #include "rpl_injector.h" #include "transaction.h" +#include "sql_parse.h" // begin_trans, end_trans, COMMIT +#include "sql_base.h" // close_thread_tables +#include "log_event.h" // Incident_log_event /* injector::transaction - member definitions diff --git a/sql/rpl_injector.h b/sql/rpl_injector.h index a0c71fee099..36cb6aaa184 100644 --- a/sql/rpl_injector.h +++ b/sql/rpl_injector.h @@ -21,6 +21,7 @@ #include <my_bitmap.h> #include "rpl_constants.h" +#include "table.h" /* TABLE */ /* Forward declarations */ class handler; diff --git a/sql/rpl_mi.cc b/sql/rpl_mi.cc index 7dad340cfa6..10bf752e140 100644 --- a/sql/rpl_mi.cc +++ b/sql/rpl_mi.cc @@ -14,10 +14,11 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include <my_global.h> // For HAVE_REPLICATION -#include "mysql_priv.h" +#include "sql_priv.h" #include <my_dir.h> - +#include "unireg.h" // REQUIRED by other includes #include "rpl_mi.h" +#include "slave.h" // SLAVE_MAX_HEARTBEAT_PERIOD #ifdef HAVE_REPLICATION diff --git a/sql/rpl_mi.h b/sql/rpl_mi.h index c4ca5714306..c3734fdf59e 100644 --- a/sql/rpl_mi.h +++ b/sql/rpl_mi.h @@ -22,9 +22,9 @@ #include "rpl_reporting.h" #include "my_sys.h" +typedef struct st_mysql MYSQL; /***************************************************************************** - Replication IO Thread Master_info contains: diff --git a/sql/rpl_record.cc b/sql/rpl_record.cc index 9e1413d726d..ced5c0943dd 100644 --- a/sql/rpl_record.cc +++ b/sql/rpl_record.cc @@ -13,7 +13,8 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" #include "rpl_rli.h" #include "rpl_record.h" #include "slave.h" // Need to pull in slave_print_msg diff --git a/sql/rpl_record.h b/sql/rpl_record.h index 6e8838f82b3..9b3829a435e 100644 --- a/sql/rpl_record.h +++ b/sql/rpl_record.h @@ -17,6 +17,11 @@ #define RPL_RECORD_H #include <rpl_reporting.h> +#include "my_global.h" /* uchar */ + +class Relay_log_info; +struct TABLE; +typedef struct st_bitmap MY_BITMAP; #if !defined(MYSQL_CLIENT) size_t pack_row(TABLE* table, MY_BITMAP const* cols, diff --git a/sql/rpl_record_old.cc b/sql/rpl_record_old.cc index ab4e993ce41..09d5bcacd62 100644 --- a/sql/rpl_record_old.cc +++ b/sql/rpl_record_old.cc @@ -1,7 +1,9 @@ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" // REQUIRED by other includes #include "rpl_rli.h" #include "rpl_record_old.h" +#include "log_event.h" // Log_event_type size_t pack_row_old(TABLE *table, MY_BITMAP const* cols, diff --git a/sql/rpl_record_old.h b/sql/rpl_record_old.h index bdaedd56741..71c0ccc17b9 100644 --- a/sql/rpl_record_old.h +++ b/sql/rpl_record_old.h @@ -16,6 +16,8 @@ #ifndef RPL_RECORD_OLD_H #define RPL_RECORD_OLD_H +#include "log_event.h" /* Log_event_type */ + #ifndef MYSQL_CLIENT size_t pack_row_old(TABLE *table, MY_BITMAP const* cols, uchar *row_data, const uchar *record); diff --git a/sql/rpl_reporting.cc b/sql/rpl_reporting.cc index ae9d100eeb4..051a3609019 100644 --- a/sql/rpl_reporting.cc +++ b/sql/rpl_reporting.cc @@ -14,8 +14,10 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" #include "rpl_reporting.h" +#include "log.h" // sql_print_error, sql_print_warning, + // sql_print_information Slave_reporting_capability::Slave_reporting_capability(char const *thread_name) : m_thread_name(thread_name) diff --git a/sql/rpl_reporting.h b/sql/rpl_reporting.h index b8d9c049653..495c74170d2 100644 --- a/sql/rpl_reporting.h +++ b/sql/rpl_reporting.h @@ -1,7 +1,4 @@ -#ifndef RPL_REPORTING_H -#define RPL_REPORTING_H - -/* Copyright (C) 2008-2009 Sun Microsystems, Inc +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -14,7 +11,12 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef RPL_REPORTING_H +#define RPL_REPORTING_H + +#include "my_sys.h" /* loglevel */ /** Maximum size of an error message from a slave thread. diff --git a/sql/rpl_rli.cc b/sql/rpl_rli.cc index e1c43771b32..8f070c51410 100644 --- a/sql/rpl_rli.cc +++ b/sql/rpl_rli.cc @@ -13,14 +13,19 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" - +#include "sql_priv.h" +#include "unireg.h" // HAVE_* #include "rpl_mi.h" #include "rpl_rli.h" +#include "sql_base.h" // close_thread_tables #include <my_dir.h> // For MY_STAT #include "sql_repl.h" // For check_binlog_magic +#include "log_event.h" // Format_description_log_event, Log_event, + // FORMAT_DESCRIPTION_LOG_EVENT, ROTATE_EVENT, + // PREFIX_SQL_LOAD #include "rpl_utility.h" #include "transaction.h" +#include "sql_parse.h" // end_trans, ROLLBACK static int count_relay_log_space(Relay_log_info* rli); diff --git a/sql/rpl_rli.h b/sql/rpl_rli.h index b1ed75146a0..bf8381933c0 100644 --- a/sql/rpl_rli.h +++ b/sql/rpl_rli.h @@ -19,6 +19,8 @@ #include "rpl_tblmap.h" #include "rpl_reporting.h" #include "rpl_utility.h" +#include "log.h" /* LOG_INFO, MYSQL_BIN_LOG */ +#include "sql_class.h" /* THD */ struct RPL_TABLE_LIST; class Master_info; diff --git a/sql/rpl_tblmap.cc b/sql/rpl_tblmap.cc index b04a3120a86..5a178ffde83 100644 --- a/sql/rpl_tblmap.cc +++ b/sql/rpl_tblmap.cc @@ -13,11 +13,15 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "my_global.h" // HAVE_REPLICATION #ifdef HAVE_REPLICATION #include "rpl_tblmap.h" +#ifndef MYSQL_CLIENT +#include "table.h" +#endif #ifdef MYSQL_CLIENT #define MAYBE_TABLE_NAME(T) ("") diff --git a/sql/rpl_tblmap.h b/sql/rpl_tblmap.h index a6ec8bcbc9b..3d24a47d9ae 100644 --- a/sql/rpl_tblmap.h +++ b/sql/rpl_tblmap.h @@ -52,6 +52,8 @@ void free_table_map_log_event(TABLE *table); A dedicated MEM_ROOT needs to be used, see below. */ +#include "hash.h" /* HASH */ + class table_mapping { private: diff --git a/sql/rpl_utility.cc b/sql/rpl_utility.cc index 8171d028326..0675e9b51ad 100644 --- a/sql/rpl_utility.cc +++ b/sql/rpl_utility.cc @@ -16,7 +16,9 @@ #include "rpl_utility.h" #ifndef MYSQL_CLIENT +#include "unireg.h" // REQUIRED by later includes #include "rpl_rli.h" +#include "sql_select.h" /** Function to compare two size_t integers for their relative diff --git a/sql/rpl_utility.h b/sql/rpl_utility.h index 4b9bf3be93f..cf28d2c8e29 100644 --- a/sql/rpl_utility.h +++ b/sql/rpl_utility.h @@ -20,7 +20,11 @@ #error "Don't include this C++ header file from a non-C++ file!" #endif -#include "mysql_priv.h" +#include "sql_priv.h" +#include "m_string.h" /* bzero, memcpy */ +#ifdef MYSQL_SERVER +#include "table.h" /* TABLE_LIST */ +#endif #include "mysql_com.h" class Relay_log_info; diff --git a/sql/scheduler.cc b/sql/scheduler.cc index b308b84eb19..10009246428 100644 --- a/sql/scheduler.cc +++ b/sql/scheduler.cc @@ -21,7 +21,10 @@ #pragma implementation #endif -#include <mysql_priv.h> +#include <sql_priv.h> +#include "unireg.h" // REQUIRED: for other includes +#include "scheduler.h" +#include "sql_connect.h" // init_new_connection_handler_thread /* 'Dummy' functions to be used when we don't need any handling for a scheduler diff --git a/sql/set_var.cc b/sql/set_var.cc index a30fbdc1edd..3f30dcb7df8 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -19,9 +19,30 @@ /* variable declarations are in sys_vars.cc now !!! */ -#include "mysql_priv.h" +#include "sql_class.h" // set_var.h: session_var_ptr +#include "set_var.h" +#include "sql_priv.h" +#include "unireg.h" +#include "mysqld.h" // lc_messages_dir #include "sys_vars_shared.h" #include "transaction.h" +#include "sql_base.h" // close_thread_tables +#include "sql_locale.h" // my_locale_by_number, + // my_locale_by_name +#include "strfunc.h" // find_set_from_flags, find_set +#include "sql_parse.h" // check_global_access +#include "sql_table.h" // reassign_keycache_tables +#include "sql_time.h" // date_time_format_copy, + // date_time_format_make +#include "derror.h" +#include "tztime.h" // my_tz_find, my_tz_SYSTEM, struct Time_zone +#include "sql_acl.h" // SUPER_ACL +#include "sql_select.h" // free_underlaid_joins +#include "sql_show.h" // make_default_log_name +#include "sql_view.h" // updatable_views_with_limit_typelib +#include "lock.h" // lock_global_read_lock, + // make_global_read_lock_block_commit, + // unlock_global_read_lock static HASH system_variable_hash; static PolyLock_mutex PLock_global_system_variables(&LOCK_global_system_variables); diff --git a/sql/set_var.h b/sql/set_var.h index 4a212d3b685..1b415567659 100644 --- a/sql/set_var.h +++ b/sql/set_var.h @@ -30,6 +30,10 @@ class sys_var; class set_var; class sys_var_pluginvar; class PolyLock; +class Item_func_set_user_var; + +// This include needs to be here since item.h requires enum_var_type :-P +#include "item.h" /* Item */ extern TYPELIB bool_typelib; @@ -165,6 +169,9 @@ protected: { return ((uchar*)&global_system_variables) + offset; } }; +#include "log.h" /* binlog_format_typelib */ +#include "sql_plugin.h" /* SHOW_HA_ROWS, SHOW_MY_BOOL */ + /**************************************************************************** Classes for parsing of the SET command ****************************************************************************/ @@ -277,6 +284,18 @@ public: int update(THD *thd); }; + +/* optional things, have_* variables */ +extern SHOW_COMP_OPTION have_csv, have_innodb; +extern SHOW_COMP_OPTION have_ndbcluster, have_partitioning; +extern SHOW_COMP_OPTION have_profiling; + +extern SHOW_COMP_OPTION have_ssl, have_symlink, have_dlopen; +extern SHOW_COMP_OPTION have_query_cache; +extern SHOW_COMP_OPTION have_geometry, have_rtree_keys; +extern SHOW_COMP_OPTION have_crypt; +extern SHOW_COMP_OPTION have_compress; + /* Prototypes for helper functions */ diff --git a/sql/slave.cc b/sql/slave.cc index b0bb1d5882b..e23763696df 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -24,11 +24,11 @@ replication slave. */ -#include "mysql_priv.h" - -#include <mysql.h> -#include <myisam.h> +#include "sql_priv.h" +#include "my_global.h" #include "slave.h" +#include "sql_parse.h" // execute_init_command +#include "sql_table.h" // mysql_rm_table #include "rpl_mi.h" #include "rpl_rli.h" #include "sql_repl.h" @@ -42,6 +42,15 @@ #include <mysqld_error.h> #include <mysys_err.h> #include "rpl_handler.h" +#include <signal.h> +#include <mysql.h> +#include <myisam.h> + +#include "sql_base.h" // close_thread_tables +#include "tztime.h" // struct Time_zone +#include "log_event.h" // Rotate_log_event, + // Create_file_log_event, + // Format_description_log_event #ifdef HAVE_REPLICATION diff --git a/sql/slave.h b/sql/slave.h index f01eccf09f4..4073c90b612 100644 --- a/sql/slave.h +++ b/sql/slave.h @@ -210,6 +210,8 @@ int apply_event_and_update_pos(Log_event* ev, THD* thd, Relay_log_info* rli); pthread_handler_t handle_slave_io(void *arg); pthread_handler_t handle_slave_sql(void *arg); +bool net_request_file(NET* net, const char* fname); + extern bool volatile abort_loop; extern Master_info main_mi, *active_mi; /* active_mi for multi-master */ extern LIST master_list; diff --git a/sql/sp.cc b/sql/sp.cc index 39a8b6a009f..6aaddb69e05 100644 --- a/sql/sp.cc +++ b/sql/sp.cc @@ -13,10 +13,21 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" #include "sp.h" +#include "sql_base.h" // close_thread_tables +#include "sql_parse.h" // parse_sql +#include "key.h" // key_copy +#include "sql_show.h" // append_definer, append_identifier +#include "sql_db.h" // get_default_db_collation, mysql_opt_change_db, + // mysql_change_db, check_db_dir_existence, + // load_db_opt_by_name +#include "sql_table.h" // write_bin_log +#include "sql_acl.h" // SUPER_ACL #include "sp_head.h" #include "sp_cache.h" +#include "lock.h" // lock_routine_name #include <my_user.h> @@ -17,6 +17,25 @@ #ifndef _SP_H_ #define _SP_H_ +#include "sql_string.h" // LEX_STRING + +class Field; +class Open_tables_backup; +class Open_tables_state; +class Query_arena; +class Query_tables_list; +class Sroutine_hash_entry; +class THD; +class sp_cache; +class sp_head; +class sp_name; +class st_sp_chistics; +struct LEX; +struct TABLE; +struct TABLE_LIST; +typedef struct st_hash HASH; +typedef struct st_sql_list SQL_LIST; + /* Tells what SP_DEFAULT_ACCESS should be mapped to */ #define SP_DEFAULT_ACCESS_MAPPING SP_CONTAINS_SQL @@ -162,4 +181,14 @@ sp_load_for_information_schema(THD *thd, TABLE *proc_table, String *db, const char *returns, const char *params, bool *free_sp_head); +bool load_charset(MEM_ROOT *mem_root, + Field *field, + CHARSET_INFO *dflt_cs, + CHARSET_INFO **cs); + +bool load_collation(MEM_ROOT *mem_root, + Field *field, + CHARSET_INFO *dflt_cl, + CHARSET_INFO **cl); + #endif /* _SP_H_ */ diff --git a/sql/sp_cache.cc b/sql/sp_cache.cc index 09d347bf951..f062276a9de 100644 --- a/sql/sp_cache.cc +++ b/sql/sp_cache.cc @@ -13,7 +13,8 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" #ifdef USE_PRAGMA_IMPLEMENTATION #pragma implementation #endif diff --git a/sql/sp_cache.h b/sql/sp_cache.h index 7dbb0d5429c..c75e29474bc 100644 --- a/sql/sp_cache.h +++ b/sql/sp_cache.h @@ -21,6 +21,8 @@ #pragma interface /* gcc class implementation */ #endif +#include "my_global.h" /* ulong */ + /* Stored procedures/functions cache. This is used as follows: * Each thread has its own cache. @@ -30,6 +32,7 @@ class sp_head; class sp_cache; +class sp_name; /* Cache usage scenarios: diff --git a/sql/sp_head.cc b/sql/sp_head.cc index c6bf0e381fb..2d197766782 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -13,9 +13,19 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" #include "sql_prepare.h" +#include "sql_cache.h" // query_cache_* #include "probes_mysql.h" +#include "sql_show.h" // append_identifier +#include "sql_db.h" // mysql_opt_change_db, mysql_change_db +#include "sql_table.h" // sp_prepare_create_field, + // prepare_create_field +#include "sql_acl.h" // *_ACL +#include "sql_array.h" // Dynamic_array +#include "log_event.h" // append_query_string, Query_log_event + #ifdef USE_PRAGMA_IMPLEMENTATION #pragma implementation #endif @@ -25,6 +35,8 @@ #include "sp_rcontext.h" #include "sp_cache.h" #include "set_var.h" +#include "sql_parse.h" // cleanup_items +#include "sql_base.h" // close_thread_tables /* Sufficient max length of printed destinations and frame offsets (all uints). diff --git a/sql/sp_head.h b/sql/sp_head.h index d1e152765f2..66cbc47d8e0 100644 --- a/sql/sp_head.h +++ b/sql/sp_head.h @@ -21,6 +21,14 @@ #pragma interface /* gcc class implementation */ #endif +/* + It is necessary to include set_var.h instead of item.h because there + are dependencies on include order for set_var.h and item.h. This + will be resolved later. +*/ +#include "sql_class.h" // THD, set_var.h: THD +#include "set_var.h" // Item + #include <stddef.h> /** diff --git a/sql/sp_pcontext.cc b/sql/sp_pcontext.cc index 48ceb1371ca..74dda9f456b 100644 --- a/sql/sp_pcontext.cc +++ b/sql/sp_pcontext.cc @@ -13,7 +13,8 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" #ifdef USE_PRAGMA_IMPLEMENTATION #pragma implementation #endif diff --git a/sql/sp_pcontext.h b/sql/sp_pcontext.h index 75e55880e60..b12d5362c6b 100644 --- a/sql/sp_pcontext.h +++ b/sql/sp_pcontext.h @@ -21,6 +21,12 @@ #pragma interface /* gcc class implementation */ #endif +#include "sql_string.h" // LEX_STRING +#include "mysql_com.h" // enum_field_types +#include "field.h" // Create_field + +class sp_pcontext; + typedef enum { sp_param_in, diff --git a/sql/sp_rcontext.cc b/sql/sp_rcontext.cc index d966de03b4e..e3cdf328659 100644 --- a/sql/sp_rcontext.cc +++ b/sql/sp_rcontext.cc @@ -13,7 +13,8 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" #ifdef USE_PRAGMA_IMPLEMENTATION #pragma implementation #endif @@ -27,7 +28,7 @@ #include "sql_cursor.h" #include "sp_rcontext.h" #include "sp_pcontext.h" - +#include "sql_select.h" // create_virtual_tmp_table sp_rcontext::sp_rcontext(sp_pcontext *root_parsing_ctx, Field *return_value_fld, diff --git a/sql/sp_rcontext.h b/sql/sp_rcontext.h index 2af96cf64dd..fad253706cb 100644 --- a/sql/sp_rcontext.h +++ b/sql/sp_rcontext.h @@ -21,11 +21,19 @@ #pragma interface /* gcc class implementation */ #endif +#include "sql_class.h" // select_result_interceptor + struct sp_cond_type; class sp_cursor; struct sp_variable; class sp_lex_keeper; class sp_instr_cpush; +class Query_arena; +class sp_head; +class sp_pcontext; +class Item_cache; +typedef class st_select_lex_unit SELECT_LEX_UNIT; +class Server_side_cursor; #define SP_HANDLER_NONE 0 #define SP_HANDLER_EXIT 1 diff --git a/sql/spatial.cc b/sql/spatial.cc index 9a31b099e92..34b1f3d1f0c 100644 --- a/sql/spatial.cc +++ b/sql/spatial.cc @@ -13,7 +13,11 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "my_global.h" // REQUIRED for HAVE_* below +#include "spatial.h" +#include "gstream.h" // Gis_read_stream +#include "sql_string.h" // String #ifdef HAVE_SPATIAL diff --git a/sql/spatial.h b/sql/spatial.h index 86c2ed8c197..a4bce47d0e5 100644 --- a/sql/spatial.h +++ b/sql/spatial.h @@ -16,8 +16,12 @@ #ifndef _spatial_h #define _spatial_h +#include "sql_string.h" /* String, LEX_STRING */ + #ifdef HAVE_SPATIAL +class Gis_read_stream; + const uint SRID_SIZE= 4; const uint SIZEOF_STORED_DOUBLE= 8; const uint POINT_DATA_SIZE= SIZEOF_STORED_DOUBLE*2; diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 86f62d9bf72..dae6123c38f 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -24,13 +24,25 @@ in the relevant fields. Empty strings comes last. */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "sql_acl.h" // MYSQL_DB_FIELD_COUNT, ACL_ACCESS +#include "sql_base.h" // close_thread_tables +#include "key.h" // key_copy, key_cmp_if_same, key_restore +#include "sql_show.h" // append_identifier +#include "sql_table.h" // build_table_filename #include "hash_filo.h" +#include "sql_parse.h" // check_access +#include "sql_view.h" // VIEW_ANY_ACL +#include "records.h" // READ_RECORD, read_record_info, + // init_read_record, end_read_record +#include "rpl_filter.h" // rpl_filter #include <m_ctype.h> #include <stdarg.h> #include "sp_head.h" #include "sp.h" #include "transaction.h" +#include "lock.h" // MYSQL_LOCK_IGNORE_TIMEOUT +#include "records.h" // init_read_record, end_read_record bool mysql_user_table_is_in_short_password_format= false; diff --git a/sql/sql_acl.h b/sql/sql_acl.h index 8d521be2bc4..1cbbedfe226 100644 --- a/sql/sql_acl.h +++ b/sql/sql_acl.h @@ -16,7 +16,8 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "slave.h" // for tables_ok(), rpl_filter +#include "violite.h" /* SSL_type */ +#include "sql_class.h" /* LEX_COLUMN */ #define SELECT_ACL (1L << 0) #define INSERT_ACL (1L << 1) @@ -278,6 +279,11 @@ bool sp_grant_privileges(THD *thd, const char *sp_db, const char *sp_name, bool check_routine_level_acl(THD *thd, const char *db, const char *name, bool is_proc); bool is_acl_user(const char *host, const char *user); +int fill_schema_user_privileges(THD *thd, TABLE_LIST *tables, COND *cond); +int fill_schema_schema_privileges(THD *thd, TABLE_LIST *tables, COND *cond); +int fill_schema_table_privileges(THD *thd, TABLE_LIST *tables, COND *cond); +int fill_schema_column_privileges(THD *thd, TABLE_LIST *tables, COND *cond); +int wild_case_compare(CHARSET_INFO *cs, const char *str,const char *wildstr); #ifdef NO_EMBEDDED_ACCESS_CHECKS #define check_grant(A,B,C,D,E,F) 0 diff --git a/sql/sql_analyse.cc b/sql/sql_analyse.cc index d273b3319ee..0b3e5117c97 100644 --- a/sql/sql_analyse.cc +++ b/sql/sql_analyse.cc @@ -28,7 +28,7 @@ #define MYSQL_LEX 1 -#include "mysql_priv.h" +#include "sql_priv.h" #include "procedure.h" #include "sql_analyse.h" #include <m_ctype.h> diff --git a/sql/sql_analyse.h b/sql/sql_analyse.h index 8f52b90c874..a1461247894 100644 --- a/sql/sql_analyse.h +++ b/sql/sql_analyse.h @@ -23,6 +23,8 @@ #pragma interface /* gcc class implementation */ #endif +#include "procedure.h" /* Procedure */ + #define my_thd_charset default_charset_info #define DEC_IN_AVG 4 @@ -359,4 +361,6 @@ public: List<Item> &field_list); }; +bool append_escaped(String *to_str, String *from_str); + #endif /* SQL_ANALYSE_INCLUDED */ diff --git a/sql/sql_audit.cc b/sql/sql_audit.cc index 5190cba64de..39ab33abfe6 100644 --- a/sql/sql_audit.cc +++ b/sql/sql_audit.cc @@ -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 */ -#include "mysql_priv.h" +#include "sql_priv.h" #include "sql_audit.h" extern int initialize_audit_plugin(st_plugin_int *plugin); diff --git a/sql/sql_audit.h b/sql/sql_audit.h index c25011d0d59..5b6962b9ecb 100644 --- a/sql/sql_audit.h +++ b/sql/sql_audit.h @@ -18,6 +18,7 @@ #include <mysql/plugin_audit.h> +#include "sql_class.h" extern unsigned long mysql_global_audit_mask[]; diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 651787a7969..51ab56083fc 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -16,8 +16,29 @@ /* Basic functions needed by many modules */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" #include "debug_sync.h" +#include "sql_base.h" // setup_table_map +#include "lock.h" // broadcast_refresh, mysql_lock_remove, + // mysql_unlock_tables, + // mysql_lock_have_duplicate +#include "sql_show.h" // append_identifier +#include "strfunc.h" // find_type +#include "parse_file.h" // sql_parse_prepare, File_parser +#include "sql_view.h" // mysql_frm_type, mysql_make_view, VIEW_ANY_ACL +#include "sql_parse.h" // check_table_access +#include "sql_insert.h" // kill_delayed_threads +#include "sql_acl.h" // *_ACL, check_grant_all_columns, + // check_column_grant_in_table_ref, + // get_column_grant +#include "sql_partition.h" // ALTER_PARTITION_PARAM_TYPE +#include "sql_derived.h" // mysql_derived_prepare, + // mysql_handle_derived, + // mysql_derived_filling +#include "sql_handler.h" // mysql_ha_flush +#include "sql_partition.h" // ALTER_PARTITION_PARAM_TYPE +#include "log_event.h" // Query_log_event #include "sql_select.h" #include "sp_head.h" #include "sp.h" @@ -29,6 +50,7 @@ #include <my_dir.h> #include <hash.h> #include "rpl_filter.h" +#include "sql_table.h" // build_table_filename #ifdef __WIN__ #include <io.h> #endif diff --git a/sql/sql_base.h b/sql/sql_base.h new file mode 100644 index 00000000000..eac29b1c257 --- /dev/null +++ b/sql/sql_base.h @@ -0,0 +1,359 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef SQL_BASE_INCLUDED +#define SQL_BASE_INCLUDED + +#include "unireg.h" // REQUIRED: for other includes +#include "table.h" /* open_table_mode */ +#include "sql_trigger.h" /* trg_event_type */ +#include "sql_class.h" /* enum_mark_columns */ +#include "mysqld.h" /* key_map */ + +class Item_ident; +class Name_resolution_context; +class Open_table_context; +class Open_tables_state; +class Prelocking_strategy; +class TABLE_LIST; +class THD; +class handlerton; +struct TABLE; + +typedef class st_select_lex SELECT_LEX; + +typedef struct st_lock_param_type ALTER_PARTITION_PARAM_TYPE; + +/* + This enumeration type is used only by the function find_item_in_list + to return the info on how an item has been resolved against a list + of possibly aliased items. + The item can be resolved: + - against an alias name of the list's element (RESOLVED_AGAINST_ALIAS) + - against non-aliased field name of the list (RESOLVED_WITH_NO_ALIAS) + - against an aliased field name of the list (RESOLVED_BEHIND_ALIAS) + - ignoring the alias name in cases when SQL requires to ignore aliases + (e.g. when the resolved field reference contains a table name or + when the resolved item is an expression) (RESOLVED_IGNORING_ALIAS) +*/ +enum enum_resolution_type { + NOT_RESOLVED=0, + RESOLVED_IGNORING_ALIAS, + RESOLVED_BEHIND_ALIAS, + RESOLVED_WITH_NO_ALIAS, + RESOLVED_AGAINST_ALIAS +}; + +enum enum_open_table_action {OT_NO_ACTION= 0, OT_BACK_OFF_AND_RETRY, + OT_DISCOVER, OT_REPAIR}; + +enum find_item_error_report_type {REPORT_ALL_ERRORS, REPORT_EXCEPT_NOT_FOUND, + IGNORE_ERRORS, REPORT_EXCEPT_NON_UNIQUE, + IGNORE_EXCEPT_NON_UNIQUE}; + +enum enum_tdc_remove_table_type {TDC_RT_REMOVE_ALL, TDC_RT_REMOVE_NOT_OWN, + TDC_RT_REMOVE_UNUSED}; + +/* bits for last argument to remove_table_from_cache() */ +#define RTFC_NO_FLAG 0x0000 +#define RTFC_OWNED_BY_THD_FLAG 0x0001 +#define RTFC_WAIT_OTHER_THREAD_FLAG 0x0002 +#define RTFC_CHECK_KILLED_FLAG 0x0004 + +bool check_dup(const char *db, const char *name, TABLE_LIST *tables); +bool table_cache_init(void); +void table_cache_free(void); +bool table_def_init(void); +void table_def_free(void); +void table_def_start_shutdown(void); +void assign_new_table_id(TABLE_SHARE *share); +uint cached_open_tables(void); +uint cached_table_definitions(void); +uint create_table_def_key(THD *thd, char *key, TABLE_LIST *table_list, + bool tmp_table); +TABLE_SHARE *get_table_share(THD *thd, TABLE_LIST *table_list, char *key, + uint key_length, uint db_flags, int *error, + my_hash_value_type hash_value); +void release_table_share(TABLE_SHARE *share); +TABLE_SHARE *get_cached_table_share(const char *db, const char *table_name); + +TABLE *open_ltable(THD *thd, TABLE_LIST *table_list, thr_lock_type update, + uint lock_flags); +bool open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root, + Open_table_context *ot_ctx, uint flags); +bool name_lock_locked_table(THD *thd, TABLE_LIST *tables); +bool reopen_name_locked_table(THD* thd, TABLE_LIST* table_list, bool link_in); +TABLE *table_cache_insert_placeholder(THD *thd, const char *key, + uint key_length); +bool lock_table_name_if_not_cached(THD *thd, const char *db, + const char *table_name, TABLE **table); +void detach_merge_children(TABLE *table, bool clear_refs); +bool fix_merge_after_open(TABLE_LIST *old_child_list, TABLE_LIST **old_last, + TABLE_LIST *new_child_list, TABLE_LIST **new_last); +bool reopen_table(TABLE *table); +bool reopen_tables(THD *thd,bool get_locks,bool in_refresh); +void close_data_files_and_morph_locks(THD *thd, const char *db, + const char *table_name); +void close_handle_and_leave_table_as_lock(TABLE *table); +bool open_new_frm(THD *thd, TABLE_SHARE *share, const char *alias, + uint db_stat, uint prgflag, + uint ha_open_flags, TABLE *outparam, TABLE_LIST *table_desc, + MEM_ROOT *mem_root); +bool wait_for_tables(THD *thd); +bool table_is_used(TABLE *table, bool wait_for_name_lock); +TABLE *drop_locked_tables(THD *thd,const char *db, const char *table_name); +void abort_locked_tables(THD *thd,const char *db, const char *table_name); + +bool get_key_map_from_key_list(key_map *map, TABLE *table, + List<String> *index_list); +TABLE *open_temporary_table(THD *thd, const char *path, const char *db, + const char *table_name, bool link_in_list); +TABLE *find_locked_table(TABLE *list, const char *db, const char *table_name); +TABLE *find_write_locked_table(TABLE *list, const char *db, + const char *table_name); +thr_lock_type read_lock_type_for_table(THD *thd, TABLE *table); + +my_bool mysql_rm_tmp_tables(void); +bool rm_temporary_table(handlerton *base, char *path); +void close_tables_for_reopen(THD *thd, TABLE_LIST **tables, + MDL_ticket *start_of_statement_svp); +TABLE_LIST *find_table_in_list(TABLE_LIST *table, + TABLE_LIST *TABLE_LIST::*link, + const char *db_name, + const char *table_name); +TABLE *find_temporary_table(THD *thd, const char *db, const char *table_name); +TABLE *find_temporary_table(THD *thd, TABLE_LIST *table_list); +void close_thread_tables(THD *thd); +bool fill_record_n_invoke_before_triggers(THD *thd, List<Item> &fields, + List<Item> &values, + bool ignore_errors, + Table_triggers_list *triggers, + enum trg_event_type event); +bool fill_record_n_invoke_before_triggers(THD *thd, Field **field, + List<Item> &values, + bool ignore_errors, + Table_triggers_list *triggers, + enum trg_event_type event); +bool insert_fields(THD *thd, Name_resolution_context *context, + const char *db_name, const char *table_name, + List_iterator<Item> *it, bool any_privileges); +int setup_wild(THD *thd, TABLE_LIST *tables, List<Item> &fields, + List<Item> *sum_func_list, uint wild_num); +bool setup_fields(THD *thd, Item** ref_pointer_array, + List<Item> &item, enum_mark_columns mark_used_columns, + List<Item> *sum_func_list, bool allow_sum_func); +bool fill_record(THD *thd, Field **field, List<Item> &values, + bool ignore_errors); + +Field * +find_field_in_tables(THD *thd, Item_ident *item, + TABLE_LIST *first_table, TABLE_LIST *last_table, + Item **ref, find_item_error_report_type report_error, + bool check_privileges, bool register_tree_change); +Field * +find_field_in_table_ref(THD *thd, TABLE_LIST *table_list, + const char *name, uint length, + const char *item_name, const char *db_name, + const char *table_name, Item **ref, + bool check_privileges, bool allow_rowid, + uint *cached_field_index_ptr, + bool register_tree_change, TABLE_LIST **actual_table); +Field * +find_field_in_table(THD *thd, TABLE *table, const char *name, uint length, + bool allow_rowid, uint *cached_field_index_ptr); +Field * +find_field_in_table_sef(TABLE *table, const char *name); +Item ** find_item_in_list(Item *item, List<Item> &items, uint *counter, + find_item_error_report_type report_error, + enum_resolution_type *resolution); +bool setup_tables(THD *thd, Name_resolution_context *context, + List<TABLE_LIST> *from_clause, TABLE_LIST *tables, + TABLE_LIST **leaves, bool select_insert); +bool setup_tables_and_check_access(THD *thd, + Name_resolution_context *context, + List<TABLE_LIST> *from_clause, + TABLE_LIST *tables, + TABLE_LIST **leaves, + bool select_insert, + ulong want_access_first, + ulong want_access); +bool wait_while_table_is_used(THD *thd, TABLE *table, + enum ha_extra_function function); +void unlink_open_table(THD *thd, TABLE *find, bool unlock); + +void drop_open_table(THD *thd, TABLE *table, const char *db_name, + const char *table_name); +void close_all_tables_for_name(THD *thd, TABLE_SHARE *share, + bool remove_from_locked_tables); +void update_non_unique_table_error(TABLE_LIST *update, + const char *operation, + TABLE_LIST *duplicate); +int setup_conds(THD *thd, TABLE_LIST *tables, TABLE_LIST *leaves, + COND **conds); +int setup_ftfuncs(SELECT_LEX* select); +int init_ftfuncs(THD *thd, SELECT_LEX* select, bool no_order); +void wait_for_condition(THD *thd, mysql_mutex_t *mutex, + mysql_cond_t *cond); +bool open_tables(THD *thd, TABLE_LIST **tables, uint *counter, uint flags, + Prelocking_strategy *prelocking_strategy); +/* open_and_lock_tables with optional derived handling */ +bool open_and_lock_tables(THD *thd, TABLE_LIST *tables, + bool derived, uint flags, + Prelocking_strategy *prelocking_strategy); +int open_and_lock_tables_derived(THD *thd, TABLE_LIST *tables, bool derived); +/* simple open_and_lock_tables without derived handling for single table */ +TABLE *open_n_lock_single_table(THD *thd, TABLE_LIST *table_l, + thr_lock_type lock_type, uint flags); +bool open_normal_and_derived_tables(THD *thd, TABLE_LIST *tables, uint flags); +bool lock_tables(THD *thd, TABLE_LIST *tables, uint counter, uint flags); +int abort_and_upgrade_lock(ALTER_PARTITION_PARAM_TYPE *lpt); +int decide_logging_format(THD *thd, TABLE_LIST *tables); +void free_io_cache(TABLE *entry); +void intern_close_table(TABLE *entry); +bool close_thread_table(THD *thd, TABLE **table_ptr); +void close_temporary_tables(THD *thd); +TABLE_LIST *unique_table(THD *thd, TABLE_LIST *table, TABLE_LIST *table_list, + bool check_alias); +int drop_temporary_table(THD *thd, TABLE_LIST *table_list); +void close_temporary_table(THD *thd, TABLE *table, bool free_share, + bool delete_table); +void close_temporary(TABLE *table, bool free_share, bool delete_table); +bool rename_temporary_table(THD* thd, TABLE *table, const char *new_db, + const char *table_name); +void mysql_wait_completed_table(ALTER_PARTITION_PARAM_TYPE *lpt, TABLE *my_table); +void remove_db_from_cache(const char *db); +void flush_tables(); +bool is_equal(const LEX_STRING *a, const LEX_STRING *b); + +/* Functions to work with system tables. */ +bool open_system_tables_for_read(THD *thd, TABLE_LIST *table_list, + Open_tables_backup *backup); +void close_system_tables(THD *thd, Open_tables_backup *backup); +TABLE *open_system_table_for_update(THD *thd, TABLE_LIST *one_table); +TABLE *open_log_table(THD *thd, TABLE_LIST *one_table, Open_tables_backup *backup); +void close_log_table(THD *thd, Open_tables_backup *backup); + +TABLE *open_performance_schema_table(THD *thd, TABLE_LIST *one_table, + Open_tables_state *backup); +void close_performance_schema_table(THD *thd, Open_tables_state *backup); + +bool close_cached_tables(THD *thd, TABLE_LIST *tables, bool have_lock, + bool wait_for_refresh); +bool close_cached_connection_tables(THD *thd, bool wait_for_refresh, + LEX_STRING *connect_string, + bool have_lock = FALSE); +void close_all_tables_for_name(THD *thd, TABLE_SHARE *share, + bool remove_from_locked_tables); +OPEN_TABLE_LIST *list_open_tables(THD *thd, const char *db, const char *wild); +bool remove_table_from_cache(THD *thd, const char *db, const char *table, + uint flags); +void tdc_remove_table(THD *thd, enum_tdc_remove_table_type remove_type, + const char *db, const char *table_name); +bool tdc_open_view(THD *thd, TABLE_LIST *table_list, const char *alias, + char *cache_key, uint cache_key_length, + MEM_ROOT *mem_root, uint flags); +TABLE *find_table_for_mdl_upgrade(TABLE *list, const char *db, + const char *table_name, + bool no_error); +void mark_tmp_table_for_reuse(TABLE *table); + +extern uint table_cache_count; +extern TABLE *unused_tables; +extern Item **not_found_item; +extern Field *not_found_field; +extern Field *view_ref_found; +extern HASH open_cache; +extern HASH table_def_cache; + +/** + clean/setup table fields and map. + + @param table TABLE structure pointer (which should be setup) + @param table_list TABLE_LIST structure pointer (owner of TABLE) + @param tablenr table number +*/ + + +inline void setup_table_map(TABLE *table, TABLE_LIST *table_list, uint tablenr) +{ + table->used_fields= 0; + table->const_table= 0; + table->null_row= 0; + table->status= STATUS_NO_RECORD; + table->maybe_null= table_list->outer_join; + TABLE_LIST *embedding= table_list->embedding; + while (!table->maybe_null && embedding) + { + table->maybe_null= embedding->outer_join; + embedding= embedding->embedding; + } + table->tablenr= tablenr; + table->map= (table_map) 1 << tablenr; + table->force_index= table_list->force_index; + table->force_index_order= table->force_index_group= 0; + table->covering_keys= table->s->keys_for_keyread; + table->merge_keys.clear_all(); +} + +inline TABLE_LIST *find_table_in_global_list(TABLE_LIST *table, + const char *db_name, + const char *table_name) +{ + return find_table_in_list(table, &TABLE_LIST::next_global, + db_name, table_name); +} + +inline TABLE_LIST *find_table_in_local_list(TABLE_LIST *table, + const char *db_name, + const char *table_name) +{ + return find_table_in_list(table, &TABLE_LIST::next_local, + db_name, table_name); +} + +inline bool setup_fields_with_no_wrap(THD *thd, Item **ref_pointer_array, + List<Item> &item, + enum_mark_columns mark_used_columns, + List<Item> *sum_func_list, + bool allow_sum_func) +{ + bool res; + thd->lex->select_lex.no_wrap_view_item= TRUE; + res= setup_fields(thd, ref_pointer_array, item, mark_used_columns, + sum_func_list, allow_sum_func); + thd->lex->select_lex.no_wrap_view_item= FALSE; + return res; +} + +inline bool +open_tables(THD *thd, TABLE_LIST **tables, uint *counter, uint flags) +{ + DML_prelocking_strategy prelocking_strategy; + + return open_tables(thd, tables, counter, flags, &prelocking_strategy); +} + + +/* open_and_lock_tables with derived handling */ +inline bool open_and_lock_tables(THD *thd, TABLE_LIST *tables, + bool derived, uint flags) +{ + DML_prelocking_strategy prelocking_strategy; + + return open_and_lock_tables(thd, tables, derived, flags, + &prelocking_strategy); +} + +#endif /* SQL_BASE_INCLUDED */ diff --git a/sql/sql_binlog.cc b/sql/sql_binlog.cc index 31d4430cbe6..0730f7df00c 100644 --- a/sql/sql_binlog.cc +++ b/sql/sql_binlog.cc @@ -13,10 +13,20 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "sql_binlog.h" +#include "sql_parse.h" // check_global_access +#include "sql_acl.h" // *_ACL #include "rpl_rli.h" #include "base64.h" - +#include "slave.h" // apply_event_and_update_pos +#include "log_event.h" // Format_description_log_event, + // EVENT_LEN_OFFSET, + // EVENT_TYPE_OFFSET, + // FORMAT_DESCRIPTION_LOG_EVENT, + // START_EVENT_V3, + // Log_event_type, + // Log_event /** Execute a BINLOG statement. diff --git a/sql/sql_binlog.h b/sql/sql_binlog.h new file mode 100644 index 00000000000..50251eaac50 --- /dev/null +++ b/sql/sql_binlog.h @@ -0,0 +1,23 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef SQL_BINLOG_INCLUDED +#define SQL_BINLOG_INCLUDED + +class THD; + +void mysql_client_binlog_statement(THD *thd); + +#endif /* SQL_BINLOG_INCLUDED */ diff --git a/sql/sql_bitmap.h b/sql/sql_bitmap.h index 97accefe8aa..80a4712dd69 100644 --- a/sql/sql_bitmap.h +++ b/sql/sql_bitmap.h @@ -19,6 +19,9 @@ also be able to use 32 or 64 bits bitmaps very efficiently */ +#ifndef SQL_BITMAP_INCLUDED +#define SQL_BITMAP_INCLUDED + #include <my_bitmap.h> template <uint default_width> class Bitmap @@ -138,3 +141,5 @@ public: ulonglong to_ulonglong() const { return map; } }; + +#endif /* SQL_BITMAP_INCLUDED */ diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index f812ef862b0..2d47e3d4f6d 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -327,7 +327,12 @@ TODO list: (This could be done with almost no speed penalty) */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "sql_cache.h" +#include "sql_parse.h" // check_table_access +#include "tztime.h" // struct Time_zone +#include "sql_acl.h" // SELECT_ACL +#include "sql_base.h" // TMP_TABLE_KEY_EXTRA #ifdef HAVE_QUERY_CACHE #include <m_ctype.h> #include <my_dir.h> diff --git a/sql/sql_cache.h b/sql/sql_cache.h index 9d1f32d6ef1..4fbd372d643 100644 --- a/sql/sql_cache.h +++ b/sql/sql_cache.h @@ -16,6 +16,16 @@ #ifndef _SQL_CACHE_H #define _SQL_CACHE_H +#include "hash.h" +#include "my_base.h" /* ha_rows */ + +class MY_LOCALE; +class TABLE_LIST; +class Time_zone; +struct LEX; +struct TABLE; +typedef struct st_changed_table_list CHANGED_TABLE_LIST; + /* Query cache */ /* @@ -66,6 +76,11 @@ struct Query_cache_result; class Query_cache; struct Query_cache_tls; struct LEX; +class THD; + +typedef my_bool (*qc_engine_callback)(THD *thd, char *table_key, + uint key_length, + ulonglong *engine_data); /** This class represents a node in the linked chain of queries @@ -502,5 +517,68 @@ protected: void unlock(void); }; +#ifdef HAVE_QUERY_CACHE +struct Query_cache_query_flags +{ + unsigned int client_long_flag:1; + unsigned int client_protocol_41:1; + unsigned int protocol_type:2; + unsigned int more_results_exists:1; + unsigned int in_trans:1; + unsigned int autocommit:1; + unsigned int pkt_nr; + uint character_set_client_num; + uint character_set_results_num; + uint collation_connection_num; + ha_rows limit; + Time_zone *time_zone; + ulong sql_mode; + ulong max_sort_length; + ulong group_concat_max_len; + ulong default_week_format; + ulong div_precision_increment; + MY_LOCALE *lc_time_names; +}; +#define QUERY_CACHE_FLAGS_SIZE sizeof(Query_cache_query_flags) +#include "sql_cache.h" +#define query_cache_abort(A) query_cache.abort(A) +#define query_cache_end_of_result(A) query_cache.end_of_result(A) +#define query_cache_store_query(A, B) query_cache.store_query(A, B) +#define query_cache_destroy() query_cache.destroy() +#define query_cache_result_size_limit(A) query_cache.result_size_limit(A) +#define query_cache_init() query_cache.init() +#define query_cache_resize(A) query_cache.resize(A) +#define query_cache_set_min_res_unit(A) query_cache.set_min_res_unit(A) +#define query_cache_invalidate3(A, B, C) query_cache.invalidate(A, B, C) +#define query_cache_invalidate1(A) query_cache.invalidate(A) +#define query_cache_send_result_to_client(A, B, C) \ + query_cache.send_result_to_client(A, B, C) +#define query_cache_invalidate_by_MyISAM_filename_ref \ + &query_cache_invalidate_by_MyISAM_filename +/* note the "maybe": it's a read without mutex */ +#define query_cache_maybe_disabled(T) \ + (T->variables.query_cache_type == 0 || query_cache.query_cache_size == 0) +#define query_cache_is_cacheable_query(L) \ + (((L)->sql_command == SQLCOM_SELECT) && (L)->safe_to_cache_query) +#else +#define QUERY_CACHE_FLAGS_SIZE 0 +#define query_cache_store_query(A, B) +#define query_cache_destroy() +#define query_cache_result_size_limit(A) +#define query_cache_init() +#define query_cache_resize(A) +#define query_cache_set_min_res_unit(A) +#define query_cache_invalidate3(A, B, C) +#define query_cache_invalidate1(A) +#define query_cache_send_result_to_client(A, B, C) 0 +#define query_cache_invalidate_by_MyISAM_filename_ref NULL + +#define query_cache_abort(A) +#define query_cache_end_of_result(A) +#define query_cache_invalidate_by_MyISAM_filename_ref NULL +#define query_cache_maybe_disabled(T) 1 +#define query_cache_is_cacheable_query(L) 0 +#endif /*HAVE_QUERY_CACHE*/ + extern Query_cache query_cache; #endif diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 4b21bc283e2..d47aae38f94 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -25,7 +25,17 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" // REQUIRED: for other includes +#include "sql_class.h" +#include "lock.h" // unlock_global_read_lock, mysql_unlock_tables +#include "sql_cache.h" // query_cache_abort +#include "sql_base.h" // close_thread_tables +#include "sql_time.h" // date_time_format_copy +#include "sql_acl.h" // NO_ACCESS, + // acl_getroot_no_password +#include "sql_base.h" // close_temporary_tables +#include "sql_handler.h" // mysql_ha_cleanup #include "rpl_rli.h" #include "rpl_filter.h" #include "rpl_record.h" @@ -46,6 +56,7 @@ #include "sp_cache.h" #include "transaction.h" #include "debug_sync.h" +#include "sql_parse.h" // is_update_query /* The following is used to initialise Table_ident with a internal diff --git a/sql/sql_class.h b/sql/sql_class.h index de6d92eccfd..97d60a62780 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -23,10 +23,21 @@ #pragma interface /* gcc class implementation */ #endif +#ifdef MYSQL_SERVER +#include "unireg.h" // REQUIRED: for other includes +#endif +#include "sql_const.h" #include <mysql/plugin_audit.h> #include "log.h" #include "rpl_tblmap.h" #include "mdl.h" +#include "sql_locale.h" /* my_locale_st */ +#include "sql_profile.h" /* PROFILING */ +#include "scheduler.h" /* thd_scheduler */ +#include "protocol.h" /* Protocol_text, Protocol_binary */ +#include "violite.h" /* vio_is_connected */ +#include "thr_lock.h" /* thr_lock_type, THR_LOCK_DATA, + THR_LOCK_INFO, THR_LOCK_OWNER */ class Reprepare_observer; @@ -40,6 +51,8 @@ class sp_cache; class Parser_state; class Rows_log_event; class Sroutine_hash_entry; +class User_level_lock; +class user_var_entry; enum enum_enable_or_disable { LEAVE_AS_IS, ENABLE, DISABLE }; enum enum_ha_read_modes { RFIRST, RNEXT, RPREV, RLAST, RKEY, RNEXT_SAME }; @@ -55,6 +68,40 @@ enum enum_mark_columns { MARK_COLUMNS_NONE, MARK_COLUMNS_READ, MARK_COLUMNS_WRITE}; enum enum_filetype { FILETYPE_CSV, FILETYPE_XML }; +/* Bits for different SQL modes modes (including ANSI mode) */ +#define MODE_REAL_AS_FLOAT 1 +#define MODE_PIPES_AS_CONCAT 2 +#define MODE_ANSI_QUOTES 4 +#define MODE_IGNORE_SPACE 8 +#define MODE_NOT_USED 16 +#define MODE_ONLY_FULL_GROUP_BY 32 +#define MODE_NO_UNSIGNED_SUBTRACTION 64 +#define MODE_NO_DIR_IN_CREATE 128 +#define MODE_POSTGRESQL 256 +#define MODE_ORACLE 512 +#define MODE_MSSQL 1024 +#define MODE_DB2 2048 +#define MODE_MAXDB 4096 +#define MODE_NO_KEY_OPTIONS 8192 +#define MODE_NO_TABLE_OPTIONS 16384 +#define MODE_NO_FIELD_OPTIONS 32768 +#define MODE_MYSQL323 65536L +#define MODE_MYSQL40 (MODE_MYSQL323*2) +#define MODE_ANSI (MODE_MYSQL40*2) +#define MODE_NO_AUTO_VALUE_ON_ZERO (MODE_ANSI*2) +#define MODE_NO_BACKSLASH_ESCAPES (MODE_NO_AUTO_VALUE_ON_ZERO*2) +#define MODE_STRICT_TRANS_TABLES (MODE_NO_BACKSLASH_ESCAPES*2) +#define MODE_STRICT_ALL_TABLES (MODE_STRICT_TRANS_TABLES*2) +#define MODE_NO_ZERO_IN_DATE (MODE_STRICT_ALL_TABLES*2) +#define MODE_NO_ZERO_DATE (MODE_NO_ZERO_IN_DATE*2) +#define MODE_INVALID_DATES (MODE_NO_ZERO_DATE*2) +#define MODE_ERROR_FOR_DIVISION_BY_ZERO (MODE_INVALID_DATES*2) +#define MODE_TRADITIONAL (MODE_ERROR_FOR_DIVISION_BY_ZERO*2) +#define MODE_NO_AUTO_CREATE_USER (MODE_TRADITIONAL*2) +#define MODE_HIGH_NOT_PRECEDENCE (MODE_NO_AUTO_CREATE_USER*2) +#define MODE_NO_ENGINE_SUBSTITUTION (MODE_HIGH_NOT_PRECEDENCE*2) +#define MODE_PAD_CHAR_TO_FULL_LENGTH (ULL(1) << 31) + extern char internal_table_name[2]; extern char empty_c_string[1]; extern MYSQL_PLUGIN_IMPORT const char **errmesg; @@ -248,6 +295,8 @@ public: LEX_COLUMN (const String& x,const uint& y ): column (x),rights (y) {} }; +class MY_LOCALE; + /** Query_cache_tls -- query cache thread local data. */ @@ -2766,8 +2815,6 @@ public: bool escaped_given(void); }; -#include "log_event.h" - /* This is used to get result from a select */ @@ -3484,13 +3531,55 @@ public: */ #define CF_SKIP_QUESTIONS (1U << 1) -/* Functions in sql_class.cc */ - void add_to_status(STATUS_VAR *to_var, STATUS_VAR *from_var); void add_diff_to_status(STATUS_VAR *to_var, STATUS_VAR *from_var, STATUS_VAR *dec_var); void mark_transaction_to_rollback(THD *thd, bool all); +/* + This prototype is placed here instead of in item_func.h because it + depends on the definition of enum_sql_command, which is in this + file. + */ +int get_var_with_binlog(THD *thd, enum_sql_command sql_command, + LEX_STRING &name, user_var_entry **out_entry); + +/* Inline functions */ + +inline bool add_item_to_list(THD *thd, Item *item) +{ + return thd->lex->current_select->add_item_to_list(thd, item); +} + +inline bool add_value_to_list(THD *thd, Item *value) +{ + return thd->lex->value_list.push_back(value); +} + +inline bool add_order_to_list(THD *thd, Item *item, bool asc) +{ + return thd->lex->current_select->add_order_to_list(thd, item, asc); +} + +inline bool add_group_to_list(THD *thd, Item *item, bool asc) +{ + return thd->lex->current_select->add_group_to_list(thd, item, asc); +} + #endif /* MYSQL_SERVER */ + +/** + The meat of thd_proc_info(THD*, char*), a macro that packs the last + three calling-info parameters. +*/ +extern "C" +const char *set_thd_proc_info(THD *thd, const char *info, + const char *calling_func, + const char *calling_file, + const unsigned int calling_line); + +#define thd_proc_info(thd, msg) \ + set_thd_proc_info(thd, msg, __func__, __FILE__, __LINE__) + #endif /* SQL_CLASS_INCLUDED */ diff --git a/sql/sql_client.cc b/sql/sql_client.cc index 032a2e26e3a..0c16449276a 100644 --- a/sql/sql_client.cc +++ b/sql/sql_client.cc @@ -17,7 +17,8 @@ This files defines some MySQL C API functions that are server specific */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "sql_class.h" // system_variables /* Function called by my_net_init() to set some check variables diff --git a/sql/sql_connect.cc b/sql/sql_connect.cc index 90b255b0843..c454933517f 100644 --- a/sql/sql_connect.cc +++ b/sql/sql_connect.cc @@ -18,9 +18,23 @@ Functions to autenticate and handle reqests for a connection */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "my_global.h" +#ifndef __WIN__ +#include <netdb.h> // getservbyname, servent +#endif #include "sql_audit.h" +#include "sql_connect.h" +#include "my_global.h" #include "probes_mysql.h" +#include "unireg.h" // REQUIRED: for other includes +#include "sql_parse.h" // sql_command_flags, + // execute_init_command, + // do_command +#include "sql_db.h" // mysql_change_db +#include "hostname.h" // inc_host_errors, ip_to_hostname, + // reset_host_errors +#include "sql_acl.h" // acl_getroot, NO_ACCESS, SUPER_ACL #ifdef HAVE_OPENSSL /* diff --git a/sql/sql_connect.h b/sql/sql_connect.h new file mode 100644 index 00000000000..2334b7303be --- /dev/null +++ b/sql/sql_connect.h @@ -0,0 +1,43 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef SQL_CONNECT_INCLUDED +#define SQL_CONNECT_INCLUDED + +#include "my_sys.h" /* pthread_handler_t */ +#include "mysql_com.h" /* enum_server_command */ + +class THD; +typedef struct st_lex_user LEX_USER; +typedef struct user_conn USER_CONN; + +void init_max_user_conn(void); +void free_max_user_conn(void); + +pthread_handler_t handle_one_connection(void *arg); +void do_handle_one_connection(THD *thd_arg); +bool init_new_connection_handler_thread(); +void reset_mqh(LEX_USER *lu, bool get_them); +bool check_mqh(THD *thd, uint check_command); +void time_out_user_resource_limits(THD *thd, USER_CONN *uc); +void decrease_user_connections(USER_CONN *uc); +void thd_init_client_charset(THD *thd, uint cs_number); +bool setup_connection_thread_globals(THD *thd); + +int check_user(THD *thd, enum enum_server_command command, + const char *passwd, uint passwd_len, const char *db, + bool check_count); + +#endif /* SQL_CONNECT_INCLUDED */ diff --git a/sql/sql_const.h b/sql/sql_const.h new file mode 100644 index 00000000000..72f34ed6be8 --- /dev/null +++ b/sql/sql_const.h @@ -0,0 +1,254 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/** + @file + File containing constants that can be used throughout the server. + + @note This file shall not contain any includes of any kinds. +*/ + +#ifndef SQL_CONST_INCLUDED +#define SQL_CONST_INCLUDED + +#define LIBLEN FN_REFLEN-FN_LEN /* Max l{ngd p} dev */ +/* extra 4+4 bytes for slave tmp tables */ +#define MAX_DBKEY_LENGTH (NAME_LEN*2+1+1+4+4) +#define MAX_ALIAS_NAME 256 +#define MAX_FIELD_NAME 34 /* Max colum name length +2 */ +#define MAX_SYS_VAR_LENGTH 32 +#define MAX_KEY MAX_INDEXES /* Max used keys */ +#define MAX_REF_PARTS 16 /* Max parts used as ref */ +#define MAX_KEY_LENGTH 3072 /* max possible key */ +#if SIZEOF_OFF_T > 4 +#define MAX_REFLENGTH 8 /* Max length for record ref */ +#else +#define MAX_REFLENGTH 4 /* Max length for record ref */ +#endif +#define MAX_HOSTNAME 61 /* len+1 in mysql.user */ + +#define MAX_MBWIDTH 3 /* Max multibyte sequence */ +#define MAX_FIELD_CHARLENGTH 255 +#define MAX_FIELD_VARCHARLENGTH 65535 +#define MAX_FIELD_BLOBLENGTH UINT_MAX32 /* cf field_blob::get_length() */ +#define CONVERT_IF_BIGGER_TO_BLOB 512 /* Used for CREATE ... SELECT */ + +/* Max column width +1 */ +#define MAX_FIELD_WIDTH (MAX_FIELD_CHARLENGTH*MAX_MBWIDTH+1) + +#define MAX_BIT_FIELD_LENGTH 64 /* Max length in bits for bit fields */ + +#define MAX_DATE_WIDTH 10 /* YYYY-MM-DD */ +#define MAX_TIME_WIDTH 23 /* -DDDDDD HH:MM:SS.###### */ +#define MAX_DATETIME_FULL_WIDTH 29 /* YYYY-MM-DD HH:MM:SS.###### AM */ +#define MAX_DATETIME_WIDTH 19 /* YYYY-MM-DD HH:MM:SS */ +#define MAX_DATETIME_COMPRESSED_WIDTH 14 /* YYYYMMDDHHMMSS */ + +#define MAX_TABLES (sizeof(table_map)*8-3) /* Max tables in join */ +#define PARAM_TABLE_BIT (((table_map) 1) << (sizeof(table_map)*8-3)) +#define OUTER_REF_TABLE_BIT (((table_map) 1) << (sizeof(table_map)*8-2)) +#define RAND_TABLE_BIT (((table_map) 1) << (sizeof(table_map)*8-1)) +#define PSEUDO_TABLE_BITS (PARAM_TABLE_BIT | OUTER_REF_TABLE_BIT | \ + RAND_TABLE_BIT) +#define MAX_FIELDS 4096 /* Limit in the .frm file */ +#define MAX_PARTITIONS 1024 + +#define MAX_SELECT_NESTING (sizeof(nesting_map)*8-1) + +#define MAX_SORT_MEMORY 2048*1024 +#define MIN_SORT_MEMORY 32*1024 + +/* Some portable defines */ + +#define portable_sizeof_char_ptr 8 +#define STRING_BUFFER_USUAL_SIZE 80 + +/* Memory allocated when parsing a statement / saving a statement */ +#define MEM_ROOT_BLOCK_SIZE 8192 +#define MEM_ROOT_PREALLOC 8192 +#define TRANS_MEM_ROOT_BLOCK_SIZE 4096 +#define TRANS_MEM_ROOT_PREALLOC 4096 + +#define DEFAULT_ERROR_COUNT 64 +#define EXTRA_RECORDS 10 /* Extra records in sort */ +#define SCROLL_EXTRA 5 /* Extra scroll-rows. */ +#define FIELD_NAME_USED ((uint) 32768) /* Bit set if fieldname used */ +#define FORM_NAME_USED ((uint) 16384) /* Bit set if formname used */ +#define FIELD_NR_MASK 16383 /* To get fieldnumber */ +#define FERR -1 /* Error from my_functions */ +#define CREATE_MODE 0 /* Default mode on new files */ +#define NAMES_SEP_CHAR '\377' /* Char to sep. names */ + +#define READ_RECORD_BUFFER (uint) (IO_SIZE*8) /* Pointer_buffer_size */ +#define DISK_BUFFER_SIZE (uint) (IO_SIZE*16) /* Size of diskbuffer */ + +#define FRM_VER_TRUE_VARCHAR (FRM_VER+4) /* 10 */ + +/*************************************************************************** + Configuration parameters +****************************************************************************/ + +#define ACL_CACHE_SIZE 256 +#define MAX_PASSWORD_LENGTH 32 +#define HOST_CACHE_SIZE 128 +#define MAX_ACCEPT_RETRY 10 // Test accept this many times +#define MAX_FIELDS_BEFORE_HASH 32 +#define USER_VARS_HASH_SIZE 16 +#define TABLE_OPEN_CACHE_MIN 400 +#define TABLE_OPEN_CACHE_DEFAULT 400 +#define TABLE_DEF_CACHE_DEFAULT 400 +/** + We must have room for at least 400 table definitions in the table + cache, since otherwise there is no chance prepared + statements that use these many tables can work. + Prepared statements use table definition cache ids (table_map_id) + as table version identifiers. If the table definition + cache size is less than the number of tables used in a statement, + the contents of the table definition cache is guaranteed to rotate + between a prepare and execute. This leads to stable validation + errors. In future we shall use more stable version identifiers, + for now the only solution is to ensure that the table definition + cache can contain at least all tables of a given statement. +*/ +#define TABLE_DEF_CACHE_MIN 400 + +/* + Stack reservation. + Feel free to raise this by the smallest amount you can to get the + "execution_constants" test to pass. +*/ +#define STACK_MIN_SIZE 16000 // Abort if less stack during eval. + +#define STACK_MIN_SIZE_FOR_OPEN 1024*80 +#define STACK_BUFF_ALLOC 352 ///< For stack overrun checks +#ifndef MYSQLD_NET_RETRY_COUNT +#define MYSQLD_NET_RETRY_COUNT 10 ///< Abort read after this many int. +#endif +#define TEMP_POOL_SIZE 128 + +#define QUERY_ALLOC_BLOCK_SIZE 8192 +#define QUERY_ALLOC_PREALLOC_SIZE 8192 +#define TRANS_ALLOC_BLOCK_SIZE 4096 +#define TRANS_ALLOC_PREALLOC_SIZE 4096 +#define RANGE_ALLOC_BLOCK_SIZE 4096 +#define ACL_ALLOC_BLOCK_SIZE 1024 +#define UDF_ALLOC_BLOCK_SIZE 1024 +#define TABLE_ALLOC_BLOCK_SIZE 1024 +#define BDB_LOG_ALLOC_BLOCK_SIZE 1024 +#define WARN_ALLOC_BLOCK_SIZE 2048 +#define WARN_ALLOC_PREALLOC_SIZE 1024 +#define PROFILE_ALLOC_BLOCK_SIZE 2048 +#define PROFILE_ALLOC_PREALLOC_SIZE 1024 + +/* + The following parameters is to decide when to use an extra cache to + optimise seeks when reading a big table in sorted order +*/ +#define MIN_FILE_LENGTH_TO_USE_ROW_CACHE (10L*1024*1024) +#define MIN_ROWS_TO_USE_TABLE_CACHE 100 +#define MIN_ROWS_TO_USE_BULK_INSERT 100 + +/** + The following is used to decide if MySQL should use table scanning + instead of reading with keys. The number says how many evaluation of the + WHERE clause is comparable to reading one extra row from a table. +*/ +#define TIME_FOR_COMPARE 5 // 5 compares == one read + +/** + Number of comparisons of table rowids equivalent to reading one row from a + table. +*/ +#define TIME_FOR_COMPARE_ROWID (TIME_FOR_COMPARE*2) + +/* + For sequential disk seeks the cost formula is: + DISK_SEEK_BASE_COST + DISK_SEEK_PROP_COST * #blocks_to_skip + + The cost of average seek + DISK_SEEK_BASE_COST + DISK_SEEK_PROP_COST*BLOCKS_IN_AVG_SEEK =1.0. +*/ +#define DISK_SEEK_BASE_COST ((double)0.5) + +#define BLOCKS_IN_AVG_SEEK 128 + +#define DISK_SEEK_PROP_COST ((double)0.5/BLOCKS_IN_AVG_SEEK) + + +/** + Number of rows in a reference table when refereed through a not unique key. + This value is only used when we don't know anything about the key + distribution. +*/ +#define MATCHING_ROWS_IN_OTHER_TABLE 10 + +#define RAID_BLOCK_SIZE 1024 + +#define MY_CHARSET_BIN_MB_MAXLEN 1 + +/** Don't pack string keys shorter than this (if PACK_KEYS=1 isn't used). */ +#define KEY_DEFAULT_PACK_LENGTH 8 + +/** Characters shown for the command in 'show processlist'. */ +#define PROCESS_LIST_WIDTH 100 +/* Characters shown for the command in 'information_schema.processlist' */ +#define PROCESS_LIST_INFO_WIDTH 65535 + +#define PRECISION_FOR_DOUBLE 53 +#define PRECISION_FOR_FLOAT 24 + +/* -[digits].E+## */ +#define MAX_FLOAT_STR_LENGTH (FLT_DIG + 6) +/* -[digits].E+### */ +#define MAX_DOUBLE_STR_LENGTH (DBL_DIG + 7) + +/* + Default time to wait before aborting a new client connection + that does not respond to "initial server greeting" timely +*/ +#define CONNECT_TIMEOUT 10 + +/* The following can also be changed from the command line */ +#define DEFAULT_CONCURRENCY 10 +#define DELAYED_LIMIT 100 /**< pause after xxx inserts */ +#define DELAYED_QUEUE_SIZE 1000 +#define DELAYED_WAIT_TIMEOUT 5*60 /**< Wait for delayed insert */ +#define FLUSH_TIME 0 /**< Don't flush tables */ +#define MAX_CONNECT_ERRORS 10 ///< errors before disabling host + +#define LONG_TIMEOUT ((ulong) 3600L*24L*365L) + +/** + Maximum length of time zone name that we support (Time zone name is + char(64) in db). mysqlbinlog needs it. +*/ +#define MAX_TIME_ZONE_NAME_LENGTH (NAME_LEN + 1) + +#if defined(__WIN__) +#undef FLUSH_TIME +#define FLUSH_TIME 1800 /**< Flush every half hour */ + +#define INTERRUPT_PRIOR -2 +#define CONNECT_PRIOR -1 +#define WAIT_PRIOR 0 +#define QUERY_PRIOR 2 +#else +#define INTERRUPT_PRIOR 10 +#define CONNECT_PRIOR 9 +#define WAIT_PRIOR 8 +#define QUERY_PRIOR 6 +#endif /* __WIN92__ */ + +#endif /* SQL_CONST_INCLUDED */ diff --git a/sql/sql_crypt.cc b/sql/sql_crypt.cc index 3d7d248782b..455e7dc1e7b 100644 --- a/sql/sql_crypt.cc +++ b/sql/sql_crypt.cc @@ -26,7 +26,9 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" +#include "sql_crypt.h" +#include "password.h" void SQL_CRYPT::init(ulong *rand_nr) { diff --git a/sql/sql_crypt.h b/sql/sql_crypt.h index dd1cba9ee0c..15cc495858b 100644 --- a/sql/sql_crypt.h +++ b/sql/sql_crypt.h @@ -21,6 +21,9 @@ #pragma interface /* gcc class implementation */ #endif +#include "sql_list.h" /* Sql_alloc */ +#include "mysql_com.h" /* rand_struct */ + class SQL_CRYPT :public Sql_alloc { struct rand_struct rand,org_rand; diff --git a/sql/sql_cursor.cc b/sql/sql_cursor.cc index 0391ce6dc72..59bf0764ada 100644 --- a/sql/sql_cursor.cc +++ b/sql/sql_cursor.cc @@ -16,10 +16,12 @@ #pragma implementation /* gcc class implementation */ #endif -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" #include "sql_cursor.h" #include "sql_select.h" #include "probes_mysql.h" +#include "sql_parse.h" // mysql_execute_command /**************************************************************************** Declarations. diff --git a/sql/sql_cursor.h b/sql/sql_cursor.h index 1f19cbfdbcf..2a394e281b4 100644 --- a/sql/sql_cursor.h +++ b/sql/sql_cursor.h @@ -20,6 +20,10 @@ #pragma interface /* gcc class interface */ #endif +#include "sql_class.h" /* Query_arena */ + +class JOIN; + /** @file diff --git a/sql/sql_db.cc b/sql/sql_db.cc index e700dd93a55..3bd89cb7302 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -16,7 +16,19 @@ /* create and drop of databases */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "sql_db.h" +#include "sql_cache.h" // query_cache_* +#include "lock.h" // wait_if_global_read_lock, + // start_waiting_global_read_lock +#include "sql_table.h" // build_table_filename, + // filename_to_tablename +#include "sql_rename.h" // mysql_rename_tables +#include "sql_acl.h" // SELECT_ACL, DB_ACLS, + // acl_get, check_grant_db +#include "sql_base.h" // wait_for_condition +#include "log_event.h" // Query_log_event #include <mysys_err.h> #include "sp.h" #include "events.h" diff --git a/sql/sql_db.h b/sql/sql_db.h new file mode 100644 index 00000000000..96b3de80d3a --- /dev/null +++ b/sql/sql_db.h @@ -0,0 +1,53 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef SQL_DB_INCLUDED +#define SQL_DB_INCLUDED + +#include "hash.h" /* HASH */ + +class THD; +typedef struct charset_info_st CHARSET_INFO; +typedef struct st_ha_create_information HA_CREATE_INFO; +typedef struct st_mysql_lex_string LEX_STRING; + +int mysql_create_db(THD *thd, char *db, HA_CREATE_INFO *create, bool silent); +bool mysql_alter_db(THD *thd, const char *db, HA_CREATE_INFO *create); +bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent); +bool mysql_upgrade_db(THD *thd, LEX_STRING *old_db); +bool mysql_change_db(THD *thd, const LEX_STRING *new_db_name, + bool force_switch); + +bool mysql_opt_change_db(THD *thd, + const LEX_STRING *new_db_name, + LEX_STRING *saved_db_name, + bool force_switch, + bool *cur_db_changed); +bool my_database_names_init(void); +void my_database_names_free(void); +bool check_db_dir_existence(const char *db_name); +bool load_db_opt(THD *thd, const char *path, HA_CREATE_INFO *create); +bool load_db_opt_by_name(THD *thd, const char *db_name, + HA_CREATE_INFO *db_create_info); +CHARSET_INFO *get_default_db_collation(THD *thd, const char *db_name); +bool my_dbopt_init(void); +void my_dbopt_cleanup(void); + +extern int creating_database; // How many database locks are made +extern HASH lock_db_cache; + +#define MY_DB_OPT_FILE "db.opt" + +#endif /* SQL_DB_INCLUDED */ diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index 58073a40319..2a8503077aa 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -19,11 +19,25 @@ Multi-table deletes were introduced by Monty and Sinisa */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "sql_delete.h" +#include "sql_cache.h" // query_cache_* +#include "sql_base.h" // open_temprary_table +#include "sql_table.h" // build_table_filename +#include "lock.h" // lock_and_wait_for_table_name, + // unlock_table_name +#include "sql_view.h" // check_key_in_view, mysql_frm_type +#include "sql_parse.h" // mysql_init_select +#include "sql_acl.h" // *_ACL +#include "filesort.h" // filesort +#include "sql_handler.h" // mysql_ha_rm_tables #include "sql_select.h" #include "sp_head.h" #include "sql_trigger.h" #include "transaction.h" +#include "records.h" // init_read_record, + // end_read_record /** Implement DELETE SQL word. diff --git a/sql/sql_delete.h b/sql/sql_delete.h new file mode 100644 index 00000000000..cbaa21cef25 --- /dev/null +++ b/sql/sql_delete.h @@ -0,0 +1,34 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef SQL_DELETE_INCLUDED +#define SQL_DELETE_INCLUDED + +#include "my_base.h" /* ha_rows */ + +class THD; +class TABLE_LIST; +class Item; + +typedef class Item COND; +typedef struct st_sql_list SQL_LIST; + +int mysql_prepare_delete(THD *thd, TABLE_LIST *table_list, Item **conds); +bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, + SQL_LIST *order, ha_rows rows, ulonglong options, + bool reset_auto_increment); +bool mysql_truncate(THD *thd, TABLE_LIST *table_list, bool dont_send_ok); + +#endif /* SQL_DELETE_INCLUDED */ diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc index 24088872471..aea3b8b1d20 100644 --- a/sql/sql_derived.cc +++ b/sql/sql_derived.cc @@ -20,9 +20,12 @@ */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "sql_derived.h" #include "sql_select.h" - +#include "sql_view.h" // check_duplicate_names +#include "sql_acl.h" // SELECT_ACL /* diff --git a/sql/sql_derived.h b/sql/sql_derived.h new file mode 100644 index 00000000000..71dd929feca --- /dev/null +++ b/sql/sql_derived.h @@ -0,0 +1,29 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef SQL_DERIVED_INCLUDED +#define SQL_DERIVED_INCLUDED + +class TABLE_LIST; +class THD; +struct LEX; + +bool mysql_handle_derived(LEX *lex, bool (*processor)(THD *thd, + LEX *lex, + TABLE_LIST *table)); +bool mysql_derived_prepare(THD *thd, LEX *lex, TABLE_LIST *t); +bool mysql_derived_filling(THD *thd, LEX *lex, TABLE_LIST *t); + +#endif /* SQL_DERIVED_INCLUDED */ diff --git a/sql/sql_do.cc b/sql/sql_do.cc index 0f3a7e1ecef..79e488ac2a5 100644 --- a/sql/sql_do.cc +++ b/sql/sql_do.cc @@ -16,8 +16,12 @@ /* Execute DO statement */ -#include "mysql_priv.h" +#include "sql_priv.h" #include "transaction.h" +#include "unireg.h" +#include "sql_do.h" +#include "sql_base.h" // setup_fields +#include "sql_select.h" // free_underlaid_joins bool mysql_do(THD *thd, List<Item> &values) { diff --git a/sql/sql_do.h b/sql/sql_do.h new file mode 100644 index 00000000000..56479f8f88e --- /dev/null +++ b/sql/sql_do.h @@ -0,0 +1,26 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef SQL_DO_INCLUDED +#define SQL_DO_INCLUDED + +#include "sql_list.h" /* List */ + +class THD; +class Item; + +bool mysql_do(THD *thd, List<Item> &values); + +#endif /* SQL_DO_INCLUDED */ diff --git a/sql/sql_error.cc b/sql/sql_error.cc index eeefdb99eed..cc6529f7b10 100644 --- a/sql/sql_error.cc +++ b/sql/sql_error.cc @@ -42,7 +42,8 @@ This file contains the implementation of error and warnings related ***********************************************************************/ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" #include "sql_error.h" #include "sp_rcontext.h" diff --git a/sql/sql_error.h b/sql/sql_error.h index ac86ca4770c..9e649a004df 100644 --- a/sql/sql_error.h +++ b/sql/sql_error.h @@ -19,6 +19,7 @@ #include "sql_list.h" /* Sql_alloc, MEM_ROOT */ #include "m_string.h" /* LEX_STRING */ +#include "sql_string.h" /* String */ #include "mysql_com.h" /* MYSQL_ERRMSG_SIZE */ class THD; diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc index dfa06495e9d..23177b8f51a 100644 --- a/sql/sql_handler.cc +++ b/sql/sql_handler.cc @@ -51,7 +51,13 @@ cursor points at the first record). */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "sql_handler.h" +#include "unireg.h" // REQUIRED: for other includes +#include "sql_base.h" // close_thread_tables +#include "lock.h" // broadcast_refresh, mysql_unlock_tables +#include "key.h" // key_copy +#include "sql_base.h" // insert_fields #include "sql_select.h" #include <assert.h> diff --git a/sql/sql_handler.h b/sql/sql_handler.h new file mode 100644 index 00000000000..d4a528d0bd0 --- /dev/null +++ b/sql/sql_handler.h @@ -0,0 +1,35 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef SQL_HANDLER_INCLUDED +#define SQL_HANDLER_INCLUDED + +#include "sql_class.h" /* enum_ha_read_mode */ +#include "my_base.h" /* ha_rkey_function, ha_rows */ +#include "sql_list.h" /* List */ + +class THD; +class TABLE_LIST; + +bool mysql_ha_open(THD *thd, TABLE_LIST *tables, bool reopen); +bool mysql_ha_close(THD *thd, TABLE_LIST *tables); +bool mysql_ha_read(THD *, TABLE_LIST *,enum enum_ha_read_modes,char *, + List<Item> *,enum ha_rkey_function,Item *,ha_rows,ha_rows); +void mysql_ha_flush(THD *thd); +void mysql_ha_rm_tables(THD *thd, TABLE_LIST *tables); +void mysql_ha_cleanup(THD *thd); +void mysql_ha_move_tickets_after_trans_sentinel(THD *thd); + +#endif /* SQL_HANDLER_INCLUDED */ diff --git a/sql/sql_help.cc b/sql/sql_help.cc index e9b15e07e9d..7bea236269a 100644 --- a/sql/sql_help.cc +++ b/sql/sql_help.cc @@ -13,7 +13,13 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "sql_help.h" +#include "sql_table.h" // primary_key_name +#include "sql_base.h" // REPORT_ALL_ERRORS, setup_tables +#include "opt_range.h" // SQL_SELECT +#include "records.h" // init_read_record, end_read_record struct st_find_field { diff --git a/sql/sql_help.h b/sql/sql_help.h new file mode 100644 index 00000000000..74cff691730 --- /dev/null +++ b/sql/sql_help.h @@ -0,0 +1,28 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef SQL_HELP_INCLUDED +#define SQL_HELP_INCLUDED + +class THD; + + +/* + Function prototypes +*/ + +bool mysqld_help (THD *thd, const char *text); + +#endif /* SQL_HELP_INCLUDED */ diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 7423dd9d292..216e3a65dfe 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -54,12 +54,23 @@ */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" // REQUIRED: for other includes +#include "sql_insert.h" +#include "sql_update.h" // compare_record +#include "sql_base.h" // close_thread_tables +#include "sql_cache.h" // query_cache_* +#include "key.h" // key_copy +#include "lock.h" // mysql_unlock_tables #include "sp_head.h" +#include "sql_view.h" // check_key_in_view, insert_view_fields +#include "sql_table.h" // mysql_create_table_no_lock +#include "sql_acl.h" // *_ACL, check_grant_all_columns #include "sql_trigger.h" #include "sql_select.h" #include "sql_show.h" #include "slave.h" +#include "sql_parse.h" // end_active_trans #include "rpl_mi.h" #include "transaction.h" #include "sql_audit.h" diff --git a/sql/sql_insert.h b/sql/sql_insert.h new file mode 100644 index 00000000000..9511cee8526 --- /dev/null +++ b/sql/sql_insert.h @@ -0,0 +1,49 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef SQL_INSERT_INCLUDED +#define SQL_INSERT_INCLUDED + +#include "sql_class.h" /* enum_duplicates */ +#include "sql_list.h" + +/* Instead of including sql_lex.h we add this typedef here */ +typedef List<Item> List_item; +typedef struct st_copy_info COPY_INFO; + +bool mysql_prepare_insert(THD *thd, TABLE_LIST *table_list, TABLE *table, + List<Item> &fields, List_item *values, + List<Item> &update_fields, + List<Item> &update_values, enum_duplicates duplic, + COND **where, bool select_insert, + bool check_fields, bool abort_on_warning); +bool mysql_insert(THD *thd,TABLE_LIST *table,List<Item> &fields, + List<List_item> &values, List<Item> &update_fields, + List<Item> &update_values, enum_duplicates flag, + bool ignore); +void upgrade_lock_type_for_insert(THD *thd, thr_lock_type *lock_type, + enum_duplicates duplic, + bool is_multi_insert); +int check_that_all_fields_are_given_values(THD *thd, TABLE *entry, + TABLE_LIST *table_list); +void prepare_triggers_for_insert_stmt(TABLE *table); +int write_record(THD *thd, TABLE *table, COPY_INFO *info); +void kill_delayed_threads(void); + +#ifdef EMBEDDED_LIBRARY +inline void kill_delayed_threads(void) {} +#endif + +#endif /* SQL_INSERT_INCLUDED */ diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 14b5e160629..6384aa575fe 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -17,7 +17,11 @@ /* A lexical scanner on a temporary buffer with a yacc interface */ #define MYSQL_LEX 1 -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" // REQUIRED: for other includes +#include "sql_class.h" // sql_lex.h: SQLCOM_END +#include "sql_lex.h" +#include "sql_parse.h" // add_to_list #include "item_create.h" #include <m_ctype.h> #include <hash.h> diff --git a/sql/sql_lex.h b/sql/sql_lex.h index 0b27f73e763..cb8a96ad2ed 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -20,6 +20,11 @@ #ifndef SQL_LEX_INCLUDED #define SQL_LEX_INCLUDED +#include "violite.h" /* SSL_type */ +#include "sql_trigger.h" +#include "item.h" /* From item_subselect.h: subselect_union_engine */ +#include "thr_lock.h" /* thr_lock_type, TL_UNLOCK */ + /* YACC and LEX Definitions */ /* These may not be declared yet */ @@ -35,6 +40,12 @@ class partition_info; class Event_parse_data; class set_var_base; class sys_var; +class Item_func_match; +class Alter_drop; +class Alter_column; +class Key; +class File_parser; +class Key_part_spec; /** used by the parser to store internal variable name @@ -55,6 +66,7 @@ struct sys_var_with_base #else #include "lex_symbol.h" #if MYSQL_LEX +#include "item_func.h" /* Cast_target used in sql_yacc.h */ #include "sql_yacc.h" #define LEX_YYSTYPE YYSTYPE * #else @@ -192,6 +204,12 @@ enum enum_drop_mode DROP_RESTRICT // RESTRICT option }; +/* Options to add_table_to_list() */ +#define TL_OPTION_UPDATING 1 +#define TL_OPTION_FORCE_INDEX 2 +#define TL_OPTION_IGNORE_LEAVES 4 +#define TL_OPTION_ALIAS 8 + typedef List<Item> List_item; /* SERVERS CACHE CHANGES */ @@ -2287,6 +2305,7 @@ extern bool is_lex_native_function(const LEX_STRING *name); */ void my_missing_function_error(const LEX_STRING &token, const char *name); +bool is_keyword(const char *name, uint len); #endif /* MYSQL_SERVER */ #endif /* SQL_LEX_INCLUDED */ diff --git a/sql/sql_list.cc b/sql/sql_list.cc index a256212471d..31f0ba28b85 100644 --- a/sql/sql_list.cc +++ b/sql/sql_list.cc @@ -18,6 +18,7 @@ #pragma implementation // gcc: Class implementation #endif +#include "unireg.h" #include "sql_list.h" list_node end_of_list; diff --git a/sql/sql_list.h b/sql/sql_list.h index fdc80b116a7..60d9697a606 100644 --- a/sql/sql_list.h +++ b/sql/sql_list.h @@ -26,6 +26,11 @@ void *sql_alloc(size_t); +#include "my_sys.h" /* alloc_root, TRASH, MY_WME, + MY_FAE, MY_ALLOW_ZERO_PTR */ +#include "m_string.h" /* bfill */ +#include "thr_malloc.h" /* sql_alloc */ + /* mysql standard class memory allocator */ class Sql_alloc @@ -61,6 +66,57 @@ public: }; +/** + Struct to handle simple linked lists. + + @todo What is the relation between this class and list_node, below? + /Matz + + @see list_node, base_list, List + +*/ +typedef struct st_sql_list { + uint elements; + uchar *first; + uchar **next; + + st_sql_list() {} /* Remove gcc warning */ + inline void empty() + { + elements=0; + first=0; + next= &first; + } + inline void link_in_list(uchar *element,uchar **next_ptr) + { + elements++; + (*next)=element; + next= next_ptr; + *next=0; + } + inline void save_and_clear(struct st_sql_list *save) + { + *save= *this; + empty(); + } + inline void push_front(struct st_sql_list *save) + { + *save->next= first; /* link current list last */ + first= save->first; + elements+= save->elements; + } + inline void push_back(struct st_sql_list *save) + { + if (save->first) + { + *next= save->first; + next= save->next; + elements+= save->elements; + } + } +} SQL_LIST; + + /* Basic single linked list Used for item and item_buffs. @@ -637,4 +693,7 @@ list_copy_and_replace_each_value(List<T> &list, MEM_ROOT *mem_root) it.replace(el->clone(mem_root)); } +void free_list(I_List <i_string_pair> *list); +void free_list(I_List <i_string> *list); + #endif // INCLUDES_MYSQL_SQL_LIST_H diff --git a/sql/sql_load.cc b/sql/sql_load.cc index 3f49543c69d..87a347b9f98 100644 --- a/sql/sql_load.cc +++ b/sql/sql_load.cc @@ -17,8 +17,21 @@ /* Copy data from a textfile to table */ /* 2006-12 Erik Wetterberg : LOAD XML added */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "sql_load.h" +#include "sql_load.h" +#include "sql_cache.h" // query_cache_* +#include "sql_base.h" // fill_record_n_invoke_before_triggers #include <my_dir.h> +#include "sql_view.h" // check_key_in_view +#include "sql_insert.h" // check_that_all_fields_are_given_values, + // prepare_triggers_for_insert_stmt, + // write_record +#include "sql_acl.h" // INSERT_ACL, UPDATE_ACL +#include "log_event.h" // Delete_file_log_event, + // Execute_load_query_log_event, + // LOG_EVENT_UPDATE_TABLE_MAP_VERSION_F #include <m_ctype.h> #include "rpl_mi.h" #include "sql_repl.h" diff --git a/sql/sql_load.h b/sql/sql_load.h new file mode 100644 index 00000000000..344b869854a --- /dev/null +++ b/sql/sql_load.h @@ -0,0 +1,34 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef SQL_LOAD_INCLUDED +#define SQL_LOAD_INCLUDED + +#include "sql_list.h" /* List */ + +class Item; + +#include "sql_class.h" /* enum_duplicates */ + +class sql_exchange; + +int mysql_load(THD *thd, sql_exchange *ex, TABLE_LIST *table_list, + List<Item> &fields_vars, List<Item> &set_fields, + List<Item> &set_values_list, + enum enum_duplicates handle_duplicates, bool ignore, + bool local_file); + + +#endif /* SQL_LOAD_INCLUDED */ diff --git a/sql/sql_locale.cc b/sql/sql_locale.cc index 9b1bb67ca06..abd9c395083 100644 --- a/sql/sql_locale.cc +++ b/sql/sql_locale.cc @@ -20,7 +20,11 @@ !! This file is built from my_locale.pl !! */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "sql_locale.h" +#include "sql_class.h" // THD +#include "my_sys.h" // MY_*, NullS, NULL enum err_msgs_index diff --git a/sql/sql_locale.h b/sql/sql_locale.h new file mode 100644 index 00000000000..e62660aaa47 --- /dev/null +++ b/sql/sql_locale.h @@ -0,0 +1,78 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef SQL_LOCALE_INCLUDED +#define SQL_LOCALE_INCLUDED + +typedef struct my_locale_errmsgs +{ + const char *language; + const char **errmsgs; +} MY_LOCALE_ERRMSGS; + +#include "my_global.h" /* uint */ + +typedef struct st_typelib TYPELIB; + +class MY_LOCALE +{ +public: + uint number; + const char *name; + const char *description; + const bool is_ascii; + TYPELIB *month_names; + TYPELIB *ab_month_names; + TYPELIB *day_names; + TYPELIB *ab_day_names; + uint max_month_name_length; + uint max_day_name_length; + uint decimal_point; + uint thousand_sep; + const char *grouping; + MY_LOCALE_ERRMSGS *errmsgs; + MY_LOCALE(uint number_par, + const char *name_par, const char *descr_par, bool is_ascii_par, + TYPELIB *month_names_par, TYPELIB *ab_month_names_par, + TYPELIB *day_names_par, TYPELIB *ab_day_names_par, + uint max_month_name_length_par, uint max_day_name_length_par, + uint decimal_point_par, uint thousand_sep_par, + const char *grouping_par, MY_LOCALE_ERRMSGS *errmsgs_par) : + number(number_par), + name(name_par), description(descr_par), is_ascii(is_ascii_par), + month_names(month_names_par), ab_month_names(ab_month_names_par), + day_names(day_names_par), ab_day_names(ab_day_names_par), + max_month_name_length(max_month_name_length_par), + max_day_name_length(max_day_name_length_par), + decimal_point(decimal_point_par), + thousand_sep(thousand_sep_par), + grouping(grouping_par), + errmsgs(errmsgs_par) + {} +}; +/* Exported variables */ + +extern MY_LOCALE my_locale_en_US; +extern MY_LOCALE *my_locales[]; +extern MY_LOCALE *my_default_lc_messages; +extern MY_LOCALE *my_default_lc_time_names; + +/* Exported functions */ + +MY_LOCALE *my_locale_by_name(const char *name); +MY_LOCALE *my_locale_by_number(uint number); +void cleanup_errmsgs(void); + +#endif /* SQL_LOCALE_INCLUDED */ diff --git a/sql/sql_manager.cc b/sql/sql_manager.cc index 4f3e4e1c6d1..e9c9402a89a 100644 --- a/sql/sql_manager.cc +++ b/sql/sql_manager.cc @@ -21,8 +21,10 @@ * o Berkeley DB: removing unneeded log files. */ -#include "mysql_priv.h" - +#include "sql_priv.h" +#include "sql_manager.h" +#include "unireg.h" // REQUIRED: for other includes +#include "sql_base.h" // flush_tables static bool volatile manager_thread_in_use; static bool abort_manager; diff --git a/sql/sql_manager.h b/sql/sql_manager.h new file mode 100644 index 00000000000..a0ef8080aa7 --- /dev/null +++ b/sql/sql_manager.h @@ -0,0 +1,23 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef SQL_MANAGER_INCLUDED +#define SQL_MANAGER_INCLUDED + +void start_handle_manager(); +void stop_handle_manager(); +bool mysql_manager_submit(void (*action)()); + +#endif /* SQL_MANAGER_INCLUDED */ diff --git a/sql/sql_map.cc b/sql/sql_map.cc index e4e85c51d17..35a248e5465 100644 --- a/sql/sql_map.cc +++ b/sql/sql_map.cc @@ -18,7 +18,11 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" // REQUIRED: for other includes +#include "sql_map.h" // mapped_files +#include "sql_class.h" // THD + #include <sys/stat.h> #ifdef HAVE_SYS_MMAN_H #include <sys/mman.h> diff --git a/sql/sql_map.h b/sql/sql_map.h index 5ae260841e0..be1c145df3f 100644 --- a/sql/sql_map.h +++ b/sql/sql_map.h @@ -23,6 +23,9 @@ #pragma interface /* gcc class implementation */ #endif +#include "my_base.h" /* ha_rows */ +#include "sql_list.h" /* ilink */ + class mapped_files; mapped_files *map_file(const char * name,uchar *magic,uint magic_length); void unmap_file(mapped_files *map); diff --git a/sql/sql_olap.cc b/sql/sql_olap.cc index dccfcbaf8ac..cdfa5e3f496 100644 --- a/sql/sql_olap.cc +++ b/sql/sql_olap.cc @@ -31,7 +31,8 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" #include "sql_select.h" diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 23e0d8c0d70..3dc372f7304 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -14,7 +14,67 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #define MYSQL_LEX 1 -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" // REQUIRED: for other includes +#include "sql_parse.h" // sql_kill, *_precheck, *_prepare +#include "lock.h" // wait_if_global_read_lock, + // unlock_global_read_lock, + // try_transactional_lock, + // check_transactional_lock, + // set_handler_table_locks, + // start_waiting_global_read_lock, + // lock_global_read_lock, + // make_global_read_lock_block_commit +#include "sql_base.h" // find_temporary_tablesx +#include "sql_cache.h" // QUERY_CACHE_FLAGS_SIZE, query_cache_* +#include "sql_show.h" // mysqld_list_*, mysqld_show_*, + // calc_sum_of_all_status +#include "mysqld.h" +#include "sql_locale.h" // my_locale_en_US +#include "log.h" // flush_error_log +#include "sql_view.h" // mysql_create_view, mysql_drop_view +#include "sql_delete.h" // mysql_truncate, mysql_delete +#include "sql_insert.h" // mysql_insert +#include "sql_update.h" // mysql_update, mysql_multi_update +#include "sql_partition.h" // struct partition_info +#include "sql_db.h" // mysql_change_db, mysql_create_db, + // mysql_rm_db, mysql_upgrade_db, + // mysql_alter_db, + // check_db_dir_existence, + // my_dbopt_cleanup +#include "sql_table.h" // mysql_create_like_table, + // mysql_create_table, + // mysql_alter_table, + // mysql_recreate_table, + // mysql_backup_table, + // mysql_restore_table +#include "sql_connect.h" // check_user, + // decrease_user_connections, + // thd_init_client_charset, check_mqh, + // reset_mqh +#include "sql_rename.h" // mysql_rename_table +#include "sql_tablespace.h" // mysql_alter_tablespace +#include "hostname.h" // hostname_cache_refresh +#include "sql_acl.h" // *_ACL, check_grant, is_acl_user, + // has_any_table_level_privileges, + // mysql_drop_user, mysql_rename_user, + // check_grant_routine, + // mysql_routine_grant, + // mysql_show_grants, + // sp_grant_privileges, ... +#include "sql_test.h" // mysql_print_status +#include "sql_select.h" // handle_select, mysql_select, + // mysql_explain_union +#include "sql_load.h" // mysql_load +#include "sql_servers.h" // create_servers, alter_servers, + // drop_servers, servers_reload +#include "sql_handler.h" // mysql_ha_open, mysql_ha_close, + // mysql_ha_read +#include "sql_binlog.h" // mysql_client_binlog_statement +#include "sql_do.h" // mysql_do +#include "sql_help.h" // mysqld_help +#include "rpl_constants.h" // Incident, INCIDENT_LOST_EVENTS +#include "log_event.h" #include "sql_repl.h" #include "rpl_filter.h" #include "repl_failsafe.h" diff --git a/sql/sql_parse.h b/sql/sql_parse.h new file mode 100644 index 00000000000..9ef6d1b4c2f --- /dev/null +++ b/sql/sql_parse.h @@ -0,0 +1,210 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef SQL_PARSE_INCLUDED +#define SQL_PARSE_INCLUDED + +#include "sql_acl.h" /* GLOBAL_ACLS */ + +class Comp_creator; +class Item; +class Object_creation_ctx; +class Parser_state; +class TABLE_LIST; +class THD; +class Table_ident; +struct LEX; + +enum enum_mysql_completiontype { + ROLLBACK_RELEASE=-2, ROLLBACK=1, ROLLBACK_AND_CHAIN=7, + COMMIT_RELEASE=-1, COMMIT=0, COMMIT_AND_CHAIN=6 +}; + +extern "C" int test_if_data_home_dir(const char *dir); + +bool multi_update_precheck(THD *thd, TABLE_LIST *tables); +bool multi_delete_precheck(THD *thd, TABLE_LIST *tables); +int mysql_multi_update_prepare(THD *thd); +int mysql_multi_delete_prepare(THD *thd); +bool mysql_insert_select_prepare(THD *thd); +bool update_precheck(THD *thd, TABLE_LIST *tables); +bool delete_precheck(THD *thd, TABLE_LIST *tables); +bool insert_precheck(THD *thd, TABLE_LIST *tables); +bool create_table_precheck(THD *thd, TABLE_LIST *tables, + TABLE_LIST *create_table); + +bool parse_sql(THD *thd, + Parser_state *parser_state, + Object_creation_ctx *creation_ctx); + +uint kill_one_thread(THD *thd, ulong id, bool only_kill_query); +void sql_kill(THD *thd, ulong id, bool only_kill_query); + +void free_items(Item *item); +void cleanup_items(Item *item); + +Comp_creator *comp_eq_creator(bool invert); +Comp_creator *comp_ge_creator(bool invert); +Comp_creator *comp_gt_creator(bool invert); +Comp_creator *comp_le_creator(bool invert); +Comp_creator *comp_lt_creator(bool invert); +Comp_creator *comp_ne_creator(bool invert); + +int prepare_schema_table(THD *thd, LEX *lex, Table_ident *table_ident, + enum enum_schema_tables schema_table_idx); +void get_default_definer(THD *thd, LEX_USER *definer); +LEX_USER *create_default_definer(THD *thd); +LEX_USER *create_definer(THD *thd, LEX_STRING *user_name, LEX_STRING *host_name); +LEX_USER *get_current_user(THD *thd, LEX_USER *user); +bool check_string_byte_length(LEX_STRING *str, const char *err_msg, + uint max_byte_length); +bool check_string_char_length(LEX_STRING *str, const char *err_msg, + uint max_char_length, CHARSET_INFO *cs, + bool no_error); +CHARSET_INFO* merge_charset_and_collation(CHARSET_INFO *cs, CHARSET_INFO *cl); +bool check_host_name(LEX_STRING *str); +bool check_identifier_name(LEX_STRING *str, uint max_char_length, + uint err_code, const char *param_for_err_msg); +bool mysql_test_parse_for_slave(THD *thd,char *inBuf,uint length); +bool is_update_query(enum enum_sql_command command); +bool is_log_table_write_query(enum enum_sql_command command); +bool alloc_query(THD *thd, const char *packet, uint packet_length); +void mysql_init_select(LEX *lex); +void mysql_parse(THD *thd, const char *inBuf, uint length, + const char ** semicolon); +void mysql_reset_thd_for_next_command(THD *thd); +bool mysql_new_select(LEX *lex, bool move_down); +void create_select_for_variable(const char *var_name); +void create_table_set_open_action_and_adjust_tables(LEX *lex); +void mysql_init_multi_delete(LEX *lex); +bool multi_delete_set_locks_and_link_aux_tables(LEX *lex); +void create_table_set_open_action_and_adjust_tables(LEX *lex); +pthread_handler_t handle_bootstrap(void *arg); +bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables, + bool *write_to_binlog); +int mysql_execute_command(THD *thd); +bool do_command(THD *thd); +void do_handle_bootstrap(THD *thd); +bool dispatch_command(enum enum_server_command command, THD *thd, + char* packet, uint packet_length); +void log_slow_statement(THD *thd); +bool append_file_to_dir(THD *thd, const char **filename_ptr, + const char *table_name); +bool append_file_to_dir(THD *thd, const char **filename_ptr, + const char *table_name); +void execute_init_command(THD *thd, LEX_STRING *init_command, + mysql_rwlock_t *var_lock); +bool add_field_to_list(THD *thd, LEX_STRING *field_name, enum enum_field_types type, + char *length, char *decimal, + uint type_modifier, + Item *default_value, Item *on_update_value, + LEX_STRING *comment, + char *change, List<String> *interval_list, + CHARSET_INFO *cs, + uint uint_geom_type); +bool add_to_list(THD *thd, SQL_LIST &list,Item *group,bool asc); +void add_join_on(TABLE_LIST *b,Item *expr); +void add_join_natural(TABLE_LIST *a,TABLE_LIST *b,List<String> *using_fields, + SELECT_LEX *lex); +bool add_proc_to_list(THD *thd, Item *item); +bool push_new_name_resolution_context(THD *thd, + TABLE_LIST *left_op, + TABLE_LIST *right_op); +void store_position_for_column(const char *name); +void init_update_queries(void); +bool check_simple_select(); +Item *negate_expression(THD *thd, Item *expr); +bool check_stack_overrun(THD *thd, long margin, uchar *dummy); + +bool begin_trans(THD *thd); +bool end_active_trans(THD *thd); +int end_trans(THD *thd, enum enum_mysql_completiontype completion); + + +/* Variables */ + +extern const char* any_db; +extern uint sql_command_flags[]; +extern uint server_command_flags[]; +extern const LEX_STRING command_name[]; +extern uint server_command_flags[]; + +/* Inline functions */ +inline bool check_identifier_name(LEX_STRING *str, uint err_code) +{ + return check_identifier_name(str, NAME_CHAR_LEN, err_code, ""); +} + +inline bool check_identifier_name(LEX_STRING *str) +{ + return check_identifier_name(str, NAME_CHAR_LEN, 0, ""); +} + +#ifndef NO_EMBEDDED_ACCESS_CHECKS +bool check_one_table_access(THD *thd, ulong privilege, TABLE_LIST *tables); +bool check_single_table_access(THD *thd, ulong privilege, + TABLE_LIST *tables, bool no_errors); +bool check_routine_access(THD *thd,ulong want_access,char *db,char *name, + bool is_proc, bool no_errors); +bool check_some_access(THD *thd, ulong want_access, TABLE_LIST *table); +bool check_some_routine_access(THD *thd, const char *db, const char *name, bool is_proc); +bool check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv, + GRANT_INTERNAL_INFO *grant_internal_info, + bool dont_check_global_grants, bool no_errors); +bool check_table_access(THD *thd, ulong requirements,TABLE_LIST *tables, + bool any_combination_of_privileges_will_do, + uint number, + bool no_errors); +#else +inline bool check_one_table_access(THD *thd, ulong privilege, TABLE_LIST *tables) +{ return false; } +inline bool check_single_table_access(THD *thd, ulong privilege, + TABLE_LIST *tables, bool no_errors) +{ return false; } +inline bool check_routine_access(THD *thd,ulong want_access,char *db, + char *name, bool is_proc, bool no_errors) +{ return false; } +inline bool check_some_access(THD *thd, ulong want_access, TABLE_LIST *table) +{ return false; } +inline bool check_merge_table_access(THD *thd, char *db, TABLE_LIST *table_list) +{ return false; } +inline bool check_some_routine_access(THD *thd, const char *db, + const char *name, bool is_proc) +{ return false; } +inline bool check_access(THD *thd, ulong access, const char *db, + ulong *save_priv, bool no_grant, bool no_errors, + bool schema_db) +{ + if (save_priv) + *save_priv= GLOBAL_ACLS; + return false; +} +inline bool +check_table_access(THD *thd, ulong requirements,TABLE_LIST *tables, + bool any_combination_of_privileges_will_do, + uint number, + bool no_errors) +{ return false; } +#endif /*NO_EMBEDDED_ACCESS_CHECKS*/ + +#ifdef EMBEDDED_LIBRARY +#define check_stack_overrun(A, B, C) 0 +#endif /* EMBEDDED_LIBRARY */ + +/* These were under the INNODB_COMPATIBILITY_HOOKS */ + +bool check_global_access(THD *thd, ulong want_access); + +#endif /* SQL_PARSE_INCLUDED */ diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index 490ef4e9e27..0eb92dc23a9 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -46,12 +46,26 @@ /* Some general useful functions */ #define MYSQL_LEX 1 -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" // REQUIRED: for other includes +#include "sql_partition.h" +#include "key.h" // key_restore +#include "sql_parse.h" // parse_sql +#include "sql_cache.h" // query_cache_invalidate3 +#include "lock.h" // mysql_lock_remove +#include "sql_show.h" // append_identifier #include <errno.h> #include <m_ctype.h> #include "my_md5.h" #include "transaction.h" +#include "sql_base.h" // close_thread_tables +#include "sql_table.h" // build_table_filename, + // build_table_shadow_filename, + // table_to_filename +#include "opt_range.h" // store_key_image_to_rec +#include "sql_analyse.h" // append_escaped + #ifdef WITH_PARTITION_STORAGE_ENGINE #include "ha_partition.h" diff --git a/sql/sql_partition.h b/sql/sql_partition.h index 7ac1415c158..8542074e718 100644 --- a/sql/sql_partition.h +++ b/sql/sql_partition.h @@ -20,12 +20,51 @@ #pragma interface /* gcc class implementation */ #endif +#include "sql_list.h" /* List */ +#include "table.h" /* TABLE_LIST */ + +class Alter_info; +class Field; +class String; +class handler; +class partition_info; +struct TABLE; +struct TABLE_LIST; +typedef struct st_bitmap MY_BITMAP; +typedef struct st_ha_create_information HA_CREATE_INFO; +typedef struct st_key KEY; +typedef struct st_key_range key_range; + /* Flags for partition handlers */ #define HA_CAN_PARTITION (1 << 0) /* Partition support */ #define HA_CAN_UPDATE_PARTITION_KEY (1 << 1) #define HA_CAN_PARTITION_UNIQUE (1 << 2) #define HA_USE_AUTO_PARTITION (1 << 3) +#define NORMAL_PART_NAME 0 +#define TEMP_PART_NAME 1 +#define RENAMED_PART_NAME 2 + +typedef struct st_lock_param_type +{ + TABLE_LIST *table_list; + ulonglong copied; + ulonglong deleted; + THD *thd; + HA_CREATE_INFO *create_info; + Alter_info *alter_info; + TABLE *table; + KEY *key_info_buffer; + const char *db; + const char *table_name; + uchar *pack_frm_data; + uint key_count; + uint db_options; + size_t pack_frm_len; + partition_info *part_info; +} ALTER_PARTITION_PARAM_TYPE; + + /*typedef struct { ulonglong data_file_length; ulonglong max_data_file_length; @@ -101,6 +140,7 @@ uint32 get_partition_id_range_for_endpoint(partition_info *part_info, bool check_part_func_fields(Field **ptr, bool ok_with_charsets); bool field_is_partition_charset(Field *field); Item* convert_charset_partition_constant(Item *item, CHARSET_INFO *cs); +void mem_alloc_error(size_t size); /* A "Get next" function for partition iterator. @@ -220,4 +260,39 @@ typedef int (*get_partitions_in_range_iter)(partition_info *part_info, #include "partition_info.h" +#ifdef WITH_PARTITION_STORAGE_ENGINE +uint fast_alter_partition_table(THD *thd, TABLE *table, + Alter_info *alter_info, + HA_CREATE_INFO *create_info, + TABLE_LIST *table_list, + char *db, + const char *table_name, + uint fast_alter_partition); +uint set_part_state(Alter_info *alter_info, partition_info *tab_part_info, + enum partition_state part_state); +uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info, + HA_CREATE_INFO *create_info, + handlerton *old_db_type, + bool *partition_changed, + uint *fast_alter_partition); +char *generate_partition_syntax(partition_info *part_info, + uint *buf_length, bool use_sql_alloc, + bool show_partition_options, + HA_CREATE_INFO *create_info, + Alter_info *alter_info); +#endif + +void create_partition_name(char *out, const char *in1, + const char *in2, uint name_variant, + bool translate); +void create_subpartition_name(char *out, const char *in1, + const char *in2, const char *in3, + uint name_variant); + +void set_field_ptr(Field **ptr, const uchar *new_buf, const uchar *old_buf); +void set_key_field_ptr(KEY *key_info, const uchar *new_buf, + const uchar *old_buf); + +extern const LEX_STRING partition_keywords[]; + #endif /* SQL_PARTITION_INCLUDED */ diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index 3ff5e91ccb6..31e0cced207 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -13,10 +13,24 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include "sql_priv.h" // SHOW_MY_BOOL +#include "unireg.h" +#include "my_global.h" // REQUIRED by m_string.h +#include "sql_class.h" // set_var.h: THD #include "sys_vars_shared.h" +#include "sql_locale.h" +#include "sql_plugin.h" +#include "sql_parse.h" // check_table_access +#include "sql_base.h" // close_thread_tables +#include "key.h" // key_copy +#include "sql_show.h" // remove_status_vars, add_status_vars +#include "strfunc.h" // find_set +#include "sql_acl.h" // *_ACL +#include "records.h" // init_read_record, end_read_record #include <my_pthread.h> #include <my_getopt.h> #include <mysql/plugin_audit.h> +#include "lock.h" // MYSQL_LOCK_IGNORE_TIMEOUT #define REPORT_TO_LOG 1 #define REPORT_TO_USER 2 diff --git a/sql/sql_plugin.h b/sql/sql_plugin.h index 1a870ec260e..e7ecca029b9 100644 --- a/sql/sql_plugin.h +++ b/sql/sql_plugin.h @@ -16,6 +16,22 @@ #ifndef _sql_plugin_h #define _sql_plugin_h +/* + the following #define adds server-only members to enum_mysql_show_type, + that is defined in plugin.h +*/ +#define SHOW_always_last SHOW_KEY_CACHE_LONG, \ + SHOW_KEY_CACHE_LONGLONG, SHOW_LONG_STATUS, SHOW_DOUBLE_STATUS, \ + SHOW_HAVE, SHOW_MY_BOOL, SHOW_HA_ROWS, SHOW_SYS, \ + SHOW_LONG_NOFLUSH, SHOW_LONGLONG_STATUS, SHOW_LEX_STRING +#include <mysql/plugin.h> +#undef SHOW_always_last + +#include "m_string.h" /* LEX_STRING */ +#include "my_alloc.h" /* MEM_ROOT */ + +#include "my_sys.h" /* CALLER_INFO_PROTO */ + class sys_var; enum SHOW_COMP_OPTION { SHOW_OPTION_YES, SHOW_OPTION_NO, SHOW_OPTION_DISABLED}; diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 94a35db3a2d..89d450d9061 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -83,10 +83,23 @@ When one supplies long data for a placeholder: at statement execute. */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "sql_class.h" // set_var.h: THD #include "set_var.h" #include "sql_prepare.h" +#include "sql_parse.h" // insert_precheck, update_precheck, delete_precheck +#include "sql_base.h" // close_thread_tables +#include "sql_cache.h" // query_cache_* +#include "sql_view.h" // create_view_precheck +#include "sql_delete.h" // mysql_prepare_delete #include "sql_select.h" // for JOIN +#include "sql_insert.h" // upgrade_lock_type_for_insert, mysql_prepare_insert +#include "sql_update.h" // mysql_prepare_update +#include "sql_db.h" // mysql_opt_change_db, mysql_change_db +#include "sql_acl.h" // *_ACL +#include "sql_derived.h" // mysql_derived_prepare, + // mysql_handle_derived #include "sql_cursor.h" #include "sp_head.h" #include "sp.h" @@ -98,6 +111,7 @@ When one supplies long data for a placeholder: #else #include <mysql_com.h> #endif +#include "lock.h" // MYSQL_OPEN_FORCE_SHARED_MDL /** A result class used to send cursor rows using the binary protocol. diff --git a/sql/sql_priv.h b/sql/sql_priv.h new file mode 100644 index 00000000000..cc67fa9c010 --- /dev/null +++ b/sql/sql_priv.h @@ -0,0 +1,265 @@ +/* Copyright 2000-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/** + @file + + @details + Mostly this file is used in the server. But a little part of it is used in + mysqlbinlog too (definition of SELECT_DISTINCT and others). + The consequence is that 90% of the file is wrapped in \#ifndef MYSQL_CLIENT, + except the part which must be in the server and in the client. +*/ + +#ifndef MYSQL_PRIV_H +#define MYSQL_PRIV_H + +#ifndef MYSQL_CLIENT + +/* + Generates a warning that a feature is deprecated. After a specified + version asserts that the feature is removed. + + Using it as + + WARN_DEPRECATED(thd, 6,2, "BAD", "'GOOD'"); + + Will result in a warning + + "The syntax 'BAD' is deprecated and will be removed in MySQL 6.2. Please + use 'GOOD' instead" + + Note that in macro arguments BAD is not quoted, while 'GOOD' is. + Note that the version is TWO numbers, separated with a comma + (two macro arguments, that is) +*/ +#define WARN_DEPRECATED(Thd,VerHi,VerLo,Old,New) \ + do { \ + compile_time_assert(MYSQL_VERSION_ID < VerHi * 10000 + VerLo * 100); \ + if (((THD *) Thd) != NULL) \ + push_warning_printf(((THD *) Thd), MYSQL_ERROR::WARN_LEVEL_WARN, \ + ER_WARN_DEPRECATED_SYNTAX, \ + ER(ER_WARN_DEPRECATED_SYNTAX), \ + (Old), (New)); \ + else \ + sql_print_warning("The syntax '%s' is deprecated and will be removed " \ + "in a future release. Please use %s instead.", \ + (Old), (New)); \ + } while(0) + +extern char err_shared_dir[]; + +/*************************************************************************/ + +#endif + +/* + This is included in the server and in the client. + Options for select set by the yacc parser (stored in lex->options). + + NOTE + log_event.h defines OPTIONS_WRITTEN_TO_BIN_LOG to specify what THD + options list are written into binlog. These options can NOT change their + values, or it will break replication between version. + + context is encoded as following: + SELECT - SELECT_LEX_NODE::options + THD - THD::options + intern - neither. used only as + func(..., select_node->options | thd->options | OPTION_XXX, ...) + + TODO: separate three contexts above, move them to separate bitfields. +*/ + +#define SELECT_DISTINCT (1ULL << 0) // SELECT, user +#define SELECT_STRAIGHT_JOIN (1ULL << 1) // SELECT, user +#define SELECT_DESCRIBE (1ULL << 2) // SELECT, user +#define SELECT_SMALL_RESULT (1ULL << 3) // SELECT, user +#define SELECT_BIG_RESULT (1ULL << 4) // SELECT, user +#define OPTION_FOUND_ROWS (1ULL << 5) // SELECT, user +#define OPTION_TO_QUERY_CACHE (1ULL << 6) // SELECT, user +#define SELECT_NO_JOIN_CACHE (1ULL << 7) // intern +/** always the opposite of OPTION_NOT_AUTOCOMMIT except when in fix_autocommit() */ +#define OPTION_AUTOCOMMIT (1ULL << 8) // THD, user +#define OPTION_BIG_SELECTS (1ULL << 9) // THD, user +#define OPTION_LOG_OFF (1ULL << 10) // THD, user +#define OPTION_QUOTE_SHOW_CREATE (1ULL << 11) // THD, user, unused +#define TMP_TABLE_ALL_COLUMNS (1ULL << 12) // SELECT, intern +#define OPTION_WARNINGS (1ULL << 13) // THD, user +#define OPTION_AUTO_IS_NULL (1ULL << 14) // THD, user, binlog +#define OPTION_FOUND_COMMENT (1ULL << 15) // SELECT, intern, parser +#define OPTION_SAFE_UPDATES (1ULL << 16) // THD, user +#define OPTION_BUFFER_RESULT (1ULL << 17) // SELECT, user +#define OPTION_BIN_LOG (1ULL << 18) // THD, user +#define OPTION_NOT_AUTOCOMMIT (1ULL << 19) // THD, user +#define OPTION_BEGIN (1ULL << 20) // THD, intern +#define OPTION_TABLE_LOCK (1ULL << 21) // THD, intern +#define OPTION_QUICK (1ULL << 22) // SELECT (for DELETE) +#define OPTION_KEEP_LOG (1ULL << 23) // THD, user + +/* The following is used to detect a conflict with DISTINCT */ +#define SELECT_ALL (1ULL << 24) // SELECT, user, parser +/** The following can be set when importing tables in a 'wrong order' + to suppress foreign key checks */ +#define OPTION_NO_FOREIGN_KEY_CHECKS (1ULL << 26) // THD, user, binlog +/** The following speeds up inserts to InnoDB tables by suppressing unique + key checks in some cases */ +#define OPTION_RELAXED_UNIQUE_CHECKS (1ULL << 27) // THD, user, binlog +#define SELECT_NO_UNLOCK (1ULL << 28) // SELECT, intern +#define OPTION_SCHEMA_TABLE (1ULL << 29) // SELECT, intern +/** Flag set if setup_tables already done */ +#define OPTION_SETUP_TABLES_DONE (1ULL << 30) // intern +/** If not set then the thread will ignore all warnings with level notes. */ +#define OPTION_SQL_NOTES (1ULL << 31) // THD, user +/** + Force the used temporary table to be a MyISAM table (because we will use + fulltext functions when reading from it. +*/ +#define TMP_TABLE_FORCE_MYISAM (1ULL << 32) +#define OPTION_PROFILING (1ULL << 33) + + +/* The rest of the file is included in the server only */ +#ifndef MYSQL_CLIENT + +/* @@optimizer_switch flags. These must be in sync with optimizer_switch_typelib */ +#define OPTIMIZER_SWITCH_INDEX_MERGE (1ULL << 0) +#define OPTIMIZER_SWITCH_INDEX_MERGE_UNION (1ULL << 1) +#define OPTIMIZER_SWITCH_INDEX_MERGE_SORT_UNION (1ULL << 2) +#define OPTIMIZER_SWITCH_INDEX_MERGE_INTERSECT (1ULL << 3) +#define OPTIMIZER_SWITCH_ENGINE_CONDITION_PUSHDOWN (1ULL << 4) +#define OPTIMIZER_SWITCH_LAST (1ULL << 5) + +/* The following must be kept in sync with optimizer_switch_str in mysqld.cc */ +#define OPTIMIZER_SWITCH_DEFAULT (OPTIMIZER_SWITCH_INDEX_MERGE | \ + OPTIMIZER_SWITCH_INDEX_MERGE_UNION | \ + OPTIMIZER_SWITCH_INDEX_MERGE_SORT_UNION | \ + OPTIMIZER_SWITCH_INDEX_MERGE_INTERSECT | \ + OPTIMIZER_SWITCH_ENGINE_CONDITION_PUSHDOWN) + + +/* + Replication uses 8 bytes to store SQL_MODE in the binary log. The day you + use strictly more than 64 bits by adding one more define above, you should + contact the replication team because the replication code should then be + updated (to store more bytes on disk). + + NOTE: When adding new SQL_MODE types, make sure to also add them to + the scripts used for creating the MySQL system tables + in scripts/mysql_system_tables.sql and scripts/mysql_system_tables_fix.sql + +*/ + +// uncachable cause +#define UNCACHEABLE_DEPENDENT 1 +#define UNCACHEABLE_RAND 2 +#define UNCACHEABLE_SIDEEFFECT 4 +/// forcing to save JOIN for explain +#define UNCACHEABLE_EXPLAIN 8 +/** Don't evaluate subqueries in prepare even if they're not correlated */ +#define UNCACHEABLE_PREPARE 16 +/* For uncorrelated SELECT in an UNION with some correlated SELECTs */ +#define UNCACHEABLE_UNITED 32 +#define UNCACHEABLE_CHECKOPTION 64 + +/* Used to check GROUP BY list in the MODE_ONLY_FULL_GROUP_BY mode */ +#define UNDEF_POS (-1) + +/* BINLOG_DUMP options */ + +#define BINLOG_DUMP_NON_BLOCK 1 + +/* sql_show.cc:show_log_files() */ +#define SHOW_LOG_STATUS_FREE "FREE" +#define SHOW_LOG_STATUS_INUSE "IN USE" + +/* + Some defines for exit codes for ::is_equal class functions. +*/ +#define IS_EQUAL_NO 0 +#define IS_EQUAL_YES 1 +#define IS_EQUAL_PACK_LENGTH 2 + +enum enum_parsing_place +{ + NO_MATTER, + IN_HAVING, + SELECT_LIST, + IN_WHERE, + IN_ON +}; + + +enum enum_var_type +{ + OPT_DEFAULT= 0, OPT_SESSION, OPT_GLOBAL +}; + +class sys_var; + +#ifdef MYSQL_SERVER + +#endif /* MYSQL_SERVER */ + +#ifdef MYSQL_SERVER +/* + A set of constants used for checking non aggregated fields and sum + functions mixture in the ONLY_FULL_GROUP_BY_MODE. +*/ +#define NON_AGG_FIELD_USED 1 +#define SUM_FUNC_USED 2 + +/* + External variables +*/ + +/* sql_yacc.cc */ +#ifndef DBUG_OFF +extern void turn_parser_debug_on(); + +#endif + +/** + convert a hex digit into number. +*/ + +inline int hexchar_to_int(char c) +{ + if (c <= '9' && c >= '0') + return c-'0'; + c|=32; + if (c <= 'f' && c >= 'a') + return c-'a'+10; + return -1; +} + +/* This must match the path length limit in the ER_NOT_RW_DIR error msg. */ +#define ER_NOT_RW_DIR_PATHSIZE 200 + +#define IS_TABLESPACES_TABLESPACE_NAME 0 +#define IS_TABLESPACES_ENGINE 1 +#define IS_TABLESPACES_TABLESPACE_TYPE 2 +#define IS_TABLESPACES_LOGFILE_GROUP_NAME 3 +#define IS_TABLESPACES_EXTENT_SIZE 4 +#define IS_TABLESPACES_AUTOEXTEND_SIZE 5 +#define IS_TABLESPACES_MAXIMUM_SIZE 6 +#define IS_TABLESPACES_NODEGROUP_ID 7 +#define IS_TABLESPACES_TABLESPACE_COMMENT 8 + +#endif /* MYSQL_SERVER */ + +#endif /* MYSQL_CLIENT */ + +#endif /* MYSQL_PRIV_H */ diff --git a/sql/sql_profile.cc b/sql/sql_profile.cc index 20c1b336f5c..4a0d3d944ad 100644 --- a/sql/sql_profile.cc +++ b/sql/sql_profile.cc @@ -29,8 +29,12 @@ */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" // REQUIRED: for other includes +#include "sql_profile.h" #include "my_sys.h" +#include "sql_show.h" // schema_table_store_record +#include "sql_class.h" // THD #define TIME_FLOAT_DIGITS 9 /** two vals encoded: (dec*100)+len */ diff --git a/sql/sql_profile.h b/sql/sql_profile.h index 33597ca337e..151dd43c58a 100644 --- a/sql/sql_profile.h +++ b/sql/sql_profile.h @@ -16,6 +16,12 @@ #ifndef _SQL_PROFILE_H #define _SQL_PROFILE_H +class Item; +class TABLE_LIST; +class THD; +typedef struct st_field_info ST_FIELD_INFO; +typedef struct st_schema_table ST_SCHEMA_TABLE; + extern ST_FIELD_INFO query_profile_statistics_info[]; int fill_query_profile_statistics_info(THD *thd, TABLE_LIST *tables, Item *cond); int make_profile_table_for_show(THD *thd, ST_SCHEMA_TABLE *schema_table); @@ -34,7 +40,8 @@ int make_profile_table_for_show(THD *thd, ST_SCHEMA_TABLE *schema_table); #if defined(ENABLED_PROFILING) -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" #ifdef HAVE_SYS_RESOURCE_H #include <sys/resource.h> diff --git a/sql/sql_rename.cc b/sql/sql_rename.cc index 009563319cd..d387010141c 100644 --- a/sql/sql_rename.cc +++ b/sql/sql_rename.cc @@ -17,9 +17,18 @@ Atomic rename of table; RENAME TABLE t1 to t2, tmp to t1 [,...] */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "sql_rename.h" +#include "sql_cache.h" // query_cache_* +#include "sql_table.h" // build_table_filename +#include "sql_view.h" // mysql_frm_type, mysql_rename_view #include "sql_trigger.h" - +#include "lock.h" // wait_if_global_read_lock, lock_table_names, + // unlock_table_names, + // start_waiting_global_read_lock +#include "sql_base.h" // tdc_remove_table +#include "sql_handler.h" // mysql_ha_rm_tables static TABLE_LIST *rename_tables(THD *thd, TABLE_LIST *table_list, bool skip_error); diff --git a/sql/sql_rename.h b/sql/sql_rename.h new file mode 100644 index 00000000000..7fbf9f1e5cd --- /dev/null +++ b/sql/sql_rename.h @@ -0,0 +1,27 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef SQL_RENAME_INCLUDED +#define SQL_RENAME_INCLUDED + +class THD; +struct TABLE_LIST; + +bool mysql_rename_tables(THD *thd, TABLE_LIST *table_list, bool silent); +bool do_rename(THD *thd, TABLE_LIST *ren_table, char *new_db, + char *new_table_name, char *new_table_alias, + bool skip_error); + +#endif /* SQL_RENAME_INCLUDED */ diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index 207f5994d5d..1ee770f70ef 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -13,11 +13,14 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "sql_parse.h" // check_access #ifdef HAVE_REPLICATION #include "rpl_mi.h" #include "sql_repl.h" +#include "sql_acl.h" // SUPER_ACL #include "log_event.h" #include "rpl_filter.h" #include <my_dir.h> diff --git a/sql/sql_repl.h b/sql/sql_repl.h index aa71ac96ff8..4d3b0b8d62c 100644 --- a/sql/sql_repl.h +++ b/sql/sql_repl.h @@ -65,6 +65,7 @@ typedef struct st_load_file_info int log_loaded_block(IO_CACHE* file); int init_replication_sys_vars(); +void mysql_binlog_send(THD* thd, char* log_ident, my_off_t pos, ushort flags); #endif /* HAVE_REPLICATION */ diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 3a62396b880..7d379ab34de 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -28,16 +28,33 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" #include "sql_select.h" +#include "sql_cache.h" // query_cache_* +#include "sql_table.h" // primary_key_name #include "sql_cursor.h" #include "probes_mysql.h" - +#include "key.h" // key_copy, key_cmp, key_cmp_if_same +#include "lock.h" // mysql_unlock_some_tables, + // mysql_unlock_read_tables +#include "sql_show.h" // append_identifier +#include "sql_base.h" // setup_wild, setup_fields, fill_record +#include "sql_parse.h" // check_stack_overrun +#include "sql_partition.h" // make_used_partitions_str +#include "sql_acl.h" // *_ACL +#include "sql_test.h" // print_where, print_keyuse_array, + // print_sjm, print_plan +#include "records.h" // init_read_record, end_read_record +#include "filesort.h" // filesort_free_buffers +#include "sql_union.h" // mysql_union #include <m_ctype.h> #include <my_bit.h> #include <hash.h> #include <ft_global.h> +#define PREV_BITS(type,A) ((type) (((type) 1 << (A)) -1)) + const char *join_type_str[]={ "UNKNOWN","system","const","eq_ref","ref", "MAYBE_REF","ALL","range","index","fulltext", "ref_or_null","unique_subquery","index_subquery", diff --git a/sql/sql_select.h b/sql/sql_select.h index 3cec00a84c8..ccf88c2cc5c 100644 --- a/sql/sql_select.h +++ b/sql/sql_select.h @@ -30,6 +30,10 @@ #include "procedure.h" #include <myisam.h> +#include "sql_array.h" /* Array */ +#include "records.h" /* READ_RECORD */ +#include "opt_range.h" /* SQL_SELECT, QUICK_SELECT_I */ + typedef struct keyuse_t { TABLE *table; @@ -798,6 +802,46 @@ bool error_if_full_join(JOIN *join); int report_error(TABLE *table, int error); int safe_index_read(JOIN_TAB *tab); COND *remove_eq_conds(THD *thd, COND *cond, Item::cond_result *cond_value); +int get_quick_record(SQL_SELECT *select); +SORT_FIELD * make_unireg_sortorder(ORDER *order, uint *length, + SORT_FIELD *sortorder); +int setup_order(THD *thd, Item **ref_pointer_array, TABLE_LIST *tables, + List<Item> &fields, List <Item> &all_fields, ORDER *order); +int setup_group(THD *thd, Item **ref_pointer_array, TABLE_LIST *tables, + List<Item> &fields, List<Item> &all_fields, ORDER *order, + bool *hidden_group_fields); +bool fix_inner_refs(THD *thd, List<Item> &all_fields, SELECT_LEX *select, + Item **ref_pointer_array, ORDER *group_list= NULL); + +bool handle_select(THD *thd, LEX *lex, select_result *result, + ulong setup_tables_done_option); +bool mysql_select(THD *thd, Item ***rref_pointer_array, + TABLE_LIST *tables, uint wild_num, List<Item> &list, + COND *conds, uint og_num, ORDER *order, ORDER *group, + Item *having, ORDER *proc_param, ulonglong select_type, + select_result *result, SELECT_LEX_UNIT *unit, + SELECT_LEX *select_lex); +void free_underlaid_joins(THD *thd, SELECT_LEX *select); +bool mysql_explain_union(THD *thd, SELECT_LEX_UNIT *unit, + select_result *result); +Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type, + Item ***copy_func, Field **from_field, + Field **def_field, + bool group, bool modify_item, + bool table_cant_handle_bit_fields, + bool make_copy_field, + uint convert_blob_length); + +/* + General routine to change field->ptr of a NULL-terminated array of Field + objects. Useful when needed to call val_int, val_str or similar and the + field data is not in table->record[0] but in some other structure. + set_key_field_ptr changes all fields of an index using a key_info object. + All methods presume that there is at least one field to change. +*/ + +TABLE *create_virtual_tmp_table(THD *thd, List<Create_field> &field_list); + inline bool optimizer_flag(THD *thd, uint flag) { diff --git a/sql/sql_servers.cc b/sql/sql_servers.cc index 0bf38639ff7..c7f9cf0b132 100644 --- a/sql/sql_servers.cc +++ b/sql/sql_servers.cc @@ -33,13 +33,18 @@ currently running transactions etc will not be disrupted. */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "sql_servers.h" +#include "unireg.h" +#include "sql_base.h" // close_thread_tables +#include "records.h" // init_read_record, end_read_record #include "hash_filo.h" #include <m_ctype.h> #include <stdarg.h> #include "sp_head.h" #include "sp.h" #include "transaction.h" +#include "lock.h" // MYSQL_LOCK_IGNORE_TIMEOUT /* We only use 1 mutex to guard the data structures - THR_LOCK_servers. diff --git a/sql/sql_servers.h b/sql/sql_servers.h index 12855f8473c..3c338bbe3f9 100644 --- a/sql/sql_servers.h +++ b/sql/sql_servers.h @@ -16,8 +16,13 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "my_global.h" /* uint */ #include "slave.h" // for tables_ok(), rpl_filter +class THD; +typedef struct st_lex_server_options LEX_SERVER_OPTIONS; +typedef struct st_mem_root MEM_ROOT; + /* structs */ typedef struct st_federated_server { diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 542a0378bf4..06c6f4d6b59 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -16,10 +16,25 @@ /* Function with list databases, tables or fields */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "sql_acl.h" // fill_schema_*_privileges #include "sql_select.h" // For select_describe +#include "sql_base.h" // close_tables_for_reopen #include "sql_show.h" +#include "sql_table.h" // filename_to_tablename, + // primary_key_name, + // build_table_filename #include "repl_failsafe.h" +#include "sql_view.h" // mysql_frm_type +#include "sql_parse.h" // check_access, check_table_access +#include "sql_partition.h" // partition_element +#include "sql_db.h" // check_db_dir_existence, load_db_opt_by_name +#include "sql_time.h" // interval_type_to_name +#include "tztime.h" // struct Time_zone +#include "sql_acl.h" // TABLE_ACLS, check_grant, DB_ACLS, acl_get, + // check_grant_db +#include "filesort.h" // filesort_free_buffers #include "sp.h" #include "sp_head.h" #include "sp_pcontext.h" @@ -33,6 +48,7 @@ #include "event_data_objects.h" #endif #include <my_dir.h> +#include "lock.h" // MYSQL_LOCK_IGNORE_FLUSH #define STR_OR_NIL(S) ((S) ? (S) : "<nil>") diff --git a/sql/sql_show.h b/sql/sql_show.h index fa067a46033..d1323ede8c1 100644 --- a/sql/sql_show.h +++ b/sql/sql_show.h @@ -16,12 +16,24 @@ #ifndef SQL_SHOW_H #define SQL_SHOW_H +#include "sql_list.h" /* List */ +#include "handler.h" /* enum_schema_tables */ +#include "table.h" /* enum_schema_table_state */ + /* Forward declarations */ +class JOIN; class String; class THD; +class sp_name; +struct TABLE_LIST; struct st_ha_create_information; +typedef class st_select_lex SELECT_LEX; typedef st_ha_create_information HA_CREATE_INFO; -struct TABLE_LIST; +struct LEX; +typedef struct st_mysql_show_var SHOW_VAR; +typedef struct st_schema_table ST_SCHEMA_TABLE; +struct TABLE; +typedef struct system_status_var STATUS_VAR; enum find_files_result { FIND_FILES_OK, @@ -29,6 +41,46 @@ enum find_files_result { FIND_FILES_DIR }; +/* Used by handlers to store things in schema tables */ +#define IS_FILES_FILE_ID 0 +#define IS_FILES_FILE_NAME 1 +#define IS_FILES_FILE_TYPE 2 +#define IS_FILES_TABLESPACE_NAME 3 +#define IS_FILES_TABLE_CATALOG 4 +#define IS_FILES_TABLE_SCHEMA 5 +#define IS_FILES_TABLE_NAME 6 +#define IS_FILES_LOGFILE_GROUP_NAME 7 +#define IS_FILES_LOGFILE_GROUP_NUMBER 8 +#define IS_FILES_ENGINE 9 +#define IS_FILES_FULLTEXT_KEYS 10 +#define IS_FILES_DELETED_ROWS 11 +#define IS_FILES_UPDATE_COUNT 12 +#define IS_FILES_FREE_EXTENTS 13 +#define IS_FILES_TOTAL_EXTENTS 14 +#define IS_FILES_EXTENT_SIZE 15 +#define IS_FILES_INITIAL_SIZE 16 +#define IS_FILES_MAXIMUM_SIZE 17 +#define IS_FILES_AUTOEXTEND_SIZE 18 +#define IS_FILES_CREATION_TIME 19 +#define IS_FILES_LAST_UPDATE_TIME 20 +#define IS_FILES_LAST_ACCESS_TIME 21 +#define IS_FILES_RECOVER_TIME 22 +#define IS_FILES_TRANSACTION_COUNTER 23 +#define IS_FILES_VERSION 24 +#define IS_FILES_ROW_FORMAT 25 +#define IS_FILES_TABLE_ROWS 26 +#define IS_FILES_AVG_ROW_LENGTH 27 +#define IS_FILES_DATA_LENGTH 28 +#define IS_FILES_MAX_DATA_LENGTH 29 +#define IS_FILES_INDEX_LENGTH 30 +#define IS_FILES_DATA_FREE 31 +#define IS_FILES_CREATE_TIME 32 +#define IS_FILES_UPDATE_TIME 33 +#define IS_FILES_CHECK_TIME 34 +#define IS_FILES_CHECKSUM 35 +#define IS_FILES_STATUS 36 +#define IS_FILES_EXTRA 37 + find_files_result find_files(THD *thd, List<LEX_STRING> *files, const char *db, const char *path, const char *wild, bool dir); @@ -38,4 +90,47 @@ int view_store_create_info(THD *thd, TABLE_LIST *table, String *buff); int copy_event_to_schema_table(THD *thd, TABLE *sch_table, TABLE *event_table); +void append_identifier(THD *thd, String *packet, const char *name, + uint length); +void mysqld_list_fields(THD *thd,TABLE_LIST *table, const char *wild); +int mysqld_dump_create_info(THD *thd, TABLE_LIST *table_list, int fd); +bool mysqld_show_create(THD *thd, TABLE_LIST *table_list); +bool mysqld_show_create_db(THD *thd, char *dbname, HA_CREATE_INFO *create); + +void mysqld_list_processes(THD *thd,const char *user,bool verbose); +int mysqld_show_status(THD *thd); +int mysqld_show_variables(THD *thd,const char *wild); +bool mysqld_show_storage_engines(THD *thd); +bool mysqld_show_authors(THD *thd); +bool mysqld_show_contributors(THD *thd); +bool mysqld_show_privileges(THD *thd); +bool mysqld_show_column_types(THD *thd); +char *make_backup_log_name(char *buff, const char *name, const char* log_ext); +void calc_sum_of_all_status(STATUS_VAR *to); +void append_definer(THD *thd, String *buffer, const LEX_STRING *definer_user, + const LEX_STRING *definer_host); +int add_status_vars(SHOW_VAR *list); +void remove_status_vars(SHOW_VAR *list); +void init_status_vars(); +void free_status_vars(); +void reset_status_vars(); +bool show_create_trigger(THD *thd, const sp_name *trg_name); +void view_store_options(THD *thd, TABLE_LIST *table, String *buff); + +void init_fill_schema_files_row(TABLE* table); +bool schema_table_store_record(THD *thd, TABLE *table); +void initialize_information_schema_acl(); + +ST_SCHEMA_TABLE *find_schema_table(THD *thd, const char* table_name); +ST_SCHEMA_TABLE *get_schema_table(enum enum_schema_tables schema_table_idx); +int make_schema_select(THD *thd, SELECT_LEX *sel, + enum enum_schema_tables schema_table_idx); +int mysql_schema_table(THD *thd, LEX *lex, TABLE_LIST *table_list); +bool get_schema_tables_result(JOIN *join, + enum enum_schema_table_state executed_place); +enum enum_schema_tables get_schema_table_idx(ST_SCHEMA_TABLE *schema_table); + +/* These functions were under INNODB_COMPATIBILITY_HOOKS */ +int get_quote_char_for_identifier(THD *thd, const char *name, uint length); + #endif /* SQL_SHOW_H */ diff --git a/sql/sql_signal.cc b/sql/sql_signal.cc index c9ab37272b8..8ae77f3645b 100644 --- a/sql/sql_signal.cc +++ b/sql/sql_signal.cc @@ -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 */ -#include "mysql_priv.h" +#include "sql_priv.h" #include "sp_head.h" #include "sp_pcontext.h" #include "sp_rcontext.h" diff --git a/sql/sql_sort.h b/sql/sql_sort.h index 102b3ef0a11..45ef14c1319 100644 --- a/sql/sql_sort.h +++ b/sql/sql_sort.h @@ -16,6 +16,18 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include "my_global.h" /* uchar */ +#include "my_base.h" /* ha_rows */ +#include "my_sys.h" /* qsort2_cmp */ + +typedef struct st_buffpek BUFFPEK; +typedef struct st_queue QUEUE; +typedef struct st_sort_field SORT_FIELD; + +class Field; +struct TABLE; + + /* Defines used by filesort and uniques */ #define MERGEBUFF 7 diff --git a/sql/sql_string.h b/sql/sql_string.h index 38f843e7e8f..f67d6de9a0f 100644 --- a/sql/sql_string.h +++ b/sql/sql_string.h @@ -22,7 +22,15 @@ #pragma interface /* gcc class implementation */ #endif +#include "m_ctype.h" /* my_charset_bin */ +#include "my_sys.h" /* alloc_root, my_free, my_realloc */ +#include "m_string.h" /* TRASH */ + class String; +typedef struct charset_info_st CHARSET_INFO; +typedef struct st_io_cache IO_CACHE; +typedef struct st_mem_root MEM_ROOT; + int sortcmp(const String *a,const String *b, CHARSET_INFO *cs); String *copy_if_not_alloced(String *a,String *b,uint32 arg_length); uint32 copy_and_convert(char *to, uint32 to_length, CHARSET_INFO *to_cs, diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 393200a81db..c3a39354ff1 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -15,14 +15,40 @@ /* drop and alter of tables */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" #include "debug_sync.h" +#include "sql_table.h" +#include "sql_rename.h" // do_rename +#include "sql_parse.h" // test_if_data_home_dir +#include "sql_cache.h" // query_cache_* +#include "sql_base.h" // open_temporary_table +#include "lock.h" // wait_if_global_read_lock, lock_table_names, + // start_waiting_global_read_lock, + // unlock_table_names, mysql_unlock_tables +#include "strfunc.h" // find_type2, find_set +#include "sql_view.h" // mysql_frm_type, view_checksum, mysql_frm_type +#include "sql_delete.h" // mysql_truncate +#include "sql_partition.h" // mem_alloc_error, + // generate_partition_syntax, + // partition_info +#include "sql_db.h" // load_db_opt_by_name, lock_db_cache, creating_database +#include "sql_time.h" // make_truncated_value_warning +#include "records.h" // init_read_record, end_read_record +#include "filesort.h" // filesort_free_buffers +#include "sql_select.h" // setup_order, + // make_unireg_sortorder +#include "sql_handler.h" // mysql_ha_rm_tables +#include "discover.h" // readfrm +#include "my_pthread.h" // pthread_mutex_t +#include "log_event.h" // Query_log_event #include <hash.h> #include <myisam.h> #include <my_dir.h> #include "sp_head.h" #include "sp.h" #include "sql_trigger.h" +#include "sql_parse.h" #include "sql_show.h" #include "transaction.h" #include "keycaches.h" diff --git a/sql/sql_table.h b/sql/sql_table.h new file mode 100644 index 00000000000..6dbfbe3c9b0 --- /dev/null +++ b/sql/sql_table.h @@ -0,0 +1,215 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef SQL_TABLE_INCLUDED +#define SQL_TABLE_INCLUDED + +#include "my_global.h" /* my_bool */ +#include "my_sys.h" // pthread_mutex_t + +class Alter_info; +class Alter_info; +class Create_field; +class TABLE_LIST; +class THD; +struct TABLE; +struct handlerton; +typedef struct st_ha_check_opt HA_CHECK_OPT; +typedef struct st_ha_create_information HA_CREATE_INFO; +typedef struct st_key_cache KEY_CACHE; +typedef struct st_lock_param_type ALTER_PARTITION_PARAM_TYPE; +typedef struct st_lock_param_type ALTER_PARTITION_PARAM_TYPE; +typedef struct st_mysql_lex_string LEX_STRING; +typedef struct st_order ORDER; + +enum ddl_log_entry_code +{ + /* + DDL_LOG_EXECUTE_CODE: + This is a code that indicates that this is a log entry to + be executed, from this entry a linked list of log entries + can be found and executed. + DDL_LOG_ENTRY_CODE: + An entry to be executed in a linked list from an execute log + entry. + DDL_IGNORE_LOG_ENTRY_CODE: + An entry that is to be ignored + */ + DDL_LOG_EXECUTE_CODE = 'e', + DDL_LOG_ENTRY_CODE = 'l', + DDL_IGNORE_LOG_ENTRY_CODE = 'i' +}; + +enum ddl_log_action_code +{ + /* + The type of action that a DDL_LOG_ENTRY_CODE entry is to + perform. + DDL_LOG_DELETE_ACTION: + Delete an entity + DDL_LOG_RENAME_ACTION: + Rename an entity + DDL_LOG_REPLACE_ACTION: + Rename an entity after removing the previous entry with the + new name, that is replace this entry. + */ + DDL_LOG_DELETE_ACTION = 'd', + DDL_LOG_RENAME_ACTION = 'r', + DDL_LOG_REPLACE_ACTION = 's' +}; + + +typedef struct st_ddl_log_entry +{ + const char *name; + const char *from_name; + const char *handler_name; + uint next_entry; + uint entry_pos; + enum ddl_log_entry_code entry_type; + enum ddl_log_action_code action_type; + /* + Most actions have only one phase. REPLACE does however have two + phases. The first phase removes the file with the new name if + there was one there before and the second phase renames the + old name to the new name. + */ + char phase; +} DDL_LOG_ENTRY; + +typedef struct st_ddl_log_memory_entry +{ + uint entry_pos; + struct st_ddl_log_memory_entry *next_log_entry; + struct st_ddl_log_memory_entry *prev_log_entry; + struct st_ddl_log_memory_entry *next_active_log_entry; +} DDL_LOG_MEMORY_ENTRY; + + +enum enum_explain_filename_mode +{ + EXPLAIN_ALL_VERBOSE= 0, + EXPLAIN_PARTITIONS_VERBOSE, + EXPLAIN_PARTITIONS_AS_COMMENT +}; + +/* depends on errmsg.txt Database `db`, Table `t` ... */ +#define EXPLAIN_FILENAME_MAX_EXTRA_LENGTH 63 + +#define MYSQL50_TABLE_NAME_PREFIX "#mysql50#" +#define MYSQL50_TABLE_NAME_PREFIX_LENGTH 9 + +#define WFRM_WRITE_SHADOW 1 +#define WFRM_INSTALL_SHADOW 2 +#define WFRM_PACK_FRM 4 +#define WFRM_KEEP_SHARE 8 + +/* Flags for conversion functions. */ +#define FN_FROM_IS_TMP (1 << 0) +#define FN_TO_IS_TMP (1 << 1) +#define FN_IS_TMP (FN_FROM_IS_TMP | FN_TO_IS_TMP) +#define NO_FRM_RENAME (1 << 2) +#define FRM_ONLY (1 << 3) + +uint filename_to_tablename(const char *from, char *to, uint to_length); +uint tablename_to_filename(const char *from, char *to, uint to_length); +uint check_n_cut_mysql50_prefix(const char *from, char *to, uint to_length); +uint build_table_filename(char *buff, size_t bufflen, const char *db, + const char *table, const char *ext, uint flags); +uint build_table_shadow_filename(char *buff, size_t bufflen, + ALTER_PARTITION_PARAM_TYPE *lpt); +bool mysql_create_table(THD *thd, TABLE_LIST *create_table, + HA_CREATE_INFO *create_info, + Alter_info *alter_info); +bool mysql_create_table_no_lock(THD *thd, const char *db, + const char *table_name, + HA_CREATE_INFO *create_info, + Alter_info *alter_info, + bool tmp_table, uint select_field_count); + +bool mysql_alter_table(THD *thd, char *new_db, char *new_name, + HA_CREATE_INFO *create_info, + TABLE_LIST *table_list, + Alter_info *alter_info, + uint order_num, ORDER *order, bool ignore); +bool mysql_recreate_table(THD *thd, TABLE_LIST *table_list); +bool mysql_create_like_table(THD *thd, TABLE_LIST *table, + TABLE_LIST *src_table, + HA_CREATE_INFO *create_info); +bool mysql_rename_table(handlerton *base, const char *old_db, + const char * old_name, const char *new_db, + const char * new_name, uint flags); + +bool mysql_backup_table(THD* thd, TABLE_LIST* table_list); +bool mysql_restore_table(THD* thd, TABLE_LIST* table_list); + +bool mysql_checksum_table(THD* thd, TABLE_LIST* table_list, + HA_CHECK_OPT* check_opt); +bool mysql_check_table(THD* thd, TABLE_LIST* table_list, + HA_CHECK_OPT* check_opt); +bool mysql_repair_table(THD* thd, TABLE_LIST* table_list, + HA_CHECK_OPT* check_opt); +bool mysql_analyze_table(THD* thd, TABLE_LIST* table_list, + HA_CHECK_OPT* check_opt); +bool mysql_optimize_table(THD* thd, TABLE_LIST* table_list, + HA_CHECK_OPT* check_opt); +bool mysql_assign_to_keycache(THD* thd, TABLE_LIST* table_list, + LEX_STRING *key_cache_name); +bool mysql_preload_keys(THD* thd, TABLE_LIST* table_list); +int reassign_keycache_tables(THD* thd, KEY_CACHE *src_cache, + KEY_CACHE *dst_cache); +bool mysql_rm_table(THD *thd,TABLE_LIST *tables, my_bool if_exists, + my_bool drop_temporary); +int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists, + bool drop_temporary, bool drop_view, bool log_query); +bool quick_rm_table(handlerton *base,const char *db, + const char *table_name, uint flags); +void close_cached_table(THD *thd, TABLE *table); +void sp_prepare_create_field(THD *thd, Create_field *sql_field); +int prepare_create_field(Create_field *sql_field, + uint *blob_columns, + int *timestamps, int *timestamps_with_niladic, + longlong table_flags); +CHARSET_INFO* get_sql_field_charset(Create_field *sql_field, + HA_CREATE_INFO *create_info); +bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags); +int write_bin_log(THD *thd, bool clear_error, + char const *query, ulong query_length, + bool is_trans= FALSE); +bool write_ddl_log_entry(DDL_LOG_ENTRY *ddl_log_entry, + DDL_LOG_MEMORY_ENTRY **active_entry); +bool write_execute_ddl_log_entry(uint first_entry, + bool complete, + DDL_LOG_MEMORY_ENTRY **active_entry); +bool deactivate_ddl_log_entry(uint entry_no); +void release_ddl_log_memory_entry(DDL_LOG_MEMORY_ENTRY *log_entry); +bool sync_ddl_log(); +void release_ddl_log(); +void execute_ddl_log_recovery(); +bool execute_ddl_log_entry(THD *thd, uint first_entry); +bool check_duplicate_warning(THD *thd, char *msg, ulong length); + +/* + These prototypes where under INNODB_COMPATIBILITY_HOOKS. +*/ +uint explain_filename(THD* thd, const char *from, char *to, uint to_length, + enum_explain_filename_mode explain_mode); + + +extern MYSQL_PLUGIN_IMPORT const char *primary_key_name; +extern int creating_table; // How many mysql_create_table() are running +extern mysql_mutex_t LOCK_gdl; + +#endif /* SQL_TABLE_INCLUDED */ diff --git a/sql/sql_tablespace.cc b/sql/sql_tablespace.cc index 4db3083eb04..18650c11c09 100644 --- a/sql/sql_tablespace.cc +++ b/sql/sql_tablespace.cc @@ -15,7 +15,11 @@ /* drop and alter of tablespaces */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "sql_tablespace.h" +#include "sql_table.h" // write_bin_log +#include "sql_class.h" // THD int mysql_alter_tablespace(THD *thd, st_alter_tablespace *ts_info) { diff --git a/sql/sql_tablespace.h b/sql/sql_tablespace.h new file mode 100644 index 00000000000..93544dea4af --- /dev/null +++ b/sql/sql_tablespace.h @@ -0,0 +1,24 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef SQL_TABLESPACE_INCLUDED +#define SQL_TABLESPACE_INCLUDED + +class THD; +class st_alter_tablespace; + +int mysql_alter_tablespace(THD* thd, st_alter_tablespace *ts_info); + +#endif /* SQL_TABLESPACE_INCLUDED */ diff --git a/sql/sql_test.cc b/sql/sql_test.cc index bfd053d3333..d34aee854d0 100644 --- a/sql/sql_test.cc +++ b/sql/sql_test.cc @@ -17,7 +17,11 @@ /* Write some debug info */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "sql_test.h" +#include "sql_base.h" // table_def_cache, table_cache_count, unused_tables +#include "sql_show.h" // calc_sum_of_all_status #include "sql_select.h" #include "keycaches.h" #include <hash.h> diff --git a/sql/sql_test.h b/sql/sql_test.h new file mode 100644 index 00000000000..539e89ec949 --- /dev/null +++ b/sql/sql_test.h @@ -0,0 +1,37 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef SQL_TEST_INCLUDED +#define SQL_TEST_INCLUDED + +#include "mysqld.h" + +class JOIN; +struct TABLE_LIST; +typedef class Item COND; +typedef class st_select_lex SELECT_LEX; +typedef struct st_sort_field SORT_FIELD; + +#ifndef DBUG_OFF +void print_where(COND *cond,const char *info, enum_query_type query_type); +void print_cached_tables(void); +void TEST_filesort(SORT_FIELD *sortorder,uint s_length); +void print_plan(JOIN* join,uint idx, double record_count, double read_time, + double current_read_time, const char *info); +void dump_TABLE_LIST_graph(SELECT_LEX *select_lex, TABLE_LIST* tl); +#endif +void mysql_print_status(); + +#endif /* SQL_TEST_INCLUDED */ diff --git a/sql/time.cc b/sql/sql_time.cc index 2db7812b9ef..9606304ea16 100644 --- a/sql/time.cc +++ b/sql/sql_time.cc @@ -16,7 +16,11 @@ /* Functions to handle date and time */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" // REQUIRED by other includes +#include "sql_time.h" +#include "tztime.h" // struct Time_zone +#include "sql_class.h" // THD, MODE_INVALID_DATES, MODE_NO_ZERO_DATE #include <m_ctype.h> diff --git a/sql/sql_time.h b/sql/sql_time.h new file mode 100644 index 00000000000..47e1a2b4843 --- /dev/null +++ b/sql/sql_time.h @@ -0,0 +1,101 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef SQL_TIME_INCLUDED +#define SQL_TIME_INCLUDED + +#include "my_global.h" /* ulong */ +#include "my_time.h" +#include "mysql_time.h" /* timestamp_type */ +#include "sql_error.h" /* MYSQL_ERROR */ +#include "structs.h" /* INTERVAL */ + +typedef enum enum_mysql_timestamp_type timestamp_type; +typedef struct st_date_time_format DATE_TIME_FORMAT; +typedef struct st_known_date_time_format KNOWN_DATE_TIME_FORMAT; + +/* Flags for calc_week() function. */ +#define WEEK_MONDAY_FIRST 1 +#define WEEK_YEAR 2 +#define WEEK_FIRST_WEEKDAY 4 + +ulong convert_period_to_month(ulong period); +ulong convert_month_to_period(ulong month); +void get_date_from_daynr(long daynr,uint *year, uint *month, uint *day); +my_time_t TIME_to_timestamp(THD *thd, const MYSQL_TIME *t, my_bool *not_exist); +bool str_to_time_with_warn(CHARSET_INFO *cs, const char *str, uint length, + MYSQL_TIME *l_time); +timestamp_type str_to_datetime_with_warn(CHARSET_INFO *cs, const char *str, + uint length, MYSQL_TIME *l_time, + uint flags); +void make_truncated_value_warning(THD *thd, + MYSQL_ERROR::enum_warning_level level, + const char *str_val, uint str_length, + timestamp_type time_type, + const char *field_name); +extern DATE_TIME_FORMAT *date_time_format_make(timestamp_type format_type, + const char *format_str, + uint format_length); +extern DATE_TIME_FORMAT *date_time_format_copy(THD *thd, + DATE_TIME_FORMAT *format); +const char *get_date_time_format_str(KNOWN_DATE_TIME_FORMAT *format, + timestamp_type type); +void make_date(const DATE_TIME_FORMAT *format, const MYSQL_TIME *l_time, + String *str); +void make_time(const DATE_TIME_FORMAT *format, const MYSQL_TIME *l_time, + String *str); +void make_datetime(const DATE_TIME_FORMAT *format, const MYSQL_TIME *l_time, + String *str); + +/* MYSQL_TIME operations */ +bool date_add_interval(MYSQL_TIME *ltime, interval_type int_type, + INTERVAL interval); +bool calc_time_diff(MYSQL_TIME *l_time1, MYSQL_TIME *l_time2, int l_sign, + longlong *seconds_out, long *microseconds_out); +int my_time_compare(MYSQL_TIME *a, MYSQL_TIME *b); +void localtime_to_TIME(MYSQL_TIME *to, struct tm *from); +void calc_time_from_sec(MYSQL_TIME *to, long seconds, long microseconds); +uint calc_week(MYSQL_TIME *l_time, uint week_behaviour, uint *year); + +int calc_weekday(long daynr,bool sunday_first_day_of_week); +bool parse_date_time_format(timestamp_type format_type, + const char *format, uint format_length, + DATE_TIME_FORMAT *date_time_format); +/* Character set-aware version of str_to_time() */ +bool str_to_time(CHARSET_INFO *cs, const char *str,uint length, + MYSQL_TIME *l_time, int *warning); +/* Character set-aware version of str_to_datetime() */ +timestamp_type str_to_datetime(CHARSET_INFO *cs, + const char *str, uint length, + MYSQL_TIME *l_time, uint flags, int *was_cut); + +/* convenience wrapper */ +inline bool parse_date_time_format(timestamp_type format_type, + DATE_TIME_FORMAT *date_time_format) +{ + return parse_date_time_format(format_type, + date_time_format->format.str, + date_time_format->format.length, + date_time_format); +} + + +extern DATE_TIME_FORMAT global_date_format; +extern DATE_TIME_FORMAT global_datetime_format; +extern DATE_TIME_FORMAT global_time_format; +extern KNOWN_DATE_TIME_FORMAT known_date_time_formats[]; +extern LEX_STRING interval_type_to_name[]; + +#endif /* SQL_TIME_INCLUDED */ diff --git a/sql/sql_trigger.cc b/sql/sql_trigger.cc index b1367a61b37..9f45ce3919e 100644 --- a/sql/sql_trigger.cc +++ b/sql/sql_trigger.cc @@ -15,11 +15,22 @@ #define MYSQL_LEX 1 -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" #include "sp_head.h" #include "sql_trigger.h" +#include "sql_parse.h" // parse_sql #include "parse_file.h" #include "sp.h" +#include "sql_base.h" // find_temporary_table +#include "lock.h" // wait_if_global_read_lock, + // start_waiting_global_read_lock +#include "sql_show.h" // append_definer, append_identifier +#include "sql_table.h" // build_table_filename, + // check_n_cut_mysql50_prefix +#include "sql_db.h" // get_default_db_collation +#include "sql_acl.h" // *_ACL, is_acl_user +#include "sql_handler.h" // mysql_ha_rm_tables /*************************************************************************/ diff --git a/sql/sql_trigger.h b/sql/sql_trigger.h index 85b2dbe5f21..28bf0a60877 100644 --- a/sql/sql_trigger.h +++ b/sql/sql_trigger.h @@ -16,6 +16,38 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/* Forward declarations */ + +class Item_trigger_field; +class sp_head; +class sp_name; +class Query_tables_list; +struct TABLE_LIST; +class Query_tables_list; + +/** Event on which trigger is invoked. */ +enum trg_event_type +{ + TRG_EVENT_INSERT= 0, + TRG_EVENT_UPDATE= 1, + TRG_EVENT_DELETE= 2, + TRG_EVENT_MAX +}; + +#include "table.h" /* GRANT_INFO */ + +/* + We need this two enums here instead of sql_lex.h because + at least one of them is used by Item_trigger_field interface. + + Time when trigger is invoked (i.e. before or after row actually + inserted/updated/deleted). +*/ +enum trg_action_time_type +{ + TRG_ACTION_BEFORE= 0, TRG_ACTION_AFTER= 1, TRG_ACTION_MAX +}; + /** This class holds all information about triggers of table. @@ -178,5 +210,9 @@ bool load_table_name_for_trigger(THD *thd, const sp_name *trg_name, const LEX_STRING *trn_path, LEX_STRING *tbl_name); +bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create); + +extern const char * const TRG_EXT; +extern const char * const TRN_EXT; #endif /* SQL_TRIGGER_INCLUDED */ diff --git a/sql/sql_udf.cc b/sql/sql_udf.cc index 7dfcf9f6b2e..9ec17a67533 100644 --- a/sql/sql_udf.cc +++ b/sql/sql_udf.cc @@ -31,8 +31,14 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "sql_base.h" // close_thread_tables +#include "sql_parse.h" // check_identifier_name +#include "sql_table.h" // write_bin_log +#include "records.h" // init_read_record, end_read_record #include <my_pthread.h> +#include "lock.h" // MYSQL_LOCK_IGNORE_TIMEOUT #ifdef HAVE_DLOPEN extern "C" diff --git a/sql/sql_union.cc b/sql/sql_union.cc index ad14d2e4ecd..a4d3f61f0e3 100644 --- a/sql/sql_union.cc +++ b/sql/sql_union.cc @@ -20,9 +20,13 @@ */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "sql_union.h" #include "sql_select.h" #include "sql_cursor.h" +#include "sql_base.h" // fill_record +#include "filesort.h" // filesort_free_buffers bool mysql_union(THD *thd, LEX *lex, select_result *result, SELECT_LEX_UNIT *unit, ulong setup_tables_done_option) diff --git a/sql/sql_union.h b/sql/sql_union.h new file mode 100644 index 00000000000..43e1b7a6910 --- /dev/null +++ b/sql/sql_union.h @@ -0,0 +1,31 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef SQL_UNION_INCLUDED +#define SQL_UNION_INCLUDED + +#include "my_global.h" /* ulong */ + +class THD; +class select_result; +struct LEX; + +typedef class st_select_lex_unit SELECT_LEX_UNIT; + +bool mysql_union(THD *thd, LEX *lex, select_result *result, + SELECT_LEX_UNIT *unit, ulong setup_tables_done_option); + + +#endif /* SQL_UNION_INCLUDED */ diff --git a/sql/sql_update.cc b/sql/sql_update.cc index 62a35335374..3adee53f0be 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -19,12 +19,27 @@ Multi-table updates were introduced by Sinisa & Monty */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" // REQUIRED: for other includes +#include "sql_update.h" +#include "sql_cache.h" // query_cache_* +#include "sql_base.h" // close_tables_for_reopen +#include "sql_parse.h" // cleanup_items +#include "sql_partition.h" // partition_key_modified #include "sql_select.h" +#include "sql_view.h" // check_key_in_view #include "sp_head.h" #include "sql_trigger.h" #include "probes_mysql.h" #include "debug_sync.h" +#include "key.h" // is_key_used +#include "sql_acl.h" // *_ACL, check_grant +#include "records.h" // init_read_record, + // end_read_record +#include "filesort.h" // filesort +#include "sql_derived.h" // mysql_derived_prepare, + // mysql_handle_derived, + // mysql_derived_filling /* Return 0 if row hasn't changed */ diff --git a/sql/sql_update.h b/sql/sql_update.h new file mode 100644 index 00000000000..e5a0ca5c627 --- /dev/null +++ b/sql/sql_update.h @@ -0,0 +1,43 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef SQL_UPDATE_INCLUDED +#define SQL_UPDATE_INCLUDED + +#include "sql_class.h" /* enum_duplicates */ + +class Item; +class TABLE_LIST; +class THD; + +typedef class st_select_lex SELECT_LEX; +typedef class st_select_lex_unit SELECT_LEX_UNIT; + +bool mysql_prepare_update(THD *thd, TABLE_LIST *table_list, + Item **conds, uint order_num, ORDER *order); +int mysql_update(THD *thd,TABLE_LIST *tables,List<Item> &fields, + List<Item> &values,COND *conds, + uint order_num, ORDER *order, ha_rows limit, + enum enum_duplicates handle_duplicates, bool ignore, + ha_rows *found_return, ha_rows *updated_return); +bool mysql_multi_update(THD *thd, TABLE_LIST *table_list, + List<Item> *fields, List<Item> *values, + COND *conds, ulonglong options, + enum enum_duplicates handle_duplicates, bool ignore, + SELECT_LEX_UNIT *unit, SELECT_LEX *select_lex, + multi_update **result); +bool compare_record(TABLE *table); + +#endif /* SQL_UPDATE_INCLUDED */ diff --git a/sql/sql_view.cc b/sql/sql_view.cc index 2f40720c7ae..004b7d80124 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -15,7 +15,17 @@ */ #define MYSQL_LEX 1 -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "sql_view.h" +#include "sql_base.h" // find_table_in_global_list +#include "sql_parse.h" // sql_parse +#include "sql_cache.h" // query_cache_* +#include "lock.h" // wait_if_global_read_lock, lock_table_names +#include "sql_show.h" // append_identifier +#include "sql_table.h" // build_table_filename +#include "sql_db.h" // mysql_opt_change_db, mysql_change_db +#include "sql_acl.h" // *_ACL, check_grant #include "sql_select.h" #include "parse_file.h" #include "sp.h" diff --git a/sql/sql_view.h b/sql/sql_view.h index 3de51c3264e..7d06abb9068 100644 --- a/sql/sql_view.h +++ b/sql/sql_view.h @@ -18,6 +18,16 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include "sql_class.h" /* Required by sql_lex.h */ +#include "sql_lex.h" /* enum_view_create_mode, enum_drop_mode */ + +/* Forward declarations */ + +class File_parser; + + +/* Function declarations */ + bool create_view_precheck(THD *thd, TABLE_LIST *tables, TABLE_LIST *view, enum_view_create_mode mode); @@ -45,4 +55,6 @@ bool mysql_rename_view(THD *thd, const char *new_db, const char *new_name, #define VIEW_ANY_ACL (SELECT_ACL | UPDATE_ACL | INSERT_ACL | DELETE_ACL) +extern const LEX_STRING view_type; + #endif /* SQL_VIEW_INCLUDED */ diff --git a/sql/sql_yacc.h b/sql/sql_yacc.h new file mode 100644 index 00000000000..62575750bb2 --- /dev/null +++ b/sql/sql_yacc.h @@ -0,0 +1,1291 @@ + +/* A Bison parser, made by GNU Bison 2.4.1. */ + +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + ABORT_SYM = 258, + ACCESSIBLE_SYM = 259, + ACTION = 260, + ADD = 261, + ADDDATE_SYM = 262, + AFTER_SYM = 263, + AGAINST = 264, + AGGREGATE_SYM = 265, + ALGORITHM_SYM = 266, + ALL = 267, + ALTER = 268, + ANALYZE_SYM = 269, + AND_AND_SYM = 270, + AND_SYM = 271, + ANY_SYM = 272, + AS = 273, + ASC = 274, + ASCII_SYM = 275, + ASENSITIVE_SYM = 276, + AT_SYM = 277, + AUTHORS_SYM = 278, + AUTOEXTEND_SIZE_SYM = 279, + AUTO_INC = 280, + AVG_ROW_LENGTH = 281, + AVG_SYM = 282, + BACKUP_SYM = 283, + BEFORE_SYM = 284, + BEGIN_SYM = 285, + BETWEEN_SYM = 286, + BIGINT = 287, + BINARY = 288, + BINLOG_SYM = 289, + BIN_NUM = 290, + BIT_AND = 291, + BIT_OR = 292, + BIT_SYM = 293, + BIT_XOR = 294, + BLOB_SYM = 295, + BLOCK_SYM = 296, + BOOLEAN_SYM = 297, + BOOL_SYM = 298, + BOTH = 299, + BTREE_SYM = 300, + BY = 301, + BYTE_SYM = 302, + CACHE_SYM = 303, + CALL_SYM = 304, + CASCADE = 305, + CASCADED = 306, + CASE_SYM = 307, + CAST_SYM = 308, + CATALOG_NAME_SYM = 309, + CHAIN_SYM = 310, + CHANGE = 311, + CHANGED = 312, + CHARSET = 313, + CHAR_SYM = 314, + CHECKSUM_SYM = 315, + CHECK_SYM = 316, + CIPHER_SYM = 317, + CLASS_ORIGIN_SYM = 318, + CLIENT_SYM = 319, + CLOSE_SYM = 320, + COALESCE = 321, + CODE_SYM = 322, + COLLATE_SYM = 323, + COLLATION_SYM = 324, + COLUMNS = 325, + COLUMN_SYM = 326, + COLUMN_NAME_SYM = 327, + COMMENT_SYM = 328, + COMMITTED_SYM = 329, + COMMIT_SYM = 330, + COMPACT_SYM = 331, + COMPLETION_SYM = 332, + COMPRESSED_SYM = 333, + CONCURRENT = 334, + CONDITION_SYM = 335, + CONNECTION_SYM = 336, + CONSISTENT_SYM = 337, + CONSTRAINT = 338, + CONSTRAINT_CATALOG_SYM = 339, + CONSTRAINT_NAME_SYM = 340, + CONSTRAINT_SCHEMA_SYM = 341, + CONTAINS_SYM = 342, + CONTEXT_SYM = 343, + CONTINUE_SYM = 344, + CONTRIBUTORS_SYM = 345, + CONVERT_SYM = 346, + COUNT_SYM = 347, + CPU_SYM = 348, + CREATE = 349, + CROSS = 350, + CUBE_SYM = 351, + CURDATE = 352, + CURRENT_USER = 353, + CURSOR_SYM = 354, + CURSOR_NAME_SYM = 355, + CURTIME = 356, + DATABASE = 357, + DATABASES = 358, + DATAFILE_SYM = 359, + DATA_SYM = 360, + DATETIME = 361, + DATE_ADD_INTERVAL = 362, + DATE_SUB_INTERVAL = 363, + DATE_SYM = 364, + DAY_HOUR_SYM = 365, + DAY_MICROSECOND_SYM = 366, + DAY_MINUTE_SYM = 367, + DAY_SECOND_SYM = 368, + DAY_SYM = 369, + DEALLOCATE_SYM = 370, + DECIMAL_NUM = 371, + DECIMAL_SYM = 372, + DECLARE_SYM = 373, + DEFAULT = 374, + DEFINER_SYM = 375, + DELAYED_SYM = 376, + DELAY_KEY_WRITE_SYM = 377, + DELETE_SYM = 378, + DESC = 379, + DESCRIBE = 380, + DES_KEY_FILE = 381, + DETERMINISTIC_SYM = 382, + DIRECTORY_SYM = 383, + DISABLE_SYM = 384, + DISCARD = 385, + DISK_SYM = 386, + DISTINCT = 387, + DIV_SYM = 388, + DOUBLE_SYM = 389, + DO_SYM = 390, + DROP = 391, + DUAL_SYM = 392, + DUMPFILE = 393, + DUPLICATE_SYM = 394, + DYNAMIC_SYM = 395, + EACH_SYM = 396, + ELSE = 397, + ELSEIF_SYM = 398, + ENABLE_SYM = 399, + ENCLOSED = 400, + END = 401, + ENDS_SYM = 402, + END_OF_INPUT = 403, + ENGINES_SYM = 404, + ENGINE_SYM = 405, + ENUM = 406, + EQ = 407, + EQUAL_SYM = 408, + ERROR_SYM = 409, + ERRORS = 410, + ESCAPED = 411, + ESCAPE_SYM = 412, + EVENTS_SYM = 413, + EVENT_SYM = 414, + EVERY_SYM = 415, + EXECUTE_SYM = 416, + EXISTS = 417, + EXIT_SYM = 418, + EXPANSION_SYM = 419, + EXTENDED_SYM = 420, + EXTENT_SIZE_SYM = 421, + EXTRACT_SYM = 422, + FALSE_SYM = 423, + FAST_SYM = 424, + FAULTS_SYM = 425, + FETCH_SYM = 426, + FILE_SYM = 427, + FIRST_SYM = 428, + FIXED_SYM = 429, + FLOAT_NUM = 430, + FLOAT_SYM = 431, + FLUSH_SYM = 432, + FORCE_SYM = 433, + FOREIGN = 434, + FOR_SYM = 435, + FOUND_SYM = 436, + FROM = 437, + FULL = 438, + FULLTEXT_SYM = 439, + FUNCTION_SYM = 440, + GE = 441, + GENERAL = 442, + GEOMETRYCOLLECTION = 443, + GEOMETRY_SYM = 444, + GET_FORMAT = 445, + GLOBAL_SYM = 446, + GRANT = 447, + GRANTS = 448, + GROUP_SYM = 449, + GROUP_CONCAT_SYM = 450, + GT_SYM = 451, + HANDLER_SYM = 452, + HASH_SYM = 453, + HAVING = 454, + HELP_SYM = 455, + HEX_NUM = 456, + HIGH_PRIORITY = 457, + HOST_SYM = 458, + HOSTS_SYM = 459, + HOUR_MICROSECOND_SYM = 460, + HOUR_MINUTE_SYM = 461, + HOUR_SECOND_SYM = 462, + HOUR_SYM = 463, + IDENT = 464, + IDENTIFIED_SYM = 465, + IDENT_QUOTED = 466, + IF = 467, + IGNORE_SYM = 468, + IGNORE_SERVER_IDS_SYM = 469, + IMPORT = 470, + INDEXES = 471, + INDEX_SYM = 472, + INFILE = 473, + INITIAL_SIZE_SYM = 474, + INNER_SYM = 475, + INOUT_SYM = 476, + INSENSITIVE_SYM = 477, + INSERT = 478, + INSERT_METHOD = 479, + INSTALL_SYM = 480, + INTERVAL_SYM = 481, + INTO = 482, + INT_SYM = 483, + INVOKER_SYM = 484, + IN_SYM = 485, + IO_SYM = 486, + IPC_SYM = 487, + IS = 488, + ISOLATION = 489, + ISSUER_SYM = 490, + ITERATE_SYM = 491, + JOIN_SYM = 492, + KEYS = 493, + KEY_BLOCK_SIZE = 494, + KEY_SYM = 495, + KILL_SYM = 496, + LANGUAGE_SYM = 497, + LAST_SYM = 498, + LE = 499, + LEADING = 500, + LEAVES = 501, + LEAVE_SYM = 502, + LEFT = 503, + LESS_SYM = 504, + LEVEL_SYM = 505, + LEX_HOSTNAME = 506, + LIKE = 507, + LIMIT = 508, + LINEAR_SYM = 509, + LINES = 510, + LINESTRING = 511, + LIST_SYM = 512, + LOAD = 513, + LOCAL_SYM = 514, + LOCATOR_SYM = 515, + LOCKS_SYM = 516, + LOCK_SYM = 517, + LOGFILE_SYM = 518, + LOGS_SYM = 519, + LONGBLOB = 520, + LONGTEXT = 521, + LONG_NUM = 522, + LONG_SYM = 523, + LOOP_SYM = 524, + LOW_PRIORITY = 525, + LT = 526, + MASTER_CONNECT_RETRY_SYM = 527, + MASTER_HOST_SYM = 528, + MASTER_LOG_FILE_SYM = 529, + MASTER_LOG_POS_SYM = 530, + MASTER_PASSWORD_SYM = 531, + MASTER_PORT_SYM = 532, + MASTER_SERVER_ID_SYM = 533, + MASTER_SSL_CAPATH_SYM = 534, + MASTER_SSL_CA_SYM = 535, + MASTER_SSL_CERT_SYM = 536, + MASTER_SSL_CIPHER_SYM = 537, + MASTER_SSL_KEY_SYM = 538, + MASTER_SSL_SYM = 539, + MASTER_SSL_VERIFY_SERVER_CERT_SYM = 540, + MASTER_SYM = 541, + MASTER_USER_SYM = 542, + MASTER_HEARTBEAT_PERIOD_SYM = 543, + MATCH = 544, + MAX_CONNECTIONS_PER_HOUR = 545, + MAX_QUERIES_PER_HOUR = 546, + MAX_ROWS = 547, + MAX_SIZE_SYM = 548, + MAX_SYM = 549, + MAX_UPDATES_PER_HOUR = 550, + MAX_USER_CONNECTIONS_SYM = 551, + MAX_VALUE_SYM = 552, + MEDIUMBLOB = 553, + MEDIUMINT = 554, + MEDIUMTEXT = 555, + MEDIUM_SYM = 556, + MEMORY_SYM = 557, + MERGE_SYM = 558, + MESSAGE_TEXT_SYM = 559, + MICROSECOND_SYM = 560, + MIGRATE_SYM = 561, + MINUTE_MICROSECOND_SYM = 562, + MINUTE_SECOND_SYM = 563, + MINUTE_SYM = 564, + MIN_ROWS = 565, + MIN_SYM = 566, + MODE_SYM = 567, + MODIFIES_SYM = 568, + MODIFY_SYM = 569, + MOD_SYM = 570, + MONTH_SYM = 571, + MULTILINESTRING = 572, + MULTIPOINT = 573, + MULTIPOLYGON = 574, + MUTEX_SYM = 575, + MYSQL_ERRNO_SYM = 576, + NAMES_SYM = 577, + NAME_SYM = 578, + NATIONAL_SYM = 579, + NATURAL = 580, + NCHAR_STRING = 581, + NCHAR_SYM = 582, + NDBCLUSTER_SYM = 583, + NE = 584, + NEG = 585, + NEW_SYM = 586, + NEXT_SYM = 587, + NODEGROUP_SYM = 588, + NONE_SYM = 589, + NOT2_SYM = 590, + NOT_SYM = 591, + NOW_SYM = 592, + NO_SYM = 593, + NO_WAIT_SYM = 594, + NO_WRITE_TO_BINLOG = 595, + NULL_SYM = 596, + NUM = 597, + NUMERIC_SYM = 598, + NVARCHAR_SYM = 599, + OFFSET_SYM = 600, + OLD_PASSWORD = 601, + ON = 602, + ONE_SHOT_SYM = 603, + ONE_SYM = 604, + OPEN_SYM = 605, + OPTIMIZE = 606, + OPTIONS_SYM = 607, + OPTION = 608, + OPTIONALLY = 609, + OR2_SYM = 610, + ORDER_SYM = 611, + OR_OR_SYM = 612, + OR_SYM = 613, + OUTER = 614, + OUTFILE = 615, + OUT_SYM = 616, + OWNER_SYM = 617, + PACK_KEYS_SYM = 618, + PAGE_SYM = 619, + PARAM_MARKER = 620, + PARSER_SYM = 621, + PARTIAL = 622, + PARTITIONING_SYM = 623, + PARTITIONS_SYM = 624, + PARTITION_SYM = 625, + PASSWORD = 626, + PHASE_SYM = 627, + PLUGINS_SYM = 628, + PLUGIN_SYM = 629, + POINT_SYM = 630, + POLYGON = 631, + PORT_SYM = 632, + POSITION_SYM = 633, + PRECISION = 634, + PREPARE_SYM = 635, + PRESERVE_SYM = 636, + PREV_SYM = 637, + PRIMARY_SYM = 638, + PRIVILEGES = 639, + PROCEDURE_SYM = 640, + PROCESS = 641, + PROCESSLIST_SYM = 642, + PROFILE_SYM = 643, + PROFILES_SYM = 644, + PURGE = 645, + QUARTER_SYM = 646, + QUERY_SYM = 647, + QUICK = 648, + RANGE_SYM = 649, + READS_SYM = 650, + READ_ONLY_SYM = 651, + READ_SYM = 652, + READ_WRITE_SYM = 653, + REAL = 654, + REBUILD_SYM = 655, + RECOVER_SYM = 656, + REDOFILE_SYM = 657, + REDO_BUFFER_SIZE_SYM = 658, + REDUNDANT_SYM = 659, + REFERENCES = 660, + REGEXP = 661, + RELAY = 662, + RELAYLOG_SYM = 663, + RELAY_LOG_FILE_SYM = 664, + RELAY_LOG_POS_SYM = 665, + RELAY_THREAD = 666, + RELEASE_SYM = 667, + RELOAD = 668, + REMOVE_SYM = 669, + RENAME = 670, + REORGANIZE_SYM = 671, + REPAIR = 672, + REPEATABLE_SYM = 673, + REPEAT_SYM = 674, + REPLACE = 675, + REPLICATION = 676, + REQUIRE_SYM = 677, + RESET_SYM = 678, + RESIGNAL_SYM = 679, + RESOURCES = 680, + RESTORE_SYM = 681, + RESTRICT = 682, + RESUME_SYM = 683, + RETURNS_SYM = 684, + RETURN_SYM = 685, + REVOKE = 686, + RIGHT = 687, + ROLLBACK_SYM = 688, + ROLLUP_SYM = 689, + ROUTINE_SYM = 690, + ROWS_SYM = 691, + ROW_FORMAT_SYM = 692, + ROW_SYM = 693, + RTREE_SYM = 694, + SAVEPOINT_SYM = 695, + SCHEDULE_SYM = 696, + SCHEMA_NAME_SYM = 697, + SECOND_MICROSECOND_SYM = 698, + SECOND_SYM = 699, + SECURITY_SYM = 700, + SELECT_SYM = 701, + SENSITIVE_SYM = 702, + SEPARATOR_SYM = 703, + SERIALIZABLE_SYM = 704, + SERIAL_SYM = 705, + SESSION_SYM = 706, + SERVER_SYM = 707, + SERVER_OPTIONS = 708, + SET = 709, + SET_VAR = 710, + SHARE_SYM = 711, + SHIFT_LEFT = 712, + SHIFT_RIGHT = 713, + SHOW = 714, + SHUTDOWN = 715, + SIGNAL_SYM = 716, + SIGNED_SYM = 717, + SIMPLE_SYM = 718, + SLAVE = 719, + SLOW = 720, + SMALLINT = 721, + SNAPSHOT_SYM = 722, + SOCKET_SYM = 723, + SONAME_SYM = 724, + SOUNDS_SYM = 725, + SOURCE_SYM = 726, + SPATIAL_SYM = 727, + SPECIFIC_SYM = 728, + SQLEXCEPTION_SYM = 729, + SQLSTATE_SYM = 730, + SQLWARNING_SYM = 731, + SQL_BIG_RESULT = 732, + SQL_BUFFER_RESULT = 733, + SQL_CACHE_SYM = 734, + SQL_CALC_FOUND_ROWS = 735, + SQL_NO_CACHE_SYM = 736, + SQL_SMALL_RESULT = 737, + SQL_SYM = 738, + SQL_THREAD = 739, + SSL_SYM = 740, + STARTING = 741, + STARTS_SYM = 742, + START_SYM = 743, + STATUS_SYM = 744, + STDDEV_SAMP_SYM = 745, + STD_SYM = 746, + STOP_SYM = 747, + STORAGE_SYM = 748, + STRAIGHT_JOIN = 749, + STRING_SYM = 750, + SUBCLASS_ORIGIN_SYM = 751, + SUBDATE_SYM = 752, + SUBJECT_SYM = 753, + SUBPARTITIONS_SYM = 754, + SUBPARTITION_SYM = 755, + SUBSTRING = 756, + SUM_SYM = 757, + SUPER_SYM = 758, + SUSPEND_SYM = 759, + SWAPS_SYM = 760, + SWITCHES_SYM = 761, + SYSDATE = 762, + TABLES = 763, + TABLESPACE = 764, + TABLE_REF_PRIORITY = 765, + TABLE_SYM = 766, + TABLE_CHECKSUM_SYM = 767, + TABLE_NAME_SYM = 768, + TEMPORARY = 769, + TEMPTABLE_SYM = 770, + TERMINATED = 771, + TEXT_STRING = 772, + TEXT_SYM = 773, + THAN_SYM = 774, + THEN_SYM = 775, + TIMESTAMP = 776, + TIMESTAMP_ADD = 777, + TIMESTAMP_DIFF = 778, + TIME_SYM = 779, + TINYBLOB = 780, + TINYINT = 781, + TINYTEXT = 782, + TO_SYM = 783, + TRAILING = 784, + TRANSACTION_SYM = 785, + TRIGGERS_SYM = 786, + TRIGGER_SYM = 787, + TRIM = 788, + TRUE_SYM = 789, + TRUNCATE_SYM = 790, + TYPES_SYM = 791, + TYPE_SYM = 792, + UDF_RETURNS_SYM = 793, + ULONGLONG_NUM = 794, + UNCOMMITTED_SYM = 795, + UNDEFINED_SYM = 796, + UNDERSCORE_CHARSET = 797, + UNDOFILE_SYM = 798, + UNDO_BUFFER_SIZE_SYM = 799, + UNDO_SYM = 800, + UNICODE_SYM = 801, + UNINSTALL_SYM = 802, + UNION_SYM = 803, + UNIQUE_SYM = 804, + UNKNOWN_SYM = 805, + UNLOCK_SYM = 806, + UNSIGNED = 807, + UNTIL_SYM = 808, + UPDATE_SYM = 809, + UPGRADE_SYM = 810, + USAGE = 811, + USER = 812, + USE_FRM = 813, + USE_SYM = 814, + USING = 815, + UTC_DATE_SYM = 816, + UTC_TIMESTAMP_SYM = 817, + UTC_TIME_SYM = 818, + VALUES = 819, + VALUE_SYM = 820, + VARBINARY = 821, + VARCHAR = 822, + VARIABLES = 823, + VARIANCE_SYM = 824, + VARYING = 825, + VAR_SAMP_SYM = 826, + VIEW_SYM = 827, + WAIT_SYM = 828, + WARNINGS = 829, + WEEK_SYM = 830, + WHEN_SYM = 831, + WHERE = 832, + WHILE_SYM = 833, + WITH = 834, + WITH_CUBE_SYM = 835, + WITH_ROLLUP_SYM = 836, + WORK_SYM = 837, + WRAPPER_SYM = 838, + WRITE_SYM = 839, + X509_SYM = 840, + XA_SYM = 841, + XML_SYM = 842, + XOR = 843, + YEAR_MONTH_SYM = 844, + YEAR_SYM = 845, + ZEROFILL = 846 + }; +#endif +/* Tokens. */ +#define ABORT_SYM 258 +#define ACCESSIBLE_SYM 259 +#define ACTION 260 +#define ADD 261 +#define ADDDATE_SYM 262 +#define AFTER_SYM 263 +#define AGAINST 264 +#define AGGREGATE_SYM 265 +#define ALGORITHM_SYM 266 +#define ALL 267 +#define ALTER 268 +#define ANALYZE_SYM 269 +#define AND_AND_SYM 270 +#define AND_SYM 271 +#define ANY_SYM 272 +#define AS 273 +#define ASC 274 +#define ASCII_SYM 275 +#define ASENSITIVE_SYM 276 +#define AT_SYM 277 +#define AUTHORS_SYM 278 +#define AUTOEXTEND_SIZE_SYM 279 +#define AUTO_INC 280 +#define AVG_ROW_LENGTH 281 +#define AVG_SYM 282 +#define BACKUP_SYM 283 +#define BEFORE_SYM 284 +#define BEGIN_SYM 285 +#define BETWEEN_SYM 286 +#define BIGINT 287 +#define BINARY 288 +#define BINLOG_SYM 289 +#define BIN_NUM 290 +#define BIT_AND 291 +#define BIT_OR 292 +#define BIT_SYM 293 +#define BIT_XOR 294 +#define BLOB_SYM 295 +#define BLOCK_SYM 296 +#define BOOLEAN_SYM 297 +#define BOOL_SYM 298 +#define BOTH 299 +#define BTREE_SYM 300 +#define BY 301 +#define BYTE_SYM 302 +#define CACHE_SYM 303 +#define CALL_SYM 304 +#define CASCADE 305 +#define CASCADED 306 +#define CASE_SYM 307 +#define CAST_SYM 308 +#define CATALOG_NAME_SYM 309 +#define CHAIN_SYM 310 +#define CHANGE 311 +#define CHANGED 312 +#define CHARSET 313 +#define CHAR_SYM 314 +#define CHECKSUM_SYM 315 +#define CHECK_SYM 316 +#define CIPHER_SYM 317 +#define CLASS_ORIGIN_SYM 318 +#define CLIENT_SYM 319 +#define CLOSE_SYM 320 +#define COALESCE 321 +#define CODE_SYM 322 +#define COLLATE_SYM 323 +#define COLLATION_SYM 324 +#define COLUMNS 325 +#define COLUMN_SYM 326 +#define COLUMN_NAME_SYM 327 +#define COMMENT_SYM 328 +#define COMMITTED_SYM 329 +#define COMMIT_SYM 330 +#define COMPACT_SYM 331 +#define COMPLETION_SYM 332 +#define COMPRESSED_SYM 333 +#define CONCURRENT 334 +#define CONDITION_SYM 335 +#define CONNECTION_SYM 336 +#define CONSISTENT_SYM 337 +#define CONSTRAINT 338 +#define CONSTRAINT_CATALOG_SYM 339 +#define CONSTRAINT_NAME_SYM 340 +#define CONSTRAINT_SCHEMA_SYM 341 +#define CONTAINS_SYM 342 +#define CONTEXT_SYM 343 +#define CONTINUE_SYM 344 +#define CONTRIBUTORS_SYM 345 +#define CONVERT_SYM 346 +#define COUNT_SYM 347 +#define CPU_SYM 348 +#define CREATE 349 +#define CROSS 350 +#define CUBE_SYM 351 +#define CURDATE 352 +#define CURRENT_USER 353 +#define CURSOR_SYM 354 +#define CURSOR_NAME_SYM 355 +#define CURTIME 356 +#define DATABASE 357 +#define DATABASES 358 +#define DATAFILE_SYM 359 +#define DATA_SYM 360 +#define DATETIME 361 +#define DATE_ADD_INTERVAL 362 +#define DATE_SUB_INTERVAL 363 +#define DATE_SYM 364 +#define DAY_HOUR_SYM 365 +#define DAY_MICROSECOND_SYM 366 +#define DAY_MINUTE_SYM 367 +#define DAY_SECOND_SYM 368 +#define DAY_SYM 369 +#define DEALLOCATE_SYM 370 +#define DECIMAL_NUM 371 +#define DECIMAL_SYM 372 +#define DECLARE_SYM 373 +#define DEFAULT 374 +#define DEFINER_SYM 375 +#define DELAYED_SYM 376 +#define DELAY_KEY_WRITE_SYM 377 +#define DELETE_SYM 378 +#define DESC 379 +#define DESCRIBE 380 +#define DES_KEY_FILE 381 +#define DETERMINISTIC_SYM 382 +#define DIRECTORY_SYM 383 +#define DISABLE_SYM 384 +#define DISCARD 385 +#define DISK_SYM 386 +#define DISTINCT 387 +#define DIV_SYM 388 +#define DOUBLE_SYM 389 +#define DO_SYM 390 +#define DROP 391 +#define DUAL_SYM 392 +#define DUMPFILE 393 +#define DUPLICATE_SYM 394 +#define DYNAMIC_SYM 395 +#define EACH_SYM 396 +#define ELSE 397 +#define ELSEIF_SYM 398 +#define ENABLE_SYM 399 +#define ENCLOSED 400 +#define END 401 +#define ENDS_SYM 402 +#define END_OF_INPUT 403 +#define ENGINES_SYM 404 +#define ENGINE_SYM 405 +#define ENUM 406 +#define EQ 407 +#define EQUAL_SYM 408 +#define ERROR_SYM 409 +#define ERRORS 410 +#define ESCAPED 411 +#define ESCAPE_SYM 412 +#define EVENTS_SYM 413 +#define EVENT_SYM 414 +#define EVERY_SYM 415 +#define EXECUTE_SYM 416 +#define EXISTS 417 +#define EXIT_SYM 418 +#define EXPANSION_SYM 419 +#define EXTENDED_SYM 420 +#define EXTENT_SIZE_SYM 421 +#define EXTRACT_SYM 422 +#define FALSE_SYM 423 +#define FAST_SYM 424 +#define FAULTS_SYM 425 +#define FETCH_SYM 426 +#define FILE_SYM 427 +#define FIRST_SYM 428 +#define FIXED_SYM 429 +#define FLOAT_NUM 430 +#define FLOAT_SYM 431 +#define FLUSH_SYM 432 +#define FORCE_SYM 433 +#define FOREIGN 434 +#define FOR_SYM 435 +#define FOUND_SYM 436 +#define FROM 437 +#define FULL 438 +#define FULLTEXT_SYM 439 +#define FUNCTION_SYM 440 +#define GE 441 +#define GENERAL 442 +#define GEOMETRYCOLLECTION 443 +#define GEOMETRY_SYM 444 +#define GET_FORMAT 445 +#define GLOBAL_SYM 446 +#define GRANT 447 +#define GRANTS 448 +#define GROUP_SYM 449 +#define GROUP_CONCAT_SYM 450 +#define GT_SYM 451 +#define HANDLER_SYM 452 +#define HASH_SYM 453 +#define HAVING 454 +#define HELP_SYM 455 +#define HEX_NUM 456 +#define HIGH_PRIORITY 457 +#define HOST_SYM 458 +#define HOSTS_SYM 459 +#define HOUR_MICROSECOND_SYM 460 +#define HOUR_MINUTE_SYM 461 +#define HOUR_SECOND_SYM 462 +#define HOUR_SYM 463 +#define IDENT 464 +#define IDENTIFIED_SYM 465 +#define IDENT_QUOTED 466 +#define IF 467 +#define IGNORE_SYM 468 +#define IGNORE_SERVER_IDS_SYM 469 +#define IMPORT 470 +#define INDEXES 471 +#define INDEX_SYM 472 +#define INFILE 473 +#define INITIAL_SIZE_SYM 474 +#define INNER_SYM 475 +#define INOUT_SYM 476 +#define INSENSITIVE_SYM 477 +#define INSERT 478 +#define INSERT_METHOD 479 +#define INSTALL_SYM 480 +#define INTERVAL_SYM 481 +#define INTO 482 +#define INT_SYM 483 +#define INVOKER_SYM 484 +#define IN_SYM 485 +#define IO_SYM 486 +#define IPC_SYM 487 +#define IS 488 +#define ISOLATION 489 +#define ISSUER_SYM 490 +#define ITERATE_SYM 491 +#define JOIN_SYM 492 +#define KEYS 493 +#define KEY_BLOCK_SIZE 494 +#define KEY_SYM 495 +#define KILL_SYM 496 +#define LANGUAGE_SYM 497 +#define LAST_SYM 498 +#define LE 499 +#define LEADING 500 +#define LEAVES 501 +#define LEAVE_SYM 502 +#define LEFT 503 +#define LESS_SYM 504 +#define LEVEL_SYM 505 +#define LEX_HOSTNAME 506 +#define LIKE 507 +#define LIMIT 508 +#define LINEAR_SYM 509 +#define LINES 510 +#define LINESTRING 511 +#define LIST_SYM 512 +#define LOAD 513 +#define LOCAL_SYM 514 +#define LOCATOR_SYM 515 +#define LOCKS_SYM 516 +#define LOCK_SYM 517 +#define LOGFILE_SYM 518 +#define LOGS_SYM 519 +#define LONGBLOB 520 +#define LONGTEXT 521 +#define LONG_NUM 522 +#define LONG_SYM 523 +#define LOOP_SYM 524 +#define LOW_PRIORITY 525 +#define LT 526 +#define MASTER_CONNECT_RETRY_SYM 527 +#define MASTER_HOST_SYM 528 +#define MASTER_LOG_FILE_SYM 529 +#define MASTER_LOG_POS_SYM 530 +#define MASTER_PASSWORD_SYM 531 +#define MASTER_PORT_SYM 532 +#define MASTER_SERVER_ID_SYM 533 +#define MASTER_SSL_CAPATH_SYM 534 +#define MASTER_SSL_CA_SYM 535 +#define MASTER_SSL_CERT_SYM 536 +#define MASTER_SSL_CIPHER_SYM 537 +#define MASTER_SSL_KEY_SYM 538 +#define MASTER_SSL_SYM 539 +#define MASTER_SSL_VERIFY_SERVER_CERT_SYM 540 +#define MASTER_SYM 541 +#define MASTER_USER_SYM 542 +#define MASTER_HEARTBEAT_PERIOD_SYM 543 +#define MATCH 544 +#define MAX_CONNECTIONS_PER_HOUR 545 +#define MAX_QUERIES_PER_HOUR 546 +#define MAX_ROWS 547 +#define MAX_SIZE_SYM 548 +#define MAX_SYM 549 +#define MAX_UPDATES_PER_HOUR 550 +#define MAX_USER_CONNECTIONS_SYM 551 +#define MAX_VALUE_SYM 552 +#define MEDIUMBLOB 553 +#define MEDIUMINT 554 +#define MEDIUMTEXT 555 +#define MEDIUM_SYM 556 +#define MEMORY_SYM 557 +#define MERGE_SYM 558 +#define MESSAGE_TEXT_SYM 559 +#define MICROSECOND_SYM 560 +#define MIGRATE_SYM 561 +#define MINUTE_MICROSECOND_SYM 562 +#define MINUTE_SECOND_SYM 563 +#define MINUTE_SYM 564 +#define MIN_ROWS 565 +#define MIN_SYM 566 +#define MODE_SYM 567 +#define MODIFIES_SYM 568 +#define MODIFY_SYM 569 +#define MOD_SYM 570 +#define MONTH_SYM 571 +#define MULTILINESTRING 572 +#define MULTIPOINT 573 +#define MULTIPOLYGON 574 +#define MUTEX_SYM 575 +#define MYSQL_ERRNO_SYM 576 +#define NAMES_SYM 577 +#define NAME_SYM 578 +#define NATIONAL_SYM 579 +#define NATURAL 580 +#define NCHAR_STRING 581 +#define NCHAR_SYM 582 +#define NDBCLUSTER_SYM 583 +#define NE 584 +#define NEG 585 +#define NEW_SYM 586 +#define NEXT_SYM 587 +#define NODEGROUP_SYM 588 +#define NONE_SYM 589 +#define NOT2_SYM 590 +#define NOT_SYM 591 +#define NOW_SYM 592 +#define NO_SYM 593 +#define NO_WAIT_SYM 594 +#define NO_WRITE_TO_BINLOG 595 +#define NULL_SYM 596 +#define NUM 597 +#define NUMERIC_SYM 598 +#define NVARCHAR_SYM 599 +#define OFFSET_SYM 600 +#define OLD_PASSWORD 601 +#define ON 602 +#define ONE_SHOT_SYM 603 +#define ONE_SYM 604 +#define OPEN_SYM 605 +#define OPTIMIZE 606 +#define OPTIONS_SYM 607 +#define OPTION 608 +#define OPTIONALLY 609 +#define OR2_SYM 610 +#define ORDER_SYM 611 +#define OR_OR_SYM 612 +#define OR_SYM 613 +#define OUTER 614 +#define OUTFILE 615 +#define OUT_SYM 616 +#define OWNER_SYM 617 +#define PACK_KEYS_SYM 618 +#define PAGE_SYM 619 +#define PARAM_MARKER 620 +#define PARSER_SYM 621 +#define PARTIAL 622 +#define PARTITIONING_SYM 623 +#define PARTITIONS_SYM 624 +#define PARTITION_SYM 625 +#define PASSWORD 626 +#define PHASE_SYM 627 +#define PLUGINS_SYM 628 +#define PLUGIN_SYM 629 +#define POINT_SYM 630 +#define POLYGON 631 +#define PORT_SYM 632 +#define POSITION_SYM 633 +#define PRECISION 634 +#define PREPARE_SYM 635 +#define PRESERVE_SYM 636 +#define PREV_SYM 637 +#define PRIMARY_SYM 638 +#define PRIVILEGES 639 +#define PROCEDURE_SYM 640 +#define PROCESS 641 +#define PROCESSLIST_SYM 642 +#define PROFILE_SYM 643 +#define PROFILES_SYM 644 +#define PURGE 645 +#define QUARTER_SYM 646 +#define QUERY_SYM 647 +#define QUICK 648 +#define RANGE_SYM 649 +#define READS_SYM 650 +#define READ_ONLY_SYM 651 +#define READ_SYM 652 +#define READ_WRITE_SYM 653 +#define REAL 654 +#define REBUILD_SYM 655 +#define RECOVER_SYM 656 +#define REDOFILE_SYM 657 +#define REDO_BUFFER_SIZE_SYM 658 +#define REDUNDANT_SYM 659 +#define REFERENCES 660 +#define REGEXP 661 +#define RELAY 662 +#define RELAYLOG_SYM 663 +#define RELAY_LOG_FILE_SYM 664 +#define RELAY_LOG_POS_SYM 665 +#define RELAY_THREAD 666 +#define RELEASE_SYM 667 +#define RELOAD 668 +#define REMOVE_SYM 669 +#define RENAME 670 +#define REORGANIZE_SYM 671 +#define REPAIR 672 +#define REPEATABLE_SYM 673 +#define REPEAT_SYM 674 +#define REPLACE 675 +#define REPLICATION 676 +#define REQUIRE_SYM 677 +#define RESET_SYM 678 +#define RESIGNAL_SYM 679 +#define RESOURCES 680 +#define RESTORE_SYM 681 +#define RESTRICT 682 +#define RESUME_SYM 683 +#define RETURNS_SYM 684 +#define RETURN_SYM 685 +#define REVOKE 686 +#define RIGHT 687 +#define ROLLBACK_SYM 688 +#define ROLLUP_SYM 689 +#define ROUTINE_SYM 690 +#define ROWS_SYM 691 +#define ROW_FORMAT_SYM 692 +#define ROW_SYM 693 +#define RTREE_SYM 694 +#define SAVEPOINT_SYM 695 +#define SCHEDULE_SYM 696 +#define SCHEMA_NAME_SYM 697 +#define SECOND_MICROSECOND_SYM 698 +#define SECOND_SYM 699 +#define SECURITY_SYM 700 +#define SELECT_SYM 701 +#define SENSITIVE_SYM 702 +#define SEPARATOR_SYM 703 +#define SERIALIZABLE_SYM 704 +#define SERIAL_SYM 705 +#define SESSION_SYM 706 +#define SERVER_SYM 707 +#define SERVER_OPTIONS 708 +#define SET 709 +#define SET_VAR 710 +#define SHARE_SYM 711 +#define SHIFT_LEFT 712 +#define SHIFT_RIGHT 713 +#define SHOW 714 +#define SHUTDOWN 715 +#define SIGNAL_SYM 716 +#define SIGNED_SYM 717 +#define SIMPLE_SYM 718 +#define SLAVE 719 +#define SLOW 720 +#define SMALLINT 721 +#define SNAPSHOT_SYM 722 +#define SOCKET_SYM 723 +#define SONAME_SYM 724 +#define SOUNDS_SYM 725 +#define SOURCE_SYM 726 +#define SPATIAL_SYM 727 +#define SPECIFIC_SYM 728 +#define SQLEXCEPTION_SYM 729 +#define SQLSTATE_SYM 730 +#define SQLWARNING_SYM 731 +#define SQL_BIG_RESULT 732 +#define SQL_BUFFER_RESULT 733 +#define SQL_CACHE_SYM 734 +#define SQL_CALC_FOUND_ROWS 735 +#define SQL_NO_CACHE_SYM 736 +#define SQL_SMALL_RESULT 737 +#define SQL_SYM 738 +#define SQL_THREAD 739 +#define SSL_SYM 740 +#define STARTING 741 +#define STARTS_SYM 742 +#define START_SYM 743 +#define STATUS_SYM 744 +#define STDDEV_SAMP_SYM 745 +#define STD_SYM 746 +#define STOP_SYM 747 +#define STORAGE_SYM 748 +#define STRAIGHT_JOIN 749 +#define STRING_SYM 750 +#define SUBCLASS_ORIGIN_SYM 751 +#define SUBDATE_SYM 752 +#define SUBJECT_SYM 753 +#define SUBPARTITIONS_SYM 754 +#define SUBPARTITION_SYM 755 +#define SUBSTRING 756 +#define SUM_SYM 757 +#define SUPER_SYM 758 +#define SUSPEND_SYM 759 +#define SWAPS_SYM 760 +#define SWITCHES_SYM 761 +#define SYSDATE 762 +#define TABLES 763 +#define TABLESPACE 764 +#define TABLE_REF_PRIORITY 765 +#define TABLE_SYM 766 +#define TABLE_CHECKSUM_SYM 767 +#define TABLE_NAME_SYM 768 +#define TEMPORARY 769 +#define TEMPTABLE_SYM 770 +#define TERMINATED 771 +#define TEXT_STRING 772 +#define TEXT_SYM 773 +#define THAN_SYM 774 +#define THEN_SYM 775 +#define TIMESTAMP 776 +#define TIMESTAMP_ADD 777 +#define TIMESTAMP_DIFF 778 +#define TIME_SYM 779 +#define TINYBLOB 780 +#define TINYINT 781 +#define TINYTEXT 782 +#define TO_SYM 783 +#define TRAILING 784 +#define TRANSACTION_SYM 785 +#define TRIGGERS_SYM 786 +#define TRIGGER_SYM 787 +#define TRIM 788 +#define TRUE_SYM 789 +#define TRUNCATE_SYM 790 +#define TYPES_SYM 791 +#define TYPE_SYM 792 +#define UDF_RETURNS_SYM 793 +#define ULONGLONG_NUM 794 +#define UNCOMMITTED_SYM 795 +#define UNDEFINED_SYM 796 +#define UNDERSCORE_CHARSET 797 +#define UNDOFILE_SYM 798 +#define UNDO_BUFFER_SIZE_SYM 799 +#define UNDO_SYM 800 +#define UNICODE_SYM 801 +#define UNINSTALL_SYM 802 +#define UNION_SYM 803 +#define UNIQUE_SYM 804 +#define UNKNOWN_SYM 805 +#define UNLOCK_SYM 806 +#define UNSIGNED 807 +#define UNTIL_SYM 808 +#define UPDATE_SYM 809 +#define UPGRADE_SYM 810 +#define USAGE 811 +#define USER 812 +#define USE_FRM 813 +#define USE_SYM 814 +#define USING 815 +#define UTC_DATE_SYM 816 +#define UTC_TIMESTAMP_SYM 817 +#define UTC_TIME_SYM 818 +#define VALUES 819 +#define VALUE_SYM 820 +#define VARBINARY 821 +#define VARCHAR 822 +#define VARIABLES 823 +#define VARIANCE_SYM 824 +#define VARYING 825 +#define VAR_SAMP_SYM 826 +#define VIEW_SYM 827 +#define WAIT_SYM 828 +#define WARNINGS 829 +#define WEEK_SYM 830 +#define WHEN_SYM 831 +#define WHERE 832 +#define WHILE_SYM 833 +#define WITH 834 +#define WITH_CUBE_SYM 835 +#define WITH_ROLLUP_SYM 836 +#define WORK_SYM 837 +#define WRAPPER_SYM 838 +#define WRITE_SYM 839 +#define X509_SYM 840 +#define XA_SYM 841 +#define XML_SYM 842 +#define XOR 843 +#define YEAR_MONTH_SYM 844 +#define YEAR_SYM 845 +#define ZEROFILL 846 + + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +{ + +/* Line 1676 of yacc.c */ +#line 724 "/home/bzr/mkindahl/w4877-trunk-20100323/sql/sql_yacc.yy" + + int num; + ulong ulong_num; + ulonglong ulonglong_number; + longlong longlong_number; + LEX_STRING lex_str; + LEX_STRING *lex_str_ptr; + LEX_SYMBOL symbol; + Table_ident *table; + char *simple_string; + Item *item; + Item_num *item_num; + List<Item> *item_list; + List<String> *string_list; + String *string; + Key_part_spec *key_part; + TABLE_LIST *table_list; + udf_func *udf; + LEX_USER *lex_user; + struct sys_var_with_base variable; + enum enum_var_type var_type; + Key::Keytype key_type; + enum ha_key_alg key_alg; + handlerton *db_type; + enum row_type row_type; + enum ha_rkey_function ha_rkey_mode; + enum enum_tx_isolation tx_isolation; + enum Cast_target cast_type; + enum Item_udftype udf_type; + CHARSET_INFO *charset; + thr_lock_type lock_type; + interval_type interval, interval_time_st; + timestamp_type date_time_type; + st_select_lex *select_lex; + chooser_compare_func_creator boolfunc2creator; + struct sp_cond_type *spcondtype; + struct { int vars, conds, hndlrs, curs; } spblock; + sp_name *spname; + LEX *lex; + sp_head *sphead; + struct p_elem_val *p_elem_value; + enum index_hint_type index_hint; + enum enum_filetype filetype; + enum Foreign_key::fk_option m_fk_option; + Diag_condition_item_name diag_condition_item_name; + + + +/* Line 1676 of yacc.c */ +#line 1283 "/home/bzr/mkindahl/w4877-trunk-20100323/sql/sql_yacc.h" +} YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +#endif + + + + diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index ea9605687d3..207e72404ef 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -35,7 +35,14 @@ #define YYMAXDEPTH 3200 /* Because of 64K stack */ #define Lex (YYTHD->lex) #define Select Lex->current_select -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" // REQUIRED: for other includes +#include "sql_parse.h" /* comp_*_creator */ +#include "sql_table.h" /* primary_key_name */ +#include "sql_partition.h" /* mem_alloc_error, partition_info, HASH_PARTITION */ +#include "sql_acl.h" /* *_ACL */ +#include "password.h" /* my_make_scrambled_password_323, my_make_scrambled_password */ +#include "sql_class.h" /* Key_part_spec, enum_filetype, Diag_condition_item_name */ #include "slave.h" #include "lex_symbol.h" #include "item_create.h" diff --git a/sql/strfunc.cc b/sql/strfunc.cc index d7ab102b225..a0e2f39f8dc 100644 --- a/sql/strfunc.cc +++ b/sql/strfunc.cc @@ -15,7 +15,13 @@ /* Some useful string utility functions used by the MySQL server */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "strfunc.h" +#include "sql_class.h" +#include "typelib.h" // TYPELIB +#include "m_ctype.h" // my_charset_latin1 +#include "mysqld.h" // system_charset_info /* Return bitmap for strings used in a set diff --git a/sql/strfunc.h b/sql/strfunc.h new file mode 100644 index 00000000000..f1eb83ff0de --- /dev/null +++ b/sql/strfunc.h @@ -0,0 +1,51 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef STRFUNC_INCLUDED +#define STRFUNC_INCLUDED + +#include "my_global.h" /* ulonglong, uint */ + +typedef struct charset_info_st CHARSET_INFO; +typedef struct st_mysql_lex_string LEX_STRING; +typedef struct st_typelib TYPELIB; + +ulonglong find_set(TYPELIB *lib, const char *x, uint length, CHARSET_INFO *cs, + char **err_pos, uint *err_len, bool *set_warning); +ulonglong find_set_from_flags(TYPELIB *lib, uint default_name, + ulonglong cur_set, ulonglong default_set, + const char *str, uint length, CHARSET_INFO *cs, + char **err_pos, uint *err_len, bool *set_warning); +uint find_type(const TYPELIB *lib, const char *find, uint length, + bool part_match); +uint find_type2(const TYPELIB *lib, const char *find, uint length, + CHARSET_INFO *cs); +void unhex_type2(TYPELIB *lib); +uint check_word(TYPELIB *lib, const char *val, const char *end, + const char **end_of_word); +int find_string_in_array(LEX_STRING * const haystack, LEX_STRING * const needle, + CHARSET_INFO * const cs); +char *flagset_to_string(THD *thd, LEX_STRING *result, ulonglong set, + const char *lib[]); +char *set_to_string(THD *thd, LEX_STRING *result, ulonglong set, + const char *lib[]); + +/* + These functions were protected by INNODB_COMPATIBILITY_HOOKS + */ +uint strconvert(CHARSET_INFO *from_cs, const char *from, + CHARSET_INFO *to_cs, char *to, uint to_length, uint *errors); + +#endif /* STRFUNC_INCLUDED */ diff --git a/sql/structs.h b/sql/structs.h index 6d2cf54d693..5ffcc4dc62e 100644 --- a/sql/structs.h +++ b/sql/structs.h @@ -17,10 +17,18 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + /* The old structures from unireg */ +#include "sql_plugin.h" /* plugin_ref */ +#include "sql_const.h" /* MAX_REFLENGTH */ +#include "my_time.h" /* enum_mysql_timestamp_type */ +#include "thr_lock.h" /* thr_lock_type */ +#include "my_base.h" /* ha_rows, ha_key_alg */ + struct TABLE; class Field; + class THD; typedef struct st_date_time_format { diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index e14286210b4..9fcf968ff31 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -27,6 +27,8 @@ (for example in storage/myisam/ha_myisam.cc) ! */ +#include "sql_priv.h" +#include "sql_class.h" // set_var.h: THD #include "sys_vars.h" #include "events.h" @@ -34,12 +36,26 @@ #include "slave.h" #include "rpl_mi.h" #include "transaction.h" +#include "mysqld.h" +#include "lock.h" +#include "sql_time.h" // known_date_time_formats +#include "sql_acl.h" // SUPER_ACL, + // mysql_user_table_is_in_short_password_format +#include "derror.h" // read_texts +#include "sql_base.h" // close_cached_tables #ifdef WITH_PERFSCHEMA_STORAGE_ENGINE #include "../storage/perfschema/pfs_server.h" #endif /* WITH_PERFSCHEMA_STORAGE_ENGINE */ /* + This forward declaration is needed because including sql_base.h + causes further includes. [TODO] Eliminate this forward declaration + and include a file with the prototype instead. +*/ +extern void close_thread_tables(THD *thd); + +/* The rule for this file: everything should be 'static'. When a sys_var variable or a function from this file is - in very rare cases - needed elsewhere it should be explicitly declared 'export' here to show that it's diff --git a/sql/sys_vars.h b/sql/sys_vars.h index ccc36c72786..c4855ef4fd3 100644 --- a/sql/sys_vars.h +++ b/sql/sys_vars.h @@ -26,6 +26,8 @@ #include <my_bit.h> #include <my_dir.h> #include "keycaches.h" +#include "strfunc.h" +#include "tztime.h" // my_tz_find, my_tz_SYSTEM, struct Time_zone /* a set of mostly trivial (as in f(X)=X) defines below to make system variable diff --git a/sql/sys_vars_shared.h b/sql/sys_vars_shared.h index a8ef9034715..644cc10c853 100644 --- a/sql/sys_vars_shared.h +++ b/sql/sys_vars_shared.h @@ -1,3 +1,6 @@ +#ifndef SYS_VARS_SHARED_INCLUDED +#define SYS_VARS_SHARED_INCLUDED + /* Copyright (C) 2002-2006 MySQL AB, 2009-2010 Sun Microsystems, Inc. This program is free software; you can redistribute it and/or modify @@ -22,7 +25,7 @@ classes in the sys_var hierarchy (sql_plugin.cc) */ -#include <mysql_priv.h> +#include <sql_priv.h> #include "set_var.h" extern bool throw_bounds_warning(THD *thd, const char *name, @@ -79,3 +82,5 @@ public: ~AutoRLock() { if (lock) lock->unlock(); } }; + +#endif /* SYS_VARS_SHARED_INCLUDED */ diff --git a/sql/table.cc b/sql/table.cc index 94f3037a81b..d624c25877f 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -16,8 +16,20 @@ /* Some general useful functions */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" // REQUIRED: for other includes +#include "table.h" +#include "frm_crypt.h" // get_crypt_for_frm +#include "key.h" // find_ref_key +#include "sql_table.h" // build_table_filename, + // primary_key_name #include "sql_trigger.h" +#include "sql_parse.h" // free_items +#include "strfunc.h" // unhex_type2 +#include "sql_partition.h" // mysql_unpack_partition, + // fix_partition_func, partition_info +#include "sql_acl.h" // *_ACL, acl_getroot_no_password +#include "sql_base.h" // release_table_share #include <m_ctype.h> #include "my_md5.h" diff --git a/sql/table.h b/sql/table.h index 3832e7c9555..f626ac6ca59 100644 --- a/sql/table.h +++ b/sql/table.h @@ -17,8 +17,16 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "sql_plist.h" +#include "sql_list.h" /* Sql_alloc */ #include "mdl.h" +#ifndef MYSQL_CLIENT + +#include "hash.h" /* HASH */ +#include "handler.h" /* row_type, ha_choice, handler */ +#include "mysql_com.h" /* enum_field_types */ +#include "thr_lock.h" /* thr_lock_type */ + /* Structs that defines the TABLE */ class Item; /* Needed by ORDER */ @@ -30,12 +38,145 @@ class st_select_lex; class partition_info; class COND_EQUAL; class Security_context; +class TABLE_LIST; class ACL_internal_schema_access; class ACL_internal_table_access; +class TABLE_LIST; +class Field; + +/* + Used to identify NESTED_JOIN structures within a join (applicable only to + structures that have not been simplified away and embed more the one + element) +*/ +typedef ulonglong nested_join_map; + + +#define tmp_file_prefix "#sql" /**< Prefix for tmp tables */ +#define tmp_file_prefix_length 4 +#define TMP_TABLE_KEY_EXTRA 8 + +/** + Enumerate possible types of a table from re-execution + standpoint. + TABLE_LIST class has a member of this type. + At prepared statement prepare, this member is assigned a value + as of the current state of the database. Before (re-)execution + of a prepared statement, we check that the value recorded at + prepare matches the type of the object we obtained from the + table definition cache. + + @sa check_and_update_table_version() + @sa Execute_observer + @sa Prepared_statement::reprepare() +*/ + +enum enum_table_ref_type +{ + /** Initial value set by the parser */ + TABLE_REF_NULL= 0, + TABLE_REF_VIEW, + TABLE_REF_BASE_TABLE, + TABLE_REF_I_S_TABLE, + TABLE_REF_TMP_TABLE +}; + + +/** + Opening modes for open_temporary_table and open_table_from_share +*/ + +enum open_table_mode +{ + OTM_OPEN= 0, + OTM_CREATE= 1, + OTM_ALTER= 2 +}; + /*************************************************************************/ /** + Object_creation_ctx -- interface for creation context of database objects + (views, stored routines, events, triggers). Creation context -- is a set + of attributes, that should be fixed at the creation time and then be used + each time the object is parsed or executed. +*/ + +class Object_creation_ctx +{ +public: + Object_creation_ctx *set_n_backup(THD *thd); + + void restore_env(THD *thd, Object_creation_ctx *backup_ctx); + +protected: + Object_creation_ctx() {} + virtual Object_creation_ctx *create_backup_ctx(THD *thd) const = 0; + + virtual void change_env(THD *thd) const = 0; + +public: + virtual ~Object_creation_ctx() + { } +}; + +/*************************************************************************/ + +/** + Default_object_creation_ctx -- default implementation of + Object_creation_ctx. +*/ + +class Default_object_creation_ctx : public Object_creation_ctx +{ +public: + CHARSET_INFO *get_client_cs() + { + return m_client_cs; + } + + CHARSET_INFO *get_connection_cl() + { + return m_connection_cl; + } + +protected: + Default_object_creation_ctx(THD *thd); + + Default_object_creation_ctx(CHARSET_INFO *client_cs, + CHARSET_INFO *connection_cl); + +protected: + virtual Object_creation_ctx *create_backup_ctx(THD *thd) const; + + virtual void change_env(THD *thd) const; + +protected: + /** + client_cs stores the value of character_set_client session variable. + The only character set attribute is used. + + Client character set is included into query context, because we save + query in the original character set, which is client character set. So, + in order to parse the query properly we have to switch client character + set on parsing. + */ + CHARSET_INFO *m_client_cs; + + /** + connection_cl stores the value of collation_connection session + variable. Both character set and collation attributes are used. + + Connection collation is included into query context, becase it defines + the character set and collation of text literals in internal + representation of query (item-objects). + */ + CHARSET_INFO *m_connection_cl; +}; + + +/** View_creation_ctx -- creation context of view objects. */ @@ -164,15 +305,6 @@ enum tmp_table_type INTERNAL_TMP_TABLE, SYSTEM_TMP_TABLE }; -/** Event on which trigger is invoked. */ -enum trg_event_type -{ - TRG_EVENT_INSERT= 0, - TRG_EVENT_UPDATE= 1, - TRG_EVENT_DELETE= 2, - TRG_EVENT_MAX -}; - enum frm_type_enum { FRMTYPE_ERROR= 0, @@ -1859,4 +1991,82 @@ size_t max_row_length(TABLE *table, const uchar *data); void init_mdl_requests(TABLE_LIST *table_list); +int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias, + uint db_stat, uint prgflag, uint ha_open_flags, + TABLE *outparam, bool is_create_table); +TABLE_SHARE *alloc_table_share(TABLE_LIST *table_list, char *key, + uint key_length); +void init_tmp_table_share(THD *thd, TABLE_SHARE *share, const char *key, + uint key_length, + const char *table_name, const char *path); +void free_table_share(TABLE_SHARE *share); +int open_table_def(THD *thd, TABLE_SHARE *share, uint db_flags); +void open_table_error(TABLE_SHARE *share, int error, int db_errno, int errarg); +void update_create_info_from_table(HA_CREATE_INFO *info, TABLE *form); +bool check_and_convert_db_name(LEX_STRING *db, bool preserve_lettercase); +bool check_db_name(LEX_STRING *db); +bool check_column_name(const char *name); +bool check_table_name(const char *name, uint length); +int rename_file_ext(const char * from,const char * to,const char * ext); +char *get_field(MEM_ROOT *mem, Field *field); +bool get_field(MEM_ROOT *mem, Field *field, class String *res); + +int closefrm(TABLE *table, bool free_share); +int read_string(File file, uchar* *to, size_t length); +void free_blobs(TABLE *table); +void free_field_buffers_larger_than(TABLE *table, uint32 size); +int set_zone(int nr,int min_zone,int max_zone); +ulong get_form_pos(File file, uchar *head, TYPELIB *save_names); +ulong make_new_entry(File file,uchar *fileinfo,TYPELIB *formnames, + const char *newname); +ulong next_io_size(ulong pos); +void append_unescaped(String *res, const char *pos, uint length); +File create_frm(THD *thd, const char *name, const char *db, + const char *table, uint reclength, uchar *fileinfo, + HA_CREATE_INFO *create_info, uint keys, KEY *key_info); +char *fn_rext(char *name); + +/* performance schema */ +extern LEX_STRING PERFORMANCE_SCHEMA_DB_NAME; + +extern LEX_STRING GENERAL_LOG_NAME; +extern LEX_STRING SLOW_LOG_NAME; + +/* information schema */ +extern LEX_STRING INFORMATION_SCHEMA_NAME; +extern LEX_STRING MYSQL_SCHEMA_NAME; + +inline bool is_infoschema_db(const char *name, size_t len) +{ + return (INFORMATION_SCHEMA_NAME.length == len && + !my_strcasecmp(system_charset_info, + INFORMATION_SCHEMA_NAME.str, name)); +} + +inline bool is_infoschema_db(const char *name) +{ + return !my_strcasecmp(system_charset_info, + INFORMATION_SCHEMA_NAME.str, name); +} + +TYPELIB *typelib(MEM_ROOT *mem_root, List<String> &strings); + +/** + return true if the table was created explicitly. +*/ +inline bool is_user_table(TABLE * table) +{ + const char *name= table->s->table_name.str; + return strncmp(name, tmp_file_prefix, tmp_file_prefix_length); +} + +inline void mark_as_null_row(TABLE *table) +{ + table->null_row=1; + table->status|=STATUS_NULL_ROW; + bfill(table->null_flags,table->s->null_bytes,255); +} + +#endif /* MYSQL_CLIENT */ + #endif /* TABLE_INCLUDED */ diff --git a/sql/thr_malloc.cc b/sql/thr_malloc.cc index ed17f7968c0..638f3bbb9f1 100644 --- a/sql/thr_malloc.cc +++ b/sql/thr_malloc.cc @@ -16,7 +16,10 @@ /* Mallocs for used in threads */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "thr_malloc.h" +#include "sql_class.h" extern "C" { void sql_alloc_error_handler(void) diff --git a/sql/thr_malloc.h b/sql/thr_malloc.h new file mode 100644 index 00000000000..a655884b8b4 --- /dev/null +++ b/sql/thr_malloc.h @@ -0,0 +1,36 @@ +/* Copyright 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef THR_MALLOC_INCLUDED +#define THR_MALLOC_INCLUDED + +#include "my_global.h" // uint, size_t + +typedef struct charset_info_st CHARSET_INFO; +typedef struct st_mem_root MEM_ROOT; + +void init_sql_alloc(MEM_ROOT *root, uint block_size, uint pre_alloc_size); +void *sql_alloc(size_t); +void *sql_calloc(size_t); +char *sql_strdup(const char *str); +char *sql_strmake(const char *str, size_t len); +void *sql_memdup(const void * ptr, size_t size); +void sql_element_free(void *ptr); +char *sql_strmake_with_convert(const char *str, size_t arg_length, + CHARSET_INFO *from_cs, + size_t max_res_length, + CHARSET_INFO *to_cs, size_t *result_length); + +#endif /* THR_MALLOC_INCLUDED */ diff --git a/sql/transaction.cc b/sql/transaction.cc index 8d9b4943404..ff4eabc2b0f 100644 --- a/sql/transaction.cc +++ b/sql/transaction.cc @@ -18,7 +18,7 @@ #pragma implementation // gcc: Class implementation #endif -#include "mysql_priv.h" +#include "sql_priv.h" #include "transaction.h" #include "rpl_handler.h" diff --git a/sql/tztime.cc b/sql/tztime.cc index 7d88b7276f2..b23456b5465 100644 --- a/sql/tztime.cc +++ b/sql/tztime.cc @@ -20,7 +20,7 @@ */ /* - We should not include mysql_priv.h in mysql_tzinfo_to_sql utility since + We should not include sql_priv.h in mysql_tzinfo_to_sql utility since it creates unsolved link dependencies on some platforms. */ @@ -30,7 +30,12 @@ #include <my_global.h> #if !defined(TZINFO2SQL) && !defined(TESTTIME) -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "tztime.h" +#include "sql_time.h" // localtime_to_TIME +#include "sql_base.h" // open_system_tables_for_read, + // close_system_tables #else #include <my_time.h> #include "tztime.h" @@ -41,6 +46,15 @@ #include <m_string.h> #include <my_dir.h> #include <mysql/psi/mysql_file.h> +#include "lock.h" // MYSQL_LOCK_IGNORE_FLUSH, + // MYSQL_LOCK_IGNORE_TIMEOUT + +/* + This forward declaration is needed because including sql_base.h + causes further includes. [TODO] Eliminate this forward declaration + and include a file with the prototype instead. +*/ +extern void close_thread_tables(THD *thd); /* Now we don't use abbreviations in server but we will do this in future. diff --git a/sql/tztime.h b/sql/tztime.h index 9990e91f17b..f3fea485152 100644 --- a/sql/tztime.h +++ b/sql/tztime.h @@ -21,8 +21,17 @@ #pragma interface /* gcc class interface */ #endif +#include "my_time.h" /* my_time_t */ +#include "mysql_time.h" /* MYSQL_TIME */ +#include "sql_list.h" /* Sql_alloc */ +#include "sql_string.h" /* String */ + +class THD; + #if !defined(TESTTIME) && !defined(TZINFO2SQL) +class THD; + /** This class represents abstract time zone and provides basic interface for MYSQL_TIME <-> my_time_t conversion. diff --git a/sql/uniques.cc b/sql/uniques.cc index f7c290ae61d..7b5a6d1ce4f 100644 --- a/sql/uniques.cc +++ b/sql/uniques.cc @@ -30,9 +30,12 @@ deletes in disk order. */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" #include "sql_sort.h" - +#include "queues.h" // QUEUE +#include "my_tree.h" // element_count +#include "sql_class.h" // Unique int unique_write_to_file(uchar* key, element_count count, Unique *unique) { diff --git a/sql/unireg.cc b/sql/unireg.cc index c7d2f2f5b5b..dbe4e8712ea 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -23,7 +23,11 @@ str is a (long) to record position where 0 is the first position. */ -#include "mysql_priv.h" +#include "sql_priv.h" +#include "unireg.h" +#include "sql_partition.h" // struct partition_info +#include "sql_table.h" // check_duplicate_warning +#include "sql_class.h" // THD, Internal_error_handler #include <m_ctype.h> #include <assert.h> diff --git a/sql/unireg.h b/sql/unireg.h index 9932be7ae74..dbbeea077a9 100644 --- a/sql/unireg.h +++ b/sql/unireg.h @@ -17,8 +17,13 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include "my_global.h" /* ulonglong */ +#include "mysql_version.h" /* FRM_VER */ + /* Extra functions used by unireg library */ +typedef struct st_ha_create_information HA_CREATE_INFO; + #ifndef NO_ALARM_LOOP #define NO_ALARM_LOOP /* lib5 and popen can't use alarm */ #endif @@ -52,71 +57,6 @@ #define ERRMAPP 1 /* Errormap f|r my_error */ -#define LIBLEN FN_REFLEN-FN_LEN /* Max l{ngd p} dev */ -/* extra 4+4 bytes for slave tmp tables */ -#define MAX_DBKEY_LENGTH (NAME_LEN*2+1+1+4+4) -#define MAX_ALIAS_NAME 256 -#define MAX_FIELD_NAME 34 /* Max colum name length +2 */ -#define MAX_SYS_VAR_LENGTH 32 -#define MAX_KEY MAX_INDEXES /* Max used keys */ -#define MAX_REF_PARTS 16 /* Max parts used as ref */ -#define MAX_KEY_LENGTH 3072 /* max possible key */ -#if SIZEOF_OFF_T > 4 -#define MAX_REFLENGTH 8 /* Max length for record ref */ -#else -#define MAX_REFLENGTH 4 /* Max length for record ref */ -#endif -#define MAX_HOSTNAME 61 /* len+1 in mysql.user */ - -#define MAX_MBWIDTH 3 /* Max multibyte sequence */ -#define MAX_FIELD_CHARLENGTH 255 -#define MAX_FIELD_VARCHARLENGTH 65535 -#define MAX_FIELD_BLOBLENGTH UINT_MAX32 /* cf field_blob::get_length() */ -#define CONVERT_IF_BIGGER_TO_BLOB 512 /* Used for CREATE ... SELECT */ - -/* Max column width +1 */ -#define MAX_FIELD_WIDTH (MAX_FIELD_CHARLENGTH*MAX_MBWIDTH+1) - -#define MAX_BIT_FIELD_LENGTH 64 /* Max length in bits for bit fields */ - -#define MAX_DATE_WIDTH 10 /* YYYY-MM-DD */ -#define MAX_TIME_WIDTH 23 /* -DDDDDD HH:MM:SS.###### */ -#define MAX_DATETIME_FULL_WIDTH 29 /* YYYY-MM-DD HH:MM:SS.###### AM */ -#define MAX_DATETIME_WIDTH 19 /* YYYY-MM-DD HH:MM:SS */ -#define MAX_DATETIME_COMPRESSED_WIDTH 14 /* YYYYMMDDHHMMSS */ - -#define MAX_TABLES (sizeof(table_map)*8-3) /* Max tables in join */ -#define PARAM_TABLE_BIT (((table_map) 1) << (sizeof(table_map)*8-3)) -#define OUTER_REF_TABLE_BIT (((table_map) 1) << (sizeof(table_map)*8-2)) -#define RAND_TABLE_BIT (((table_map) 1) << (sizeof(table_map)*8-1)) -#define PSEUDO_TABLE_BITS (PARAM_TABLE_BIT | OUTER_REF_TABLE_BIT | \ - RAND_TABLE_BIT) -#define MAX_FIELDS 4096 /* Limit in the .frm file */ -#define MAX_PARTITIONS 1024 - -#define MAX_SELECT_NESTING (sizeof(nesting_map)*8-1) - -#define MAX_SORT_MEMORY 2048*1024 -#define MIN_SORT_MEMORY 32*1024 - -/* Memory allocated when parsing a statement / saving a statement */ -#define MEM_ROOT_BLOCK_SIZE 8192 -#define MEM_ROOT_PREALLOC 8192 -#define TRANS_MEM_ROOT_BLOCK_SIZE 4096 -#define TRANS_MEM_ROOT_PREALLOC 4096 - -#define DEFAULT_ERROR_COUNT 64 -#define EXTRA_RECORDS 10 /* Extra records in sort */ -#define SCROLL_EXTRA 5 /* Extra scroll-rows. */ -#define FIELD_NAME_USED ((uint) 32768) /* Bit set if fieldname used */ -#define FORM_NAME_USED ((uint) 16384) /* Bit set if formname used */ -#define FIELD_NR_MASK 16383 /* To get fieldnumber */ -#define FERR -1 /* Error from my_functions */ -#define CREATE_MODE 0 /* Default mode on new files */ -#define NAMES_SEP_CHAR '\377' /* Char to sep. names */ - -#define READ_RECORD_BUFFER (uint) (IO_SIZE*8) /* Pointer_buffer_size */ -#define DISK_BUFFER_SIZE (uint) (IO_SIZE*16) /* Size of diskbuffer */ #define ME_INFO (ME_HOLDTANG+ME_OLDWIN+ME_NOREFRESH) #define ME_ERROR (ME_BELL+ME_OLDWIN+ME_NOREFRESH) @@ -206,7 +146,6 @@ #define TE_INFO_LENGTH 3 #define MTYP_NOEMPTY_BIT 128 -#define FRM_VER_TRUE_VARCHAR (FRM_VER+4) /* 10 */ /* Minimum length pattern before Turbo Boyer-Moore is used for SELECT "text" LIKE "%pattern%", excluding the two @@ -228,5 +167,18 @@ #include "mysqld_error.h" #include "structs.h" /* All structs we need */ - +#include "sql_list.h" /* List<> */ +#include "field.h" /* Create_field */ + +bool mysql_create_frm(THD *thd, const char *file_name, + const char *db, const char *table, + HA_CREATE_INFO *create_info, + List<Create_field> &create_field, + uint key_count,KEY *key_info,handler *db_type); +int rea_create_table(THD *thd, const char *path, + const char *db, const char *table_name, + HA_CREATE_INFO *create_info, + List<Create_field> &create_field, + uint key_count,KEY *key_info, + handler *file); #endif |