Commit afaa3c89 authored by unknown's avatar unknown
Browse files

sql_yacc.yy:

  missing semicolon added
sql_base.cc:
  bad merge fixed
sp_head.cc, view.test, view.result:
  Correct restoring view name in SP table locking BUG#9758
configure.in:
  restore -fno-implicit-templates -fno-exceptions -fno-rtti in configure


configure.in:
  restore -fno-implicit-templates -fno-exceptions -fno-rtti in configure
mysql-test/r/view.result:
  Correct restoring view name in SP table locking BUG#9758
mysql-test/t/view.test:
  Correct restoring view name in SP table locking BUG#9758
sql/sp_head.cc:
  Correct restoring view name in SP table locking BUG#9758
sql/sql_base.cc:
  bad merge fixed
sql/sql_yacc.yy:
  missing semicolon added
parent 3a9ddef2
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -359,6 +359,14 @@ AC_SUBST(INSTALL_SCRIPT)

export CC CXX CFLAGS LD LDFLAGS AR

if test "$GCC" = "yes"
then
  # mysqld requires -fno-implicit-templates.
  # Disable exceptions as they seams to create problems with gcc and threads.
  # mysqld doesn't use run-time-type-checking, so we disable it.
  CXXFLAGS="$CXXFLAGS -fno-implicit-templates -fno-exceptions -fno-rtti"
fi

# Avoid bug in fcntl on some versions of linux
AC_MSG_CHECKING("if we should use 'skip-locking' as default for $target_os")
# Any variation of Linux
+14 −0
Original line number Diff line number Diff line
@@ -1712,3 +1712,17 @@ a b
2	2
4	4
DROP VIEW v2,v1;
DROP TABLE t1, t2;
create table t1 (a int);
create view v1 as select sum(a) from t1 group by a;
create procedure p1()
begin
select * from v1;
end//
call p1();
sum(a)
call p1();
sum(a)
drop procedure p1;
drop view v1;
drop table t1;
+21 −1
Original line number Diff line number Diff line
@@ -1521,8 +1521,10 @@ SELECT a.col1,a.col2,b.col2,b.col3
DROP VIEW v1,v2,v3;
DROP TABLE t1,t2;

#
# BUG#8490 Select from views containing subqueries causes server to hang 
# forever.
#
create table t1 as select 1 A union select 2 union select 3;
create table t2 as select * from t1;
create view v1 as select * from t1 where a in (select * from t2);
@@ -1537,7 +1539,6 @@ drop table t1, t2, t3;
#
# Test case for bug #8528: select from view over multi-table view
#

CREATE TABLE t1 (a int);
CREATE TABLE t2 (b int);
INSERT INTO t1 VALUES (1), (2), (3), (4);
@@ -1549,3 +1550,22 @@ CREATE VIEW v2 AS SELECT * FROM v1;
SELECT * FROM v2;

DROP VIEW v2,v1;

DROP TABLE t1, t2;
#
# Correct restoring view name in SP table locking BUG#9758
#
create table t1 (a int);
create view v1 as select sum(a) from t1 group by a;
delimiter //;
create procedure p1()
begin
select * from v1;
end//
delimiter ;//
call p1();
call p1();
drop procedure p1;
drop view v1;
drop table t1;
+16 −22
Original line number Diff line number Diff line
@@ -2090,15 +2090,10 @@ sp_restore_security_context(THD *thd, sp_head *sp, st_sp_security_context *ctxp)

