mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	Merge bk-internal:/home/bk/mysql-5.0
into mysql.com:/home/jimw/my/mysql-5.0-clean
This commit is contained in:
		@@ -37,7 +37,7 @@
 | 
			
		||||
** 10 Jun 2003: SET NAMES and --no-set-names by Alexander Barkov
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#define DUMP_VERSION "10.9"
 | 
			
		||||
#define DUMP_VERSION "10.10"
 | 
			
		||||
 | 
			
		||||
#include <my_global.h>
 | 
			
		||||
#include <my_sys.h>
 | 
			
		||||
@@ -396,7 +396,7 @@ static int dump_all_databases();
 | 
			
		||||
static char *quote_name(const char *name, char *buff, my_bool force);
 | 
			
		||||
static const char *check_if_ignore_table(const char *table_name);
 | 
			
		||||
static char *primary_key_fields(const char *table_name);
 | 
			
		||||
static my_bool getViewStructure(char *table, char* db);
 | 
			
		||||
static my_bool get_view_structure(char *table, char* db);
 | 
			
		||||
static my_bool dump_all_views_in_db(char *database);
 | 
			
		||||
 | 
			
		||||
#include <help_start.h>
 | 
			
		||||
@@ -777,16 +777,16 @@ static int get_options(int *argc, char ***argv)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
** DBerror -- prints mysql error message and exits the program.
 | 
			
		||||
** DB_error -- prints mysql error message and exits the program.
 | 
			
		||||
*/
 | 
			
		||||
static void DBerror(MYSQL *mysql, const char *when)
 | 
			
		||||
static void DB_error(MYSQL *mysql, const char *when)
 | 
			
		||||
{
 | 
			
		||||
  DBUG_ENTER("DBerror");
 | 
			
		||||
  DBUG_ENTER("DB_error");
 | 
			
		||||
  my_printf_error(0,"Got error: %d: %s %s", MYF(0),
 | 
			
		||||
		  mysql_errno(mysql), mysql_error(mysql), when);
 | 
			
		||||
  safe_exit(EX_MYSQLERR);
 | 
			
		||||
  DBUG_VOID_RETURN;
 | 
			
		||||
} /* DBerror */
 | 
			
		||||
} /* DB_error */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@@ -862,7 +862,7 @@ static int dbConnect(char *host, char *user,char *passwd)
 | 
			
		||||
         NULL,opt_mysql_port,opt_mysql_unix_port,
 | 
			
		||||
         0)))
 | 
			
		||||
  {
 | 
			
		||||
    DBerror(&mysql_connection, "when trying to connect");
 | 
			
		||||
    DB_error(&mysql_connection, "when trying to connect");
 | 
			
		||||
    return 1;
 | 
			
		||||
  }
 | 
			
		||||
  /*
 | 
			
		||||
@@ -1093,7 +1093,7 @@ static void print_xml_row(FILE *xml_file, const char *row_name,
 | 
			
		||||
    number of fields in table, 0 if error
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
static uint getTableStructure(char *table, char *db)
 | 
			
		||||
static uint get_table_structure(char *table, char *db)
 | 
			
		||||
{
 | 
			
		||||
  MYSQL_RES  *tableRes;
 | 
			
		||||
  MYSQL_ROW  row;
 | 
			
		||||
@@ -1104,7 +1104,7 @@ static uint getTableStructure(char *table, char *db)
 | 
			
		||||
  char	     name_buff[NAME_LEN+3],table_buff[NAME_LEN*2+3];
 | 
			
		||||
  char	     table_buff2[NAME_LEN*2+3];
 | 
			
		||||
  FILE       *sql_file = md_result_file;
 | 
			
		||||
  DBUG_ENTER("getTableStructure");
 | 
			
		||||
  DBUG_ENTER("get_table_structure");
 | 
			
		||||
 | 
			
		||||
  delayed= opt_delayed ? " DELAYED " : "";
 | 
			
		||||
 | 
			
		||||
@@ -1457,7 +1457,7 @@ continue_xml:
 | 
			
		||||
    my_fclose(sql_file, MYF(MY_WME));
 | 
			
		||||
  }
 | 
			
		||||
  DBUG_RETURN(numFields);
 | 
			
		||||
} /* getTableStructure */
 | 
			
		||||
} /* get_table_structure */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static char *add_load_option(char *ptr,const char *object,
 | 
			
		||||
@@ -1523,10 +1523,12 @@ static char *alloc_query_str(ulong size)
 | 
			
		||||
  return query;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
** dumpTable saves database contents as a series of INSERT statements.
 | 
			
		||||
** dump_table saves database contents as a series of INSERT statements.
 | 
			
		||||
*/
 | 
			
		||||
static void dumpTable(uint numFields, char *table)
 | 
			
		||||
 | 
			
		||||
static void dump_table(uint numFields, char *table)
 | 
			
		||||
{
 | 
			
		||||
  char query_buf[QUERY_LENGTH], *end, buff[256],table_buff[NAME_LEN+3];
 | 
			
		||||
  char *result_table, table_buff2[NAME_LEN*2+3], *opt_quoted_table;
 | 
			
		||||
@@ -1592,7 +1594,7 @@ static void dumpTable(uint numFields, char *table)
 | 
			
		||||
    }
 | 
			
		||||
    if (mysql_real_query(sock, query, (uint) (end - query)))
 | 
			
		||||
    {
 | 
			
		||||
      DBerror(sock, "when executing 'SELECT INTO OUTFILE'");
 | 
			
		||||
      DB_error(sock, "when executing 'SELECT INTO OUTFILE'");
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
@@ -1639,13 +1641,13 @@ static void dumpTable(uint numFields, char *table)
 | 
			
		||||
      check_io(md_result_file);
 | 
			
		||||
    }
 | 
			
		||||
    if (mysql_query_with_error_report(sock, 0, query))
 | 
			
		||||
      DBerror(sock, "when retrieving data from server");
 | 
			
		||||
      DB_error(sock, "when retrieving data from server");
 | 
			
		||||
    if (quick)
 | 
			
		||||
      res=mysql_use_result(sock);
 | 
			
		||||
    else
 | 
			
		||||
      res=mysql_store_result(sock);
 | 
			
		||||
    if (!res)
 | 
			
		||||
      DBerror(sock, "when retrieving data from server");
 | 
			
		||||
      DB_error(sock, "when retrieving data from server");
 | 
			
		||||
    if (verbose)
 | 
			
		||||
      fprintf(stderr, "-- Retrieving rows...\n");
 | 
			
		||||
    if (mysql_num_fields(res) != numFields)
 | 
			
		||||
@@ -1946,7 +1948,7 @@ err:
 | 
			
		||||
    my_free(query, MYF(MY_ALLOW_ZERO_PTR));
 | 
			
		||||
  safe_exit(error);
 | 
			
		||||
  return;
 | 
			
		||||
} /* dumpTable */
 | 
			
		||||
} /* dump_table */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static char *getTableName(int reset)
 | 
			
		||||
