CUBRID Engine  latest
numeric_opfunc.h
Go to the documentation of this file.
1 /*
2  * Copyright 2008 Search Solution Corporation
3  * Copyright 2016 CUBRID Corporation
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 
20 /*
21  * Typedef's and defines for arithmetic package that handles
22  * extended precision integers
23  */
24 
25 #ifndef _NUMERIC_OPFUNC_H_
26 #define _NUMERIC_OPFUNC_H_
27 
28 #ident "$Id$"
29 
30 #include "config.h"
31 
32 #include "intl_support.h"
33 #include "dbtype_def.h"
34 #include "error_manager.h"
35 
36 typedef enum
37 {
38  DATA_STATUS_OK = 0, /* Operation proceeded without error */
39  DATA_STATUS_TRUNCATED = 1004, /* Operation caused truncation */
40  DATA_STATUS_NOT_CONSUMED = 1005 /* Operation not consumed all input */
42 
43 #define NUMERIC_MAX_STRING_SIZE (80 + 1)
44 
45 #define SECONDS_OF_ONE_DAY 86400 /* 24 * 60 * 60 */
46 #define MILLISECONDS_OF_ONE_DAY 86400000 /* 24 * 60 * 60 * 1000 */
47 
48 #define db_locate_numeric(value) ((DB_C_NUMERIC) ((value)->data.num.d.buf))
49 
50 #if defined(SERVER_MODE)
51 extern void numeric_init_power_value_string (void);
52 #endif
53 
54 /* Arithmetic routines */
55 extern int numeric_db_value_add (const DB_VALUE * dbv1, const DB_VALUE * dbv2, DB_VALUE * answer);
56 extern int numeric_db_value_sub (const DB_VALUE * dbv1, const DB_VALUE * dbv2, DB_VALUE * answer);
57 extern int numeric_db_value_mul (const DB_VALUE * dbv1, const DB_VALUE * dbv2, DB_VALUE * answer);
58 extern int numeric_db_value_div (const DB_VALUE * dbv1, const DB_VALUE * dbv2, DB_VALUE * answer);
59 extern int numeric_db_value_negate (DB_VALUE * answer);
60 extern void numeric_db_value_abs (DB_C_NUMERIC src_num, DB_C_NUMERIC dest_num);
61 extern int numeric_db_value_increase (DB_VALUE * arg);
62 
63 /* Comparison routines */
64 extern int numeric_db_value_compare (const DB_VALUE * dbv1, const DB_VALUE * dbv2, DB_VALUE * answer);
65 
66 /* Coercion routines */
67 extern void numeric_coerce_int_to_num (int arg, DB_C_NUMERIC answer);
68 extern void numeric_coerce_bigint_to_num (DB_BIGINT arg, DB_C_NUMERIC answer);
69 extern void numeric_coerce_num_to_int (DB_C_NUMERIC arg, int *answer);
70 extern int numeric_coerce_num_to_bigint (DB_C_NUMERIC arg, int scale, DB_BIGINT * answer);
71 
72 extern void numeric_coerce_dec_str_to_num (const char *dec_str, DB_C_NUMERIC result);
73 extern void numeric_coerce_num_to_dec_str (DB_C_NUMERIC num, char *dec_str);
74 
75 extern void numeric_coerce_num_to_double (DB_C_NUMERIC num, int scale, double *adouble);
76 extern int numeric_internal_double_to_num (double adouble, int dst_scale, DB_C_NUMERIC num, int *prec, int *scale);
77 extern int numeric_internal_float_to_num (float afloat, int dst_scale, DB_C_NUMERIC num, int *prec, int *scale);
78 
79 #if defined (ENABLE_UNUSED_FUNCTION)
80 extern int numeric_coerce_double_to_num (double adouble, DB_C_NUMERIC num, int *prec, int *scale);
81 #endif
82 
83 extern int numeric_coerce_string_to_num (const char *astring, int astring_len, INTL_CODESET codeset, DB_VALUE * num);
84 
85 extern int numeric_coerce_num_to_num (DB_C_NUMERIC src_num, int src_prec, int src_scale, int dest_prec, int dest_scale,
86  DB_C_NUMERIC dest_num);
87 
88 extern int numeric_db_value_coerce_to_num (DB_VALUE * src, DB_VALUE * dest, DB_DATA_STATUS * data_stat);
89 extern int numeric_db_value_coerce_from_num (DB_VALUE * src, DB_VALUE * dest, DB_DATA_STATUS * data_stat);
91 extern char *numeric_db_value_print (const DB_VALUE * val, char *buf);
92 
93 /* Testing Routines */
94 extern bool numeric_db_value_is_zero (const DB_VALUE * arg);
95 
96 extern int numeric_db_value_is_positive (const DB_VALUE * arg);
97 #endif /* _NUMERIC_OPFUNC_H_ */
void numeric_coerce_num_to_double(DB_C_NUMERIC num, int scale, double *adouble)
void numeric_db_value_abs(DB_C_NUMERIC src_num, DB_C_NUMERIC dest_num)
int numeric_coerce_string_to_num(const char *astring, int astring_len, INTL_CODESET codeset, DB_VALUE *num)
int numeric_db_value_div(const DB_VALUE *dbv1, const DB_VALUE *dbv2, DB_VALUE *answer)
int numeric_coerce_num_to_num(DB_C_NUMERIC src_num, int src_prec, int src_scale, int dest_prec, int dest_scale, DB_C_NUMERIC dest_num)
void numeric_coerce_num_to_dec_str(DB_C_NUMERIC num, char *dec_str)
void numeric_coerce_num_to_int(DB_C_NUMERIC arg, int *answer)
int numeric_db_value_add(const DB_VALUE *dbv1, const DB_VALUE *dbv2, DB_VALUE *answer)
bool numeric_db_value_is_zero(const DB_VALUE *arg)
void numeric_coerce_bigint_to_num(DB_BIGINT arg, DB_C_NUMERIC answer)
int numeric_db_value_increase(DB_VALUE *arg)
int numeric_db_value_negate(DB_VALUE *answer)
char * numeric_db_value_print(const DB_VALUE *val, char *buf)
int numeric_db_value_is_positive(const DB_VALUE *arg)
unsigned char * DB_C_NUMERIC
Definition: dbtype_def.h:1214
int numeric_db_value_coerce_to_num(DB_VALUE *src, DB_VALUE *dest, DB_DATA_STATUS *data_stat)
int numeric_db_value_compare(const DB_VALUE *dbv1, const DB_VALUE *dbv2, DB_VALUE *answer)
int numeric_db_value_coerce_from_num_strict(DB_VALUE *src, DB_VALUE *dest)
int64_t DB_BIGINT
Definition: dbtype_def.h:751
int numeric_db_value_mul(const DB_VALUE *dbv1, const DB_VALUE *dbv2, DB_VALUE *answer)
int numeric_db_value_sub(const DB_VALUE *dbv1, const DB_VALUE *dbv2, DB_VALUE *answer)
DB_DATA_STATUS
int numeric_coerce_num_to_bigint(DB_C_NUMERIC arg, int scale, DB_BIGINT *answer)
enum intl_codeset INTL_CODESET
Definition: intl_support.h:190
void numeric_coerce_dec_str_to_num(const char *dec_str, DB_C_NUMERIC result)
int numeric_internal_double_to_num(double adouble, int dst_scale, DB_C_NUMERIC num, int *prec, int *scale)
int numeric_db_value_coerce_from_num(DB_VALUE *src, DB_VALUE *dest, DB_DATA_STATUS *data_stat)
void numeric_coerce_int_to_num(int arg, DB_C_NUMERIC answer)
int numeric_internal_float_to_num(float afloat, int dst_scale, DB_C_NUMERIC num, int *prec, int *scale)