mirror of
https://github.com/postgres/postgres.git
synced 2025-11-18 02:02:55 +03:00
Added NUMERIC data type with many builtin funcitons, operators
and aggregates. Jan
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: builtins.h,v 1.72 1998/12/13 23:36:48 thomas Exp $
|
||||
* $Id: builtins.h,v 1.73 1998/12/30 19:56:34 wieck Exp $
|
||||
*
|
||||
* NOTES
|
||||
* This should normally only be included by fmgr.h.
|
||||
@@ -30,6 +30,7 @@
|
||||
#include <utils/cash.h>
|
||||
#include <utils/inet.h>
|
||||
#include <utils/rel.h>
|
||||
#include <utils/numeric.h>
|
||||
|
||||
/*
|
||||
* Defined in adt/
|
||||
@@ -560,5 +561,46 @@ bool macaddr_ne(macaddr * a1, macaddr * a2);
|
||||
int4 macaddr_cmp(macaddr * a1, macaddr * a2);
|
||||
text *macaddr_manuf(macaddr * addr);
|
||||
|
||||
/* numeric.c */
|
||||
Numeric numeric_in(char *str, int dummy, int32 typmod);
|
||||
char *numeric_out(Numeric num);
|
||||
Numeric numeric(Numeric num, int32 typmod);
|
||||
Numeric numeric_abs(Numeric num);
|
||||
Numeric numeric_sign(Numeric num);
|
||||
Numeric numeric_round(Numeric num, int32 scale);
|
||||
Numeric numeric_trunc(Numeric num, int32 scale);
|
||||
Numeric numeric_ceil(Numeric num);
|
||||
Numeric numeric_floor(Numeric num);
|
||||
bool numeric_eq(Numeric num1, Numeric num2);
|
||||
bool numeric_ne(Numeric num1, Numeric num2);
|
||||
bool numeric_gt(Numeric num1, Numeric num2);
|
||||
bool numeric_ge(Numeric num1, Numeric num2);
|
||||
bool numeric_lt(Numeric num1, Numeric num2);
|
||||
bool numeric_le(Numeric num1, Numeric num2);
|
||||
Numeric numeric_add(Numeric num1, Numeric num2);
|
||||
Numeric numeric_sub(Numeric num1, Numeric num2);
|
||||
Numeric numeric_mul(Numeric num1, Numeric num2);
|
||||
Numeric numeric_div(Numeric num1, Numeric num2);
|
||||
Numeric numeric_mod(Numeric num1, Numeric num2);
|
||||
Numeric numeric_inc(Numeric num);
|
||||
Numeric numeric_dec(Numeric num);
|
||||
Numeric numeric_smaller(Numeric num1, Numeric num2);
|
||||
Numeric numeric_larger(Numeric num1, Numeric num2);
|
||||
Numeric numeric_sqrt(Numeric num);
|
||||
Numeric numeric_exp(Numeric num);
|
||||
Numeric numeric_ln(Numeric num);
|
||||
Numeric numeric_log(Numeric num1, Numeric num2);
|
||||
Numeric numeric_power(Numeric num1, Numeric num2);
|
||||
Numeric int4_numeric(int32 val);
|
||||
int32 numeric_int4(Numeric num);
|
||||
Numeric float4_numeric(float32 val);
|
||||
float32 numeric_float4(Numeric num);
|
||||
Numeric float8_numeric(float64 val);
|
||||
float64 numeric_float8(Numeric num);
|
||||
|
||||
|
||||
#endif /* BUILTINS_H */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
67
src/include/utils/numeric.h
Normal file
67
src/include/utils/numeric.h
Normal file
@@ -0,0 +1,67 @@
|
||||
/* ----------
|
||||
* numeric.h -
|
||||
*
|
||||
* Definitions for the exact numeric data type of Postgres
|
||||
*
|
||||
* 1998 Jan Wieck
|
||||
*
|
||||
* $Header: /cvsroot/pgsql/src/include/utils/numeric.h,v 1.1 1998/12/30 19:56:35 wieck Exp $
|
||||
*
|
||||
* ----------
|
||||
*/
|
||||
|
||||
#ifndef _PG_NUMERIC_H_
|
||||
#define _PG_NUMERIC_H_
|
||||
|
||||
#include "postgres.h"
|
||||
|
||||
|
||||
/* ----------
|
||||
* The hardcoded limits and defaults of the numeric data type
|
||||
* ----------
|
||||
*/
|
||||
#define NUMERIC_MAX_PRECISION 4000
|
||||
#define NUMERIC_DEFAULT_PRECISION 30
|
||||
#define NUMERIC_DEFAULT_SCALE 6
|
||||
|
||||
#define NUMERIC_MAX_DISPLAY_SCALE NUMERIC_MAX_PRECISION
|
||||
#define NUMERIC_MIN_DISPLAY_SCALE NUMERIC_DEFAULT_SCALE + 4
|
||||
|
||||
#define NUMERIC_MAX_RESULT_SCALE (NUMERIC_MAX_PRECISION + 4)
|
||||
#define NUMERIC_MIN_RESULT_SCALE (NUMERIC_DEFAULT_PRECISION + 4)
|
||||
|
||||
#define NUMERIC_UNPACKED_DATASIZE (NUMERIC_MAX_PRECISION * 2 + 4)
|
||||
|
||||
|
||||
/* ----------
|
||||
* Sign values and macros to deal with n_sign_dscale
|
||||
* ----------
|
||||
*/
|
||||
#define NUMERIC_SIGN_MASK 0xC000
|
||||
#define NUMERIC_POS 0x0000
|
||||
#define NUMERIC_NEG 0x4000
|
||||
#define NUMERIC_NAN 0xC000
|
||||
#define NUMERIC_SIGN(n) ((n)->n_sign_dscale & NUMERIC_SIGN_MASK)
|
||||
#define NUMERIC_DSCALE(n) ((n)->n_sign_dscale & ~NUMERIC_SIGN_MASK)
|
||||
#define NUMERIC_IS_NAN(n) (NUMERIC_SIGN(n) != NUMERIC_POS && \
|
||||
NUMERIC_SIGN(n) != NUMERIC_NEG)
|
||||
|
||||
|
||||
/* ----------
|
||||
* The Numeric data type stored in the database
|
||||
* ----------
|
||||
*/
|
||||
typedef struct NumericData {
|
||||
int32 varlen; /* Variable size */
|
||||
int16 n_weight; /* Weight of 1st digit */
|
||||
uint16 n_rscale; /* Result scale */
|
||||
uint16 n_sign_dscale; /* Sign + display scale */
|
||||
unsigned char n_data[1]; /* Digit data */
|
||||
} NumericData;
|
||||
typedef NumericData *Numeric;
|
||||
|
||||
#define NUMERIC_HDRSZ (sizeof(int32) + sizeof(uint16) * 3)
|
||||
|
||||
|
||||
#endif /* _PG_NUMERIC_H_ */
|
||||
|
||||
Reference in New Issue
Block a user