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
38cd1a6c
Commit
38cd1a6c
authored
May 06, 2013
by
Rich Prohaska
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
handle cardinality with alter add drop
parent
66462505
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
12 additions
and
8 deletions
+12
-8
storage/tokudb/ha_tokudb_alter_56.cc
storage/tokudb/ha_tokudb_alter_56.cc
+7
-3
storage/tokudb/tokudb_card.h
storage/tokudb/tokudb_card.h
+5
-5
No files found.
storage/tokudb/ha_tokudb_alter_56.cc
View file @
38cd1a6c
...
@@ -22,6 +22,7 @@ public:
...
@@ -22,6 +22,7 @@ public:
alter_txn
(
NULL
),
alter_txn
(
NULL
),
add_index_changed
(
false
),
add_index_changed
(
false
),
drop_index_changed
(
false
),
drop_index_changed
(
false
),
reset_card
(
false
),
compression_changed
(
false
),
compression_changed
(
false
),
expand_varchar_update_needed
(
false
),
expand_varchar_update_needed
(
false
),
expand_fixed_update_needed
(
false
),
expand_fixed_update_needed
(
false
),
...
@@ -38,6 +39,7 @@ public:
...
@@ -38,6 +39,7 @@ public:
bool
add_index_changed
;
bool
add_index_changed
;
bool
incremented_num_DBs
,
modified_DBs
;
bool
incremented_num_DBs
,
modified_DBs
;
bool
drop_index_changed
;
bool
drop_index_changed
;
bool
reset_card
;
bool
compression_changed
;
bool
compression_changed
;
enum
toku_compression_method
orig_compression_method
;
enum
toku_compression_method
orig_compression_method
;
bool
expand_varchar_update_needed
;
bool
expand_varchar_update_needed
;
...
@@ -366,7 +368,6 @@ bool ha_tokudb::inplace_alter_table(TABLE *altered_table, Alter_inplace_info *ha
...
@@ -366,7 +368,6 @@ bool ha_tokudb::inplace_alter_table(TABLE *altered_table, Alter_inplace_info *ha
}
}
if
(
error
==
0
&&
(
ctx
->
handler_flags
&
Alter_inplace_info
::
CHANGE_CREATE_OPTION
)
&&
(
create_info
->
used_fields
&
HA_CREATE_USED_ROW_FORMAT
))
{
if
(
error
==
0
&&
(
ctx
->
handler_flags
&
Alter_inplace_info
::
CHANGE_CREATE_OPTION
)
&&
(
create_info
->
used_fields
&
HA_CREATE_USED_ROW_FORMAT
))
{
// Get the current compression
// Get the current compression
tokudb_alter_ctx
*
ctx
=
static_cast
<
tokudb_alter_ctx
*>
(
ha_alter_info
->
handler_ctx
);
DB
*
db
=
share
->
key_file
[
0
];
DB
*
db
=
share
->
key_file
[
0
];
error
=
db
->
get_compression_method
(
db
,
&
ctx
->
orig_compression_method
);
error
=
db
->
get_compression_method
(
db
,
&
ctx
->
orig_compression_method
);
assert
(
error
==
0
);
assert
(
error
==
0
);
...
@@ -388,6 +389,9 @@ bool ha_tokudb::inplace_alter_table(TABLE *altered_table, Alter_inplace_info *ha
...
@@ -388,6 +389,9 @@ bool ha_tokudb::inplace_alter_table(TABLE *altered_table, Alter_inplace_info *ha
if
(
error
==
0
&&
ctx
->
expand_fixed_update_needed
)
if
(
error
==
0
&&
ctx
->
expand_fixed_update_needed
)
error
=
alter_table_expand_columns
(
altered_table
,
ha_alter_info
);
error
=
alter_table_expand_columns
(
altered_table
,
ha_alter_info
);
if
(
error
==
0
&&
ctx
->
reset_card
)
tokudb
::
set_card_from_status
(
share
->
status_block
,
ctx
->
alter_txn
,
table
->
s
,
altered_table
->
s
);
bool
result
=
false
;
// success
bool
result
=
false
;
// success
if
(
error
)
{
if
(
error
)
{
print_error
(
error
,
MYF
(
0
));
print_error
(
error
,
MYF
(
0
));
...
@@ -422,7 +426,7 @@ int ha_tokudb::alter_table_add_index(TABLE *altered_table, Alter_inplace_info *h
...
@@ -422,7 +426,7 @@ int ha_tokudb::alter_table_add_index(TABLE *altered_table, Alter_inplace_info *h
my_free
(
key_info
);
my_free
(
key_info
);
if
(
error
==
0
)
if
(
error
==
0
)
tokudb
::
set_card_from_status
(
share
->
status_block
,
ctx
->
alter_txn
,
table
->
s
,
altered_table
->
s
)
;
ctx
->
reset_card
=
true
;
return
error
;
return
error
;
}
}
...
@@ -469,7 +473,7 @@ int ha_tokudb::alter_table_drop_index(TABLE *altered_table, Alter_inplace_info *
...
@@ -469,7 +473,7 @@ int ha_tokudb::alter_table_drop_index(TABLE *altered_table, Alter_inplace_info *
int
error
=
drop_indexes
(
table
,
index_drop_offsets
,
ha_alter_info
->
index_drop_count
,
key_info
,
ctx
->
alter_txn
);
int
error
=
drop_indexes
(
table
,
index_drop_offsets
,
ha_alter_info
->
index_drop_count
,
key_info
,
ctx
->
alter_txn
);
if
(
error
==
0
)
if
(
error
==
0
)
tokudb
::
set_card_from_status
(
share
->
status_block
,
ctx
->
alter_txn
,
table
->
s
,
altered_table
->
s
)
;
ctx
->
reset_card
=
true
;
return
error
;
return
error
;
}
}
...
...
storage/tokudb/tokudb_card.h
View file @
38cd1a6c
...
@@ -76,25 +76,24 @@ namespace tokudb {
...
@@ -76,25 +76,24 @@ namespace tokudb {
return
false
;
return
false
;
}
}
// Altered table cardinality = select cardinality data from current table cardinality for keys that exist
// in the altered table and the current table.
void
set_card_from_status
(
DB
*
status_db
,
DB_TXN
*
txn
,
TABLE_SHARE
*
table_share
,
TABLE_SHARE
*
altered_table_share
)
{
void
set_card_from_status
(
DB
*
status_db
,
DB_TXN
*
txn
,
TABLE_SHARE
*
table_share
,
TABLE_SHARE
*
altered_table_share
)
{
int
error
;
int
error
;
// read existing cardinality data from status
// read existing cardinality data from status
uint64_t
rec_per_key
[
table_share
->
key_parts
];
uint64_t
rec_per_key
[
table_share
->
key_parts
];
error
=
get_card_from_status
(
status_db
,
txn
,
table_share
->
key_parts
,
rec_per_key
);
error
=
get_card_from_status
(
status_db
,
txn
,
table_share
->
key_parts
,
rec_per_key
);
// set altered records per key to unknown
uint64_t
altered_rec_per_key
[
altered_table_share
->
key_parts
];
uint64_t
altered_rec_per_key
[
altered_table_share
->
key_parts
];
for
(
uint
i
=
0
;
i
<
altered_table_share
->
key_parts
;
i
++
)
for
(
uint
i
=
0
;
i
<
altered_table_share
->
key_parts
;
i
++
)
altered_rec_per_key
[
i
]
=
0
;
altered_rec_per_key
[
i
]
=
0
;
// compute the beginning of the key offsets in the original table
// compute the beginning of the key offsets
uint
orig_key_offset
[
table_share
->
keys
];
uint
orig_key_offset
[
table_share
->
keys
];
uint
orig_key_parts
=
0
;
uint
orig_key_parts
=
0
;
for
(
uint
i
=
0
;
i
<
table_share
->
keys
;
i
++
)
{
for
(
uint
i
=
0
;
i
<
table_share
->
keys
;
i
++
)
{
orig_key_offset
[
i
]
=
orig_key_parts
;
orig_key_offset
[
i
]
=
orig_key_parts
;
orig_key_parts
+=
table_share
->
key_info
[
i
].
key_parts
;
orig_key_parts
+=
table_share
->
key_info
[
i
].
key_parts
;
}
}
// if orig card data exists, then use it to compute new card data
// if orig card data exists, then use it to compute new card data
if
(
error
==
0
)
{
if
(
error
==
0
)
{
uint
key_parts
=
0
;
uint
key_parts
=
0
;
...
@@ -123,6 +122,7 @@ namespace tokudb {
...
@@ -123,6 +122,7 @@ namespace tokudb {
uint64_t
rows
=
0
;
uint64_t
rows
=
0
;
uint64_t
unique_rows
[
num_key_parts
];
uint64_t
unique_rows
[
num_key_parts
];
if
(
is_unique
&&
num_key_parts
==
1
)
{
if
(
is_unique
&&
num_key_parts
==
1
)
{
// dont compute for unique keys with a single part. we already know the answer.
rows
=
unique_rows
[
0
]
=
1
;
rows
=
unique_rows
[
0
]
=
1
;
}
else
{
}
else
{
DBC
*
cursor
=
NULL
;
DBC
*
cursor
=
NULL
;
...
...
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