2 * Copyright 2008 Search Solution Corporation
3 * Copyright 2016 CUBRID Corporation
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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
20 * dbtype_function.i - API/inlined functions related to db_make and db_get
24 #include "dbtype_def.h"
26 #if !defined (_NO_INLINE_DBTYPE_FUNCTION_)
27 #include "porting_inline.hpp"
29 STATIC_INLINE int db_get_int (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
30 STATIC_INLINE DB_C_SHORT db_get_short (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
31 STATIC_INLINE DB_BIGINT db_get_bigint (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
32 STATIC_INLINE DB_CONST_C_CHAR db_get_string (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
33 STATIC_INLINE DB_C_FLOAT db_get_float (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
34 STATIC_INLINE DB_C_DOUBLE db_get_double (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
35 STATIC_INLINE DB_OBJECT *db_get_object (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
36 STATIC_INLINE DB_COLLECTION *db_get_set (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
37 STATIC_INLINE DB_MIDXKEY *db_get_midxkey (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
38 STATIC_INLINE DB_C_POINTER db_get_pointer (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
39 STATIC_INLINE DB_TIME *db_get_time (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
40 STATIC_INLINE DB_TIMESTAMP *db_get_timestamp (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
41 STATIC_INLINE DB_TIMESTAMPTZ *db_get_timestamptz (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
42 STATIC_INLINE DB_DATETIME *db_get_datetime (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
43 STATIC_INLINE DB_DATETIMETZ *db_get_datetimetz (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
44 STATIC_INLINE DB_DATE *db_get_date (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
45 STATIC_INLINE DB_MONETARY *db_get_monetary (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
46 STATIC_INLINE int db_get_error (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
47 STATIC_INLINE DB_ELO *db_get_elo (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
48 STATIC_INLINE DB_C_NUMERIC db_get_numeric (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
49 STATIC_INLINE DB_CONST_C_BIT db_get_bit (const DB_VALUE * value, int *length) __attribute__ ((ALWAYS_INLINE));
50 STATIC_INLINE DB_CONST_C_CHAR db_get_char (const DB_VALUE * value, int *length) __attribute__ ((ALWAYS_INLINE));
51 STATIC_INLINE DB_CONST_C_NCHAR db_get_nchar (const DB_VALUE * value, int *length) __attribute__ ((ALWAYS_INLINE));
52 STATIC_INLINE int db_get_string_size (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
53 STATIC_INLINE unsigned short db_get_enum_short (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
54 STATIC_INLINE DB_CONST_C_CHAR db_get_enum_string (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
55 STATIC_INLINE int db_get_enum_string_size (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
56 STATIC_INLINE DB_C_CHAR db_get_method_error_msg (void) __attribute__ ((ALWAYS_INLINE));
57 STATIC_INLINE DB_RESULTSET db_get_resultset (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
58 STATIC_INLINE INTL_CODESET db_get_string_codeset (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
59 STATIC_INLINE int db_get_string_collation (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
60 STATIC_INLINE int db_get_enum_codeset (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
61 STATIC_INLINE int db_get_enum_collation (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
62 STATIC_INLINE OID *db_get_oid (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
63 STATIC_INLINE DB_TYPE db_value_type (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
64 STATIC_INLINE int db_value_precision (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
65 STATIC_INLINE int db_value_scale (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
66 STATIC_INLINE JSON_DOC *db_get_json_document (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
68 STATIC_INLINE int db_make_db_char (DB_VALUE * value, INTL_CODESET codeset, const int collation_id, DB_CONST_C_CHAR str,
69 const int size) __attribute__ ((ALWAYS_INLINE));
71 STATIC_INLINE int db_make_null (DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
72 STATIC_INLINE int db_make_int (DB_VALUE * value, const int num) __attribute__ ((ALWAYS_INLINE));
73 STATIC_INLINE int db_make_float (DB_VALUE * value, const DB_C_FLOAT num) __attribute__ ((ALWAYS_INLINE));
74 STATIC_INLINE int db_make_double (DB_VALUE * value, const DB_C_DOUBLE num) __attribute__ ((ALWAYS_INLINE));
75 STATIC_INLINE int db_make_object (DB_VALUE * value, DB_C_OBJECT * obj) __attribute__ ((ALWAYS_INLINE));
76 STATIC_INLINE int db_make_midxkey (DB_VALUE * value, DB_MIDXKEY * midxkey) __attribute__ ((ALWAYS_INLINE));
77 STATIC_INLINE int db_make_timestamp (DB_VALUE * value, const DB_C_TIMESTAMP timeval) __attribute__ ((ALWAYS_INLINE));
78 STATIC_INLINE int db_make_timestampltz (DB_VALUE * value, const DB_C_TIMESTAMP ts_val) __attribute__ ((ALWAYS_INLINE));
79 STATIC_INLINE int db_make_timestamptz (DB_VALUE * value, const DB_C_TIMESTAMPTZ * ts_tz_val)
80 __attribute__ ((ALWAYS_INLINE));
81 STATIC_INLINE int db_make_datetime (DB_VALUE * value, const DB_DATETIME * datetime) __attribute__ ((ALWAYS_INLINE));
82 STATIC_INLINE int db_make_datetimeltz (DB_VALUE * value, const DB_DATETIME * datetime) __attribute__ ((ALWAYS_INLINE));
83 STATIC_INLINE int db_make_datetimetz (DB_VALUE * value, const DB_DATETIMETZ * datetimetz)
84 __attribute__ ((ALWAYS_INLINE));
85 STATIC_INLINE int db_make_monetary (DB_VALUE * value, const DB_CURRENCY type, const double amount)
86 __attribute__ ((ALWAYS_INLINE));
87 STATIC_INLINE int db_make_pointer (DB_VALUE * value, DB_C_POINTER ptr) __attribute__ ((ALWAYS_INLINE));
88 STATIC_INLINE int db_make_error (DB_VALUE * value, const int errcode) __attribute__ ((ALWAYS_INLINE));
89 STATIC_INLINE int db_make_method_error (DB_VALUE * value, const int errcode, const char *errmsg)
90 __attribute__ ((ALWAYS_INLINE));
91 STATIC_INLINE int db_make_short (DB_VALUE * value, const DB_C_SHORT num) __attribute__ ((ALWAYS_INLINE));
92 STATIC_INLINE int db_make_bigint (DB_VALUE * value, const DB_BIGINT num) __attribute__ ((ALWAYS_INLINE));
93 STATIC_INLINE int db_make_numeric (DB_VALUE * value, const DB_C_NUMERIC num, const int precision, const int scale)
94 __attribute__ ((ALWAYS_INLINE));
95 STATIC_INLINE int db_make_bit (DB_VALUE * value, const int bit_length, DB_CONST_C_BIT bit_str,
96 const int bit_str_bit_size) __attribute__ ((ALWAYS_INLINE));
97 STATIC_INLINE int db_make_varbit (DB_VALUE * value, const int max_bit_length, DB_CONST_C_BIT bit_str,
98 const int bit_str_bit_size) __attribute__ ((ALWAYS_INLINE));
99 STATIC_INLINE int db_make_char (DB_VALUE * value, const int char_length, DB_CONST_C_CHAR str,
100 const int char_str_byte_size, const int codeset, const int collation_id)
101 __attribute__ ((ALWAYS_INLINE));
102 STATIC_INLINE int db_make_varchar (DB_VALUE * value, const int max_char_length, DB_CONST_C_CHAR str,
103 const int char_str_byte_size, const int codeset, const int collation_id)
104 __attribute__ ((ALWAYS_INLINE));
105 STATIC_INLINE int db_make_nchar (DB_VALUE * value, const int nchar_length, DB_CONST_C_NCHAR str,
106 const int nchar_str_byte_size, const int codeset, const int collation_id)
107 __attribute__ ((ALWAYS_INLINE));
108 STATIC_INLINE int db_make_varnchar (DB_VALUE * value, const int max_nchar_length, DB_CONST_C_NCHAR str,
109 const int nchar_str_byte_size, const int codeset, const int collation_id)
110 __attribute__ ((ALWAYS_INLINE));
111 STATIC_INLINE int db_make_enumeration (DB_VALUE * value, unsigned short index, DB_CONST_C_CHAR str, int size,
112 unsigned char codeset, const int collation_id) __attribute__ ((ALWAYS_INLINE));
113 STATIC_INLINE int db_make_resultset (DB_VALUE * value, const DB_RESULTSET handle) __attribute__ ((ALWAYS_INLINE));
115 STATIC_INLINE int db_make_string (DB_VALUE * value, DB_CONST_C_CHAR str) __attribute__ ((ALWAYS_INLINE));
116 STATIC_INLINE int db_make_string_copy (DB_VALUE * value, DB_CONST_C_CHAR str) __attribute__ ((ALWAYS_INLINE));
118 STATIC_INLINE int db_make_oid (DB_VALUE * value, const OID * oid) __attribute__ ((ALWAYS_INLINE));
120 STATIC_INLINE int db_make_set (DB_VALUE * value, DB_C_SET * set) __attribute__ ((ALWAYS_INLINE));
121 STATIC_INLINE int db_make_multiset (DB_VALUE * value, DB_C_SET * set) __attribute__ ((ALWAYS_INLINE));
122 STATIC_INLINE int db_make_sequence (DB_VALUE * value, DB_C_SET * set) __attribute__ ((ALWAYS_INLINE));
123 STATIC_INLINE int db_make_collection (DB_VALUE * value, DB_C_SET * set) __attribute__ ((ALWAYS_INLINE));
125 STATIC_INLINE int db_make_elo (DB_VALUE * value, DB_TYPE type, const DB_ELO * elo) __attribute__ ((ALWAYS_INLINE));
127 STATIC_INLINE int db_make_time (DB_VALUE * value, const int hour, const int minute, const int second)
128 __attribute__ ((ALWAYS_INLINE));
129 STATIC_INLINE int db_make_date (DB_VALUE * value, const int month, const int day, const int year)
130 __attribute__ ((ALWAYS_INLINE));
132 STATIC_INLINE int db_make_json (DB_VALUE * value, JSON_DOC * json_document, bool need_clear)
133 __attribute__ ((ALWAYS_INLINE));
135 STATIC_INLINE int db_get_compressed_size (DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
136 STATIC_INLINE void db_set_compressed_string (DB_VALUE * value, char *compressed_string,
137 int compressed_size, bool compressed_need_clear)
138 __attribute__ ((ALWAYS_INLINE));
140 STATIC_INLINE bool db_value_is_null (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
141 STATIC_INLINE DB_TYPE db_value_domain_type (const DB_VALUE * value) __attribute__ ((ALWAYS_INLINE));
142 #endif // !NO_INLINE_DBTYPE_FUNCTION
152 db_get_int (const DB_VALUE * value)
154 #if defined (API_ACTIVE_CHECKS)
155 CHECK_1ARG_ZERO (value);
158 assert (value->domain.general_info.type == DB_TYPE_INTEGER);
160 return value->data.i;
169 db_get_short (const DB_VALUE * value)
171 #if defined (API_ACTIVE_CHECKS)
172 CHECK_1ARG_ZERO (value);
175 assert (value->domain.general_info.type == DB_TYPE_SHORT);
177 return value->data.sh;
186 db_get_bigint (const DB_VALUE * value)
188 #if defined (API_ACTIVE_CHECKS)
189 CHECK_1ARG_ZERO (value);
192 assert (value->domain.general_info.type == DB_TYPE_BIGINT);
194 return value->data.bigint;
203 db_get_string (const DB_VALUE * value)
205 const char *str = NULL;
207 #if defined (API_ACTIVE_CHECKS)
208 CHECK_1ARG_NULL (value);
211 if (value->domain.general_info.is_null || value->domain.general_info.type == DB_TYPE_ERROR)
216 switch (value->data.ch.info.style)
219 str = value->data.ch.sm.buf;
222 str = value->data.ch.medium.buf;
225 /* Currently not implemented */
239 db_get_float (const DB_VALUE * value)
241 #if defined (API_ACTIVE_CHECKS)
242 CHECK_1ARG_ZERO (value);
245 assert (value->domain.general_info.type == DB_TYPE_FLOAT);
247 return value->data.f;
256 db_get_double (const DB_VALUE * value)
258 #if defined (API_ACTIVE_CHECKS)
259 CHECK_1ARG_ZERO (value);
262 assert (value->domain.general_info.type == DB_TYPE_DOUBLE);
264 return value->data.d;
273 db_get_object (const DB_VALUE * value)
275 #if defined (API_ACTIVE_CHECKS)
276 CHECK_1ARG_NULL (value);
279 if (value->domain.general_info.is_null || value->domain.general_info.type == DB_TYPE_ERROR)
285 return value->data.op;
295 db_get_set (const DB_VALUE * value)
297 #if defined (API_ACTIVE_CHECKS)
298 CHECK_1ARG_NULL (value);
301 if (value->domain.general_info.is_null || value->domain.general_info.type == DB_TYPE_ERROR)
307 return value->data.set;
317 db_get_midxkey (const DB_VALUE * value)
319 #if defined (API_ACTIVE_CHECKS)
320 CHECK_1ARG_NULL (value);
323 if (value->domain.general_info.is_null || value->domain.general_info.type == DB_TYPE_ERROR)
329 return (DB_MIDXKEY *) (&(value->data.midxkey));
339 db_get_pointer (const DB_VALUE * value)
341 #if defined (API_ACTIVE_CHECKS)
342 CHECK_1ARG_NULL (value);
345 if (value->domain.general_info.is_null || value->domain.general_info.type == DB_TYPE_ERROR)
351 return value->data.p;
361 db_get_time (const DB_VALUE * value)
363 #if defined (API_ACTIVE_CHECKS)
364 CHECK_1ARG_NULL (value);
367 assert (value->domain.general_info.type == DB_TYPE_TIME);
369 // todo: Assess how to better handle const types, here we should return explicit values, not pointers. Same for below.
370 return (DB_TIME *) (&value->data.time);
374 * db_get_timestamp() -
379 db_get_timestamp (const DB_VALUE * value)
381 #if defined (API_ACTIVE_CHECKS)
382 CHECK_1ARG_NULL (value);
385 assert (value->domain.general_info.type == DB_TYPE_TIMESTAMP
386 || value->domain.general_info.type == DB_TYPE_TIMESTAMPLTZ);
388 return ((DB_TIMESTAMP *) (&value->data.utime));
392 * db_get_timestamptz() -
397 db_get_timestamptz (const DB_VALUE * value)
399 #if defined (API_ACTIVE_CHECKS)
400 CHECK_1ARG_NULL (value);
403 assert (value->domain.general_info.type == DB_TYPE_TIMESTAMPTZ);
405 return ((DB_TIMESTAMPTZ *) (&value->data.timestamptz));
409 * db_get_datetime() -
414 db_get_datetime (const DB_VALUE * value)
416 #if defined (API_ACTIVE_CHECKS)
417 CHECK_1ARG_NULL (value);
420 assert (value->domain.general_info.type == DB_TYPE_DATETIME
421 || value->domain.general_info.type == DB_TYPE_DATETIMELTZ);
423 return ((DB_DATETIME *) (&value->data.datetime));
427 * db_get_datetimetz() -
432 db_get_datetimetz (const DB_VALUE * value)
434 #if defined (API_ACTIVE_CHECKS)
435 CHECK_1ARG_NULL (value);
438 assert (value->domain.general_info.type == DB_TYPE_DATETIMETZ);
440 return ((DB_DATETIMETZ *) (&value->data.datetimetz));
449 db_get_date (const DB_VALUE * value)
451 #if defined (API_ACTIVE_CHECKS)
452 CHECK_1ARG_NULL (value);
455 assert (value->domain.general_info.type == DB_TYPE_DATE);
457 return ((DB_DATE *) (&value->data.date));
461 * db_get_monetary() -
466 db_get_monetary (const DB_VALUE * value)
468 #if defined (API_ACTIVE_CHECKS)
469 CHECK_1ARG_NULL (value);
472 assert (value->domain.general_info.type == DB_TYPE_MONETARY);
474 return ((DB_MONETARY *) (&value->data.money));
483 db_get_error (const DB_VALUE * value)
485 #if defined (API_ACTIVE_CHECKS)
486 CHECK_1ARG_ZERO (value);
489 assert (value->domain.general_info.type == DB_TYPE_ERROR);
491 return value->data.error;
500 db_get_elo (const DB_VALUE * value)
502 #if defined (API_ACTIVE_CHECKS)
503 CHECK_1ARG_NULL (value);
506 if (value->domain.general_info.is_null || DB_VALUE_DOMAIN_TYPE (value) == DB_TYPE_ERROR)
510 else if (value->data.elo.type == ELO_NULL)
516 return ((DB_ELO *) (&value->data.elo));
526 db_get_numeric (const DB_VALUE * value)
528 #if defined (API_ACTIVE_CHECKS)
529 CHECK_1ARG_ZERO (value);
532 if (value->domain.general_info.is_null || value->domain.general_info.type == DB_TYPE_ERROR)
538 return (DB_C_NUMERIC) (value->data.num.d.buf);
549 db_get_bit (const DB_VALUE * value, int *length)
551 const char *str = NULL;
553 #if defined (API_ACTIVE_CHECKS)
554 CHECK_1ARG_NULL (value);
555 CHECK_1ARG_NULL (length);
558 if (value->domain.general_info.is_null)
563 switch (value->data.ch.info.style)
567 *length = value->data.ch.sm.size;
568 str = value->data.ch.sm.buf;
573 *length = value->data.ch.medium.size;
574 str = value->data.ch.medium.buf;
579 /* Currently not implemented */
596 db_get_char (const DB_VALUE * value, int *length)
598 const char *str = NULL;
600 #if defined (API_ACTIVE_CHECKS)
601 CHECK_1ARG_NULL (value);
602 CHECK_1ARG_NULL (length);
605 if (value->domain.general_info.is_null || value->domain.general_info.type == DB_TYPE_ERROR)
610 switch (value->data.ch.info.style)
614 str = value->data.ch.sm.buf;
615 intl_char_count ((unsigned char *) str, value->data.ch.sm.size,
616 (INTL_CODESET) value->data.ch.info.codeset, length);
621 str = value->data.ch.medium.buf;
622 intl_char_count ((unsigned char *) str, value->data.ch.medium.size,
623 (INTL_CODESET) value->data.ch.info.codeset, length);
628 /* Currently not implemented */
645 db_get_nchar (const DB_VALUE * value, int *length)
647 return db_get_char (value, length);
651 * db_get_string_size() -
656 db_get_string_size (const DB_VALUE * value)
660 #if defined (API_ACTIVE_CHECKS)
661 CHECK_1ARG_ZERO (value);
664 switch (value->data.ch.info.style)
667 size = value->data.ch.sm.size;
670 size = value->data.ch.medium.size;
673 /* Currently not implemented */
678 /* Convert the number of bits to the number of bytes */
679 if (value->domain.general_info.type == DB_TYPE_BIT || value->domain.general_info.type == DB_TYPE_VARBIT)
681 size = (size + 7) / 8;
688 * db_get_enum_short () -
693 db_get_enum_short (const DB_VALUE * value)
695 #if defined (API_ACTIVE_CHECKS)
696 CHECK_1ARG_ZERO (value);
699 assert (value->domain.general_info.type == DB_TYPE_ENUMERATION);
701 return value->data.enumeration.short_val;
705 * db_get_enum_string () -
710 db_get_enum_string (const DB_VALUE * value)
712 #if defined (API_ACTIVE_CHECKS)
713 CHECK_1ARG_ZERO (value);
716 if (value->domain.general_info.is_null || value->domain.general_info.type == DB_TYPE_ERROR)
720 return value->data.enumeration.str_val.medium.buf;
724 * db_get_enum_string_size () -
729 db_get_enum_string_size (const DB_VALUE * value)
731 #if defined (API_ACTIVE_CHECKS)
732 CHECK_1ARG_ZERO (value);
735 assert (value->domain.general_info.type == DB_TYPE_ENUMERATION);
737 return value->data.enumeration.str_val.medium.size;
741 * db_get_method_error_msg() -
745 db_get_method_error_msg (void)
747 #if !defined(SERVER_MODE)
748 return obj_Method_error_msg;
755 * db_get_resultset() -
760 db_get_resultset (const DB_VALUE * value)
762 #if defined (API_ACTIVE_CHECKS)
763 CHECK_1ARG_ZERO (value);
766 assert (value->domain.general_info.type == DB_TYPE_RESULTSET);
768 return value->data.rset;
772 * db_get_string_codeset() -
777 db_get_string_codeset (const DB_VALUE * value)
779 #if defined (API_ACTIVE_CHECKS)
780 CHECK_1ARG_ZERO_WITH_TYPE (value, INTL_CODESET);
783 return (INTL_CODESET) value->data.ch.info.codeset;
787 * db_get_string_collation() -
792 db_get_string_collation (const DB_VALUE * value)
794 #if defined (API_ACTIVE_CHECKS)
795 CHECK_1ARG_ZERO_WITH_TYPE (value, int);
798 return value->domain.char_info.collation_id;
802 * db_get_enum_codeset() -
807 db_get_enum_codeset (const DB_VALUE * value)
809 #if defined (API_ACTIVE_CHECKS)
810 CHECK_1ARG_ZERO_WITH_TYPE (value, INTL_CODESET);
813 return value->data.enumeration.str_val.info.codeset;
817 * db_get_enum_collation() -
822 db_get_enum_collation (const DB_VALUE * value)
824 #if defined (API_ACTIVE_CHECKS)
825 CHECK_1ARG_ZERO_WITH_TYPE (value, int);
828 return value->domain.char_info.collation_id;
837 db_get_oid (const DB_VALUE * value)
839 #if defined (API_ACTIVE_CHECKS)
840 CHECK_1ARG_NULL (value);
843 assert (value->domain.general_info.type == DB_TYPE_OID);
845 return ((OID *) (&value->data.oid));
850 * return : DB_TYPE of value's domain or DB_TYPE_NULL
851 * value(in) : Pointer to a DB_VALUE
854 db_value_type (const DB_VALUE * value)
856 #if defined (API_ACTIVE_CHECKS)
857 CHECK_1ARG_UNKNOWN (value);
861 // todo: Should this ever happen?
867 if (value->domain.general_info.is_null)
873 return DB_VALUE_DOMAIN_TYPE (value);
878 * db_value_precision() - get the precision of value.
879 * return : precision of given value.
880 * value(in) : Pointer to a DB_VALUE.
883 db_value_precision (const DB_VALUE * value)
885 #if defined (API_ACTIVE_CHECKS)
886 CHECK_1ARG_ZERO (value);
890 // todo : Should this ever happen?
896 switch (value->domain.general_info.type)
898 case DB_TYPE_NUMERIC:
900 case DB_TYPE_INTEGER:
905 case DB_TYPE_TIMESTAMP:
906 case DB_TYPE_TIMESTAMPTZ:
907 case DB_TYPE_TIMESTAMPLTZ:
909 case DB_TYPE_DATETIME:
910 case DB_TYPE_DATETIMETZ:
911 case DB_TYPE_DATETIMELTZ:
912 case DB_TYPE_MONETARY:
913 return value->domain.numeric_info.precision;
917 case DB_TYPE_VARCHAR:
919 case DB_TYPE_VARNCHAR:
920 return value->domain.char_info.length;
923 case DB_TYPE_MULTISET:
924 case DB_TYPE_SEQUENCE:
927 case DB_TYPE_VARIABLE:
929 case DB_TYPE_POINTER:
939 * db_value_scale() - get the scale of value.
940 * return : scale of given value.
941 * value(in) : Pointer to a DB_VALUE.
944 db_value_scale (const DB_VALUE * value)
946 #if defined (API_ACTIVE_CHECKS)
947 CHECK_1ARG_ZERO (value);
951 // todo: Should this ever happen?
957 if (value->domain.general_info.type == DB_TYPE_NUMERIC
958 || value->domain.general_info.type == DB_TYPE_DATETIME
959 || value->domain.general_info.type == DB_TYPE_DATETIMETZ
960 || value->domain.general_info.type == DB_TYPE_DATETIMELTZ)
962 return value->domain.numeric_info.scale;
971 db_get_json_document (const DB_VALUE * value)
973 #if defined (API_ACTIVE_CHECKS)
974 CHECK_1ARG_ZERO (value);
977 assert (value->domain.general_info.type == DB_TYPE_JSON);
979 return value->data.json.document;
982 /***********************************************************/
983 /* db_make family of functions. */
986 * db_make_db_char() -
995 db_make_db_char (DB_VALUE * value, const INTL_CODESET codeset, const int collation_id, DB_CONST_C_CHAR str,
998 #if defined (API_ACTIVE_CHECKS)
999 CHECK_1ARG_ERROR (value);
1002 value->data.ch.info.style = MEDIUM_STRING;
1003 value->data.ch.info.is_max_string = false;
1004 value->data.ch.info.compressed_need_clear = false;
1005 value->data.ch.medium.codeset = codeset;
1006 value->data.ch.medium.size = size;
1007 value->data.ch.medium.buf = str;
1008 value->data.ch.medium.compressed_buf = NULL;
1009 value->data.ch.medium.compressed_size = 0;
1010 value->domain.general_info.is_null = ((void *) str != NULL) ? 0 : 1;
1011 value->domain.general_info.is_null = ((size == 0 && prm_get_bool_value (PRM_ID_ORACLE_STYLE_EMPTY_STRING))
1012 ? 1 : DB_IS_NULL (value));
1013 value->domain.char_info.collation_id = collation_id;
1014 value->need_clear = false;
1025 db_make_null (DB_VALUE * value)
1027 #if defined (API_ACTIVE_CHECKS)
1028 CHECK_1ARG_ERROR (value);
1031 value->domain.general_info.type = DB_TYPE_NULL;
1032 value->domain.general_info.is_null = 1;
1033 value->need_clear = false;
1045 db_make_int (DB_VALUE * value, const int num)
1047 #if defined (API_ACTIVE_CHECKS)
1048 CHECK_1ARG_ERROR (value);
1051 value->domain.general_info.type = DB_TYPE_INTEGER;
1052 value->data.i = num;
1053 value->domain.general_info.is_null = 0;
1054 value->need_clear = false;
1066 db_make_float (DB_VALUE * value, const float num)
1068 #if defined (API_ACTIVE_CHECKS)
1069 CHECK_1ARG_ERROR (value);
1072 value->domain.general_info.type = DB_TYPE_FLOAT;
1073 value->data.f = num;
1074 value->domain.general_info.is_null = 0;
1075 value->need_clear = false;
1081 * db_make_double() -
1087 db_make_double (DB_VALUE * value, const double num)
1089 #if defined (API_ACTIVE_CHECKS)
1090 CHECK_1ARG_ERROR (value);
1093 value->domain.general_info.type = DB_TYPE_DOUBLE;
1094 value->data.d = num;
1095 value->domain.general_info.is_null = 0;
1096 value->need_clear = false;
1102 * db_make_object() -
1108 db_make_object (DB_VALUE * value, DB_OBJECT * obj)
1110 #if defined (API_ACTIVE_CHECKS)
1111 CHECK_1ARG_ERROR (value);
1114 value->domain.general_info.type = DB_TYPE_OBJECT;
1115 value->data.op = obj;
1118 value->domain.general_info.is_null = 0;
1122 value->domain.general_info.is_null = 1;
1125 value->need_clear = false;
1131 * db_make_midxkey() -
1137 db_make_midxkey (DB_VALUE * value, DB_MIDXKEY * midxkey)
1139 int error = NO_ERROR;
1141 #if defined (API_ACTIVE_CHECKS)
1142 CHECK_1ARG_ERROR (value);
1145 value->domain.general_info.type = DB_TYPE_MIDXKEY;
1147 if (midxkey == NULL)
1149 value->domain.general_info.is_null = 1;
1150 value->data.midxkey.ncolumns = -1;
1151 value->data.midxkey.domain = NULL;
1152 value->data.midxkey.size = 0;
1153 value->data.midxkey.buf = NULL;
1154 value->data.midxkey.min_max_val.position = -1;
1155 value->data.midxkey.min_max_val.type = MIN_COLUMN;
1159 value->domain.general_info.is_null = 0;
1160 value->data.midxkey = *midxkey;
1163 value->need_clear = false;
1169 * db_make_timestamp() -
1175 db_make_timestamp (DB_VALUE * value, const DB_TIMESTAMP timeval)
1177 #if defined (API_ACTIVE_CHECKS)
1178 CHECK_1ARG_ERROR (value);
1181 value->domain.general_info.type = DB_TYPE_TIMESTAMP;
1182 value->data.utime = timeval;
1183 value->domain.general_info.is_null = 0;
1184 value->need_clear = false;
1190 * db_make_timestampltz() -
1196 db_make_timestampltz (DB_VALUE * value, const DB_TIMESTAMP ts_val)
1198 #if defined (API_ACTIVE_CHECKS)
1199 CHECK_1ARG_ERROR (value);
1202 value->domain.general_info.type = DB_TYPE_TIMESTAMPLTZ;
1203 value->data.utime = ts_val;
1204 value->domain.general_info.is_null = 0;
1205 value->need_clear = false;
1211 * db_make_timestamptz() -
1217 db_make_timestamptz (DB_VALUE * value, const DB_TIMESTAMPTZ * ts_tz_val)
1219 #if defined (API_ACTIVE_CHECKS)
1220 CHECK_1ARG_ERROR (value);
1223 value->domain.general_info.type = DB_TYPE_TIMESTAMPTZ;
1226 value->data.timestamptz = *ts_tz_val;
1227 value->domain.general_info.is_null = 0;
1231 value->domain.general_info.is_null = 1;
1233 value->need_clear = false;
1239 * db_make_datetime() -
1245 db_make_datetime (DB_VALUE * value, const DB_DATETIME * datetime)
1247 #if defined (API_ACTIVE_CHECKS)
1248 CHECK_1ARG_ERROR (value);
1251 value->domain.general_info.type = DB_TYPE_DATETIME;
1254 value->data.datetime = *datetime;
1255 value->domain.general_info.is_null = 0;
1259 value->domain.general_info.is_null = 1;
1261 value->need_clear = false;
1267 * db_make_datetimeltz() -
1273 db_make_datetimeltz (DB_VALUE * value, const DB_DATETIME * datetime)
1275 #if defined (API_ACTIVE_CHECKS)
1276 CHECK_1ARG_ERROR (value);
1279 value->domain.general_info.type = DB_TYPE_DATETIMELTZ;
1282 value->data.datetime = *datetime;
1283 value->domain.general_info.is_null = 0;
1287 value->domain.general_info.is_null = 1;
1289 value->need_clear = false;
1295 * db_make_datetimetz() -
1301 db_make_datetimetz (DB_VALUE * value, const DB_DATETIMETZ * datetimetz)
1303 #if defined (API_ACTIVE_CHECKS)
1304 CHECK_1ARG_ERROR (value);
1307 value->domain.general_info.type = DB_TYPE_DATETIMETZ;
1310 value->data.datetimetz = *datetimetz;
1311 value->domain.general_info.is_null = 0;
1315 value->domain.general_info.is_null = 1;
1317 value->need_clear = false;
1323 * db_make_monetary() -
1330 db_make_monetary (DB_VALUE * value, const DB_CURRENCY type, const double amount)
1334 #if defined (API_ACTIVE_CHECKS)
1335 CHECK_1ARG_ERROR (value);
1338 /* check for valid currency type don't put default case in the switch!!! */
1339 error = ER_INVALID_CURRENCY_TYPE;
1342 case DB_CURRENCY_DOLLAR:
1343 case DB_CURRENCY_YEN:
1344 case DB_CURRENCY_WON:
1345 case DB_CURRENCY_TL:
1346 case DB_CURRENCY_BRITISH_POUND:
1347 case DB_CURRENCY_CAMBODIAN_RIEL:
1348 case DB_CURRENCY_CHINESE_RENMINBI:
1349 case DB_CURRENCY_INDIAN_RUPEE:
1350 case DB_CURRENCY_RUSSIAN_RUBLE:
1351 case DB_CURRENCY_AUSTRALIAN_DOLLAR:
1352 case DB_CURRENCY_CANADIAN_DOLLAR:
1353 case DB_CURRENCY_BRASILIAN_REAL:
1354 case DB_CURRENCY_ROMANIAN_LEU:
1355 case DB_CURRENCY_EURO:
1356 case DB_CURRENCY_SWISS_FRANC:
1357 case DB_CURRENCY_DANISH_KRONE:
1358 case DB_CURRENCY_NORWEGIAN_KRONE:
1359 case DB_CURRENCY_BULGARIAN_LEV:
1360 case DB_CURRENCY_VIETNAMESE_DONG:
1361 case DB_CURRENCY_CZECH_KORUNA:
1362 case DB_CURRENCY_POLISH_ZLOTY:
1363 case DB_CURRENCY_SWEDISH_KRONA:
1364 case DB_CURRENCY_CROATIAN_KUNA:
1365 case DB_CURRENCY_SERBIAN_DINAR:
1366 error = NO_ERROR; /* it's a type we expect */
1372 if (error != NO_ERROR)
1374 er_set (ER_WARNING_SEVERITY, ARG_FILE_LINE, error, 1, type);
1378 value->domain.general_info.type = DB_TYPE_MONETARY;
1379 value->data.money.type = type;
1380 value->data.money.amount = amount;
1381 value->domain.general_info.is_null = 0;
1382 value->need_clear = false;
1388 * db_make_pointer() -
1394 db_make_pointer (DB_VALUE * value, void *ptr)
1396 #if defined (API_ACTIVE_CHECKS)
1397 CHECK_1ARG_ERROR (value);
1400 value->domain.general_info.type = DB_TYPE_POINTER;
1401 value->data.p = ptr;
1404 value->domain.general_info.is_null = 0;
1408 value->domain.general_info.is_null = 1;
1410 value->need_clear = false;
1422 db_make_error (DB_VALUE * value, const int errcode)
1424 #if defined (API_ACTIVE_CHECKS)
1425 CHECK_1ARG_ERROR (value);
1428 assert (errcode != NO_ERROR);
1430 value->domain.general_info.type = DB_TYPE_ERROR;
1431 value->data.error = errcode;
1432 value->domain.general_info.is_null = 0;
1433 value->need_clear = false;
1439 * db_make_method_error() -
1446 db_make_method_error (DB_VALUE * value, const int errcode, const char *errmsg)
1448 #if defined (API_ACTIVE_CHECKS)
1449 CHECK_1ARG_ERROR (value);
1452 value->domain.general_info.type = DB_TYPE_ERROR;
1453 value->data.error = errcode;
1454 value->domain.general_info.is_null = 0;
1455 value->need_clear = false;
1457 #if !defined(SERVER_MODE)
1458 if (obj_Method_error_msg)
1460 free (obj_Method_error_msg); /* free old last error */
1462 obj_Method_error_msg = NULL;
1465 obj_Method_error_msg = strdup (errmsg);
1479 db_make_short (DB_VALUE * value, const short num)
1481 #if defined (API_ACTIVE_CHECKS)
1482 CHECK_1ARG_ERROR (value);
1485 value->domain.general_info.type = DB_TYPE_SHORT;
1486 value->data.sh = num;
1487 value->domain.general_info.is_null = 0;
1488 value->need_clear = false;
1494 * db_make_bigint() -
1500 db_make_bigint (DB_VALUE * value, const DB_BIGINT num)
1502 #if defined (API_ACTIVE_CHECKS)
1503 CHECK_1ARG_ERROR (value);
1506 value->domain.general_info.type = DB_TYPE_BIGINT;
1507 value->data.bigint = num;
1508 value->domain.general_info.is_null = 0;
1509 value->need_clear = false;
1515 * db_make_numeric() -
1523 db_make_numeric (DB_VALUE * value, const DB_C_NUMERIC num, const int precision, const int scale)
1525 int error = NO_ERROR;
1527 #if defined (API_ACTIVE_CHECKS)
1528 CHECK_1ARG_ERROR (value);
1531 error = db_value_domain_init (value, DB_TYPE_NUMERIC, precision, scale);
1532 if (error != NO_ERROR)
1539 value->domain.general_info.is_null = 0;
1540 memcpy (value->data.num.d.buf, num, DB_NUMERIC_BUF_SIZE);
1544 value->domain.general_info.is_null = 1;
1555 * bit_str_bit_size(in):
1558 db_make_bit (DB_VALUE * value, const int bit_length, DB_CONST_C_BIT bit_str, const int bit_str_bit_size)
1562 #if defined (API_ACTIVE_CHECKS)
1563 CHECK_1ARG_ERROR (value);
1566 error = db_value_domain_init (value, DB_TYPE_BIT, bit_length, 0);
1567 if (error != NO_ERROR)
1572 error = db_make_db_char (value, INTL_CODESET_RAW_BITS, 0, bit_str, bit_str_bit_size);
1577 * db_make_varbit() -
1580 * max_bit_length(in):
1582 * bit_str_bit_size(in):
1585 db_make_varbit (DB_VALUE * value, const int max_bit_length, DB_CONST_C_BIT bit_str, const int bit_str_bit_size)
1589 #if defined (API_ACTIVE_CHECKS)
1590 CHECK_1ARG_ERROR (value);
1593 error = db_value_domain_init (value, DB_TYPE_VARBIT, max_bit_length, 0);
1594 if (error != NO_ERROR)
1599 error = db_make_db_char (value, INTL_CODESET_RAW_BITS, 0, bit_str, bit_str_bit_size);
1610 * char_str_byte_size(in):
1613 db_make_char (DB_VALUE * value, const int char_length, DB_CONST_C_CHAR str, const int char_str_byte_size,
1614 const int codeset, const int collation_id)
1618 #if defined (API_ACTIVE_CHECKS)
1619 CHECK_1ARG_ERROR (value);
1622 error = db_value_domain_init (value, DB_TYPE_CHAR, char_length, 0);
1623 if (error == NO_ERROR)
1625 error = db_make_db_char (value, (INTL_CODESET) codeset, collation_id, str, char_str_byte_size);
1632 * db_make_varchar() -
1635 * max_char_length(in):
1637 * char_str_byte_size(in):
1640 db_make_varchar (DB_VALUE * value, const int max_char_length, DB_CONST_C_CHAR str, const int char_str_byte_size,
1641 const int codeset, const int collation_id)
1645 #if defined (API_ACTIVE_CHECKS)
1646 CHECK_1ARG_ERROR (value);
1649 error = db_value_domain_init (value, DB_TYPE_VARCHAR, max_char_length, 0);
1650 if (error == NO_ERROR)
1652 error = db_make_db_char (value, (INTL_CODESET) codeset, collation_id, str, char_str_byte_size);
1664 * nchar_str_byte_size(in):
1667 db_make_nchar (DB_VALUE * value, const int nchar_length, DB_CONST_C_NCHAR str, const int nchar_str_byte_size,
1668 const int codeset, const int collation_id)
1672 #if defined (API_ACTIVE_CHECKS)
1673 CHECK_1ARG_ERROR (value);
1676 error = db_value_domain_init (value, DB_TYPE_NCHAR, nchar_length, 0);
1677 if (error == NO_ERROR)
1679 error = db_make_db_char (value, (INTL_CODESET) codeset, collation_id, str, nchar_str_byte_size);
1686 * db_make_varnchar() -
1689 * max_nchar_length(in):
1691 * nchar_str_byte_size(in):
1694 db_make_varnchar (DB_VALUE * value, const int max_nchar_length, DB_CONST_C_NCHAR str, const int nchar_str_byte_size,
1695 const int codeset, const int collation_id)
1699 #if defined (API_ACTIVE_CHECKS)
1700 CHECK_1ARG_ERROR (value);
1703 error = db_value_domain_init (value, DB_TYPE_VARNCHAR, max_nchar_length, 0);
1704 if (error == NO_ERROR)
1706 error = db_make_db_char (value, (INTL_CODESET) codeset, collation_id, str, nchar_str_byte_size);
1713 * db_make_enumeration() -
1723 db_make_enumeration (DB_VALUE * value, unsigned short index, DB_CONST_C_CHAR str, int size, unsigned char codeset,
1724 const int collation_id)
1726 #if defined (API_ACTIVE_CHECKS)
1727 CHECK_1ARG_ERROR (value);
1730 value->domain.general_info.type = DB_TYPE_ENUMERATION;
1731 value->data.enumeration.short_val = index;
1732 value->data.enumeration.str_val.info.codeset = codeset;
1733 value->domain.char_info.collation_id = collation_id;
1734 value->data.enumeration.str_val.info.style = MEDIUM_STRING;
1735 value->data.ch.info.is_max_string = false;
1736 value->data.ch.info.compressed_need_clear = false;
1737 value->data.ch.medium.compressed_buf = NULL;
1738 value->data.ch.medium.compressed_size = 0;
1739 value->data.enumeration.str_val.medium.size = size;
1740 value->data.enumeration.str_val.medium.buf = str;
1741 value->domain.general_info.is_null = 0;
1742 value->need_clear = false;
1748 * db_make_resultset() -
1754 db_make_resultset (DB_VALUE * value, const DB_RESULTSET handle)
1756 #if defined (API_ACTIVE_CHECKS)
1757 CHECK_1ARG_ERROR (value);
1760 value->domain.general_info.type = DB_TYPE_RESULTSET;
1761 value->data.rset = handle;
1762 value->domain.general_info.is_null = 0;
1763 value->need_clear = false;
1775 db_make_oid (DB_VALUE * value, const OID * oid)
1777 #if defined (API_ACTIVE_CHECKS)
1778 CHECK_2ARGS_ERROR (value, oid);
1783 value->domain.general_info.is_null = 1;
1787 value->domain.general_info.type = DB_TYPE_OID;
1788 value->data.oid.pageid = oid->pageid;
1789 value->data.oid.slotid = oid->slotid;
1790 value->data.oid.volid = oid->volid;
1791 value->domain.general_info.is_null = OID_ISNULL (oid);
1792 value->need_clear = false;
1798 * db_make_string() -
1804 db_make_string (DB_VALUE * value, DB_CONST_C_CHAR str)
1809 #if defined (API_ACTIVE_CHECKS)
1810 CHECK_1ARG_ERROR (value);
1813 error = db_value_domain_init (value, DB_TYPE_VARCHAR, TP_FLOATING_PRECISION_VALUE, 0);
1814 if (error == NO_ERROR)
1818 size = (int) strlen (str);
1824 error = db_make_db_char (value, LANG_SYS_CODESET, LANG_SYS_COLLATION, str, size);
1830 * db_make_string_copy() - alloc buffer and copy str into the buffer.
1831 * need_clear will set as true.
1837 db_make_string_copy (DB_VALUE * value, DB_CONST_C_CHAR str)
1842 #if defined (API_ACTIVE_CHECKS)
1843 CHECK_1ARG_ERROR (value);
1848 db_make_null (value);
1852 copy_str = db_private_strdup (NULL, str);
1854 if (copy_str == NULL)
1856 er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1, strlen (str) + 1);
1857 return ER_OUT_OF_VIRTUAL_MEMORY;
1860 error = db_make_string (value, copy_str);
1862 if (error != NO_ERROR)
1864 db_private_free (NULL, copy_str);
1868 /* Set need_clear to true. */
1869 value->need_clear = true;
1881 db_make_set (DB_VALUE * value, DB_SET * set)
1883 int error = NO_ERROR;
1885 #if defined (API_ACTIVE_CHECKS)
1886 CHECK_1ARG_ERROR (value);
1889 value->domain.general_info.type = DB_TYPE_SET;
1890 value->data.set = set;
1893 if ((set->set && setobj_type (set->set) == DB_TYPE_SET) || set->disk_set)
1895 value->domain.general_info.is_null = 0;
1899 error = ER_QPROC_INVALID_DATATYPE;
1900 er_set (ER_WARNING_SEVERITY, ARG_FILE_LINE, ER_QPROC_INVALID_DATATYPE, 0);
1905 value->domain.general_info.is_null = 1;
1908 value->need_clear = false;
1914 * db_make_multiset() -
1920 db_make_multiset (DB_VALUE * value, DB_SET * set)
1922 int error = NO_ERROR;
1924 #if defined (API_ACTIVE_CHECKS)
1925 CHECK_1ARG_ERROR (value);
1928 value->domain.general_info.type = DB_TYPE_MULTISET;
1929 value->data.set = set;
1932 if ((set->set && setobj_type (set->set) == DB_TYPE_MULTISET) || set->disk_set)
1934 value->domain.general_info.is_null = 0;
1938 error = ER_QPROC_INVALID_DATATYPE;
1939 er_set (ER_WARNING_SEVERITY, ARG_FILE_LINE, ER_QPROC_INVALID_DATATYPE, 0);
1944 value->domain.general_info.is_null = 1;
1947 value->need_clear = false;
1953 * db_make_sequence() -
1959 db_make_sequence (DB_VALUE * value, DB_SET * set)
1961 int error = NO_ERROR;
1963 #if defined (API_ACTIVE_CHECKS)
1964 CHECK_1ARG_ERROR (value);
1967 value->domain.general_info.type = DB_TYPE_SEQUENCE;
1968 value->data.set = set;
1971 if ((set->set && setobj_type (set->set) == DB_TYPE_SEQUENCE) || set->disk_set)
1973 value->domain.general_info.is_null = 0;
1977 error = ER_QPROC_INVALID_DATATYPE;
1978 er_set (ER_WARNING_SEVERITY, ARG_FILE_LINE, ER_QPROC_INVALID_DATATYPE, 0);
1983 value->domain.general_info.is_null = 1;
1986 value->need_clear = false;
1992 * db_make_collection() -
1998 db_make_collection (DB_VALUE * value, DB_COLLECTION * col)
2000 int error = NO_ERROR;
2002 #if defined (API_ACTIVE_CHECKS)
2003 CHECK_1ARG_ERROR (value);
2006 /* Rather than being DB_TYPE_COLLECTION, the value type is taken from the base type of the collection. */
2009 value->domain.general_info.type = DB_TYPE_SEQUENCE; /* undefined */
2010 value->data.set = NULL;
2011 value->domain.general_info.is_null = 1;
2015 value->domain.general_info.type = db_col_type (col);
2016 value->data.set = col;
2017 /* note, we have been testing set->set for non-NULL here in order to set the is_null flag, this isn't
2018 * appropriate, the set pointer can be NULL if the set has been swapped out.The existance of a set handle alone
2019 * determines the nullness of the value. Actually, the act of calling db_col_type above will have resulted in a
2020 * re-fetch of the referenced set if it had been swapped out. */
2021 value->domain.general_info.is_null = 0;
2023 value->need_clear = false;
2036 db_make_elo (DB_VALUE * value, DB_TYPE type, const DB_ELO * elo)
2038 #if defined (API_ACTIVE_CHECKS)
2039 CHECK_1ARG_ERROR (value);
2042 value->domain.general_info.type = type;
2043 if (elo == NULL || elo->size < 0 || elo->type == ELO_NULL)
2045 elo_init_structure (&value->data.elo);
2046 value->domain.general_info.is_null = 1;
2050 value->data.elo = *elo;
2051 value->domain.general_info.is_null = 0;
2053 value->need_clear = false;
2067 db_make_time (DB_VALUE * value, const int hour, const int min, const int sec)
2069 #if defined (API_ACTIVE_CHECKS)
2070 CHECK_1ARG_ERROR (value);
2073 value->domain.general_info.type = DB_TYPE_TIME;
2074 value->domain.general_info.is_null = 0;
2075 value->need_clear = false;
2076 return db_time_encode (&value->data.time, hour, min, sec);
2088 db_make_date (DB_VALUE * value, const int mon, const int day, const int year)
2090 #if defined (API_ACTIVE_CHECKS)
2091 CHECK_1ARG_ERROR (value);
2094 value->domain.general_info.type = DB_TYPE_DATE;
2095 value->domain.general_info.is_null = 0;
2096 value->need_clear = false;
2097 return db_date_encode (&value->data.date, mon, day, year);
2101 db_make_json (DB_VALUE * value, JSON_DOC * json_document, bool need_clear)
2103 #if defined (API_ACTIVE_CHECKS)
2104 CHECK_1ARG_ERROR (value);
2108 /* todo: Should this happen? */
2114 value->domain.general_info.type = DB_TYPE_JSON;
2115 value->domain.general_info.is_null = 0;
2116 value->data.json.document = json_document;
2117 value->data.json.schema_raw = NULL;
2118 value->need_clear = need_clear;
2124 db_get_compressed_size (DB_VALUE * value)
2128 if (value == NULL || DB_IS_NULL (value))
2133 type = DB_VALUE_DOMAIN_TYPE (value);
2135 /* Preliminary check */
2136 assert (type == DB_TYPE_VARCHAR || type == DB_TYPE_VARNCHAR);
2138 return value->data.ch.medium.compressed_size;
2142 * db_set_compressed_string() - Sets the compressed string, its size and its need for clear in the DB_VALUE
2144 * value(in/out) : The DB_VALUE
2145 * compressed_string(in) :
2146 * compressed_size(in) :
2147 * compressed_need_clear(in) :
2150 db_set_compressed_string (DB_VALUE * value, char *compressed_string, int compressed_size, bool compressed_need_clear)
2154 if (value == NULL || DB_IS_NULL (value))
2158 type = DB_VALUE_DOMAIN_TYPE (value);
2160 /* Preliminary check */
2161 assert (type == DB_TYPE_VARCHAR || type == DB_TYPE_VARNCHAR);
2163 value->data.ch.medium.compressed_buf = compressed_string;
2164 value->data.ch.medium.compressed_size = compressed_size;
2165 value->data.ch.info.compressed_need_clear = compressed_need_clear;
2169 * db_value_is_null() -
2174 db_value_is_null (const DB_VALUE * value)
2176 #if defined (API_ACTIVE_CHECKS)
2177 CHECK_1ARG_TRUE (value);
2185 return (value->domain.general_info.is_null != 0);
2189 * db_value_domain_type() - get the type of value's domain.
2190 * return : DB_TYPE of value's domain
2191 * value(in) : Pointer to a DB_VALUE
2194 db_value_domain_type (const DB_VALUE * value)
2196 #if defined (API_ACTIVE_CHECKS)
2197 CHECK_1ARG_UNKNOWN (value);
2202 // todo: does this ever happen?
2204 return DB_TYPE_UNKNOWN;
2208 return (DB_TYPE) value->domain.general_info.type;