Commit fdc16dc4 authored by jimw@mysql.com's avatar jimw@mysql.com

Merge bk-internal:/home/bk/mysql-5.0

into mysql.com:/home/jimw/my/mysql-5.0-clean
parents 9b798253 94cc8442
...@@ -490,7 +490,7 @@ os_io_init_simple(void) ...@@ -490,7 +490,7 @@ os_io_init_simple(void)
} }
} }
#ifndef UNIV_HOTBACKUP #if !defined(UNIV_HOTBACKUP) && !defined(__NETWARE__)
/************************************************************************* /*************************************************************************
Creates a temporary file. This function is defined in ha_innodb.cc. */ Creates a temporary file. This function is defined in ha_innodb.cc. */
...@@ -498,7 +498,7 @@ int ...@@ -498,7 +498,7 @@ int
innobase_mysql_tmpfile(void); innobase_mysql_tmpfile(void);
/*========================*/ /*========================*/
/* out: temporary file descriptor, or < 0 on error */ /* out: temporary file descriptor, or < 0 on error */
#endif /* !UNIV_HOTBACKUP */ #endif /* !UNIV_HOTBACKUP && !__NETWARE__ */
/*************************************************************************** /***************************************************************************
Creates a temporary file. */ Creates a temporary file. */
...@@ -508,9 +508,12 @@ os_file_create_tmpfile(void) ...@@ -508,9 +508,12 @@ os_file_create_tmpfile(void)
/*========================*/ /*========================*/
/* out: temporary file handle, or NULL on error */ /* out: temporary file handle, or NULL on error */
{ {
#ifdef __NETWARE__
FILE* file = tmpfile();
#else /* __NETWARE__ */
FILE* file = NULL; FILE* file = NULL;
int fd = -1; int fd = -1;
#ifdef UNIV_HOTBACKUP # ifdef UNIV_HOTBACKUP
int tries; int tries;
for (tries = 10; tries--; ) { for (tries = 10; tries--; ) {
char* name = tempnam(fil_path_to_mysql_datadir, "ib"); char* name = tempnam(fil_path_to_mysql_datadir, "ib");
...@@ -538,22 +541,25 @@ os_file_create_tmpfile(void) ...@@ -538,22 +541,25 @@ os_file_create_tmpfile(void)
name); name);
free(name); free(name);
} }
#else /* UNIV_HOTBACKUP */ # else /* UNIV_HOTBACKUP */
fd = innobase_mysql_tmpfile(); fd = innobase_mysql_tmpfile();
#endif /* UNIV_HOTBACKUP */ # endif /* UNIV_HOTBACKUP */
if (fd >= 0) { if (fd >= 0) {
file = fdopen(fd, "w+b"); file = fdopen(fd, "w+b");
} }
#endif /* __NETWARE__ */
if (!file) { if (!file) {
ut_print_timestamp(stderr); ut_print_timestamp(stderr);
fprintf(stderr, fprintf(stderr,
" InnoDB: Error: unable to create temporary file;" " InnoDB: Error: unable to create temporary file;"
" errno: %d\n", errno); " errno: %d\n", errno);
#ifndef __NETWARE__
if (fd >= 0) { if (fd >= 0) {
close(fd); close(fd);
} }
#endif /* !__NETWARE__ */
} }
return(file); return(file);
......
...@@ -5704,7 +5704,9 @@ ha_innobase::store_lock( ...@@ -5704,7 +5704,9 @@ ha_innobase::store_lock(
if ((lock_type == TL_READ && thd->in_lock_tables) || if ((lock_type == TL_READ && thd->in_lock_tables) ||
(lock_type == TL_READ_HIGH_PRIORITY && thd->in_lock_tables) || (lock_type == TL_READ_HIGH_PRIORITY && thd->in_lock_tables) ||
lock_type == TL_READ_WITH_SHARED_LOCKS || lock_type == TL_READ_WITH_SHARED_LOCKS ||
lock_type == TL_READ_NO_INSERT) { lock_type == TL_READ_NO_INSERT ||
thd->lex->sql_command != SQLCOM_SELECT) {
/* The OR cases above are in this order: /* The OR cases above are in this order:
1) MySQL is doing LOCK TABLES ... READ LOCAL, or 1) MySQL is doing LOCK TABLES ... READ LOCAL, or
2) (we do not know when TL_READ_HIGH_PRIORITY is used), or 2) (we do not know when TL_READ_HIGH_PRIORITY is used), or
...@@ -5712,7 +5714,15 @@ ha_innobase::store_lock( ...@@ -5712,7 +5714,15 @@ ha_innobase::store_lock(
4) we are doing a complex SQL statement like 4) we are doing a complex SQL statement like
INSERT INTO ... SELECT ... and the logical logging (MySQL INSERT INTO ... SELECT ... and the logical logging (MySQL
binlog) requires the use of a locking read, or binlog) requires the use of a locking read, or
MySQL is doing LOCK TABLES ... READ. */ MySQL is doing LOCK TABLES ... READ.
5) we let InnoDB do locking reads for all SQL statements that
are not simple SELECTs; note that select_lock_type in this
case may get strengthened in ::external_lock() to LOCK_X.
Note that we MUST use a locking read in all data modifying
SQL statements, because otherwise the execution would not be
serializable, and also the results from the update could be
unexpected if an obsolete consistent read view would be
used. */
prebuilt->select_lock_type = LOCK_S; prebuilt->select_lock_type = LOCK_S;
prebuilt->stored_select_lock_type = LOCK_S; prebuilt->stored_select_lock_type = LOCK_S;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment