Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
e6882bbf
Commit
e6882bbf
authored
Mar 29, 2004
by
monty@mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Disable INSERT DELAYED for embedded library
parent
a0f62938
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
46 additions
and
20 deletions
+46
-20
sql-bench/crash-me.sh
sql-bench/crash-me.sh
+1
-1
sql/mysql_priv.h
sql/mysql_priv.h
+16
-11
sql/sql_base.cc
sql/sql_base.cc
+2
-0
sql/sql_insert.cc
sql/sql_insert.cc
+20
-6
sql/sql_string.cc
sql/sql_string.cc
+7
-2
No files found.
sql-bench/crash-me.sh
View file @
e6882bbf
...
@@ -407,7 +407,7 @@ if ($dbh->do("create table crash_q (a integer, b integer,c1 CHAR(10))") &&
...
@@ -407,7 +407,7 @@ if ($dbh->do("create table crash_q (a integer, b integer,c1 CHAR(10))") &&
[
"with constraint and restrict/cascade"
,
[
"with constraint and restrict/cascade"
,
"alter table crash_q drop constraint u1 restrict"
]
,
"alter table crash_q drop constraint u1 restrict"
]
,
[
"with drop key"
,
[
"with drop key"
,
"alter table crash_q drop key
c
1"
])
;
"alter table crash_q drop key
u
1"
])
;
try_and_report
(
"Alter table add primary key"
,
'alter_add_primary_key'
,
try_and_report
(
"Alter table add primary key"
,
'alter_add_primary_key'
,
[
"with constraint"
,
[
"with constraint"
,
"alter table crash_q1 add constraint p1 primary key(c1)"
]
,
"alter table crash_q1 add constraint p1 primary key(c1)"
]
,
...
...
sql/mysql_priv.h
View file @
e6882bbf
...
@@ -424,11 +424,6 @@ bool do_command(THD *thd);
...
@@ -424,11 +424,6 @@ bool do_command(THD *thd);
bool
dispatch_command
(
enum
enum_server_command
command
,
THD
*
thd
,
bool
dispatch_command
(
enum
enum_server_command
command
,
THD
*
thd
,
char
*
packet
,
uint
packet_length
);
char
*
packet
,
uint
packet_length
);
bool
check_dup
(
const
char
*
db
,
const
char
*
name
,
TABLE_LIST
*
tables
);
bool
check_dup
(
const
char
*
db
,
const
char
*
name
,
TABLE_LIST
*
tables
);
#ifndef EMBEDDED_LIBRARY
bool
check_stack_overrun
(
THD
*
thd
,
char
*
dummy
);
#else
#define check_stack_overrun(A, B) 0
#endif
bool
table_cache_init
(
void
);
bool
table_cache_init
(
void
);
void
table_cache_free
(
void
);
void
table_cache_free
(
void
);
...
@@ -534,7 +529,6 @@ int mysql_multi_update(THD *thd, TABLE_LIST *table_list,
...
@@ -534,7 +529,6 @@ int mysql_multi_update(THD *thd, TABLE_LIST *table_list,
int
mysql_insert
(
THD
*
thd
,
TABLE_LIST
*
table
,
List
<
Item
>
&
fields
,
int
mysql_insert
(
THD
*
thd
,
TABLE_LIST
*
table
,
List
<
Item
>
&
fields
,
List
<
List_item
>
&
values
,
List
<
Item
>
&
update_fields
,
List
<
List_item
>
&
values
,
List
<
Item
>
&
update_fields
,
List
<
Item
>
&
update_values
,
enum_duplicates
flag
);
List
<
Item
>
&
update_values
,
enum_duplicates
flag
);
void
kill_delayed_threads
(
void
);
int
mysql_delete
(
THD
*
thd
,
TABLE_LIST
*
table
,
COND
*
conds
,
SQL_LIST
*
order
,
int
mysql_delete
(
THD
*
thd
,
TABLE_LIST
*
table
,
COND
*
conds
,
SQL_LIST
*
order
,
ha_rows
rows
,
ulong
options
);
ha_rows
rows
,
ulong
options
);
int
mysql_truncate
(
THD
*
thd
,
TABLE_LIST
*
table_list
,
bool
dont_send_ok
=
0
);
int
mysql_truncate
(
THD
*
thd
,
TABLE_LIST
*
table_list
,
bool
dont_send_ok
=
0
);
...
@@ -969,11 +963,6 @@ void make_datetime(DATE_TIME_FORMAT *format, TIME *l_time, String *str);
...
@@ -969,11 +963,6 @@ void make_datetime(DATE_TIME_FORMAT *format, TIME *l_time, String *str);
int
test_if_number
(
char
*
str
,
int
*
res
,
bool
allow_wildcards
);
int
test_if_number
(
char
*
str
,
int
*
res
,
bool
allow_wildcards
);
void
change_byte
(
byte
*
,
uint
,
char
,
char
);
void
change_byte
(
byte
*
,
uint
,
char
,
char
);
#ifndef EMBEDDED_LIBRARY
extern
"C"
void
unireg_abort
(
int
exit_code
);
#else
#define unireg_abort(exit_code) DBUG_RETURN(exit_code)
#endif
void
init_read_record
(
READ_RECORD
*
info
,
THD
*
thd
,
TABLE
*
reg_form
,
void
init_read_record
(
READ_RECORD
*
info
,
THD
*
thd
,
TABLE
*
reg_form
,
SQL_SELECT
*
select
,
SQL_SELECT
*
select
,
int
use_record_cache
,
bool
print_errors
);
int
use_record_cache
,
bool
print_errors
);
...
@@ -1122,3 +1111,19 @@ inline void setup_table_map(TABLE *table, TABLE_LIST *table_list, uint tablenr)
...
@@ -1122,3 +1111,19 @@ inline void setup_table_map(TABLE *table, TABLE_LIST *table_list, uint tablenr)
table
->
map
=
(
table_map
)
1
<<
tablenr
;
table
->
map
=
(
table_map
)
1
<<
tablenr
;
table
->
force_index
=
table_list
->
force_index
;
table
->
force_index
=
table_list
->
force_index
;
}
}
/*
Some functions that are different in the embedded library and the normal
server
*/
#ifndef EMBEDDED_LIBRARY
extern
"C"
void
unireg_abort
(
int
exit_code
);
void
kill_delayed_threads
(
void
);
bool
check_stack_overrun
(
THD
*
thd
,
char
*
dummy
);
#else
#define unireg_abort(exit_code) DBUG_RETURN(exit_code)
inline
void
kill_delayed_threads
(
void
)
{}
#define check_stack_overrun(A, B) 0
#endif
sql/sql_base.cc
View file @
e6882bbf
...
@@ -284,8 +284,10 @@ bool close_cached_tables(THD *thd, bool if_wait_for_refresh,
...
@@ -284,8 +284,10 @@ bool close_cached_tables(THD *thd, bool if_wait_for_refresh,
if
(
!
found
)
if
(
!
found
)
if_wait_for_refresh
=
0
;
// Nothing to wait for
if_wait_for_refresh
=
0
;
// Nothing to wait for
}
}
#ifndef EMBEDDED_LIBRARY
if
(
!
tables
)
if
(
!
tables
)
kill_delayed_threads
();
kill_delayed_threads
();
#endif
if
(
if_wait_for_refresh
)
if
(
if_wait_for_refresh
)
{
{
/*
/*
...
...
sql/sql_insert.cc
View file @
e6882bbf
...
@@ -112,14 +112,13 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
...
@@ -112,14 +112,13 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
List
<
Item
>
&
update_values
,
List
<
Item
>
&
update_values
,
enum_duplicates
duplic
)
enum_duplicates
duplic
)
{
{
int
error
;
int
error
,
res
;
/*
/*
log_on is about delayed inserts only.
log_on is about delayed inserts only.
By default, both logs are enabled (this won't cause problems if the server
By default, both logs are enabled (this won't cause problems if the server
runs without --log-update or --log-bin).
runs without --log-update or --log-bin).
*/
*/
int
log_on
=
DELAYED_LOG_UPDATE
|
DELAYED_LOG_BIN
;
int
log_on
=
DELAYED_LOG_UPDATE
|
DELAYED_LOG_BIN
;
bool
transactional_table
,
log_delayed
,
bulk_insert
;
bool
transactional_table
,
log_delayed
,
bulk_insert
;
uint
value_count
;
uint
value_count
;
ulong
counter
=
1
;
ulong
counter
=
1
;
...
@@ -148,15 +147,20 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
...
@@ -148,15 +147,20 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
if we are told to replace duplicates, the insert cannot be concurrent
if we are told to replace duplicates, the insert cannot be concurrent
delayed insert changed to regular in slave thread
delayed insert changed to regular in slave thread
*/
*/
#ifdef EMBEDDED_LIBRARY
if
(
lock_type
==
TL_WRITE_DELAYED
)
lock_type
=
TL_WRITE
;
#else
if
((
lock_type
==
TL_WRITE_DELAYED
&&
if
((
lock_type
==
TL_WRITE_DELAYED
&&
((
specialflag
&
(
SPECIAL_NO_NEW_FUNC
|
SPECIAL_SAFE_MODE
))
||
((
specialflag
&
(
SPECIAL_NO_NEW_FUNC
|
SPECIAL_SAFE_MODE
))
||
thd
->
slave_thread
||
!
thd
->
variables
.
max_insert_delayed_threads
))
||
thd
->
slave_thread
||
!
thd
->
variables
.
max_insert_delayed_threads
))
||
(
lock_type
==
TL_WRITE_CONCURRENT_INSERT
&&
duplic
==
DUP_REPLACE
)
||
(
lock_type
==
TL_WRITE_CONCURRENT_INSERT
&&
duplic
==
DUP_REPLACE
)
||
(
duplic
==
DUP_UPDATE
))
(
duplic
==
DUP_UPDATE
))
lock_type
=
TL_WRITE
;
lock_type
=
TL_WRITE
;
#endif
table_list
->
lock_type
=
lock_type
;
table_list
->
lock_type
=
lock_type
;
int
res
;
#ifndef EMBEDDED_LIBRARY
if
(
lock_type
==
TL_WRITE_DELAYED
)
if
(
lock_type
==
TL_WRITE_DELAYED
)
{
{
if
(
thd
->
locked_tables
)
if
(
thd
->
locked_tables
)
...
@@ -185,6 +189,7 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
...
@@ -185,6 +189,7 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
}
}
}
}
else
else
#endif
/* EMBEDDED_LIBRARY */
res
=
open_and_lock_tables
(
thd
,
table_list
);
res
=
open_and_lock_tables
(
thd
,
table_list
);
if
(
res
)
if
(
res
)
DBUG_RETURN
(
-
1
);
DBUG_RETURN
(
-
1
);
...
@@ -302,12 +307,14 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
...
@@ -302,12 +307,14 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
break
;
break
;
}
}
}
}
#ifndef EMBEDDED_LIBRARY
if
(
lock_type
==
TL_WRITE_DELAYED
)
if
(
lock_type
==
TL_WRITE_DELAYED
)
{
{
error
=
write_delayed
(
thd
,
table
,
duplic
,
query
,
thd
->
query_length
,
log_on
);
error
=
write_delayed
(
thd
,
table
,
duplic
,
query
,
thd
->
query_length
,
log_on
);
query
=
0
;
query
=
0
;
}
}
else
else
#endif
error
=
write_record
(
table
,
&
info
);
error
=
write_record
(
table
,
&
info
);
if
(
error
)
if
(
error
)
break
;
break
;
...
@@ -328,6 +335,7 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
...
@@ -328,6 +335,7 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
Now all rows are inserted. Time to update logs and sends response to
Now all rows are inserted. Time to update logs and sends response to
user
user
*/
*/
#ifndef EMBEDDED_LIBRARY
if
(
lock_type
==
TL_WRITE_DELAYED
)
if
(
lock_type
==
TL_WRITE_DELAYED
)
{
{
if
(
!
error
)
if
(
!
error
)
...
@@ -339,6 +347,7 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
...
@@ -339,6 +347,7 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
query_cache_invalidate3
(
thd
,
table_list
,
1
);
query_cache_invalidate3
(
thd
,
table_list
,
1
);
}
}
else
else
#endif
{
{
if
(
bulk_insert
)
if
(
bulk_insert
)
{
{
...
@@ -435,8 +444,10 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
...
@@ -435,8 +444,10 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
DBUG_RETURN
(
0
);
DBUG_RETURN
(
0
);
abort:
abort:
#ifndef EMBEDDED_LIBRARY
if
(
lock_type
==
TL_WRITE_DELAYED
)
if
(
lock_type
==
TL_WRITE_DELAYED
)
end_delayed_insert
(
thd
);
end_delayed_insert
(
thd
);
#endif
free_underlaid_joins
(
thd
,
&
thd
->
lex
->
select_lex
);
free_underlaid_joins
(
thd
,
&
thd
->
lex
->
select_lex
);
table
->
insert_values
=
0
;
table
->
insert_values
=
0
;
DBUG_RETURN
(
-
1
);
DBUG_RETURN
(
-
1
);
...
@@ -608,6 +619,8 @@ static int check_null_fields(THD *thd __attribute__((unused)),
...
@@ -608,6 +619,8 @@ static int check_null_fields(THD *thd __attribute__((unused)),
A thread is created for each table that one uses with the DELAYED attribute.
A thread is created for each table that one uses with the DELAYED attribute.
*****************************************************************************/
*****************************************************************************/
#ifndef EMBEDDED_LIBRARY
class
delayed_row
:
public
ilink
{
class
delayed_row
:
public
ilink
{
public:
public:
char
*
record
,
*
query
;
char
*
record
,
*
query
;
...
@@ -1396,8 +1409,7 @@ bool delayed_insert::handle_inserts(void)
...
@@ -1396,8 +1409,7 @@ bool delayed_insert::handle_inserts(void)
pthread_mutex_lock
(
&
mutex
);
pthread_mutex_lock
(
&
mutex
);
DBUG_RETURN
(
1
);
DBUG_RETURN
(
1
);
}
}
#endif
/* EMBEDDED_LIBRARY */
/***************************************************************************
/***************************************************************************
Store records in INSERT ... SELECT *
Store records in INSERT ... SELECT *
...
@@ -1674,7 +1686,9 @@ void select_create::abort()
...
@@ -1674,7 +1686,9 @@ void select_create::abort()
#ifdef __GNUC__
#ifdef __GNUC__
template
class
List_iterator_fast
<
List_item
>;
template
class
List_iterator_fast
<
List_item
>;
#ifndef EMBEDDED_LIBRARY
template
class
I_List
<
delayed_insert
>;
template
class
I_List
<
delayed_insert
>;
template
class
I_List_iterator
<
delayed_insert
>;
template
class
I_List_iterator
<
delayed_insert
>;
template
class
I_List
<
delayed_row
>;
template
class
I_List
<
delayed_row
>;
#endif
#endif
/* EMBEDDED_LIBRARY */
#endif
/* __GNUC__ */
sql/sql_string.cc
View file @
e6882bbf
...
@@ -794,10 +794,14 @@ copy_and_convert(char *to, uint32 to_length, CHARSET_INFO *to_cs,
...
@@ -794,10 +794,14 @@ copy_and_convert(char *to, uint32 to_length, CHARSET_INFO *to_cs,
const
uchar
*
from_end
=
(
const
uchar
*
)
from
+
from_length
;
const
uchar
*
from_end
=
(
const
uchar
*
)
from
+
from_length
;
char
*
to_start
=
to
;
char
*
to_start
=
to
;
uchar
*
to_end
=
(
uchar
*
)
to
+
to_length
;
uchar
*
to_end
=
(
uchar
*
)
to
+
to_length
;
int
(
*
mb_wc
)(
struct
charset_info_st
*
,
my_wc_t
*
,
const
uchar
*
,
const
uchar
*
)
=
from_cs
->
cset
->
mb_wc
;
int
(
*
wc_mb
)(
struct
charset_info_st
*
,
my_wc_t
,
uchar
*
s
,
uchar
*
e
)
=
to_cs
->
cset
->
wc_mb
;
while
(
1
)
while
(
1
)
{
{
if
((
cnvres
=
from_cs
->
cset
->
mb_wc
(
from_cs
,
&
wc
,
(
uchar
*
)
from
,
if
((
cnvres
=
(
*
mb_wc
)
(
from_cs
,
&
wc
,
(
uchar
*
)
from
,
from_end
))
>
0
)
from_end
))
>
0
)
from
+=
cnvres
;
from
+=
cnvres
;
else
if
(
cnvres
==
MY_CS_ILSEQ
)
else
if
(
cnvres
==
MY_CS_ILSEQ
)
...
@@ -809,7 +813,7 @@ copy_and_convert(char *to, uint32 to_length, CHARSET_INFO *to_cs,
...
@@ -809,7 +813,7 @@ copy_and_convert(char *to, uint32 to_length, CHARSET_INFO *to_cs,
break
;
// Impossible char.
break
;
// Impossible char.
outp:
outp:
if
((
cnvres
=
to_cs
->
cset
->
wc_mb
(
to_cs
,
wc
,
(
uchar
*
)
to
,
to_end
))
>
0
)
if
((
cnvres
=
(
*
wc_mb
)
(
to_cs
,
wc
,
(
uchar
*
)
to
,
to_end
))
>
0
)
to
+=
cnvres
;
to
+=
cnvres
;
else
if
(
cnvres
==
MY_CS_ILUNI
&&
wc
!=
'?'
)
else
if
(
cnvres
==
MY_CS_ILUNI
&&
wc
!=
'?'
)
{
{
...
@@ -822,6 +826,7 @@ outp:
...
@@ -822,6 +826,7 @@ outp:
return
(
uint32
)
(
to
-
to_start
);
return
(
uint32
)
(
to
-
to_start
);
}
}
void
String
::
print
(
String
*
str
)
void
String
::
print
(
String
*
str
)
{
{
char
*
st
=
(
char
*
)
Ptr
,
*
end
=
st
+
str_length
;
char
*
st
=
(
char
*
)
Ptr
,
*
end
=
st
+
str_length
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment