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
8ca32a4e
Commit
8ca32a4e
authored
Nov 21, 2004
by
bell@sanja.is.com.ua
Browse files
Options
Browse Files
Download
Plain Diff
merge
parents
4720cc1f
13f249a0
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
111 additions
and
13 deletions
+111
-13
mysql-test/r/view.result
mysql-test/r/view.result
+15
-0
mysql-test/t/view.test
mysql-test/t/view.test
+11
-0
sql/handler.h
sql/handler.h
+1
-0
sql/sql_table.cc
sql/sql_table.cc
+54
-12
sql/sql_view.cc
sql/sql_view.cc
+28
-1
sql/sql_view.h
sql/sql_view.h
+2
-0
No files found.
mysql-test/r/view.result
View file @
8ca32a4e
...
...
@@ -1646,3 +1646,18 @@ insert into v4 values (30);
ERROR HY000: You can't specify target table 'v4' for update in FROM clause
drop view v4, v3, v2, v1;
drop table t1;
create table t1 (a int);
create view v1 as select * from t1;
check table t1,v1;
Table Op Msg_type Msg_text
test.t1 check status OK
test.v1 check status OK
check table v1,t1;
Table Op Msg_type Msg_text
test.v1 check status OK
test.t1 check status OK
drop table t1;
check table v1;
Table Op Msg_type Msg_text
test.v1 check error View 'test.v1' references invalid table(s) or column(s)
drop view v1;
mysql-test/t/view.test
View file @
8ca32a4e
...
...
@@ -1588,3 +1588,14 @@ create view v4 as select * from v2 where 20 < (select (s1) from t1);
insert
into
v4
values
(
30
);
drop
view
v4
,
v3
,
v2
,
v1
;
drop
table
t1
;
#
# CHECK TABLE with VIEW
#
create
table
t1
(
a
int
);
create
view
v1
as
select
*
from
t1
;
check
table
t1
,
v1
;
check
table
v1
,
t1
;
drop
table
t1
;
check
table
v1
;
drop
view
v1
;
sql/handler.h
View file @
8ca32a4e
...
...
@@ -44,6 +44,7 @@
#define HA_ADMIN_INVALID -5
#define HA_ADMIN_REJECT -6
#define HA_ADMIN_TRY_ALTER -7
#define HA_ADMIN_WRONG_CHECKSUM -8
/* Bits in table_flags() to show what database can do */
#define HA_READ_RND_SAME (1 << 0)
/* can switch index during the scan
...
...
sql/sql_table.cc
View file @
8ca32a4e
...
...
@@ -1748,12 +1748,15 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
int
(
*
prepare_func
)(
THD
*
,
TABLE_LIST
*
,
HA_CHECK_OPT
*
),
int
(
handler
::*
operator_func
)
(
THD
*
,
HA_CHECK_OPT
*
))
(
THD
*
,
HA_CHECK_OPT
*
),
int
(
view_operator_func
)
(
THD
*
,
TABLE_LIST
*
))
{
TABLE_LIST
*
table
;
TABLE_LIST
*
table
,
*
next_global_table
;
List
<
Item
>
field_list
;
Item
*
item
;
Protocol
*
protocol
=
thd
->
protocol
;
int
result_code
;
DBUG_ENTER
(
"mysql_admin_table"
);
field_list
.
push_back
(
item
=
new
Item_empty_string
(
"Table"
,
NAME_LEN
*
2
));
...
...
@@ -1777,7 +1780,18 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
strxmov
(
table_name
,
db
?
db
:
""
,
"."
,
table
->
real_name
,
NullS
);
thd
->
open_options
|=
extra_open_options
;
table
->
table
=
open_ltable
(
thd
,
table
,
lock_type
);
table
->
lock_type
=
lock_type
;
/* open only one table from local list of command */
next_global_table
=
table
->
next_global
;
table
->
next_global
=
0
;
open_and_lock_tables
(
thd
,
table
);
table
->
next_global
=
next_global_table
;
/* if view are unsupported */
if
(
table
->
view
&&
!
view_operator_func
)
{
result_code
=
HA_ADMIN_NOT_IMPLEMENTED
;
goto
send_result
;
}
thd
->
open_options
&=
~
extra_open_options
;
if
(
prepare_func
)
...
...
@@ -1793,8 +1807,13 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
}
}
/*
for this command used only temporary table method (without
filling tables), so if opening succeed, table will be opened
*/
if
(
!
table
->
table
)
{
char
buf
[
ERRMSGSIZE
+
25
];
const
char
*
err_msg
;
protocol
->
prepare_for_resend
();
protocol
->
store
(
table_name
,
system_charset_info
);
...
...
@@ -1802,12 +1821,26 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
protocol
->
store
(
"error"
,
5
,
system_charset_info
);
if
(
!
(
err_msg
=
thd
->
net
.
last_error
))
err_msg
=
ER
(
ER_CHECK_NO_SUCH_TABLE
);
/* if it was a view will check md5 sum */
if
(
table
->
view
&&
view_checksum
(
thd
,
table
)
==
HA_ADMIN_WRONG_CHECKSUM
)
{
strxmov
(
buf
,
"View checksum failed and "
,
err_msg
,
NullS
);
err_msg
=
(
const
char
*
)
buf
;
}
protocol
->
store
(
err_msg
,
system_charset_info
);
thd
->
clear_error
();
if
(
protocol
->
write
())
goto
err
;
continue
;
}
if
(
table
->
view
)
{
result_code
=
(
*
view_operator_func
)(
thd
,
table
);
goto
send_result
;
}
table
->
table
->
pos_in_table_list
=
table
;
if
((
table
->
table
->
db_stat
&
HA_READ_ONLY
)
&&
open_for_modify
)
{
...
...
@@ -1846,7 +1879,10 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
open_for_modify
=
0
;
}
int
result_code
=
(
table
->
table
->
file
->*
operator_func
)(
thd
,
check_opt
);
result_code
=
(
table
->
table
->
file
->*
operator_func
)(
thd
,
check_opt
);
send_result:
thd
->
clear_error
();
// these errors shouldn't get client
protocol
->
prepare_for_resend
();
protocol
->
store
(
table_name
,
system_charset_info
);
...
...
@@ -1922,6 +1958,12 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
table
->
next_global
=
save_next_global
;
goto
send_result_message
;
}
case
HA_ADMIN_WRONG_CHECKSUM
:
{
protocol
->
store
(
"note"
,
4
,
system_charset_info
);
protocol
->
store
(
"Checksum error"
,
14
,
system_charset_info
);
break
;
}
default:
// Probably HA_ADMIN_INTERNAL_ERROR
protocol
->
store
(
"error"
,
5
,
system_charset_info
);
...
...
@@ -1962,7 +2004,7 @@ bool mysql_backup_table(THD* thd, TABLE_LIST* table_list)
DBUG_ENTER
(
"mysql_backup_table"
);
DBUG_RETURN
(
mysql_admin_table
(
thd
,
table_list
,
0
,
"backup"
,
TL_READ
,
0
,
0
,
0
,
&
handler
::
backup
));
&
handler
::
backup
,
0
));
}
...
...
@@ -1972,7 +2014,7 @@ bool mysql_restore_table(THD* thd, TABLE_LIST* table_list)
DBUG_RETURN
(
mysql_admin_table
(
thd
,
table_list
,
0
,
"restore"
,
TL_WRITE
,
1
,
0
,
&
prepare_for_restore
,
&
handler
::
restore
));
&
handler
::
restore
,
0
));
}
...
...
@@ -1982,7 +2024,7 @@ bool mysql_repair_table(THD* thd, TABLE_LIST* tables, HA_CHECK_OPT* check_opt)
DBUG_RETURN
(
mysql_admin_table
(
thd
,
tables
,
check_opt
,
"repair"
,
TL_WRITE
,
1
,
HA_OPEN_FOR_REPAIR
,
&
prepare_for_repair
,
&
handler
::
repair
));
&
handler
::
repair
,
0
));
}
...
...
@@ -1991,7 +2033,7 @@ bool mysql_optimize_table(THD* thd, TABLE_LIST* tables, HA_CHECK_OPT* check_opt)
DBUG_ENTER
(
"mysql_optimize_table"
);
DBUG_RETURN
(
mysql_admin_table
(
thd
,
tables
,
check_opt
,
"optimize"
,
TL_WRITE
,
1
,
0
,
0
,
&
handler
::
optimize
));
&
handler
::
optimize
,
0
));
}
...
...
@@ -2027,7 +2069,7 @@ bool mysql_assign_to_keycache(THD* thd, TABLE_LIST* tables,
check_opt
.
key_cache
=
key_cache
;
DBUG_RETURN
(
mysql_admin_table
(
thd
,
tables
,
&
check_opt
,
"assign_to_keycache"
,
TL_READ_NO_INSERT
,
0
,
0
,
0
,
&
handler
::
assign_to_keycache
));
0
,
0
,
&
handler
::
assign_to_keycache
,
0
));
}
...
...
@@ -2088,7 +2130,7 @@ bool mysql_preload_keys(THD* thd, TABLE_LIST* tables)
DBUG_ENTER
(
"mysql_preload_keys"
);
DBUG_RETURN
(
mysql_admin_table
(
thd
,
tables
,
0
,
"preload_keys"
,
TL_READ
,
0
,
0
,
0
,
&
handler
::
preload_keys
));
&
handler
::
preload_keys
,
0
));
}
...
...
@@ -2253,7 +2295,7 @@ bool mysql_analyze_table(THD* thd, TABLE_LIST* tables, HA_CHECK_OPT* check_opt)
DBUG_ENTER
(
"mysql_analyze_table"
);
DBUG_RETURN
(
mysql_admin_table
(
thd
,
tables
,
check_opt
,
"analyze"
,
lock_type
,
1
,
0
,
0
,
&
handler
::
analyze
));
&
handler
::
analyze
,
0
));
}
...
...
@@ -2269,7 +2311,7 @@ bool mysql_check_table(THD* thd, TABLE_LIST* tables,HA_CHECK_OPT* check_opt)
DBUG_RETURN
(
mysql_admin_table
(
thd
,
tables
,
check_opt
,
"check"
,
lock_type
,
0
,
HA_OPEN_FOR_REPAIR
,
0
,
&
handler
::
check
));
&
handler
::
check
,
&
view_checksum
));
}
...
...
sql/sql_view.cc
View file @
8ca32a4e
...
...
@@ -21,6 +21,8 @@
#include "parse_file.h"
#include "sp.h"
#define MD5_BUFF_LENGTH 33
static
int
mysql_register_view
(
THD
*
thd
,
TABLE_LIST
*
view
,
enum_view_create_mode
mode
);
...
...
@@ -378,7 +380,7 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view,
LEX
*
lex
=
thd
->
lex
;
char
buff
[
4096
];
String
str
(
buff
,(
uint32
)
sizeof
(
buff
),
system_charset_info
);
char
md5
[
33
];
char
md5
[
MD5_BUFF_LENGTH
];
bool
can_be_merged
;
char
dir_buff
[
FN_REFLEN
],
file_buff
[
FN_REFLEN
];
LEX_STRING
dir
,
file
;
...
...
@@ -1052,3 +1054,28 @@ void insert_view_fields(List<Item> *list, TABLE_LIST *view)
}
DBUG_VOID_RETURN
;
}
/*
checking view md5 check suum
SINOPSYS
view_checksum()
thd threar handler
view view for check
RETUIRN
HA_ADMIN_OK OK
HA_ADMIN_NOT_IMPLEMENTED it is not VIEW
HA_ADMIN_WRONG_CHECKSUM check sum is wrong
*/
int
view_checksum
(
THD
*
thd
,
TABLE_LIST
*
view
)
{
char
md5
[
MD5_BUFF_LENGTH
];
if
(
!
view
->
view
||
view
->
md5
.
length
!=
32
)
return
HA_ADMIN_NOT_IMPLEMENTED
;
view
->
calc_md5
(
md5
);
return
(
strncmp
(
md5
,
view
->
md5
.
str
,
32
)
?
HA_ADMIN_WRONG_CHECKSUM
:
HA_ADMIN_OK
);
}
sql/sql_view.h
View file @
8ca32a4e
...
...
@@ -29,6 +29,8 @@ void insert_view_fields(List<Item> *list, TABLE_LIST *view);
frm_type_enum
mysql_frm_type
(
char
*
path
);
int
view_checksum
(
THD
*
thd
,
TABLE_LIST
*
view
);
extern
TYPELIB
updatable_views_with_limit_typelib
;
#define VIEW_ANY_ACL (SELECT_ACL | UPDATE_ACL | INSERT_ACL | DELETE_ACL)
...
...
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