mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Added SQLSTATE to client/server protocol
bmove_allign -> bmove_align Added OLAP function ROLLUP Split mysql_fix_privilege_tables to a script and a .sql data file Added new (MEMROOT*) functions to avoid calling current_thd() when creating some common objects. Added table_alias_charset, for easier --lower-case-table-name handling Better SQL_MODE handling (Setting complex options also sets sub options) New (faster) assembler string functions for x86 BitKeeper/etc/ignore: added libmysqld/sql_state.c client/mysql.cc: Added SQLSTATE to error messages Added new function put_error() to be able to clean up some old code. client/mysqltest.c: Write ERROR SQLSTATE for all errors dbug/dbug.c: Portability fixes include/m_string.h: Rename bmove_allign as bmove_align include/mysql.h: Added SQLSTATE (for embedded version) include/mysql_com.h: Send correct SQLSTATE for the error to the client libmysql/libmysql.c: Changed default error state to HY000 Applied code cleanup patch libmysqld/Makefile.am: Added sql_state.cc libmysqld/libmysqld.c: Added sqlstate mysql-test/r/analyse.result: Updated results mysql-test/r/ansi.result: Updated results mysql-test/r/auto_increment.result: Updated results mysql-test/r/bdb-deadlock.result: Updated results mysql-test/r/bdb.result: Updated results mysql-test/r/comments.result: Updated results mysql-test/r/create.result: Updated results mysql-test/r/ctype_collate.result: Updated results mysql-test/r/delayed.result: Updated results mysql-test/r/delete.result: Updated results mysql-test/r/derived.result: Updated results mysql-test/r/distinct.result: Updated results mysql-test/r/drop.result: Updated results mysql-test/r/err000001.result: Updated results mysql-test/r/explain.result: Updated results mysql-test/r/flush.result: Updated results mysql-test/r/fulltext.result: Updated results mysql-test/r/func_gconcat.result: Updated results mysql-test/r/func_system.result: Updated results mysql-test/r/grant_cache.result: Updated results mysql-test/r/group_by.result: Updated results mysql-test/r/handler.result: Updated results mysql-test/r/heap.result: Updated results mysql-test/r/heap_btree.result: Updated results mysql-test/r/heap_hash.result: Updated results mysql-test/r/innodb.result: Updated results mysql-test/r/innodb_handler.result: Updated results mysql-test/r/insert_select.result: Updated results mysql-test/r/insert_update.result: Updated results mysql-test/r/join.result: Updated results mysql-test/r/join_outer.result: Updated results mysql-test/r/key.result: Updated results mysql-test/r/lock.result: Updated results mysql-test/r/lock_multi.result: Updated results mysql-test/r/merge.result: Updated results mysql-test/r/multi_update.result: Updated results mysql-test/r/myisam.result: Updated results mysql-test/r/null.result: Updated results mysql-test/r/olap.result: Updated results mysql-test/r/order_by.result: Updated results mysql-test/r/packet.result: Updated results mysql-test/r/query_cache.result: Updated results mysql-test/r/row.result: Updated results mysql-test/r/rpl000001.result: Updated results mysql-test/r/rpl000009.result: Updated results mysql-test/r/rpl_empty_master_crash.result: Updated results mysql-test/r/rpl_log.result: Updated results mysql-test/r/rpl_replicate_do.result: Updated results mysql-test/r/rpl_rotate_logs.result: Updated results mysql-test/r/select.result: Updated results mysql-test/r/select_safe.result: Updated results mysql-test/r/show_check.result: Updated results mysql-test/r/sql_mode.result: Updated results mysql-test/r/subselect.result: Updated results mysql-test/r/temp_table.result: Updated results mysql-test/r/truncate.result: Updated results mysql-test/r/type_blob.result: Updated results mysql-test/r/type_decimal.result: Updated results mysql-test/r/type_float.result: Updated results mysql-test/r/type_ranges.result: Updated results mysql-test/r/union.result: Updated results mysql-test/r/update.result: Updated results mysql-test/r/user_var.result: Updated results mysql-test/r/varbinary.result: Updated results mysql-test/r/variables.result: Updated results mysql-test/t/ansi.test: Test of sql_mode mysql-test/t/derived.test: Updated results mysql-test/t/func_system.test: Make this independen of the MySQL server name mysql-test/t/lowercase_table.test: Cleanup mysql-test/t/olap.test: A lot of new tests mysql-test/t/sql_mode.test: More test for sql_mode mysql-test/t/subselect.test: Added a few new tests (to find a bug in the item_ref code) scripts/Makefile.am: Added mysql_fix_privilege_tables.sql scripts/mysql_fix_privilege_tables.sh: Totally new script. This bascily just pipes mysql_fix_privilege_tables.sql through 'mysql' to 'mysqld' sql/Makefile.am: Added sql_state.cc sql/item.cc: Extended Item_field::eq() to be able to better match GROUP BY fields on the command line. Needed for ROLLUP sql/item.h: Added function to be able to avoid calling current_thd() when doing new Item. sql/item_sum.cc: Moved copy_or_same() and some reset() functions from item_sum.h Needed to be able to access thd->mem_root. sql/item_sum.h: Moved some functions to item_sum.cc Added make_unique() for ROLLUP sql/item_uniq.h: Fixed return value sql/mysql_priv.h: Updated MODE flags sql/mysqld.cc: Added ANSI as it's own mode Moved charset_info variables here Cleaned up handler_count handling (for NT) Added table_alias_charset, for easier --lower-case-table-name handling sql/net_serv.cc: New comment sql/protocol.cc: Send SQLSTATE to client sql/set_var.cc: Better SQL_MODE handling (Setting complex options also sets sub options) sql/set_var.h: Better SQL_MODE handling sql/sql_base.cc: Make alias depend on --lower-case-table-names Make find_item_in_list also check database name sql/sql_cache.cc: Indentation cleanup sql/sql_list.h: Added safety assert Addes support of alloc without current_thd() sql/sql_prepare.cc: Update after prototype change sql/sql_select.cc: Added ROLLUP sql/sql_select.h: structures for rollup sql/sql_show.cc: Easier SQL_MODE handling sql/sql_string.cc: Move CHARSET_INFO to mysqld (to be together with all other global variables) sql/sql_string.h: Added function to be able to avoid calling current_thd() when doing new Item. sql/sql_table.cc: Simpler --lower-case-table-name handling sql/sql_union.cc: Update after prototype change sql/sql_yacc.yy: ROLLUP sql/unireg.h: bmove_allign ->bmove_align strings/Makefile.am: Fix to be able to compile str_test.c strings/ctype.c: Removed empty lines strings/str_test.c: Added test of bmove_align strings/strings-x86.s: Faster bmove_align, bmove_upp and strmake strings/strings.asm: move_allg
This commit is contained in:
@ -106,12 +106,22 @@ typedef struct st_join_table {
|
||||
} JOIN_TAB;
|
||||
|
||||
|
||||
typedef struct st_position { /* Used in find_best */
|
||||
typedef struct st_position /* Used in find_best */
|
||||
{
|
||||
double records_read;
|
||||
JOIN_TAB *table;
|
||||
KEYUSE *key;
|
||||
} POSITION;
|
||||
|
||||
typedef struct st_rollup
|
||||
{
|
||||
enum State { STATE_NONE, STATE_INITED, STATE_READY };
|
||||
State state;
|
||||
Item *item_null;
|
||||
Item ***ref_pointer_arrays;
|
||||
List<Item> *fields;
|
||||
} ROLLUP;
|
||||
|
||||
|
||||
class JOIN :public Sql_alloc
|
||||
{
|
||||
@ -132,7 +142,7 @@ class JOIN :public Sql_alloc
|
||||
// used to store 2 possible tmp table of SELECT
|
||||
TABLE *exec_tmp_table1, *exec_tmp_table2;
|
||||
THD *thd;
|
||||
Item_sum **sum_funcs;
|
||||
Item_sum **sum_funcs, ***sum_funcs_end;
|
||||
Procedure *procedure;
|
||||
Item *having;
|
||||
Item *tmp_having; // To store Having when processed temporary table
|
||||
@ -146,6 +156,7 @@ class JOIN :public Sql_alloc
|
||||
SELECT_LEX *select_lex;
|
||||
|
||||
JOIN *tmp_join; // copy of this JOIN to be used with temporary tables
|
||||
ROLLUP rollup; // Used with rollup
|
||||
|
||||
bool select_distinct, //Is select distinct?
|
||||
no_order, simple_order, simple_group,
|
||||
@ -159,7 +170,7 @@ class JOIN :public Sql_alloc
|
||||
List<Item> tmp_all_fields1, tmp_all_fields2, tmp_all_fields3;
|
||||
//Part, shared with list above, emulate following list
|
||||
List<Item> tmp_fields_list1, tmp_fields_list2, tmp_fields_list3;
|
||||
List<Item> & fields_list; // hold field list passed to mysql_select
|
||||
List<Item> &fields_list; // hold field list passed to mysql_select
|
||||
int error;
|
||||
|
||||
ORDER *order, *group_list, *proc_param; //hold parameters of mysql_select
|
||||
@ -168,15 +179,15 @@ class JOIN :public Sql_alloc
|
||||
SQL_SELECT *select; //created in optimisation phase
|
||||
Item **ref_pointer_array; //used pointer reference for this select
|
||||
// Copy of above to be used with different lists
|
||||
Item **items0, **items1, **items2, **items3;
|
||||
Item **items0, **items1, **items2, **items3, **current_ref_pointer_array;
|
||||
uint ref_pointer_array_size; // size of above in bytes
|
||||
const char *zero_result_cause; // not 0 if exec must return zero result
|
||||
|
||||
bool union_part; // this subselect is part of union
|
||||
bool optimized; // flag to avoid double optimization in EXPLAIN
|
||||
|
||||
JOIN(THD *thd, List<Item> &fields,
|
||||
ulong select_options, select_result *result):
|
||||
JOIN(THD *thd_arg, List<Item> &fields, ulong select_options_arg,
|
||||
select_result *result_arg):
|
||||
join_tab(0),
|
||||
table(0),
|
||||
tables(0), const_tables(0),
|
||||
@ -184,13 +195,13 @@ class JOIN :public Sql_alloc
|
||||
do_send_rows(1),
|
||||
send_records(0), found_records(0), examined_rows(0),
|
||||
exec_tmp_table1(0), exec_tmp_table2(0),
|
||||
thd(thd),
|
||||
thd(thd_arg),
|
||||
sum_funcs(0),
|
||||
procedure(0),
|
||||
having(0), tmp_having(0),
|
||||
select_options(select_options),
|
||||
result(result),
|
||||
lock(thd->lock),
|
||||
select_options(select_options_arg),
|
||||
result(result_arg),
|
||||
lock(thd_arg->lock),
|
||||
select_lex(0), //for safety
|
||||
tmp_join(0),
|
||||
select_distinct(test(select_options & SELECT_DISTINCT)),
|
||||
@ -212,6 +223,7 @@ class JOIN :public Sql_alloc
|
||||
bzero((char*) &keyuse,sizeof(keyuse));
|
||||
tmp_table_param.copy_field=0;
|
||||
tmp_table_param.end_write_records= HA_POS_ERROR;
|
||||
rollup.state= ROLLUP::STATE_NONE;
|
||||
}
|
||||
|
||||
int prepare(Item ***rref_pointer_array, TABLE_LIST *tables, uint wind_num,
|
||||
@ -221,15 +233,28 @@ class JOIN :public Sql_alloc
|
||||
int optimize();
|
||||
int reinit();
|
||||
void exec();
|
||||
int cleanup(THD *thd);
|
||||
int cleanup();
|
||||
void restore_tmp();
|
||||
bool alloc_func_list();
|
||||
bool make_sum_func_list(List<Item> &all_fields, List<Item> &send_fields,
|
||||
bool before_group_by);
|
||||
|
||||
inline void set_items_ref_array(Item **ptr)
|
||||
{
|
||||
memcpy((char*) ref_pointer_array, (char*) ptr, ref_pointer_array_size);
|
||||
current_ref_pointer_array= ptr;
|
||||
}
|
||||
inline void init_items_ref_array()
|
||||
{
|
||||
items0= ref_pointer_array + all_fields.elements;
|
||||
ref_pointer_array_size= all_fields.elements*sizeof(Item*);
|
||||
memcpy(items0, ref_pointer_array, ref_pointer_array_size);
|
||||
current_ref_pointer_array= items0;
|
||||
}
|
||||
|
||||
bool rollup_init();
|
||||
bool rollup_make_fields(List<Item> &all_fields, List<Item> &fields,
|
||||
Item_sum ***func);
|
||||
int JOIN::rollup_send_data(uint idx);
|
||||
};
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user