List:Commits« Previous MessageNext Message »
From:Chad MILLER Date:October 11 2007 6:37pm
Subject:bk commit into 5.1 tree (cmiller:1.2585)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of cmiller. When cmiller does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-10-11 14:37:45-04:00, cmiller@stripped +11 -0
  Doxygenized comments.

  sql/net_serv.cc@stripped, 2007-10-11 14:37:42-04:00, cmiller@stripped +69 -70
    Doxygenized comments.

  sql/nt_servc.cc@stripped, 2007-10-11 14:37:42-04:00, cmiller@stripped +44 -34
    Doxygenized comments.

  sql/opt_sum.cc@stripped, 2007-10-11 14:37:42-04:00, cmiller@stripped +83 -82
    Doxygenized comments.

  sql/parse_file.cc@stripped, 2007-10-11 14:37:42-04:00, cmiller@stripped +150 -154
    Doxygenized comments.

  sql/procedure.cc@stripped, 2007-10-11 14:37:42-04:00, cmiller@stripped +7 -4
    Doxygenized comments.

  sql/protocol.cc@stripped, 2007-10-11 14:37:42-04:00, cmiller@stripped +112 -114
    Doxygenized comments.

  sql/records.cc@stripped, 2007-10-11 14:37:42-04:00, cmiller@stripped +64 -71
    Doxygenized comments.

  sql/repl_failsafe.cc@stripped, 2007-10-11 14:37:42-04:00, cmiller@stripped +41 -22
    Doxygenized comments.

  sql/set_var.cc@stripped, 2007-10-11 14:37:42-04:00, cmiller@stripped +103 -93
    Doxygenized comments.

  sql/sp.cc@stripped, 2007-10-11 14:37:42-04:00, cmiller@stripped +176 -187
    Doxygenized comments.

  sql/sp_head.cc@stripped, 2007-10-11 14:37:42-04:00, cmiller@stripped +208 -191
    Doxygenized comments.

diff -Nrup a/sql/net_serv.cc b/sql/net_serv.cc
--- a/sql/net_serv.cc	2007-07-30 04:33:44 -04:00
+++ b/sql/net_serv.cc	2007-10-11 14:37:42 -04:00
@@ -13,15 +13,16 @@
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
 
-/*
+/**
+  @file
+
   This file is the net layer API for the MySQL client/server protocol,
   which is a tightly coupled, proprietary protocol owned by MySQL AB.
+  @note
   Any re-implementations of this protocol must also be under GPL
   unless one has got an license from MySQL AB stating otherwise.
-*/
 
-/*
-  Write and read of logical packets to/from socket
+  Write and read of logical packets to/from socket.
 
   Writes are cached into net_buffer_length big packets.
   Read packets are reallocated dynamicly when reading big packets.
@@ -111,7 +112,7 @@ extern void query_cache_insert(NET *net,
 static my_bool net_write_buff(NET *net,const uchar *packet,ulong len);
 
 
-	/* Init with packet info */
+/** Init with packet info. */
 
 my_bool my_net_init(NET *net, Vio* vio)
 {
@@ -163,7 +164,7 @@ void net_end(NET *net)
 }
 
 
-/* Realloc the packet buffer */
+/** Realloc the packet buffer. */
 
 my_bool net_realloc(NET *net, size_t length)
 {
@@ -201,20 +202,17 @@ my_bool net_realloc(NET *net, size_t len
 }
 
 
-/*
-  Check if there is any data to be read from the socket
+/**
+  Check if there is any data to be read from the socket.
+
+  @param sd   socket descriptor
 
-  SYNOPSIS
-    net_data_is_ready()
-    sd   socket descriptor
-
-  DESCRIPTION
-    Check if there is any data to be read from the socket.
-
-  RETURN VALUES
-    0	No data to read
-    1	Data or EOF to read
-    -1  Don't know if data is ready or not
+  @retval
+    0  No data to read
+  @retval
+    1  Data or EOF to read
+  @retval
+    -1   Don't know if data is ready or not
 */
 
 #if !defined(EMBEDDED_LIBRARY)
@@ -258,16 +256,10 @@ static int net_data_is_ready(my_socket s
 
 #endif /* EMBEDDED_LIBRARY */
 
-/*
+/**
   Remove unwanted characters from connection
-  and check if disconnected
+  and check if disconnected.
 
-  SYNOPSIS
-    net_clear()
-    net			NET handler
-    clear_buffer	If <> 0, then clear all data from communication buffer
-
-  DESCRIPTION
     Read from socket until there is nothing more to read. Discard
     what is read.
 
@@ -278,6 +270,8 @@ static int net_data_is_ready(my_socket s
     a FIN packet), then select() considers a socket "ready to read",
     in the sense that there's EOF to read, but read() returns 0.
 
+  @param net			NET handler
+  @param clear_buffer           if <> 0, then clear all data from comm buff
 */
 
 void net_clear(NET *net, my_bool clear_buffer)
@@ -335,7 +329,7 @@ void net_clear(NET *net, my_bool clear_b
 }
 
 
-	/* Flush write_buffer if not empty. */
+/** Flush write_buffer if not empty. */
 
 my_bool net_flush(NET *net)
 {
@@ -358,12 +352,13 @@ my_bool net_flush(NET *net)
 ** Write something to server/client buffer
 *****************************************************************************/
 
-/*
-  Write a logical packet with packet header
+/**
+  Write a logical packet with packet header.
+
   Format: Packet length (3 bytes), packet number(1 byte)
   When compression is used a 3 byte compression length is added
 
-  NOTE
+  @note
     If compression is used the original package is modified!
 */
 
@@ -400,19 +395,9 @@ my_net_write(NET *net,const uchar *packe
   return test(net_write_buff(net,packet,len));
 }
 
-/*
+/**
   Send a command to the server.
 
-  SYNOPSIS
-    net_write_command()
-    net			NET handler
-    command		Command in MySQL server (enum enum_server_command)
-    header		Header to write after command
-    head_len		Length of header
-    packet		Query or parameter to query
-    len			Length of packet
-
-  DESCRIPTION
     The reason for having both header and packet is so that libmysql
     can easy add a header to a special command (like prepared statements)
     without having to re-alloc the string.
@@ -420,11 +405,20 @@ my_net_write(NET *net,const uchar *packe
     As the command is part of the first data packet, we have to do some data
     juggling to put the command in there, without having to create a new
     packet.
+  
     This function will split big packets into sub-packets if needed.
     (Each sub packet can only be 2^24 bytes)
 
-  RETURN VALUES
+  @param net		NET handler
+  @param command	Command in MySQL server (enum enum_server_command)
+  @param header	Header to write after command
+  @param head_len	Length of header
+  @param packet	Query or parameter to query
+  @param len		Length of packet
+
+  @retval
     0	ok
+  @retval
     1	error
 */
 
@@ -468,33 +462,30 @@ net_write_command(NET *net,uchar command
                    net_write_buff(net, packet, len) || net_flush(net)));
 }
 
-/*
+/**
   Caching the data in a local buffer before sending it.
 
-  SYNOPSIS
-    net_write_buff()
-    net		Network handler
-    packet	Packet to send
-    len		Length of packet
-
-  DESCRIPTION
-    Fill up net->buffer and send it to the client when full.
+   Fill up net->buffer and send it to the client when full.
 
     If the rest of the to-be-sent-packet is bigger than buffer,
     send it in one big block (to avoid copying to internal buffer).
     If not, copy the rest of the data to the buffer and return without
     sending data.
 
-  NOTES
-    The cached buffer can be sent as it is with 'net_flush()'.
+  @param net		Network handler
+  @param packet	Packet to send
+  @param len		Length of packet
 
+  @note
+    The cached buffer can be sent as it is with 'net_flush()'.
     In this code we have to be careful to not send a packet longer than
     MAX_PACKET_LENGTH to net_real_write() if we are using the compressed
     protocol as we store the length of the compressed packet in 3 bytes.
 
-  RETURN
-  0	ok
-  1
+  @retval
+    0	ok
+  @retval
+    1
 */
 
 static my_bool
@@ -547,9 +538,12 @@ net_write_buff(NET *net, const uchar *pa
 }
 
 
-/*
+/**
   Read and write one packet using timeouts.
   If needed, the packet is compressed before sending.
+
+  @todo
+    - TODO is it needed to set this variable if we have no socket
 */
 
 int
@@ -726,18 +720,17 @@ static my_bool net_safe_read(NET *net, u
   return 0;
 }
 
-/*
+/**
   Help function to clear the commuication buffer when we get a too big packet.
 
-  SYNOPSIS
-    my_net_skip_rest()
-    net		Communication handle
-    remain	Bytes to read
-    alarmed	Parameter for thr_alarm()
-    alarm_buff	Parameter for thr_alarm()
+  @param net		Communication handle
+  @param remain	Bytes to read
+  @param alarmed	Parameter for thr_alarm()
+  @param alarm_buff	Parameter for thr_alarm()
 
-  RETURN VALUES
+  @retval
    0	Was able to read the whole packet
+  @retval
    1	Got mailformed packet from client
 */
 
@@ -780,10 +773,13 @@ static my_bool my_net_skip_rest(NET *net
 #endif /* NO_ALARM */
 
 
-/*
-  Reads one packet to net->buff + net->where_b
-  Returns length of packet.  Long packets are handled by my_net_read().
+/**
+  Reads one packet to net->buff + net->where_b.
+  Long packets are handled by my_net_read().
   This function reallocates the net->buff buffer if necessary.
+
+  @return
+    Returns length of packet.
 */
 
 static ulong
@@ -972,15 +968,18 @@ end:
 }
 
 
-/*
+/**
   Read a packet from the client/server and return it without the internal
   package header.
+
   If the packet is the first packet of a multi-packet packet
   (which is indicated by the length of the packet = 0xffffff) then
   all sub packets are read and concatenated.
+
   If the packet was compressed, its uncompressed and the length of the
   uncompressed packet is returned.
 
+  @return
   The function returns the length of the found packet or packet_error.
   net->read_pos points to the read data.
 */
diff -Nrup a/sql/nt_servc.cc b/sql/nt_servc.cc
--- a/sql/nt_servc.cc	2004-03-25 16:09:07 -05:00
+++ b/sql/nt_servc.cc	2007-10-11 14:37:42 -04:00
@@ -1,8 +1,12 @@
-/* ------------------------------------------------------------------------
-   Windows NT Service class library
-   Copyright Abandoned 1998 Irena Pancirov - Irnet Snc
-   This file is public domain and comes with NO WARRANTY of any kind
- -------------------------------------------------------------------------- */
+/**
+  @file
+
+  @brief
+  Windows NT Service class library.
+
+  Copyright Abandoned 1998 Irena Pancirov - Irnet Snc
+  This file is public domain and comes with NO WARRANTY of any kind
+*/
 #include <windows.h>
 #include <process.h>
 #include <stdio.h>
@@ -73,12 +77,13 @@ BOOL NTService::GetOS()
 }
 
 
-/* ------------------------------------------------------------------------
- Init()  Registers the main service thread with the service manager
+/**
+  Registers the main service thread with the service manager.
+
+  @param ServiceThread  pointer to the main programs entry function
+                        when the service is started
+*/
 