@@ -2035,7 +2037,7 @@ static int init_dumping(char *database)
 | 
			
		||||
 | 
			
		||||
  if (mysql_select_db(sock, database))
 | 
			
		||||
  {
 | 
			
		||||
    DBerror(sock, "when selecting the database");
 | 
			
		||||
    DB_error(sock, "when selecting the database");
 | 
			
		||||
    return 1;			/* If --force */
 | 
			
		||||
  }
 | 
			
		||||
  if (!path && !opt_xml)
 | 
			
		||||
@@ -2123,14 +2125,14 @@ static int dump_all_tables_in_db(char *database)
 | 
			
		||||
      dynstr_append(&query, " READ /*!32311 LOCAL */,");
 | 
			
		||||
    }
 | 
			
		||||
    if (numrows && mysql_real_query(sock, query.str, query.length-1))
 | 
			
		||||
      DBerror(sock, "when using LOCK TABLES");
 | 
			
		||||
      DB_error(sock, "when using LOCK TABLES");
 | 
			
		||||
            /* We shall continue here, if --force was given */
 | 
			
		||||
    dynstr_free(&query);
 | 
			
		||||
  }
 | 
			
		||||
  if (flush_logs)
 | 
			
		||||
  {
 | 
			
		||||
    if (mysql_refresh(sock, REFRESH_LOG))
 | 
			
		||||
      DBerror(sock, "when doing refresh");
 | 
			
		||||
      DB_error(sock, "when doing refresh");
 | 
			
		||||
           /* We shall continue here, if --force was given */
 | 
			
		||||
  }
 | 
			
		||||
  while ((table= getTableName(0)))
 | 
			
		||||
@@ -2138,9 +2140,9 @@ static int dump_all_tables_in_db(char *database)
 | 
			
		||||
    char *end= strmov(afterdot, table);
 | 
			
		||||
    if (include_table(hash_key, end - hash_key))
 | 
			
		||||
    {
 | 
			
		||||
      numrows = getTableStructure(table, database);
 | 
			
		||||
      numrows = get_table_structure(table, database);
 | 
			
		||||
      if (!dFlag && numrows > 0)
 | 
			
		||||
	dumpTable(numrows,table);
 | 
			
		||||
	dump_table(numrows,table);
 | 
			
		||||
      my_free(order_by, MYF(MY_ALLOW_ZERO_PTR));
 | 
			
		||||
      order_by= 0;
 | 
			
		||||
    }
 | 
			
		||||
