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
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
a772844b
Commit
a772844b
authored
Feb 18, 2001
by
unknown
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Cleaned up ha_innobase.cc from whitespace
sql/ha_innobase.cc: Removed some whitespace
parent
f8509fec
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
137 additions
and
138 deletions
+137
-138
sql/ha_innobase.cc
sql/ha_innobase.cc
+137
-138
No files found.
sql/ha_innobase.cc
View file @
a772844b
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
& Innobase Oy
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & Innobase Oy
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
...
...
@@ -76,7 +75,7 @@ bool innobase_skip = 0;
uint
innobase_init_flags
=
0
;
ulong
innobase_cache_size
=
0
;
long
innobase_mirrored_log_groups
,
innobase_log_files_in_group
,
long
innobase_mirrored_log_groups
,
innobase_log_files_in_group
,
innobase_log_file_size
,
innobase_log_buffer_size
,
innobase_buffer_pool_size
,
innobase_additional_mem_pool_size
,
innobase_file_io_threads
,
innobase_lock_wait_timeout
;
...
...
@@ -197,9 +196,9 @@ check_trx_exists(
if
(
trx
==
NULL
)
{
assert
(
thd
!=
NULL
);
trx
=
trx_allocate_for_mysql
();
thd
->
transaction
.
all
.
innobase_tid
=
trx
;
/* The execution of a single SQL statement is denoted by
a 'transaction' handle which is a NULL pointer: Innobase
remembers internally where the latest SQL statement
...
...
@@ -234,7 +233,7 @@ ha_innobase::update_thd(
}
user_thd
=
thd
;
return
(
0
);
}
...
...
@@ -262,7 +261,7 @@ innobase_parse_data_file_paths_and_sizes(void)
while
(
*
str
!=
'\0'
)
{
path
=
str
;
while
(
*
str
!=
':'
&&
*
str
!=
'\0'
)
{
while
(
*
str
!=
':'
&&
*
str
!=
'\0'
)
{
str
++
;
}
...
...
@@ -271,7 +270,7 @@ innobase_parse_data_file_paths_and_sizes(void)
}
str
++
;
size
=
strtoul
(
str
,
&
endp
,
10
);
str
=
endp
;
...
...
@@ -294,7 +293,7 @@ innobase_parse_data_file_paths_and_sizes(void)
return
(
FALSE
);
}
}
srv_data_file_names
=
(
char
**
)
ut_malloc
(
i
*
sizeof
(
void
*
));
srv_data_file_sizes
=
(
ulint
*
)
ut_malloc
(
i
*
sizeof
(
ulint
));
...
...
@@ -304,20 +303,20 @@ innobase_parse_data_file_paths_and_sizes(void)
str
=
innobase_data_file_path
;
i
=
0
;
while
(
*
str
!=
'\0'
)
{
path
=
str
;
while
(
*
str
!=
':'
&&
*
str
!=
'\0'
)
{
while
(
*
str
!=
':'
&&
*
str
!=
'\0'
)
{
str
++
;
}
if
(
*
str
==
':'
)
{
/* Make path a null-terminated string */
*
str
=
'\0'
;
str
++
;
}
size
=
strtoul
(
str
,
&
endp
,
10
);
str
=
endp
;
...
...
@@ -337,7 +336,7 @@ innobase_parse_data_file_paths_and_sizes(void)
}
}
return
(
TRUE
);
return
(
TRUE
);
}
/*************************************************************************
...
...
@@ -362,7 +361,7 @@ innobase_parse_log_group_home_dirs(void)
while
(
*
str
!=
'\0'
)
{
path
=
str
;
while
(
*
str
!=
';'
&&
*
str
!=
'\0'
)
{
while
(
*
str
!=
';'
&&
*
str
!=
'\0'
)
{
str
++
;
}
...
...
@@ -375,7 +374,7 @@ innobase_parse_log_group_home_dirs(void)
return
(
FALSE
);
}
}
if
(
i
!=
(
ulint
)
innobase_mirrored_log_groups
)
{
return
(
FALSE
);
...
...
@@ -387,25 +386,25 @@ innobase_parse_log_group_home_dirs(void)
str
=
innobase_log_group_home_dir
;
i
=
0
;
while
(
*
str
!=
'\0'
)
{
path
=
str
;
while
(
*
str
!=
';'
&&
*
str
!=
'\0'
)
{
while
(
*
str
!=
';'
&&
*
str
!=
'\0'
)
{
str
++
;
}
if
(
*
str
==
';'
)
{
*
str
=
'\0'
;
str
++
;
}
srv_log_group_home_dirs
[
i
]
=
path
;
i
++
;
}
return
(
TRUE
);
return
(
TRUE
);
}
/*************************************************************************
...
...
@@ -414,12 +413,12 @@ Opens an Innobase database. */
bool
innobase_init
(
void
)
/*===============*/
/* out: TRUE if error */
/* out: TRUE if error */
{
int
err
;
bool
ret
;
ibool
test_bool
;
DBUG_ENTER
(
"innobase_init"
);
test_bool
=
TRUE
;
...
...
@@ -439,7 +438,7 @@ innobase_init(void)
if
(
ret
==
FALSE
)
{
return
(
TRUE
);
}
ret
=
innobase_parse_log_group_home_dirs
();
if
(
ret
==
FALSE
)
{
...
...
@@ -447,20 +446,20 @@ innobase_init(void)
}
srv_n_log_groups
=
(
ulint
)
innobase_mirrored_log_groups
;
srv_n_log_files
=
(
ulint
)
innobase_log_files_in_group
;
srv_n_log_files
=
(
ulint
)
innobase_log_files_in_group
;
srv_log_file_size
=
(
ulint
)
innobase_log_file_size
;
srv_log_archive_on
=
(
ulint
)
innobase_log_archive
;
srv_log_buffer_size
=
(
ulint
)
innobase_log_buffer_size
;
srv_flush_log_at_trx_commit
=
(
ulint
)
innobase_flush_log_at_trx_commit
;
srv_use_native_aio
=
0
;
srv_use_native_aio
=
0
;
srv_pool_size
=
(
ulint
)
innobase_buffer_pool_size
;
srv_mem_pool_size
=
(
ulint
)
innobase_additional_mem_pool_size
;
srv_n_file_io_threads
=
(
ulint
)
innobase_file_io_threads
;
srv_lock_wait_timeout
=
(
ulint
)
innobase_lock_wait_timeout
;
err
=
innobase_start_or_create_for_mysql
();
...
...
@@ -493,7 +492,7 @@ innobase_end(void)
return
(
1
);
}
return
(
0
);
}
...
...
@@ -511,7 +510,7 @@ innobase_flush_logs(void)
DBUG_ENTER
(
"innobase_flush_logs"
);
log_make_checkpoint_at
(
ut_dulint_max
,
TRUE
);
DBUG_RETURN
(
result
);
}
...
...
@@ -581,7 +580,7 @@ innobase_rollback(
{
int
error
=
0
;
trx_t
*
trx
;
DBUG_ENTER
(
"innobase_rollback"
);
DBUG_PRINT
(
"trans"
,
(
"aborting transaction"
));
...
...
@@ -608,13 +607,13 @@ innobase_close_connection(
whose transaction should be rolled back */
{
if
(
NULL
!=
thd
->
transaction
.
all
.
innobase_tid
)
{
trx_free_for_mysql
((
trx_t
*
)
(
thd
->
transaction
.
all
.
innobase_tid
));
}
return
(
0
);
}
}
/**********************************************************************
Prints an error message. */
...
...
@@ -678,7 +677,7 @@ normalize_table_name(
assert
(
ptr
>
name
);
ptr
--
;
while
(
ptr
>=
name
&&
*
ptr
!=
'\\'
&&
*
ptr
!=
'/'
)
{
ptr
--
;
}
...
...
@@ -689,7 +688,7 @@ normalize_table_name(
norm_name
[
name_ptr
-
db_ptr
-
1
]
=
'/'
;
}
/*********************************************************************
Creates and opens a handle to a table which already exists in an Innnobase
database. */
...
...
@@ -730,18 +729,18 @@ ha_innobase::open(
&
upd_buff
,
buff_len
,
&
key_val_buff
,
buff_len
,
NullS
))
{
free_share
(
share
);
free_share
(
share
);
DBUG_RETURN
(
1
);
}
/* MySQL allocates the buffer for ref */
ref_length
=
buff_len
;
/* Get pointer to a table object in Innobase dictionary cache */
if
(
NULL
==
(
ib_table
=
dict_table_get
(
norm_name
,
NULL
)))
{
free_share
(
share
);
my_free
((
char
*
)
upd_buff
,
MYF
(
0
));
my_errno
=
ENOENT
;
...
...
@@ -749,7 +748,7 @@ ha_innobase::open(
}
innobase_prebuilt
=
row_create_prebuilt
(
ib_table
);
((
row_prebuilt_t
*
)
innobase_prebuilt
)
->
mysql_row_len
=
table
->
reclength
;
primary_key
=
MAX_KEY
;
...
...
@@ -765,7 +764,7 @@ ha_innobase::open(
((
row_prebuilt_t
*
)
innobase_prebuilt
)
->
clust_index_was_generated
=
FALSE
;
primary_key
=
0
;
primary_key
=
0
;
key_used_on_scan
=
0
;
}
else
{
((
row_prebuilt_t
*
)
innobase_prebuilt
)
...
...
@@ -773,12 +772,12 @@ ha_innobase::open(
assert
(
key_used_on_scan
==
MAX_KEY
);
}
/* Init table lock structure */
thr_lock_data_init
(
&
share
->
lock
,
&
lock
,(
void
*
)
0
);
info
(
HA_STATUS_NO_LOCK
|
HA_STATUS_VARIABLE
|
HA_STATUS_CONST
);
DBUG_RETURN
(
0
);
}
...
...
@@ -789,7 +788,7 @@ void
ha_innobase
::
initialize
(
void
)
/*=========================*/
{
}
}
/**********************************************************************
Closes a handle to an Innobase table. */
...
...
@@ -823,7 +822,7 @@ uint
get_field_offset
(
/*=============*/
/* out: offset */
TABLE
*
table
,
/* in: MySQL table object */
TABLE
*
table
,
/* in: MySQL table object */
Field
*
field
)
/* in: MySQL field object */
{
return
((
uint
)
(
field
->
ptr
-
(
char
*
)
table
->
record
[
0
]));
...
...
@@ -837,7 +836,7 @@ uint
field_in_record_is_null
(
/*====================*/
/* out: 1 if NULL, 0 otherwise */
TABLE
*
table
,
/* in: MySQL table object */
TABLE
*
table
,
/* in: MySQL table object */
Field
*
field
,
/* in: MySQL field object */
char
*
record
)
/* in: a row in MySQL format */
{
...
...
@@ -847,7 +846,7 @@ field_in_record_is_null(
return
(
0
);
}
null_offset
=
(
uint
)
((
char
*
)
field
->
null_ptr
-
(
char
*
)
table
->
record
[
0
]);
...
...
@@ -866,7 +865,7 @@ inline
void
set_field_in_record_to_null
(
/*========================*/
TABLE
*
table
,
/* in: MySQL table object */
TABLE
*
table
,
/* in: MySQL table object */
Field
*
field
,
/* in: MySQL field object */
char
*
record
)
/* in: a row in MySQL format */
{
...
...
@@ -884,7 +883,7 @@ inline
void
reset_null_bits
(
/*============*/
TABLE
*
table
,
/* in: MySQL table object */
TABLE
*
table
,
/* in: MySQL table object */
char
*
record
)
/* in: a row in MySQL format */
{
bzero
(
record
,
table
->
null_bytes
);
...
...
@@ -899,10 +898,10 @@ If you change this function, remember to update the prototype there! */
int
innobase_mysql_cmp
(
/*===============*/
/*===============*/
/* out: 1, 0, -1, if a is greater,
equal, less than b, respectively */
int
mysql_type
,
/* in: MySQL type */
int
mysql_type
,
/* in: MySQL type */
unsigned
char
*
a
,
/* in: data field */
unsigned
int
a_length
,
/* in: data field length,
not UNIV_SQL_NULL */
...
...
@@ -912,7 +911,7 @@ innobase_mysql_cmp(
{
enum_field_types
mysql_tp
;
assert
(
a_length
!=
UNIV_SQL_NULL
);
assert
(
a_length
!=
UNIV_SQL_NULL
);
assert
(
b_length
!=
UNIV_SQL_NULL
);
mysql_tp
=
(
enum_field_types
)
mysql_type
;
...
...
@@ -960,7 +959,7 @@ get_innobase_type_from_mysql_type(
return
(
DATA_VARCHAR
);
}
else
{
return
(
DATA_VARMYSQL
);
}
}
case
FIELD_TYPE_STRING
:
if
(
field
->
flags
&
BINARY_FLAG
)
{
return
(
DATA_FIXBINARY
);
...
...
@@ -970,7 +969,7 @@ get_innobase_type_from_mysql_type(
return
(
DATA_CHAR
);
}
else
{
return
(
DATA_MYSQL
);
}
}
case
FIELD_TYPE_LONG
:
case
FIELD_TYPE_LONGLONG
:
case
FIELD_TYPE_TINY
:
...
...
@@ -1002,7 +1001,7 @@ get_innobase_type_from_mysql_type(
return
(
0
);
}
/***********************************************************************
Stores a key value for a row to a buffer. */
...
...
@@ -1019,7 +1018,7 @@ ha_innobase::store_key_val_for_row(
KEY_PART_INFO
*
key_part
=
key_info
->
key_part
;
KEY_PART_INFO
*
end
=
key_part
+
key_info
->
key_parts
;
char
*
buff_start
=
buff
;
DBUG_ENTER
(
"store_key_val_for_row"
);
for
(;
key_part
!=
end
;
key_part
++
)
{
...
...
@@ -1035,7 +1034,7 @@ ha_innobase::store_key_val_for_row(
*
buff
++
=
0
;
}
memcpy
(
buff
,
record
+
key_part
->
offset
,
key_part
->
length
);
buff
+=
key_part
->
length
;
}
...
...
@@ -1059,14 +1058,14 @@ build_template(
{
dict_index_t
*
index
;
dict_index_t
*
clust_index
;
mysql_row_templ_t
*
templ
;
mysql_row_templ_t
*
templ
;
Field
*
field
;
ulint
n_fields
;
ulint
n_requested_fields
=
0
;
ulint
i
;
clust_index
=
dict_table_get_first_index_noninline
(
prebuilt
->
table
);
if
(
!
prebuilt
->
in_update_remember_pos
)
{
/* We are building a temporary table: fetch all columns */
...
...
@@ -1085,7 +1084,7 @@ build_template(
}
else
{
index
=
clust_index
;
}
if
(
index
==
clust_index
)
{
prebuilt
->
need_to_access_clustered
=
TRUE
;
}
else
{
...
...
@@ -1101,10 +1100,10 @@ build_template(
mem_alloc_noninline
(
n_fields
*
sizeof
(
mysql_row_templ_t
));
}
prebuilt
->
template_type
=
templ_type
;
prebuilt
->
null_bitmap_len
=
table
->
null_bytes
;
prebuilt
->
templ_contains_blob
=
FALSE
;
for
(
i
=
0
;
i
<
n_fields
;
i
++
)
{
...
...
@@ -1173,7 +1172,7 @@ build_template(
templ
->
rec_field_no
=
(
index
->
table
->
cols
+
templ
->
col_no
)
->
clust_pos
;
}
}
}
if
(
templ_type
==
ROW_MYSQL_REC_FIELDS
&&
prebuilt
->
select_lock_type
!=
LOCK_NONE
)
{
...
...
@@ -1194,7 +1193,7 @@ ha_innobase::write_row(
{
row_prebuilt_t
*
prebuilt
=
(
row_prebuilt_t
*
)
innobase_prebuilt
;
int
error
;
DBUG_ENTER
(
"write_row"
);
statistic_increment
(
ha_write_count
,
&
LOCK_status
);
...
...
@@ -1206,7 +1205,7 @@ ha_innobase::write_row(
if
(
table
->
next_number_field
&&
record
==
table
->
record
[
0
])
{
update_auto_increment
();
}
if
(
prebuilt
->
mysql_template
==
NULL
||
prebuilt
->
template_type
!=
ROW_MYSQL_WHOLE_ROW
)
{
/* Build the template used in converting quickly between
...
...
@@ -1218,7 +1217,7 @@ ha_innobase::write_row(
error
=
row_insert_for_mysql
((
byte
*
)
record
,
prebuilt
);
error
=
convert_error_code_to_mysql
(
error
);
/* Tell Innobase server that there might be work for
utility threads: */
...
...
@@ -1249,7 +1248,7 @@ innobase_convert_and_store_changed_col(
}
else
if
(
col_type
==
DATA_INT
)
{
/* Store integer data in Innobase in a big-endian
format, sign bit negated, if signed */
for
(
i
=
0
;
i
<
len
;
i
++
)
{
buf
[
len
-
1
-
i
]
=
data
[
i
];
}
...
...
@@ -1261,7 +1260,7 @@ innobase_convert_and_store_changed_col(
data
=
buf
;
buf
+=
len
;
}
}
ufield
->
new_val
.
data
=
data
;
ufield
->
new_val
.
len
=
len
;
...
...
@@ -1302,14 +1301,14 @@ calc_row_difference(
/* We use upd_buff to convert changed fields */
buf
=
upd_buff
;
for
(
i
=
0
;
i
<
n_fields
;
i
++
)
{
field
=
table
->
field
[
i
];
if
(
thd
->
query_id
!=
field
->
query_id
)
{
/* TODO: check that these fields cannot have
changed! */
goto
skip_field
;
}
...
...
@@ -1319,7 +1318,7 @@ calc_row_difference(
n_len
=
field
->
pack_length
();
col_type
=
get_innobase_type_from_mysql_type
(
field
);
is_unsigned
=
(
ulint
)
(
field
->
flags
&
UNSIGNED_FLAG
);
is_unsigned
=
(
ulint
)
(
field
->
flags
&
UNSIGNED_FLAG
);
switch
(
col_type
)
{
...
...
@@ -1335,7 +1334,7 @@ calc_row_difference(
default:
;
}
if
(
field
->
null_ptr
)
{
if
(
field_in_record_is_null
(
table
,
field
,
(
char
*
)
old_row
))
{
...
...
@@ -1379,7 +1378,7 @@ overhead for CPU when we check which fields are actually updated.
TODO: currently Innobase does not prevent the 'Halloween problem':
in a searched update a single row can get updated several times
if its index columns are updated! */
int
ha_innobase
::
update_row
(
/*====================*/
...
...
@@ -1392,7 +1391,7 @@ ha_innobase::update_row(
int
error
=
0
;
DBUG_ENTER
(
"update_row"
);
if
(
prebuilt
->
upd_node
)
{
uvect
=
prebuilt
->
upd_node
->
update
;
}
else
{
...
...
@@ -1442,10 +1441,10 @@ ha_innobase::delete_row(
}
/* This is a delete */
prebuilt
->
upd_node
->
is_delete
=
TRUE
;
prebuilt
->
in_update_remember_pos
=
TRUE
;
error
=
row_update_for_mysql
((
byte
*
)
record
,
prebuilt
);
error
=
convert_error_code_to_mysql
(
error
);
...
...
@@ -1514,7 +1513,7 @@ convert_search_mode_to_innobase(
return
(
0
);
}
/**************************************************************************
Positions an index cursor to the index specified in the handle. Fetches the
row if any. */
...
...
@@ -1541,7 +1540,7 @@ ha_innobase::index_read(
DBUG_ENTER
(
"index_read"
);
statistic_increment
(
ha_read_key_count
,
&
LOCK_status
);
index
=
prebuilt
->
index
;
/* Note that if the select is used for an update, we always
...
...
@@ -1566,7 +1565,7 @@ ha_innobase::index_read(
dtuple_set_n_fields
(
prebuilt
->
search_tuple
,
0
);
}
mode
=
convert_search_mode_to_innobase
(
find_flag
);
match_mode
=
0
;
...
...
@@ -1598,7 +1597,7 @@ ha_innobase::index_read(
error
=
convert_error_code_to_mysql
(
ret
);
table
->
status
=
STATUS_NOT_FOUND
;
}
DBUG_RETURN
(
error
);
}
...
...
@@ -1619,12 +1618,12 @@ ha_innobase::change_active_index(
statistic_increment
(
ha_read_key_count
,
&
LOCK_status
);
DBUG_ENTER
(
"index_read_idx"
);
active_index
=
keynr
;
if
(
keynr
!=
MAX_KEY
&&
table
->
keys
>
0
)
{
key
=
table
->
key_info
+
active_index
;
prebuilt
->
index
=
dict_table_get_index_noninline
(
prebuilt
->
table
,
key
->
name
);
}
else
{
...
...
@@ -1633,7 +1632,7 @@ ha_innobase::change_active_index(
}
dtuple_set_n_fields
(
prebuilt
->
search_tuple
,
prebuilt
->
index
->
n_fields
);
dict_index_copy_types
(
prebuilt
->
search_tuple
,
prebuilt
->
index
,
prebuilt
->
index
->
n_fields
);
assert
(
prebuilt
->
index
);
...
...
@@ -1641,7 +1640,7 @@ ha_innobase::change_active_index(
/* Maybe MySQL changes the active index for a handle also
during some queries, we do not know: then it is safest to build
the template such that all columns will be fetched */
build_template
(
prebuilt
,
user_thd
,
table
,
ROW_MYSQL_WHOLE_ROW
);
return
(
0
);
...
...
@@ -1688,9 +1687,9 @@ ha_innobase::general_fetch(
row_prebuilt_t
*
prebuilt
=
(
row_prebuilt_t
*
)
innobase_prebuilt
;
ulint
ret
;
int
error
=
0
;
DBUG_ENTER
(
"general_fetch"
);
ret
=
row_search_for_mysql
(
buf
,
0
,
prebuilt
,
match_mode
,
direction
);
if
(
ret
==
DB_SUCCESS
)
{
...
...
@@ -1708,7 +1707,7 @@ ha_innobase::general_fetch(
error
=
convert_error_code_to_mysql
(
ret
);
table
->
status
=
STATUS_NOT_FOUND
;
}
DBUG_RETURN
(
error
);
}
...
...
@@ -1866,14 +1865,14 @@ ha_innobase::rnd_next(
}
else
{
error
=
general_fetch
(
buf
,
ROW_SEL_NEXT
,
0
);
}
DBUG_RETURN
(
error
);
}
/**************************************************************************
Fetches a row from the table based on a reference. TODO: currently we use
'ref_stored_len' of the handle as the key length. This may change. */
int
ha_innobase
::
rnd_pos
(
/*=================*/
...
...
@@ -1885,10 +1884,10 @@ ha_innobase::rnd_pos(
row_prebuilt_t
*
prebuilt
=
(
row_prebuilt_t
*
)
innobase_prebuilt
;
int
error
;
uint
keynr
=
active_index
;
DBUG_ENTER
(
"rnd_pos"
);
statistic_increment
(
ha_read_rnd_count
,
&
LOCK_status
);
if
(
prebuilt
->
clust_index_was_generated
)
{
/* No primary key was defined for the table and we
generated the clustered index from the row id: the
...
...
@@ -1899,11 +1898,11 @@ ha_innobase::rnd_pos(
}
else
{
change_active_index
(
primary_key
);
}
error
=
index_read
(
buf
,
pos
,
ref_stored_len
,
HA_READ_KEY_EXACT
);
change_active_index
(
keynr
);
DBUG_RETURN
(
error
);
}
...
...
@@ -1948,7 +1947,7 @@ int
ha_innobase
::
extra
(
/*===============*/
/* out: 0 or error number */
enum
ha_extra_function
operation
)
enum
ha_extra_function
operation
)
/* in: HA_EXTRA_DONT_USE_CURSOR_TO_UPDATE */
{
row_prebuilt_t
*
prebuilt
=
(
row_prebuilt_t
*
)
innobase_prebuilt
;
...
...
@@ -1992,10 +1991,10 @@ ha_innobase::external_lock(
update_thd
(
thd
);
trx
=
prebuilt
->
trx
;
prebuilt
->
sql_stat_start
=
TRUE
;
prebuilt
->
in_update_remember_pos
=
TRUE
;
if
(
lock_type
==
F_WRLCK
)
{
/* If this is a SELECT, then it is in UPDATE TABLE ...
or SELECT ... FOR UPDATE */
...
...
@@ -2006,14 +2005,14 @@ ha_innobase::external_lock(
if
(
trx
->
n_mysql_tables_in_use
==
0
)
{
trx_mark_sql_stat_end
(
trx
);
}
trx
->
n_mysql_tables_in_use
++
;
}
else
{
trx
->
n_mysql_tables_in_use
--
;
}
DBUG_RETURN
(
error
);
}
}
/*********************************************************************
Creates a table definition to an Innobase database. */
...
...
@@ -2034,7 +2033,7 @@ create_table_def(
ulint
nulls_allowed
;
ulint
unsigned_type
;
ulint
i
;
DBUG_ENTER
(
"create_table_def"
);
DBUG_PRINT
(
"enter"
,
(
"table_name: %s"
,
table_name
));
...
...
@@ -2044,7 +2043,7 @@ create_table_def(
created in tablespace 0 */
table
=
dict_mem_table_create
((
char
*
)
table_name
,
0
,
n_cols
);
for
(
i
=
0
;
i
<
n_cols
;
i
++
)
{
field
=
form
->
field
[
i
];
...
...
@@ -2087,7 +2086,7 @@ create_index(
uint
key_num
)
/* in: index number */
{
dict_index_t
*
index
;
int
error
;
int
error
;
ulint
n_fields
;
KEY
*
key
;
KEY_PART_INFO
*
key_part
;
...
...
@@ -2095,17 +2094,17 @@ create_index(
ulint
i
;
DBUG_ENTER
(
"create_index"
);
key
=
form
->
key_info
+
key_num
;
n_fields
=
key
->
key_parts
;
ind_type
=
0
;
if
(
strcmp
(
key
->
name
,
"PRIMARY"
)
==
0
)
{
ind_type
=
ind_type
|
DICT_CLUSTERED
;
}
if
(
key
->
flags
&
HA_NOSAME
)
{
ind_type
=
ind_type
|
DICT_UNIQUE
;
}
...
...
@@ -2142,8 +2141,8 @@ create_clustered_index_when_no_primary(
const
char
*
table_name
)
/* in: table name */
{
dict_index_t
*
index
;
int
error
;
int
error
;
/* The first '0' below specifies that everything in Innobase is
currently created in file space 0 */
...
...
@@ -2177,7 +2176,7 @@ ha_innobase::create(
uint
i
;
char
name2
[
1000
];
char
norm_name
[
1000
];
DBUG_ENTER
(
"ha_innobase::create"
);
trx
=
trx_allocate_for_mysql
();
...
...
@@ -2194,7 +2193,7 @@ ha_innobase::create(
name2
[
name_len
-
4
]
=
'\0'
;
normalize_table_name
(
norm_name
,
name2
);
/* Create the table definition in Innobase */
if
(
error
=
create_table_def
(
trx
,
form
,
norm_name
))
{
...
...
@@ -2213,9 +2212,9 @@ ha_innobase::create(
if
(
strcmp
(
key
->
name
,
"PRIMARY"
)
==
0
)
{
primary_key_no
=
(
int
)
i
;
}
}
}
}
/* Create the keys */
if
(
form
->
keys
==
0
||
primary_key_no
==
-
1
)
{
...
...
@@ -2224,10 +2223,10 @@ ha_innobase::create(
by Innobase */
error
=
create_clustered_index_when_no_primary
(
trx
,
norm_name
);
norm_name
);
if
(
error
)
{
trx_commit_for_mysql
(
trx
);
trx_free_for_mysql
(
trx
);
DBUG_RETURN
(
error
);
...
...
@@ -2236,7 +2235,7 @@ ha_innobase::create(
if
(
primary_key_no
!=
-
1
)
{
/* In Innobase the clustered index must always be created
first */
first */
if
(
error
=
create_index
(
trx
,
form
,
norm_name
,
(
uint
)
primary_key_no
))
{
trx_commit_for_mysql
(
trx
);
...
...
@@ -2261,13 +2260,13 @@ ha_innobase::create(
}
}
}
trx_commit_for_mysql
(
trx
);
innobase_table
=
dict_table_get
(
norm_name
,
NULL
);
assert
(
innobase_table
);
/* Tell the Innobase server that there might be work for
utility threads: */
...
...
@@ -2295,7 +2294,7 @@ ha_innobase::delete_table(
int
error
;
trx_t
*
trx
;
char
norm_name
[
1000
];
DBUG_ENTER
(
"ha_innobase::delete_table"
);
trx
=
trx_allocate_for_mysql
();
...
...
@@ -2303,16 +2302,16 @@ ha_innobase::delete_table(
name_len
=
strlen
(
name
);
assert
(
name_len
<
1000
);
/* Strangely, MySQL passes the table name without the '.frm'
extension, in contrast to ::create */
normalize_table_name
(
norm_name
,
name
);
/* Drop the table in Innobase */
error
=
row_drop_table_for_mysql
(
norm_name
,
trx
,
FALSE
);
/* Tell the Innobase server that there might be work for
utility threads: */
...
...
@@ -2341,7 +2340,7 @@ ha_innobase::rename_table(
trx_t
*
trx
;
char
norm_from
[
1000
];
char
norm_to
[
1000
];
DBUG_ENTER
(
"ha_innobase::rename_table"
);
trx
=
trx_allocate_for_mysql
();
...
...
@@ -2351,14 +2350,14 @@ ha_innobase::rename_table(
assert
(
name_len1
<
1000
);
assert
(
name_len2
<
1000
);
normalize_table_name
(
norm_from
,
from
);
normalize_table_name
(
norm_to
,
to
);
/* Rename the table in Innobase */
error
=
row_rename_table_for_mysql
(
norm_from
,
norm_to
,
trx
);
/* Tell the Innobase server that there might be work for
utility threads: */
...
...
@@ -2405,26 +2404,26 @@ ha_innobase::records_in_range(
ulint
mode2
;
void
*
heap1
;
void
*
heap2
;
DBUG_ENTER
(
"records_in_range"
);
active_index
=
keynr
;
key
=
table
->
key_info
+
active_index
;
index
=
dict_table_get_index_noninline
(
prebuilt
->
table
,
key
->
name
);
range_start
=
dtuple_create_for_mysql
(
&
heap1
,
key
->
key_parts
);
dict_index_copy_types
(
range_start
,
index
,
index
->
n_fields
);
dict_index_copy_types
(
range_start
,
index
,
index
->
n_fields
);
range_end
=
dtuple_create_for_mysql
(
&
heap2
,
key
->
key_parts
);
dict_index_copy_types
(
range_end
,
index
,
index
->
n_fields
);
dict_index_copy_types
(
range_end
,
index
,
index
->
n_fields
);
row_sel_convert_mysql_key_to_innobase
(
range_start
,
(
byte
*
)
key_val_buff
,
index
,
(
byte
*
)
start_key
,
(
ulint
)
start_key_len
);
row_sel_convert_mysql_key_to_innobase
(
range_end
,
(
byte
*
)
key_val_buff2
,
index
,
(
byte
*
)
end_key
,
...
...
@@ -2437,7 +2436,7 @@ ha_innobase::records_in_range(
mode1
,
range_end
,
mode2
);
dtuple_free_for_mysql
(
heap1
);
dtuple_free_for_mysql
(
heap2
);
my_free
((
char
*
)
key_val_buff2
,
MYF
(
0
));
DBUG_RETURN
((
ha_rows
)
n_rows
);
...
...
@@ -2457,7 +2456,7 @@ ha_innobase::scan_time()
/* In the following formula we assume that scanning 5 pages
takes the same time as a disk seek: */
return
((
double
)
(
1
+
prebuilt
->
table
->
stat_clustered_index_size
/
5
));
}
...
...
@@ -2475,7 +2474,7 @@ ha_innobase::info(
dict_index_t
*
index
;
uint
rec_per_key
;
uint
i
;
DBUG_ENTER
(
"info"
);
ib_table
=
prebuilt
->
table
;
...
...
@@ -2512,7 +2511,7 @@ ha_innobase::info(
if
(
prebuilt
->
clust_index_was_generated
)
{
index
=
dict_table_get_next_index_noninline
(
index
);
}
for
(
i
=
0
;
i
<
table
->
keys
;
i
++
)
{
if
(
index
->
stat_n_diff_key_vals
==
0
)
{
rec_per_key
=
records
;
...
...
@@ -2520,13 +2519,13 @@ ha_innobase::info(
rec_per_key
=
records
/
index
->
stat_n_diff_key_vals
;
}
table
->
key_info
[
i
].
rec_per_key
[
table
->
key_info
[
i
].
key_parts
-
1
]
=
rec_per_key
;
index
=
dict_table_get_next_index_noninline
(
index
);
}
}
}
}
if
(
flag
&
HA_STATUS_ERRKEY
)
{
...
...
@@ -2657,7 +2656,7 @@ ha_innobase::store_lock(
}
*
to
++=
&
lock
;
return
(
to
);
}
...
...
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