-    ServiceThread - pointer to the main programs entry function
-		    when the service is started
- -------------------------------------------------------------------------- */
 
 long NTService::Init(LPCSTR szInternName,void *ServiceThread)
 {
@@ -99,13 +104,15 @@ long NTService::Init(LPCSTR szInternName
 }
 
 
-/* ------------------------------------------------------------------------
-  Install() - Installs the service with Service manager
+/**
+  Installs the service with Service manager.
+
   nError values:
-	0  success
-	1  Can't open the Service manager
-	2  Failed to create service
- -------------------------------------------------------------------------- */
+  - 0  success
+  - 1  Can't open the Service manager
+  - 2  Failed to create service.
+*/
+
 
 BOOL NTService::Install(int startType, LPCSTR szInternName,
 			LPCSTR szDisplayName,
@@ -155,14 +162,16 @@ BOOL NTService::Install(int startType, L
 }
 
 
-/* ------------------------------------------------------------------------
-  Remove() - Removes  the service
+/**
+  Removes  the service.
+
   nError values:
-	0  success
-	1  Can't open the Service manager
-	2  Failed to locate service
-	3  Failed to delete service
- -------------------------------------------------------------------------- */
+  - 0  success
+  - 1  Can't open the Service manager
+  - 2  Failed to locate service
+  - 3  Failed to delete service.
+*/
+
 
 BOOL NTService::Remove(LPCSTR szInternName)
 {
@@ -199,10 +208,10 @@ BOOL NTService::Remove(LPCSTR szInternNa
   return ret_value;
 }
 
-/* ------------------------------------------------------------------------
-   Stop() - this function should be called before the app. exits to stop
-	    the service
- -------------------------------------------------------------------------- */
+/**
+  this function should be called before the app. exits to stop
+  the service
+*/
 void NTService::Stop(void)
 {
   SetStatus(SERVICE_STOP_PENDING,NO_ERROR, 0, 1, 60000);
@@ -210,10 +219,11 @@ void NTService::Stop(void)
   SetStatus(SERVICE_STOPPED, NO_ERROR, 0, 1, 1000);
 }
 
-/* ------------------------------------------------------------------------
-  ServiceMain() - This is the function that is called from the
-		  service manager to start the service
- -------------------------------------------------------------------------- */
+/**
+  This is the function that is called from the
+  service manager to start the service.
+*/
+
 
 void NTService::ServiceMain(DWORD argc, LPTSTR *argv)
 {
@@ -264,9 +274,9 @@ error:
   return;
 }
 
-/* ------------------------------------------------------------------------
-   StartService() - starts the appliaction thread
- -------------------------------------------------------------------------- */
+/**
+  starts the appliaction thread.
+*/
 
 BOOL NTService::StartService()
 {
diff -Nrup a/sql/opt_sum.cc b/sql/opt_sum.cc
--- a/sql/opt_sum.cc	2007-08-13 09:11:12 -04:00
+++ b/sql/opt_sum.cc	2007-10-11 14:37:42 -04:00
@@ -14,7 +14,9 @@
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
 
 
-/*
+/**
+  @file
+
   Optimising of MIN(), MAX() and COUNT(*) queries without 'group by' clause
   by replacing the aggregate expression with a constant.  
 
@@ -22,6 +24,7 @@
   types of queries are optimised (assuming the table handler supports
   the required methods)
 
+  @verbatim
   SELECT COUNT(*) FROM t1[,t2,t3,...]
   SELECT MIN(b) FROM t1 WHERE a=const
   SELECT MAX(c) FROM t1 WHERE a=const AND b=const
@@ -29,6 +32,7 @@
   SELECT MIN(b) FROM t1 WHERE a=const AND b>const
   SELECT MIN(b) FROM t1 WHERE a=const AND b BETWEEN const AND const
   SELECT MAX(b) FROM t1 WHERE a=const AND b BETWEEN const AND const
+  @endverbatim
 
   Instead of '<' one can use '<=', '>', '>=' and '=' as well.
   Instead of 'a=const' the condition 'a IS NULL' can be used.
@@ -36,10 +40,11 @@
   If all selected fields are replaced then we will also remove all
   involved tables and return the answer without any join. Thus, the
   following query will be replaced with a row of two constants:
+  @verbatim
   SELECT MAX(b), MIN(d) FROM t1,t2 
     WHERE a=const AND b<const AND d>const
+  @endverbatim
   (assuming a index for column d of table t2 is defined)
-
 */
 
 #include "mysql_priv.h"
@@ -83,25 +88,25 @@ static ulonglong get_exact_record_count(
 }
 
 
-/*
+/**
   Substitutes constants for some COUNT(), MIN() and MAX() functions.
 
-  SYNOPSIS
-    opt_sum_query()
-    tables                list of leaves of join table tree
-    all_fields            All fields to be returned
-    conds                 WHERE clause
+  @param tables                list of leaves of join table tree
+  @param all_fields            All fields to be returned
+  @param conds                 WHERE clause
 
-  NOTE:
+  @note
     This function is only called for queries with sum functions and no
     GROUP BY part.
 
-  RETURN VALUES
+  @retval
     0                    no errors
+  @retval
     1                    if all items were resolved
+  @retval
     HA_ERR_KEY_NOT_FOUND on impossible conditions
-    OR an error number from my_base.h HA_ERR_... if a deadlock or a lock
-       wait timeout happens, for example
+  @retval
+    HA_ERR_... if a deadlock or a lock wait timeout happens, for example
 */
 
 int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
@@ -472,19 +477,18 @@ int opt_sum_query(TABLE_LIST *tables, Li
 }
 
 
-/*
-  Test if the predicate compares a field with constants
+/**
+  Test if the predicate compares a field with constants.
 
-  SYNOPSIS
-    simple_pred()
-    func_item        Predicate item
-    args        out: Here we store the field followed by constants
-    inv_order   out: Is set to 1 if the predicate is of the form
-	             'const op field' 
+  @param func_item        Predicate item
+  @param[out] args        Here we store the field followed by constants
+  @param[out] inv_order   Is set to 1 if the predicate is of the form
+                          'const op field'
 
-  RETURN
+  @retval
     0        func_item is a simple predicate: a field is compared with
-             constants
+    constants
+  @retval
     1        Otherwise
 */
 
@@ -556,34 +560,33 @@ bool simple_pred(Item_func *func_item, I
 }
 
 
-/* 
-   Check whether a condition matches a key to get {MAX|MIN}(field):
-
-   SYNOPSIS
-     matching_cond()
-     max_fl         in:     Set to 1 if we are optimising MAX()              
-     ref            in/out: Reference to the structure we store the key value
-     keyinfo        in      Reference to the key info
-     field_part     in:     Pointer to the key part for the field
-     cond           in      WHERE condition
-     key_part_used  in/out: Map of matchings parts
-     range_fl       in/out: Says whether including key will be used
-     prefix_len     out:    Length of common key part for the range
-                            where MAX/MIN is searched for
+/**
+  Check whether a condition matches a key to get {MAX|MIN}(field):.
 
-   DESCRIPTION
      For the index specified by the keyinfo parameter, index that
      contains field as its component (field_part), the function
      checks whether the condition cond is a conjunction and all its
      conjuncts referring to the columns of the same table as column
      field are one of the following forms:
      - f_i= const_i or const_i= f_i or f_i is null,
-       where f_i is part of the index
+     where f_i is part of the index
      - field {<|<=|>=|>|=} const or const {<|<=|>=|>|=} field
      - field between const1 and const2
 
-  RETURN
+  @param[in]     max_fl         Set to 1 if we are optimising MAX()
+  @param[in,out] ref            Reference to the structure we store the key
+    value
+  @param[in]     keyinfo        Reference to the key info
+  @param[in]     field_part     Pointer to the key part for the field
+  @param[in]     cond           WHERE condition
+  @param[in,out] key_part_used  Map of matchings parts
+  @param[in,out] range_fl       Says whether including key will be used
+  @param[out]    prefix_len     Length of common key part for the range
+    where MAX/MIN is searched for
+
+  @retval
     0        Index can't be used.
+  @retval
     1        We can use index to get MIN/MAX value
 */
 
@@ -748,31 +751,21 @@ static bool matching_cond(bool max_fl, T
 }
 
 
-/*
+/**
   Check whether we can get value for {max|min}(field) by using a key.
 
-  SYNOPSIS
-    find_key_for_maxmin()
-    max_fl      in:     0 for MIN(field) / 1 for MAX(field)
-    ref         in/out  Reference to the structure we store the key value
-    field       in:     Field used inside MIN() / MAX()
-    cond        in:     WHERE condition
-    range_fl    out:    Bit flags for how to search if key is ok
-    prefix_len  out:    Length of prefix for the search range
-
-  DESCRIPTION
-    If where condition is not a conjunction of 0 or more conjuct the
-    function returns false, otherwise it checks whether there is an
-    index including field as its k-th component/part such that:
+     If where-condition is not a conjunction of 0 or more conjuct the
+     function returns false, otherwise it checks whether there is an
+     index including field as its k-th component/part such that:
 
-     1. for each previous component f_i there is one and only one conjunct
+     -# for each previous component f_i there is one and only one conjunct
         of the form: f_i= const_i or const_i= f_i or f_i is null
-     2. references to field occur only in conjucts of the form:
+     -# references to field occur only in conjucts of the form:
         field {<|<=|>=|>|=} const or const {<|<=|>=|>|=} field or 
         field BETWEEN const1 AND const2
-     3. all references to the columns from the same table as column field
+     -# all references to the columns from the same table as column field
         occur only in conjucts mentioned above.
-     4. each of k first components the index is not partial, i.e. is not
+     -# each of k first components the index is not partial, i.e. is not
         defined on a fixed length proper prefix of the field.
 
      If such an index exists the function through the ref parameter
@@ -780,17 +773,26 @@ static bool matching_cond(bool max_fl, T
      the length of first (k-1) components of the key and flags saying
      how to apply the key for the search max/min value.
      (if we have a condition field = const, prefix_len contains the length
-      of the whole search key)
+     of the whole search key)
+
+  @param[in]     max_fl      0 for MIN(field) / 1 for MAX(field)
+  @param[in,out] ref         Reference to the structure we store the key value
+  @param[in]     field       Field used inside MIN() / MAX()
+  @param[in]     cond        WHERE condition
+  @param[out]    range_fl    Bit flags for how to search if key is ok
+  @param[out]    prefix_len  Length of prefix for the search range
 
-  NOTE
+  @note
     This function may set table->key_read to 1, which must be reset after
     index is used! (This can only happen when function returns 1)
 
-  RETURN
+  @retval
     0   Index can not be used to optimize MIN(field)/MAX(field)
-    1   Can use key to optimize MIN()/MAX()
-        In this case ref, range_fl and prefix_len are updated
-*/ 
+  @retval
+    1   Can use key to optimize MIN()/MAX().
+    In this case ref, range_fl and prefix_len are updated
+*/
+
       
 static bool find_key_for_maxmin(bool max_fl, TABLE_REF *ref,
                                 Field* field, COND *cond,
@@ -883,20 +885,19 @@ static bool find_key_for_maxmin(bool max
 }
 
 
-/*
-  Check whether found key is in range specified by conditions
+/**
+  Check whether found key is in range specified by conditions.
 
-  SYNOPSIS
-    reckey_in_range()
-    max_fl      in:     0 for MIN(field) / 1 for MAX(field)
-    ref         in:     Reference to the key value and info
-    field       in:     Field used the MIN/MAX expression
-    cond        in:     WHERE condition
-    range_fl    in:     Says whether there is a condition to to be checked
-    prefix_len  in:     Length of the constant part of the key
+  @param[in] max_fl         0 for MIN(field) / 1 for MAX(field)
+  @param[in] ref            Reference to the key value and info
+  @param[in] field          Field used the MIN/MAX expression
+  @param[in] cond           WHERE condition
+  @param[in] range_fl       Says whether there is a condition to to be checked
+  @param[in] prefix_len     Length of the constant part of the key
 
-  RETURN
+  @retval
     0        ok
+  @retval
     1        WHERE was not true for the found row
 */
 
@@ -911,16 +912,16 @@ static int reckey_in_range(bool max_fl, 
 }
 
 
-/*
-  Check whether {MAX|MIN}(field) is in range specified by conditions
-  SYNOPSIS
-    maxmin_in_range()
-    max_fl      in:     0 for MIN(field) / 1 for MAX(field)
-    field       in:     Field used the MIN/MAX expression
-    cond        in:     WHERE condition
+/**
+  Check whether {MAX|MIN}(field) is in range specified by conditions.
 
-  RETURN
+  @param[in] max_fl          0 for MIN(field) / 1 for MAX(field)
+  @param[in] field           Field used the MIN/MAX expression
+  @param[in] cond            WHERE condition
+
+  @retval
     0        ok
+  @retval
     1        WHERE was not true for the found row
 */
 
diff -Nrup a/sql/parse_file.cc b/sql/parse_file.cc
--- a/sql/parse_file.cc	2007-07-30 04:33:44 -04:00
+++ b/sql/parse_file.cc	2007-10-11 14:37:42 -04:00
@@ -13,7 +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 */
 
-// Text .frm files management routines
+/**
+  @file
+
+  @brief
+  Text .frm files management routines
+*/
 
 #include "mysql_priv.h"
 #include <errno.h>
@@ -22,17 +27,16 @@
 #include <my_dir.h>
 
 
-/*
-  write string with escaping
+/**
+  Write string with escaping.
 
-  SYNOPSIS
-    write_escaped_string()
-    file	- IO_CACHE for record
-    val_s	- string for writing
-
-  RETURN
-    FALSE - OK
-    TRUE  - error
+  @param file	  IO_CACHE for record
+  @param val_s	  string for writing
+
+  @retval
+    FALSE   OK
+  @retval
+    TRUE    error
 */
 
 static my_bool
@@ -77,21 +81,21 @@ write_escaped_string(IO_CACHE *file, LEX
 }
 
 
-/*
-  write parameter value to IO_CACHE
+/**
+  Write parameter value to IO_CACHE.
 
-  SYNOPSIS
-    write_parameter()
-    file	pointer to IO_CACHE structure for writing
-    base	pointer to data structure
-    parameter	pointer to parameter descriptor
-    old_version	for returning back old version number value
-
-  RETURN
-    FALSE - OK
-    TRUE  - error
+  @param file          pointer to IO_CACHE structure for writing
+  @param base          pointer to data structure
+  @param parameter     pointer to parameter descriptor
+  @param old_version   for returning back old version number value
+
+  @retval
+    FALSE   OK
+  @retval
+    TRUE    error
 */
 
+
 static my_bool
 write_parameter(IO_CACHE *file, uchar* base, File_option *parameter,
 		ulonglong *old_version)
@@ -191,24 +195,24 @@ write_parameter(IO_CACHE *file, uchar* b
 }
 
 
-/*
-  write new .frm
+/**
+  Write new .frm.
 
-  SYNOPSIS
-    sql_create_definition_file()
-    dir			directory where put .frm
-    file		.frm file name
-    type		.frm type string (VIEW, TABLE)
-    base		base address for parameter reading (structure like
-			TABLE)
-    parameters		parameters description
-    max_versions	number of versions to save
-
-  RETURN
-    FALSE - OK
-    TRUE - error
+  @param dir           directory where put .frm
+  @param file_name     .frm file name
+  @param type          .frm type string (VIEW, TABLE)
+  @param base          base address for parameter reading (structure like
+                       TABLE)
+  @param parameters    parameters description
+  @param max_versions  number of versions to save
+
+  @retval
+    FALSE   OK
+  @retval
+    TRUE    error
 */
 
+
 my_bool
 sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name,
 			   const LEX_STRING *type,
@@ -345,21 +349,19 @@ err_w_file:
   DBUG_RETURN(TRUE);
 }
 
-/*
-  Renames a frm file (including backups) in same schema
-
-  SYNOPSIS
-    rename_in_schema_file
-    schema            name of given schema           
-    old_name          original file name
-    new_name          new file name
-    revision          revision number
-    num_view_backups  number of backups
-
-  RETURN
-    0 - OK 
-    1 - Error (only if renaming of frm failed)
+/**
+  Renames a frm file (including backups) in same schema.
 
+  @param schema            name of given schema
+  @param old_name          original file name
+  @param new_name          new file name
+  @param revision          revision number
+  @param num_view_backups  number of backups
+
+  @retval
+    0   OK
+  @retval
+    1   Error (only if renaming of frm failed)
 */
 my_bool rename_in_schema_file(const char *schema, const char *old_name, 
                               const char *new_name, ulonglong revision, 
@@ -401,21 +403,20 @@ my_bool rename_in_schema_file(const char
   return 0;
 }
 
-/*
-  Prepare frm to parse (read to memory)
+/**
+  Prepare frm to parse (read to memory).
 
-  SYNOPSIS
-    sql_parse_prepare()
-    file_name		- path & filename to .frm file
-    mem_root		- MEM_ROOT for buffer allocation
-    bad_format_errors	- send errors on bad content
+  @param file_name		  path & filename to .frm file
+  @param mem_root		  MEM_ROOT for buffer allocation
+  @param bad_format_errors	  send errors on bad content
 
-  RETURN
+  @note
+    returned pointer + 1 will be type of .frm
+
+  @return
     0 - error
+  @return
     parser object
-
-  NOTE
-    returned pointer + 1 will be type of .frm
 */
 
 File_parser * 
@@ -506,22 +507,22 @@ frm_error:
 }
 
 
-/*
-  parse LEX_STRING
+/**
+  parse LEX_STRING.
 
-  SYNOPSIS
-    parse_string()
-    ptr		- pointer on string beginning
-    end		- pointer on symbol after parsed string end (still owned
-		  by buffer and can be accessed
-    mem_root	- MEM_ROOT for parameter allocation
-    str		- pointer on string, where results should be stored
-
-  RETURN
-    0	- error
-    #	- pointer on symbol after string
+  @param ptr		  pointer on string beginning
+  @param end		  pointer on symbol after parsed string end (still owned
+                         by buffer and can be accessed
+  @param mem_root	  MEM_ROOT for parameter allocation
+  @param str		  pointer on string, where results should be stored
+
+  @retval
+    0	  error
+  @retval
+    \#	  pointer on symbol after string
 */
 
+
 static char *
 parse_string(char *ptr, char *end, MEM_ROOT *mem_root, LEX_STRING *str)
 {
@@ -539,18 +540,17 @@ parse_string(char *ptr, char *end, MEM_R
 }
 
 
-/*
-  read escaped string from ptr to eol in already allocated str
+/**
+  read escaped string from ptr to eol in already allocated str.
 
-  SYNOPSIS
-    read_escaped_string()
-    ptr		- pointer on string beginning
-    eol		- pointer on character after end of string
-    str		- target string
-
-  RETURN
-    FALSE - OK
-    TRUE  - error
+  @param ptr		  pointer on string beginning
+  @param eol		  pointer on character after end of string
+  @param str		  target string
+
+  @retval
+    FALSE   OK
+  @retval
+    TRUE    error
 */
 
 my_bool
@@ -598,22 +598,22 @@ read_escaped_string(char *ptr, char *eol
 }
 
 
-/*
-  parse \n delimited escaped string
+/**
+  parse \\n delimited escaped string.
 
-  SYNOPSIS
-    parse_escaped_string()
-    ptr		- pointer on string beginning
-    end		- pointer on symbol after parsed string end (still owned
-		  by buffer and can be accessed
-    mem_root	- MEM_ROOT for parameter allocation
-    str		- pointer on string, where results should be stored
-
-  RETURN
-    0	- error
-    #	- pointer on symbol after string
+  @param ptr		  pointer on string beginning
+  @param end		  pointer on symbol after parsed string end (still owned
+                         by buffer and can be accessed
+  @param mem_root	  MEM_ROOT for parameter allocation
+  @param str		  pointer on string, where results should be stored
+
+  @retval
+    0	  error
+  @retval
+    \#	  pointer on symbol after string
 */
 
+
 char *
 parse_escaped_string(char *ptr, char *end, MEM_ROOT *mem_root, LEX_STRING *str)
 {
@@ -628,20 +628,19 @@ parse_escaped_string(char *ptr, char *en
 }
 
 
-/*
-  parse '' delimited escaped string
+/**
+  parse '' delimited escaped string.
 
-  SYNOPSIS
-    parse_quoted_escaped_string()
-    ptr		- pointer on string beginning
-    end		- pointer on symbol after parsed string end (still owned
-		  by buffer and can be accessed
-    mem_root	- MEM_ROOT for parameter allocation
-    str		- pointer on string, where results should be stored
-
-  RETURN
-    0	- error
-    #	- pointer on symbol after string
+  @param ptr		  pointer on string beginning
+  @param end		  pointer on symbol after parsed string end (still owned
+                         by buffer and can be accessed
+  @param mem_root	  MEM_ROOT for parameter allocation
+  @param str		  pointer on string, where results should be stored
+
+  @retval
+    0	  error
+  @retval
+    \#	  pointer on symbol after string
 */
 
 static char *
@@ -673,18 +672,16 @@ parse_quoted_escaped_string(char *ptr, c
 }
 
 
-/*
+/**
   Parser for FILE_OPTIONS_ULLLIST type value.
 
-  SYNOPSIS
-    get_file_options_ulllist()
-    ptr                  [in/out] pointer to parameter
-    end                  [in] end of the configuration
-    line                 [in] pointer to the line begining
-    base                 [in] base address for parameter writing (structure
-                              like TABLE)
-    parameter            [in] description
-    mem_root             [in] MEM_ROOT for parameters allocation
+  @param[in,out] ptr          pointer to parameter
+  @param[in] end              end of the configuration
+  @param[in] line             pointer to the line begining
+  @param[in] base             base address for parameter writing (structure
+    like TABLE)
+  @param[in] parameter        description
+  @param[in] mem_root         MEM_ROOT for parameters allocation
 */
 
 bool get_file_options_ulllist(char *&ptr, char *end, char *line,
@@ -728,28 +725,28 @@ nlist_err:
 }
 
 
-/*
-  parse parameters
+/**
+  parse parameters.
 
-  SYNOPSIS
-    File_parser::parse()
-    base                base address for parameter writing (structure like
-                        TABLE)
-    mem_root            MEM_ROOT for parameters allocation
-    parameters          parameters description
-    required            number of parameters in the above list. If the file
-                        contains more parameters than "required", they will
-                        be ignored. If the file contains less parameters
-                        then "required", non-existing parameters will
-                        remain their values.
-    hook                hook called for unknown keys
-    hook_data           some data specific for the hook
-
-  RETURN
-    FALSE - OK
-    TRUE - error
+  @param base                base address for parameter writing (structure like
+                             TABLE)
+  @param mem_root            MEM_ROOT for parameters allocation
+  @param parameters          parameters description
+  @param required            number of required parameters in above list. If the file
+                             contains more parameters than "required", they will
+                             be ignored. If the file contains less parameters
+                             then "required", non-existing parameters will
+                             remain their values.
+  @param hook                hook called for unknown keys
+  @param hook_data           some data specific for the hook
+
+  @retval
+    FALSE   OK
+  @retval
+    TRUE    error
 */
 
+
 my_bool
 File_parser::parse(uchar* base, MEM_ROOT *mem_root,
                    struct File_option *parameters, uint required,
@@ -935,26 +932,25 @@ list_err:
 }
 
 
-/*
-  Dummy unknown key hook
+/**
+  Dummy unknown key hook.
 
-  SYNOPSIS
-    File_parser_dummy_hook::process_unknown_string()
-    unknown_key          [in/out] reference on the line with unknown
-                                  parameter and the parsing point
-    base                 [in] base address for parameter writing (structure like
-                              TABLE)
-    mem_root             [in] MEM_ROOT for parameters allocation
-    end                  [in] the end of the configuration
+  @param[in,out] unknown_key       reference on the line with unknown
+    parameter and the parsing point
+  @param[in] base                  base address for parameter writing
+    (structure like TABLE)
+  @param[in] mem_root              MEM_ROOT for parameters allocation
+  @param[in] end                   the end of the configuration
 
-  NOTE
+  @note
     This hook used to catch no longer supported keys and process them for
     backward compatibility, but it will not slow down processing of modern
     format files.
     This hook does nothing except debug output.
 
-  RETURN
+  @retval
     FALSE OK
+  @retval
     TRUE  Error
 */
 
diff -Nrup a/sql/procedure.cc b/sql/procedure.cc
--- a/sql/procedure.cc	2006-12-30 15:02:07 -05:00
+++ b/sql/procedure.cc	2007-10-11 14:37:42 -04:00
@@ -68,10 +68,13 @@ my_decimal *Item_proc_real::val_decimal(
 }
 
 
-/*****************************************************************************
-** Setup handling of procedure
-** Return 0 if everything is ok
-*****************************************************************************/
+/**
+  Setup handling of procedure.
+
+  @return
+    Return 0 if everything is ok
+*/
+
 
 Procedure *
 setup_procedure(THD *thd,ORDER *param,select_result *result,
diff -Nrup a/sql/protocol.cc b/sql/protocol.cc
--- a/sql/protocol.cc	2007-05-23 18:39:21 -04:00
+++ b/sql/protocol.cc	2007-10-11 14:37:42 -04:00
@@ -13,8 +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 */
 
-/*
-  Low level functions for storing data to be send to the MySQL client
+/**
+  @file
+
+  Low level functions for storing data to be send to the MySQL client.
   The actual communction is handled by the net_xxx functions in net_serv.cc
 */
 
@@ -53,17 +55,18 @@ bool Protocol_binary::net_store_data(con
 }
 
 
-/*
-   Send a error string to client
+/**
+  Send a error string to client.
 
-   Design note:
+  Design note:
 
-   net_printf_error and net_send_error are low-level functions
-   that shall be used only when a new connection is being
-   established or at server startup.
-   For SIGNAL/RESIGNAL and GET DIAGNOSTICS functionality it's
-   critical that every error that can be intercepted is issued in one
-   place only, my_message_sql.
+  net_printf_error and net_send_error are low-level functions
+  that shall be used only when a new connection is being
+  established or at server startup.
+
+  For SIGNAL/RESIGNAL and GET DIAGNOSTICS functionality it's
+  critical that every error that can be intercepted is issued in one
+  place only, my_message_sql.
 */
 void net_send_error(THD *thd, uint sql_errno, const char *err)
 {
@@ -120,19 +123,22 @@ void net_send_error(THD *thd, uint sql_e
   DBUG_VOID_RETURN;
 }
 
-/*
-   Write error package and flush to client
-   It's a little too low level, but I don't want to use another buffer for
-   this
-
-   Design note:
-
-   net_printf_error and net_send_error are low-level functions
-   that shall be used only when a new connection is being
-   established or at server startup.
-   For SIGNAL/RESIGNAL and GET DIAGNOSTICS functionality it's
-   critical that every error that can be intercepted is issued in one
-   place only, my_message_sql.
+/**
+  Write error package and flush to client.
+
+  @note
+    It's a little too low level, but I don't want to use another buffer for
+    this.
+
+  Design note:
+
+  net_printf_error and net_send_error are low-level functions
+  that shall be used only when a new connection is being
+  established or at server startup.
+
+  For SIGNAL/RESIGNAL and GET DIAGNOSTICS functionality it's
+  critical that every error that can be intercepted is issued in one
+  place only, my_message_sql.
 */
 
 void
@@ -239,31 +245,28 @@ net_printf_error(THD *thd, uint errcode,
   DBUG_VOID_RETURN;
 }
 
-/*
+/**
   Return ok to the client.
 
-  SYNOPSIS
-    send_ok()
-    thd			Thread handler
-    affected_rows	Number of rows changed by statement
-    id			Auto_increment id for first row (if used)
-    message		Message to send to the client (Used by mysql_status)
-
-  DESCRIPTION
-    The ok packet has the following structure
-
-    0			Marker (1 byte)
-    affected_rows	Stored in 1-9 bytes
-    id			Stored in 1-9 bytes
-    server_status	Copy of thd->server_status;  Can be used by client
-			to check if we are inside an transaction
-			New in 4.0 protocol
-    warning_count	Stored in 2 bytes; New in 4.1 protocol
-    message		Stored as packed length (1-9 bytes) + message
-			Is not stored if no message
+  The ok packet has the following structure:
 
-   If net->no_send_ok return without sending packet
-*/    
+  - 0               : Marker (1 byte)
+  - affected_rows	: Stored in 1-9 bytes
+  - id		: Stored in 1-9 bytes
+  - server_status	: Copy of thd->server_status;  Can be used by client
+  to check if we are inside an transaction.
+  New in 4.0 protocol
+  - warning_count	: Stored in 2 bytes; New in 4.1 protocol
+  - message		: Stored as packed length (1-9 bytes) + message.
+  Is not stored if no message.
+
+  If net->no_send_ok return without sending packet.
+
+  @param thd		   Thread handler
+  @param affected_rows	   Number of rows changed by statement
+  @param id		   Auto_increment id for first row (if used)
+  @param message	   Message to send to the client (Used by mysql_status)
+*/
 
 #ifndef EMBEDDED_LIBRARY
 void
@@ -319,27 +322,24 @@ send_ok(THD *thd, ha_rows affected_rows,
 
 static uchar eof_buff[1]= { (uchar) 254 };      /* Marker for end of fields */
 
-/*
-  Send eof (= end of result set) to the client
+/**
+  Send eof (= end of result set) to the client.
 
-  SYNOPSIS
-    send_eof()
-    thd			Thread handler
-    no_flush		Set to 1 if there will be more data to the client,
-			like in send_fields().
-
-  DESCRIPTION
-    The eof packet has the following structure
-
-    254			Marker (1 byte)
-    warning_count	Stored in 2 bytes; New in 4.1 protocol
-    status_flag		Stored in 2 bytes;
-			For flags like SERVER_MORE_RESULTS_EXISTS
-
-    Note that the warning count will not be sent if 'no_flush' is set as
-    we don't want to report the warning count until all data is sent to the
-    client.
-*/    
+  The eof packet has the following structure:
+
+  - 254		: Marker (1 byte)
+  - warning_count	: Stored in 2 bytes; New in 4.1 protocol
+  - status_flag	: Stored in 2 bytes;
+  For flags like SERVER_MORE_RESULTS_EXISTS.
+
+  Note that the warning count will not be sent if 'no_flush' is set as
+  we don't want to report the warning count until all data is sent to the
+  client.
+
+  @param thd		Thread handler
+  @param no_flush	Set to 1 if there will be more data to the client,
+                    like in send_fields().
+*/
 
 void
 send_eof(THD *thd)
@@ -357,7 +357,7 @@ send_eof(THD *thd)
 }
 
 
-/*
+/**
   Format EOF packet according to the current protocol and
   write it to the network output buffer.
 */
@@ -388,15 +388,15 @@ static void write_eof_packet(THD *thd, N
     VOID(my_net_write(net, eof_buff, 1));
 }
 
-/*
-    Please client to send scrambled_password in old format.
-  SYNOPSYS
-    send_old_password_request()
-    thd thread handle
-     
-  RETURN VALUE
-    0  ok
-   !0  error
+/**
+  Please client to send scrambled_password in old format.
+
+  @param thd thread handle
+
+  @retval
+    0   ok
+  @retval
+    !0  error
 */
 
 bool send_old_password_request(THD *thd)
@@ -450,14 +450,15 @@ void net_send_error_packet(THD *thd, uin
 
 #endif /* EMBEDDED_LIBRARY */
 
-/*
+/**
   Faster net_store_length when we know that length is less than 65536.
   We keep a separate version for that range because it's widely used in
   libmysql.
+
   uint is used as agrument type because of MySQL type conventions:
-  uint for 0..65536
-  ulong for 0..4294967296
-  ulonglong for bigger numbers.
+  - uint for 0..65536
+  - ulong for 0..4294967296
+  - ulonglong for bigger numbers.
 */
 
 static uchar *net_store_length_fast(uchar *packet, uint length)
@@ -530,27 +531,26 @@ bool Protocol::flush()
 #endif
 }
 
-/*
+#ifndef EMBEDDED_LIBRARY
+
+/**
   Send name and type of result to client.
 
-  SYNOPSIS
-    send_fields()
-    THD		Thread data object
-    list	List of items to send to client
-    flag	Bit mask with the following functions:
-		1 send number of rows
-		2 send default values
-                4 don't write eof packet
+  Sum fields has table name empty and field_name.
 
-  DESCRIPTION
-    Sum fields has table name empty and field_name.
+  @param THD		Thread data object
+  @param list	        List of items to send to client
+  @param flag	        Bit mask with the following functions:
+                        - 1 send number of rows
+                        - 2 send default values
+                        - 4 don't write eof packet
 
-  RETURN VALUES
+  @retval
     0	ok
-    1	Error  (Note that in this case the error is not sent to the client)
+  @retval
+    1	Error  (Note that in this case the error is not sent to the
+    client)
 */
-
-#ifndef EMBEDDED_LIBRARY
 bool Protocol::send_fields(List<Item> *list, uint flags)
 {
   List_iterator_fast<Item> it(*list);
@@ -704,18 +704,17 @@ bool Protocol::write()
 #endif /* EMBEDDED_LIBRARY */
 
 
-/*
-  Send \0 end terminated string
+/**
+  Send \\0 end terminated string.
 
-  SYNOPSIS
-    store()
-    from	NullS or \0 terminated string
+  @param from	NullS or \\0 terminated string
 
-  NOTES
+  @note
     In most cases one should use store(from, length) instead of this function
 
-  RETURN VALUES
+  @retval
     0		ok
+  @retval
     1		error
 */
 
@@ -728,8 +727,8 @@ bool Protocol::store(const char *from, C
 }
 
 
-/*
-  Send a set of strings as one long string with ',' in between
+/**
+  Send a set of strings as one long string with ',' in between.
 */
 
 bool Protocol::store(I_List<i_string>* str_list)
@@ -781,7 +780,7 @@ bool Protocol_text::store_null()
 #endif
 
 
-/*
+/**
   Auxilary function to convert string to the given character set
   and store in network buffer.
 */
@@ -957,13 +956,12 @@ bool Protocol_text::store(Field *field)
 }
 
 
-/*
-   TODO:
-        Second_part format ("%06") needs to change when 
-        we support 0-6 decimals for time.
+/**
+  @todo
+  Second_part format ("%06") needs to change when 
+  we support 0-6 decimals for time.
 */
 
-
 bool Protocol_text::store(MYSQL_TIME *tm)
 {
 #ifndef DBUG_OFF
@@ -1001,10 +999,10 @@ bool Protocol_text::store_date(MYSQL_TIM
 }
 
 
-/*
-   TODO:
-        Second_part format ("%06") needs to change when 
-        we support 0-6 decimals for time.
+/**
+  @todo 
+  Second_part format ("%06") needs to change when 
+  we support 0-6 decimals for time.
 */
 
 bool Protocol_text::store_time(MYSQL_TIME *tm)
diff -Nrup a/sql/records.cc b/sql/records.cc
--- a/sql/records.cc	2007-05-10 05:59:28 -04:00
+++ b/sql/records.cc	2007-10-11 14:37:42 -04:00
@@ -14,7 +14,12 @@
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
 
 
-/* Functions for easy reading of records, possible through a cache */
+/**
+  @file
+
+  @brief
+  Functions for easy reading of records, possible through a cache
+*/
 
 #include "mysql_priv.h"
 
@@ -31,25 +36,20 @@ static int rr_index_first(READ_RECORD *i
 static int rr_index(READ_RECORD *info);
 
 
-/*
-  Initialize READ_RECORD structure to perform full index scan
+/**
+  Initialize READ_RECORD structure to perform full index scan (in forward
+  direction) using read_record.read_record() interface.
 
-  SYNOPSIS 
-    init_read_record_idx()
-      info         READ_RECORD structure to initialize.
-      thd          Thread handle
-      table        Table to be accessed 
-      print_error  If true, call table->file->print_error() if an error
-                   occurs (except for end-of-records error)
-      idx          index to scan
-  
-  DESCRIPTION
-    Initialize READ_RECORD structure to perform full index scan (in forward
-    direction) using read_record.read_record() interface.
-    
     This function has been added at late stage and is used only by
     UPDATE/DELETE. Other statements perform index scans using
     join_read_first/next functions.
+
+  @param info         READ_RECORD structure to initialize.
+  @param thd          Thread handle
+  @param table        Table to be accessed
+  @param print_error  If true, call table->file->print_error() if an error
+                      occurs (except for end-of-records error)
+  @param idx          index to scan
 */
 
 void init_read_record_idx(READ_RECORD *info, THD *thd, TABLE *table,
@@ -284,7 +284,7 @@ static int rr_handle_error(READ_RECORD *
 }
 
 
-	/* Read a record from head-database */
+/** Read a record from head-database. */
 
 static int rr_quick(READ_RECORD *info)
 {
@@ -306,20 +306,19 @@ static int rr_quick(READ_RECORD *info)
 }
 
 
-/*
-  Reads first row in an index scan
+/**
+  Reads first row in an index scan.
 
-  SYNOPSIS
-    rr_index_first()
-    info  	Scan info
-  
-  RETURN
+  @param info  	Scan info
+
+  @retval
     0   Ok
-    -1  End of records 
-    1   Error   
+  @retval
+    -1   End of records
+  @retval
+    1   Error
 */
 
-
 static int rr_index_first(READ_RECORD *info)
 {
   int tmp= info->file->index_first(info->record);
@@ -330,24 +329,22 @@ static int rr_index_first(READ_RECORD *i
 }
 
 
-/*
-  Reads index sequentially after first row
+/**
+  Reads index sequentially after first row.
 
-  SYNOPSIS
-    rr_index()
-      info  Scan info
-  
-  DESCRIPTION
-    Read the next index record (in forward direction) and translate return
-    value.
-    
-  RETURN
+  Read the next index record (in forward direction) and translate return
+  value.
+
+  @param info  Scan info
+
+  @retval
     0   Ok
-    -1  End of records 
-    1   Error   
+  @retval
+    -1   End of records
+  @retval
+    1   Error
 */
 
-
 static int rr_index(READ_RECORD *info)
 {
   int tmp= info->file->index_next(info->record);
@@ -401,22 +398,20 @@ static int rr_from_tempfile(READ_RECORD 
 } /* rr_from_tempfile */
 
 
-/*
-  Read a result set record from a temporary file after sorting
+/**
+  Read a result set record from a temporary file after sorting.
 
-  SYNOPSIS
-    rr_unpack_from_tempfile()
-    info                Reference to the context including record descriptors
-
-  DESCRIPTION
-    The function first reads the next sorted record from the temporary file.
-    into a buffer. If a success it calls a callback function that unpacks 
-    the fields values use in the result set from this buffer into their
-    positions in the regular record buffer.
-
-  RETURN
-     0 - Record successfully read.
-    -1 - There is no record to be read anymore. 
+  The function first reads the next sorted record from the temporary file.
+  into a buffer. If a success it calls a callback function that unpacks 
+  the fields values use in the result set from this buffer into their
+  positions in the regular record buffer.
+
+  @param info          Reference to the context including record descriptors
+
+  @retval
+    0   Record successfully read.
+  @retval
+    -1   There is no record to be read anymore.
 */
 
 static int rr_unpack_from_tempfile(READ_RECORD *info)
@@ -454,22 +449,20 @@ static int rr_from_pointers(READ_RECORD 
   return tmp;
 }
 
-/*
-  Read a result set record from a buffer after sorting
+/**
+  Read a result set record from a buffer after sorting.
 
-  SYNOPSIS
-    rr_unpack_from_buffer()
-    info                   Reference to the context including record descriptors
-
-  DESCRIPTION
-    The function first reads the next sorted record from the sort buffer.
-    If a success it calls a callback function that unpacks 
-    the fields values use in the result set from this buffer into their
-    positions in the regular record buffer.
-
-  RETURN
-     0 - Record successfully read.
-    -1 - There is no record to be read anymore. 
+  The function first reads the next sorted record from the sort buffer.
+  If a success it calls a callback function that unpacks 
+  the fields values use in the result set from this buffer into their
+  positions in the regular record buffer.
+
+  @param info          Reference to the context including record descriptors
+
+  @retval
+    0   Record successfully read.
+  @retval
+    -1   There is no record to be read anymore.
 */
 
 static int rr_unpack_from_buffer(READ_RECORD *info)
diff -Nrup a/sql/repl_failsafe.cc b/sql/repl_failsafe.cc
--- a/sql/repl_failsafe.cc	2007-08-16 02:52:43 -04:00
+++ b/sql/repl_failsafe.cc	2007-10-11 14:37:42 -04:00
@@ -13,6 +13,16 @@
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
 
+/**
+  @file
+
+  All of the functions defined in this file which are not used (the ones to
+  handle failsafe) are not used; their code has not been updated for more
+  than one year now so should be considered as BADLY BROKEN. Do not enable
+  it. The used functions (to handle LOAD DATA FROM MASTER, plus some small
+  functions like register_slave()) are working.
+*/
+
 #include "mysql_priv.h"
 #ifdef HAVE_REPLICATION
 
@@ -144,12 +154,13 @@ void unregister_slave(THD* thd, bool onl
 }
 
 
-/*
-  Register slave in 'slave_list' hash table
+/**
+  Register slave in 'slave_list' hash table.
 
-  RETURN VALUES
-  0	ok
-  1	Error.   Error message sent to client
+  @return
+    0	ok
+  @return
+    1	Error.   Error message sent to client
 */
 
 int register_slave(THD* thd, uchar* packet, uint packet_length)
@@ -252,7 +263,8 @@ static int find_target_pos(LEX_MASTER_IN
   /* Impossible */
 }
 
-/* 
+/**
+  @details 
   Before 4.0.15 we had a member of THD called log_pos, it was meant for
   failsafe replication code in repl_failsafe.cc which is disabled until
   it is reworked. Event's log_pos used to be preserved through 
@@ -388,8 +400,8 @@ err:
 }
 
 
-/*
-  Caller must delete result when done
+/**
+  Caller must delete result when done.
 */
 
 static Slave_log_event* find_slave_event(IO_CACHE* log,
@@ -428,9 +440,11 @@ static Slave_log_event* find_slave_event
   return (Slave_log_event*)ev;
 }
 
-/*
-   This function is broken now. See comment for translate_master().
- */
+/**
+  This function is broken now. 
+
+  @seealso translate_master()
+*/
 
 bool show_new_master(THD* thd)
 {
@@ -466,20 +480,19 @@ bool show_new_master(THD* thd)
   }
 }
 
-/*
+/**
   Asks the master for the list of its other connected slaves.
-  This is for failsafe replication: 
+
+  This is for failsafe replication:
   in order for failsafe replication to work, the servers involved in
   replication must know of each other. We accomplish this by having each
   slave report to the master how to reach it, and on connection, each
   slave receives information about where the other slaves are.
 
-  SYNOPSIS
-    update_slave_list()
-    mysql           pre-existing connection to the master
-    mi              master info
+  @param mysql           pre-existing connection to the master
+  @param mi              master info
 
-  NOTES
+  @note
     mi is used only to give detailed error messages which include the
     hostname/port of the master, the username used by the slave to connect to
     the master.
@@ -487,10 +500,11 @@ bool show_new_master(THD* thd)
     REPLICATION SLAVE privilege, it will pop in this function because
     SHOW SLAVE HOSTS will fail on the master.
 
-  RETURN VALUES
+  @retval
     1           error
+  @retval
     0           success
- */
+*/
 
 int update_slave_list(MYSQL* mysql, Master_info* mi)
 {
@@ -754,11 +768,16 @@ static int fetch_db_tables(THD *thd, MYS
   return 0;
 }
 
-/*
+/**
   Load all MyISAM tables from master to this slave.
 
   REQUIREMENTS
-   - No active transaction (flush_relay_log_info would not work in this case)
+    - No active transaction (flush_relay_log_info would not work in this case).
+
+  @todo
+    - add special option, not enabled
+    by default, to allow inclusion of mysql database into load
+    data from master
 */
 
 bool load_master_data(THD* thd)
diff -Nrup a/sql/set_var.cc b/sql/set_var.cc
--- a/sql/set_var.cc	2007-10-04 05:38:48 -04:00
+++ b/sql/set_var.cc	2007-10-11 14:37:42 -04:00
@@ -13,9 +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 */
 
-/*
+/**
+  @file
+
+  @brief
   Handling of MySQL SQL variables
 
+  @details
   To add a new variable, one has to do the following:
 
   - Use one of the 'sys_var... classes from set_var.h or write a specific
@@ -28,18 +32,19 @@
   - Don't forget to initialize new fields in global_system_variables and
     max_system_variables!
 
-  NOTES:
-    - Be careful with var->save_result: sys_var::check() only updates
+  @todo
+    Add full support for the variable character_set (for 4.1)
+
+  @todo
+    When updating myisam_delay_key_write, we should do a 'flush tables'
+    of all MyISAM tables to ensure that they are reopen with the
+    new attribute.
+
+  @note
+    Be careful with var->save_result: sys_var::check() only updates
     ulonglong_value; so other members of the union are garbage then; to use
     them you must first assign a value to them (in specific ::check() for
     example).
-
-  TODO:
-    - Add full support for the variable character_set (for 4.1)
-
-    - When updating myisam_delay_key_write, we should do a 'flush tables'
-      of all MyISAM tables to ensure that they are reopen with the
-      new attribute.
 */
 
 #ifdef USE_PRAGMA_IMPLEMENTATION
@@ -819,9 +824,9 @@ static void sys_default_ftb_syntax(THD *
 }
 
 
-/*
+/**
   If one sets the LOW_PRIORIY UPDATES flag, we also must change the
-  used lock type
+  used lock type.
 */
 
 static void fix_low_priority_updates(THD *thd, enum_var_type type)
@@ -843,8 +848,8 @@ fix_myisam_max_sort_file_size(THD *thd, 
     (my_off_t) global_system_variables.myisam_max_sort_file_size;
 }
 
-/*
-  Set the OPTION_BIG_SELECTS flag if max_join_size == HA_POS_ERROR
+/**
+  Set the OPTION_BIG_SELECTS flag if max_join_size == HA_POS_ERROR.
 */
 
 static void fix_max_join_size(THD *thd, enum_var_type type)
@@ -859,7 +864,7 @@ static void fix_max_join_size(THD *thd, 
 }
 
 
-/*
+/**
   Can't change the 'next' tx_isolation while we are already in
   a transaction
 */
@@ -875,7 +880,7 @@ static int check_tx_isolation(THD *thd, 
 
 /*
   If one doesn't use the SESSION modifier, the isolation level
-  is only active for the next command
+  is only active for the next command.
 */
 static void fix_tx_isolation(THD *thd, enum_var_type type)
 {
@@ -1447,9 +1452,12 @@ err:
 }
 
 
-/*
-  Return an Item for a variable.  Used with @@[global.]variable_name
-  If type is not given, return local value if exists, else global
+/**
+  Return an Item for a variable.
+
+  Used with @@[global.]variable_name.
+
+  If type is not given, return local value if exists, else global.
 */
 
 Item *sys_var::item(THD *thd, enum_var_type var_type, LEX_STRING *base)
@@ -1611,7 +1619,7 @@ uchar *sys_var_thd_bit::value_ptr(THD *t
 }
 
 
-/* Update a date_time format variable based on given value */
+/** Update a date_time format variable based on given value. */
 
 void sys_var_thd_date_time_format::update2(THD *thd, enum_var_type type,
 					   DATE_TIME_FORMAT *new_value)
@@ -2028,6 +2036,12 @@ end:
 }
 
 
+/**
+  @todo
+  Abort if some other thread is changing the key cache.
+  This should be changed so that we wait until the previous
+  assignment is done and then do the new assign
+*/
 bool sys_var_key_cache_long::update(THD *thd, set_var *var)
 {
   ulong tmp= (ulong) var->value->val_int();
@@ -2720,23 +2734,20 @@ static uchar *get_error_count(THD *thd)
 }
 
 
-/*
-  Get the tmpdir that was specified or chosen by default
+/**
+  Get the tmpdir that was specified or chosen by default.
 
-  SYNOPSIS
-    get_tmpdir()
-    thd		thread handle
+  This is necessary because if the user does not specify a temporary
+  directory via the command line, one is chosen based on the environment
+  or system defaults.  But we can't just always use mysql_tmpdir, because
+  that is actually a call to my_tmpdir() which cycles among possible
+  temporary directories.
 
-  DESCRIPTION
-    This is necessary because if the user does not specify a temporary
-    directory via the command line, one is chosen based on the environment
-    or system defaults.  But we can't just always use mysql_tmpdir, because
-    that is actually a call to my_tmpdir() which cycles among possible
-    temporary directories.
+  @param thd		thread handle
 
-  RETURN VALUES
+  @retval
     ptr		pointer to NUL-terminated string
- */
+*/
 static uchar *get_tmpdir(THD *thd)
 {
   if (opt_mysql_tmpdir)
@@ -2751,16 +2762,16 @@ static uchar *get_tmpdir(THD *thd)
   - Update loop
 ****************************************************************************/
 
-/*
-  Find variable name in option my_getopt structure used for command line args
+/**
+  Find variable name in option my_getopt structure used for
+  command line args.
 
-  SYNOPSIS
-    find_option()
-    opt		option structure array to search in
-    name	variable name
+  @param opt	option structure array to search in
+  @param name	variable name
 
-  RETURN VALUES
+  @retval
     0		Error
+  @retval
     ptr		pointer to option structure
 */
 
@@ -2783,8 +2794,8 @@ static struct my_option *find_option(str
 }
 
 
-/*
-  Return variable name and length for hashing of variables
+/**
+  Return variable name and length for hashing of variables.
 */
 
 static uchar *get_sys_var_length(const sys_var *var, size_t *length,
@@ -2986,17 +2997,17 @@ int mysql_append_static_vars(const SHOW_
 }
 
 
-/*
-  Find a user set-table variable
+/**
+  Find a user set-table variable.
 
-  SYNOPSIS
-    intern_find_sys_var()
-    str		Name of system variable to find
-    length	Length of variable.  zero means that we should use strlen()
-		on the variable
+  @param str	   Name of system variable to find
+  @param length    Length of variable.  zero means that we should use strlen()
+                   on the variable
+  @param no_error  Refuse to emit an error, even if one occurred.
 
-  RETURN VALUES
+  @retval
     pointer	pointer to variable definitions
+  @retval
     0		Unknown variable (error message is given)
 */
 
@@ -3017,25 +3028,23 @@ sys_var *intern_find_sys_var(const char 
 }
 
 
-/*
-  Execute update of all variables
+/**
+  Execute update of all variables.
 
-  SYNOPSIS
+  First run a check of all variables that all updates will go ok.
+  If yes, then execute all updates, returning an error if any one failed.
 
-  sql_set
-    THD		Thread id
-    set_var	List of variables to update
-
-  DESCRIPTION
-    First run a check of all variables that all updates will go ok.
-    If yes, then execute all updates, returning an error if any one failed.
+  This should ensure that in all normal cases none all or variables are
+  updated.
 
-    This should ensure that in all normal cases none all or variables are
-    updated
+  @param THD		Thread id
+  @param var_list       List of variables to update
 
-    RETURN VALUE
+  @retval
     0	ok
+  @retval
     1	ERROR, message sent (normally no variables was updated)
+  @retval
     -1  ERROR, message not sent
 */
 
@@ -3064,20 +3073,19 @@ err:
 }
 
 
-/*
-  Say if all variables set by a SET support the ONE_SHOT keyword (currently,
-  only character set and collation do; later timezones will).
+/**
+  Say if all variables set by a SET support the ONE_SHOT keyword
+  (currently, only character set and collation do; later timezones
+  will).
 
-  SYNOPSIS
+  @param var_list	List of variables to update
 
-  not_all_support_one_shot
-    set_var	List of variables to update
-
-  NOTES
+  @note
     It has a "not_" because it makes faster tests (no need to "!")
 
-    RETURN VALUE
+  @retval
     0	all variables of the list support ONE_SHOT
+  @retval
     1	at least one does not support ONE_SHOT
 */
 
@@ -3136,17 +3144,17 @@ int set_var::check(THD *thd)
 }
 
 
-/*
-  Check variable, but without assigning value (used by PS)
+/**
+  Check variable, but without assigning value (used by PS).
 
-  SYNOPSIS
-    set_var::light_check()
-    thd		thread handler
+  @param thd		thread handler
 
-  RETURN VALUE
+  @retval
     0	ok
+  @retval
     1	ERROR, message sent (normally no variables was updated)
-    -1  ERROR, message not sent
+  @retval
+    -1   ERROR, message not sent
 */
 int set_var::light_check(THD *thd)
 {
@@ -3193,17 +3201,17 @@ int set_var_user::check(THD *thd)
 }
 
 
-/*
-  Check variable, but without assigning value (used by PS)
+/**
+  Check variable, but without assigning value (used by PS).
 
-  SYNOPSIS
-    set_var_user::light_check()
-    thd		thread handler
+  @param thd		thread handler
 
-  RETURN VALUE
+  @retval
     0	ok
+  @retval
     1	ERROR, message sent (normally no variables was updated)
-    -1  ERROR, message not sent
+  @retval
+    -1   ERROR, message not sent
 */
 int set_var_user::light_check(THD *thd)
 {
@@ -3377,13 +3385,15 @@ bool sys_var_thd_table_type::update(THD 
  Functions to handle sql_mode
 ****************************************************************************/
 
-/*
-  Make string representation of mode
+/**
+  Make string representation of mode.
 
-  SYNOPSIS
-    thd   in  thread handler
-    val   in  sql_mode value
-    rep   out pointer pointer to string with sql_mode representation
+  @param[in]  thd    thread handler
+  @param[in]  val    sql_mode value
+  @param[out] len    pointer on length of string
+
+  @return
+    pointer to string with sql_mode representation
 */
 
 bool
@@ -3454,7 +3464,7 @@ void fix_sql_mode_var(THD *thd, enum_var
   }
 }
 
-/* Map database specific bits to function bits */
+/** Map database specific bits to function bits. */
 
 ulong fix_sql_mode(ulong sql_mode)
 {
diff -Nrup a/sql/sp.cc b/sql/sp.cc
--- a/sql/sp.cc	2007-08-31 16:11:58 -04:00
+++ b/sql/sp.cc	2007-10-11 14:37:42 -04:00
@@ -249,19 +249,18 @@ Stored_routine_creation_ctx::load_from_d
 
 /*************************************************************************/
 
-/*
+/**
   Open the mysql.proc table for read.
 
-  SYNOPSIS
-    open_proc_table_for_read()
-      thd     Thread context
-      backup  Pointer to Open_tables_state instance where information about
-              currently open tables will be saved, and from which will be
-              restored when we will end work with mysql.proc.
+  @param thd     Thread context
+  @param backup  Pointer to Open_tables_state instance where information about
+                 currently open tables will be saved, and from which will be
+                 restored when we will end work with mysql.proc.
 
-  RETURN
+  @retval
     0	Error
-    #	Pointer to TABLE object of mysql.proc
+  @retval
+    \#	Pointer to TABLE object of mysql.proc
 */
 
 TABLE *open_proc_table_for_read(THD *thd, Open_tables_state *backup)
@@ -281,19 +280,18 @@ TABLE *open_proc_table_for_read(THD *thd
 }
 
 
-/*
+/**
   Open the mysql.proc table for update.
 
-  SYNOPSIS
-    open_proc_table_for_update()
-      thd  Thread context
+  @param thd  Thread context
 
-  NOTES
+  @note
     Table opened with this call should closed using close_thread_tables().
 
-  RETURN
+  @retval
     0	Error
-    #	Pointer to TABLE object of mysql.proc
+  @retval
+    \#	Pointer to TABLE object of mysql.proc
 */
 
 static TABLE *open_proc_table_for_update(THD *thd)
@@ -310,19 +308,18 @@ static TABLE *open_proc_table_for_update
 }
 
 
-/*
+/**
   Find row in open mysql.proc table representing stored routine.
 
-  SYNOPSIS
-    db_find_routine_aux()
-      thd    Thread context
-      type   Type of routine to find (function or procedure)
-      name   Name of routine
-      table  TABLE object for open mysql.proc table.
-
-  RETURN VALUE
-    SP_OK           - Routine found
-    SP_KEY_NOT_FOUND- No routine with given name
+  @param thd    Thread context
+  @param type   Type of routine to find (function or procedure)
+  @param name   Name of routine
+  @param table  TABLE object for open mysql.proc table.
+
+  @retval
+    SP_OK             Routine found
+  @retval
+    SP_KEY_NOT_FOUND  No routine with given name
 */
 
 static int
@@ -357,25 +354,24 @@ db_find_routine_aux(THD *thd, int type, 
 }
 
 
-/*
+/**
   Find routine definition in mysql.proc table and create corresponding
   sp_head object for it.
 
-  SYNOPSIS
-    db_find_routine()
-      thd   Thread context
-      type  Type of routine (TYPE_ENUM_PROCEDURE/...)
-      name  Name of routine
-      sphp  Out parameter in which pointer to created sp_head
-            object is returned (0 in case of error).
+  @param thd   Thread context
+  @param type  Type of routine (TYPE_ENUM_PROCEDURE/...)
+  @param name  Name of routine
+  @param sphp  Out parameter in which pointer to created sp_head
+               object is returned (0 in case of error).
 
-  NOTE
+  @note
     This function may damage current LEX during execution, so it is good
     idea to create temporary LEX and make it active before calling it.
 
-  RETURN VALUE
-    0     - Success
-    non-0 - Error (may be one of special codes like SP_KEY_NOT_FOUND)
+  @retval
+    0       Success
+  @retval
+    non-0   Error (may be one of special codes like SP_KEY_NOT_FOUND)
 */
 
 static int
@@ -1284,22 +1280,21 @@ sp_show_create_routine(THD *thd, int typ
 }
 
 
-/*
+/**
   Obtain object representing stored procedure/function by its name from
   stored procedures cache and looking into mysql.proc if needed.
 
-  SYNOPSIS
-    sp_find_routine()
-      thd        - thread context
-      type       - type of object (TYPE_ENUM_FUNCTION or TYPE_ENUM_PROCEDURE)
-      name       - name of procedure
-      cp         - hash to look routine in
-      cache_only - if true perform cache-only lookup
-                   (Don't look in mysql.proc).
-
-  RETURN VALUE
-    Non-0 pointer to sp_head object for the procedure, or
-    0 - in case of error.
+  @param thd          thread context
+  @param type         type of object (TYPE_ENUM_FUNCTION or TYPE_ENUM_PROCEDURE)
+  @param name         name of procedure
+  @param cp           hash to look routine in
+  @param cache_only   if true perform cache-only lookup
+                      (Don't look in mysql.proc).
+
+  @retval
+    NonNULL pointer to sp_head object for the procedure
+  @retval
+    NULL    in case of error.
 */
 
 sp_head *
@@ -1395,7 +1390,7 @@ sp_find_routine(THD *thd, int type, sp_n
 }
 
 
-/*
+/**
   This is used by sql_acl.cc:mysql_routine_grant() and is used to find
   the routines in 'routines'.
 */
@@ -1444,18 +1439,17 @@ sp_exist_routines(THD *thd, TABLE_LIST *
 }
 
 
-/*
+/**
   Check if a routine exists in the mysql.proc table, without actually
-  parsing the definition. (Used for dropping)
+  parsing the definition. (Used for dropping).
+
+  @param thd          thread context
+  @param name         name of procedure
 
-  SYNOPSIS
-    sp_routine_exists_in_table()
-      thd        - thread context
-      name       - name of procedure
-
-  RETURN VALUE
-    0     - Success
-    non-0 - Error;  SP_OPEN_TABLE_FAILED or SP_KEY_NOT_FOUND
+  @retval
+    0       Success
+  @retval
+    non-0   Error;  SP_OPEN_TABLE_FAILED or SP_KEY_NOT_FOUND
 */
 
 int
@@ -1477,7 +1471,7 @@ sp_routine_exists_in_table(THD *thd, int
 }
 
 
-/*
+/**
   Structure that represents element in the set of stored routines
   used by statement or routine.
 */
@@ -1485,14 +1479,16 @@ struct Sroutine_hash_entry;
 
 struct Sroutine_hash_entry
 {
-  /* Set key consisting of one-byte routine type and quoted routine name. */
+  /**
+    Set key consisting of one-byte routine type and quoted routine name.
+  */
   LEX_STRING key;
-  /*
+  /**
     Next element in list linking all routines in set. See also comments
     for LEX::sroutine/sroutine_list and sp_head::m_sroutines.
   */
   Sroutine_hash_entry *next;
-  /*
+  /**
     Uppermost view which directly or indirectly uses this routine.
     0 if routine is not used in view. Note that it also can be 0 if
     statement uses routine both via view and directly.
@@ -1510,24 +1506,22 @@ extern "C" uchar* sp_sroutine_key(const 
 }
 
 
-/*
+/**
   Check if
    - current statement (the one in thd->lex) needs table prelocking
    - first routine in thd->lex->sroutines_list needs to execute its body in
      prelocked mode.
 
-  SYNOPSIS
-    sp_get_prelocking_info()
-      thd                  Current thread, thd->lex is the statement to be
-                           checked.
-      need_prelocking      OUT TRUE  - prelocked mode should be activated
-                                       before executing the statement
-                               FALSE - Don't activate prelocking 
-      first_no_prelocking  OUT TRUE  - Tables used by first routine in
-                                       thd->lex->sroutines_list should be
-                                       prelocked.
-                               FALSE - Otherwise.
-  NOTES 
+  @param thd                  Current thread, thd->lex is the statement to be
+                              checked.
+  @param[out] need_prelocking    TRUE  - prelocked mode should be activated
+                                 before executing the statement; 
+                                 FALSE - Don't activate prelocking
+  @param[out] first_no_prelocking  TRUE  - Tables used by first routine in
+                                   thd->lex->sroutines_list should be
+                                   prelocked. FALSE - Otherwise.
+
+  @note
     This function assumes that for any "CALL proc(...)" statement routines_list 
     will have 'proc' as first element (it may have several, consider e.g.
     "proc(sp_func(...)))". This property is currently guaranted by the parser.
@@ -1547,36 +1541,37 @@ void sp_get_prelocking_info(THD *thd, bo
 }
 
 
-/*
+/**
   Auxilary function that adds new element to the set of stored routines
   used by statement.
 
-  SYNOPSIS
-    add_used_routine()
-      lex             LEX representing statement
-      arena           Arena in which memory for new element will be allocated
-      key             Key for the hash representing set
-      belong_to_view  Uppermost view which uses this routine
-                      (0 if routine is not used by view)
+  In case when statement uses stored routines but does not need
+  prelocking (i.e. it does not use any tables) we will access the
+  elements of LEX::sroutines set on prepared statement re-execution.
+  Because of this we have to allocate memory for both hash element
+  and copy of its key in persistent arena.
+
+  @param lex             LEX representing statement
+  @param arena           Arena in which memory for new element will be
+                         allocated
+  @param key             Key for the hash representing set
+  @param belong_to_view  Uppermost view which uses this routine
+                         (0 if routine is not used by view)
 
-  NOTES
+  @note
     Will also add element to end of 'LEX::sroutines_list' list.
 
-    In case when statement uses stored routines but does not need
-    prelocking (i.e. it does not use any tables) we will access the
-    elements of LEX::sroutines set on prepared statement re-execution.
-    Because of this we have to allocate memory for both hash element
-    and copy of its key in persistent arena.
-
-  TODO
+  @todo
     When we will got rid of these accesses on re-executions we will be
     able to allocate memory for hash elements in non-persitent arena
     and directly use key values from sp_head::m_sroutines sets instead
     of making their copies.
 
-  RETURN VALUE
-    TRUE  - new element was added.
-    FALSE - element was not added (because it is already present in the set).
+  @retval
+    TRUE   new element was added.
+  @retval
+    FALSE  element was not added (because it is already present in
+    the set).
 */
 
 static bool add_used_routine(LEX *lex, Query_arena *arena,
@@ -1606,24 +1601,22 @@ static bool add_used_routine(LEX *lex, Q
 }
 
 
-/*
+/**
   Add routine which is explicitly used by statement to the set of stored
   routines used by this statement.
 
-  SYNOPSIS
-    sp_add_used_routine()
-      lex     - LEX representing statement
-      arena   - arena in which memory for new element of the set
-                will be allocated
-      rt      - routine name
-      rt_type - routine type (one of TYPE_ENUM_PROCEDURE/...)
+  To be friendly towards prepared statements one should pass
+  persistent arena as second argument.
+
+  @param lex       LEX representing statement
+  @param arena     arena in which memory for new element of the set
+                   will be allocated
+  @param rt        routine name
+  @param rt_type   routine type (one of TYPE_ENUM_PROCEDURE/...)
 
-  NOTES
+  @note
     Will also add element to end of 'LEX::sroutines_list' list (and will
     take into account that this is explicitly used routine).
-
-    To be friendly towards prepared statements one should pass
-    persistent arena as second argument.
 */
 
 void sp_add_used_routine(LEX *lex, Query_arena *arena,
@@ -1636,13 +1629,11 @@ void sp_add_used_routine(LEX *lex, Query
 }
 
 
-/*
+/**
   Remove routines which are only indirectly used by statement from
   the set of routines used by this statement.
 
-  SYNOPSIS
-    sp_remove_not_own_routines()
-      lex  LEX representing statement
+  @param lex  LEX representing statement
 */
 
 void sp_remove_not_own_routines(LEX *lex)
@@ -1665,16 +1656,14 @@ void sp_remove_not_own_routines(LEX *lex
 }
 
 
-/*
+/**
   Merge contents of two hashes representing sets of routines used
   by statements or by other routines.
 
-  SYNOPSIS
-    sp_update_sp_used_routines()
-      dst - hash to which elements should be added
-      src - hash from which elements merged
+  @param dst   hash to which elements should be added
+  @param src   hash from which elements merged
 
-  NOTE
+  @note
     This procedure won't create new Sroutine_hash_entry objects,
     instead it will simply add elements from source to destination
     hash. Thus time of life of elements in destination hash becomes
@@ -1694,18 +1683,17 @@ void sp_update_sp_used_routines(HASH *ds
 }
 
 
-/*
+/**
   Add contents of hash representing set of routines to the set of
   routines used by statement.
 
-  SYNOPSIS
-    sp_update_stmt_used_routines()
-      thd             Thread context
-      lex             LEX representing statement
-      src             Hash representing set from which routines will be added
-      belong_to_view  Uppermost view which uses these routines, 0 if none
+  @param thd             Thread context
+  @param lex             LEX representing statement
+  @param src             Hash representing set from which routines will
+                         be added
+  @param belong_to_view  Uppermost view which uses these routines, 0 if none
 
-  NOTE
+  @note
     It will also add elements to end of 'LEX::sroutines_list' list.
 */
 
@@ -1721,18 +1709,17 @@ sp_update_stmt_used_routines(THD *thd, L
 }
 
 
-/*
+/**
   Add contents of list representing set of routines to the set of
   routines used by statement.
 
-  SYNOPSIS
-    sp_update_stmt_used_routines()
-      thd             Thread context
-      lex             LEX representing statement
-      src             List representing set from which routines will be added
-      belong_to_view  Uppermost view which uses these routines, 0 if none
+  @param thd             Thread context
+  @param lex             LEX representing statement
+  @param src             List representing set from which routines will
+                         be added
+  @param belong_to_view  Uppermost view which uses these routines, 0 if none
 
-  NOTE
+  @note
     It will also add elements to end of 'LEX::sroutines_list' list.
 */
 
@@ -1745,27 +1732,28 @@ static void sp_update_stmt_used_routines
 }
 
 
-/*
+/**
   Cache sub-set of routines used by statement, add tables used by these
   routines to statement table list. Do the same for all routines used
   by these routines.
 
-  SYNOPSIS
-    sp_cache_routines_and_add_tables_aux()
-      thd              - thread context
-      lex              - LEX representing statement
-      start            - first routine from the list of routines to be cached
-                         (this list defines mentioned sub-set).
-      first_no_prelock - If true, don't add tables or cache routines used by
-                         the body of the first routine (i.e. *start)
-                         will be executed in non-prelocked mode.
-  NOTE
+  @param thd               thread context
+  @param lex               LEX representing statement
+  @param start             first routine from the list of routines to be cached
+                           (this list defines mentioned sub-set).
+  @param first_no_prelock  If true, don't add tables or cache routines used by
+                           the body of the first routine (i.e. *start)
+                           will be executed in non-prelocked mode.
+  @param tabs_changed      Set to TRUE some tables were added, FALSE otherwise
+
+  @note
     If some function is missing this won't be reported here.
     Instead this fact will be discovered during query execution.
 
-  RETURN VALUE
-     0     - success
-     non-0 - failure
+  @retval
+    0       success
+  @retval
+    non-0   failure
 */
 
 static int
@@ -1857,21 +1845,20 @@ sp_cache_routines_and_add_tables_aux(THD
 }
 
 
-/*
+/**
   Cache all routines from the set of used by statement, add tables used
   by those routines to statement table list. Do the same for all routines
   used by those routines.
 
-  SYNOPSIS
-    sp_cache_routines_and_add_tables()
-      thd              - thread context
-      lex              - LEX representing statement
-      first_no_prelock - If true, don't add tables or cache routines used by
-                         the body of the first routine (i.e. *start)
-
-  RETURN VALUE
-     0     - success
-     non-0 - failure
+  @param thd               thread context
+  @param lex               LEX representing statement
+  @param first_no_prelock  If true, don't add tables or cache routines used by
+                           the body of the first routine (i.e. *start)
+
+  @retval
+    0       success
+  @retval
+    non-0   failure
 */
 
 int
@@ -1883,20 +1870,21 @@ sp_cache_routines_and_add_tables(THD *th
 }
 
 
-/*
-  Add all routines used by view to the set of routines used by statement.
+/**
+  Add all routines used by view to the set of routines used by
+  statement.
+
   Add tables used by those routines to statement table list. Do the same
   for all routines used by these routines.
 
-  SYNOPSIS
-    sp_cache_routines_and_add_tables_for_view()
-      thd   Thread context
-      lex   LEX representing statement
-      view  Table list element representing view
-
-  RETURN VALUE
-     0     - success
-     non-0 - failure
+  @param thd   Thread context
+  @param lex   LEX representing statement
+  @param view  Table list element representing view
+
+  @retval
+    0       success
+  @retval
+    non-0   failure
 */
 
 int
@@ -1911,20 +1899,19 @@ sp_cache_routines_and_add_tables_for_vie
 }
 
 
-/*
+/**
   Add triggers for table to the set of routines used by statement.
   Add tables used by them to statement table list. Do the same for
   all implicitly used routines.
 
-  SYNOPSIS
-    sp_cache_routines_and_add_tables_for_triggers()
-      thd    thread context
-      lex    LEX respresenting statement
-      table  Table list element for table with trigger
-
-  RETURN VALUE
-     0     - success
-     non-0 - failure
+  @param thd    thread context
+  @param lex    LEX respresenting statement
+  @param table  Table list element for table with trigger
+
+  @retval
+    0       success
+  @retval
+    non-0   failure
 */
 
 int
@@ -1970,10 +1957,12 @@ sp_cache_routines_and_add_tables_for_tri
 }
 
 
-/*
- * Generates the CREATE... string from the table information.
- * Returns TRUE on success, FALSE on (alloc) failure.
- */
+/**
+  Generates the CREATE... string from the table information.
+
+  @return
+    Returns TRUE on success, FALSE on (alloc) failure.
+*/
 static bool
 create_string(THD *thd, String *buf,
 	      int type,
diff -Nrup a/sql/sp_head.cc b/sql/sp_head.cc
--- a/sql/sp_head.cc	2007-08-31 14:13:22 -04:00
+++ b/sql/sp_head.cc	2007-10-11 14:37:42 -04:00
@@ -80,19 +80,20 @@ sp_map_item_type(enum enum_field_types t
 }
 
 
-/*
+/**
   Return a string representation of the Item value.
 
-  NOTE: If the item has a string result type, the string is escaped
-  according to its character set.
-
-  SYNOPSIS
-    item    a pointer to the Item
-    str     string buffer for representation of the value
+  @param thd     thread handle
+  @param str     string buffer for representation of the value
 
-  RETURN
-    NULL  on error
-    a pointer to valid a valid string on success
+  @note
+    If the item has a string result type, the string is escaped
+    according to its character set.
+
+  @retval
+    NULL      on error
+  @retval
+    non-NULL  a pointer to valid a valid string on success
 */
 
 static String *
@@ -137,16 +138,12 @@ sp_get_item_value(THD *thd, Item *item, 
 }
 
 
-/*
-  SYNOPSIS
-    sp_get_flags_for_command()
-
-  DESCRIPTION
-    Returns a combination of:
-    * sp_head::MULTI_RESULTS: added if the 'cmd' is a command that might
-      result in multiple result sets being sent back.
-    * sp_head::CONTAINS_DYNAMIC_SQL: added if 'cmd' is one of PREPARE,
-      EXECUTE, DEALLOCATE.
+/**
+   Returns a combination of:
+   - sp_head::MULTI_RESULTS: added if the 'cmd' is a command that might
+     result in multiple result sets being sent back.
+   - sp_head::CONTAINS_DYNAMIC_SQL: added if 'cmd' is one of PREPARE,
+     EXECUTE, DEALLOCATE.
 */
 
 uint
@@ -286,17 +283,16 @@ sp_get_flags_for_command(LEX *lex)
   return flags;
 }
 
-/*
+/**
   Prepare an Item for evaluation (call of fix_fields).
 
-  SYNOPSIS
-    sp_prepare_func_item()
-    thd       thread handler
-    it_addr   pointer on item refernce
-
-  RETURN
-    NULL  error
-    prepared item
+  @param thd       thread handler
+  @param it_addr   pointer on item refernce
+
+  @retval
+    NULL      error
+  @retval
+    non-NULL  prepared item
 */
 
 Item *
@@ -316,17 +312,16 @@ sp_prepare_func_item(THD* thd, Item **it
 }
 
 
-/*
+/**
   Evaluate an expression and store the result in the field.
 
-  SYNOPSIS
-    sp_eval_expr()
-      thd                   - current thread object
-      expr_item             - the root item of the expression
-      result_field          - the field to store the result
+  @param thd                    current thread object
+  @param result_field           the field to store the result
+  @param expr_item_ptr          the root item of the expression
 
-  RETURN VALUES
+  @retval
     FALSE  on success
+  @retval
     TRUE   on error
 */
 
@@ -386,6 +381,9 @@ sp_eval_expr(THD *thd, Field *result_fie
  *
  */
 
+/**
+  Init the qualified name from the db and name.
+*/
 void
 sp_name::init_qname(THD *thd)
 {
@@ -400,16 +398,17 @@ sp_name::init_qname(THD *thd)
 }
 
 
-/*
-  Check that the name 'ident' is ok. It's assumed to be an 'ident'
+/**
+  Check that the name 'ident' is ok.  It's assumed to be an 'ident'
   from the parser, so we only have to check length and trailing spaces.
   The former is a standard requirement (and 'show status' assumes a
   non-empty name), the latter is a mysql:ism as trailing spaces are
   removed by get_field().
- 
-  RETURN
-   TRUE  - bad name
-   FALSE - name is ok
+
+  @retval
+    TRUE    bad name
+  @retval
+    FALSE   name is ok
 */
 
 bool
@@ -417,7 +416,7 @@ check_routine_name(LEX_STRING *ident)
 {
   if (!ident || !ident->str || !ident->str[0] ||
       ident->str[ident->length-1] == ' ')
-  {
+  { 
     my_error(ER_SP_WRONG_NAME, MYF(0), ident->str);
     return TRUE;
   }
@@ -742,7 +741,7 @@ sp_head::destroy()
 }
 
 
-/*
+/**
   This is only used for result fields from functions (both during
   fix_length_and_dec() and evaluation).
 */
@@ -861,29 +860,23 @@ int cmp_splocal_locations(Item_splocal *
 */
 
 
-/*
-  Replace thd->query{_length} with a string that one can write to the binlog
-  or the query cache.
- 
-  SYNOPSIS
-    subst_spvars()
-      thd        Current thread. 
-      instr      Instruction (we look for Item_splocal instances in
-                 instr->free_list)
-      query_str  Original query string
-     
-  DESCRIPTION
+/**
+  Replace thd->query{_length} with a string that one can write to
+  the binlog.
 
   The binlog-suitable string is produced by replacing references to SP local 
-  variables with NAME_CONST('sp_var_name', value) calls. To make this string
-  suitable for the query cache this function allocates some additional space
-  for the query cache flags.
- 
-  RETURN
-    FALSE  on success
-           thd->query{_length} either has been appropriately replaced or there
-           is no need for replacements.
-    TRUE   out of memory error.
+  variables with NAME_CONST('sp_var_name', value) calls.
+
+  @param thd        Current thread.
+  @param instr      Instruction (we look for Item_splocal instances in
+                    instr->free_list)
+  @param query_str  Original query string
+
+  @return
+    - FALSE  on success.
+    thd->query{_length} either has been appropriately replaced or there
+    is no need for replacements.
+    - TRUE   out of memory error.
 */
 
 static bool
@@ -1002,14 +995,17 @@ void sp_head::recursion_level_error(THD 
 }
 
 
-/*
-  Execute the routine. The main instruction jump loop is there 
+/**
+  Execute the routine. The main instruction jump loop is there.
   Assume the parameters already set.
-  
-  RETURN
+  @todo
+    - Will write this SP statement into binlog separately 
+    (TODO: consider changing the condition to "not inside event union")
+
+  @retval
     FALSE  on success
+  @retval
     TRUE   on error
-
 */
 
 bool
@@ -1299,22 +1295,26 @@ sp_head::execute(THD *thd)
 
 
 #ifndef NO_EMBEDDED_ACCESS_CHECKS
-/*
+/**
   set_routine_security_ctx() changes routine security context, and
   checks if there is an EXECUTE privilege in new context.  If there is
   no EXECUTE privilege, it changes the context back and returns a
   error.
 
-  SYNOPSIS
-    set_routine_security_ctx()
-      thd         thread handle
-      sp          stored routine to change the context for
-      is_proc     TRUE is procedure, FALSE if function
-      save_ctx    pointer to an old security context
-   
-  RETURN
-    TRUE if there was a error, and the context wasn't changed.
-    FALSE if the context was changed.
+  @param thd         thread handle
+  @param sp          stored routine to change the context for
+  @param is_proc     TRUE is procedure, FALSE if function
+  @param save_ctx    pointer to an old security context
+
+  @todo
+    - Cache if the definer has the right to use the object on the
+    first usage and only reset the cache if someone does a GRANT
+    statement that 'may' affect this.
+
+  @retval
+    TRUE   if there was a error, and the context wasn't changed.
+  @retval
+    FALSE  if the context was changed.
 */
 
 bool
@@ -1356,22 +1356,27 @@ set_routine_security_ctx(THD *thd, sp_he
 /**
   Execute trigger stored program.
 
-  Execute a trigger:
-   - changes security context for triggers;
-   - switch to new memroot;
-   - call sp_head::execute;
-   - restore old memroot;
-   - restores security context.
-
-  @param thd        Thread context.
-  @param db_name    Database name.
-  @param table_name Table name.
-  @param grant_info GRANT_INFO structure to be filled with information
-                    about definer's privileges on subject table.
+  - changes security context for triggers
+  - switch to new memroot
+  - call sp_head::execute
+  - restore old memroot
+  - restores security context
+
+  @param thd               Thread handle
+  @param db                database name
+  @param table             table name
+  @param grant_info        GRANT_INFO structure to be filled with
+                           information about definer's privileges
+                           on subject table
 
-  @return Error status.
-    @retval FALSE on success.
-    @retval TRUE  on error.
+  @todo
+    - TODO: we should create sp_rcontext once per command and reuse it
+    on subsequent executions of a trigger.
+
+  @retval
+    FALSE  on success
+  @retval
+    TRUE   on error
 */
 
 bool
@@ -1479,8 +1484,9 @@ err_with_cleanup:
 }
 
 
-/*
-  Execute a function:
+/**
+  Execute a function.
+
    - evaluate parameters
    - changes security context for SUID routines
    - switch to new memroot
@@ -1489,17 +1495,25 @@ err_with_cleanup:
    - evaluate the return value
    - restores security context
 
-  SYNOPSIS
-    sp_head::execute_function()
-      thd               Thread handle
-      argp              Passed arguments (these are items from containing
-                        statement?)
-      argcount          Number of passed arguments. We need to check if this is
-                        correct.
-      return_value_fld  Save result here.
-   
-  RETURN
+  @param thd               Thread handle
+  @param argp              Passed arguments (these are items from containing
+                           statement?)
+  @param argcount          Number of passed arguments. We need to check if
+                           this is correct.
+  @param return_value_fld  Save result here.
+
+  @todo
+    We should create sp_rcontext once per command and reuse
+    it on subsequent executions of a function/trigger.
+
+  @todo
+    In future we should associate call arena/mem_root with
+    sp_rcontext and allocate all these objects (and sp_rcontext
+    itself) on it directly rather than juggle with arenas.
+
+  @retval
     FALSE  on success
+  @retval
     TRUE   on error
 */
 
@@ -1716,14 +1730,8 @@ err_with_cleanup:
 }
 
 
-/*
+/**
   Execute a procedure. 
-  SYNOPSIS
-    sp_head::execute_procedure()
-      thd    Thread handle
-      args   List of values passed as arguments.
-      
-  DESCRIPTION
 
   The function does the following steps:
    - Set all parameters 
@@ -1732,8 +1740,12 @@ err_with_cleanup:
    - copy back values of INOUT and OUT parameters
    - restores security context
 
-  RETURN
+  @param thd    Thread handle
+  @param args   List of values passed as arguments.
+
+  @retval
     FALSE  on success
+  @retval
     TRUE   on error
 */
 
@@ -1935,7 +1947,7 @@ sp_head::execute_procedure(THD *thd, Lis
 }
 
 
-// Reset lex during parsing, before we parse a sub statement.
+/// Reset lex during parsing, before we parse a sub statement.
 void
 sp_head::reset_lex(THD *thd)
 {
@@ -1968,7 +1980,7 @@ sp_head::reset_lex(THD *thd)
   DBUG_VOID_RETURN;
 }
 
-// Restore lex during parsing, after we have parsed a sub statement.
+/// Restore lex during parsing, after we have parsed a sub statement.
 void
 sp_head::restore_lex(THD *thd)
 {
@@ -2011,6 +2023,9 @@ sp_head::restore_lex(THD *thd)
   DBUG_VOID_RETURN;
 }
 
+/**
+  Put the instruction on the backpatch list, associated with the label.
+*/
 void
 sp_head::push_backpatch(sp_instr *i, sp_label_t *lab)
 {
@@ -2024,6 +2039,10 @@ sp_head::push_backpatch(sp_instr *i, sp_
   }
 }
 
+/**
+  Update all instruction with this label in the backpatch list to
+  the current position.
+*/
 void
 sp_head::backpatch(sp_label_t *lab)
 {
@@ -2038,19 +2057,18 @@ sp_head::backpatch(sp_label_t *lab)
   }
 }
 
-/*
+/**
   Prepare an instance of Create_field for field creation (fill all necessary
   attributes).
 
-  SYNOPSIS
-    sp_head::fill_field_definition()
-      thd         [IN] Thread handle
-      lex         [IN] Yacc parsing context
-      field_type  [IN] Field type
-      field_def   [OUT] An instance of Create_field to be filled
+  @param[in]  thd          Thread handle
+  @param[in]  lex          Yacc parsing context
+  @param[in]  field_type   Field type
+  @param[out] field_def    An instance of create_field to be filled
 
-  RETURN
+  @retval
     FALSE  on success
+  @retval
     TRUE   on error
 */
 
@@ -2196,18 +2214,17 @@ sp_head::restore_thd_mem_root(THD *thd)
 }
 
 
-/*
-  Check if a user has access right to a routine
+/**
+  Check if a user has access right to a routine.
 
-  SYNOPSIS
-    check_show_routine_access()
-    thd			Thread handler
-    sp			SP
-    full_access		Set to 1 if the user has SELECT right to the
-			'mysql.proc' able or is the owner of the routine
-  RETURN
-    0  ok
-    1  error
+  @param thd		    Thread handler
+  @param sp		    SP
+  @param full_access       Set to 1 if the user has SELECT right to the
+                           'mysql.proc' able or is the owner of the routine
+  @retval
+    false ok
+  @retval
+    true  error
 */
 
 bool check_show_routine_access(THD *thd, sp_head *sp, bool *full_access)
@@ -2334,12 +2351,10 @@ sp_head::show_create_routine(THD *thd, i
 
 
 
-/*
-  Add instruction to SP
+/**
+  Add instruction to SP.
 
-  SYNOPSIS
-    sp_head::add_instr()
-    instr   Instruction
+  @param instr   Instruction
 */
 
 void sp_head::add_instr(sp_instr *instr)
@@ -2357,20 +2372,20 @@ void sp_head::add_instr(sp_instr *instr)
 }
 
 
-/*
+/**
   Do some minimal optimization of the code:
-    1) Mark used instructions
-       1.1) While doing this, shortcut jumps to jump instructions
-    2) Compact the code, removing unused instructions
+    -# Mark used instructions
+    -# While doing this, shortcut jumps to jump instructions
+    -# Compact the code, removing unused instructions.
 
   This is the main mark and move loop; it relies on the following methods
   in sp_instr and its subclasses:
 
-  opt_mark()           Mark instruction as reachable
-  opt_shortcut_jump()  Shortcut jumps to the final destination;
-                       used by opt_mark().
-  opt_move()           Update moved instruction
-  set_destination()    Set the new destination (jump instructions only)
+    - opt_mark()         :  Mark instruction as reachable
+    - opt_shortcut_jump():  Shortcut jumps to the final destination;
+                           used by opt_mark().
+    - opt_move()         :  Update moved instruction
+    - set_destination()  :  Set the new destination (jump instructions only)
 */
 
 void sp_head::optimize()
@@ -2461,9 +2476,10 @@ sp_head::opt_mark()
 
 
 #ifndef DBUG_OFF
-/*
+/**
   Return the routine instructions as a result set.
-  Returns 0 if ok, !=0 on error.
+  @return
+    0 if ok, !=0 on error.
 */
 int
 sp_head::show_routine_code(THD *thd)
@@ -2526,27 +2542,25 @@ sp_head::show_routine_code(THD *thd)
 #endif // ifndef DBUG_OFF
 
 
-/*
+/**
   Prepare LEX and thread for execution of instruction, if requested open
   and lock LEX's tables, execute instruction's core function, perform
   cleanup afterwards.
 
-  SYNOPSIS
-    reset_lex_and_exec_core()
-      thd         - thread context
-      nextp       - out - next instruction
-      open_tables - if TRUE then check read access to tables in LEX's table
-                    list and open and lock them (used in instructions which
-                    need to calculate some expression and don't execute
-                    complete statement).
-      sp_instr    - instruction for which we prepare context, and which core
-                    function execute by calling its exec_core() method.
+  @param thd           thread context
+  @param nextp         out - next instruction
+  @param open_tables   if TRUE then check read access to tables in LEX's table
+                       list and open and lock them (used in instructions which
+                       need to calculate some expression and don't execute
+                       complete statement).
+  @param sp_instr      instruction for which we prepare context, and which core
+                       function execute by calling its exec_core() method.
 
-  NOTE
+  @note
     We are not saving/restoring some parts of THD which may need this because
     we do this once for whole routine execution in sp_head::execute().
 
-  RETURN VALUE
+  @return
     0/non-0 - Success/Failure
 */
 
@@ -3300,6 +3314,11 @@ sp_instr_cpop::print(String *str)
   sp_instr_copen class functions
 */
 
+/**
+  @todo
+    Assert that we either have an error or a cursor
+*/
+
 int
 sp_instr_copen::execute(THD *thd, uint *nextp)
 {
@@ -3621,24 +3640,23 @@ uchar *sp_table_key(const uchar *ptr, si
 }
 
 
-/*
+/**
   Merge the list of tables used by some query into the multi-set of
   tables used by routine.
 
-  SYNOPSIS
-    merge_table_list()
-      thd               - thread context
-      table             - table list
-      lex_for_tmp_check - LEX of the query for which we are merging
-                          table list.
+  @param thd                 thread context
+  @param table               table list
+  @param lex_for_tmp_check   LEX of the query for which we are merging
+                             table list.
 
-  NOTE
+  @note
     This method will use LEX provided to check whenever we are creating
     temporary table and mark it as such in target multi-set.
 
-  RETURN VALUE
-    TRUE  - Success
-    FALSE - Error
+  @retval
+    TRUE    Success
+  @retval
+    FALSE   Error
 */
 
 bool
@@ -3726,27 +3744,26 @@ sp_head::merge_table_list(THD *thd, TABL
 }
 
 
-/*
+/**
   Add tables used by routine to the table list.
 
-  SYNOPSIS
-    add_used_tables_to_table_list()
-      thd                    [in]     Thread context
-      query_tables_last_ptr  [in/out] Pointer to the next_global member of
-                                      last element of the list where tables
-                                      will be added (or to its root).
-      belong_to_view         [in]     Uppermost view which uses this routine,
-                                      0 if none.
-
-  DESCRIPTION
     Converts multi-set of tables used by this routine to table list and adds
     this list to the end of table list specified by 'query_tables_last_ptr'.
 
     Elements of list will be allocated in PS memroot, so this list will be
     persistent between PS executions.
 
-  RETURN VALUE
-    TRUE - if some elements were added, FALSE - otherwise.
+  @param[in] thd                        Thread context
+  @param[in,out] query_tables_last_ptr  Pointer to the next_global member of
+    last element of the list where tables
+    will be added (or to its root).
+  @param[in] belong_to_view             Uppermost view which uses this routine,
+    0 if none.
+
+  @retval
+    TRUE    if some elements were added
+  @retval
+    FALSE   otherwise.
 */
 
 bool
@@ -3816,7 +3833,7 @@ sp_head::add_used_tables_to_table_list(T
 }
 
 
-/*
+/**
   Simple function for adding an explicetly named (systems) table to
   the global table list, e.g. "mysql", "proc".
 */
Thread
bk commit into 5.1 tree (cmiller:1.2585)Chad MILLER11 Oct