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
f751ab1a
Commit
f751ab1a
authored
Apr 15, 2001
by
serg@serg.mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fully functional HANDLER table CLOSE
parent
4fbab1d6
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
60 additions
and
45 deletions
+60
-45
sql/mysql_priv.h
sql/mysql_priv.h
+1
-0
sql/sql_base.cc
sql/sql_base.cc
+45
-34
sql/sql_handler.cc
sql/sql_handler.cc
+14
-11
No files found.
sql/mysql_priv.h
View file @
f751ab1a
...
...
@@ -430,6 +430,7 @@ bool send_fields(THD *thd,List<Item> &item,uint send_field_count);
void
free_io_cache
(
TABLE
*
entry
);
void
intern_close_table
(
TABLE
*
entry
);
void
close_thread_tables
(
THD
*
thd
,
bool
locked
=
0
);
bool
close_thread_table
(
THD
*
thd
,
TABLE
**
table_ptr
);
void
close_temporary_tables
(
THD
*
thd
);
TABLE
**
find_temporary_table
(
THD
*
thd
,
const
char
*
db
,
const
char
*
table_name
);
bool
close_temporary_table
(
THD
*
thd
,
const
char
*
db
,
const
char
*
table_name
);
...
...
sql/sql_base.cc
View file @
f751ab1a
...
...
@@ -421,9 +421,34 @@ void close_thread_tables(THD *thd, bool locked)
DBUG_PRINT
(
"info"
,
(
"thd->open_tables=%p"
,
thd
->
open_tables
));
for
(
table
=
thd
->
open_tables
;
table
;
table
=
next
)
while
(
thd
->
open_tables
)
found_old_table
|=
close_thread_table
(
thd
,
&
thd
->
open_tables
);
/* Free tables to hold down open files */
while
(
open_cache
.
records
>
table_cache_size
&&
unused_tables
)
VOID
(
hash_delete
(
&
open_cache
,(
byte
*
)
unused_tables
));
/* purecov: tested */
check_unused
();
if
(
found_old_table
)
{
next
=
table
->
next
;
/* Tell threads waiting for refresh that something has happened */
VOID
(
pthread_cond_broadcast
(
&
COND_refresh
));
}
if
(
!
locked
)
VOID
(
pthread_mutex_unlock
(
&
LOCK_open
));
/* VOID(pthread_sigmask(SIG_SETMASK,&thd->signals,NULL)); */
DBUG_VOID_RETURN
;
}
/* move one table to free list */
bool
close_thread_table
(
THD
*
thd
,
TABLE
**
table_ptr
)
{
DBUG_ENTER
(
"close_thread_table"
);
bool
found_old_table
=
0
;
TABLE
*
table
=*
table_ptr
;
*
table_ptr
=
table
->
next
;
if
(
table
->
version
!=
refresh_version
||
thd
->
version
!=
refresh_version
||
!
table
->
db_stat
)
{
...
...
@@ -453,21 +478,7 @@ void close_thread_tables(THD *thd, bool locked)
else
unused_tables
=
table
->
next
=
table
->
prev
=
table
;
}
}
thd
->
open_tables
=
0
;
/* Free tables to hold down open files */
while
(
open_cache
.
records
>
table_cache_size
&&
unused_tables
)
VOID
(
hash_delete
(
&
open_cache
,(
byte
*
)
unused_tables
));
/* purecov: tested */
check_unused
();
if
(
found_old_table
)
{
/* Tell threads waiting for refresh that something has happened */
VOID
(
pthread_cond_broadcast
(
&
COND_refresh
));
}
if
(
!
locked
)
VOID
(
pthread_mutex_unlock
(
&
LOCK_open
));
/* VOID(pthread_sigmask(SIG_SETMASK,&thd->signals,NULL)); */
DBUG_VOID_RETURN
;
DBUG_RETURN
(
found_old_table
);
}
/* Close and delete temporary tables */
...
...
sql/sql_handler.cc
View file @
f751ab1a
...
...
@@ -43,7 +43,7 @@
thd->open_tables=thd->handler_tables; \
thd->handler_tables=tmp; }
static
TABLE
*
find_table
_by_name
(
THD
*
thd
,
char
*
db
,
char
*
table_name
);
static
TABLE
*
*
find_table_ptr
_by_name
(
THD
*
thd
,
char
*
db
,
char
*
table_name
);
int
mysql_ha_open
(
THD
*
thd
,
TABLE_LIST
*
tables
)
{
...
...
@@ -59,11 +59,11 @@ int mysql_ha_open(THD *thd, TABLE_LIST *tables)
int
mysql_ha_close
(
THD
*
thd
,
TABLE_LIST
*
tables
)
{
/* Perhaps, we should close table here.
But it's not easy - *tables is a single-linked list, designed
to be closed at all once.
So, why bother ? All the tables will be closed at thread exit.
*/
TABLE
**
ptr
=
find_table_ptr_by_name
(
thd
,
tables
->
db
,
tables
->
name
);
if
(
*
ptr
)
close_thread_table
(
thd
,
ptr
);
send_ok
(
&
thd
->
net
);
return
0
;
}
...
...
@@ -77,7 +77,7 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables,
ha_rows
select_limit
,
ha_rows
offset_limit
)
{
int
err
,
keyno
=-
1
;
TABLE
*
table
=
find_table
_by_name
(
thd
,
tables
->
db
,
tables
->
name
);
TABLE
*
table
=
*
find_table_ptr
_by_name
(
thd
,
tables
->
db
,
tables
->
name
);
if
(
!
table
)
{
my_printf_error
(
ER_UNKNOWN_TABLE
,
ER
(
ER_UNKNOWN_TABLE
),
MYF
(
0
),
...
...
@@ -231,19 +231,22 @@ err:
/* Note: this function differs from find_locked_table() because we're looking
here for alias, not real table name
*/
static
TABLE
*
find_table
_by_name
(
THD
*
thd
,
char
*
db
,
char
*
table_name
)
static
TABLE
*
*
find_table_ptr
_by_name
(
THD
*
thd
,
char
*
db
,
char
*
table_name
)
{
int
dblen
;
TABLE
**
ptr
;
if
(
!
db
||
!
*
db
)
db
=
thd
->
db
;
if
(
!
db
||
!
*
db
)
db
=
""
;
dblen
=
strlen
(
db
);
ptr
=&
(
thd
->
handler_tables
);
for
(
TABLE
*
table
=
thd
->
handler_tables
;
table
;
table
=
table
->
next
)
for
(
TABLE
*
table
=
*
ptr
;
table
;
table
=*
ptr
)
{
if
(
!
memcmp
(
table
->
table_cache_key
,
db
,
dblen
)
&&
!
my_strcasecmp
(
table
->
table_name
,
table_name
))
return
table
;
break
;
ptr
=&
(
table
->
next
);
}
return
(
0
)
;
return
ptr
;
}
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