List:Internals« Previous MessageNext Message »
From:Jim Winstead Date:July 6 2005 2:05am
Subject:bk commit into 5.0 tree (jimw:1.1893)
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of jimw. When jimw does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet
  1.1893 05/07/05 17:05:31 jimw@stripped +4 -0
  Merge mysql.com:/home/jimw/my/mysql-5.0-6903
  into  mysql.com:/home/jimw/my/mysql-5.0-clean

  mysql-test/t/sql_mode.test
    1.12 05/07/05 17:05:28 jimw@stripped +0 -3
    Merge

  mysql-test/r/sql_mode.result
    1.21 05/07/05 17:05:28 jimw@stripped +0 -0
    Merge

  sql/sql_show.cc
    1.252 05/07/05 17:03:43 jimw@stripped +0 -0
    Auto merged

  mysql-test/r/view.result
    1.83 05/07/05 17:03:43 jimw@stripped +0 -0
    Auto merged

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	jimw
# Host:	rama.(none)
# Root:	/home/jimw/my/mysql-5.0-clean/RESYNC

--- 1.251/sql/sql_show.cc	2005-06-15 16:27:37 -07:00
+++ 1.252/sql/sql_show.cc	2005-07-05 17:03:43 -07:00
@@ -451,25 +451,32 @@
     DBUG_RETURN(TRUE);
   }
 #endif
-
-  (void) sprintf(path,"%s/%s",mysql_data_home, dbname);
-  length=unpack_dirname(path,path);		// Convert if not unix
-  found_libchar= 0;
-  if (length && path[length-1] == FN_LIBCHAR)
+  if (!my_strcasecmp(system_charset_info, dbname,
+                     information_schema_name.str))
   {
-    found_libchar= 1;
-    path[length-1]=0;				// remove ending '\'
+    dbname= information_schema_name.str;
+    create.default_table_charset= system_charset_info;
   }
-  if (access(path,F_OK))
+  else
   {
-    my_error(ER_BAD_DB_ERROR, MYF(0), dbname);
-    DBUG_RETURN(TRUE);
+    (void) sprintf(path,"%s/%s",mysql_data_home, dbname);
+    length=unpack_dirname(path,path);		// Convert if not unix
+    found_libchar= 0;
+    if (length && path[length-1] == FN_LIBCHAR)
+    {
+      found_libchar= 1;
+      path[length-1]=0;				// remove ending '\'
+    }
+    if (access(path,F_OK))
+    {
+      my_error(ER_BAD_DB_ERROR, MYF(0), dbname);
+      DBUG_RETURN(TRUE);
+    }
+    if (found_libchar)
+      path[length-1]= FN_LIBCHAR;
+    strmov(path+length, MY_DB_OPT_FILE);
+    load_db_opt(thd, path, &create);
   }
-  if (found_libchar)
-    path[length-1]= FN_LIBCHAR;
-  strmov(path+length, MY_DB_OPT_FILE);
-  load_db_opt(thd, path, &create);
-
   List<Item> field_list;
   field_list.push_back(new Item_empty_string("Database",NAME_LEN));
   field_list.push_back(new Item_empty_string("Create Database",1024));
@@ -1104,7 +1111,7 @@
   char *query;
 };
 
-#ifdef __GNUC__
+#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION
 template class I_List<thread_info>;
 #endif
 