@@ -2188,18 +2190,18 @@ static my_bool dump_all_views_in_db(char *database)
 | 
			
		||||
      dynstr_append(&query, " READ /*!32311 LOCAL */,");
 | 
			
		||||
    }
 | 
			
		||||
    if (numrows && mysql_real_query(sock, query.str, query.length-1))
 | 
			
		||||
      DBerror(sock, "when using LOCK TABLES");
 | 
			
		||||
      DB_error(sock, "when using LOCK TABLES");
 | 
			
		||||
            /* We shall continue here, if --force was given */
 | 
			
		||||
    dynstr_free(&query);
 | 
			
		||||
  }
 | 
			
		||||
  if (flush_logs)
 | 
			
		||||
  {
 | 
			
		||||
    if (mysql_refresh(sock, REFRESH_LOG))
 | 
			
		||||
      DBerror(sock, "when doing refresh");
 | 
			
		||||
      DB_error(sock, "when doing refresh");
 | 
			
		||||
           /* We shall continue here, if --force was given */
 | 
			
		||||
  }
 | 
			
		||||
  while ((table= getTableName(0)))
 | 
			
		||||
     getViewStructure(table, database);
 | 
			
		||||
     get_view_structure(table, database);
 | 
			
		||||
  if (opt_xml)
 | 
			
		||||
  {
 | 
			
		||||
    fputs("</database>\n", md_result_file);
 | 
			
		||||
@@ -2226,7 +2228,7 @@ static int get_actual_table_name(const char *old_table_name,
 | 
			
		||||
                                  int buf_size)
 | 
			
		||||
{
 | 
			
		||||
  int retval;
 | 
			
		||||
  MYSQL_RES  *tableRes;
 | 
			
		||||
  MYSQL_RES  *table_res;
 | 
			
		||||
  MYSQL_ROW  row;
 | 
			
		||||
  char query[50 + 2*NAME_LEN];
 | 
			
		||||
  char show_name_buff[FN_REFLEN];
 | 
			
		||||
@@ -2242,18 +2244,22 @@ static int get_actual_table_name(const char *old_table_name,
 | 
			
		||||
    safe_exit(EX_MYSQLERR);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  tableRes= mysql_store_result( sock );
 | 
			
		||||
  retval = 1;
 | 
			
		||||
  if (tableRes != NULL)
 | 
			
		||||
  
 | 
			
		||||
  if ((table_res= mysql_store_result(sock)))
 | 
			
		||||
  {
 | 
			
		||||
	my_ulonglong numRows = mysql_num_rows(tableRes);
 | 
			
		||||
	if (numRows > 0)
 | 
			
		||||
	{
 | 
			
		||||
	  	row= mysql_fetch_row( tableRes );
 | 
			
		||||
	  	strmake(new_table_name, row[0], buf_size-1);
 | 
			
		||||
		retval = 0;
 | 
			
		||||
	}
 | 
			
		||||
  	mysql_free_result(tableRes);
 | 
			
		||||
    my_ulonglong num_rows= mysql_num_rows(table_res);
 | 
			
		||||
    if (num_rows > 0)
 | 
			
		||||
    {
 | 
			
		||||
      /*
 | 
			
		||||
        Return first row
 | 
			
		||||
        TODO: Return all matching rows
 | 
			
		||||
      */
 | 
			
		||||
      row= mysql_fetch_row(table_res);
 | 
			
		||||
      strmake(new_table_name, row[0], buf_size-1);
 | 
			
		||||
      retval= 0;
 | 
			
		||||
    }
 | 
			
		||||
    mysql_free_result(table_res);
 | 
			
		||||
  }
 | 
			
		||||
  return retval;
 | 
			
		||||
}
 | 
			
		||||
@@ -2278,37 +2284,36 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
 | 
			
		||||
      dynstr_append(&query, " READ /*!32311 LOCAL */,");
 | 
			
		||||
    }
 | 
			
		||||
    if (mysql_real_query(sock, query.str, query.length-1))
 | 
			
		||||
      DBerror(sock, "when doing LOCK TABLES");
 | 
			
		||||
      DB_error(sock, "when doing LOCK TABLES");
 | 
			
		||||
       /* We shall countinue here, if --force was given */
 | 
			
		||||
    dynstr_free(&query);
 | 
			
		||||
  }
 | 
			
		||||
  if (flush_logs)
 | 
			
		||||
  {
 | 
			
		||||
    if (mysql_refresh(sock, REFRESH_LOG))
 | 
			
		||||
      DBerror(sock, "when doing refresh");
 | 
			
		||||
      DB_error(sock, "when doing refresh");
 | 
			
		||||
     /* We shall countinue here, if --force was given */
 | 
			
		||||
  }
 | 
			
		||||
  if (opt_xml)
 | 
			
		||||
    print_xml_tag1(md_result_file, "", "database name=", db, "\n");
 | 
			
		||||
  for (i=0 ; i < tables ; i++)
 | 
			
		||||
  {
 | 
			
		||||
     char new_table_name[NAME_LEN];
 | 
			
		||||
    char new_table_name[NAME_LEN];
 | 
			
		||||
 | 
			
		||||
     /* the table name passed on commandline may be wrong case */
 | 
			
		||||
     if (!get_actual_table_name( table_names[i], new_table_name, sizeof(new_table_name) ))
 | 
			
		||||
     {
 | 
			
		||||
 | 
			
		||||
    	numrows = getTableStructure(new_table_name, db);
 | 
			
		||||
 | 
			
		||||
    	dumpTable(numrows, new_table_name);
 | 
			
		||||
     }
 | 
			
		||||
    /* the table name passed on commandline may be wrong case */
 | 
			
		||||
    if (!get_actual_table_name( table_names[i], new_table_name,
 | 
			
		||||
                                sizeof(new_table_name)))
 | 
			
		||||
    {
 | 
			
		||||
      numrows= get_table_structure(new_table_name, db);
 | 
			
		||||
      dump_table(numrows, new_table_name);
 | 
			
		||||
    }
 | 
			
		||||
    my_free(order_by, MYF(MY_ALLOW_ZERO_PTR));
 | 
			
		||||
    order_by= 0;
 | 
			
		||||
  }
 | 
			
		||||
  if (was_views)
 | 
			
		||||
  {
 | 
			
		||||
    for (i=0 ; i < tables ; i++)
 | 
			
		||||
      getViewStructure(table_names[i], db);
 | 
			
		||||
      get_view_structure(table_names[i], db);
 | 
			
		||||
  }
 | 
			
		||||
  if (opt_xml)
 | 
			
		||||
  {
 | 
			
		||||
@@ -2613,7 +2618,7 @@ cleanup:
 | 
			
		||||
  Getting VIEW structure
 | 
			
		||||
 | 
			
		||||
  SYNOPSIS
 | 
			
		||||
    getViewStructure()
 | 
			
		||||
    get_view_structure()
 | 
			
		||||
    table   view name
 | 
			
		||||
    db      db name
 | 
			
		||||
 | 
			
		||||
@@ -2622,9 +2627,9 @@ cleanup:
 | 
			
		||||
    1 ERROR
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
static my_bool getViewStructure(char *table, char* db)
 | 
			
		||||
static my_bool get_view_structure(char *table, char* db)
 | 
			
		||||
{
 | 
			
		||||
  MYSQL_RES  *tableRes;
 | 
			
		||||
  MYSQL_RES  *table_res;
 | 
			
		||||
  MYSQL_ROW  row;
 | 
			
		||||
  MYSQL_FIELD *field;
 | 
			
		||||
  char	     *result_table, *opt_quoted_table;
 | 
			
		||||
@@ -2632,7 +2637,7 @@ static my_bool getViewStructure(char *table, char* db)
 | 
			
		||||
  char	     table_buff2[NAME_LEN*2+3];
 | 
			
		||||
  char       buff[20+FN_REFLEN];
 | 
			
		||||
  FILE       *sql_file = md_result_file;
 | 
			
		||||
  DBUG_ENTER("getViewStructure");
 | 
			
		||||
  DBUG_ENTER("get_view_structure");
 | 
			
		||||
 | 
			
		||||
  if (tFlag)
 | 
			
		||||
    DBUG_RETURN(0);
 | 
			
		||||
@@ -2667,8 +2672,8 @@ static my_bool getViewStructure(char *table, char* db)
 | 
			
		||||
    }
 | 
			
		||||
    write_header(sql_file, db);
 | 
			
		||||
  }
 | 
			
		||||
  tableRes= mysql_store_result(sock);
 | 
			
		||||
  field= mysql_fetch_field_direct(tableRes, 0);
 | 
			
		||||
  table_res= mysql_store_result(sock);
 | 
			
		||||
  field= mysql_fetch_field_direct(table_res, 0);
 | 
			
		||||
  if (strcmp(field->name, "View") != 0)
 | 
			
		||||
  {
 | 
			
		||||
    if (verbose)
 | 
			
		||||
@@ -2688,10 +2693,10 @@ static my_bool getViewStructure(char *table, char* db)
 | 
			
		||||
    check_io(sql_file);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  row= mysql_fetch_row(tableRes);
 | 
			
		||||
  row= mysql_fetch_row(table_res);
 | 
			
		||||
  fprintf(sql_file, "%s;\n", row[1]);
 | 
			
		||||
  check_io(sql_file);
 | 
			
		||||
  mysql_free_result(tableRes);
 | 
			
		||||
  mysql_free_result(table_res);
 | 
			
		||||
 | 
			
		||||
  if (sql_file != md_result_file)
 | 
			
		||||
  {
 | 
			
		||||
 
 | 
			
		||||
@@ -2145,12 +2145,16 @@ row_sel_convert_mysql_key_to_innobase(
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 		if (dtype_get_mysql_type(dfield_get_type(dfield))
 | 
			
		||||
					== DATA_MYSQL_TRUE_VARCHAR) {
 | 
			
		||||
					== DATA_MYSQL_TRUE_VARCHAR
 | 
			
		||||
		    && dfield_get_type(dfield)->mtype != DATA_INT) {
 | 
			
		||||
			/* In a MySQL key value format, a true VARCHAR is
 | 
			
		||||
			always preceded by 2 bytes of a length field.
 | 
			
		||||
			dfield_get_type(dfield)->len returns the maximum
 | 
			
		||||
			'payload' len in bytes. That does not include the
 | 
			
		||||
			2 bytes that tell the actual data length. */
 | 
			
		||||
			2 bytes that tell the actual data length.
 | 
			
		||||
 | 
			
		||||
			We added the check != DATA_INT to make sure we do
 | 
			
		||||
			not treat MySQL ENUM or SET as a true VARCHAR! */
 | 
			
		||||
 | 
			
		||||
			data_len += 2;
 | 
			
		||||
			data_field_len += 2;
 | 
			
		||||
 
 | 
			
		||||
@@ -1173,4 +1173,16 @@ col1
 | 
			
		||||
0000-00-00 00:00:00
 | 
			
		||||
NULL
 | 
			
		||||
drop table t1;
 | 
			
		||||
create table t1 (col1 tinyint);
 | 
			
		||||
drop procedure if exists t1;
 | 
			
		||||
Warnings:
 | 
			
		||||
Note	1305	PROCEDURE t1 does not exist
 | 
			
		||||
create procedure t1 () begin declare exit handler for sqlexception
 | 
			
		||||
select'a'; insert into t1 values (200); end;|
 | 
			
		||||
call t1();
 | 
			
		||||
ERROR 22003: Out of range value adjusted for column 'col1' at row 1
 | 
			
		||||
select * from t1;
 | 
			
		||||
col1
 | 
			
		||||
drop procedure t1;
 | 
			
		||||
drop table t1;
 | 
			
		||||
set sql_mode=@org_mode;
 | 
			
		||||
 
 | 
			
		||||
@@ -1031,6 +1031,21 @@ insert into t1 select * from t1;
 | 
			
		||||
select * from t1;
 | 
			
		||||
drop table t1;
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Test of inserting an invalid value via a stored procedure (Bug #5907)
 | 
			
		||||
#
 | 
			
		||||
create table t1 (col1 tinyint);
 | 
			
		||||
drop procedure if exists t1;
 | 
			
		||||
delimiter |;
 | 
			
		||||
create procedure t1 () begin declare exit handler for sqlexception
 | 
			
		||||
select'a'; insert into t1 values (200); end;|
 | 
			
		||||
delimiter ;|
 | 
			
		||||
--error 1264
 | 
			
		||||
call t1();
 | 
			
		||||
select * from t1;
 | 
			
		||||
drop procedure t1;
 | 
			
		||||
drop table t1;
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Restore mode
 | 
			
		||||
#
 | 
			
		||||
 
 | 
			
		||||
@@ -2271,13 +2271,43 @@ inline
 | 
			
		||||
ulint
 | 
			
		||||
get_innobase_type_from_mysql_type(
 | 
			
		||||
/*==============================*/
 | 
			
		||||
			/* out: DATA_BINARY, DATA_VARCHAR, ... */
 | 
			
		||||
	Field*	field)	/* in: MySQL field */
 | 
			
		||||
				/* out: DATA_BINARY, DATA_VARCHAR, ... */
 | 
			
		||||
	ulint*	unsigned_flag,	/* out: DATA_UNSIGNED if an 'unsigned type';
 | 
			
		||||
				at least ENUM and SET, and unsigned integer
 | 
			
		||||
				types are 'unsigned types' */
 | 
			
		||||
	Field*	field)		/* in: MySQL field */
 | 
			
		||||
{
 | 
			
		||||
	/* The following asserts try to check that the MySQL type code fits in
 | 
			
		||||
	8 bits: this is used in ibuf and also when DATA_NOT_NULL is ORed to
 | 
			
		||||
	the type */
 | 
			
		||||
 | 
			
		||||
	DBUG_ASSERT((ulint)FIELD_TYPE_STRING < 256);
 | 
			
		||||
	DBUG_ASSERT((ulint)FIELD_TYPE_VAR_STRING < 256);
 | 
			
		||||
	DBUG_ASSERT((ulint)FIELD_TYPE_DOUBLE < 256);
 | 
			
		||||
	DBUG_ASSERT((ulint)FIELD_TYPE_FLOAT < 256);
 | 
			
		||||
	DBUG_ASSERT((ulint)FIELD_TYPE_DECIMAL < 256);
 | 
			
		||||
 | 
			
		||||
	if (field->flags & UNSIGNED_FLAG) {
 | 
			
		||||
 | 
			
		||||
		*unsigned_flag = DATA_UNSIGNED;
 | 
			
		||||
	} else {
 | 
			
		||||
		*unsigned_flag = 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (field->real_type() == FIELD_TYPE_ENUM
 | 
			
		||||
	    || field->real_type() == FIELD_TYPE_SET) {
 | 
			
		||||
 | 
			
		||||
		/* MySQL has field->type() a string type for these, but the
 | 
			
		||||
		data is actually internally stored as an unsigned integer
 | 
			
		||||
		code! */
 | 
			
		||||
 | 
			
		||||
		*unsigned_flag = DATA_UNSIGNED; /* MySQL has its own unsigned
 | 
			
		||||
						flag set to zero, even though
 | 
			
		||||
						internally this is an unsigned
 | 
			
		||||
						integer type */
 | 
			
		||||
		return(DATA_INT);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	switch (field->type()) {
 | 
			
		||||
	        /* NOTE that we only allow string types in DATA_MYSQL
 | 
			
		||||
		and DATA_VARMYSQL */
 | 
			
		||||
@@ -2313,8 +2343,6 @@ get_innobase_type_from_mysql_type(
 | 
			
		||||
		case FIELD_TYPE_DATETIME:
 | 
			
		||||
		case FIELD_TYPE_YEAR:
 | 
			
		||||
		case FIELD_TYPE_NEWDATE:
 | 
			
		||||
		case FIELD_TYPE_ENUM:
 | 
			
		||||
		case FIELD_TYPE_SET:
 | 
			
		||||
		case FIELD_TYPE_TIME:
 | 
			
		||||
		case FIELD_TYPE_TIMESTAMP:
 | 
			
		||||
					return(DATA_INT);
 | 
			
		||||
@@ -2686,7 +2714,7 @@ build_template(
 | 
			
		||||
					get_field_offset(table, field);
 | 
			
		||||
 | 
			
		||||
		templ->mysql_col_len = (ulint) field->pack_length();
 | 
			
		||||
		templ->type = get_innobase_type_from_mysql_type(field);
 | 
			
		||||
		templ->type = index->table->cols[i].type.mtype;
 | 
			
		||||
		templ->mysql_type = (ulint)field->type();
 | 
			
		||||
 | 
			
		||||
		if (templ->mysql_type == DATA_MYSQL_TRUE_VARCHAR) {
 | 
			
		||||
@@ -2698,8 +2726,8 @@ build_template(
 | 
			
		||||
				index->table->cols[i].type.prtype);
 | 
			
		||||
		templ->mbminlen = index->table->cols[i].type.mbminlen;
 | 
			
		||||
		templ->mbmaxlen = index->table->cols[i].type.mbmaxlen;
 | 
			
		||||
		templ->is_unsigned = (ulint) (field->flags & UNSIGNED_FLAG);
 | 
			
		||||
 | 
			
		||||
		templ->is_unsigned = index->table->cols[i].type.prtype
 | 
			
		||||
							& DATA_UNSIGNED;
 | 
			
		||||
		if (templ->type == DATA_BLOB) {
 | 
			
		||||
			prebuilt->templ_contains_blob = TRUE;
 | 
			
		||||
		}
 | 
			
		||||
@@ -2962,7 +2990,6 @@ calc_row_difference(
 | 
			
		||||
        byte*	        buf;
 | 
			
		||||
	upd_field_t*	ufield;
 | 
			
		||||
	ulint		col_type;
 | 
			
		||||
	ulint		is_unsigned;
 | 
			
		||||
	ulint		n_changed = 0;
 | 
			
		||||
	dfield_t	dfield;
 | 
			
		||||
	uint		i;
 | 
			
		||||
@@ -2998,8 +3025,7 @@ calc_row_difference(
 | 
			
		||||
 | 
			
		||||
		field_mysql_type = field->type();
 | 
			
		||||
	
 | 
			
		||||
		col_type = get_innobase_type_from_mysql_type(field);
 | 
			
		||||
		is_unsigned = (ulint) (field->flags & UNSIGNED_FLAG);
 | 
			
		||||
		col_type = prebuilt->table->cols[i].type.mtype;
 | 
			
		||||
 | 
			
		||||
		switch (col_type) {
 | 
			
		||||
 | 
			
		||||
@@ -3072,8 +3098,7 @@ calc_row_difference(
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			ufield->exp = NULL;
 | 
			
		||||
			ufield->field_no =
 | 
			
		||||
					(prebuilt->table->cols + i)->clust_pos;
 | 
			
		||||
			ufield->field_no = prebuilt->table->cols[i].clust_pos;
 | 
			
		||||
			n_changed++;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -3932,19 +3957,14 @@ create_table_def(
 | 
			
		||||
	for (i = 0; i < n_cols; i++) {
 | 
			
		||||
		field = form->field[i];
 | 
			
		||||
 | 
			
		||||
		col_type = get_innobase_type_from_mysql_type(field);
 | 
			
		||||
		col_type = get_innobase_type_from_mysql_type(&unsigned_type,
 | 
			
		||||
									field);
 | 
			
		||||
		if (field->null_ptr) {
 | 
			
		||||
			nulls_allowed = 0;
 | 
			
		||||
		} else {
 | 
			
		||||
			nulls_allowed = DATA_NOT_NULL;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (field->flags & UNSIGNED_FLAG) {
 | 
			
		||||
			unsigned_type = DATA_UNSIGNED;
 | 
			
		||||
		} else {
 | 
			
		||||
			unsigned_type = 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (field->binary()) {
 | 
			
		||||
			binary_type = DATA_BINARY_TYPE;
 | 
			
		||||
		} else {
 | 
			
		||||
@@ -4021,6 +4041,7 @@ create_index(
 | 
			
		||||
	ulint		ind_type;
 | 
			
		||||
	ulint		col_type;
 | 
			
		||||
	ulint		prefix_len;
 | 
			
		||||
	ulint		is_unsigned;
 | 
			
		||||
  	ulint		i;
 | 
			
		||||
  	ulint		j;
 | 
			
		||||
 | 
			
		||||
@@ -4070,7 +4091,8 @@ create_index(
 | 
			
		||||
 | 
			
		||||
		ut_a(j < form->s->fields);
 | 
			
		||||
 | 
			
		||||
		col_type = get_innobase_type_from_mysql_type(key_part->field);
 | 
			
		||||
		col_type = get_innobase_type_from_mysql_type(
 | 
			
		||||
					&is_unsigned, key_part->field);
 | 
			
		||||
 | 
			
		||||
		if (DATA_BLOB == col_type
 | 
			
		||||
		    || (key_part->length < field->pack_length()
 | 
			
		||||
 
 | 
			
		||||
@@ -2199,7 +2199,7 @@ String *Item_char_typecast::val_str(String *str)
 | 
			
		||||
    push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
 | 
			
		||||
                        ER_TRUNCATED_WRONG_VALUE,
 | 
			
		||||
                        ER(ER_TRUNCATED_WRONG_VALUE), char_type,
 | 
			
		||||
                        res->c_ptr());
 | 
			
		||||
                        res->c_ptr_safe());
 | 
			
		||||
    res->length((uint) length);
 | 
			
		||||
  }
 | 
			
		||||
  null_value= 0;
 | 
			
		||||
 
 | 
			
		||||
@@ -692,11 +692,11 @@ TABLE_LIST *find_table_in_list(TABLE_LIST *table,
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
  Test that table is unique
 | 
			
		||||
  Test that table is unique (It's only exists once in the table list)
 | 
			
		||||
 | 
			
		||||
  SYNOPSIS
 | 
			
		||||
    unique_table()
 | 
			
		||||
    table                 table which should be chaked
 | 
			
		||||
    table                 table which should be checked
 | 
			
		||||
    table_list            list of tables
 | 
			
		||||
 | 
			
		||||
  NOTE: to exclude derived tables from check we use following mechanism:
 | 
			
		||||
 
 | 
			
		||||
@@ -1410,7 +1410,8 @@ public:
 | 
			
		||||
  inline void send_kill_message() const
 | 
			
		||||
  {
 | 
			
		||||
    int err= killed_errno();
 | 
			
		||||
    my_message(err, ER(err), MYF(0));
 | 
			
		||||
    if (err)
 | 
			
		||||
      my_message(err, ER(err), MYF(0));
 | 
			
		||||
  }
 | 
			
		||||
  /* return TRUE if we will abort query if we make a warning now */
 | 
			
		||||
  inline bool really_abort_on_warning()
 | 
			
		||||
 
 | 
			
		||||
@@ -116,6 +116,27 @@ MYSQL_ERROR *push_warning(THD *thd, MYSQL_ERROR::enum_warning_level level,
 | 
			
		||||
  if (thd->query_id != thd->warn_id)
 | 
			
		||||
    mysql_reset_errors(thd, 0);
 | 
			
		||||
  thd->got_warning= 1;
 | 
			
		||||
 | 
			
		||||
  /* Abort if we are using strict mode and we are not using IGNORE */
 | 
			
		||||
  if ((int) level >= (int) MYSQL_ERROR::WARN_LEVEL_WARN &&
 | 
			
		||||
      thd->really_abort_on_warning())
 | 
			
		||||
  {
 | 
			
		||||
    /* Avoid my_message() calling push_warning */
 | 
			
		||||
    bool no_warnings_for_error= thd->no_warnings_for_error;
 | 
			
		||||
    sp_rcontext *spcont= thd->spcont;
 | 
			
		||||
 | 
			
		||||
    thd->no_warnings_for_error= 1;
 | 
			
		||||
    thd->spcont= 0;
 | 
			
		||||
 | 
			
		||||
    thd->killed= THD::KILL_BAD_DATA;
 | 
			
		||||
    my_message(code, msg, MYF(0));
 | 
			
		||||
 | 
			
		||||
    thd->spcont= spcont;
 | 
			
		||||
    thd->no_warnings_for_error= no_warnings_for_error;
 | 
			
		||||
    /* Store error in error list (as my_message() didn't do it) */
 | 
			
		||||
    level= MYSQL_ERROR::WARN_LEVEL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (thd->spcont &&
 | 
			
		||||
      thd->spcont->find_handler(code,
 | 
			
		||||
                                ((int) level >=
 | 
			
		||||
@@ -126,20 +147,6 @@ MYSQL_ERROR *push_warning(THD *thd, MYSQL_ERROR::enum_warning_level level,
 | 
			
		||||
    DBUG_RETURN(NULL);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Abort if we are using strict mode and we are not using IGNORE */
 | 
			
		||||
  if ((int) level >= (int) MYSQL_ERROR::WARN_LEVEL_WARN &&
 | 
			
		||||
      thd->really_abort_on_warning())
 | 
			
		||||
  {
 | 
			
		||||
    /* Avoid my_message() calling push_warning */
 | 
			
		||||
    bool no_warnings_for_error= thd->no_warnings_for_error;
 | 
			
		||||
    thd->no_warnings_for_error= 1;
 | 
			
		||||
    thd->killed= THD::KILL_BAD_DATA;
 | 
			
		||||
    my_message(code, msg, MYF(0));
 | 
			
		||||
    thd->no_warnings_for_error= no_warnings_for_error;
 | 
			
		||||
    /* Store error in error list (as my_message() didn't do it in this case */
 | 
			
		||||
    level= MYSQL_ERROR::WARN_LEVEL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (thd->warn_list.elements < thd->variables.max_error_count)
 | 
			
		||||
  {
 | 
			
		||||
    /*
 | 
			
		||||
 
 | 
			
		||||
@@ -3740,9 +3740,11 @@ copy_data_between_tables(TABLE *from,TABLE *to,
 | 
			
		||||
      goto err;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  /* Handler must be told explicitly to retrieve all columns, because
 | 
			
		||||
     this function does not set field->query_id in the columns to the
 | 
			
		||||
     current query id */
 | 
			
		||||
  /*
 | 
			
		||||
    Handler must be told explicitly to retrieve all columns, because
 | 
			
		||||
    this function does not set field->query_id in the columns to the
 | 
			
		||||
    current query id
 | 
			
		||||
  */
 | 
			
		||||
  from->file->extra(HA_EXTRA_RETRIEVE_ALL_COLS);
 | 
			
		||||
  init_read_record(&info, thd, from, (SQL_SELECT *) 0, 1,1);
 | 
			
		||||
  if (ignore ||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user