mirror of
https://github.com/MariaDB/server.git
synced 2025-08-09 22:24:09 +03:00
auto-merge
This commit is contained in:
@@ -454,3 +454,11 @@ select last_insert_id();
|
|||||||
last_insert_id()
|
last_insert_id()
|
||||||
3
|
3
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table t1 (a int primary key auto_increment, b int, c int, e int, d timestamp default current_timestamp, unique(b),unique(c),unique(e));
|
||||||
|
insert into t1 values(null,1,1,1,now());
|
||||||
|
insert into t1 values(null,0,0,0,null);
|
||||||
|
replace into t1 values(null,1,0,2,null);
|
||||||
|
select last_insert_id();
|
||||||
|
last_insert_id()
|
||||||
|
3
|
||||||
|
drop table t1;
|
||||||
|
@@ -314,5 +314,15 @@ insert into t1 values(null,0,0,null);
|
|||||||
# this will delete two rows
|
# this will delete two rows
|
||||||
replace into t1 values(null,1,0,null);
|
replace into t1 values(null,1,0,null);
|
||||||
select last_insert_id();
|
select last_insert_id();
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
# Test of REPLACE when it does a INSERT+DELETE for all the conflicting rows
|
||||||
|
# (i.e.) when there are three rows conflicting in unique key columns with
|
||||||
|
# a row that is being inserted, all the three rows will be deleted and then
|
||||||
|
# the new rows will be inserted.
|
||||||
|
create table t1 (a int primary key auto_increment, b int, c int, e int, d timestamp default current_timestamp, unique(b),unique(c),unique(e));
|
||||||
|
insert into t1 values(null,1,1,1,now());
|
||||||
|
insert into t1 values(null,0,0,0,null);
|
||||||
|
replace into t1 values(null,1,0,2,null);
|
||||||
|
select last_insert_id();
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
@@ -451,7 +451,12 @@ static void get_symbol_path(char *path, size_t size)
|
|||||||
|
|
||||||
if (!strstr(path, module_dir))
|
if (!strstr(path, module_dir))
|
||||||
{
|
{
|
||||||
strncat(path, module_dir, size);
|
size_t dir_len = strlen(module_dir);
|
||||||
|
if (size > dir_len)
|
||||||
|
{
|
||||||
|
strncat(path, module_dir, size-1);
|
||||||
|
size -= dir_len;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CloseHandle(hSnap);
|
CloseHandle(hSnap);
|
||||||
@@ -459,9 +464,9 @@ static void get_symbol_path(char *path, size_t size)
|
|||||||
|
|
||||||
/* Add _NT_SYMBOL_PATH, if present. */
|
/* Add _NT_SYMBOL_PATH, if present. */
|
||||||
envvar= getenv("_NT_SYMBOL_PATH");
|
envvar= getenv("_NT_SYMBOL_PATH");
|
||||||
if(envvar)
|
if(envvar && size)
|
||||||
{
|
{
|
||||||
strncat(path, envvar, size);
|
strncat(path, envvar, size-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -483,7 +488,7 @@ void my_print_stacktrace(uchar* unused1, ulong unused2)
|
|||||||
int i;
|
int i;
|
||||||
CONTEXT context;
|
CONTEXT context;
|
||||||
STACKFRAME64 frame={0};
|
STACKFRAME64 frame={0};
|
||||||
static char symbol_path[MAX_SYMBOL_PATH+1];
|
static char symbol_path[MAX_SYMBOL_PATH];
|
||||||
|
|
||||||
if(!exception_ptrs || !init_dbghelp_functions())
|
if(!exception_ptrs || !init_dbghelp_functions())
|
||||||
return;
|
return;
|
||||||
@@ -492,7 +497,7 @@ void my_print_stacktrace(uchar* unused1, ulong unused2)
|
|||||||
context = *(exception_ptrs->ContextRecord);
|
context = *(exception_ptrs->ContextRecord);
|
||||||
/*Initialize symbols.*/
|
/*Initialize symbols.*/
|
||||||
pSymSetOptions(SYMOPT_LOAD_LINES|SYMOPT_NO_PROMPTS|SYMOPT_DEFERRED_LOADS|SYMOPT_DEBUG);
|
pSymSetOptions(SYMOPT_LOAD_LINES|SYMOPT_NO_PROMPTS|SYMOPT_DEFERRED_LOADS|SYMOPT_DEBUG);
|
||||||
get_symbol_path(symbol_path, MAX_SYMBOL_PATH);
|
get_symbol_path(symbol_path, sizeof(symbol_path));
|
||||||
pSymInitialize(hProcess, symbol_path, TRUE);
|
pSymInitialize(hProcess, symbol_path, TRUE);
|
||||||
|
|
||||||
/*Prepare stackframe for the first StackWalk64 call*/
|
/*Prepare stackframe for the first StackWalk64 call*/
|
||||||
|
@@ -1545,6 +1545,17 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
If more than one iteration of the above while loop is done, from the second
|
||||||
|
one the row being inserted will have an explicit value in the autoinc field,
|
||||||
|
which was set at the first call of handler::update_auto_increment(). This
|
||||||
|
value is saved to avoid thd->insert_id_for_cur_row becoming 0. Use this saved
|
||||||
|
autoinc value.
|
||||||
|
*/
|
||||||
|
if (table->file->insert_id_for_cur_row == 0)
|
||||||
|
table->file->insert_id_for_cur_row= insert_id_for_cur_row;
|
||||||
|
|
||||||
thd->record_first_successful_insert_id_in_cur_stmt(table->file->insert_id_for_cur_row);
|
thd->record_first_successful_insert_id_in_cur_stmt(table->file->insert_id_for_cur_row);
|
||||||
/*
|
/*
|
||||||
Restore column maps if they where replaced during an duplicate key
|
Restore column maps if they where replaced during an duplicate key
|
||||||
|
Reference in New Issue
Block a user