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
0ef4413f
Commit
0ef4413f
authored
Dec 21, 2004
by
dlenev@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/home/dlenev/src/mysql-5.0-tzbug
parents
d8995eaf
578b091d
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
41 additions
and
31 deletions
+41
-31
sql/sql_base.cc
sql/sql_base.cc
+1
-2
sql/sql_lex.cc
sql/sql_lex.cc
+25
-9
sql/sql_lex.h
sql/sql_lex.h
+3
-4
sql/sql_parse.cc
sql/sql_parse.cc
+0
-13
sql/sql_yacc.yy
sql/sql_yacc.yy
+5
-3
sql/tztime.cc
sql/tztime.cc
+6
-0
sql/tztime.h
sql/tztime.h
+1
-0
No files found.
sql/sql_base.cc
View file @
0ef4413f
...
...
@@ -1864,8 +1864,7 @@ bool open_and_lock_tables(THD *thd, TABLE_LIST *tables)
static
void
relink_tables_for_multidelete
(
THD
*
thd
)
{
if
(
thd
->
lex
->
all_selects_list
->
next_select_in_list
()
||
thd
->
lex
->
time_zone_tables_used
)
if
(
thd
->
lex
->
all_selects_list
->
next_select_in_list
())
{
for
(
SELECT_LEX
*
sl
=
thd
->
lex
->
all_selects_list
;
sl
;
...
...
sql/sql_lex.cc
View file @
0ef4413f
...
...
@@ -30,15 +30,6 @@
*/
sys_var_long_ptr
trg_new_row_fake_var
(
0
,
0
);
/*
Fake table list object, pointer to which is used as special value for
st_lex::time_zone_tables_used indicating that we implicitly use time
zone tables in this statement but real table list was not yet created.
Pointer to it is also returned by my_tz_get_tables_list() as indication
of transient error;
*/
TABLE_LIST
fake_time_zone_tables_list
;
/* Macros to look like lex */
#define yyGet() *(lex->ptr++)
...
...
@@ -1911,6 +1902,31 @@ void st_lex::first_lists_tables_same()
}
/*
Add implicitly used time zone description tables to global table list
(if needed).
SYNOPSYS
st_lex::add_time_zone_tables_to_query_tables()
thd - pointer to current thread context
RETURN VALUE
TRUE - error
FALSE - success
*/
bool
st_lex
::
add_time_zone_tables_to_query_tables
(
THD
*
thd
)
{
/* We should not add these tables twice */
if
(
!
time_zone_tables_used
)
{
time_zone_tables_used
=
my_tz_get_table_list
(
thd
,
&
query_tables_last
);
if
(
time_zone_tables_used
==
&
fake_time_zone_tables_list
)
return
TRUE
;
}
return
FALSE
;
}
/*
Link table back that was unlinked with unlink_first_table()
...
...
sql/sql_lex.h
View file @
0ef4413f
...
...
@@ -736,9 +736,8 @@ typedef struct st_lex
/* Names of user variables holding parameters (in EXECUTE) */
List
<
LEX_STRING
>
prepared_stmt_params
;
/*
If points to fake_time_zone_tables_list indicates that time zone
tables are implicitly used by statement, also is used for holding
list of those tables after they are opened.
Points to part of global table list which contains time zone tables
implicitly used by the statement.
*/
TABLE_LIST
*
time_zone_tables_used
;
sp_head
*
sphead
;
...
...
@@ -803,6 +802,7 @@ typedef struct st_lex
*
(
table
->
prev_global
=
query_tables_last
)
=
table
;
query_tables_last
=
&
table
->
next_global
;
}
bool
add_time_zone_tables_to_query_tables
(
THD
*
thd
);
bool
can_be_merged
();
bool
can_use_merged
();
...
...
@@ -811,7 +811,6 @@ typedef struct st_lex
bool
need_correct_ident
();
}
LEX
;
extern
TABLE_LIST
fake_time_zone_tables_list
;
struct
st_lex_local
:
public
st_lex
{
static
void
*
operator
new
(
size_t
size
)
...
...
sql/sql_parse.cc
View file @
0ef4413f
...
...
@@ -2123,19 +2123,6 @@ mysql_execute_command(THD *thd)
}
#endif
/* !HAVE_REPLICATION */
if
(
lex
->
time_zone_tables_used
)
{
TABLE_LIST
*
tmp
;
if
((
tmp
=
my_tz_get_table_list
(
thd
,
&
lex
->
query_tables_last
))
==
&
fake_time_zone_tables_list
)
{
DBUG_RETURN
(
-
1
);
}
lex
->
time_zone_tables_used
=
tmp
;
if
(
!
all_tables
)
all_tables
=
tmp
;
}
/*
When option readonly is set deny operations which change tables.
Except for the replication thread and the 'super' users.
...
...
sql/sql_yacc.yy
View file @
0ef4413f
...
...
@@ -4269,7 +4269,8 @@ simple_expr:
{ $$= create_func_contains($3, $5); }
| CONVERT_TZ_SYM '(' expr ',' expr ',' expr ')'
{
Lex->time_zone_tables_used= &fake_time_zone_tables_list;
if (Lex->add_time_zone_tables_to_query_tables(YYTHD))
YYABORT;
$$= new Item_func_convert_tz($3, $5, $7);
}
| CURDATE optional_braces
...
...
@@ -7307,8 +7308,9 @@ internal_variable_name:
If this is time_zone variable we should open time zone
describing tables
*/
if (tmp == &sys_time_zone)
Lex->time_zone_tables_used= &fake_time_zone_tables_list;
if (tmp == &sys_time_zone &&
lex->add_time_zone_tables_to_query_tables(YYTHD))
YYABORT;
}
else
{
...
...
sql/tztime.cc
View file @
0ef4413f
...
...
@@ -1439,6 +1439,12 @@ tz_init_table_list(TABLE_LIST *tz_tabs, TABLE_LIST ***global_next_ptr)
}
/*
Fake table list object, pointer to which is returned by
my_tz_get_tables_list() as indication of error.
*/
TABLE_LIST
fake_time_zone_tables_list
;
/*
Create table list with time zone related tables and add it to the end
of global table list.
...
...
sql/tztime.h
View file @
0ef4413f
...
...
@@ -64,6 +64,7 @@ extern Time_zone * my_tz_find(const String *name, TABLE_LIST *tz_tables);
extern
my_bool
my_tz_init
(
THD
*
org_thd
,
const
char
*
default_tzname
,
my_bool
bootstrap
);
extern
void
my_tz_free
();
extern
TABLE_LIST
fake_time_zone_tables_list
;
/*
Check if we have pointer to the beggining of list of implictly used
...
...
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