mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 02:51:44 +01:00
Merge miguel@bk-internal.mysql.com:/home/bk/mysql-5.0
into hegel.txg:/home/miguel/bk/mysql-5.0
This commit is contained in:
commit
71f4b356c6
5 changed files with 45 additions and 13 deletions
|
@ -799,3 +799,4 @@ vio/test-ssl
|
||||||
vio/test-sslclient
|
vio/test-sslclient
|
||||||
vio/test-sslserver
|
vio/test-sslserver
|
||||||
vio/viotest-ssl
|
vio/viotest-ssl
|
||||||
|
libmysqld/sql_view.cc
|
||||||
|
|
|
@ -67,13 +67,15 @@ then
|
||||||
c_d="$c_d Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
c_d="$c_d Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||||
c_d="$c_d Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
c_d="$c_d Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||||
c_d="$c_d Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
c_d="$c_d Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||||
|
c_d="$c_d Create_view_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||||
|
c_d="$c_d Show_view_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||||
c_d="$c_d PRIMARY KEY Host (Host,Db,User),"
|
c_d="$c_d PRIMARY KEY Host (Host,Db,User),"
|
||||||
c_d="$c_d KEY User (User)"
|
c_d="$c_d KEY User (User)"
|
||||||
c_d="$c_d )"
|
c_d="$c_d )"
|
||||||
c_d="$c_d comment='Database privileges';"
|
c_d="$c_d comment='Database privileges';"
|
||||||
|
|
||||||
i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');
|
i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y');
|
||||||
INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');"
|
INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y');"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test ! -f $mdata/host.frm
|
if test ! -f $mdata/host.frm
|
||||||
|
@ -97,6 +99,8 @@ then
|
||||||
c_h="$c_h Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
c_h="$c_h Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||||
c_h="$c_h Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
c_h="$c_h Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||||
c_h="$c_h Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
c_h="$c_h Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||||
|
c_h="$c_h Create_view_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||||
|
c_h="$c_h Show_view_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||||
c_h="$c_h PRIMARY KEY Host (Host,Db)"
|
c_h="$c_h PRIMARY KEY Host (Host,Db)"
|
||||||
c_h="$c_h )"
|
c_h="$c_h )"
|
||||||
c_h="$c_h comment='Host privileges; Merged with database privileges';"
|
c_h="$c_h comment='Host privileges; Merged with database privileges';"
|
||||||
|
@ -133,6 +137,8 @@ then
|
||||||
c_u="$c_u Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
c_u="$c_u Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||||
c_u="$c_u Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
c_u="$c_u Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||||
c_u="$c_u Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
c_u="$c_u Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||||
|
c_u="$c_u Create_view_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||||
|
c_u="$c_u Show_view_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||||
c_u="$c_u ssl_type enum('','ANY','X509', 'SPECIFIED') DEFAULT '' NOT NULL,"
|
c_u="$c_u ssl_type enum('','ANY','X509', 'SPECIFIED') DEFAULT '' NOT NULL,"
|
||||||
c_u="$c_u ssl_cipher BLOB NOT NULL,"
|
c_u="$c_u ssl_cipher BLOB NOT NULL,"
|
||||||
c_u="$c_u x509_issuer BLOB NOT NULL,"
|
c_u="$c_u x509_issuer BLOB NOT NULL,"
|
||||||
|
@ -146,24 +152,24 @@ then
|
||||||
|
|
||||||
if test "$1" = "test"
|
if test "$1" = "test"
|
||||||
then
|
then
|
||||||
i_u="INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
i_u="INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
||||||
INSERT INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
INSERT INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
||||||
REPLACE INTO user VALUES ('127.0.0.1','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
REPLACE INTO user VALUES ('127.0.0.1','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
||||||
INSERT INTO user (host,user) values ('localhost','');
|
INSERT INTO user (host,user) values ('localhost','');
|
||||||
INSERT INTO user (host,user) values ('$hostname','');"
|
INSERT INTO user (host,user) values ('$hostname','');"
|
||||||
else
|
else
|
||||||
i_u="INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);"
|
i_u="INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);"
|
||||||
if test "$windows" = "0"
|
if test "$windows" = "0"
|
||||||
then
|
then
|
||||||
i_u="$i_u
|
i_u="$i_u
|
||||||
INSERT INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
INSERT INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
||||||
INSERT INTO user (host,user) values ('$hostname','');
|
INSERT INTO user (host,user) values ('$hostname','');
|
||||||
INSERT INTO user (host,user) values ('localhost','');"
|
INSERT INTO user (host,user) values ('localhost','');"
|
||||||
else
|
else
|
||||||
i_u="$i_u
|
i_u="$i_u
|
||||||
INSERT INTO user VALUES ('%','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
INSERT INTO user VALUES ('%','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
||||||
INSERT INTO user VALUES ('localhost','','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
INSERT INTO user VALUES ('localhost','','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
||||||
INSERT INTO user VALUES ('%','','','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0);"
|
INSERT INTO user VALUES ('%','','','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0);"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -39,7 +39,7 @@ struct File_option
|
||||||
|
|
||||||
class File_parser;
|
class File_parser;
|
||||||
File_parser *sql_parse_prepare(const LEX_STRING *file_name,
|
File_parser *sql_parse_prepare(const LEX_STRING *file_name,
|
||||||
MEM_ROOT *mem_root);
|
MEM_ROOT *mem_root, bool bad_format_errors);
|
||||||
|
|
||||||
my_bool
|
my_bool
|
||||||
sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name,
|
sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name,
|
||||||
|
|
|
@ -750,6 +750,18 @@ typedef struct st_lex
|
||||||
bool only_view_structure();
|
bool only_view_structure();
|
||||||
} LEX;
|
} LEX;
|
||||||
|
|
||||||
|
struct st_lex_local: public st_lex
|
||||||
|
{
|
||||||
|
static void *operator new(size_t size)
|
||||||
|
{
|
||||||
|
return (void*) sql_alloc((uint) size);
|
||||||
|
}
|
||||||
|
static void *operator new(size_t size, MEM_ROOT *mem_root)
|
||||||
|
{
|
||||||
|
return (void*) alloc_root(mem_root, (uint) size);
|
||||||
|
}
|
||||||
|
static void operator delete(void *ptr,size_t size) {}
|
||||||
|
};
|
||||||
|
|
||||||
void lex_init(void);
|
void lex_init(void);
|
||||||
void lex_free(void);
|
void lex_free(void);
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include "sql_acl.h"
|
#include "sql_acl.h"
|
||||||
#include "sql_select.h"
|
#include "sql_select.h"
|
||||||
#include "parse_file.h"
|
#include "parse_file.h"
|
||||||
|
#include "sp.h"
|
||||||
|
|
||||||
static int mysql_register_view(THD *thd, TABLE_LIST *view,
|
static int mysql_register_view(THD *thd, TABLE_LIST *view,
|
||||||
enum_view_create_mode mode);
|
enum_view_create_mode mode);
|
||||||
|
@ -523,9 +524,15 @@ mysql_make_view(File_parser *parser, TABLE_LIST *table)
|
||||||
table->view_name.str= table->real_name;
|
table->view_name.str= table->real_name;
|
||||||
table->view_name.length= table->real_name_length;
|
table->view_name.length= table->real_name_length;
|
||||||
|
|
||||||
//TODO: md5 test here and warning if it is differ
|
/*TODO: md5 test here and warning if it is differ */
|
||||||
|
|
||||||
table->view= lex= thd->lex= new st_lex;
|
/*
|
||||||
|
TODO: TABLE mem root should be used here when VIEW will be stored in
|
||||||
|
TABLE cache
|
||||||
|
|
||||||
|
now Lex placed in statement memory
|
||||||
|
*/
|
||||||
|
table->view= lex= thd->lex= (LEX*) new(&thd->mem_root) st_lex_local;
|
||||||
lex_start(thd, (uchar*)table->query.str, table->query.length);
|
lex_start(thd, (uchar*)table->query.str, table->query.length);
|
||||||
mysql_init_query(thd, true);
|
mysql_init_query(thd, true);
|
||||||
lex->select_lex.select_number= ++thd->select_number;
|
lex->select_lex.select_number= ++thd->select_number;
|
||||||
|
@ -563,6 +570,12 @@ mysql_make_view(File_parser *parser, TABLE_LIST *table)
|
||||||
}
|
}
|
||||||
if (!res && !thd->is_fatal_error)
|
if (!res && !thd->is_fatal_error)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/* move SP to main LEX */
|
||||||
|
sp_merge_funs(old_lex, lex);
|
||||||
|
if (lex->spfuns.array.buffer)
|
||||||
|
hash_free(&lex->spfuns);
|
||||||
|
|
||||||
old_next= table->next_global;
|
old_next= table->next_global;
|
||||||
if ((table->next_global= lex->query_tables))
|
if ((table->next_global= lex->query_tables))
|
||||||
table->next_global->prev_global= &table->next_global;
|
table->next_global->prev_global= &table->next_global;
|
||||||
|
|
Loading…
Add table
Reference in a new issue