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
99444c33
Commit
99444c33
authored
Sep 06, 2004
by
guilhem@mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Replacing class Disable_binlog by macros. Patch already approved by Monty.
parent
38f462ae
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
28 additions
and
56 deletions
+28
-56
sql/log.cc
sql/log.cc
+0
-16
sql/sql_class.h
sql/sql_class.h
+0
-21
sql/sql_table.cc
sql/sql_table.cc
+28
-19
No files found.
sql/log.cc
View file @
99444c33
...
@@ -1682,22 +1682,6 @@ void MYSQL_LOG::set_max_size(ulong max_size_arg)
...
@@ -1682,22 +1682,6 @@ void MYSQL_LOG::set_max_size(ulong max_size_arg)
}
}
Disable_binlog
::
Disable_binlog
(
THD
*
thd_arg
)
:
thd
(
thd_arg
),
save_options
(
thd_arg
->
options
),
save_master_access
(
thd_arg
->
master_access
)
{
thd_arg
->
options
&=
~
OPTION_BIN_LOG
;
thd_arg
->
master_access
|=
SUPER_ACL
;
// unneeded in 4.1
};
Disable_binlog
::~
Disable_binlog
()
{
thd
->
options
=
save_options
;
thd
->
master_access
=
save_master_access
;
}
/*
/*
Check if a string is a valid number
Check if a string is a valid number
...
...
sql/sql_class.h
View file @
99444c33
...
@@ -638,27 +638,6 @@ public:
...
@@ -638,27 +638,6 @@ public:
#define SYSTEM_THREAD_SLAVE_IO 2
#define SYSTEM_THREAD_SLAVE_IO 2
#define SYSTEM_THREAD_SLAVE_SQL 4
#define SYSTEM_THREAD_SLAVE_SQL 4
/*
Disables binary logging for one thread, and resets it back to what it was
before being disabled.
Some functions (like the internal mysql_create_table() when it's called by
mysql_alter_table()) must NOT write to the binlog (binlogging is done at the
at a later stage of the command already, and must be, for locking reasons);
so we internally disable it temporarily by creating the Disable_binlog
object and reset the state by destroying the object (don't forget that! or
write code so that the object gets automatically destroyed when leaving a
block, see example in sql_table.cc).
*/
class
Disable_binlog
{
private:
THD
*
thd
;
ulong
save_options
;
ulong
save_master_access
;
public:
Disable_binlog
(
THD
*
thd_arg
);
~
Disable_binlog
();
};
/*
/*
Used to hold information about file and file structure in exchainge
Used to hold information about file and file structure in exchainge
via non-DB file (...INTO OUTFILE..., ...LOAD DATA...)
via non-DB file (...INTO OUTFILE..., ...LOAD DATA...)
...
...
sql/sql_table.cc
View file @
99444c33
...
@@ -30,6 +30,16 @@
...
@@ -30,6 +30,16 @@
#include <io.h>
#include <io.h>
#endif
#endif
#include "sql_acl.h" // for SUPER_ACL
# define tmp_disable_binlog(A) \
ulong save_options= (A)->options, save_master_access= (A)->master_access; \
(A)->options&= ~OPTION_BIN_LOG; \
(A)->master_access|= SUPER_ACL;
/* unneeded in 4.1 */
#define reenable_binlog(A) \
(A)->options= save_options; \
(A)->master_access= save_master_access;
extern
HASH
open_cache
;
extern
HASH
open_cache
;
static
const
char
*
primary_key_name
=
"PRIMARY"
;
static
const
char
*
primary_key_name
=
"PRIMARY"
;
...
@@ -840,9 +850,8 @@ TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info,
...
@@ -840,9 +850,8 @@ TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info,
MYSQL_LOCK
**
lock
)
MYSQL_LOCK
**
lock
)
{
{
TABLE
tmp_table
;
// Used during 'create_field()'
TABLE
tmp_table
;
// Used during 'create_field()'
TABLE
*
table
;
TABLE
*
table
=
0
;
tmp_table
.
table_name
=
0
;
tmp_table
.
table_name
=
0
;
Disable_binlog
disable_binlog
(
thd
);
DBUG_ENTER
(
"create_table_from_items"
);
DBUG_ENTER
(
"create_table_from_items"
);
/* Add selected items to field list */
/* Add selected items to field list */
...
@@ -872,23 +881,25 @@ TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info,
...
@@ -872,23 +881,25 @@ TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info,
extra_fields
->
push_back
(
cr_field
);
extra_fields
->
push_back
(
cr_field
);
}
}
/* create and lock table */
/* create and lock table */
/* QQ: This should be done atomic ! */
/* QQ: create and open should be done atomic ! */
/* We don't log the statement, it will be logged later */
if
(
mysql_create_table
(
thd
,
db
,
name
,
create_info
,
*
extra_fields
,
*
keys
,
0
))
DBUG_RETURN
(
0
);
/*
/*
We don't log the statement, it will be logged later.
If this is a HEAP table, the automatic DELETE FROM which is written to the
If this is a HEAP table, the automatic DELETE FROM which is written to the
binlog when a HEAP table is opened for the first time since startup, must
binlog when a HEAP table is opened for the first time since startup, must
not be written: 1) it would be wrong (imagine we're in CREATE SELECT: we
not be written: 1) it would be wrong (imagine we're in CREATE SELECT: we
don't want to delete from it) 2) it would be written before the CREATE
don't want to delete from it) 2) it would be written before the CREATE
TABLE, which is a wrong order. So we keep binary logging disabled.
TABLE, which is a wrong order. So we keep binary logging disabled when we
open_table().
*/
*/
if
(
!
(
table
=
open_table
(
thd
,
db
,
name
,
name
,(
bool
*
)
0
)))
tmp_disable_binlog
(
thd
);
if
(
!
mysql_create_table
(
thd
,
db
,
name
,
create_info
,
*
extra_fields
,
*
keys
,
0
))
{
{
quick_rm_table
(
create_info
->
db_type
,
db
,
table_case_name
(
create_info
,
name
));
if
(
!
(
table
=
open_table
(
thd
,
db
,
name
,
name
,(
bool
*
)
0
)))
DBUG_RETURN
(
0
);
quick_rm_table
(
create_info
->
db_type
,
db
,
table_case_name
(
create_info
,
name
)
);
}
}
reenable_binlog
(
thd
);
if
(
!
table
)
DBUG_RETURN
(
0
);
table
->
reginfo
.
lock_type
=
TL_WRITE
;
table
->
reginfo
.
lock_type
=
TL_WRITE
;
if
(
!
((
*
lock
)
=
mysql_lock_tables
(
thd
,
&
table
,
1
)))
if
(
!
((
*
lock
)
=
mysql_lock_tables
(
thd
,
&
table
,
1
)))
{
{
...
@@ -1925,14 +1936,12 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
...
@@ -1925,14 +1936,12 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
else
else
create_info
->
data_file_name
=
create_info
->
index_file_name
=
0
;
create_info
->
data_file_name
=
create_info
->
index_file_name
=
0
;
{
{
/*
/* We don't log the statement, it will be logged later. */
We don't log the statement, it will be logged later. Using a block so
tmp_disable_binlog
(
thd
);
that disable_binlog is deleted when we leave it in either way.
int
error
=
mysql_create_table
(
thd
,
new_db
,
tmp_name
,
*/
create_info
,
create_list
,
key_list
,
1
);
Disable_binlog
disable_binlog
(
thd
);
reenable_binlog
(
thd
);
if
((
error
=
mysql_create_table
(
thd
,
new_db
,
tmp_name
,
if
(
error
)
create_info
,
create_list
,
key_list
,
1
)))
DBUG_RETURN
(
error
);
DBUG_RETURN
(
error
);
}
}
if
(
table
->
tmp_table
)
if
(
table
->
tmp_table
)
...
...
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