Commit efdf087e authored by sasha@mysql.sashanet.com's avatar sasha@mysql.sashanet.com
Browse files

Merge work:/home/bk/mysql

into mysql.sashanet.com:/home/sasha/src/bk/mysql
parents 9053bb63 84107a35
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3,6 +3,6 @@ make -k clean

aclocal; autoheader; aclocal; automake; autoconf

CFLAGS="-O6 -mpentiumpro -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 -mpentiumpro -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared --with-extra-charsets=complex
CFLAGS="-O6 -mpentiumpro -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 -mpentiumpro -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared --with-extra-charsets=complex --enable-thread-safe-client
make
strip sql/mysqld
+45 −40
Original line number Diff line number Diff line
@@ -275,7 +275,7 @@ Is there anything special to do when upgrading/downgrading MySQL?
How standards-compatible is MySQL?
* Extensions to ANSI::          @strong{MySQL} extensions to ANSI SQL92
* Ansi mode::                   Runnning @strong{MySQL} in ANSI mode
* Ansi mode::                   Running @strong{MySQL} in ANSI mode
* Differences from ANSI::       @strong{MySQL} differences compared to ANSI SQL92
* Missing functions::           Functionality missing from @strong{MySQL}
* Standards::                   What standards does @strong{MySQL} follow?
@@ -323,7 +323,7 @@ MySQL language reference
* DROP DATABASE::               @code{DROP DATABASE} syntax
* CREATE TABLE::                @code{CREATE TABLE} syntax
* ALTER TABLE::                 @code{ALTER TABLE} syntax
* RENAME TABLE::                
* RENAME TABLE::                @code{RENAME TABLE} syntax
* DROP TABLE::                  @code{DROP TABLE} syntax
* OPTIMIZE TABLE::              @code{OPTIMIZE TABLE} syntax
* CHECK TABLE::                 @code{CHECK TABLE} syntax
@@ -337,7 +337,7 @@ MySQL language reference
* LOAD DATA::                   @code{LOAD DATA INFILE} syntax
* UPDATE::                      @code{UPDATE} syntax
* USE::                         @code{USE} syntax
* FLUSH::                       @code{Flush} syntax (clearing caches)
* FLUSH::                       @code{FLUSH} syntax (clearing caches)
* KILL::                        @code{KILL} syntax
* SHOW::                        @code{SHOW} syntax (Get information about tables, columns, ...)
* EXPLAIN::                     @code{EXPLAIN} syntax (Get information about a @code{SELECT})
@@ -609,7 +609,7 @@ Using @code{MySQL} with some common programs
Problems and common errors
* What is crashing::            How to determinate what is causing problems
* What is crashing::            How to determine what is causing problems
* Crashing::                    What to do if @strong{MySQL} keeps crashing
* Link errors::                 Problems when linking with the @strong{MySQL} client library
* Common errors::               Some common errors when using @strong{MySQL}
@@ -754,8 +754,8 @@ MySQL internals
MySQL change history
* News-3.23.x::                 Changes in release 3.23.x (Released as beta)
* News-3.22.x::                 Changes in release 3.22.x (Recommended version)
* News-3.23.x::                 Changes in release 3.23.x (Recommended; beta)
* News-3.22.x::                 Changes in release 3.22.x (Still supported)
* News-3.21.x::                 Changes in release 3.21.x
* News-3.20.x::                 Changes in release 3.20.x
* News-3.19.x::                 Changes in release 3.19.x
@@ -11645,7 +11645,7 @@ to restart @code{mysqld} with @code{--skip-grant-tables} to be able to run
* DROP DATABASE::               @code{DROP DATABASE} syntax
* CREATE TABLE::                @code{CREATE TABLE} syntax
* ALTER TABLE::                 @code{ALTER TABLE} syntax
* RENAME TABLE::                
* RENAME TABLE::                @code{RENAME TABLE} syntax
* DROP TABLE::                  @code{DROP TABLE} syntax
* OPTIMIZE TABLE::              @code{OPTIMIZE TABLE} syntax
* CHECK TABLE::                 @code{CHECK TABLE} syntax
@@ -15983,14 +15983,14 @@ mysql> select COUNT(*) from student;
@findex COUNT(DISTINCT)
@findex DISTINCT
@item COUNT(DISTINCT expr,[expr...])
Returns a count of the number of different not @code{NULL} values.
Returns a count of the number of different non-@code{NULL} values.
@example
mysql> select COUNT(DISTINCT results) from student;
@end example
In @strong{MySQL} you can get the number of distinct expressions
combinations that doesn't contain NULL by giving a list of expressions.
In @strong{MySQL} you can get the number of distinct expression
combinations that don't contain NULL by giving a list of expressions.
In ANSI SQL you would have to do a concatenation of all expressions
inside @code{CODE(DISTINCT ..)}.
@@ -16792,23 +16792,23 @@ See also @xref{ALTER TABLE problems, , @code{ALTER TABLE} problems}.
@section @code{RENAME TABLE} syntax
@example
RENAME TABLE tbl_name as new_table_name[, tbl_name2 as new_table_name2,...]
RENAME TABLE tbl_name TO new_table_name[, tbl_name2 TO new_table_name2,...]
@end example
The rename is done atomic, which means that if no other thread can
The rename is done atomically, which means that if no other thread can
access any of the tables while the rename is running. This makes it
possible to replace a table with an empty one:
@example
CREATE TABLE new_table (...);
RENAME TABLE old_table TO backup_table, new_table as old_table;
RENAME TABLE old_table TO backup_table, new_table TO old_table;
@end example
The rename is done from left to right, which means that if you want to
swap two tables names, you have to do:
@example
RENAME TABLE old_table TO backup_table, new_table as old_table, backup_table as old_table;
RENAME TABLE old_table TO backup_table, new_table TO old_table, backup_table TO old_table;
@end example
Is long as two databases are on the same disk you can also do a rename
@@ -16818,9 +16818,10 @@ from a database to another:
RENAME TABLE current_database.table_name TO other_database.table_name;
@end example
When you execute @code{RENAME}, you can't have any locked tables or active
transactions.  You must also have the @code{ALTER TABLE} privilege on both
the old and the new table.
When you execute @code{RENAME}, you can't have any locked tables or
active transactions.  You must also have the @code{ALTER TABLE}
privilege on the original table and @code{CREATE} and @code{INSERT}
privilege on the new table.
If @strong{MySQL} encounters any errors in a multiple table rename, it
will do a reverse rename for all renamed tables to get everything back
@@ -18222,7 +18223,9 @@ file name, @strong{MySQL} will close and reopen the update log file.
@item @code{PRIVILEGES} @tab Reloads the privileges from the grant tables in
the @code{mysql} database.
@item @code{TABLES} @tab Closes all open tables.
@item @code{TABLES} @tab Closes all open tables and force all tables in use to be closed.
@item @code{TABLES table_name [,table_name...]} @tab Flush only the given tables
@item @code{TABLES WITH READ LOCK} @tab Closes all open tables and locks all tables for all databases with a read until one executes @code{UNLOCK TABLES}.
@@ -28347,7 +28350,7 @@ FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\'
@chapter Problems and common errors
@menu
* What is crashing::            How to determinate what is causing problems
* What is crashing::            How to determine what is causing problems
* Crashing::                    What to do if @strong{MySQL} keeps crashing
* Link errors::                 Problems when linking with the @strong{MySQL} client library
* Common errors::               Some common errors when using @strong{MySQL}
@@ -28372,7 +28375,7 @@ FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\'
@end menu
@node What is crashing, Crashing, Problems, Problems
@section How to determinate what is causing problems
@section How to determine what is causing problems
When you run into problems, the first thing you should do is to find out
which program / piece of equipment is causing problems.
@@ -29616,14 +29619,14 @@ SELECT id AS "Customer identity" FROM table_name;
Note that you ANSI SQL doesn't allow you to refer to an alias in a
@code{WHERE} clause.  This is because when the @code{WHERE} code is
executed the column value may not yet be determinated. For example the
executed the column value may not yet be determined. For example the
following query is @strong{illegal}:
@example
SELECT id,COUNT(*) AS cnt FROM table_name WHERE cnt > 0 GROUP BY id;
@end example
The @code{WHERE} statement is executed to determinate which rows should
The @code{WHERE} statement is executed to determine which rows should
be included in the @code{GROUP BY} part while @code{HAVING} is used to
decide which rows from the result set should be used.
@@ -35344,30 +35347,28 @@ find on the
this means that the version has not yet been released!
@menu
* News-3.23.x::                 Changes in release 3.23.x (Released as beta)
* News-3.22.x::                 Changes in release 3.22.x (Recommended version)
* News-3.23.x::                 Changes in release 3.23.x (Recommended; beta)
* News-3.22.x::                 Changes in release 3.22.x (Still supported)
* News-3.21.x::                 Changes in release 3.21.x
* News-3.20.x::                 Changes in release 3.20.x
* News-3.19.x::                 Changes in release 3.19.x
@end menu
@node News-3.23.x, News-3.22.x, News, News
@appendixsec Changes in release 3.23.x  (Released as beta)
@appendixsec Changes in release 3.23.x  (Recommended; beta)
The major difference between release 3.23 and releases 3.22 and 3.21 is that
3.23 contains a new ISAM library (MyISAM), which is more tuned for SQL
than the old ISAM was.
The 3.23 release is under development, and things will be added at a
fast pace to it.  For the moment we recommend this version only for
users that desperately need a new feature that is found only in this
release (like big file support and machine-independent tables).  (Note
that all new functionality in @strong{MySQL} 3.23 is extensively tested, but as
this release involves much new code, it's difficult to test everything).
The 3.23 release has several major new features that are not
present in the 3.22 or 3.21 releases.  We have added two new
table types:  MyISAM, a new ISAM library which is tuned for SQL
and supports large files; and BerkeleyDB which uses the Berkeley
DB library from Sleepycat Software to implement transaction-safe
tables.  The 3.23 release also includes support for database
replication between a master and many slaves.
We are not adding any more new features that are likely to break any
old code in @strong{MySQL} 3.23 so this version should stabilise pretty soon
and will soon be declared beta, gamma and release.
old code in @strong{MySQL} 3.23, so we recommend that you use this
version.  The replication and BerkeleyDB code is still under development,
though, so 3.23 is not released as a stable version yet.
@menu
* News-3.23.23::                Changes in release 3.23.23
@@ -35400,6 +35401,12 @@ and will soon be declared beta, gamma and release.
@appendixsubsec Changes in release 3.23.23
@itemize @bullet
@item
Changed behavior of @code{--enable-thread-safe-client} so
that both non-threaded (@code{-lmysqlclient}) and threaded
(@code{-lmysqlclient_r}) libraries are built.  Users who linked
against a threaded @code{-lmysqlclient} will need to link against
@code{libmysqlclient_r} now.
@item
Added atomic @code{RENAME} command.
@item
Don't count entries with @code{NULL} in @code{COUNT(DISTINCT ..)}.
@@ -39537,8 +39544,6 @@ Fail safe replication.
@item
Optimize, test and document transactions safe tables
@item
@code{RENAME table to table, table to table [,...]}
@item
Allow users to change startup options.
@item
Subqueries. @code{select id from t where grp in (select grp from g where u > 100)}
+11 −11
Original line number Diff line number Diff line
@@ -286,8 +286,8 @@ int main(int argc,char *argv[])
      histfile=my_strdup(getenv("MYSQL_HISTFILE"),MYF(MY_WME));
    else if (getenv("HOME"))
    {
      histfile=(char*) my_malloc(strlen(getenv("HOME"))
				 + strlen("/.mysql_history")+2,
      histfile=(char*) my_malloc((uint) strlen(getenv("HOME"))
				 + (uint) strlen("/.mysql_history")+2,
				 MYF(MY_WME));
      if (histfile)
	sprintf(histfile,"%s/.mysql_history",getenv("HOME"));
@@ -743,7 +743,7 @@ static COMMANDS *find_command (char *name,char cmd_char)
	end=0;					// no arguments to function
    }
    else
      len=strlen(name);
      len=(uint) strlen(name);
  }

  for (uint i= 0; commands[i].name; i++)
@@ -772,7 +772,7 @@ static bool add_line(String &buffer,char *line,char *in_string)
    add_history(line);
#endif
#ifdef USE_MB
  char *strend=line+strlen(line);
  char *strend=line+(uint) strlen(line);
#endif

  for (pos=out=line ; (inchar= (uchar) *pos) ; pos++)
@@ -926,14 +926,14 @@ static char *new_command_generator(char *text,int state)
  static uint i;

  if (!state) {
    textlen=strlen(text);
    textlen=(uint) strlen(text);
  }

  if (textlen>0) { /* lookup in the hash */
    if (!state) {
      uint len;

      b = find_all_matches(&ht,text,strlen(text),&len);
      b = find_all_matches(&ht,text,(uint) strlen(text),&len);
      if (!b) {
	return NullS;
      }
@@ -961,7 +961,7 @@ static char *new_command_generator(char *text,int state)
    }
    ptr= NullS;
    while (e && !ptr) { /* find valid entry in bucket */
      if (strlen(e->str)==b->nKeyLength) {
      if ((uint) strlen(e->str)==b->nKeyLength) {
	ptr = strdup(e->str);
      }
      /* find the next used entry */
@@ -1054,7 +1054,7 @@ You can turn off this feature to get a quicker startup with -A\n\n");
      while ((table_row=mysql_fetch_row(tables)))
      {
	if (!completion_hash_exists(&ht,(char*) table_row[0],
				    strlen((const char*) table_row[0])))
				    (uint) strlen((const char*) table_row[0])))
	  add_word(&ht,table_row[0]);
      }
    }
@@ -1102,7 +1102,7 @@ You can turn off this feature to get a quicker startup with -A\n\n");
	add_word(&ht,field_names[i][j]);
	field_names[i][num_fields+j] = my_strdup(sql_field->name,MYF(0));
	if (!completion_hash_exists(&ht,field_names[i][num_fields+j],
				    strlen(field_names[i][num_fields+j])))
				    (uint) strlen(field_names[i][num_fields+j])))
	  add_word(&ht,field_names[i][num_fields+j]);
	j++;
      }
@@ -1351,7 +1351,7 @@ print_table_data(MYSQL_RES *result)
  separator.copy("+",1);
  while ((field = mysql_fetch_field(result)))
  {
    uint length=skip_column_names ? 0 : strlen(field->name);
    uint length=skip_column_names ? 0 : (uint) strlen(field->name);
    if (quick)
      length=max(length,field->length);
    else
@@ -1437,7 +1437,7 @@ print_table_data_vertically(MYSQL_RES *result)

  while ((field = mysql_fetch_field(result)))
  {
    uint length=strlen(field->name);
    uint length=(uint) strlen(field->name);
    if (length > max_length)
      max_length= length;
    field->max_length=length;
+2 −2
Original line number Diff line number Diff line
@@ -909,7 +909,7 @@ static void print_top(MYSQL_RES *result)
  mysql_field_seek(result,0);
  while((field = mysql_fetch_field(result)))
  {
    if ((length=strlen(field->name)) > field->max_length)
    if ((length=(uint) strlen(field->name)) > field->max_length)
      field->max_length=length;
    else
      length=field->max_length;
@@ -974,7 +974,7 @@ static void print_relative_row_vert(MYSQL_RES *result __attribute__((unused)),
	 llstr((tmp - last_values[row]), buff));

  /* Find the minimum row length needed to output the relative value */
  if ((length=strlen(buff) > ex_val_max_len[row]) && ex_status_printed)
  if ((length=(uint) strlen(buff) > ex_val_max_len[row]) && ex_status_printed)
    ex_val_max_len[row] = length;
  last_values[row] = tmp;
}
+3 −3
Original line number Diff line number Diff line
@@ -782,7 +782,7 @@ static char *add_load_option(char *ptr,const char *object,
  if (object)
  {
    ptr= strxmov(ptr," ",statement," '",NullS);
    ptr= field_escape(ptr,object,strlen(object));
    ptr= field_escape(ptr,object,(uint) strlen(object));
    *ptr++= '\'';
  }
  return ptr;
@@ -910,7 +910,7 @@ static void dumpTable(uint numFields, char *table)
    total_length=net_buffer_length;		/* Force row break */
    row_break=0;
    rownr=0;
    init_length=strlen(insert_pat)+4;
    init_length=(uint) strlen(insert_pat)+4;

    while ((row=mysql_fetch_row(res)))
    {
@@ -1215,7 +1215,7 @@ static void print_value(FILE *file, MYSQL_RES *result, MYSQL_ROW row,
	fputc(' ',file);
	fputs(prefix, file);
	if (string_value)
	  unescape(file,row[0],strlen(row[0]));
	  unescape(file,row[0],(uint) strlen(row[0]));
	else
	  fputs(row[0], file);
	return;
Loading