Commit c702a1f8 authored by monty@mashka.mysql.fi's avatar monty@mashka.mysql.fi
Browse files

Removed wrong implementation of CUBE/ROLLUP

Fixed bugfix of INSERT ... SET db_name.table_name.column_name
Changed locking to external-locking
Fix client hangup for some invalid SQL queries.
parent 00089b81
Loading
Loading
Loading
Loading
+62 −182
Original line number Diff line number Diff line
@@ -779,7 +779,7 @@ insert of many rows.
@item Locking -- Gamma
This is very system-dependent.  On some systems there are big problems
using standard OS locking (@code{fcntl()}).  In these cases, you should
run @code{mysqld} with the @code{--skip-locking} flag.
run @code{mysqld} with the @code{--skip-external-locking} flag.
Problems are known to occur on some Linux systems, and on SunOS when
using NFS-mounted filesystems.
@@ -7300,7 +7300,9 @@ programs.
@item
When MySQL is compiled using MIT-pthreads, system locking is
disabled by default for performance reasons.  You can tell the server to use
system locking with the @code{--use-locking} option.
system locking with the @code{--external-locking} option.  This is only
needed if you want to be able to run two MySQL server against the same
data files (not recommended).
@item
Sometimes the pthread @code{bind()} command fails to bind to a socket without
@@ -8130,6 +8132,9 @@ before. In particular, you will need @code{REPLICATION SLAVE}
The startup parameters @code{myisam_max_extra_sort_file_size} and
@code{myisam_max_extra_sort_file_size} are now given in bytes
(was megabytes before 4.0.3).
External system locking of MyISAM/ISAM files is now turned of by default.
One can turn this one by doing @code{--external-locking}. (For most users
this is never needed).
@item
The following startup variables/options have been renamed:
@multitable @columnfractions .50 .50
@@ -8142,7 +8147,8 @@ The following startup variables/options have been renamed:
@item @code{warnings} @tab @code{log-warnings}
@end multitable
The startup options @code{record_buffer}, @code{sort_buffer} and @code{warnings} will still work in MySQL 4.0 but are deprecated.
The startup options @code{record_buffer}, @code{sort_buffer} and
@code{warnings} will still work in MySQL 4.0 but are deprecated.
@item
The following SQL variables have changed name.
@multitable @columnfractions .50 .50
@@ -8157,6 +8163,10 @@ The old names still work in MySQL 4.0 but are depricated.
You have to use @code{SET GLOBAL SQL_SLAVE_SKIP_COUNTER=#} instead of
@code{SET SQL_SLAVE_SKIP_COUNTER=#}.
@item
Renamed mysqld startup options @code{--skip-locking} to
@code{--skip-external-locking} and @code{--enable-locking} to
@code{--external-locking}.
@item
@code{DOUBLE} and @code{FLOAT} columns now honour the
@code{UNSIGNED} flag on storage (before, @code{UNSIGNED} was ignored for
these columns).
@@ -14174,7 +14184,7 @@ Don't flush key buffers between writes for any @code{MyISAM} table.
Read the default keys used by @code{DES_ENCRYPT()} and @code{DES_DECRYPT()}
from this file.
@item --enable-locking
@item --enable-external-locking (was --enable-locking)
Enable system locking.  Note that if you use this option on a system on
which @code{lockd} does not fully work (as on Linux), you will easily get
mysqld to deadlock.
@@ -14243,7 +14253,7 @@ also set this explicitly to @code{""} if you want to disable this
option. If this option is used, @code{mysqld} will on open check if the
table is marked as crashed or if the table wasn't closed properly.
(The last option only works if you are running with
@code{--skip-locking}.)  If this is the case @code{mysqld} will run
@code{--skip-external-locking}.)  If this is the case @code{mysqld} will run
check on the table. If the table was corrupted, @code{mysqld} will
attempt to repair it.
@@ -14334,7 +14344,7 @@ flush-privileges} or @code{mysqladmin reload}.)
Never use host name cache for faster name-ip resolution, but query DNS server
on every connect instead.  @xref{DNS}.
@item --skip-locking
@item --skip-extrnal-locking (was --skip-locking)
Don't use system locking.  To use @code{isamchk} or @code{myisamchk} you must
shut down the server.  @xref{Stability}.  Note that in MySQL Version
3.23 you can use @code{REPAIR} and @code{CHECK} to repair/check @code{MyISAM}
@@ -18084,7 +18094,7 @@ Print the @code{myisamchk} version and exit.
@item -w or, --wait
Instead of giving an error if the table is locked, wait until the table
is unlocked before continuing.  Note that if you are running @code{mysqld}
on the table with @code{--skip-locking}, the table can only be locked
on the table with @code{--skip-external-locking}, the table can only be locked
by another @code{myisamchk} command.
@end table
@@ -18125,11 +18135,11 @@ Should, however, be good enough for most cases.
Store in the @file{.MYI} file when the table was checked and if the table crashed.  This should be used to get full benefit of the
@code{--check-only-changed} option, but you shouldn't use this
option if the @code{mysqld} server is using the table and you are
running @code{mysqld} with @code{--skip-locking}.
running @code{mysqld} with @code{--skip-external-locking}.
@item -T or --read-only
Don't mark table as checked. This is useful if you use @code{myisamchk}
to check a table that is in use by some other application that doesn't
use locking (like @code{mysqld --skip-locking}).
use locking (like @code{mysqld --skip-external-locking}).
@end table
@@ -18289,9 +18299,9 @@ If you have a problem with disk space during repair, you can try to use
@cindex crash, recovery
@cindex recovery, from crash
If you run @code{mysqld} with @code{--skip-locking} (which is the default on
some systems, like Linux), you can't reliably use @code{myisamchk} to
check a table when @code{mysqld} is using the same table.  If you
If you run @code{mysqld} with @code{--skip-external-locking} (which is the
default on some systems, like Linux), you can't reliably use @code{myisamchk}
to check a table when @code{mysqld} is using the same table.  If you
can be sure that no one is accessing the tables through @code{mysqld}
while you run @code{myisamchk}, you only have to do @code{mysqladmin
flush-tables} before you start checking the tables.  If you can't
@@ -18300,14 +18310,14 @@ check the tables. If you run @code{myisamchk} while @code{mysqld} is updating
the tables, you may get a warning that a table is corrupt even if it
isn't.
If you are not using @code{--skip-locking}, you can use @code{myisamchk}
to check tables at any time.  While you do this, all clients that try
to update the table will wait until @code{myisamchk} is ready before
If you are not using @code{--skip-external-locking}, you can use
@code{myisamchk} to check tables at any time.  While you do this, all clients
that try to update the table will wait until @code{myisamchk} is ready before
continuing.
If you use @code{myisamchk} to repair or optimise tables, you
@strong{must} always ensure that the @code{mysqld} server is not using
the table (this also applies if you are using @code{--skip-locking}).
the table (this also applies if you are using @code{--skip-external-locking}).
If you don't take down @code{mysqld} you should at least do a
@code{mysqladmin flush-tables} before you run @code{myisamchk}.
Your tables @strong{may be corrupted} if the server and @code{myisamchk}
@@ -18688,8 +18698,8 @@ here. We explain some of the information in more detail later:
@item myisamchk -d tbl_name
Runs @code{myisamchk} in ``describe mode'' to produce a description of
your table. If you start the MySQL server using the
@code{--skip-locking} option, @code{myisamchk} may report an error for a
table that is updated while it runs.  However, because @code{myisamchk}
@code{--skip-external-locking} option, @code{myisamchk} may report an error
for a table that is updated while it runs.  However, because @code{myisamchk}
doesn't change the table in describe mode, there isn't any risk of
destroying data.
@@ -20333,7 +20343,7 @@ The thread is wating for the client to send a new command to it.
The thread is waiting for getting to get a external system lock for the
table. If you are not using multiple mysqld servers that are accessing
the same tables, you can disable system locks with the
@code{--skip-locking} option.
@code{--skip-external-locking} option.
@item @code{Upgrading lock}
The @code{INSERT DELAYED} handler is trying to get a lock for the table
to insert rows.
@@ -21352,8 +21362,8 @@ Display version information and exit.
@item -w, --wait
Wait and retry if table is in use.  If the @code{mysqld} server was
invoked with the @code{--skip-locking} option, it is not a good idea to
invoke @code{myisampack} if the table might be updated during the
invoked with the @code{--skip-external-locking} option, it is not a good idea
to invoke @code{myisampack} if the table might be updated during the
packing process.
@end table
@@ -27195,25 +27205,25 @@ If you have enough RAM, you could remove all swap devices. Some
operating systems will use a swap device in some contexts even if you
have free memory.
@item
Use the @code{--skip-locking} MySQL option to avoid external
Use the @code{--skip-external-locking} MySQL option to avoid external
locking. Note that this will not impact MySQL's functionality as
long as you only run one server. Just remember to take down the server (or
lock relevant parts) before you run @code{myisamchk}. On some system
this switch is mandatory because the external locking does not work in any
case.
The @code{--skip-locking} option is on by default when compiling with
The @code{--skip-external-locking} option is on by default when compiling with
MIT-pthreads, because @code{flock()} isn't fully supported by
MIT-pthreads on all platforms.  It's also on default for Linux
as Linux file locking are not yet safe.
The only case when you can't use @code{--skip-locking} is if you run
The only case when you can't use @code{--skip-external-locking} is if you run
multiple MySQL @emph{servers} (not clients) on the same data,
or run @code{myisamchk} on the table without first flushing and locking
the @code{mysqld} server tables first.
You can still use @code{LOCK TABLES}/@code{UNLOCK TABLES} even if you
are using @code{--skip-locking}
are using @code{--skip-external-locking}
@end itemize
@@ -33832,7 +33842,6 @@ SELECT [STRAIGHT_JOIN]
    [FROM table_references
      [WHERE where_definition]
      [GROUP BY @{unsigned_integer | col_name | formula@} [ASC | DESC], ...
        [WITH @{CUBE | ROLLUP@}] ]
      [HAVING where_definition]
      [ORDER BY @{unsigned_integer | col_name | formula@} [ASC | DESC] ,...]
      [LIMIT [offset,] rows]
@@ -34041,10 +34050,6 @@ If you are not getting the results you expect from your query, please
read the @code{GROUP BY} description.
@xref{Group by functions}.
@item
Since Version 3.23.12 MySQL supports @code{CUBE} and @code{ROLLUP}
clauses. @xref{CUBE and ROLLUP}.
@item
@cindex hints
@code{STRAIGHT_JOIN} forces the optimiser to join the tables in the order in
@@ -34154,7 +34159,6 @@ the examined rows will be write locked.
@menu
* JOIN::                        @code{JOIN} Syntax
* UNION::                       @code{UNION} Syntax
* CUBE and ROLLUP               @code{CUBE} and @code{ROLLUP} Syntax
@end menu
@node JOIN, UNION, SELECT, SELECT
@@ -34319,7 +34323,7 @@ mysql> SELECT * FROM table1 IGNORE INDEX (key3)
@xref{LEFT JOIN optimisation, , @code{LEFT JOIN} optimisation}.
@node UNION, CUBE and ROLLUP, JOIN, SELECT
@node UNION,  , JOIN, SELECT
@subsubsection @code{UNION} Syntax
@findex UNION
@@ -34337,9 +34341,10 @@ SELECT ...
@code{UNION} is used to combine the result from many @code{SELECT}
statements into one result set.
The columns listed in the select_expression portion of the @code{SELECT} should
have the same type. The column names used in the first @code{SELECT} query will be 
used as the column names for the results returned.
The columns listed in the select_expression portion of the @code{SELECT}
should have the same type. The column names used in the first
@code{SELECT} query will be used as the column names for the results
returned.
The @code{SELECT} commands are normal select commands, but with the following
restrictions:
@@ -34364,141 +34369,6 @@ UNION
ORDER BY a;
@end example
@node CUBE and ROLLUP, , UNION, SELECT
@subsubsection @code{CUBE} and @code{ROLLUP} Syntax
Documentation for OLAP extension
Introduction 
------------
MySQL will first support CUBE and ROLLUP operators from entire OLAP
functionality.  
The  CUBE  and ROLLUP extensions  to  SQL make querying  and reporting
easier  in data warehousing  environments. ROLLUP creates subtotals at
increasing levels of aggregation, from the most detailed up to a grand
total. CUBE  is an extension   similar to  ROLLUP,  enabling a  single
statement to calculate all possible combinations of subtotals.
Syntax: 
------	
The syntax supported by the enhanced mysql for CUBE and ROLLUP
operators.  
CUBE 
---- 
SELECT field1, field2, ... AGGR(fieldn) FROM
table GROUP BY field1, field2 field(n-1) WITH CUBE 
This would generate the aggregates with group bys of all the
combinations of dimensions.
ROLLUP:
-----        
	SELECT field1, field2, ... AGGR(fieldn) FROM table 
	GROUP BY field1, field2 field(n-1) WITH ROLLUP 
Example:
-------
mysql> select * from sales;
+------------+---------------+------+--------+
| product    | country       | year | profit |
+------------+---------------+------+--------+
| Computer   | India         | 2000 |   1200 |
| TV         | United States | 1999 |    150 |
| Calculator | United States | 1999 |     50 |
| Computer   | United States | 1999 |   1500 |
| Computer   | United States | 2000 |   1500 |
| TV         | United States | 2000 |    150 |
| TV         | India         | 2000 |    100 |
| TV         | India         | 2000 |    100 |
| Calculator | United States | 2000 |     75 |
| Calculator | India         | 2000 |     75 |
| TV         | India         | 1999 |    100 |
| Computer   | India         | 1999 |   1200 |
| Computer   | United States | 2000 |   1500 |
| Calculator | United States | 2000 |     75 |
+------------+---------------+------+--------+
14 rows in set (0.00 sec)
 
mysql> Select sales.product, sales.country , sales.year, sum(profit) from 
sales group by product, country, year with cube;
+------------+---------------+------+-------------+
| product    | country       | year | sum(profit) |
+------------+---------------+------+-------------+
| Calculator | India         | 2000 |          75 |
| Calculator | United States | 1999 |          50 |
| Calculator | United States | 2000 |         150 |
| Computer   | India         | 1999 |        1200 |
| Computer   | India         | 2000 |        1200 |
| Computer   | United States | 1999 |        1500 |
| Computer   | United States | 2000 |        3000 |
| TV         | India         | 1999 |         100 |
| TV         | India         | 2000 |         200 |
| TV         | United States | 1999 |         150 |
| TV         | United States | 2000 |         150 |
| ALL        | India         | 1999 |        1300 |
| ALL        | India         | 2000 |        1475 |
| ALL        | United States | 1999 |        1700 |
| ALL        | United States | 2000 |        3300 |
| Calculator | ALL           | 1999 |          50 |
| Calculator | ALL           | 2000 |         225 |
| Computer   | ALL           | 1999 |        2700 |
| Computer   | ALL           | 2000 |        4200 |
| TV         | ALL           | 1999 |         250 |
| TV         | ALL           | 2000 |         350 |
| Calculator | India         | 0    |          75 |
| Calculator | United States | 0    |         200 |
| Computer   | India         | 0    |        2400 |
| Computer   | United States | 0    |        4500 |
| TV         | India         | 0    |         300 |
| TV         | United States | 0    |         300 |
| ALL        | ALL           | 1999 |        3000 |
| ALL        | ALL           | 2000 |        4775 |
| ALL        | India         | 0    |        2775 |
| ALL        | United States | 0    |        5000 |
| Calculator | ALL           | 0    |         275 |
| Computer   | ALL           | 0    |        6900 |
| TV         | ALL           | 0    |         600 |
| ALL        | ALL           | 0    |        7775 |
+------------+---------------+------+-------------+
35 rows in set (0.00 sec)
MySQL supports now CUBE and ROLLUP extensions, with all  functions
that one wishes to use with them.
Those extensions already work in all tested combinations. They work
with UNION's, should work with sub-selects in 4.1 and derived tables. 
TODO
----
For the moment, ORDER and LIMIT are disabled for CUBE and ROLLUP. This
however remains to be added later.
Another feature that has to be added later is grouping of select list
itmes in order to alleviate user errors. For the moment, missing
(hidden) columns are not used at all.
Third feature to be done is to make  SQL SET OPTION to set values for
all values of the column optionally to:
* ALL (as it is now)
* NULL 
* blank
-------------------------------------------------------------------------
@findex HANDLER
@node HANDLER, INSERT, SELECT, Data Manipulation
@subsection @code{HANDLER} Syntax
@@ -37781,7 +37651,8 @@ The automatic recovery is activated if you start @code{mysqld} with
@code{--myisam-recover=#}. @xref{Command-line options}.
On open, the table is checked if it's marked as crashed or if the open
count variable for the table is not 0 and you are running with
@code{--skip-locking}.  If either of the above is true the following happens.
@code{--skip-external-locking}.  If either of the above is true the following
happens.
@itemize @bullet
@item
@@ -47832,7 +47703,7 @@ without locking the table properly.
If you are running many @code{mysqld} servers on the same data on a
system that doesn't support good filesystem locks (normally handled by
the @code{lockd} daemon ) or if you are running
multiple servers with @code{--skip-locking}
multiple servers with @code{--skip-external-locking}
@item
You have a crashed index/datafile that contains very wrong data that
got @code{mysqld} confused.
@@ -47901,12 +47772,12 @@ what is happening.
Have you applied the latest patches for your operating system?
@item
Use the @code{--skip-locking} option to @code{mysqld}.  On some systems, the
@code{lockd} lock manager does not work properly; the @code{--skip-locking}
option tells @code{mysqld} not to use external locking.  (This means that you
cannot run 2 @code{mysqld} servers on the same data and that you must be
careful if you use @code{myisamchk}, but it may be instructive to try the
option as a test.)
Use the @code{--skip-external-locking} option to @code{mysqld}.  On some
systems, the @code{lockd} lock manager does not work properly; the
@code{--skip-external-locking} option tells @code{mysqld} not to use external
locking.  (This means that you cannot run 2 @code{mysqld} servers on the same
data and that you must be careful if you use @code{myisamchk}, but it may be
instructive to try the option as a test.)
@item
Have you tried @code{mysqladmin -u root processlist} when @code{mysqld}
@@ -50142,6 +50013,14 @@ Our TODO section contains what we plan to have in 4.0. @xref{TODO MySQL 4.0}.
The startup parameters @code{myisam_max_extra_sort_file_size} and
@code{myisam_max_extra_sort_file_size} are now given in bytes, not megabytes.
@item
External system locking of MyISAM/ISAM files is now turned off by default.
One can turn this one by doing @code{--external-locking}. (For most users
this is never needed).
@item
Fixed core dump bug with @code{INSERT ... SET db_name.table_name.colname=''}.
@item
Fixed client hangup bug when using some SQL commands with wrong syntax.
@item
Fixed a timing bug in @code{DROP DATABASE}
@item
New @code{SET [GLOBAL | SESSION]} syntax to change thread specific and global
@@ -50155,14 +50034,14 @@ Renamed variable @code{query_cache_startup_type} to @code{query_cache_type},
Renamed some sql variables, but old names will still work until 5.0.
@xref{Upgrading-from-3.23}.
@item
Renamed @code{--skip-locking} to @code{--skip-external-locking}.
@item
Removed not used variable @code{query_buffer_size}.
@item
Fixed a bug that made the pager option in the @code{mysql} client
non-functional.
@item
Added full @code{AUTO_INCREMENT} support to @code{MERGE} tables.
@item
Added support for @code{CUBE} and @code{ROLLUP}.
@end itemize
@node News-4.0.2, News-4.0.1, News-4.0.3, News-4.0.x
@@ -50179,6 +50058,7 @@ Don't allow database names that contain @samp{\}.
@item
Added @code{XOR} operator (logical and bitwise @code{XOR}) with @code{^}
as a synonym for bitwise @code{XOR}.
@item
Added function @code{IS_FREE_LOCK("lock_name")}.
Based on code contributed by Hartmut Holzgraefe @email{hartmut@@six.de}.
@item
@@ -54493,7 +54373,7 @@ Added optimisation to remove const reference tables from @code{ORDER BY} and
@item
@code{mysqld} now automatically disables system locking on Linux and Windows,
and for systems that use MIT-pthreads.  You can force the use of locking
with the @code{--enable-locking} option.
with the @code{--enable-external-locking} option.
@item
Added @code{--console} option to @code{mysqld}, to force a console window
(for error messages) when using Windows.
@@ -54794,7 +54674,7 @@ index file and cause error 126 or 138.
@item
Fixed fatal bug in @code{refresh()} when running with the
@code{--skip-locking} option.  There was a ``very small'' time gap after
@code{--skip-external-locking} option.  There was a ``very small'' time gap after
a @code{mysqladmin refresh} when a table could be corrupted if one
thread updated a table while another thread did @code{mysqladmin
refresh} and another thread started a new update ont the same table
+3 −1
Original line number Diff line number Diff line
@@ -250,4 +250,6 @@
#define ER_WRONG_VALUE_FOR_VAR 1231
#define ER_WRONG_TYPE_FOR_VAR 1232
#define ER_VAR_CANT_BE_READ 1233
#define ER_ERROR_MESSAGES 234
#define ER_CANT_USE_OPTION_HERE 1234
#define ER_NOT_SUPPORTED_YET	1235
#define ER_ERROR_MESSAGES 236
+2 −1
Original line number Diff line number Diff line
@@ -181,7 +181,8 @@ void _ftb_parse_query(FTB *ftb, byte **start, byte *end,
  return;
}

static int _ftb_no_dupes_cmp(void* not_used, const void *a,const void *b)
static int _ftb_no_dupes_cmp(void* not_used __attribute__((unused)),
			     const void *a,const void *b)
{
  return CMP_NUM((*((my_off_t*)a)), (*((my_off_t*)b)));
}
+5 −3
Original line number Diff line number Diff line
@@ -840,7 +840,9 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend)
	  }
	  if (info->s->base.blobs)
	  {
	    if (!(to=mi_fix_rec_buff_for_blob(info,block_info.rec_len)))
	    if (!(to= mi_alloc_rec_buff(info, block_info.rec_len,
					&info->rec_buff,
					&info->alloced_rec_buff_length)))
	    {
	      mi_check_print_error(param,"Not enough memory for blob at %s",
			  llstr(start_recpos,llbuff));
+14 −10
Original line number Diff line number Diff line
@@ -60,10 +60,10 @@ int _mi_write_blob_record(MI_INFO *info, const byte *record)
  int error;
  ulong reclength,extra;

  extra=ALIGN_SIZE(MI_MAX_DYN_BLOCK_HEADER)+MI_SPLIT_LENGTH+
    MI_DYN_DELETE_BLOCK_HEADER+1;
  reclength=info->s->base.pack_reclength+
    _my_calc_total_blob_length(info,record)+ extra;
  extra= (ALIGN_SIZE(MI_MAX_DYN_BLOCK_HEADER)+MI_SPLIT_LENGTH+
	  MI_DYN_DELETE_BLOCK_HEADER+1);
  reclength= (info->s->base.pack_reclength+
	      _my_calc_total_blob_length(info,record)+ extra);
#ifdef NOT_USED					/* We now support big rows */
  if (reclength > MI_DYN_MAX_ROW_LENGTH)
  {
@@ -91,10 +91,10 @@ int _mi_update_blob_record(MI_INFO *info, my_off_t pos, const byte *record)
  int error;
  ulong reclength,extra;

  extra=ALIGN_SIZE(MI_MAX_DYN_BLOCK_HEADER)+MI_SPLIT_LENGTH+
    MI_DYN_DELETE_BLOCK_HEADER;
  reclength=info->s->base.pack_reclength+
    _my_calc_total_blob_length(info,record)+ extra;
  extra= (ALIGN_SIZE(MI_MAX_DYN_BLOCK_HEADER)+MI_SPLIT_LENGTH+
	  MI_DYN_DELETE_BLOCK_HEADER);
  reclength= (info->s->base.pack_reclength+
	      _my_calc_total_blob_length(info,record)+ extra);
#ifdef NOT_USED					/* We now support big rows */
  if (reclength > MI_DYN_MAX_ROW_LENGTH)
  {
@@ -1059,7 +1059,9 @@ int _mi_read_dynamic_record(MI_INFO *info, my_off_t filepos, byte *buf)
	  goto panic;
	if (info->s->base.blobs)
	{
	  if (!(to=mi_fix_rec_buff_for_blob(info,block_info.rec_len)))
	  if (!(to=mi_alloc_rec_buff(info, block_info.rec_len,
				     &info->rec_buff,
				     &info->alloced_rec_buff_length)))
	    goto err;
	}
	else
@@ -1328,7 +1330,9 @@ int _mi_read_rnd_dynamic_record(MI_INFO *info, byte *buf,
      info->lastpos=filepos;
      if (share->base.blobs)
      {
	if (!(to=mi_fix_rec_buff_for_blob(info,block_info.rec_len)))
	if (!(to= mi_alloc_rec_buff(info, block_info.rec_len,
				    &info->rec_buff,
				    &info->alloced_rec_buff_length)))
	  goto err;
      }
      else
Loading