Drizzled Public API Documentation

decimal.cc File Reference

SQL standard-compliant decimal number handling. More...

#include <config.h>
#include <drizzled/definitions.h>
#include <drizzled/internal/m_string.h>
#include <drizzled/charset_info.h>
#include <drizzled/type/decimal.h>
#include <plugin/myisam/myisampack.h>
#include <drizzled/util/test.h>
#include <algorithm>
#include <time.h>
#include <drizzled/current_session.h>
#include <drizzled/error.h>
#include <drizzled/field.h>
#include <drizzled/internal/my_sys.h>

Go to the source code of this file.

Namespaces

namespace  drizzled
 

TODO: Rename this file - func.h is stupid.


namespace  drizzled::type
 

Convert from decimal to binary representation.


Defines

#define DIG_PER_DEC1   9
#define DIG_MASK   100000000
#define DIG_BASE   1000000000
#define DIG_MAX   (DIG_BASE-1)
#define sanity(d)

Typedefs

typedef decimal_digit_t drizzled::dec1
typedef int64_t drizzled::dec2

Functions

int drizzled::decimal_operation_results (int result)
int drizzled::class_decimal2string (const type::Decimal *d, uint32_t fixed_dec, String *str)
 Converting decimal to string.
type::Decimal * drizzled::date2_class_decimal (type::Time *ltime, type::Decimal *dec)
void drizzled::class_decimal_trim (uint32_t *precision, uint32_t *scale)
template<typename T >
static T drizzled::round_up (const T &x)
static void drizzled::fix_intg_frac_error (const int len, int &intg1, int &frac1, int &error)
static void drizzled::add (dec1 &to, const dec1 &from1, const dec1 &from2, dec1 &carry)
static void drizzled::add2 (dec1 &to, const dec1 &from1, const dec1 &from2, dec1 &carry)
static void drizzled::sub (dec1 &to, const dec1 &from1, const dec1 &from2, dec1 &carry)
static void drizzled::sub2 (dec1 &to, const dec1 &from1, const dec1 &from2, dec1 &carry)
void drizzled::max_decimal (int precision, int frac, decimal_t *to)
 Get maximum value for given precision and scale.
static dec1 * drizzled::remove_leading_zeroes (const decimal_t *from, int *intg_result)
int drizzled::decimal_actual_fraction (decimal_t *from)
 Count actual length of fraction part (without ending zeroes)
int drizzled::decimal2string (const decimal_t *from, char *to, int *to_len, int fixed_precision, int fixed_decimals, char filler)
 Convert decimal to its printable string representation.
static void drizzled::digits_bounds (decimal_t *from, int *start_result, int *end_result)
 Return bounds of decimal digits in the number.
static void drizzled::do_mini_left_shift (decimal_t *dec, int shift, int beg, int last)
static void drizzled::do_mini_right_shift (decimal_t *dec, int shift, int beg, int last)
 Right shift for alignment of data in buffer.
static int drizzled::decimal_shift (decimal_t *dec, int shift)
 Shift of decimal digits in given number (with rounding if it need)
int drizzled::internal_str2dec (char *from, decimal_t *to, char **end, bool fixed)
 Convert string to decimal.
int drizzled::decimal2double (const decimal_t *from, double *to)
int drizzled::double2decimal (const double from, decimal_t *to)
static int drizzled::ull2dec (uint64_t from, decimal_t *to)
int drizzled::uint64_t2decimal (const uint64_t from, decimal_t *to)
int drizzled::int64_t2decimal (const int64_t from, decimal_t *to)
int drizzled::decimal2uint64_t (const decimal_t *from, uint64_t *to)
int drizzled::decimal2int64_t (const decimal_t *from, int64_t *to)
int drizzled::decimal2bin (const decimal_t *from, unsigned char *to, int precision, int frac)
 Convert decimal to its binary fixed-length representation (suitable for comparing with memcmp)
int drizzled::bin2decimal (const unsigned char *from, decimal_t *to, int precision, int scale)
 Restores decimal from its binary fixed-length representation.
int drizzled::decimal_bin_size (int precision, int scale)
 Returns the size of array to hold a binary representation of a decimal.
int drizzled::decimal_round (const decimal_t *from, decimal_t *to, int scale, decimal_round_mode mode)
 Rounds the decimal to "scale" digits.
static int drizzled::do_add (const decimal_t *from1, const decimal_t *from2, decimal_t *to)
static int drizzled::do_sub (const decimal_t *from1, const decimal_t *from2, decimal_t *to)
int drizzled::decimal_intg (const decimal_t *from)
int drizzled::decimal_add (const decimal_t *from1, const decimal_t *from2, decimal_t *to)
int drizzled::decimal_sub (const decimal_t *from1, const decimal_t *from2, decimal_t *to)
int drizzled::decimal_cmp (const decimal_t *from1, const decimal_t *from2)
int drizzled::decimal_mul (const decimal_t *from1, const decimal_t *from2, decimal_t *to)
 multiply two decimals
static int drizzled::do_div_mod (const decimal_t *from1, const decimal_t *from2, decimal_t *to, decimal_t *mod, int scale_incr)
int drizzled::decimal_div (const decimal_t *from1, const decimal_t *from2, decimal_t *to, int scale_incr)
 division of two decimals
int drizzled::decimal_mod (const decimal_t *from1, const decimal_t *from2, decimal_t *to)
 modulus
std::ostream & drizzled::operator<< (std::ostream &output, const type::Decimal &dec)

Variables

static const dec1 drizzled::powers10 [DIG_PER_DEC1+1]
static const int drizzled::dig2bytes [DIG_PER_DEC1+1] = {0, 1, 1, 2, 2, 3, 3, 4, 4, 4}
static const dec1 drizzled::frac_max [DIG_PER_DEC1-1]

Detailed Description

SQL standard-compliant decimal number handling.

Note:
This library implements SQL standard "exact numeric" type and is not at all generic, but rather intentinally crippled to follow the standard :)

Definition in file decimal.cc.


Define Documentation

#define sanity (   d)
Value:
assert((d)->len >0 && ((d)->buf[0] | \
                              (d)->buf[(d)->len-1] | 1))

Definition at line 394 of file decimal.cc.