~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/string_functions/format.cc

  • Committer: Stewart Smith
  • Author(s): Vasil Dimov, Stewart Smith
  • Date: 2010-12-20 02:24:00 UTC
  • mto: (2021.1.2 build)
  • mto: This revision was merged to the branch mainline in revision 2022.
  • Revision ID: stewart@flamingspork.com-20101220022400-0p9lvvppwgaowdju
Merge Revision revid:vasil.dimov@oracle.com-20101102165720-164z3666y3tut4c2 from MySQL InnoDB

Original revid:vasil.dimov@oracle.com-20101102165720-164z3666y3tut4c2

Original Authors: Vasil Dimov <vasil.dimov@oracle.com>
Original commit message:
Fix Bug#53046 dict_update_statistics_low can still be run concurrently on same table

Replace the array of mutexes that used to protect
dict_index_t::stat_n_diff_key_vals[] with an array of rw locks that protects
all the stats related members in dict_table_t and all of its indexes.

Approved by:    Jimmy (rb://503)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
3
 *
4
 
 *  Copyright (C) 2008 Sun Microsystems, Inc.
 
4
 *  Copyright (C) 2008 Sun Microsystems
5
5
 *
6
6
 *  This program is free software; you can redistribute it and/or modify
7
7
 *  it under the terms of the GNU General Public License as published by
17
17
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
18
 */
19
19
 
20
 
#include <config.h>
 
20
#include "config.h"
21
21
#include "format.h"
22
22
 
23
23
#include <limits>
24
24
 
25
 
#include <drizzled/charset_info.h>
26
 
#include <drizzled/type/decimal.h>
27
 
#include <drizzled/table.h>
28
 
 
29
25
using namespace std;
30
26
 
31
27
namespace drizzled
79
75
  if (args[0]->result_type() == DECIMAL_RESULT ||
80
76
      args[0]->result_type() == INT_RESULT)
81
77
  {
82
 
    type::Decimal dec_val, rnd_dec, *res;
 
78
    my_decimal dec_val, rnd_dec, *res;
83
79
    res= args[0]->val_decimal(&dec_val);
84
80
    if ((null_value=args[0]->null_value))
85
81
      return 0;
86
 
    class_decimal_round(E_DEC_FATAL_ERROR, res, dec, false, &rnd_dec);
87
 
    class_decimal2string(&rnd_dec, 0, str);
 
82
    my_decimal_round(E_DEC_FATAL_ERROR, res, dec, false, &rnd_dec);
 
83
    my_decimal2string(E_DEC_FATAL_ERROR, &rnd_dec, 0, 0, 0, str);
88
84
    str_length= str->length();
89
85
    if (rnd_dec.sign())
90
86
      str_length--;