Commit 38091170 authored by unknown's avatar unknown
Browse files

Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt

into  rakia.(none):/home/kgeorge/mysql/autopush/B21086-5.0-opt

parents beb6f57c 1b3cdb60
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -2807,3 +2807,16 @@ yadda
yad
DROP VIEW v1;
DROP TABLE t1;
CREATE TABLE t1 (s1 char);
INSERT INTO t1 VALUES ('Z');
CREATE VIEW v1 AS SELECT s1 collate latin1_german1_ci AS col FROM t1;
CREATE VIEW v2 (col) AS SELECT s1 collate latin1_german1_ci FROM t1;
INSERT INTO v1 (col) VALUES ('b');
INSERT INTO v2 (col) VALUES ('c');
SELECT s1 FROM t1;
s1
Z
b
c
DROP VIEW v1, v2;
DROP TABLE t1;
+19 −0
Original line number Diff line number Diff line
@@ -2667,3 +2667,22 @@ SELECT * FROM v1;
DROP VIEW v1;

DROP TABLE t1;

#
# Bug #21086: server crashes when VIEW defined with a SELECT with COLLATE 
# clause is called
#
CREATE TABLE t1 (s1 char);
INSERT INTO t1 VALUES ('Z');

CREATE VIEW v1 AS SELECT s1 collate latin1_german1_ci AS col FROM t1;

CREATE VIEW v2 (col) AS SELECT s1 collate latin1_german1_ci FROM t1;

# either of these statements will cause crash
INSERT INTO v1 (col) VALUES ('b');
INSERT INTO v2 (col) VALUES ('c');

SELECT s1 FROM t1;
DROP VIEW v1, v2;
DROP TABLE t1;
+1 −1
Original line number Diff line number Diff line
@@ -728,7 +728,7 @@ class Item_func_set_collation :public Item_str_func
  void fix_length_and_dec();
  bool eq(const Item *item, bool binary_cmp) const;
  const char *func_name() const { return "collate"; }
  enum Functype func_type() const { return COLLATE_FUNC; }
  enum Functype functype() const { return COLLATE_FUNC; }
  void print(String *str);
  Item_field *filed_for_view_update()
  {
+7 −2
Original line number Diff line number Diff line
@@ -4959,12 +4959,17 @@ fill_record(THD * thd, List<Item> &fields, List<Item> &values,
            bool ignore_errors)
{
  List_iterator_fast<Item> f(fields),v(values);
  Item *value;
  Item *value, *fld;
  Item_field *field;
  DBUG_ENTER("fill_record");

  while ((field=(Item_field*) f++))
  while ((fld= f++))
  {
    if (!(field= fld->filed_for_view_update()))
    {
      my_error(ER_NONUPDATEABLE_COLUMN, MYF(0), fld->name);
      DBUG_RETURN(TRUE);
    }
    value=v++;
    Field *rfield= field->field;
    TABLE *table= rfield->table;