Commit afe47152 authored by unknown's avatar unknown
Browse files

Fixed wrong free in sql_view.cc

mysql-test-run now fails in case of warnings


mysql-test/lib/mtr_report.pl:
  Fail if find warnings
mysql-test/mysql-test-run.sh:
  Fail if find warnings
sql/sql_lex.cc:
  Initalize st_lex properly
sql/sql_view.cc:
  Fixed problem with unaligned memory (wrong free)
parent 94964da3
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -157,6 +157,7 @@ sub mtr_report_stats ($) {
  my $tot_passed= 0;
  my $tot_failed= 0;
  my $tot_tests=  0;
  my $found_problems= 0;            # Some warnings are errors...

  foreach my $tinfo (@$tests)
  {
@@ -214,8 +215,6 @@ sub mtr_report_stats ($) {
    }
    else
    {
      my $found_problems= 0;            # Some warnings are errors...

      # We report different types of problems in order
      foreach my $pattern ( "^Warning:", "^Error:", "^==.* at 0x" )
      {
@@ -266,6 +265,9 @@ sub mtr_report_stats ($) {
      }
    }
    print "\n";
  }
  if ( $tot_failed != 0 || $found_problems)
  {
    mtr_error("there where failing test cases");
  }
}
+7 −5
Original line number Diff line number Diff line
@@ -199,6 +199,7 @@ TOT_SKIP=0
TOT_PASS=0
TOT_FAIL=0
TOT_TEST=0
GOT_WARNINGS=0
USERT=0
SYST=0
REALT=0
@@ -1023,17 +1024,16 @@ report_stats () {
        | $SED -e 's!Warning:  Table:.* on rename!!g' \
        > $MY_LOG_DIR/warnings.tmp

    found_error=0
    # Find errors
    for i in "^Warning:" "^Error:" "^==.* at 0x" "InnoDB: Warning"
    do
      if $GREP "$i" $MY_LOG_DIR/warnings.tmp >> $MY_LOG_DIR/warnings
      then
        found_error=1
        GOT_WARNINGS=1
      fi
    done
    $RM -f $MY_LOG_DIR/warnings.tmp
    if [ $found_error = "1" ]
    if [ $GOT_WARNINGS = "1" ]
    then
      echo "WARNING: Got errors/warnings while running tests. Please examine"
      echo "$MY_LOG_DIR/warnings for details."
@@ -2217,6 +2217,8 @@ if [ $TOT_FAIL -ne 0 ]; then
  $ECHO "mysql-test-run in $TEST_MODE mode: *** Failing the test(s):$FAILED_CASES"
  $ECHO
  exit 1
else
  exit 0
fi
if [ $GOT_WARNINGS -ne 0 ]; then
  exit 1
fi
exit 0
+5 −1
Original line number Diff line number Diff line
@@ -191,8 +191,11 @@ void lex_start(THD *thd, uchar *buf,uint length)

void lex_end(LEX *lex)
{
  DBUG_ENTER("lex_end");
  DBUG_PRINT("enter", ("lex: 0x%lx", (long) lex));
  x_free(lex->yacc_yyss);
  x_free(lex->yacc_yyvs);
  DBUG_VOID_RETURN;
}


@@ -1626,7 +1629,8 @@ void st_select_lex::print_limit(THD *thd, String *str)
*/

st_lex::st_lex()
  :result(0), sql_command(SQLCOM_END), query_tables_own_last(0)
  :result(0), yacc_yyss(0), yacc_yyvs(0),
   sql_command(SQLCOM_END), query_tables_own_last(0)
{
  hash_init(&sroutines, system_charset_info, 0, 0, 0, sp_sroutine_key, 0, 0);
  sroutines_list.empty();
+3 −2
Original line number Diff line number Diff line
@@ -941,7 +941,6 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table)
        goto err;
    }


    if (!(table->view_tables=
          (List<TABLE_LIST>*) new(thd->mem_root) List<TABLE_LIST>))
      goto err;
@@ -1192,14 +1191,16 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table)
    old_lex->time_zone_tables_used= thd->lex->time_zone_tables_used;
  result= !table->prelocking_placeholder && table->prepare_security(thd);

  lex_end(thd->lex);
end:
  if (arena)
    thd->restore_active_arena(arena, &backup);
  lex_end(thd->lex);
  thd->lex= old_lex;
  DBUG_RETURN(result);

err:
  DBUG_ASSERT(thd->lex == table->view);
  lex_end(thd->lex);
  delete table->view;
  table->view= 0;	// now it is not VIEW placeholder
  result= 1;