summaryrefslogtreecommitdiff
path: root/libmysqld/emb_qcache.cc
diff options
context:
space:
mode:
authorunknown <monty@mysql.com>2006-02-24 18:34:15 +0200
committerunknown <monty@mysql.com>2006-02-24 18:34:15 +0200
commit0afb6ff66082f64c7c0aea62662e4c03e7c987c5 (patch)
tree603ae9081a58d9f7bb204327f65d4a8af4425b28 /libmysqld/emb_qcache.cc
parentef1316fadda7b7d8c1b00de6d82576ebc21607cc (diff)
downloadmariadb-git-0afb6ff66082f64c7c0aea62662e4c03e7c987c5.tar.gz
Fixes to embedded server to be able to run tests with it
(Needed for "list of pushes" web page and autopush) include/mysql.h: Fix to embedded server to be able to run tests on it libmysql/libmysql.c: Fix to embedded server to be able to run tests on it libmysqld/emb_qcache.cc: Fix to embedded server to be able to run tests on it libmysqld/embedded_priv.h: Fix to embedded server to be able to run tests on it libmysqld/lib_sql.cc: Fix to embedded server to be able to run tests on it libmysqld/libmysqld.c: Fix to embedded server to be able to run tests on it mysql-test/mysql-test-run.sh: Fix to embedded server to be able to run tests on it mysql-test/r/binlog.result: Updated test for embedded server mysql-test/r/ctype_cp932.result: Updated test for embedded server mysql-test/r/innodb.result: Updated test for embedded server mysql-test/r/mysqltest.result: Updated test for embedded server mysql-test/r/query_cache.result: Updated test for embedded server mysql-test/r/query_cache_notembedded.result: Updated test for embedded server mysql-test/r/sp-error.result: Updated test for embedded server mysql-test/r/sp.result: Updated test for embedded server mysql-test/r/subselect.result: Updated test for embedded server mysql-test/r/view.result: Updated test for embedded server mysql-test/r/view_grant.result: Updated test for embedded server mysql-test/t/backup.test: Updated test for embedded server mysql-test/t/binlog.test: Updated test for embedded server mysql-test/t/blackhole.test: Updated test for embedded server mysql-test/t/compress.test: Updated test for embedded server mysql-test/t/ctype_cp932.test: Updated test for embedded server mysql-test/t/delayed.test: Updated test for embedded server mysql-test/t/handler.test: Updated test for embedded server mysql-test/t/innodb.test: Updated test for embedded server mysql-test/t/mysql.test: Updated test for embedded server mysql-test/t/mysql_client_test.test: Updated test for embedded server mysql-test/t/mysqltest.test: Updated test for embedded server mysql-test/t/query_cache.test: Updated test for embedded server mysql-test/t/query_cache_notembedded.test: Updated test for embedded server mysql-test/t/read_only.test: Updated test for embedded server mysql-test/t/skip_grants.test: Updated test for embedded server mysql-test/t/sp-destruct.test: Updated test for embedded server mysql-test/t/sp-error.test: Updated test for embedded server mysql-test/t/sp-threads.test: Updated test for embedded server mysql-test/t/sp.test: Updated test for embedded server mysql-test/t/subselect.test: Updated test for embedded server mysql-test/t/temp_table.test: Updated test for embedded server mysql-test/t/view.test: Updated test for embedded server mysql-test/t/view_grant.test: Updated test for embedded server mysql-test/t/wait_timeout.test: Updated test for embedded server mysys/mf_dirname.c: Review fix: Don't access data outside of array mysys/my_bitmap.c: Remove compiler warnings scripts/mysql_fix_privilege_tables.sql: Add flush privileges to .sql script so that one doesn't have to reboot mysqld when one runs the mysql_fix_privilege_script sql-common/client.c: Updated test for embedded server sql/item.cc: Remove DBUG_PRINT statement that can cause crashes when running with --debug sql/mysqld.cc: Fix to embedded server to be able to run tests on it sql/protocol.cc: Fix to embedded server to be able to run tests on it (Trivial reconstruction of code) sql/protocol.h: Fix to embedded server to be able to run tests on it sql/sql_base.cc: Better comment sql/sql_class.cc: Fix to embedded server to be able to run tests on it sql/sql_class.h: Fix to embedded server to be able to run tests on it sql/sql_cursor.cc: Fix to embedded server to be able to run tests on it sql/sql_parse.cc: Fix to embedded server to be able to run tests on it Don't crash for disabled commands when using embedded server sql/sql_prepare.cc: Fix to embedded server to be able to run tests on it mysql-test/r/ctype_cp932_notembedded.result: New BitKeeper file ``mysql-test/r/ctype_cp932_notembedded.result'' mysql-test/r/innodb_notembedded.result: New BitKeeper file ``mysql-test/r/innodb_notembedded.result'' mysql-test/r/sp.result.orig: New BitKeeper file ``mysql-test/r/sp.result.orig'' mysql-test/r/sp_notembedded.result: New BitKeeper file ``mysql-test/r/sp_notembedded.result'' mysql-test/r/subselect_notembedded.result: New BitKeeper file ``mysql-test/r/subselect_notembedded.result'' mysql-test/t/ctype_cp932_notembedded.test: New BitKeeper file ``mysql-test/t/ctype_cp932_notembedded.test'' mysql-test/t/innodb_notembedded.test: New BitKeeper file ``mysql-test/t/innodb_notembedded.test'' mysql-test/t/sp.test.orig: New BitKeeper file ``mysql-test/t/sp.test.orig'' mysql-test/t/sp_notembedded.test: New BitKeeper file ``mysql-test/t/sp_notembedded.test'' mysql-test/t/subselect_notembedded.test: New BitKeeper file ``mysql-test/t/subselect_notembedded.test''
Diffstat (limited to 'libmysqld/emb_qcache.cc')
-rw-r--r--libmysqld/emb_qcache.cc129
1 files changed, 69 insertions, 60 deletions
diff --git a/libmysqld/emb_qcache.cc b/libmysqld/emb_qcache.cc
index ecc45096165..078243a6d5e 100644
--- a/libmysqld/emb_qcache.cc
+++ b/libmysqld/emb_qcache.cc
@@ -18,6 +18,7 @@
#ifdef HAVE_QUERY_CACHE
#include <mysql.h>
#include "emb_qcache.h"
+#include "embedded_priv.h"
void Querycache_stream::store_char(char c)
{
@@ -284,22 +285,25 @@ int Querycache_stream::load_column(MEM_ROOT *alloc, char** column)
uint emb_count_querycache_size(THD *thd)
{
- uint result;
- MYSQL *mysql= thd->mysql;
- MYSQL_FIELD *field= mysql->fields;
- MYSQL_FIELD *field_end= field + mysql->field_count;
- MYSQL_ROWS *cur_row=NULL;
- my_ulonglong n_rows=0;
+ uint result= 0;
+ MYSQL_FIELD *field;
+ MYSQL_FIELD *field_end;
+ MYSQL_ROWS *cur_row;
+ my_ulonglong n_rows;
+ MYSQL_DATA *data= thd->first_data;
+
+ while (data->embedded_info->next)
+ data= data->embedded_info->next;
+ field= data->embedded_info->fields_list;
+ field_end= field + data->fields;
if (!field)
- return 0;
- if (thd->data)
- {
- *thd->data->prev_ptr= NULL; // this marks the last record
- cur_row= thd->data->data;
- n_rows= thd->data->rows;
- }
- result= (uint) (4+8 + (42 + 4*n_rows)*mysql->field_count);
+ return result;
+ *data->embedded_info->prev_ptr= NULL; // this marks the last record
+ cur_row= data->data;
+ n_rows= data->rows;
+ /* n_fields + n_rows + (field_info + strlen * n_rows) * n_fields */
+ result+= (uint) (4+8 + (42 + 4*n_rows)*data->fields);
for(; field < field_end; field++)
{
@@ -313,34 +317,38 @@ uint emb_count_querycache_size(THD *thd)
for (; cur_row; cur_row=cur_row->next)
{
MYSQL_ROW col= cur_row->data;
- MYSQL_ROW col_end= col + mysql->field_count;
+ MYSQL_ROW col_end= col + data->fields;
for (; col < col_end; col++)
if (*col)
- result+= *(uint *)((*col) - sizeof(uint));
+ result+= *(uint *)((*col) - sizeof(uint));
}
return result;
}
void emb_store_querycache_result(Querycache_stream *dst, THD *thd)
{
- MYSQL *mysql= thd->mysql;
- MYSQL_FIELD *field= mysql->fields;
- MYSQL_FIELD *field_end= field + mysql->field_count;
- MYSQL_ROWS *cur_row= NULL;
- my_ulonglong n_rows= 0;
+ MYSQL_FIELD *field;
+ MYSQL_FIELD *field_end;
+ MYSQL_ROWS *cur_row;
+ my_ulonglong n_rows;
+ MYSQL_DATA *data= thd->first_data;
+
+ DBUG_ENTER("emb_store_querycache_result");
+
+ while (data->embedded_info->next)
+ data= data->embedded_info->next;
+ field= data->embedded_info->fields_list;
+ field_end= field + data->fields;
if (!field)
- return;
+ DBUG_VOID_RETURN;
- if (thd->data)
- {
- *thd->data->prev_ptr= NULL; // this marks the last record
- cur_row= thd->data->data;
- n_rows= thd->data->rows;
- }
+ *data->embedded_info->prev_ptr= NULL; // this marks the last record
+ cur_row= data->data;
+ n_rows= data->rows;
- dst->store_int((uint)mysql->field_count);
- dst->store_ll((uint)n_rows);
+ dst->store_int((uint)data->fields);
+ dst->store_ll((ulonglong)n_rows);
for(; field < field_end; field++)
{
@@ -356,14 +364,13 @@ void emb_store_querycache_result(Querycache_stream *dst, THD *thd)
dst->store_str(field->org_table, field->org_table_length);
dst->store_str(field->db, field->db_length);
dst->store_str(field->catalog, field->catalog_length);
-
dst->store_safe_str(field->def, field->def_length);
}
for (; cur_row; cur_row=cur_row->next)
{
MYSQL_ROW col= cur_row->data;
- MYSQL_ROW col_end= col + mysql->field_count;
+ MYSQL_ROW col_end= col + data->fields;
for (; col < col_end; col++)
{
uint len= *col ? *(uint *)((*col) - sizeof(uint)) : 0;
@@ -371,28 +378,34 @@ void emb_store_querycache_result(Querycache_stream *dst, THD *thd)
}
}
DBUG_ASSERT(emb_count_querycache_size(thd) == dst->stored_size);
+ DBUG_VOID_RETURN;
}
int emb_load_querycache_result(THD *thd, Querycache_stream *src)
{
- MYSQL *mysql= thd->mysql;
- MYSQL_DATA *data;
+ MYSQL_DATA *data= thd->alloc_new_dataset();
MYSQL_FIELD *field;
MYSQL_FIELD *field_end;
- MEM_ROOT *f_alloc= &mysql->field_alloc;
+ MEM_ROOT *f_alloc;
MYSQL_ROWS *row, *end_row;
MYSQL_ROWS **prev_row;
ulonglong rows;
MYSQL_ROW columns;
+ DBUG_ENTER("emb_load_querycache_result");
+
+ if (!data)
+ goto err;
+ init_alloc_root(&data->alloc, 8192,0);
+ f_alloc= &data->alloc;
- mysql->field_count= src->load_int();
+ data->fields= src->load_int();
rows= src->load_ll();
if (!(field= (MYSQL_FIELD *)
- alloc_root(&mysql->field_alloc,mysql->field_count*sizeof(MYSQL_FIELD))))
+ alloc_root(f_alloc,data->fields*sizeof(MYSQL_FIELD))))
goto err;
- mysql->fields= field;
- for(field_end= field+mysql->field_count; field < field_end; field++)
+ data->embedded_info->fields_list= field;
+ for(field_end= field+data->fields; field < field_end; field++)
{
field->length= src->load_int();
field->max_length= (unsigned int)src->load_int();
@@ -402,47 +415,43 @@ int emb_load_querycache_result(THD *thd, Querycache_stream *src)
field->decimals= (unsigned int)src->load_char();
if (!(field->name= src->load_str(f_alloc, &field->name_length)) ||
- !(field->table= src->load_str(f_alloc,&field->table_length)) ||
- !(field->org_name= src->load_str(f_alloc, &field->org_name_length)) ||
- !(field->org_table= src->load_str(f_alloc, &field->org_table_length))||
- !(field->db= src->load_str(f_alloc, &field->db_length)) ||
- !(field->catalog= src->load_str(f_alloc, &field->catalog_length)) ||
- src->load_safe_str(f_alloc, &field->def, &field->def_length))
+ !(field->table= src->load_str(f_alloc,&field->table_length)) ||
+ !(field->org_name= src->load_str(f_alloc, &field->org_name_length)) ||
+ !(field->org_table= src->load_str(f_alloc, &field->org_table_length))||
+ !(field->db= src->load_str(f_alloc, &field->db_length)) ||
+ !(field->catalog= src->load_str(f_alloc, &field->catalog_length)) ||
+ src->load_safe_str(f_alloc, &field->def, &field->def_length))
goto err;
}
- if (!rows)
- return 0;
- if (!(data= (MYSQL_DATA*)my_malloc(sizeof(MYSQL_DATA),
- MYF(MY_WME | MY_ZEROFILL))))
- goto err;
- thd->data= data;
- init_alloc_root(&data->alloc, 8192,0);
- row= (MYSQL_ROWS *)alloc_root(&data->alloc, (uint) (rows * sizeof(MYSQL_ROWS) +
- rows * (mysql->field_count+1)*sizeof(char*)));
+ row= (MYSQL_ROWS *)alloc_root(&data->alloc,
+ (uint) (rows * sizeof(MYSQL_ROWS) +
+ rows*(data->fields+1)*sizeof(char*)));
end_row= row + rows;
columns= (MYSQL_ROW)end_row;
data->rows= rows;
- data->fields= mysql->field_count;
data->data= row;
+ if (!rows)
+ goto return_ok;
for (prev_row= &row->next; row < end_row; prev_row= &row->next, row++)
{
*prev_row= row;
row->data= columns;
- MYSQL_ROW col_end= columns + mysql->field_count;
+ MYSQL_ROW col_end= columns + data->fields;
for (; columns < col_end; columns++)
src->load_column(&data->alloc, columns);
*(columns++)= NULL;
}
*prev_row= NULL;
- data->prev_ptr= prev_row;
-
- return 0;
+ data->embedded_info->prev_ptr= prev_row;
+return_ok:
+ send_eof(thd);
+ DBUG_RETURN(0);
err:
- return 1;
+ DBUG_RETURN(1);
}
#endif /*HAVE_QUERY_CACHE*/