mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
d4632dff5a
2630.39.1, 2630.28.29, 2630.34.3, 2630.34.2, 2630.34.1, 2630.29.29, 2630.29.28, 2630.31.1, 2630.28.13, 2630.28.10, 2617.23.14 and some other minor revisions. This patch implements: WL#4264 "Backup: Stabilize Service Interface" -- all the server prerequisites except si_objects.{h,cc} themselves (they can be just copied over, when needed). WL#4435: Support OUT-parameters in prepared statements. (and all issues in the initial patches for these two tasks, that were discovered in pushbuild and during testing). Bug#39519: mysql_stmt_close() should flush all data associated with the statement. After execution of a prepared statement, send OUT parameters of the invoked stored procedure, if any, to the client. When using the binary protocol, send the parameters in an additional result set over the wire. When using the text protocol, assign out parameters to the user variables from the CALL(@var1, @var2, ...) specification. The following refactoring has been made: - Protocol::send_fields() was renamed to Protocol::send_result_set_metadata(); - A new Protocol::send_result_set_row() was introduced to incapsulate common functionality for sending row data. - Signature of Protocol::prepare_for_send() was changed: this operation does not need a list of items, the number of items is fully sufficient. The following backward incompatible changes have been made: - CLIENT_MULTI_RESULTS is now enabled by default in the client; - CLIENT_PS_MULTI_RESUTLS is now enabled by default in the client.
72 lines
1.9 KiB
C++
72 lines
1.9 KiB
C++
/* Copyright (C) 2000-2001, 2003, 2005 MySQL AB
|
|
|
|
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 */
|
|
|
|
|
|
#ifdef USE_PRAGMA_IMPLEMENTATION
|
|
#pragma implementation // gcc: Class implementation
|
|
#endif
|
|
|
|
#include "sql_list.h"
|
|
|
|
list_node end_of_list;
|
|
|
|
void free_list(I_List <i_string_pair> *list)
|
|
{
|
|
i_string_pair *tmp;
|
|
while ((tmp= list->get()))
|
|
delete tmp;
|
|
}
|
|
|
|
|
|
void free_list(I_List <i_string> *list)
|
|
{
|
|
i_string *tmp;
|
|
while ((tmp= list->get()))
|
|
delete tmp;
|
|
}
|
|
|
|
|
|
base_list::base_list(const base_list &rhs, MEM_ROOT *mem_root)
|
|
{
|
|
if (rhs.elements)
|
|
{
|
|
/*
|
|
It's okay to allocate an array of nodes at once: we never
|
|
call a destructor for list_node objects anyway.
|
|
*/
|
|
first= (list_node*) alloc_root(mem_root,
|
|
sizeof(list_node) * rhs.elements);
|
|
if (first)
|
|
{
|
|
elements= rhs.elements;
|
|
list_node *dst= first;
|
|
list_node *src= rhs.first;
|
|
for (; dst < first + elements - 1; dst++, src= src->next)
|
|
{
|
|
dst->info= src->info;
|
|
dst->next= dst + 1;
|
|
}
|
|
/* Copy the last node */
|
|
dst->info= src->info;
|
|
dst->next= &end_of_list;
|
|
/* Setup 'last' member */
|
|
last= &dst->next;
|
|
return;
|
|
}
|
|
}
|
|
elements= 0;
|
|
first= &end_of_list;
|
|
last= &first;
|
|
}
|