1 #ifndef MY_DECIMAL_LIMITS_INCLUDED
2 #define MY_DECIMAL_LIMITS_INCLUDED
3 /* Copyright (c) 2011 Monty Program Ab
4 
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; version 2 of the License.
8 
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13 
14    You should have received a copy of the GNU General Public License
15    along with this program; if not, write to the Free Software
16    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
17 
18 #define DECIMAL_LONGLONG_DIGITS 22
19 #define DECIMAL_LONG_DIGITS 10
20 #define DECIMAL_LONG3_DIGITS 8
21 
22 /** maximum length of buffer in our big digits (uint32). */
23 #define DECIMAL_BUFF_LENGTH 9
24 
25 /* the number of digits that my_decimal can possibly contain */
26 #define DECIMAL_MAX_POSSIBLE_PRECISION (DECIMAL_BUFF_LENGTH * 9)
27 
28 
29 /**
30   maximum guaranteed precision of number in decimal digits (number of our
31   digits * number of decimal digits in one our big digit - number of decimal
32   digits in one our big digit decreased by 1 (because we always put decimal
33   point on the border of our big digits))
34 
35   With normal precession we can handle 65 digits. MariaDB can store in
36   the .frm up to 63 digits.  By default we use DECIMAL_NOT_SPECIFIED digits
37   when converting strings to decimal, so we don't want to set this too high.
38   To not use up all digits for the scale we limit the number of decimals to
39   38.
40 */
41 #define DECIMAL_MAX_PRECISION (DECIMAL_MAX_POSSIBLE_PRECISION - 8*2)
42 #define DECIMAL_MAX_SCALE 38
43 #define DECIMAL_NOT_SPECIFIED 39
44 
45 /**
46   maximum length of string representation (number of maximum decimal
47   digits + 1 position for sign + 1 position for decimal point, no terminator)
48 */
49 #define DECIMAL_MAX_STR_LENGTH (DECIMAL_MAX_POSSIBLE_PRECISION + 2)
50 
51 #endif /* MY_DECIMAL_LIMITS_INCLUDED */
52