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
bd707d12
Commit
bd707d12
authored
Apr 23, 2011
by
Mattias Jonsson
Browse files
Options
Browse Files
Download
Plain Diff
merge
parents
a5e8d902
b3d86f12
Changes
12
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
351 additions
and
154 deletions
+351
-154
.bzrignore
.bzrignore
+9
-0
sql/ha_partition.cc
sql/ha_partition.cc
+284
-122
sql/ha_partition.h
sql/ha_partition.h
+27
-8
sql/handler.cc
sql/handler.cc
+17
-10
sql/handler.h
sql/handler.h
+1
-1
sql/opt_range.cc
sql/opt_range.cc
+1
-1
storage/heap/ha_heap.cc
storage/heap/ha_heap.cc
+2
-2
storage/heap/ha_heap.h
storage/heap/ha_heap.h
+1
-1
storage/myisam/ha_myisam.cc
storage/myisam/ha_myisam.cc
+3
-2
storage/myisam/ha_myisam.h
storage/myisam/ha_myisam.h
+1
-1
storage/myisammrg/ha_myisammrg.cc
storage/myisammrg/ha_myisammrg.cc
+4
-5
storage/myisammrg/ha_myisammrg.h
storage/myisammrg/ha_myisammrg.h
+1
-1
No files found.
.bzrignore
View file @
bd707d12
...
...
@@ -42,6 +42,10 @@
*.vcxproj
*.vcxproj.filters
*/*.dir/*
*.dir
Debug
MySql.sdf
Win32
*/*_pure_*warnings
*/.deps
*/.libs/*
...
...
@@ -611,6 +615,7 @@ include/mysql_h.ic
include/mysql_version.h
include/mysqld_ername.h
include/mysqld_error.h
include/mysqld_error.h.rule
include/openssl
include/readline
include/readline/*.h
...
...
@@ -1883,7 +1888,9 @@ scripts/mysql_find_rows
scripts/mysql_fix_extensions
scripts/mysql_fix_privilege_tables
scripts/mysql_fix_privilege_tables.sql
scripts/mysql_fix_privilege_tables.sql.rule
scripts/mysql_fix_privilege_tables_sql.c
scripts/mysql_fix_privilege_tables_sql.c.rule
scripts/mysql_install_db
scripts/mysql_secure_installation
scripts/mysql_setpermission
...
...
@@ -2120,6 +2127,7 @@ sql/handlerton.cc
sql/html
sql/latex
sql/lex_hash.h
sql/lex_hash.h.rule
sql/link_sources
sql/max/*
sql/message.h
...
...
@@ -2151,6 +2159,7 @@ sql/sql_builtin.cc
sql/sql_select.cc.orig
sql/sql_yacc.cc
sql/sql_yacc.h
sql/sql_yacc.h.rule
sql/sql_yacc.output
sql/sql_yacc.yy.orig
sql/test_time
...
...
sql/ha_partition.cc
View file @
bd707d12
This diff is collapsed.
Click to expand it.
sql/ha_partition.h
View file @
bd707d12
...
...
@@ -55,6 +55,16 @@ typedef struct st_ha_data_partition
HA_DUPLICATE_POS | \
HA_CAN_SQL_HANDLER | \
HA_CAN_INSERT_DELAYED)
/* First 4 bytes in the .par file is the number of 32-bit words in the file */
#define PAR_WORD_SIZE 4
/* offset to the .par file checksum */
#define PAR_CHECKSUM_OFFSET 4
/* offset to the total number of partitions */
#define PAR_NUM_PARTS_OFFSET 8
/* offset to the engines array */
#define PAR_ENGINES_OFFSET 12
class
ha_partition
:
public
handler
{
private:
...
...
@@ -71,7 +81,7 @@ private:
/* Data for the partition handler */
int
m_mode
;
// Open mode
uint
m_open_test_lock
;
// Open test_if_locked
char
*
m_file_buffer
;
//
Buffer with names
char
*
m_file_buffer
;
//
Content of the .par file
char
*
m_name_buffer_ptr
;
// Pointer to first partition name
plugin_ref
*
m_engine_array
;
// Array of types of the handlers
handler
**
m_file
;
// Array of references to handler inst.
...
...
@@ -133,6 +143,13 @@ private:
bool
m_is_sub_partitioned
;
// Is subpartitioned
bool
m_ordered_scan_ongoing
;
/*
If set, this object was created with ha_partition::clone and doesn't
"own" the m_part_info structure.
*/
ha_partition
*
m_is_clone_of
;
MEM_ROOT
*
m_clone_mem_root
;
/*
We keep track if all underlying handlers are MyISAM since MyISAM has a
great number of extra flags not needed by other handlers.
...
...
@@ -169,11 +186,6 @@ private:
PARTITION_SHARE
*
share
;
/* Shared lock info */
#endif
/*
TRUE <=> this object was created with ha_partition::clone and doesn't
"own" the m_part_info structure.
*/
bool
is_clone
;
bool
auto_increment_lock
;
/**< lock reading/updating auto_inc */
/**
Flag to keep the auto_increment lock through out the statement.
...
...
@@ -186,7 +198,7 @@ private:
/** used for prediction of start_bulk_insert rows */
enum_monotonicity_info
m_part_func_monotonicity_info
;
public:
handler
*
clone
(
MEM_ROOT
*
mem_root
);
handler
*
clone
(
const
char
*
name
,
MEM_ROOT
*
mem_root
);
virtual
void
set_part_info
(
partition_info
*
part_info
)
{
m_part_info
=
part_info
;
...
...
@@ -205,6 +217,10 @@ public:
*/
ha_partition
(
handlerton
*
hton
,
TABLE_SHARE
*
table
);
ha_partition
(
handlerton
*
hton
,
partition_info
*
part_info
);
ha_partition
(
handlerton
*
hton
,
TABLE_SHARE
*
share
,
partition_info
*
part_info_arg
,
ha_partition
*
clone_arg
,
MEM_ROOT
*
clone_mem_root_arg
);
~
ha_partition
();
/*
A partition handler has no characteristics in itself. It only inherits
...
...
@@ -275,7 +291,10 @@ private:
And one method to read it in.
*/
bool
create_handler_file
(
const
char
*
name
);
bool
get_from_handler_file
(
const
char
*
name
,
MEM_ROOT
*
mem_root
);
bool
setup_engine_array
(
MEM_ROOT
*
mem_root
);
bool
read_par_file
(
const
char
*
name
);
bool
get_from_handler_file
(
const
char
*
name
,
MEM_ROOT
*
mem_root
,
bool
is_clone
);
bool
new_handlers_from_part_info
(
MEM_ROOT
*
mem_root
);
bool
create_handlers
(
MEM_ROOT
*
mem_root
);
void
clear_handler_file
();
...
...
sql/handler.cc
View file @
bd707d12
...
...
@@ -2037,22 +2037,29 @@ int ha_delete_table(THD *thd, handlerton *table_type, const char *path,
/****************************************************************************
** General handler functions
****************************************************************************/
handler
*
handler
::
clone
(
MEM_ROOT
*
mem_root
)
handler
*
handler
::
clone
(
const
char
*
name
,
MEM_ROOT
*
mem_root
)
{
handler
*
new_handler
=
get_new_handler
(
table
->
s
,
mem_root
,
table
->
s
->
db_type
()
);
handler
*
new_handler
=
get_new_handler
(
table
->
s
,
mem_root
,
ht
);
/*
Allocate handler->ref here because otherwise ha_open will allocate it
on this->table->mem_root and we will not be able to reclaim that memory
when the clone handler object is destroyed.
*/
if
(
!
(
new_handler
->
ref
=
(
uchar
*
)
alloc_root
(
mem_root
,
ALIGN_SIZE
(
ref_length
)
*
2
)))
return
NULL
;
if
(
new_handler
&&
!
new_handler
->
ha_open
(
table
,
table
->
s
->
normalized_path
.
str
,
table
->
db_stat
,
HA_OPEN_IGNORE_IF_LOCKED
))
return
new_handler
;
return
NULL
;
if
(
new_handler
&&
!
(
new_handler
->
ref
=
(
uchar
*
)
alloc_root
(
mem_root
,
ALIGN_SIZE
(
ref_length
)
*
2
)))
new_handler
=
NULL
;
/*
TODO: Implement a more efficient way to have more than one index open for
the same table instance. The ha_open call is not cachable for clone.
*/
if
(
new_handler
&&
new_handler
->
ha_open
(
table
,
name
,
table
->
db_stat
,
HA_OPEN_IGNORE_IF_LOCKED
))
new_handler
=
NULL
;
return
new_handler
;
}
...
...
sql/handler.h
View file @
bd707d12
...
...
@@ -1165,7 +1165,7 @@ public:
DBUG_ASSERT
(
locked
==
FALSE
);
/* TODO: DBUG_ASSERT(inited == NONE); */
}
virtual
handler
*
clone
(
MEM_ROOT
*
mem_root
);
virtual
handler
*
clone
(
const
char
*
name
,
MEM_ROOT
*
mem_root
);
/** This is called after create to allow us to set up cached variables */
void
init
()
{
...
...
sql/opt_range.cc
View file @
bd707d12
...
...
@@ -1335,7 +1335,7 @@ int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler)
}
thd
=
head
->
in_use
;
if
(
!
(
file
=
head
->
file
->
clone
(
thd
->
mem_root
)))
if
(
!
(
file
=
head
->
file
->
clone
(
head
->
s
->
normalized_path
.
str
,
thd
->
mem_root
)))
{
/*
Manually set the error flag. Note: there seems to be quite a few
...
...
storage/heap/ha_heap.cc
View file @
bd707d12
...
...
@@ -142,11 +142,11 @@ int ha_heap::close(void)
DESCRIPTION
Do same as default implementation but use file->s->name instead of
table->s->path. This is needed by Windows where the clone() call sees
'/'-delimited path in table->s->path, while ha_
p
eap::open() was called
'/'-delimited path in table->s->path, while ha_
h
eap::open() was called
with '\'-delimited path.
*/
handler
*
ha_heap
::
clone
(
MEM_ROOT
*
mem_root
)
handler
*
ha_heap
::
clone
(
const
char
*
name
,
MEM_ROOT
*
mem_root
)
{
handler
*
new_handler
=
get_new_handler
(
table
->
s
,
mem_root
,
table
->
s
->
db_type
());
if
(
new_handler
&&
!
new_handler
->
ha_open
(
table
,
file
->
s
->
name
,
table
->
db_stat
,
...
...
storage/heap/ha_heap.h
View file @
bd707d12
...
...
@@ -34,7 +34,7 @@ class ha_heap: public handler
public:
ha_heap
(
handlerton
*
hton
,
TABLE_SHARE
*
table
);
~
ha_heap
()
{}
handler
*
clone
(
MEM_ROOT
*
mem_root
);
handler
*
clone
(
const
char
*
name
,
MEM_ROOT
*
mem_root
);
const
char
*
table_type
()
const
{
return
(
table
->
in_use
->
variables
.
sql_mode
&
MODE_MYSQL323
)
?
...
...
storage/myisam/ha_myisam.cc
View file @
bd707d12
...
...
@@ -552,9 +552,10 @@ ha_myisam::ha_myisam(handlerton *hton, TABLE_SHARE *table_arg)
can_enable_indexes
(
1
)
{}
handler
*
ha_myisam
::
clone
(
MEM_ROOT
*
mem_root
)
handler
*
ha_myisam
::
clone
(
const
char
*
name
,
MEM_ROOT
*
mem_root
)
{
ha_myisam
*
new_handler
=
static_cast
<
ha_myisam
*>
(
handler
::
clone
(
mem_root
));
ha_myisam
*
new_handler
=
static_cast
<
ha_myisam
*>
(
handler
::
clone
(
name
,
mem_root
));
if
(
new_handler
)
new_handler
->
file
->
state
=
file
->
state
;
return
new_handler
;
...
...
storage/myisam/ha_myisam.h
View file @
bd707d12
...
...
@@ -44,7 +44,7 @@ class ha_myisam: public handler
public:
ha_myisam
(
handlerton
*
hton
,
TABLE_SHARE
*
table_arg
);
~
ha_myisam
()
{}
handler
*
clone
(
MEM_ROOT
*
mem_root
);
handler
*
clone
(
const
char
*
name
,
MEM_ROOT
*
mem_root
);
const
char
*
table_type
()
const
{
return
"MyISAM"
;
}
const
char
*
index_type
(
uint
key_number
);
const
char
**
bas_ext
()
const
;
...
...
storage/myisammrg/ha_myisammrg.cc
View file @
bd707d12
...
...
@@ -459,8 +459,7 @@ int ha_myisammrg::open(const char *name, int mode __attribute__((unused)),
problem because all locking is handled by the original MERGE table
from which this is cloned of.
*/
if
(
!
(
file
=
myrg_open
(
table
->
s
->
normalized_path
.
str
,
table
->
db_stat
,
HA_OPEN_IGNORE_IF_LOCKED
)))
if
(
!
(
file
=
myrg_open
(
name
,
table
->
db_stat
,
HA_OPEN_IGNORE_IF_LOCKED
)))
{
DBUG_PRINT
(
"error"
,
(
"my_errno %d"
,
my_errno
));
DBUG_RETURN
(
my_errno
?
my_errno
:
-
1
);
...
...
@@ -484,7 +483,7 @@ int ha_myisammrg::open(const char *name, int mode __attribute__((unused)),
@return A cloned handler instance.
*/
handler
*
ha_myisammrg
::
clone
(
MEM_ROOT
*
mem_root
)
handler
*
ha_myisammrg
::
clone
(
const
char
*
name
,
MEM_ROOT
*
mem_root
)
{
MYRG_TABLE
*
u_table
,
*
newu_table
;
ha_myisammrg
*
new_handler
=
...
...
@@ -505,8 +504,8 @@ handler *ha_myisammrg::clone(MEM_ROOT *mem_root)
return
NULL
;
}
if
(
new_handler
->
ha_open
(
table
,
table
->
s
->
normalized_path
.
str
,
table
->
db_stat
,
HA_OPEN_IGNORE_IF_LOCKED
))
if
(
new_handler
->
ha_open
(
table
,
name
,
table
->
db_stat
,
HA_OPEN_IGNORE_IF_LOCKED
))
{
delete
new_handler
;
return
NULL
;
...
...
storage/myisammrg/ha_myisammrg.h
View file @
bd707d12
...
...
@@ -62,7 +62,7 @@ class ha_myisammrg: public handler
int
open
(
const
char
*
name
,
int
mode
,
uint
test_if_locked
);
int
attach_children
(
void
);
int
detach_children
(
void
);
virtual
handler
*
clone
(
MEM_ROOT
*
mem_root
);
virtual
handler
*
clone
(
const
char
*
name
,
MEM_ROOT
*
mem_root
);
int
close
(
void
);
int
write_row
(
uchar
*
buf
);
int
update_row
(
const
uchar
*
old_data
,
uchar
*
new_data
);
...
...
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