24 #ifndef _OBJECT_DOMAIN_H_ 25 #define _OBJECT_DOMAIN_H_ 34 #if defined (__cplusplus) 38 #define DOM_GET_ENUMERATION(dom) \ 40 #define DOM_GET_ENUM_ELEMENTS(dom) \ 41 ((dom)->enumeration.elements) 42 #define DOM_GET_ENUM_ELEMS_COUNT(dom) \ 43 ((dom)->enumeration.count) 44 #define DOM_GET_ENUM_ELEM(dom, idx) \ 45 ((dom)->enumeration.elements[idx - 1]) 47 #define DOM_SET_ENUM_ELEMENTS(dom, elems) \ 48 ((dom)->enumeration.elements = (elems)) 49 #define DOM_SET_ENUM_ELEMS_COUNT(dom, cnt) \ 50 ((dom)->enumeration.count = (cnt)) 51 #define DOM_SET_ENUM(dom, elems, cnt) \ 53 (dom)->enumeration.count = (cnt); \ 54 (dom)->enumeration.elements = (elems); \ 60 #define TP_DOMAIN_SELF_REF -1 119 #define TP_FLOATING_PRECISION_VALUE -1 130 void *(*alloc_func) (
int size, ...);
132 void (*free_func) (
void *mem, ...);
136 #define TP_ALLOC(con, size) \ 137 (*(con)->alloc_func)(size, (con)->alloc_args) 139 #define TP_FREE(con, mem) \ 140 (*(con)->free_func)(mem, (con)->free_args) 224 #define TP_IS_SET_TYPE(typenum) \ 225 ((((typenum) == DB_TYPE_SET) || ((typenum) == DB_TYPE_MULTISET) || \ 226 ((typenum) == DB_TYPE_SEQUENCE)) ? true : false) 233 #define TP_IS_BIT_TYPE(typeid) \ 234 (((typeid) == DB_TYPE_VARBIT) || ((typeid) == DB_TYPE_BIT)) 241 #define TP_IS_CHAR_TYPE(typeid) \ 242 (((typeid) == DB_TYPE_VARCHAR) || ((typeid) == DB_TYPE_CHAR) || \ 243 ((typeid) == DB_TYPE_VARNCHAR) || ((typeid) == DB_TYPE_NCHAR)) 245 #define TP_IS_FIXED_LEN_CHAR_TYPE(typeid) \ 246 (((typeid) == DB_TYPE_CHAR) || ((typeid) == DB_TYPE_NCHAR)) 248 #define TP_IS_VAR_LEN_CHAR_TYPE(typeid) \ 249 (((typeid) == DB_TYPE_VARCHAR) || ((typeid) == DB_TYPE_VARNCHAR)) 256 #define TP_IS_CHAR_BIT_TYPE(typeid) (TP_IS_CHAR_TYPE(typeid) \ 257 || TP_IS_BIT_TYPE(typeid)) 259 #define TP_IS_STRING_TYPE(typeid) TP_IS_CHAR_BIT_TYPE((typeid)) 261 #define TP_IS_NUMERIC_TYPE(typeid) \ 262 (((typeid) == DB_TYPE_INTEGER) || ((typeid) == DB_TYPE_FLOAT) \ 263 || ((typeid) == DB_TYPE_DOUBLE) || ((typeid) == DB_TYPE_SMALLINT) \ 264 || ((typeid) == DB_TYPE_NUMERIC) || ((typeid) == DB_TYPE_MONETARY) \ 265 || ((typeid) == DB_TYPE_BIGINT)) 267 #define TP_IS_DOUBLE_ALIGN_TYPE(typeid) \ 268 ((typeid) == DB_TYPE_DOUBLE || (typeid) == DB_TYPE_BIGINT) 270 #define TP_IS_DATE_WITH_TZ_TYPE(typeid) \ 271 (((typeid) == DB_TYPE_DATETIMELTZ) || ((typeid) == DB_TYPE_DATETIMETZ) \ 272 || ((typeid) == DB_TYPE_TIMESTAMPLTZ) \ 273 || ((typeid) == DB_TYPE_TIMESTAMPTZ)) 275 #define TP_IS_DATE_TYPE(typeid) \ 276 (((typeid) == DB_TYPE_DATE) || ((typeid) == DB_TYPE_DATETIME) \ 277 || ((typeid) == DB_TYPE_TIMESTAMP) || TP_IS_DATE_WITH_TZ_TYPE (typeid)) 279 #define TP_IS_DATE_OR_TIME_TYPE(typeid) \ 280 (((typeid) == DB_TYPE_TIME) || TP_IS_DATE_TYPE(typeid)) 282 #define TP_IS_FLOATING_NUMBER_TYPE(typeid) \ 283 (((typeid) == DB_TYPE_FLOAT) || ((typeid) == DB_TYPE_DOUBLE) \ 284 || ((typeid) == DB_TYPE_NUMERIC) || ((typeid) == DB_TYPE_MONETARY)) 295 #define TP_DOUBLE_MANTISA_BINARY_PRECISION 53 296 #define TP_DOUBLE_EXPONENT_BINARY_PRECISION 11 297 #define TP_DOUBLE_BINARY_PRECISION TP_DOUBLE_MANTISA_BINARY_PRECISION 299 #define TP_DOUBLE_MANTISA_DECIMAL_PRECISION 16 300 #define TP_DOUBLE_EXPONENT_DECIMAL_PRECISION 3 301 #define TP_DOUBLE_DECIMAL_PRECISION TP_DOUBLE_MANTISA_DECIMAL_PRECISION 305 #define TP_DOUBLE_AS_CHAR_LENGTH \ 306 (4 + TP_DOUBLE_MANTISA_DECIMAL_PRECISION + \ 307 TP_DOUBLE_EXPONENT_DECIMAL_PRECISION) 309 #define TP_MONETARY_MANTISA_PRECISION TP_DOUBLE_MANTISA_DECIMAL_PRECISION 310 #define TP_MONETARY_EXPONENT_PRECISION TP_DOUBLE_EXPONENT_DECIMAL_PRECISION 311 #define TP_MONETARY_PRECISION TP_DOUBLE_DECIMAL_PRECISION 312 #define TP_MONETARY_AS_CHAR_LENGTH TP_DOUBLE_AS_CHAR_LENGTH 314 #define TP_FLOAT_MANTISA_BINARY_PRECISION 24 315 #define TP_FLOAT_EXPONENT_BINARY_PRECISION 8 316 #define TP_FLOAT_BINARY_PRECISION TP_FLOAT_MANTISA_BINARY_PRECISION 318 #define TP_FLOAT_MANTISA_DECIMAL_PRECISION 7 319 #define TP_FLOAT_EXPONENT_DECIMAL_PRECISION 2 320 #define TP_FLOAT_DECIMAL_PRECISION TP_FLOAT_MANTISA_DECIMAL_PRECISION 321 #define TP_FLOAT_AS_CHAR_LENGTH \ 322 (4 + TP_FLOAT_MANTISA_DECIMAL_PRECISION + \ 323 TP_FLOAT_EXPONENT_DECIMAL_PRECISION) 325 #define TP_BIGINT_PRECISION 19 326 #define TP_BIGINT_SCALE 0 327 #define TP_BIGINT_AS_CHAR_LENGTH 20 329 #define TP_INTEGER_PRECISION 10 330 #define TP_INTEGER_AS_CHAR_LENGTH 11 332 #define TP_SMALLINT_PRECISION 5 333 #define TP_SMALLINT_AS_CHAR_LENGTH 6 335 #define TP_TIME_PRECISION 6 336 #define TP_TIME_AS_CHAR_LENGTH 11 338 #define TP_DATE_PRECISION 8 339 #define TP_DATE_AS_CHAR_LENGTH 10 341 #define TP_TIMESTAMP_PRECISION 14 342 #define TP_TIMESTAMP_AS_CHAR_LENGTH 22 343 #define TP_TIMESTAMPTZ_AS_CHAR_LENGTH 64 345 #define TP_DATETIME_PRECISION 17 346 #define TP_DATETIME_AS_CHAR_LENGTH 26 347 #define TP_DATETIMETZ_AS_CHAR_LENGTH 64 356 #define TP_ARE_COMPARABLE_KEY_TYPES(key1_type, key2_type) \ 357 (((key1_type) == (key2_type)) || \ 358 (((key1_type) == DB_TYPE_CHAR || (key1_type) == DB_TYPE_VARCHAR) && \ 359 ((key2_type) == DB_TYPE_CHAR || (key2_type) == DB_TYPE_VARCHAR)) || \ 360 (((key1_type) == DB_TYPE_NCHAR || (key1_type) == DB_TYPE_VARNCHAR) && \ 361 ((key2_type) == DB_TYPE_NCHAR || (key2_type) == DB_TYPE_VARNCHAR)) || \ 362 (((key1_type) == DB_TYPE_BIT || (key1_type) == DB_TYPE_VARBIT) && \ 363 ((key2_type) == DB_TYPE_BIT || (key2_type) == DB_TYPE_VARBIT)) || \ 364 (((key1_type) == DB_TYPE_OID || (key1_type) == DB_TYPE_OBJECT) && \ 365 ((key2_type) == DB_TYPE_OID || (key2_type) == DB_TYPE_OBJECT))) 367 #define TP_DOMAIN_TYPE(dom) \ 368 ((dom) ? (dom)->type->id : DB_TYPE_NULL) 370 #define TP_TYPE_HAS_COLLATION(typeid) \ 371 (TP_IS_CHAR_TYPE(typeid) || (typeid) == DB_TYPE_ENUMERATION) 373 #define TP_DOMAIN_CODESET(dom) (((dom) ? (INTL_CODESET)(dom)->codeset : LANG_SYS_CODESET)) 374 #define TP_DOMAIN_COLLATION(dom) \ 375 ((dom) ? (dom)->collation_id : LANG_SYS_COLLATION) 376 #define TP_DOMAIN_COLLATION_FLAG(dom) \ 377 ((dom) ? (dom)->collation_flag: TP_DOMAIN_COLL_NORMAL) 379 #define TP_TYPE_NOT_SUPPORT_COVERING(typeid) \ 380 ((typeid) == DB_TYPE_TIMESTAMPTZ || (typeid) == DB_TYPE_DATETIMETZ) 434 #if !defined (SERVER_MODE) 443 int precision,
bool is_desc);
448 #if defined(ENABLE_UNUSED_FUNCTION) 462 bool implicit_coercion);
465 const TP_DOMAIN * desired_domain,
bool implicit_coercion);
468 const TP_DOMAIN * desired_domain,
bool implicit_coercion,
469 bool preserve_domain);
472 const TP_DOMAIN * desired_domain,
bool implicit_coercion);
483 int allow_coercion,
int total_order,
bool * can_compare);
500 #if defined(CUBRID_DEBUG) 501 extern void tp_dump_domain (
TP_DOMAIN * domain);
502 extern void tp_domain_print (
TP_DOMAIN * domain);
503 extern void tp_domain_fprint (FILE * fp,
TP_DOMAIN * domain);
void tp_domain_init(TP_DOMAIN *domain, DB_TYPE type_id)
TP_DOMAIN * tp_domain_find_charbit(DB_TYPE type, int codeset, int collation_id, unsigned char collation_flag, int precision, bool is_desc)
TP_DOMAIN tp_Float_domain
void tp_init_value_domain(TP_DOMAIN *domain, DB_VALUE *value)
TP_DOMAIN * tp_domain_resolve(DB_TYPE domain_type, DB_OBJECT *class_obj, int precision, int scale, TP_DOMAIN *setdomain, int collation)
int tp_more_general_type(const DB_TYPE type1, const DB_TYPE type2)
TP_DOMAIN_STATUS tp_value_change_coll_and_codeset(DB_VALUE *src, DB_VALUE *dest, int coll_id, int codeset)
int tp_setdomain_size(const TP_DOMAIN *domain)
TP_DOMAIN_STATUS tp_value_cast(const DB_VALUE *src, DB_VALUE *dest, const TP_DOMAIN *desired_domain, bool implicit_coercion)
struct tp_domain * next_list
TP_DOMAIN * tp_domain_cache(TP_DOMAIN *domain)
int tp_value_domain_name(const DB_VALUE *value, char *buffer, int maxlen)
struct tp_domain TP_DOMAIN
struct tp_domain * setdomain
int tp_domain_filter_list(TP_DOMAIN *dlist, int *list_changes)
TP_DOMAIN_STATUS tp_value_cast_no_domain_select(const DB_VALUE *src, DB_VALUE *dest, const TP_DOMAIN *desired_domain, bool implicit_coercion)
TP_DOMAIN tp_Enumeration_domain
TP_DOMAIN tp_Midxkey_domain
int tp_enumeration_to_varchar(const DB_VALUE *src, DB_VALUE *result)
TP_DOMAIN_STATUS tp_check_value_size(TP_DOMAIN *domain, DB_VALUE *value)
TP_DOMAIN tp_Numeric_domain
struct tp_alloc_context TP_ALLOC_CONTEXT
int tp_value_string_to_double(const DB_VALUE *value, DB_VALUE *result)
int tp_domain_copy_enumeration(DB_ENUMERATION *dest, const DB_ENUMERATION *src)
int tp_value_coerce_strict(const DB_VALUE *src, DB_VALUE *dest, const TP_DOMAIN *desired_domain)
TP_DOMAIN_STATUS tp_domain_check(const TP_DOMAIN *domain, const DB_VALUE *value, TP_MATCH exact_match)
int tp_domain_drop(TP_DOMAIN **dlist, TP_DOMAIN *domain)
enum tp_domain_status TP_DOMAIN_STATUS
TP_DOMAIN * tp_domain_resolve_default_w_coll(DB_TYPE type, int coll_id, TP_DOMAIN_COLL_ACTION coll_flag)
int tp_get_fixed_precision(DB_TYPE domain_type)
int tp_domain_size(const TP_DOMAIN *domain)
TP_DOMAIN * tp_domain_find_set(DB_TYPE type, TP_DOMAIN *setdomain, bool is_desc)
int tp_domain_match(const TP_DOMAIN *dom1, const TP_DOMAIN *dom2, TP_MATCH exact)
TP_DOMAIN tp_Monetary_domain
void tp_domain_free(TP_DOMAIN *dom)
TP_DOMAIN tp_Object_domain
TP_DOMAIN * tp_domain_resolve_value(const DB_VALUE *val, TP_DOMAIN *dbuf)
DB_VALUE_COMPARE_RESULT tp_set_compare(const DB_VALUE *value1, const DB_VALUE *value2, int allow_coercion, int total_order)
unsigned is_parameterized
int tp_domain_memory_size(TP_DOMAIN *domain)
TP_DOMAIN * tp_infer_common_domain(TP_DOMAIN *arg1, TP_DOMAIN *arg2)
int tp_domain_name(const TP_DOMAIN *domain, char *buffer, int maxlen)
int tp_value_str_auto_cast_to_number(DB_VALUE *src, DB_VALUE *dest, DB_TYPE *val_type)
TP_DOMAIN tp_Utime_domain
TP_DOMAIN * tp_domain_construct(DB_TYPE domain_type, DB_OBJECT *class_obj, int precision, int scale, TP_DOMAIN *setdomain)
int tp_domain_attach(TP_DOMAIN **dlist, TP_DOMAIN *domain)
TP_DOMAIN tp_Pointer_domain
int tp_domain_status_er_set(TP_DOMAIN_STATUS status, const char *file_name, const int line_no, const DB_VALUE *src, const TP_DOMAIN *domain)
TP_DOMAIN tp_Integer_domain
TP_DOMAIN tp_VarNChar_domain
TP_DOMAIN_STATUS tp_value_cast_force(const DB_VALUE *src, DB_VALUE *dest, const TP_DOMAIN *desired_domain, bool implicit_coercion)
int tp_value_equal(const DB_VALUE *value1, const DB_VALUE *value2, int allow_coercion)
TP_DOMAIN tp_Multiset_domain
TP_DOMAIN * tp_domain_find_numeric(DB_TYPE type, int precision, int scale, bool is_desc)
TP_DOMAIN * tp_domain_find_object(DB_TYPE type, OID *class_oid, struct db_object *class_, bool is_desc)
void tp_apply_sys_charset(void)
TP_DOMAIN * tp_domain_copy(const TP_DOMAIN *dom, bool check_cache)
TP_DOMAIN tp_Error_domain
DB_VALUE_COMPARE_RESULT tp_value_compare(const DB_VALUE *value1, const DB_VALUE *value2, int allow_coercion, int total_order)
int tp_domain_add(TP_DOMAIN **dlist, TP_DOMAIN *domain)
DB_ENUMERATION enumeration
TP_DOMAIN_COLL_ACTION collation_flag
TP_DOMAIN tp_Short_domain
TP_DOMAIN * tp_domain_select(const TP_DOMAIN *domain_list, const DB_VALUE *value, int allow_coercion, TP_MATCH exact_match)
int tp_valid_indextype(DB_TYPE type)
TP_DOMAIN * tp_domain_new(DB_TYPE type)
int tp_can_steal_string(const DB_VALUE *val, const DB_DOMAIN *desired_domain)
int tp_domain_compatible(const TP_DOMAIN *dom1, const TP_DOMAIN *dom2)
TP_DOMAIN * tp_domain_select_type(const TP_DOMAIN *domain_list, DB_TYPE type, DB_OBJECT *class_mop, int allow_coercion)
TP_DOMAIN_STATUS tp_value_cast_preserve_domain(const DB_VALUE *src, DB_VALUE *dest, const TP_DOMAIN *desired_domain, bool implicit_coercion, bool preserve_domain)
TP_DOMAIN * tp_domain_find_enumeration(const DB_ENUMERATION *enumeration, bool is_desc)
JSON_VALIDATOR * json_validator
int tp_domain_disk_size(TP_DOMAIN *domain)
TP_DOMAIN tp_Sequence_domain
TP_DOMAIN tp_NChar_domain
void tp_domain_clear_enumeration(DB_ENUMERATION *enumeration)
struct db_object * class_mop
TP_DOMAIN tp_Substructure_domain
TP_DOMAIN tp_VarBit_domain
int tp_domain_match_ignore_order(const TP_DOMAIN *dom1, const TP_DOMAIN *dom2, TP_MATCH exact)
TP_DOMAIN tp_Variable_domain
TP_DOMAIN tp_Double_domain
TP_DOMAIN_STATUS tp_value_auto_cast(const DB_VALUE *src, DB_VALUE *dest, const TP_DOMAIN *desired_domain)
TP_DOMAIN tp_String_domain
TP_DOMAIN * tp_domain_find_noparam(DB_TYPE type, bool is_desc)
bool tp_domain_references_objects(const TP_DOMAIN *dom)
TP_DOMAIN_STATUS tp_value_coerce(const DB_VALUE *src, DB_VALUE *dest, const TP_DOMAIN *desired_domain)
TP_DOMAIN * tp_domain_resolve_default(DB_TYPE type)
DB_VALUE_COMPARE_RESULT tp_value_compare_with_error(const DB_VALUE *value1, const DB_VALUE *value2, int allow_coercion, int total_order, bool *can_compare)