Commit 2a02f9c9 authored by unknown's avatar unknown
Browse files

Merge pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint-bug20166

into  pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint


BitKeeper/etc/ignore:
  auto-union
BitKeeper/deleted/.del-init_db.sql:
  Auto merged
BitKeeper/deleted/.del-init_db.sql~a77d572c39d5a1f8:
  Auto merged
client/mysqltest.c:
  Auto merged
mysql-test/Makefile.am:
  Auto merged
mysql-test/lib/mtr_process.pl:
  Auto merged
mysql-test/mysql-test-run.pl:
  Auto merged
sql/mysqld.cc:
  Auto merged
parents b1988b0d 47a824ae
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -1940,4 +1940,18 @@ abcxx
select lpad('abc', cast(5 as unsigned integer), 'x');
lpad('abc', cast(5 as unsigned integer), 'x')
xxabc
DROP TABLE IF EXISTS t1;
CREATE TABLE `t1` (
`id` varchar(20) NOT NULL,
`tire` tinyint(3) unsigned NOT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `t1` (`id`, `tire`) VALUES ('A', 0), ('B', 1),('C', 2);
SELECT REPEAT( '#', tire ) AS A,
REPEAT( '#', tire % 999 ) AS B, tire FROM `t1`;
A	B	tire
		0
#	#	1
##	##	2
DROP TABLE t1;
End of 5.0 tests
+22 −0
Original line number Diff line number Diff line
@@ -1008,4 +1008,26 @@ select repeat('a', cast(2 as unsigned int));
select rpad('abc', cast(5 as unsigned integer), 'x');
select lpad('abc', cast(5 as unsigned integer), 'x');


#
# Bug #25197 :repeat function returns null when using table field directly as count
#

--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings

CREATE TABLE `t1` (
  `id` varchar(20) NOT NULL,
  `tire` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY (`id`)
);

INSERT INTO `t1` (`id`, `tire`) VALUES ('A', 0), ('B', 1),('C', 2);

SELECT REPEAT( '#', tire ) AS A,
       REPEAT( '#', tire % 999 ) AS B, tire FROM `t1`;

DROP TABLE t1;

--echo End of 5.0 tests
+3 −1
Original line number Diff line number Diff line
@@ -2251,8 +2251,10 @@ String *Item_func_repeat::val_str(String *str)
  if (args[0]->null_value || args[1]->null_value)
    goto err;				// string and/or delim are null
  null_value= 0;
  if ((count <= 0) && !args[1]->unsigned_flag)	// For nicer SQL code

  if (count == 0 || count < 0 && !args[1]->unsigned_flag)
    return &my_empty_string;

  /* Assumes that the maximum length of a String is < INT_MAX32. */
  /* Bounds check on count:  If this is triggered, we will error. */
  if ((ulonglong) count > INT_MAX32)
+10 −1
Original line number Diff line number Diff line
@@ -2037,7 +2037,10 @@ static void check_data_home(const char *path)

extern "C" sig_handler handle_segfault(int sig)
{
  time_t curr_time;
  struct tm tm;
  THD *thd=current_thd;

  /*
    Strictly speaking, one needs a mutex here
    but since we have got SIGSEGV already, things are a mess
@@ -2051,11 +2054,17 @@ extern "C" sig_handler handle_segfault(int sig)
  }

  segfaulted = 1;

  curr_time= time(NULL);
  localtime_r(&curr_time, &tm);

  fprintf(stderr,"\
mysqld got signal %d;\n\
%02d%02d%02d %2d:%02d:%02d - mysqld got signal %d;\n\
This could be because you hit a bug. It is also possible that this binary\n\
or one of the libraries it was linked against is corrupt, improperly built,\n\
or misconfigured. This error can also be caused by malfunctioning hardware.\n",
          tm.tm_year % 100, tm.tm_mon+1, tm.tm_mday,
          tm.tm_hour, tm.tm_min, tm.tm_sec,
	  sig);
  fprintf(stderr, "\
We will try our best to scrape up some info that will hopefully help diagnose\n\