• Davi Arnaut's avatar
    Bug#40277: SHOW CREATE VIEW returns invalid SQL · f502deac
    Davi Arnaut authored
    The problem is that not all column names retrieved from a SELECT
    statement can be used as view column names due to length and format
    restrictions. The server failed to properly check the conformity
    of those automatically generated column names before storing the
    final view definition on disk.
    
    Since columns retrieved from a SELECT statement can be anything
    ranging from functions to constants values of any format and length,
    the solution is to rewrite to a pre-defined format any names that
    are not acceptable as a view column name.
    
    The name is rewritten to "Name_exp_%u" where %u translates to the
    position of the column. To avoid this conversion scheme, define
    explict names for the view columns via the column_list clause.
    Also, aliases are now only generated for top level statements.
    
    mysql-test/include/view_alias.inc:
      Add test case for Bug#40277
    mysql-test/r/compare.result:
      Bug#40277: SHOW CREATE VIEW returns invalid SQL
    mysql-test/r/group_by.result:
      Bug#40277: SHOW CREATE VIEW returns invalid SQL
    mysql-test/r/ps.result:
      Bug#40277: SHOW CREATE VIEW returns invalid SQL
    mysql-test/r/subselect.result:
      Bug#40277: SHOW CREATE VIEW returns invalid SQL
    mysql-test/r/subselect3.result:
      Bug#40277: SHOW CREATE VIEW returns invalid SQL
    mysql-test/r/type_datetime.result:
      Bug#40277: SHOW CREATE VIEW returns invalid SQL
    mysql-test/r/union.result:
      Bug#40277: SHOW CREATE VIEW returns invalid SQL
    mysql-test/r/view.result:
      Add test case result for Bug#40277
    mysql-test/r/view_alias.result:
      Add test case result for Bug#40277
    mysql-test/t/view_alias.test:
      Add test case for Bug#40277
    sql/sql_view.cc:
      Check if auto generated column names are conforming. Also, the
      make_unique_view_field_name function is not used as it uses the
      original name to construct a new one, which does not work if the
      name is invalid.
    f502deac
sql_select.cc 544 KB