Commit 8a67bdd0 authored by unknown's avatar unknown
Browse files

Merge mysql.com:/home/kgeorge/mysql/5.0/teamclean

into  mysql.com:/home/kgeorge/mysql/5.0/B16110


mysql-test/r/view.result:
  Auto merged
sql/sql_insert.cc:
  Auto merged
parents 3cf92fb7 e08ff115
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -2735,4 +2735,18 @@ m e
4	a
1	b
DROP VIEW v1;
DROP TABLE IF EXISTS t1,t2;
DROP TABLE t1,t2;
CREATE TABLE t1 (a INT NOT NULL, b INT NULL DEFAULT NULL);
CREATE VIEW v1 AS SELECT a, b FROM t1;
INSERT INTO v1 (b) VALUES (2);
Warnings:
Warning	1423	Field of view 'test.v1' underlying table doesn't have a default value
SET SQL_MODE = STRICT_ALL_TABLES;
INSERT INTO v1 (b) VALUES (4);
ERROR HY000: Field of view 'test.v1' underlying table doesn't have a default value
SET SQL_MODE = '';
SELECT * FROM t1;
a	b
0	2
DROP VIEW v1;
DROP TABLE t1;
+19 −1
Original line number Diff line number Diff line
@@ -2595,4 +2595,22 @@ CREATE TABLE t2 SELECT * FROM v1;
SELECT * FROM t2;

DROP VIEW v1;
DROP TABLE IF EXISTS t1,t2;
DROP TABLE t1,t2;

#
# Bug#16110: insert permitted into view col w/o default value
#
CREATE TABLE t1 (a INT NOT NULL, b INT NULL DEFAULT NULL);
CREATE VIEW v1 AS SELECT a, b FROM t1;

INSERT INTO v1 (b) VALUES (2);

SET SQL_MODE = STRICT_ALL_TABLES;
--error 1423
INSERT INTO v1 (b) VALUES (4);
SET SQL_MODE = '';

SELECT * FROM t1;

DROP VIEW v1;
DROP TABLE t1;
+14 −1
Original line number Diff line number Diff line
@@ -674,6 +674,7 @@ static bool check_view_insertability(THD * thd, TABLE_LIST *view)
  uint used_fields_buff_size= (table->s->fields + 7) / 8;
  uchar *used_fields_buff= (uchar*)thd->alloc(used_fields_buff_size);
  MY_BITMAP used_fields;
  bool save_set_query_id= thd->set_query_id;
  DBUG_ENTER("check_key_in_view");

  if (!used_fields_buff)
@@ -686,15 +687,26 @@ static bool check_view_insertability(THD * thd, TABLE_LIST *view)
  bitmap_clear_all(&used_fields);

  view->contain_auto_increment= 0;
  /* 
    we must not set query_id for fields as they're not 
    really used in this context
  */
  thd->set_query_id= 0;
  /* check simplicity and prepare unique test of view */
  for (trans= trans_start; trans != trans_end; trans++)
  {
    if (!trans->item->fixed && trans->item->fix_fields(thd, &trans->item))
      return TRUE;
    {
      thd->set_query_id= save_set_query_id;
      DBUG_RETURN(TRUE);
    }
    Item_field *field;
    /* simple SELECT list entry (field without expression) */
    if (!(field= trans->item->filed_for_view_update()))
    {
      thd->set_query_id= save_set_query_id;
      DBUG_RETURN(TRUE);
    }
    if (field->field->unireg_check == Field::NEXT_NUMBER)
      view->contain_auto_increment= 1;
    /* prepare unique test */
@@ -704,6 +716,7 @@ static bool check_view_insertability(THD * thd, TABLE_LIST *view)
    */
    trans->item= field;
  }
  thd->set_query_id= save_set_query_id;
  /* unique test */
  for (trans= trans_start; trans != trans_end; trans++)
  {