typedef struct st_sp_table
{
  LEX_STRING qname;
  bool temp;
  TABLE_LIST *table;
  /*
    We can't use table->lock_type as lock type for table
    in multi-set since it can be changed by statement during
    its execution (e.g. as this happens for multi-update).
  */
  thr_lock_type lock_type;
  LEX_STRING qname;     /* Multi-set key: db_name\0table_name\0alias\0 */
  uint db_length, table_name_length;
  bool temp;               /* true if corresponds to a temporary table */
  thr_lock_type lock_type; /* lock type used for prelocking */
  uint lock_count;
  uint query_lock_count;
} SP_TABLE;
@@ -2150,15 +2145,15 @@ sp_head::merge_table_list(THD *thd, TABLE_LIST *table, LEX *lex_for_tmp_check)
  for (; table ; table= table->next_global)
    if (!table->derived && !table->schema_table)
    {
      char tname[64+1+64+1+64+1];	// db.table.alias\0
      char tname[(NAME_LEN + 1) * 3];           // db\0table\0alias\0
      uint tlen, alen;

      tlen= table->db_length;
      memcpy(tname, table->db, tlen);
      tname[tlen++]= '.';
      tname[tlen++]= '\0';
      memcpy(tname+tlen, table->table_name, table->table_name_length);
      tlen+= table->table_name_length;
      tname[tlen++]= '.';
      tname[tlen++]= '\0';
      alen= strlen(table->alias);
      memcpy(tname+tlen, table->alias, alen);
      tlen+= alen;
@@ -2181,14 +2176,15 @@ sp_head::merge_table_list(THD *thd, TABLE_LIST *table, LEX *lex_for_tmp_check)
	if (!(tab= (SP_TABLE *)thd->calloc(sizeof(SP_TABLE))))
	  return FALSE;
	tab->qname.length= tlen;
	tab->qname.str= (char *)thd->strmake(tname, tab->qname.length);
	tab->qname.str= (char*) thd->memdup(tname, tab->qname.length + 1);
	if (!tab->qname.str)
	  return FALSE;
	if (lex_for_tmp_check->sql_command == SQLCOM_CREATE_TABLE &&
	    lex_for_tmp_check->query_tables == table &&
	    lex_for_tmp_check->create_info.options & HA_LEX_CREATE_TMP_TABLE)
	  tab->temp= TRUE;
	tab->table= table;
        tab->table_name_length= table->table_name_length;
        tab->db_length= table->db_length;
        tab->lock_type= table->lock_type;
        tab->lock_count= tab->query_lock_count= 1;
	my_hash_insert(&m_sptabs, (byte *)tab);
@@ -2236,13 +2232,11 @@ sp_head::add_used_tables_to_table_list(THD *thd,
  for (i=0 ; i < m_sptabs.records ; i++)
  {
    char *tab_buff;
    TABLE_LIST *table, *otable;
    TABLE_LIST *table;
    SP_TABLE *stab= (SP_TABLE *)hash_element(&m_sptabs, i);
    if (stab->temp)
      continue;

    otable= stab->table;

    if (!(tab_buff= (char *)thd->calloc(ALIGN_SIZE(sizeof(TABLE_LIST)) *
                                        stab->lock_count)))
      DBUG_RETURN(FALSE);
@@ -2257,11 +2251,11 @@ sp_head::add_used_tables_to_table_list(THD *thd,
        that the PS will be invalidated if the functions is deleted or
        changed.
      */
      table->db= otable->db;
      table->db_length= otable->db_length;
      table->alias= otable->alias;
      table->table_name= otable->table_name;
      table->table_name_length= otable->table_name_length;
      table->db= stab->qname.str;
      table->db_length= stab->db_length;
      table->table_name= table->db + table->db_length + 1;
      table->table_name_length= stab->table_name_length;
      table->alias= table->table_name + table->table_name_length + 1;
      table->lock_type= stab->lock_type;
      table->cacheable_table= 1;
      table->prelocking_placeholder= 1;
+1 −1
Original line number Diff line number Diff line
@@ -3307,7 +3307,7 @@ bool get_key_map_from_key_list(key_map *map, TABLE *table,
        0)
    {
      my_error(ER_KEY_COLUMN_DOES_NOT_EXITS, MYF(0), name->c_ptr(),
	       table->real_name);
	       table->s->table_name);
      map->set_all();
      return 1;
    }
Loading