@@ -2654,6 +2661,7 @@
     restore_record(table, s->default_values);
     if (!wild || !wild[0] || !wild_compare(sp_name, wild, 0))
     {
+      int enum_idx= proc_table->field[5]->val_int();
       table->field[3]->store(sp_name, strlen(sp_name), cs);
       get_field(thd->mem_root, proc_table->field[3], &tmp_string);
       table->field[0]->store(tmp_string.ptr(), tmp_string.length(), cs);
@@ -2675,10 +2683,8 @@
       table->field[10]->store("SQL", 3, cs);
       get_field(thd->mem_root, proc_table->field[6], &tmp_string);
       table->field[11]->store(tmp_string.ptr(), tmp_string.length(), cs);
-      if (proc_table->field[5]->val_int() == SP_CONTAINS_SQL)
-      {
-        table->field[12]->store("CONTAINS SQL", 12 , cs);
-      }
+      table->field[12]->store(sp_data_access_name[enum_idx].str, 
+                              sp_data_access_name[enum_idx].length , cs);
       get_field(thd->mem_root, proc_table->field[7], &tmp_string);
       table->field[14]->store(tmp_string.ptr(), tmp_string.length(), cs);
       bzero((char *)&time, sizeof(time));
@@ -3243,11 +3249,13 @@
 int make_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table)
 {
   ST_FIELD_INFO *field_info= schema_table->fields_info;
+  Name_resolution_context *context= &thd->lex->select_lex.context;
   for ( ; field_info->field_name; field_info++)
   {
     if (field_info->old_name)
     {
-      Item_field *field= new Item_field(NullS, NullS, field_info->field_name);
+      Item_field *field= new Item_field(context,
+                                        NullS, NullS, field_info->field_name);
       if (field)
       {
         field->set_name(field_info->old_name,
@@ -3267,12 +3275,14 @@
   char tmp[128];
   LEX *lex= thd->lex;
   SELECT_LEX *sel= lex->current_select;
+  Name_resolution_context *context= &sel->context;
 
   if (!sel->item_list.elements)
   {
     ST_FIELD_INFO *field_info= &schema_table->fields_info[1];
     String buffer(tmp,sizeof(tmp), system_charset_info);
-    Item_field *field= new Item_field(NullS, NullS, field_info->field_name);
+    Item_field *field= new Item_field(context,
+                                      NullS, NullS, field_info->field_name);
     if (!field || add_item_to_list(thd, field))
       return 1;
     buffer.length(0);
@@ -3294,6 +3304,7 @@
   char tmp[128];
   String buffer(tmp,sizeof(tmp), thd->charset());
   LEX *lex= thd->lex;
+  Name_resolution_context *context= &lex->select_lex.context;
 
   ST_FIELD_INFO *field_info= &schema_table->fields_info[2];
   buffer.length(0);
@@ -3305,7 +3316,8 @@
     buffer.append(lex->wild->ptr());
     buffer.append(")");
   }
-  Item_field *field= new Item_field(NullS, NullS, field_info->field_name);
+  Item_field *field= new Item_field(context,
+                                    NullS, NullS, field_info->field_name);
   if (add_item_to_list(thd, field))
     return 1;
   field->set_name(buffer.ptr(), buffer.length(), system_charset_info);
@@ -3313,7 +3325,7 @@
   {
     field->set_name(buffer.ptr(), buffer.length(), system_charset_info);
     field_info= &schema_table->fields_info[3];
-    field= new Item_field(NullS, NullS, field_info->field_name);
+    field= new Item_field(context, NullS, NullS, field_info->field_name);
     if (add_item_to_list(thd, field))
       return 1;
     field->set_name(field_info->old_name, strlen(field_info->old_name),
@@ -3328,6 +3340,8 @@
   int fields_arr[]= {3, 14, 13, 6, 15, 5, 16, 17, 18, -1};
   int *field_num= fields_arr;
   ST_FIELD_INFO *field_info;
+  Name_resolution_context *context= &thd->lex->select_lex.context;
+
   for (; *field_num >= 0; field_num++)
   {
     field_info= &schema_table->fields_info[*field_num];
@@ -3335,7 +3349,8 @@
                                *field_num == 17 ||
                                *field_num == 18))
       continue;
-    Item_field *field= new Item_field(NullS, NullS, field_info->field_name);
+    Item_field *field= new Item_field(context,
+                                      NullS, NullS, field_info->field_name);
     if (field)
     {
       field->set_name(field_info->old_name,
@@ -3354,10 +3369,13 @@
   int fields_arr[]= {0, 2, 1, 3, -1};
   int *field_num= fields_arr;
   ST_FIELD_INFO *field_info;
+  Name_resolution_context *context= &thd->lex->select_lex.context;
+
   for (; *field_num >= 0; field_num++)
   {
     field_info= &schema_table->fields_info[*field_num];
-    Item_field *field= new Item_field(NullS, NullS, field_info->field_name);
+    Item_field *field= new Item_field(context,
+                                      NullS, NullS, field_info->field_name);
     if (field)
     {
       field->set_name(field_info->old_name,
@@ -3376,10 +3394,13 @@
   int fields_arr[]= {2, 3, 4, 19, 16, 15, 14, 18, -1};
   int *field_num= fields_arr;
   ST_FIELD_INFO *field_info;
+  Name_resolution_context *context= &thd->lex->select_lex.context;
+
   for (; *field_num >= 0; field_num++)
   {
     field_info= &schema_table->fields_info[*field_num];
-    Item_field *field= new Item_field(NullS, NullS, field_info->field_name);
+    Item_field *field= new Item_field(context,
+                                      NullS, NullS, field_info->field_name);
     if (field)
     {
       field->set_name(field_info->old_name,
@@ -3445,12 +3466,11 @@
 
     if (table_list->field_translation)
     {
-      Field_translator *end= table_list->field_translation +
-        sel->item_list.elements;
+      Field_translator *end= table_list->field_translation_end;
       for (transl= table_list->field_translation; transl < end; transl++)
       {
         if (!transl->item->fixed &&
-            transl->item->fix_fields(thd, table_list, &transl->item))
+            transl->item->fix_fields(thd, &transl->item))
           DBUG_RETURN(1);
       }
       DBUG_RETURN(0);
@@ -3467,11 +3487,12 @@
     {
       char *name= item->name;
       transl[i].item= item;
-      if (!item->fixed && item->fix_fields(thd, table_list,
&transl[i].item))
+      if (!item->fixed && item->fix_fields(thd, &transl[i].item))
         DBUG_RETURN(1);
       transl[i++].name= name;
     }
     table_list->field_translation= transl;
+    table_list->field_translation_end= transl + sel->item_list.elements;
   }
 
   DBUG_RETURN(0);
@@ -3498,7 +3519,7 @@
   ST_SCHEMA_TABLE *schema_table= get_schema_table(schema_table_idx);
   LEX_STRING db, table;
   DBUG_ENTER("mysql_schema_select");
-  /* 
+  /*
      We have to make non const db_name & table_name
      because of lower_case_table_names
   */
@@ -3506,7 +3527,7 @@
                   information_schema_name.length, 0);
   make_lex_string(thd, &table, schema_table->table_name,
                   strlen(schema_table->table_name), 0);
-  if (schema_table->old_format(thd, schema_table) ||      /* Handle old syntax */
+  if (schema_table->old_format(thd, schema_table) ||   /* Handle old syntax */
       !sel->add_table_to_list(thd, new Table_ident(thd, db, table, 0),
                               0, 0, TL_READ, (List<String> *) 0,
                               (List<String> *) 0))
@@ -3882,7 +3903,7 @@
 };
 
 
-#ifdef __GNUC__
+#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION
 template class List_iterator_fast<char>;
 template class List<char>;
 #endif

--- 1.82/mysql-test/r/view.result	2005-06-15 16:27:37 -07:00
+++ 1.83/mysql-test/r/view.result	2005-07-05 17:03:43 -07:00
@@ -1561,7 +1561,7 @@
 two	1050,1050
 select col1,group_concat(col2,col3) from v1 group by col1;
 col1	group_concat(col2,col3)
-two	1025,2025,3025
+one	1025,2025,3025
 two	1050,1050
 drop view v1;
 drop table t1;
@@ -1725,4 +1725,201 @@
 sum(a)
 drop procedure p1;
 drop view v1;
+drop table t1;
+CREATE TABLE t1(a char(2) primary key, b char(2));
+CREATE TABLE t2(a char(2), b char(2), index i(a));
+INSERT INTO t1 VALUES ('a','1'), ('b','2');
+INSERT INTO t2 VALUES ('a','5'), ('a','6'), ('b','5'), ('b','6');
+CREATE VIEW v1 AS
+SELECT t1.b as c, t2.b as d FROM t1,t2 WHERE t1.a=t2.a;
+SELECT d, c FROM v1 ORDER BY d,c;
+d	c
+5	1
+5	2
+6	1
+6	2
+DROP VIEW v1;
+DROP TABLE t1, t2;
+create table t1 (s1 int);
+create view  v1 as select sum(distinct s1) from t1;
+select * from v1;
+sum(distinct s1)
+NULL
+drop view v1;
+create view  v1 as select avg(distinct s1) from t1;
+select * from v1;
+avg(distinct s1)
+NULL
+drop view v1;
+drop table t1;
+create view v1 as select cast(1 as decimal);
+select * from v1;
+cast(1 as decimal)
+1.00
+drop view v1;
+create table t1(f1 int);
+create table t2(f2 int);
+insert into t1 values(1),(2),(3);
+insert into t2 values(1),(2),(3);
+create view v1 as select * from t1,t2 where f1=f2;
+create table t3 (f1 int, f2 int);
+insert into t3 select * from v1 order by 1;
+select * from t3;
+f1	f2
+1	1
+2	2
+3	3
+drop view v1;
+drop table t1,t2,t3;
+create view v1 as select '\\','\\shazam';
+select * from v1;
+\	\shazam
+\	\shazam
+drop view v1;
+create view v1 as select '\'','\shazam';
+select * from v1;
+'	shazam
+'	shazam
+drop view v1;
+create view v1 as select 'k','K';
+select * from v1;
+k	My_exp_K
+k	K
+drop view v1;
+create table t1 (s1 int);
+create view v1 as select s1, 's1' from t1;
+select * from v1;
+s1	My_exp_s1
+drop view v1;
+create view v1 as select 's1', s1 from t1;
+select * from v1;
+My_exp_s1	s1
+drop view v1;
+create view v1 as select 's1', s1, 1 as My_exp_s1 from t1;
+select * from v1;
+My_exp_1_s1	s1	My_exp_s1
+drop view v1;
+create view v1 as select 1 as My_exp_s1, 's1', s1  from t1;
+select * from v1;
+My_exp_s1	My_exp_1_s1	s1
+drop view v1;
+create view v1 as select 1 as s1, 's1', 's1' from t1;
+select * from v1;
+s1	My_exp_s1	My_exp_1_s1
+drop view v1;
+create view v1 as select 's1', 's1', 1 as s1 from t1;
+select * from v1;
+My_exp_1_s1	My_exp_s1	s1
+drop view v1;
+create view v1 as select s1, 's1', 's1' from t1;
+select * from v1;
+s1	My_exp_s1	My_exp_1_s1
+drop view v1;
+create view v1 as select 's1', 's1', s1 from t1;
+select * from v1;
+My_exp_1_s1	My_exp_s1	s1
+drop view v1;
+create view v1 as select 1 as s1, 's1', s1 from t1;
+ERROR 42S21: Duplicate column name 's1'
+create view v1 as select 's1', s1, 1 as s1 from t1;
+ERROR 42S21: Duplicate column name 's1'
+drop table t1;
+create view v1(k, K) as select 1,2;
+ERROR 42S21: Duplicate column name 'K'
+create view v1 as SELECT TIME_FORMAT(SEC_TO_TIME(3600),'%H:%i') as t;
+select * from v1;
+t
+01:00
+drop view v1;
+CREATE TABLE t1 (col1 time);
+CREATE TABLE t2 (col1 time);
+CREATE VIEW v1 AS SELECT CONVERT_TZ(col1,'GMT','MET') FROM t1;
+CREATE VIEW v2 AS SELECT CONVERT_TZ(col1,'GMT','MET') FROM t2;
+CREATE VIEW v3 AS SELECT CONVERT_TZ(col1,'GMT','MET') FROM t1;
+CREATE VIEW v4 AS SELECT CONVERT_TZ(col1,'GMT','MET') FROM t2;
+CREATE VIEW v5 AS SELECT CONVERT_TZ(col1,'GMT','MET') FROM t1;
+CREATE VIEW v6 AS SELECT CONVERT_TZ(col1,'GMT','MET') FROM t2;
+DROP TABLE t1;
+CHECK TABLE v1, v2, v3, v4, v5, v6;
+Table	Op	Msg_type	Msg_text
+test.v1	check	error	View 'test.v1' references invalid table(s) or column(s) or
function(s)
+test.v2	check	status	OK
+test.v3	check	error	View 'test.v3' references invalid table(s) or column(s) or
function(s)
+test.v4	check	status	OK
+test.v5	check	error	View 'test.v5' references invalid table(s) or column(s) or
function(s)
+test.v6	check	status	OK
+drop view v1, v2, v3, v4, v5, v6;
+drop table t2;
+CREATE TABLE t1 (col1 time);
+CREATE TABLE t2 (col1 time);
+CREATE TABLE t3 (col1 time);
+create function f1 () returns int return (select max(col1) from t1);
+create function f2 () returns int return (select max(col1) from t2);
+CREATE VIEW v1 AS SELECT f1() FROM t3;
+CREATE VIEW v2 AS SELECT f2() FROM t3;
+CREATE VIEW v3 AS SELECT f1() FROM t3;
+CREATE VIEW v4 AS SELECT f2() FROM t3;
+CREATE VIEW v5 AS SELECT f1() FROM t3;
+CREATE VIEW v6 AS SELECT f2() FROM t3;
+drop function f1;
+CHECK TABLE v1, v2, v3, v4, v5, v6;
+Table	Op	Msg_type	Msg_text
+test.v1	check	error	View 'test.v1' references invalid table(s) or column(s) or
function(s)
+test.v2	check	status	OK
+test.v3	check	error	View 'test.v3' references invalid table(s) or column(s) or
function(s)
+test.v4	check	status	OK
+test.v5	check	error	View 'test.v5' references invalid table(s) or column(s) or
function(s)
+test.v6	check	status	OK
+create function f1 () returns int return (select max(col1) from t1);
+DROP TABLE t1;
+CHECK TABLE v1, v2, v3, v4, v5, v6;
+Table	Op	Msg_type	Msg_text
+test.v1	check	error	Table 'test.t1' doesn't exist
+test.v2	check	status	OK
+test.v3	check	error	Table 'test.t1' doesn't exist
+test.v4	check	status	OK
+test.v5	check	error	Table 'test.t1' doesn't exist
+test.v6	check	status	OK
+drop function f1;
+drop function f2;
+drop view v1, v2, v3, v4, v5, v6;
+drop table t2,t3;
+create table t1 (f1 date);
+insert into t1 values ('2005-01-01'),('2005-02-02');
+create view v1 as select * from t1;
+select * from v1 where f1='2005.02.02';
+f1
+2005-02-02
+select * from v1 where '2005.02.02'=f1;
+f1
+2005-02-02
+drop view v1;
+drop table t1;
+CREATE VIEW v1 AS SELECT ENCRYPT("dhgdhgd");
+SELECT * FROM v1;
+drop view v1;
+CREATE VIEW v1 AS SELECT SUBSTRING_INDEX("dkjhgd:kjhdjh", ":", 1);
+SELECT * FROM v1;
+SUBSTRING_INDEX("dkjhgd:kjhdjh", ":", 1)
+dkjhgd
+drop view v1;
+create table t1 (s1 int);
+create view v1 as select var_samp(s1) from t1;
+show create view v1;
+View	Create View
+v1	CREATE ALGORITHM=UNDEFINED VIEW `test`.`v1` AS select var_samp(`test`.`t1`.`s1`) AS
`var_samp(s1)` from `test`.`t1`
+drop view v1;
+drop table t1;
+set sql_mode='strict_all_tables';
+CREATE TABLE t1 (col1 INT NOT NULL, col2 INT NOT NULL) ENGINE = INNODB;
+CREATE VIEW v1 (vcol1) AS SELECT col1 FROM t1;
+CREATE VIEW v2 (vcol1) AS SELECT col1 FROM t1 WHERE col2 > 2;
+INSERT INTO t1 (col1) VALUES(12);
+ERROR HY000: Field 'col2' doesn't have a default value
+INSERT INTO v1 (vcol1) VALUES(12);
+ERROR HY000: Field of view 'test.v1' underlying table doesn't have a default value
+INSERT INTO v2 (vcol1) VALUES(12);
+ERROR HY000: Field of view 'test.v2' underlying table doesn't have a default value
+set sql_mode=default;
+drop view v2,v1;
 drop table t1;

--- 1.20/mysql-test/r/sql_mode.result	2005-06-15 16:27:37 -07:00
+++ 1.21/mysql-test/r/sql_mode.result	2005-07-05 17:05:28 -07:00
@@ -402,6 +402,24 @@
 SELECT "a\\b", "a\\\'b", "a""\\b", "a""\\\'b";
 a\b	a\'b	a"\b	a"\'b
 a\b	a\'b	a"\b	a"\'b
+set session sql_mode = 'NO_ENGINE_SUBSTITUTION';
+create table t1 (a int) engine=isam;
+ERROR HY000: The 'ISAM' feature is disabled; you need MySQL built with 'ISAM' to have it
working
+show create table t1;
+ERROR 42S02: Table 'test.t1' doesn't exist
+drop table if exists t1;
+Warnings:
+Note	1051	Unknown table 't1'
+set session sql_mode = '';
+create table t1 (a int) engine=isam;
+Warnings:
+Warning	1266	Using storage engine MyISAM for table 't1'
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+drop table t1;
 SET @@SQL_MODE='';
 create function `foo` () returns int return 5;
 show create function `foo`;

--- 1.11/mysql-test/t/sql_mode.test	2005-06-15 16:27:37 -07:00
+++ 1.12/mysql-test/t/sql_mode.test	2005-07-05 17:05:28 -07:00
@@ -190,6 +190,24 @@
 SELECT "a\\b", "a\\\'b", "a""\\b", "a""\\\'b";
 
 #
+# Bug#6877: MySQL should give an error if the requested table type 
+#           is not available
+#
+
+set session sql_mode = 'NO_ENGINE_SUBSTITUTION';
+--error 1289
+create table t1 (a int) engine=isam;
+--error 1146
+show create table t1;
+drop table if exists t1;
+
+# for comparison, lets see the warnings...
+set session sql_mode = '';
+create table t1 (a int) engine=isam;
+show create table t1;
+drop table t1;
+
+#
 # Bug #6903: ANSI_QUOTES does not come into play with SHOW CREATE FUNCTION
 # or PROCEDURE because it displays the SQL_MODE used to create the routine.
 #
@@ -221,6 +239,5 @@
 create view v2 as select a from t2 where a in (select a from v1);
 drop view v2, v1;
 drop table t1, t2;
-
 
 SET @@SQL_MODE=@OLD_SQL_MODE;
Thread
bk commit into 5.0 tree (jimw:1.1893)Jim Winstead6 Jul