35 #include <sys/timeb.h> 64 #if !defined (SERVER_MODE) 71 #if defined (SUPPRESS_STRLEN_WARNING) 72 #define strlen(s1) ((int) strlen(s1)) 76 #define QSTR_VALUE_PRECISION(value) \ 77 ((DB_VALUE_PRECISION(value) == TP_FLOATING_PRECISION_VALUE) \ 78 ? db_get_string_length(value) : \ 79 DB_VALUE_PRECISION(value)) 81 #define QSTR_MAX_PRECISION(str_type) \ 82 (QSTR_IS_CHAR(str_type) ? DB_MAX_VARCHAR_PRECISION : \ 83 QSTR_IS_NATIONAL_CHAR(str_type) ? DB_MAX_VARNCHAR_PRECISION : \ 84 DB_MAX_VARBIT_PRECISION) 86 #define ABS(i) ((i) >= 0 ? (i) : -(i)) 88 #define STACK_SIZE 100 90 #define LEAP(y) (((y) % 400 == 0) || ((y) % 100 != 0 && (y) % 4 == 0)) 92 #define DBL_MAX_DIGITS ((int)ceil(DBL_MAX_EXP * log10((double) FLT_RADIX))) 93 #define UINT64_MAX_HEX_DIGITS 16 94 #define UINT64_MAX_BIN_DIGITS 64 96 #define LOB_CHUNK_SIZE (128 * 1024) 97 #define DB_GET_UCHAR(dbval) (REINTERPRET_CAST (const unsigned char *, db_get_string ((dbval)))) 145 #define WHITE_CHARS " \r\t\n" 147 #define QSTR_DATE_LENGTH 10 148 #define QSTR_TIME_LENGTH 11 149 #define QSTR_TIME_STAMPLENGTH 22 150 #define QSTR_DATETIME_LENGTH 26 155 #define QSTR_TO_CHAR_LEN_MULTIPLIER_RATIO LOC_PARSE_FRMT_TO_TOKEN_MULT 157 #define MAX_TOKEN_SIZE 16000 159 #define GUID_STANDARD_BYTES_LENGTH 16 164 const unsigned char *src_ptr,
DB_TYPE src_type,
int src_length,
int src_size,
165 INTL_CODESET codeset,
unsigned char **res,
DB_TYPE * res_type,
int *res_length,
int *res_size);
166 static void trim_leading (
const unsigned char *trim_charset_ptr,
int trim_charset_size,
const unsigned char *src_ptr,
168 unsigned char **lead_trimmed_ptr,
int *lead_trimmed_length,
int *lead_trimmed_size,
170 static int qstr_pad (
MISC_OPERAND pad_operand,
int pad_length,
const unsigned char *pad_charset_ptr,
171 int pad_charset_length,
int pad_charset_size,
const unsigned char *src_ptr,
DB_TYPE src_type,
172 int src_length,
int src_size,
INTL_CODESET codeset,
unsigned char **result,
DB_TYPE * result_type,
173 int *result_length,
int *result_size);
174 static int qstr_eval_like (
const char *tar,
int tar_length,
const char *expr,
int expr_length,
const char *escape,
176 #if defined(ENABLE_UNUSED_FUNCTION) 177 static int kor_cmp (
unsigned char *src,
unsigned char *dest,
int size);
179 static int qstr_replace (
const unsigned char *src_buf,
int src_len,
int src_size,
INTL_CODESET codeset,
int coll_id,
180 const unsigned char *srch_str_buf,
int srch_str_size,
const unsigned char *repl_str_buf,
181 int repl_str_size,
unsigned char **result_buf,
int *result_len,
int *result_size);
183 const unsigned char *from_str_ptr,
int from_str_size,
const unsigned char *to_str_ptr,
184 int to_str_size,
unsigned char **result_ptr,
DB_TYPE * result_type,
int *result_len,
187 #if defined (ENABLE_UNUSED_FUNCTION) 188 static bool is_string (
const DB_VALUE * s);
194 #if defined (ENABLE_UNUSED_FUNCTION) 195 static int qstr_append (
unsigned char *s1,
int s1_length,
int s1_precision,
DB_TYPE s1_type,
const unsigned char *s2,
196 int s2_length,
int s2_precision,
DB_TYPE s2_type,
INTL_CODESET codeset,
int *result_length,
200 const unsigned char *s2,
int s2_length,
int s2_precision,
DB_TYPE s2_type,
201 INTL_CODESET codeset,
unsigned char **result,
int *result_length,
int *result_size,
204 const unsigned char *s2,
int s2_length,
int s2_precision,
DB_TYPE s2_type,
205 unsigned char **result,
int *result_length,
int *result_size,
DB_TYPE * result_type,
209 static bool varbit_truncated (
const unsigned char *s,
int s_length,
int used_bits);
210 static void bit_ncat (
unsigned char *r,
int offset,
const unsigned char *s,
int n);
212 static int qstr_bit_coerce (
const unsigned char *src,
int src_length,
int src_precision,
DB_TYPE src_type,
213 unsigned char **dest,
int *dest_length,
int dest_precision,
DB_TYPE dest_type,
215 static int qstr_coerce (
const unsigned char *src,
int src_length,
int src_precision,
DB_TYPE src_type,
218 static int qstr_position (
const char *sub_string,
const int sub_size,
const int sub_length,
const char *src_string,
219 const char *src_end,
const char *src_string_bound,
int src_length,
int coll_id,
220 bool is_forward_search,
int *position);
221 static int qstr_bit_position (
const unsigned char *sub_string,
int sub_length,
const unsigned char *src_string,
222 int src_length,
int *position);
223 static int shift_left (
unsigned char *bit_string,
int bit_string_size);
225 unsigned char **r,
int *r_length,
int *r_size);
226 static int qstr_bit_substring (
const unsigned char *src,
int src_length,
int start,
int length,
unsigned char **r,
228 static void left_nshift (
const unsigned char *bit_string,
int bit_string_size,
int shift_amount,
unsigned char *r,
231 static int hextoi (
char hex_char);
248 const int precision,
const int scale,
const INTL_LANG number_lang_id);
252 int *format_length,
const char **next_pos);
262 static void set_time_argument (
struct tm *dest,
int year,
int month,
int day,
int hour,
int min,
int sec);
264 #if defined (ENABLE_UNUSED_FUNCTION) 265 static int parse_for_next_int (
char **ch,
char *output);
271 const int unit,
int is_add);
276 const bool has_escape_char,
const char *escape_str,
int *
const position,
277 char **crt_char_p,
bool *
const is_escaped);
280 bool ignore_prec_spaces,
bool ignore_trail_spaces,
char **
str_out,
289 static int parse_time_string (
const char *timestr,
int timestr_size,
int *sign,
int *h,
int *m,
int *s,
int *ms);
291 const INTL_CODESET codeset,
int *token_id,
int *token_size);
293 const INTL_CODESET codeset,
int token_id,
int case_mode,
char *buffer,
296 static int parse_tzd (
const char *str,
const int max_expect_len);
298 #define TRIM_FORMAT_STRING(sz, n) {if (strlen(sz) > n) sz[n] = 0;} 299 #define WHITESPACE(c) ((c) == ' ' || (c) == '\t' || (c) == '\r' || (c) == '\n') 300 #define ALPHABETICAL(c) (((c) >= 'A' && (c) <= 'Z') || \ 301 ((c) >= 'a' && (c) <= 'z')) 302 #define DIGIT(c) ((c) >= '0' && (c) <= '9') 305 #define PUNCTUATIONAL(c) ((c) == '-' || (c) == '/' || (c) == ',' || (c) == '.' \ 306 || (c) == ';' || (c) == ':' || (c) == ' ' \ 307 || (c) == '\t' || (c) == '\n') 310 #define ESCAPE_CHAR(c) (c <= 0x1f || (c) == '"' || (c) == '\\') 313 #define STRCHCAT(s, c) \ 316 __cch__[0] = c;__cch__[1] = 0; strcat(s, __cch__);\ 319 #define SKIP_SPACES(ch, end) do {\ 320 while (ch != end && char_isspace(*(ch))) (ch)++; \ 323 #define TZD_DEFAULT_EXPECTED_LEN 4 324 #define TZD_MAX_EXPECTED_LEN TZ_DS_STRING_SIZE 380 if (string1_category != string2_category)
410 switch (string1_category)
428 if (!ignore_trailing_space)
448 else if (cmp_result > 0)
513 #if defined(CUBRID_DEBUG) 516 printf (
"db_string_unique_prefix(): non-string type: %s and %s\n",
521 printf (
"db_string_unique_prefix(): incompatible types: %s and %s\n",
526 printf (
"db_string_unique_prefix(): string1 %s, greater than string2 %s\n",
db_get_string (db_string1),
551 #if defined(CUBRID_DEBUG) 552 printf (
"db_string_unique_prefix(): non-string type: %s and %s\n",
568 int size1, size2, result_size, pad_size = 0;
569 const unsigned char *string1 =
NULL, *string2 =
NULL, *t =
NULL, *key =
NULL;
570 unsigned char *result, pad[2];
574 bool bit_use_str2_size =
false;
590 if (string1 ==
NULL || string2 ==
NULL)
604 for (t = string1 + (size1 - 1); t >= string1 && *t == pad[0]; t--, size1--)
608 for (t = string2 + (size2 - 1); t >= string2 && *t == pad[0]; t--, size2--)
617 for (t = string1 + (size1 - 2); t >= string1 && *t == pad[0] && *(t + 1) == pad[1];
618 t--, t--, size1--, size1--)
623 for (t = string2 + (size2 - 2); t >= string2 && *t == pad[0] && *(t + 1) == pad[1];
624 t--, t--, size2--, size2--)
640 const unsigned char *t2;
642 for (size = 1, t = string1, t2 = string2; size <= size1 && size <= size2; size++, t++, t2++)
659 bit_use_str2_size =
false;
663 bit_use_str2_size =
true;
679 bit_use_str2_size =
true;
686 bit_use_str2_size =
false;
692 result_size = (num_bits + 7) / 8;
696 if (!ignore_trailing_space)
701 error_status =
QSTR_SPLIT_KEY (collation_id, key_domain->
is_desc, string1, size1, string2, size2, &key,
713 (void) memcpy (result, key, result_size);
715 result[result_size] = 0;
748 assert (c1 < 0 && c2 <= 0);
752 assert (c1 > 0 && c2 >= 0);
757 return (error_status);
765 int precision, num_bits = -1;
793 #if defined(CUBRID_DEBUG) 794 printf (
"db_string_unique_prefix called with non-string type: %s\n",
pr_type_name (string_type));
816 const unsigned char *string1 = (
const unsigned char *)
db_get_string (db_string1);
817 const unsigned char *string2 = (
const unsigned char *)
db_get_string (db_string2);
818 unsigned char *result;
819 const unsigned char *key;
829 for (; string1_size && string1[string1_size - 1] ==
' '; string1_size--)
833 for (; string2_size && string2[string2_size - 1] ==
' '; string2_size--)
843 int i, pad_size, trim_length, cmp_flag, prev_size;
844 unsigned char *prev_ptr, *current_ptr, pad[2];
848 trim_length = string1_size;
849 current_ptr = (
unsigned char *) (string1 + string1_size);
850 for (i = 0, cmp_flag = 0; (i < string1_size) && (cmp_flag == 0); i++)
852 prev_ptr = qstr_prev_char (current_ptr, codeset, &prev_size);
853 if (pad_size == prev_size)
855 cmp_flag = memcmp ((
char *) prev_ptr, (
char *) pad, pad_size);
859 trim_length -= pad_size;
867 current_ptr = prev_ptr;
869 string1_size = trim_length;
871 trim_length = string2_size;
872 current_ptr = (
unsigned char *) (string2 + string2_size);
873 for (i = 0, cmp_flag = 0; (i < string2_size) && (cmp_flag == 0); i++)
875 prev_ptr = qstr_prev_char (current_ptr, codeset, &prev_size);
876 if (pad_size == prev_size)
878 cmp_flag = memcmp ((
char *) prev_ptr, (
char *) pad, pad_size);
882 trim_length -= pad_size;
890 current_ptr = prev_ptr;
892 string2_size = trim_length;
897 for (result_size = 0;
898 result_size < string1_size && result_size < string2_size && string1[result_size] == string2[result_size];
906 if ((result_size != string1_size)
907 && ((result_size == string2_size) || (string2[result_size] < string1[result_size])))
909 #if defined(CUBRID_DEBUG) 910 printf (
"db_string_unique_prefix called with ");
911 printf (
"string1: %s, greater than string2: %s\n", string1, string2);
918 if (result_size == string1_size || result_size == string2_size - 1)
921 result_size = string1_size;
946 memcpy (result, key, result_size);
948 result[result_size] = 0;
952 error_status =
db_make_db_char (db_result, codeset, (
const char *) result, num_bits);
956 error_status =
db_make_db_char (db_result, codeset, (
const char *) result, result_size);
970 return (error_status);
1001 DB_TYPE string_type1, string_type2;
1002 bool is_inplace_concat;
1016 is_inplace_concat =
false;
1019 if (string1 == result || string2 == result)
1021 is_inplace_concat =
true;
1064 else if ((string1_code_set != string2_code_set))
1071 bool check_empty_string;
1128 int r_length, r_size;
1133 int result_domain_length;
1139 &r, &r_length, &r_size, &r_type, data_status);
1150 result_domain_length =
1162 int result_domain_length;
1169 if (common_coll == -1)
1191 return error_status;
1210 return error_status;
1223 codeset, &r, &r_length, &r_size, &r_type, data_status);
1236 result_domain_length =
1240 if (is_inplace_concat)
1253 return error_status;
1269 unsigned int temp_arg = 0, uint_arg = 0;
1276 char *num_as_bytes =
NULL;
1277 char *invalid_pos =
NULL;
1278 int num_byte_count = 0;
1279 int i, codeset = -1, collation = -1;
1335 temp_bigint = bi + (
DB_BIGINT) round (fmod (dtmp, 0x100000000)) + itmp;
1337 if (temp_bigint >= 0)
1346 uint_arg = temp_arg;
1354 while (temp_arg > 0)
1362 if (num_as_bytes ==
NULL)
1367 temp_arg = uint_arg;
1369 for (i = num_byte_count - 1; i >= 0; i--)
1371 num_as_bytes[
i] = (char) (temp_arg & 0xFF);
1374 num_as_bytes[num_byte_count] =
'\0';
1479 const char *search_from, *src_buf, *sub_str;
1482 int from_byte_offset;
1498 src_size =
strlen (src_buf);
1502 if (sub_str_size < 0)
1504 sub_str_size =
strlen (sub_str);
1510 if (offset + sub_str_len > src_str_len)
1516 search_from = src_buf;
1518 intl_char_size ((
unsigned char *) search_from, offset, codeset, &from_byte_offset);
1519 search_from += from_byte_offset;
1521 intl_char_count ((
unsigned char *) search_from, src_size - from_byte_offset, codeset, &src_str_len);
1525 qstr_position (sub_str, sub_str_size, sub_str_len, search_from, src_buf + src_size,
1526 src_buf + src_size, src_str_len, coll_id,
true, &position);
1527 position += (position != 0) ? offset : 0;
1530 else if (offset < 0)
1532 if (src_str_len + offset + 1 < sub_str_len)
1538 int real_offset = src_str_len + offset - (sub_str_len - 1);
1540 search_from = src_buf;
1542 intl_char_size ((
unsigned char *) search_from, real_offset, codeset, &from_byte_offset);
1544 search_from += from_byte_offset;
1548 qstr_position (sub_str, sub_str_size, sub_str_len, search_from, src_buf + src_size, src_buf,
1549 src_str_len + offset + 1, coll_id,
false, &position);
1552 position = src_str_len - (-offset - 1) - (position - 1) - (sub_str_len - 1);
1569 return error_status;
1601 char *space_string_p =
NULL;
1638 memset (space_string_p,
' ', len);
1645 space_string_p[i++] =
' ';
1647 space_string_p[len] =
'\0';
1741 src_size =
strlen (src_str);
1746 sub_size =
strlen (sub_str);
1751 coll_id,
true, &position);
1765 return error_status;
1794 int extraction_length_is_null =
false;
1807 if ((extraction_length ==
NULL) ||
DB_IS_NULL (extraction_length))
1809 extraction_length_is_null =
true;
1827 #if defined(SERVER_MODE) 1835 || (!extraction_length_is_null && !
is_integer (extraction_length)))
1845 int extract_nchars = -1;
1847 if (!extraction_length_is_null)
1849 extract_nchars = (int)
db_get_int (extraction_length);
1857 const unsigned char *
string =
DB_GET_UCHAR (src_string);
1858 int start_offset =
db_get_int (start_position);
1861 if (extraction_length_is_null)
1863 extract_nchars = string_len;
1866 if (substr_operand ==
SUBSTR)
1868 if (extract_nchars < 0 || string_len <
ABS (start_offset))
1870 return error_status;
1873 if (start_offset < 0)
1879 string_len = -start_offset;
1883 error_status =
qstr_substring (
string, string_len, start_offset, extract_nchars,
1897 (
int)
db_get_int (start_position), extract_nchars, &sub, &sub_length);
1909 return error_status;
1935 size_t dest_crt_pos;
1936 size_t src_last_pos;
1939 std::vector<size_t> special_idx;
1941 for (
size_t i = 0;
i < src_size; ++
i)
1943 unsigned char uc = (
unsigned char) src_str[
i];
1946 special_idx.push_back (
i);
1949 *dest_size = src_size + special_idx.size () + 2 + 1 ;
1959 for (
size_t i = 0;
i < special_idx.size (); ++
i)
1961 size_t len = special_idx[
i] - src_last_pos;
1964 memcpy (&result[dest_crt_pos], &src_str[src_last_pos], len);
1966 dest_crt_pos += len;
1968 result[dest_crt_pos] =
'\\';
1970 src_last_pos = special_idx[
i];
1973 memcpy (&result[dest_crt_pos], &src_str[src_last_pos], src_size - src_last_pos);
1975 result[*dest_size - 2] =
'"';
1976 result[*dest_size - 1] =
'\0';
1978 *res_string = result;
1999 char *escaped_string =
NULL;
2000 size_t escaped_string_size;
2040 int src_length, count_i = 0, src_size = 0;
2079 else if (count_i <= 0 || src_length <= 0)
2086 return error_status;
2093 const char *src_ptr;
2100 new_length = (
DB_BIGINT) src_length *count_i;
2112 return error_status;
2122 expected_size = src_size * count_i;
2131 if (error_status < 0)
2134 return error_status;
2150 memcpy (res_ptr, src_ptr, src_size);
2151 res_ptr += src_size;
2162 return error_status;
2190 int error_status =
NO_ERROR, count_i = 0;
2192 DB_VALUE empty_string1, empty_string2;
2194 int src_coll, delim_coll;
2247 src_string = &empty_string1;
2249 src_type = delim_type;
2250 src_categ = delim_categ;
2270 delim_string = &empty_string2;
2272 delim_type = src_type;
2273 delim_categ = src_categ;
2299 else if ((src_categ != delim_categ) || (src_cs != delim_cs))
2304 else if (count_i == 0)
2312 int offset = 1, initial_count = 0;
2313 bool count_from_start;
2318 initial_count = count_i;
2319 count_from_start = (count_i > 0) ?
true :
false;
2320 count_i = abs (count_i);
2322 assert (src_cs == delim_cs);
2324 if (count_from_start)
2329 error_status =
db_string_instr (src_string, delim_string, &offset_val, &interm_pos);
2330 if (error_status < 0)
2337 offset += delim_length;
2354 error_status =
db_string_instr (src_string, delim_string, &offset_val, &interm_pos);
2355 if (error_status < 0)
2363 offset = src_length - offset + 2;
2380 int start_pos = 1, end_pos = 0;
2382 if (count_from_start)
2385 end_pos = offset - delim_length - 1;
2389 start_pos = src_length - offset + 2 + delim_length;
2390 end_pos = src_length;
2393 if (start_pos > end_pos || start_pos < 1 || end_pos > src_length)
2406 if (error_status < 0)
2428 if (error_status < 0)
2438 return error_status;
2454 return error_status;
2460 return error_status;
2474 char *result_strp =
NULL;
2483 return error_status;
2508 return error_status;
2523 return error_status;
2542 char *result_strp =
NULL;
2553 return error_status;
2556 switch (hash_len_type)
2581 if (result_strp ==
NULL)
2584 return error_status;
2597 return error_status;
2612 return error_status;
2631 char *result_strp =
NULL;
2642 return error_status;
2665 return error_status;
2680 return error_status;
2699 char *result_strp =
NULL;
2710 return error_status;
2723 if (result_strp ==
NULL)
2727 return error_status;
2740 return error_status;
2755 return error_status;
2777 return error_status;
2786 char hashString[32 + 1] = {
'\0' };
2795 return error_status;
2810 return error_status;
2841 int error_status =
NO_ERROR, position_i = 0, length_i = 0;
2842 DB_TYPE src_type, substr_type;
2845 int result_size = 0;
2846 DB_VALUE empty_string1, empty_string2;
2849 int src_coll, substr_coll;
2898 src_string = &empty_string1;
2900 src_type = substr_type;
2901 src_categ = substr_categ;
2921 sub_string = &empty_string2;
2923 substr_type = src_type;
2924 substr_categ = src_categ;
2959 if (src_categ != substr_categ)
2970 if (position_i <= 0 || position_i > src_length + 1)
3020 if ((length_i >= 0) && ((position_i + length_i) <= src_length))
3025 db_make_int (&len_val, src_length - (position_i + length_i) + 1);
3106 return error_status;
3151 if (index > 0 && index < num_args)
3163 #if defined (ENABLE_UNUSED_FUNCTION) 3225 return error_status;
3297 return error_status;
3359 return error_status;
3426 unsigned char *lower_str;
3443 lower_str[lower_size] = 0;
3455 return error_status;
3523 unsigned char *upper_str;
3524 int upper_size, src_length;
3540 upper_str[upper_size] = 0;
3551 return error_status;
3582 int is_trim_charset_omitted =
false;
3584 unsigned char *result;
3585 int result_length, result_size = 0, result_domain_length;
3588 const unsigned char *trim_charset_ptr =
NULL;
3589 int trim_charset_length = 0;
3590 int trim_charset_size = 0;
3611 return error_status;
3614 if (trim_charset ==
NULL)
3616 is_trim_charset_omitted =
true;
3620 is_trim_charset_omitted =
false;
3633 return error_status;
3646 return error_status;
3649 if (!is_trim_charset_omitted
3655 return error_status;
3661 if (!is_trim_charset_omitted)
3668 error_status =
qstr_trim (tr_operand, trim_charset_ptr, trim_charset_length, trim_charset_size,
3678 result[result_size] = 0;
3682 return error_status;
3734 if (string1_category != string2_category)
3764 switch (string1_category)
3782 if (!ignore_trailing_space)
3802 else if (cmp_result > 0)
3814 qstr_trim (
MISC_OPERAND trim_operand,
const unsigned char *trim_charset,
int trim_charset_length,
int trim_charset_size,
3815 const unsigned char *src_ptr,
DB_TYPE src_type,
int src_length,
int src_size,
INTL_CODESET codeset,
3816 unsigned char **result,
DB_TYPE * result_type,
int *result_length,
int *result_size)
3818 unsigned char pad_char[2], *lead_trimmed_ptr, *trail_trimmed_ptr;
3819 int lead_trimmed_length, trail_trimmed_length;
3820 int lead_trimmed_size, trail_trimmed_size, pad_char_size = 0;
3822 bool trim_ascii_spaces =
false;
3826 if (trim_charset_length == 0)
3828 trim_charset = pad_char;
3829 trim_charset_length = 1;
3830 trim_charset_size = pad_char_size;
3831 trim_ascii_spaces =
true;
3835 lead_trimmed_ptr = (
unsigned char *) src_ptr;
3836 lead_trimmed_length = src_length;
3837 lead_trimmed_size = src_size;
3839 if (trim_operand ==
LEADING || trim_operand ==
BOTH)
3841 trim_leading (trim_charset, trim_charset_size, src_ptr, src_type, src_length, src_size, codeset,
3842 &lead_trimmed_ptr, &lead_trimmed_length, &lead_trimmed_size, trim_ascii_spaces);
3845 trail_trimmed_ptr = lead_trimmed_ptr;
3846 trail_trimmed_length = lead_trimmed_length;
3847 trail_trimmed_size = lead_trimmed_size;
3851 qstr_trim_trailing (trim_charset, trim_charset_size, lead_trimmed_ptr, src_type, lead_trimmed_length,
3852 lead_trimmed_size, codeset, &trail_trimmed_length, &trail_trimmed_size, trim_ascii_spaces);
3857 if (*result ==
NULL)
3861 return error_status;
3864 (void) memcpy ((
char *) (*result), (
char *) trail_trimmed_ptr, trail_trimmed_size);
3865 (*result)[trail_trimmed_size] =
'\0';
3875 *result_length = trail_trimmed_length;
3876 *result_size = trail_trimmed_size;
3878 return error_status;
3906 trim_leading (
const unsigned char *trim_charset_ptr,
int trim_charset_size,
const unsigned char *src_ptr,
3907 DB_TYPE src_type,
int src_length,
int src_size,
INTL_CODESET codeset,
unsigned char **lead_trimmed_ptr,
3908 int *lead_trimmed_length,
int *lead_trimmed_size,
bool trim_ascii_spaces)
3910 int cur_src_char_size, cur_trim_char_size;
3911 unsigned char *cur_src_char_ptr, *cur_trim_char_ptr;
3915 *lead_trimmed_ptr = (
unsigned char *) src_ptr;
3916 *lead_trimmed_length = src_length;
3917 *lead_trimmed_size = src_size;
3920 for (cur_src_char_ptr = (
unsigned char *) src_ptr; cur_src_char_ptr < src_ptr + src_size;)
3922 if (trim_ascii_spaces && *cur_src_char_ptr ==
' ')
3924 cur_src_char_ptr += 1;
3925 *lead_trimmed_length -= 1;
3926 *lead_trimmed_size -= 1;
3927 *lead_trimmed_ptr += 1;
3930 for (cur_trim_char_ptr = (
unsigned char *) trim_charset_ptr;
3931 cur_src_char_ptr < (src_ptr + src_size) && (cur_trim_char_ptr < trim_charset_ptr + trim_charset_size);)
3933 intl_char_size (cur_src_char_ptr, 1, codeset, &cur_src_char_size);
3934 intl_char_size (cur_trim_char_ptr, 1, codeset, &cur_trim_char_size);
3936 if (cur_src_char_size != cur_trim_char_size)
3941 cmp_flag = memcmp ((
char *) cur_src_char_ptr, (
char *) cur_trim_char_ptr, cur_trim_char_size);
3947 cur_src_char_ptr += cur_src_char_size;
3948 cur_trim_char_ptr += cur_trim_char_size;
3951 if (cur_trim_char_ptr >= trim_charset_ptr + trim_charset_size)
3953 *lead_trimmed_length -= trim_charset_size;
3954 *lead_trimmed_size -= trim_charset_size;
3955 *lead_trimmed_ptr += trim_charset_size;
3984 qstr_trim_trailing (
const unsigned char *trim_charset_ptr,
int trim_charset_size,
const unsigned char *src_ptr,
3985 DB_TYPE src_type,
int src_length,
int src_size,
INTL_CODESET codeset,
int *trail_trimmed_length,
3986 int *trail_trimmed_size,
bool trim_ascii_spaces)
3988 int prev_src_char_size, prev_trim_char_size;
3989 const unsigned char *cur_src_char_ptr, *cur_trim_char_ptr;
3990 const unsigned char *prev_src_char_ptr, *prev_trim_char_ptr;
3993 *trail_trimmed_length = src_length;
3994 *trail_trimmed_size = src_size;
3997 for (cur_src_char_ptr = (
unsigned char *) src_ptr + src_size; cur_src_char_ptr > src_ptr;)
3999 if (trim_ascii_spaces && *(cur_src_char_ptr - 1) ==
' ')
4001 cur_src_char_ptr -= 1;
4002 *trail_trimmed_length -= 1;
4003 *trail_trimmed_size -= 1;
4006 for (cur_trim_char_ptr = (
unsigned char *) trim_charset_ptr + trim_charset_size;
4007 cur_trim_char_ptr > trim_charset_ptr && cur_src_char_ptr > src_ptr;)
4010 prev_src_char_ptr =
intl_prev_char (cur_src_char_ptr, src_ptr, codeset, &prev_src_char_size);
4011 prev_trim_char_ptr =
intl_prev_char (cur_trim_char_ptr, trim_charset_ptr, codeset, &prev_trim_char_size);
4013 if (prev_trim_char_size != prev_src_char_size)
4018 cmp_flag = memcmp ((
char *) prev_src_char_ptr, (
char *) prev_trim_char_ptr, prev_trim_char_size);
4024 cur_src_char_ptr -= prev_src_char_size;
4025 cur_trim_char_ptr -= prev_trim_char_size;
4028 if (cur_trim_char_ptr <= trim_charset_ptr)
4030 *trail_trimmed_length -= trim_charset_size;
4031 *trail_trimmed_size -= trim_charset_size;
4055 unsigned char *result;
4056 int result_length = 0, result_size = 0;
4059 const unsigned char *pad_charset_ptr =
NULL;
4060 int pad_charset_length = 0;
4061 int pad_charset_size = 0;
4063 bool is_pad_charset_omitted =
false;
4083 if (pad_charset ==
NULL)
4085 is_pad_charset_omitted =
true;
4095 return error_status;
4103 return error_status;
4106 if (!is_pad_charset_omitted
4112 return error_status;
4115 if (!is_pad_charset_omitted)
4122 error_status =
qstr_pad (pad_operand, total_length, pad_charset_ptr, pad_charset_length, pad_charset_size,
4131 return error_status;
4157 result[result_size] = 0;
4167 int pad_charset_size,
const unsigned char *src_ptr,
DB_TYPE src_type,
int src_length,
int src_size,
4168 INTL_CODESET codeset,
unsigned char **result,
DB_TYPE * result_type,
int *result_length,
int *result_size)
4170 unsigned char def_pad_char[2];
4171 unsigned char *cur_pad_char_ptr;
4172 int def_pad_char_size = 0;
4173 int truncate_size, pad_size,
alloc_size, cnt;
4174 int length_to_be_padded;
4175 int remain_length_to_be_padded;
4176 int pad_full_size = 0;
4177 int pad_reminder_size = 0;
4182 def_pad_char[0] =
' ';
4183 def_pad_char_size = 1;
4190 if (pad_charset_length == 0)
4192 pad_charset_ptr = def_pad_char;
4193 pad_charset_length = 1;
4194 pad_charset_size = def_pad_char_size;
4197 assert (pad_charset_length > 0);
4199 if (src_length >= pad_length)
4201 alloc_size = src_size;
4205 pad_full_size = ((pad_length - src_length) / pad_charset_length) * pad_charset_size;
4206 intl_char_size ((
unsigned char *) pad_charset_ptr, (pad_length - src_length) % pad_charset_length, codeset,
4207 &pad_reminder_size);
4208 alloc_size = src_size + pad_full_size + pad_reminder_size;
4221 if (*result ==
NULL)
4225 return error_status;
4233 if (src_length >= pad_length)
4236 intl_char_size ((
unsigned char *) src_ptr, pad_length, codeset, &truncate_size);
4237 memcpy ((
char *) (*result), (
char *) src_ptr, truncate_size);
4239 *result_length = pad_length;
4240 *result_size = truncate_size;
4242 return error_status;
4250 length_to_be_padded = pad_length - src_length;
4256 remain_length_to_be_padded = 0;
4258 for (; cnt < (length_to_be_padded / pad_charset_length); cnt++)
4260 (void) memcpy ((
char *) (*result) + pad_charset_size * cnt, (
char *) pad_charset_ptr, pad_charset_size);
4262 pad_size = pad_charset_size * cnt;
4263 remain_length_to_be_padded = (pad_length - src_length) % pad_charset_length;
4265 if (remain_length_to_be_padded != 0)
4267 int remain_size_to_be_padded = 0;
4269 assert (remain_length_to_be_padded > 0);
4271 cur_pad_char_ptr = (
unsigned char *) pad_charset_ptr;
4273 intl_char_size (cur_pad_char_ptr, remain_length_to_be_padded, codeset, &remain_size_to_be_padded);
4274 (void) memcpy ((
char *) (*result) + pad_size, (
char *) cur_pad_char_ptr, remain_size_to_be_padded);
4275 cur_pad_char_ptr += remain_size_to_be_padded;
4276 pad_size += remain_size_to_be_padded;
4279 memcpy ((
char *) (*result) + pad_size, src_ptr, src_size);
4283 memmove ((
char *) (*result) + src_size, (
char *) (*result), pad_size);
4284 memcpy ((
char *) (*result), src_ptr, src_size);
4287 pad_size += src_size;
4289 *result_length = pad_length;
4290 *result_size = pad_size;
4292 return error_status;
4336 const char *src_char_string_p =
NULL;
4337 const char *pattern_char_string_p =
NULL;
4338 const char *esc_char_p =
NULL;
4339 int src_length = 0, pattern_length = 0;
4359 return error_status;
4367 return error_status;
4373 return error_status;
4379 return error_status;
4388 return error_status;
4402 int esc_char_len, esc_char_size;
4406 if (src_category == esc_category)
4415 if (esc_char_len != 1)
4420 return error_status;
4428 return error_status;
4436 return error_status;
4448 qstr_eval_like (src_char_string_p, src_length, pattern_char_string_p, pattern_length,
4487 cub_regex_object ** comp_regex,
char **comp_pattern,
int *result)
4493 char *rx_compiled_pattern = (comp_pattern !=
NULL) ? *comp_pattern :
NULL;
4494 cub_regex_object *rx_compiled_regex = (comp_regex !=
NULL) ? *comp_regex :
NULL;
4533 if ((src_category != pattern_category) || (src_codeset != pattern_codeset))
4559 bool is_case_sensitive = (case_sensitive->
data.
i != 0);
4561 std::regex_constants::syntax_option_type reg_flags = std::regex_constants::ECMAScript;
4562 reg_flags |= std::regex_constants::nosubs;
4563 if (!is_case_sensitive)
4565 reg_flags |= std::regex_constants::icase;
4576 int pattern_length = pattern_string.size ();
4578 if (rx_compiled_pattern ==
NULL)
4585 memcpy (rx_compiled_pattern, pattern_string.c_str (), pattern_length);
4586 rx_compiled_pattern[pattern_length] =
'\0';
4588 error_status =
cubregex::compile (rx_compiled_regex, rx_compiled_pattern, reg_flags, collation);
4622 if (comp_regex ==
NULL || comp_pattern ==
NULL)
4632 *comp_regex = rx_compiled_regex;
4633 *comp_pattern = rx_compiled_pattern;
4636 return error_status;
4676 cub_regex_object ** comp_regex,
char **comp_pattern)
4682 char *rx_compiled_pattern = (comp_pattern !=
NULL) ? *comp_pattern :
NULL;
4683 cub_regex_object *rx_compiled_regex = (comp_regex !=
NULL) ? *comp_regex :
NULL;
4686 for (
int i = 0;
i < num_args;
i++)
4702 const DB_VALUE *position = (num_args >= 3) ? args[2] :
NULL;
4703 const DB_VALUE *match_type = (num_args == 4) ? args[3] :
NULL;
4747 int position_value = (position !=
NULL) ?
db_get_int (position) - 1 : 0;
4748 if (position_value < 0)
4757 std::regex_constants::syntax_option_type reg_flags = std::regex_constants::ECMAScript | std::regex_constants::icase;
4785 int pattern_length = pattern_string.size ();
4787 if (rx_compiled_pattern ==
NULL)
4794 memcpy (rx_compiled_pattern, pattern_string.c_str (), pattern_length);
4795 rx_compiled_pattern[pattern_length] =
'\0';
4797 error_status =
cubregex::compile (rx_compiled_regex, rx_compiled_pattern, reg_flags, collation);
4806 int result_value = 0;
4808 error_status =
cubregex::count (result_value, *rx_compiled_regex, src_string, position_value, collation->
codeset);
4837 if (comp_regex ==
NULL || comp_pattern ==
NULL)
4847 *comp_regex = rx_compiled_regex;
4848 *comp_pattern = rx_compiled_pattern;
4851 return error_status;
4891 cub_regex_object ** comp_regex,
char **comp_pattern)
4897 char *rx_compiled_pattern = (comp_pattern !=
NULL) ? *comp_pattern :
NULL;
4898 cub_regex_object *rx_compiled_regex = (comp_regex !=
NULL) ? *comp_regex :
NULL;
4901 for (
int i = 0;
i < num_args;
i++)
4917 const DB_VALUE *position = (num_args >= 3) ? args[2] :
NULL;
4918 const DB_VALUE *occurrence = (num_args >= 4) ? args[3] :
NULL;
4919 const DB_VALUE *return_opt = (num_args >= 5) ? args[4] :
NULL;
4920 const DB_VALUE *match_type = (num_args == 6) ? args[5] :
NULL;
4978 int position_value = (position !=
NULL) ?
db_get_int (position) - 1 : 0;
4979 if (position_value < 0)
4987 int occurrence_value = (occurrence !=
NULL) ?
db_get_int (occurrence) : 1;
4988 if (occurrence_value < 1)
4996 int return_opt_value = (return_opt !=
NULL) ?
db_get_int (return_opt) : 0;
4997 if (return_opt_value != 0 && return_opt_value != 1)
5006 std::regex_constants::syntax_option_type reg_flags = std::regex_constants::ECMAScript | std::regex_constants::icase;
5034 int pattern_length = pattern_string.size ();
5036 if (rx_compiled_pattern ==
NULL)
5043 memcpy (rx_compiled_pattern, pattern_string.c_str (), pattern_length);
5044 rx_compiled_pattern[pattern_length] =
'\0';
5046 error_status =
cubregex::compile (rx_compiled_regex, rx_compiled_pattern, reg_flags, collation);
5055 int result_value = 0;
5057 error_status =
cubregex::instr (result_value, *rx_compiled_regex, src_string, position_value,
5058 occurrence_value, return_opt_value, collation->
codeset);
5087 if (comp_regex ==
NULL || comp_pattern ==
NULL)
5097 *comp_regex = rx_compiled_regex;
5098 *comp_pattern = rx_compiled_pattern;
5101 return error_status;
5141 cub_regex_object ** comp_regex,
char **comp_pattern)
5147 char *rx_compiled_pattern = (comp_pattern !=
NULL) ? *comp_pattern :
NULL;
5148 cub_regex_object *rx_compiled_regex = (comp_regex !=
NULL) ? *comp_regex :
NULL;
5151 for (
int i = 0;
i < num_args;
i++)
5166 const DB_VALUE *match_type = (num_args == 3) ? args[2] :
NULL;
5204 std::regex_constants::syntax_option_type reg_flags = std::regex_constants::ECMAScript | std::regex_constants::icase;
5233 int pattern_length = pattern_string.size ();
5235 if (rx_compiled_pattern ==
NULL)
5242 memcpy (rx_compiled_pattern, pattern_string.c_str (), pattern_length);
5243 rx_compiled_pattern[pattern_length] =
'\0';
5245 error_status =
cubregex::compile (rx_compiled_regex, rx_compiled_pattern, reg_flags, collation);
5254 int result_value = 0;
5285 if (comp_regex ==
NULL || comp_pattern ==
NULL)
5295 *comp_regex = rx_compiled_regex;
5296 *comp_pattern = rx_compiled_pattern;
5299 return error_status;
5339 cub_regex_object ** comp_regex,
char **comp_pattern)
5345 char *rx_compiled_pattern = (comp_pattern !=
NULL) ? *comp_pattern :
NULL;
5346 cub_regex_object *rx_compiled_regex = (comp_regex !=
NULL) ? *comp_regex :
NULL;
5349 for (
int i = 0;
i < num_args;
i++)
5365 const DB_VALUE *position = (num_args >= 4) ? args[3] :
NULL;
5366 const DB_VALUE *occurrence = (num_args >= 5) ? args[4] :
NULL;
5367 const DB_VALUE *match_type = (num_args == 6) ? args[5] :
NULL;
5417 int coll_id_tmp = -1, coll_id = -1;
5419 if (coll_id_tmp == -1)
5435 int position_value = (position !=
NULL) ?
db_get_int (position) - 1 : 0;
5436 if (position_value < 0)
5444 int occurrence_value = (occurrence !=
NULL) ?
db_get_int (occurrence) : 0;
5445 if (occurrence_value < 0)
5454 std::regex_constants::syntax_option_type reg_flags = std::regex_constants::ECMAScript | std::regex_constants::icase;
5482 int pattern_length = pattern_string.size ();
5484 if (rx_compiled_pattern ==
NULL)
5491 memcpy (rx_compiled_pattern, pattern_string.c_str (), pattern_length);
5492 rx_compiled_pattern[pattern_length] =
'\0';
5494 error_status =
cubregex::compile (rx_compiled_regex, rx_compiled_pattern, reg_flags, collation);
5509 std::string result_string;
5512 error_status =
cubregex::replace (result_string, *rx_compiled_regex, src_string, repl_string, position_value,
5513 occurrence_value, collation->
codeset);
5529 int result_char_size = result_string.size ();
5531 if (result_char_string ==
NULL)
5538 memcpy (result_char_string, result_string.c_str (), result_char_size);
5539 result_char_string[result_char_size] =
'\0';
5542 result_char_size, result_char_string, result_char_size,
5581 if (comp_regex ==
NULL || comp_pattern ==
NULL)
5591 *comp_regex = rx_compiled_regex;
5592 *comp_pattern = rx_compiled_pattern;
5595 return error_status;
5635 cub_regex_object ** comp_regex,
char **comp_pattern)
5641 char *rx_compiled_pattern = (comp_pattern !=
NULL) ? *comp_pattern :
NULL;
5642 cub_regex_object *rx_compiled_regex = (comp_regex !=
NULL) ? *comp_regex :
NULL;
5645 for (
int i = 0;
i < num_args;
i++)
5660 const DB_VALUE *position = (num_args >= 3) ? args[2] :
NULL;
5661 const DB_VALUE *occurrence = (num_args >= 4) ? args[3] :
NULL;
5662 const DB_VALUE *match_type = (num_args == 5) ? args[4] :
NULL;
5713 int position_value = (position !=
NULL) ?
db_get_int (position) - 1 : 0;
5714 if (position_value < 0)
5722 int occurrence_value = (occurrence !=
NULL) ?
db_get_int (occurrence) : 1;
5723 if (occurrence_value < 1)
5732 std::regex_constants::syntax_option_type reg_flags = std::regex_constants::ECMAScript | std::regex_constants::icase;
5760 int pattern_length = pattern_string.size ();
5762 if (rx_compiled_pattern ==
NULL)
5769 memcpy (rx_compiled_pattern, pattern_string.c_str (), pattern_length);
5770 rx_compiled_pattern[pattern_length] =
'\0';
5772 error_status =
cubregex::compile (rx_compiled_regex, rx_compiled_pattern, reg_flags, collation);
5781 std::string result_string;
5782 bool is_matched =
false;
5784 error_status =
cubregex::substr (result_string, is_matched, *rx_compiled_regex, src_string, position_value,
5785 occurrence_value, collation->
codeset);
5797 int result_char_size = result_string.size ();
5799 if (result_char_string ==
NULL)
5806 memcpy (result_char_string, result_string.c_str (), result_char_size);
5807 result_char_string[result_char_size] =
'\0';
5810 result, result_char_size, result_char_string, result_char_size,
5831 if (comp_regex ==
NULL || comp_pattern ==
NULL)
5841 *comp_regex = rx_compiled_regex;
5842 *comp_pattern = rx_compiled_pattern;
5845 return error_status;
5880 int result_size = 0, src_size = 0, src_domain_precision = 0;
5884 int char_count = 0, adj_char_size = 0;
5908 if (src_size <= 0 || new_size >= src_size)
5914 result_size = new_size;
5919 char_count = result_size;
5920 adj_char_size = result_size;
5928 assert (adj_char_size <= result_size);
5936 memset (r, 0, (
size_t) result_size + 1);
5938 if (adj_char_size > 0)
5945 src_domain_precision = MIN (src_domain_precision, char_count);
5951 *spare_bytes = result_size - adj_char_size;
5954 return error_status;
5959 return error_status;
5964 return error_status;
5987 int string_size = 0;
5990 bool save_need_clear;
6004 assert (val_size >= string_size);
6011 return error_status;
6023 qstr_eval_like (
const char *tar,
int tar_length,
const char *expr,
int expr_length,
const char *escape,
6026 const int IN_CHECK = 0;
6027 const int IN_PERCENT = 1;
6029 int status = IN_CHECK;
6033 const unsigned char *tar_ptr, *end_tar;
6034 const unsigned char *expr_ptr, *end_expr;
6037 unsigned char pad_char[2];
6049 end_tar = tar_ptr + tar_length;
6050 end_expr = expr_ptr + expr_length;
6056 if (status == IN_CHECK)
6058 bool go_back =
true;
6059 if (expr_ptr == end_expr)
6065 while (tar_ptr < end_tar && *tar_ptr ==
' ')
6072 while (tar_ptr < end_tar)
6075 if (*tar_ptr ==
' ')
6079 else if (tar_ptr + pad_char_size <= end_tar && memcmp (tar_ptr, pad_char, pad_char_size) == 0)
6081 tar_ptr += pad_char_size;
6090 if (tar_ptr == end_tar)
6098 tar_ptr = tarstack[stackp];
6100 expr_ptr = exprstack[stackp--];
6111 status = IN_PERCENT;
6117 else if (tar_ptr < end_tar && expr_ptr < end_expr)
6127 const unsigned char *expr_seq_end = expr_ptr;
6129 int tar_matched_size;
6130 unsigned char *match_escape =
NULL;
6131 bool inescape =
false;
6132 bool has_last_escape =
false;
6145 if (!inescape && escape !=
NULL 6146 &&
intl_cmp_char (expr_seq_end, (
unsigned char *) escape, codeset, &dummy) == 0)
6149 if (expr_seq_end + 1 >= end_expr)
6151 has_last_escape =
true;
6157 match_escape = (
unsigned char *) escape;
6166 while (expr_seq_end < end_expr);
6168 assert (end_tar - tar_ptr > 0);
6169 assert (expr_seq_end - expr_ptr > 0);
6173 current_collation->
strmatch (current_collation,
true, tar_ptr,
CAST_BUFLEN (end_tar - tar_ptr),
6174 expr_ptr,
CAST_BUFLEN (expr_seq_end - expr_ptr), match_escape,
6175 has_last_escape, &tar_matched_size,
false);
6179 tar_ptr += tar_matched_size;
6180 expr_ptr = expr_seq_end;
6184 assert (tar_ptr <= end_tar);
6185 assert (expr_ptr <= end_expr);
6193 tar_ptr = tarstack[stackp];
6195 expr_ptr = exprstack[stackp--];
6209 const unsigned char *next_expr_ptr;
6212 assert (status == IN_PERCENT);
6213 if ((next_expr_ptr < end_expr) && (!escape_is_match_one || escape ==
NULL)
6220 tarstack[++stackp] = tar_ptr;
6221 exprstack[stackp] = expr_ptr;
6222 expr_ptr = next_expr_ptr;
6233 if (next_expr_ptr == end_expr)
6238 if (tar_ptr < end_tar && next_expr_ptr < end_expr)
6240 const unsigned char *expr_seq_end = next_expr_ptr;
6242 int tar_matched_size;
6243 unsigned char *match_escape =
NULL;
6244 bool inescape =
false;
6245 bool has_last_escape =
false;
6258 if (!inescape && escape !=
NULL 6259 &&
intl_cmp_char (expr_seq_end, (
unsigned char *) escape, codeset, &dummy) == 0)
6262 if (expr_seq_end + 1 >= end_expr)
6264 has_last_escape =
true;
6270 match_escape = (
unsigned char *) escape;
6280 while (expr_seq_end < end_expr);
6282 assert (end_tar - tar_ptr > 0);
6283 assert (expr_seq_end - next_expr_ptr > 0);
6289 current_collation->
strmatch (current_collation,
true, tar_ptr,
CAST_BUFLEN (end_tar - tar_ptr),
6290 next_expr_ptr,
CAST_BUFLEN (expr_seq_end - next_expr_ptr),
6291 match_escape, has_last_escape, &tar_matched_size,
false);
6298 tarstack[++stackp] = tar_ptr;
6299 tar_ptr += tar_matched_size;
6301 exprstack[stackp] = expr_ptr;
6302 expr_ptr = expr_seq_end;
6317 while (tar_ptr < end_tar);
6321 if (tar_ptr == end_tar)
6328 if (expr_ptr == end_expr)
6337 else if (tar_ptr > end_tar)
6352 unsigned char *result_ptr =
NULL;
6353 int result_length = 0, result_size = 0;
6355 int coll_id, coll_id_tmp;
6357 int is_repl_string_omitted =
false;
6358 const unsigned char *repl_string_ptr =
NULL;
6359 int repl_string_size = 0;
6366 if (repl_string ==
NULL)
6368 is_repl_string_omitted =
true;
6388 srch_string = &dummy_string;
6390 if (!is_repl_string_omitted &&
DB_IS_NULL (repl_string))
6392 repl_string = &dummy_string;
6431 if (coll_id_tmp == -1)
6438 if (!is_repl_string_omitted)
6450 coll_id = coll_id_tmp;
6455 if (!is_repl_string_omitted)
6463 repl_string_size, &result_ptr, &result_length, &result_size);
6467 if (result_length == 0)
6478 result_ptr[result_size] = 0;
6485 return error_status;
6492 const unsigned char *srch_str_buf,
int srch_str_size,
const unsigned char *repl_str_buf,
6493 int repl_str_size,
unsigned char **result_buf,
int *result_len,
int *result_size)
6495 #define REPL_POS_ARRAY_EXTENT 32 6499 const unsigned char *matched_ptr, *matched_ptr_end;
6500 unsigned char *target;
6501 int *repl_pos_array =
NULL;
6502 int repl_pos_array_size;
6503 int repl_pos_array_cnt;
6504 const unsigned char *src_ptr;
6515 if (srch_str_buf ==
NULL || src_size < srch_str_size)
6518 if (*result_buf ==
NULL)
6525 (void) memcpy ((
char *) (*result_buf), (
char *) src_buf, src_size);
6526 *result_len = src_len;
6527 *result_size = src_size;
6531 if (repl_str_buf ==
NULL)
6533 repl_str_buf = (
unsigned char *)
"";
6538 if (repl_pos_array ==
NULL)
6545 intl_char_count (repl_str_buf, repl_str_size, codeset, &repl_str_len);
6547 repl_pos_array_cnt = 0;
6548 for (*result_size = 0, *result_len = 0, src_ptr = src_buf;
6549 src_size > 0 && srch_str_size > 0 && src_ptr < src_buf + src_size;)
6554 false, &matched_size) == 0)
6557 if (repl_pos_array_cnt >= repl_pos_array_size)
6562 if (repl_pos_array ==
NULL)
6569 repl_pos_array[repl_pos_array_cnt * 2] =
CAST_BUFLEN (src_ptr - src_buf);
6570 repl_pos_array[repl_pos_array_cnt * 2 + 1] = matched_size;
6571 src_ptr += matched_size;
6572 repl_pos_array_cnt++;
6573 *result_size += repl_str_size;
6574 *result_len += repl_str_len;
6579 *result_size += char_size;
6584 if (repl_pos_array_cnt == 0)
6586 *result_size = src_size;
6590 if (*result_buf ==
NULL)
6597 matched_ptr = matched_ptr_end = src_buf;
6598 target = *result_buf;
6599 for (i = 0; i < repl_pos_array_cnt; i++)
6602 matched_ptr = src_buf + repl_pos_array[2 *
i];
6603 if ((matched_ptr - matched_ptr_end) > 0)
6605 (void) memcpy (target, matched_ptr_end, matched_ptr - matched_ptr_end);
6606 target += matched_ptr - matched_ptr_end;
6610 (void) memcpy (target, repl_str_buf, repl_str_size);
6611 target += repl_str_size;
6612 matched_ptr_end = matched_ptr + repl_pos_array[2 * i + 1];
6616 if (matched_ptr_end < src_buf + src_size)
6618 (void) memcpy (target, matched_ptr_end, src_buf + src_size - matched_ptr_end);
6619 target += src_buf + src_size - matched_ptr_end;
6622 assert (target - *result_buf == *result_size);
6625 if (repl_pos_array !=
NULL)
6630 return error_status;
6632 #undef REPL_POS_ARRAY_EXTENT 6643 unsigned char *result_ptr =
NULL;
6644 int result_length = 0, result_size = 0;
6661 return error_status;
6668 return error_status;
6679 return error_status;
6686 &result_type, &result_length, &result_size);
6690 if (result_length == 0)
6702 result_ptr[result_size] = 0;
6706 return error_status;
6714 const unsigned char *from_str_ptr,
int from_str_size,
const unsigned char *to_str_ptr,
int to_str_size,
6715 unsigned char **result_ptr,
DB_TYPE * result_type,
int *result_len,
int *result_size)
6718 int j, offset, offset1, offset2;
6719 int from_char_loc, to_char_cnt, to_char_loc;
6720 const unsigned char *srcp, *fromp;
6721 unsigned char *target =
NULL;
6722 int matched = 0, phase = 0;
6724 if ((from_str_ptr ==
NULL && to_str_ptr !=
NULL))
6728 return error_status;
6731 if (to_str_ptr ==
NULL)
6733 to_str_ptr = (
unsigned char *)
"";
6738 for (j = 0; j < to_str_size;)
6751 for (srcp = src_ptr; srcp < src_ptr + src_size;)
6757 for (fromp = from_str_ptr; fromp !=
NULL && fromp < from_str_ptr + from_str_size; from_char_loc++)
6762 if ((offset == offset1) && (memcmp (srcp, fromp, offset) == 0))
6766 for (j = 0; j < to_str_size;)
6770 if (to_char_loc == from_char_loc)
6774 *result_size += offset2;
6778 memcpy (target, to_str_ptr + j, offset2);
6794 *result_size += offset;
6798 memcpy (target, srcp, offset);
6807 return error_status;
6813 if (*result_ptr ==
NULL)
6817 return error_status;
6822 target = *result_ptr;
6823 *result_len = *result_size;
6827 return error_status;
6902 unsigned char *dest;
6917 dest_type, data_status);
6927 return error_status;
7002 unsigned char *dest;
7013 return error_status;
7028 dest_codeset, &dest, &dest_length, &dest_size, dest_prec,
7036 dest[dest_size] = 0;
7041 return error_status;
7118 DB_TYPE needle_type, stack_type;
7120 int stack_size = 0, needle_size = 0;
7121 const char *stack_str =
NULL;
7122 const char *needle_str =
NULL;
7123 int cmp, coll_id, matched_stack_size;
7124 const char *stack_ptr, *stack_end, *elem_start;
7170 if (stack_size == 0 && needle_size == 0)
7173 goto match_not_found;
7176 for (elem_start = stack_ptr = stack_str, stack_end = stack_str + stack_size; stack_ptr <= stack_end; ++stack_ptr)
7178 if (stack_ptr == stack_end || *stack_ptr ==
',')
7180 if (stack_ptr == elem_start)
7182 if (needle_size == 0)
7190 assert (stack_ptr > elem_start);
7192 if (needle_size > 0)
7194 cmp =
QSTR_MATCH (coll_id, (
const unsigned char *) elem_start,
CAST_BUFLEN (stack_ptr - elem_start),
7195 (
const unsigned char *) needle_str, needle_size,
NULL,
false, &matched_stack_size);
7196 if (cmp == 0 && matched_stack_size ==
CAST_BUFLEN (stack_ptr - elem_start))
7205 elem_start = stack_ptr + 1;
7237 int digits_count = 0;
7238 char *binary_form =
NULL;
7262 else if (bigint_val == 0)
7278 if (binary_form ==
NULL)
7283 memset (binary_form, 0, digits_count + 1);
7285 for (i = 0; i < digits_count; i++)
7287 binary_form[digits_count - i - 1] = ((
DB_BIGINT) 1 << i) & bigint_val ?
'1' :
'0';
7295 if (binary_form !=
NULL)
7323 bool left_is_datetime =
false;
7324 int month = 0, day = 0, year = 0;
7325 int lsecond = 0, lminute = 0, lhour = 0, lms = 0;
7326 bool is_time_decoded =
false;
7327 bool is_datetime_decoded =
false;
7328 int rsecond = 0, rminute = 0, rhour = 0, rms = 0;
7350 bool has_zone =
false;
7351 bool is_explicit_time =
false;
7354 if (error ==
NO_ERROR && has_zone ==
true)
7356 tz_id = ldatetimetz.
tz_id;
7359 left_is_datetime =
true;
7377 left_is_datetime =
true;
7378 if (has_zone ==
true)
7390 is_time_decoded =
true;
7395 if (error !=
NO_ERROR || !is_explicit_time)
7397 left_is_datetime =
false;
7401 int lsecond2 = 0, lminute2 = 0, lhour2 = 0, lms2 = 0;
7402 left_is_datetime =
true;
7403 db_datetime_decode (&ldatetime, &month, &day, &year, &lhour2, &lminute2, &lsecond2, &lms2);
7404 is_datetime_decoded =
true;
7405 if (lhour2 != lhour || lminute2 != lminute || lsecond2 != lsecond || lms2 != lms)
7410 left_is_datetime =
false;
7420 left_is_datetime =
true;
7438 tz_id = dt_tz_p->
tz_id;
7439 left_is_datetime =
true;
7446 ldatetime.
time = ltime * 1000;
7447 left_is_datetime =
true;
7465 ldatetime.
time = ltime * 1000;
7466 left_is_datetime =
true;
7467 tz_id = ts_tz_p->
tz_id;
7474 left_is_datetime =
true;
7480 left_is_datetime =
false;
7498 if (left_is_datetime)
7501 if (!is_datetime_decoded)
7503 db_datetime_decode (&ldatetime, &month, &day, &year, &lhour, &lminute, &lsecond, &lms);
7506 if (month == 0 && day == 0 && year == 0 && lhour == 0 && lminute == 0 && lsecond == 0 && lms == 0)
7514 add_and_normalize_date_time (&year, &month, &day, &lhour, &lminute, &lsecond, &lms, 0, 0, 0, rhour, rminute,
7525 db_datetime_encode (&result_datetime, month, day, year, lhour, lminute, lsecond, lms);
7532 if (!is_time_decoded)
7536 seconds = (lhour + rhour) * 3600 + (lminute + rminute) * 60 + lsecond + rsecond;
7537 rhour = seconds / 3600;
7544 rminute = (seconds - rhour * 3600) / 60;
7545 rsecond = seconds % 60;
7555 switch (result_type)
7558 if (!left_is_datetime)
7574 result_datetime = dt_local;
7582 if (!left_is_datetime)
7597 if (!left_is_datetime)
7614 if (left_is_datetime)
7627 if (left_is_datetime)
7691 std::swap (coerced_str, *dbval);
7702 *json_str_dbval = src_dbval;
7707 *json_str_dbval = dest_dbval;
7745 #if defined(ENABLE_UNUSED_FUNCTION) 7813 unsigned char *src, *dest;
7814 int src_length = 0, src_precision;
7817 int num_unconverted, cnv_size;
7820 src = (
unsigned char *)
db_get_nchar (src_string, &src_length);
7838 convert_status =
intl_convert_charset (src, src_length, src_codeset, dest, dest_codeset, &num_unconverted);
7843 intl_char_size (dest, (src_length - num_unconverted), dest_codeset, &cnv_size);
7844 qstr_pad_string ((
unsigned char *) &dest[cnv_size], (src_precision - src_length + num_unconverted),
7846 dest[src_precision] = 0;
7847 db_make_nchar (dest_string, src_precision, (
char *) dest, src_precision);
7867 convert_status =
intl_convert_charset (src, src_length, src_codeset, dest, dest_codeset, &num_unconverted);
7871 dest[src_length - num_unconverted] = 0;
7872 db_make_varnchar (dest_string, src_precision, (
char *) dest, (src_length - num_unconverted));
7891 return error_status;
7899 return error_status;
7931 unsigned char pad[2];
7932 int i, j, pad_size = 0;
7945 (void) memset ((
char *) s, (int) pad[0], length);
7950 for (i = 0; i < length; i++)
7952 for (j = 0; j < pad_size; j++)
7989 if (dest_size >= (2 * src_size))
7991 copy_size = src_size;
7995 copy_size = dest_size / 2;
7998 for (i = 0; i < copy_size; i++)
8000 sprintf (&(dest[2 * i]),
"%02x", (
unsigned char) (src[i]));
8030 int i, copy_size, src_index, required_size;
8032 required_size = (src_size + 1) / 2;
8034 if (dest_size >= required_size)
8036 copy_size = required_size;
8040 copy_size = dest_size;
8044 for (i = 0; i < copy_size; i++)
8048 hex_digit =
hextoi (src[src_index++]);
8055 dest[
i] = hex_digit << 4;
8056 if (src_index < src_size)
8058 hex_digit =
hextoi (src[src_index++]);
8065 dest[
i] += hex_digit;
8098 int dest_byte, copy_size, src_index, required_size;
8100 required_size = (src_size + 7) / 8;
8102 if (dest_size >= required_size)
8104 copy_size = required_size;
8108 copy_size = dest_size;
8112 for (dest_byte = 0; dest_byte < copy_size; dest_byte++)
8116 dest[dest_byte] = 0;
8117 for (bit_count = 0; bit_count < 8; bit_count++)
8119 dest[dest_byte] = dest[dest_byte] << 1;
8120 if (src_index < src_size)
8122 if (src[src_index] ==
'1')
8126 else if (src[src_index] !=
'0')
8179 if (buffer_size > (2 * src_size))
8191 memset (&(buffer[2 * src_size]),
'0', (buffer_size - (2 * src_size)));
8192 *copy_size = buffer_size - 1;
8196 *copy_size = 2 * src_size;
8198 buffer[*copy_size] =
'\0';
8210 if (buffer_size % 2)
8212 src_size = buffer_size / 2;
8216 src_size = (buffer_size - 1) / 2;
8224 *copy_size = 2 * src_size;
8225 buffer[*copy_size] =
'\0';
8227 *truncation = src_size;
8318 const int s_unit,
const int codeset,
const int collation_id)
8324 error =
db_make_char (value, precision, src, s_unit, codeset, collation_id);
8328 error =
db_make_varchar (value, precision, src, s_unit, codeset, collation_id);
8332 error =
db_make_nchar (value, precision, src, s_unit, codeset, collation_id);
8336 error =
db_make_varnchar (value, precision, src, s_unit, codeset, collation_id);
8340 error =
db_make_bit (value, precision, src, s_unit);
8412 #if defined (ENABLE_UNUSED_FUNCTION) 8567 #if defined (ENABLE_UNUSED_FUNCTION) 8592 qstr_compare (
const unsigned char *string1,
int size1,
const unsigned char *string2,
int size2)
8595 unsigned char c1, c2;
8601 n = size1 < size2 ? size1 : size2;
8602 for (i = 0, cmp = 0; i < n && cmp == 0; i++)
8629 for (i = 0; i < n && cmp == 0; i++)
8642 for (i = 0; i < n && cmp == 0; i++)
8681 char_compare (
const unsigned char *string1,
int size1,
const unsigned char *string2,
int size2)
8684 unsigned char c1, c2;
8686 assert (size1 >= 0 && size2 >= 0);
8692 n = size1 < size2 ? size1 : size2;
8693 for (i = 0, cmp = 0; i < n && cmp == 0; i++)
8720 for (i = 0; i < n && cmp == 0; i++)
8733 for (i = 0; i < n && cmp == 0; i++)
8775 varnchar_compare (
const unsigned char *string1,
int size1,
const unsigned char *string2,
int size2,
8778 int n,
i,
cmp, pad_size = 0;
8779 unsigned char c1, c2, pad[2];
8782 #define PAD pad[i % pad_size] 8785 n = size1 < size2 ? size1 : size2;
8786 for (i = 0, cmp = 0; i < n && cmp == 0; i++)
8813 for (i = 0; i < n && cmp == 0; i++)
8826 for (i = 0; i < n && cmp == 0; i++)
8869 int n,
i,
cmp, pad_size = 0;
8870 unsigned char c1, c2, pad[2];
8872 assert (size1 >= 0 && size2 >= 0);
8875 #define PAD pad[i % pad_size] 8878 n = size1 < size2 ? size1 : size2;
8879 for (i = 0, cmp = 0; i < n && cmp == 0; i++)
8906 for (i = 0; i < n && cmp == 0; i++)
8919 for (i = 0; i < n && cmp == 0; i++)
8958 bit_compare (
const unsigned char *string1,
int size1,
const unsigned char *string2,
int size2)
8962 assert (size1 >= 0 && size2 >= 0);
8965 n = size1 < size2 ? size1 : size2;
8966 for (i = 0, cmp = 0; i < n && cmp == 0; i++)
8968 cmp = (*string1++ - *string2++);
8974 cmp = size1 - size2;
9002 varbit_compare (
const unsigned char *string1,
int size1,
const unsigned char *string2,
int size2)
9007 n = size1 < size2 ? size1 : size2;
9008 for (i = 0, cmp = 0; i < n && cmp == 0; i++)
9010 cmp = (*string1++ - *string2++);
9016 cmp = size1 - size2;
9047 int result_size = 0, src_length = 0, result_domain_length = 0, src_size = 0;
9050 DB_TYPE src_type, result_type;
9079 assert (new_size >= result_size);
9080 assert (new_size >= src_size);
9082 result_size = MAX (result_size, new_size);
9083 result_size = MAX (result_size, src_size);
9100 memset (r, 0, (
size_t) result_size + 1);
9116 return error_status;
9119 #if defined (ENABLE_UNUSED_FUNCTION) 9146 qstr_append (
unsigned char *s1,
int s1_length,
int s1_precision,
DB_TYPE s1_type,
const unsigned char *s2,
9147 int s2_length,
int s2_precision,
DB_TYPE s2_type,
INTL_CODESET codeset,
int *result_length,
9150 int copy_length, copy_size;
9151 int pad1_length, pad2_length;
9152 int length_left, cat_length, cat_size;
9153 int s1_logical_length, s2_logical_length;
9154 unsigned char *cat_ptr;
9179 s1_logical_length = s1_precision;
9183 s1_logical_length = s1_length;
9189 s2_logical_length = s2_precision;
9193 s2_logical_length = s2_length;
9209 *result_length = s1_logical_length + s2_logical_length;
9218 *result_size = *result_length * 2;
9222 *result_size = *result_length;
9231 copy_length = MIN (s1_length, *result_length);
9232 intl_char_size ((
unsigned char *) s1, copy_length, codeset, ©_size);
9234 pad1_length = MIN (s1_logical_length, *result_length) - copy_length;
9235 length_left = *result_length - copy_length - pad1_length;
9243 cat_length = MIN (s2_length, length_left);
9244 intl_char_size ((
unsigned char *) s2, cat_length, codeset, &cat_size);
9246 pad2_length = length_left - cat_length;
9251 cat_ptr =
qstr_pad_string ((
unsigned char *) &(s1[copy_size]), pad1_length, codeset);
9253 memcpy ((
char *) cat_ptr, (
char *) s2, cat_size);
9254 (void)
qstr_pad_string ((
unsigned char *) &cat_ptr[cat_size], pad2_length, codeset);
9269 *result_length = MIN ((s1_logical_length + s2_logical_length),
QSTR_MAX_PRECISION (s1_type));
9273 *result_size = *result_length * 2;
9277 *result_size = *result_length;
9286 copy_length = s1_length;
9287 if (copy_length > *result_length)
9289 copy_length = *result_length;
9291 if (
varchar_truncated ((
unsigned char *) s1, s1_type, s1_length, copy_length, codeset))
9296 intl_char_size ((
unsigned char *) s1, copy_length, codeset, ©_size);
9298 pad1_length = MIN (s1_logical_length, *result_length) - copy_length;
9299 length_left = *result_length - copy_length - pad1_length;
9304 cat_length = s2_length;
9305 if (cat_length > (*result_length - copy_length))
9307 cat_length = *result_length - copy_length;
9309 if (
varchar_truncated ((
unsigned char *) s2, s2_type, s2_length, cat_length, codeset))
9314 intl_char_size ((
unsigned char *) s2, cat_length, codeset, &cat_size);
9316 pad2_length = length_left - cat_length;
9321 cat_ptr =
qstr_pad_string ((
unsigned char *) &(s1[copy_size]), pad1_length, codeset);
9323 memcpy ((
char *) cat_ptr, (
char *) s2, cat_size);
9324 (void)
qstr_pad_string ((
unsigned char *) &cat_ptr[cat_size], pad2_length, codeset);
9329 return error_status;
9358 int s2_length,
int s2_precision,
DB_TYPE s2_type,
INTL_CODESET codeset,
unsigned char **result,
9361 int copy_length, copy_size;
9362 int pad1_length, pad2_length;
9363 int length_left, cat_length, cat_size;
9364 int s1_logical_length, s2_logical_length;
9365 int s1_size, s2_size;
9366 unsigned char *cat_ptr;
9382 s1_logical_length = s1_precision;
9386 s1_logical_length = s1_length;
9392 s2_logical_length = s2_precision;
9396 s2_logical_length = s2_length;
9412 *result_length = s1_logical_length + s2_logical_length;
9419 intl_char_size ((
unsigned char *) s1, s1_logical_length, codeset, &s1_size);
9420 intl_char_size ((
unsigned char *) s2, s2_logical_length, codeset, &s2_size);
9424 s1_size = s1_logical_length;
9428 s2_size = s2_logical_length;
9431 *result_size = s1_size + s2_size;
9448 if (*result ==
NULL)
9459 copy_length = MIN (s1_length, *result_length);
9460 intl_char_size ((
unsigned char *) s1, copy_length, codeset, ©_size);
9462 pad1_length = MIN (s1_logical_length, *result_length) - copy_length;
9463 length_left = *result_length - copy_length - pad1_length;
9471 cat_length = MIN (s2_length, length_left);
9472 intl_char_size ((
unsigned char *) s2, cat_length, codeset, &cat_size);
9474 pad2_length = length_left - cat_length;
9479 memcpy ((
char *) *result, (
char *) s1, copy_size);
9480 cat_ptr =
qstr_pad_string ((
unsigned char *) &((*result)[copy_size]), pad1_length, codeset);
9482 memcpy ((
char *) cat_ptr, (
char *) s2, cat_size);
9483 (void)
qstr_pad_string ((
unsigned char *) &cat_ptr[cat_size], pad2_length, codeset);
9498 *result_length = MIN ((s1_logical_length + s2_logical_length),
QSTR_MAX_PRECISION (s1_type));
9509 intl_char_size ((
unsigned char *) s1, s1_logical_length, codeset, &s1_size);
9510 intl_char_size ((
unsigned char *) s2, s2_logical_length, codeset, &s2_size);
9514 s1_size = s1_logical_length;
9518 s2_size = s2_logical_length;
9521 *result_size = s1_size + s2_size;
9530 if (*result ==
NULL)
9543 copy_length = s1_length;
9544 if (copy_length > *result_length)
9546 copy_length = *result_length;
9548 if (
varchar_truncated ((
unsigned char *) s1, s1_type, s1_length, copy_length, codeset))
9553 intl_char_size ((
unsigned char *) s1, copy_length, codeset, ©_size);
9555 pad1_length = MIN (s1_logical_length, *result_length) - copy_length;
9556 length_left = *result_length - copy_length - pad1_length;
9561 cat_length = s2_length;
9562 if (cat_length > (*result_length - copy_length))
9564 cat_length = *result_length - copy_length;
9566 if (
varchar_truncated ((
unsigned char *) s2, s2_type, s2_length, cat_length, codeset))
9571 intl_char_size ((
unsigned char *) s2, cat_length, codeset, &cat_size);
9573 pad2_length = length_left - cat_length;
9578 memcpy ((
char *) *result, (
char *) s1, copy_size);
9579 cat_ptr =
qstr_pad_string ((
unsigned char *) &((*result)[copy_size]), pad1_length, codeset);
9581 memcpy ((
char *) cat_ptr, (
char *) s2, cat_size);
9582 (void)
qstr_pad_string ((
unsigned char *) &cat_ptr[cat_size], pad2_length, codeset);
9587 return error_status;
9593 return error_status;
9600 return error_status;
9628 const unsigned char *s2,
int s2_length,
int s2_precision,
DB_TYPE s2_type,
unsigned char **result,
9631 int s1_size, s2_size;
9632 int copy_length, cat_length;
9633 int s1_logical_length, s2_logical_length;
9658 s1_logical_length = s1_precision;
9662 s1_logical_length = s1_length;
9668 s2_logical_length = s2_precision;
9672 s2_logical_length = s2_length;
9686 *result_length = s1_logical_length + s2_logical_length;
9703 if (*result ==
NULL)
9712 (void) memset ((
char *) *result, (int) 0, (
int) *result_size);
9718 copy_length = s1_length;
9719 if (copy_length > *result_length)
9721 copy_length = *result_length;
9730 cat_length = s2_length;
9731 if (cat_length > (*result_length - s1_logical_length))
9733 cat_length = *result_length - s1_logical_length;
9742 bit_ncat (*result, 0, (
unsigned char *) s1, copy_length);
9743 bit_ncat (*result, s1_logical_length, (
unsigned char *) s2, cat_length);
9756 *result_length = s1_logical_length + s2_logical_length;
9768 if (*result ==
NULL)
9777 (void) memset ((
char *) *result, (int) 0, (
int) *result_size);
9786 copy_length = s1_length;
9787 if (copy_length > *result_length)
9789 copy_length = *result_length;
9797 cat_length = s2_length;
9798 if (cat_length > (*result_length - copy_length))
9800 cat_length = *result_length - copy_length;
9812 bit_ncat (*result, 0, (
unsigned char *) s1, copy_length);
9813 bit_ncat (*result, copy_length, s2, cat_length);
9816 return error_status;
9822 return error_status;
9830 return error_status;
9863 unsigned char pad[2];
9864 int pad_size = 0, trim_length, trim_size;
9867 bool truncated =
false;
9870 intl_char_size ((
unsigned char *) s, s_length, codeset, &s_size);
9872 qstr_trim_trailing (pad, pad_size, s, s_type, s_length, s_size, codeset, &trim_length, &trim_size,
true);
9874 if (trim_length > used_chars)
9912 bool truncated =
false;
9917 if (last_set_bit > used_bits)
9947 bit_ncat (
unsigned char *r,
int offset,
const unsigned char *s,
int n)
9949 int i, copy_size, cat_size, total_size;
9950 unsigned int remainder, shift_amount;
9951 unsigned short tmp_shifted;
9962 memcpy ((
char *) &r[copy_size], (
char *) s, cat_size);
9966 int start_byte = copy_size - 1;
9969 mask = 0xff << shift_amount;
9977 for (i = start_byte; i < total_size; i++)
9979 tmp_shifted = (
unsigned short) (s[i - start_byte]);
9980 tmp_shifted = tmp_shifted << shift_amount;
9981 r[
i] = (r[
i] & mask) | (tmp_shifted >>
BYTE_SIZE);
9983 if (i < (total_size - 1))
9985 r[i + 1] = (
unsigned char) (tmp_shifted & (
unsigned short) 0xff);
9994 r[total_size - 1] &= mask;
10019 int byte_num, bit_num, inter_bit_num;
10026 while ((byte_num >= 0) && ((
int) (s[byte_num]) == 0))
10042 inter_bit_num = (int)
qstr_ffs ((
int) (s[byte_num]));
10073 int src_padded_length, copy_size, dest_size, copy_length;
10084 src_padded_length = src_precision;
10088 src_padded_length = src_length;
10095 if (src_padded_length > dest_precision)
10098 i = dest_precision / 8;
10099 if (src[i] & (0x80 >> (dest_precision % 8)) || ((src[i] << (dest_precision % 8)) & 0xff))
10106 for (; i < (src_padded_length + 4) / 8; i++)
10115 src_padded_length = dest_precision;
10118 copy_length = MIN (src_length, src_padded_length);
10132 *dest_length = dest_precision;
10136 *dest_length = MIN (src_padded_length, dest_precision);
10149 bit_ncat (*dest, 0, src, copy_length);
10150 (void) memset ((
char *) &((*dest)[copy_size]), (
int) 0, (dest_size - copy_size));
10153 return error_status;
10178 INTL_CODESET dest_codeset,
unsigned char **dest,
int *dest_length,
int *dest_size,
int dest_precision,
10181 int src_padded_length, copy_length, copy_size;
10183 unsigned char *end_of_string;
10195 src_padded_length = src_precision;
10199 src_padded_length = src_length;
10208 if (src_padded_length > dest_precision)
10210 src_padded_length = dest_precision;
10211 if ((src_length > src_padded_length)
10212 && (
varchar_truncated (src, src_type, src_length, src_padded_length, src_codeset)))
10218 copy_length = MIN (src_length, src_padded_length);
10231 *dest_length = dest_precision;
10235 *dest_length = src_padded_length;
10245 intl_char_size ((
unsigned char *) src, copy_length, src_codeset, ©_size);
10246 if (copy_size > dest_precision)
10249 copy_size = dest_precision;
10251 copy_length = copy_size;
10254 *dest_length = copy_length;
10259 copy_size = copy_length;
10265 intl_char_size ((
unsigned char *) src, copy_length, src_codeset, ©_size);
10272 unsigned char pad[2];
10276 alloc_size = MAX (alloc_size, copy_size + (*dest_length - copy_length) * pad_size);
10292 int conv_status = 0;
10294 assert (copy_size >= 0);
10295 if (copy_size == 0)
10297 assert (alloc_size > 0);
10306 copy_size = conv_size;
10314 copy_size = conv_size;
10322 copy_size = conv_size;
10330 copy_size = conv_size;
10338 copy_size = conv_size;
10346 copy_size = conv_size;
10350 assert (copy_size <= alloc_size);
10365 copy_size = conv_size;
10369 (void) memcpy ((
char *) *dest, (
char *) src, (
int) copy_size);
10374 qstr_pad_string ((
unsigned char *) &((*dest)[copy_size]), (*dest_length - copy_length), dest_codeset);
10375 *dest_size =
CAST_STRLEN (end_of_string - (*dest));
10377 if (conv_status != 0)
10380 (void)
intl_char_size (*dest, *dest_length, dest_codeset, dest_size);
10381 end_of_string = (*dest) + *dest_size;
10382 *end_of_string =
'\0';
10385 assert (*dest_size <= alloc_size);
10388 return error_status;
10420 qstr_position (
const char *sub_string,
const int sub_size,
const int sub_length,
const char *src_string,
10421 const char *src_end,
const char *src_string_bound,
int src_length,
int coll_id,
bool is_forward_search,
10429 if (sub_length == 0)
10435 int i, num_searches, current_position, result;
10436 const unsigned char *ptr;
10454 num_searches = src_length;
10458 num_searches = src_length - sub_length + 1;
10459 if (sub_length > src_length)
10462 return error_status;
10473 const unsigned char *usub_string =
REINTERPRET_CAST (
const unsigned char *, sub_string);
10474 const unsigned char *usrc_end =
REINTERPRET_CAST (
const unsigned char *, src_end);
10475 const unsigned char *usrc_string =
REINTERPRET_CAST (
const unsigned char *, src_string);
10476 const unsigned char *usrc_string_bound =
REINTERPRET_CAST (
const unsigned char *, src_string_bound);
10479 current_position = 0;
10482 for (i = 0; i < num_searches; i++)
10485 current_position++;
10491 if (is_forward_search)
10493 if (ptr >= usrc_string_bound)
10503 if (ptr > usrc_string_bound)
10505 ptr =
intl_prev_char (ptr, usrc_string_bound, codeset, &char_size);
10519 *position = current_position;
10523 return error_status;
10548 qstr_bit_position (
const unsigned char *sub_string,
int sub_length,
const unsigned char *src_string,
int src_length,
10555 if (sub_length == 0)
10560 else if (sub_length > src_length)
10567 int i, num_searches, result;
10568 int sub_size, sub_remainder, shift_amount;
10569 unsigned char *ptr, *tmp_string, tmp_byte, mask;
10571 num_searches = src_length - sub_length + 1;
10574 sub_remainder = sub_length %
BYTE_SIZE;
10575 shift_amount =
BYTE_SIZE - sub_remainder;
10576 mask = 0xff << shift_amount;
10586 if (tmp_string ==
NULL)
10593 ptr = (
unsigned char *) src_string;
10599 (void) memcpy ((
char *) tmp_string, (
char *) ptr, sub_size);
10603 while ((i < num_searches) && (result != 0))
10606 tmp_byte = tmp_string[sub_size - 1];
10607 tmp_string[sub_size - 1] &= mask;
10610 result = memcmp (sub_string, tmp_string, sub_size);
10613 tmp_string[sub_size - 1] = tmp_byte;
10627 memcpy (tmp_string, ptr, sub_size);
10645 return error_status;
10670 int i, highest_bit;
10673 highest_bit = ((bit_string[0] & 0x80) != 0);
10674 bit_string[0] = bit_string[0] << 1;
10676 for (i = 1; i < bit_string_size; i++)
10678 if (bit_string[i] & 0x80)
10680 bit_string[i - 1] |= 0x01;
10683 bit_string[
i] = bit_string[
i] << 1;
10686 return highest_bit;
10712 unsigned char **r,
int *r_length,
int *r_size)
10715 const unsigned char *sub;
10716 int src_size, leading_bytes;
10720 intl_char_size ((
unsigned char *) src, src_length, codeset, &src_size);
10735 if (start > src_length)
10741 if ((length < 0) || ((start + length - 1) > src_length))
10743 length = src_length - start + 1;
10746 *r_length = length;
10755 intl_char_size ((
unsigned char *) src, (start - 1), codeset, &leading_bytes);
10756 sub = &(src[leading_bytes]);
10757 intl_char_size ((
unsigned char *) sub, *r_length, codeset, r_size);
10767 (void) memcpy (*r, sub, *r_size);
10770 return error_status;
10795 qstr_bit_substring (
const unsigned char *src,
int src_length,
int start,
int length,
unsigned char **r,
int *r_length)
10797 int src_size, sub_size, rem;
10798 unsigned char trailing_mask;
10816 if (start > src_length)
10822 if ((length < 0) || ((start + length - 1) > src_length))
10824 length = src_length - start + 1;
10828 *r_length = length;
10833 trailing_mask = 0xff;
10837 trailing_mask = 0xff << (
BYTE_SIZE - rem);
10852 left_nshift (src, src_size, (start - 1), *r, sub_size);
10853 (*r)[sub_size - 1] &= trailing_mask;
10856 return error_status;
10884 left_nshift (
const unsigned char *bit_string,
int bit_string_size,
int shift_amount,
unsigned char *r,
int r_size)
10886 int i, shift_bytes, shift_bits, adj_bit_string_size;
10887 const unsigned char *ptr;
10889 shift_bytes = shift_amount /
BYTE_SIZE;
10891 ptr = &(bit_string[shift_bytes]);
10893 adj_bit_string_size = bit_string_size - shift_bytes;
10895 for (i = 0; i < r_size; i++)
10897 if (i < (adj_bit_string_size - 1))
10899 r[
i] = ((ptr[
i] << shift_bits) | (ptr[i + 1] >> (
BYTE_SIZE - shift_bits)));
10901 else if (i == (adj_bit_string_size - 1))
10903 r[
i] = (ptr[
i] << shift_bits);
10943 unsigned int uv = (
unsigned int) v;
10945 nbits =
sizeof (int) * 8;
10949 while ((i < nbits) && (position == 0))
10983 if ((hex_char >=
'0') && (hex_char <=
'9'))
10985 return (hex_char -
'0');
10987 else if ((hex_char >=
'A') && (hex_char <=
'F'))
10989 return (hex_char -
'A' + 10);
10991 else if ((hex_char >=
'a') && (hex_char <=
'f'))
10993 return (hex_char -
'a' + 10);
11017 dest->tm_year = year - 1900;
11021 dest->tm_year = -1;
11023 dest->tm_mon = month - 1;
11024 dest->tm_mday = day;
11025 dest->tm_hour = hour;
11026 dest->tm_min =
min;
11027 dest->tm_sec = sec;
11028 dest->tm_isdst = -1;
11041 if (time_argument !=
NULL)
11044 if (time_argument->tm_year < 0 || time_argument->tm_year > 9999 || time_argument->tm_mon < 0
11045 || time_argument->tm_mon > 11 || time_argument->tm_mday < 1 || time_argument->tm_mday > 31
11046 || time_argument->tm_hour < 0 || time_argument->tm_hour > 23 || time_argument->tm_min < 0
11047 || time_argument->tm_min > 59 || time_argument->tm_sec < 0 || time_argument->tm_sec > 59)
11051 result = mktime (time_argument);
11055 result = time (
NULL);
11058 if (result < (time_t) 0)
11062 return (
long) result;
11065 #if defined (ENABLE_UNUSED_FUNCTION) 11079 parse_for_next_int (
char **ch,
char *output)
11086 memset (buf, 0,
sizeof (buf));
11089 while (**ch ==
'0')
11107 strcpy (output, buf);
11140 return error_status;
11204 datetime.
time /= 1000;
11209 datetime.
time /= 1000;
11215 datetime.
date = date;
11224 return error_status;
11233 return error_status;
11258 datetime.
time /= 1000;
11262 return error_status;
11315 bool same_argument = (src_datetime == result_timestamp);
11333 temp_p = result_timestamp;
11344 tmp_date = tmp_datetime->
date;
11345 tmp_time = tmp_datetime->
time / 1000;
11375 int month = 0, day = 0, year = 0;
11376 int second = 0, minute = 0, hour = 0;
11378 int day_of_year = 0;
11394 if (year == 0 && month == 0 && day == 0 && hour == 0 && minute == 0 && second == 0 && ms == 0)
11416 return error_status;
11419 #if !defined (SERVER_MODE) 11435 int month = 0, day = 0, year = 0;
11436 int second = 0, minute = 0, hour = 0;
11454 if (year == 0 && month == 0 && day == 0 && hour == 0 && minute == 0 && second == 0 && ms == 0)
11467 if (day_of_week == 0)
11503 return error_status;
11518 int month = 0, day = 0, year = 0;
11519 int second = 0, minute = 0, hour = 0;
11521 char const *endp =
NULL;
11543 if (year == 0 && month == 0 && day == 0 && hour == 0 && minute == 0 && second == 0 && ms == 0)
11549 else if (month == 0)
11554 else if (month < 0 || month > 12)
11561 const int quarter = (month - 1) / 3 + 1;
11581 int month = 0, day = 0, year = 0;
11582 int second = 0, minute = 0, hour = 0;
11584 int leap_years = 0, total_days = 0, days_this_year = 0;
11600 if (year == 0 && month == 0 && day == 0 && hour == 0 && minute == 0 && second == 0 && ms == 0)
11608 total_days = year * 365 + leap_years + days_this_year;
11622 return error_status;
11642 int julian_day = 0;
11657 if (int_value < 366)
11666 julian_day += int_value - 364;
11693 int year_value = 0;
11694 int days_value = 0;
11695 int julian_day = 0;
11696 int year = 0, month = 0, day = 0, week = 0;
11715 if (days_value <= 0 || year_value < 0)
11722 if (year_value < 70)
11724 year_value += 2000;
11726 else if (year_value >= 70 && year_value < 100)
11728 year_value += 1900;
11732 julian_day += days_value - 1;
11771 int hour = 0, minute = 0, second = 0;
11785 if (minute >= 60 || minute < 0 || second >= 60 || second < 0 || hour >= 24 || hour < 0)
11848 hours = int_value / 3600;
11849 minutes = (int_value - hours * 3600) / 60;
11850 seconds = int_value % 60;
11886 int second = 0, minute = 0, hour = 0, millisecond = 0;
11887 int total_seconds = 0;
11909 total_seconds = hour * 3600 + minute * 60 + second;
11943 *result = (int) ((x) > 0 ? ((x) + .5) : ((x) - .5));
11950 *result = (int) ((x) > 0 ? ((x) + .5) : ((x) - .5));
11958 *result = (int) ((x) > 0 ? ((x) + .5) : ((x) - .5));
11969 *result = (int) ((x) > 0 ? ((x) + .5) : ((x) - .5));
11984 return error_status;
11988 *result = (int) ((x) > 0 ? ((x) + .5) : ((x) - .5));
11995 int year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0;
12004 *result = (int) (year * 10000 * month * 100 * day);
12012 int year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0;
12022 *result = (int) (year * 10000000000 + month * 100000000 + day * 1000000 + hour * 10000 + minute * 100 + second);
12028 int hour = 0, minute = 0, second = 0, millisecond = 0;
12036 *result = hour * 10000 + minute * 100 + second;
12062 int month = 0, day = 0, year = 0;
12063 int second = 0, minute = 0, hour = 0;
12066 int week_number = 0;
12082 if (year == 0 && month == 0 && day == 0 && hour == 0 && minute == 0 && second == 0 && ms == 0)
12102 if (calc_mode < 0 || calc_mode > 7)
12122 return error_status;
12125 #if !defined (SERVER_MODE) 12138 int month = 0, day = 0, year = 0;
12139 int second = 0, minute = 0, hour = 0;
12196 int second = 0, minute = 0, hour = 0, millisecond = 0;
12263 DB_TYPE res_type, format_type;
12264 const char *format_s, *strend;
12268 int h, mi, s, ms, year, month, day;
12269 char format_specifiers[256][64];
12270 int is_date, is_datetime, is_timestamp, is_time;
12278 char hours_or_minutes[4];
12279 int tzh = 0, tzm = 0;
12280 bool is_valid_tz =
false;
12282 const DB_VALUE *time_value = src_value;
12286 is_date = is_datetime = is_timestamp = is_time = 0;
12287 h = mi = s = ms = 0;
12290 memset (hours_or_minutes, 0,
sizeof (hours_or_minutes));
12291 memset (format_specifiers, 0,
sizeof (format_specifiers));
12337 time_value = &new_time_value;
12364 is_valid_tz =
true;
12387 is_valid_tz =
true;
12417 is_valid_tz =
true;
12437 is_valid_tz =
true;
12459 is_valid_tz =
true;
12488 is_valid_tz =
true;
12511 is_valid_tz =
true;
12522 bool is_time =
false;
12530 if (is_time ==
false)
12562 sprintf (format_specifiers[
'f'],
"%03d", ms);
12567 sprintf (format_specifiers[
'H'],
"-%02d", -h);
12571 sprintf (format_specifiers[
'H'],
"%02d", h);
12579 sprintf (format_specifiers[
'h'],
"%02d", (h % 12 == 0) ? 12 : (h % 12));
12582 sprintf (format_specifiers[
'I'],
"%02d", (h % 12 == 0) ? 12 : (h % 12));
12585 sprintf (format_specifiers[
'i'],
"%02d", mi);
12588 sprintf (format_specifiers[
'k'],
"%d", h);
12591 sprintf (format_specifiers[
'l'],
"%d", (h % 12 == 0) ? 12 : (h % 12));
12597 sprintf (format_specifiers[
'r'],
"%02d:%02d:%02d %s", (h % 12 == 0) ? 12 : (h % 12), mi, s,
12601 sprintf (format_specifiers[
'S'],
"%02d", s);
12604 sprintf (format_specifiers[
's'],
"%02d", s);
12607 sprintf (format_specifiers[
'T'],
"%02d:%02d:%02d", h, mi, s);
12611 switch (format_type)
12635 memset (res, 0, len);
12638 strend = format_s + format_s_len;
12640 while (format_s < strend)
12660 if (ch ==
'T' && format_s + 2 < strend && *(format_s + 1) ==
'Z' 12661 && (*(format_s + 2) ==
'R' || *(format_s + 2) ==
'D' || *(format_s + 2) ==
'H' || *(format_s + 2) ==
'M'))
12663 if (is_valid_tz ==
false)
12673 switch (*(format_s + 2))
12684 sprintf (hours_or_minutes,
"%02d", tzh);
12688 sprintf (hours_or_minutes,
"%c%02d",
'-', -tzh);
12690 strcat (res, hours_or_minutes);
12695 sprintf (hours_or_minutes,
"%02d", tzm);
12699 sprintf (hours_or_minutes,
"%c%02d",
'-', -tzm);
12701 strcat (res, hours_or_minutes);
12707 else if (
strlen (format_specifiers[(
unsigned char) ch]) == 0)
12714 strcat (res, format_specifiers[(
unsigned char) ch]);
12729 if (
strlen (res) + 16 > len)
12738 memset (res2, 0, len);
12739 strcpy (res2, res);
12749 memset (res, 0, len);
12750 strcpy (res, res2);
12763 return error_status;
12778 return error_status;
12802 int year, month, day, hour, minute, second, millisecond;
12803 int h = 0, mi = 0, s = 0, ms = 0;
12805 double amount_d = 0;
12827 year = month = day = hour = minute = second = millisecond = 0;
12833 return error_status;
12836 if (src_time2 ==
NULL)
12838 goto encode_result;
12890 ms = ((long) (amount_d * 1000.0)) % 1000;
12909 if ((mi < 0 || mi > 59) || (s < 0 || s > 59))
12920 db_datetime_encode (&datetime, month, day, year, hour, minute, second, millisecond);
12933 return error_status;
12943 return error_status;
12954 int month, day, year;
12955 int old_month, old_year;
12967 return error_status;
12981 if ((month + n) >= 0)
12983 year = year + (month + n) / 12;
12984 month = (month + n) % 12;
12985 year = (month == 0) ? year - 1 : year;
12986 month = (month == 0) ? 12 : month;
12990 year = year + (month + n - 12) / 12;
12991 month = 12 + (month + n) % 12;
12999 if (0 < year && year < 10000)
13007 return error_status;
13009 return error_status;
13019 int month, day, year;
13028 return error_status;
13033 if (month == 0 && day == 0 && year == 0)
13049 return error_status;
13059 double result_double;
13062 DB_DATE *start_date, *end_date;
13073 return error_status;
13082 db_date_decode (start_date, &start_month, &start_day, &start_year);
13085 if (start_day == end_day
13088 result_double = (double) (start_year * 12 + start_month - end_year * 12 - end_month);
13093 (double) ((start_year - end_year) * 12.0) + (double) (start_month - end_month) +
13094 (double) ((start_day - end_day) / 31.0);
13099 return error_status;
13110 struct tm *c_time_struct, tm_val;
13119 if (time (&tloc) == -1)
13123 return error_status;
13126 c_time_struct = localtime_r (&tloc, &tm_val);
13127 if (c_time_struct ==
NULL)
13131 return error_status;
13134 db_make_date (result_date, c_time_struct->tm_mon + 1, c_time_struct->tm_mday, c_time_struct->tm_year + 1900);
13136 return error_status;
13147 struct tm *c_time_struct, tm_val;
13156 if (time (&tloc) == -1)
13160 return error_status;
13163 c_time_struct = localtime_r (&tloc, &tm_val);
13164 if (c_time_struct ==
NULL)
13168 return error_status;
13170 db_make_time (result_time, c_time_struct->tm_hour, c_time_struct->tm_min, c_time_struct->tm_sec);
13172 return error_status;
13193 return error_status;
13198 return error_status;
13212 struct tm *c_time_struct, tm_val;
13221 c_time_struct = localtime_r (&sec, &tm_val);
13222 if (c_time_struct ==
NULL)
13226 return error_status;
13229 db_datetime_encode (&datetime, c_time_struct->tm_mon + 1, c_time_struct->tm_mday, c_time_struct->tm_year + 1900,
13230 c_time_struct->tm_hour, c_time_struct->tm_min, c_time_struct->tm_sec, millisec);
13233 return error_status;
13253 struct tm *c_time_struct, tm_val;
13260 c_time_struct = localtime_r (&sec, &tm_val);
13261 if (c_time_struct ==
NULL)
13265 return error_status;
13268 db_datetime_encode (&datetime, c_time_struct->tm_mon + 1, c_time_struct->tm_mday, c_time_struct->tm_year + 1900,
13269 c_time_struct->tm_hour, c_time_struct->tm_min, c_time_struct->tm_sec, millisec);
13274 return error_status;
13323 if (year % 100 == 0)
13325 if (year % 400 == 0)
13397 return number_to_char (src_value, format_or_length, lang_str, result_str, domain);
13401 return date_to_char (src_value, format_or_length, lang_str, result_str, domain);
13405 if (domain ==
NULL)
13410 return error_status;
13419 return error_status;
13426 return error_status;
13430 #define MAX_STRING_DATE_TOKEN_LEN LOC_DATA_MONTH_WIDE_SIZE 13432 {
"January",
"February",
"March",
"April",
13433 "May",
"June",
"July",
"August",
"September",
"October",
13434 "November",
"December"},
13462 {
"January",
"February",
"March",
"April",
13463 "May",
"June",
"July",
"August",
"September",
"October",
13464 "November",
"December"},
13481 "May" "\xc4\xb1" "s",
13484 "A" "\xc4\x9f" "ustos",
13485 "Eyl" "\xc3\xbc" "l",
13487 "Kas" "\xc4\xb1" "m",
13488 "Aral" "\xc4\xb1" "k"}
13492 {
"January",
"February",
"March",
"April",
13493 "May",
"June",
"July",
"August",
"September",
"October",
13494 "November",
"December"},
13522 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11},
13523 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11},
13524 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
13528 {
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
13529 "Thursday",
"Friday",
"Saturday"},
13537 {
"Pazar",
"Pazartesi",
"Sali",
13539 "Persembe",
"Cuma",
13544 {
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
13545 "Thursday",
"Friday",
"Saturday"},
13546 {
"\xec\x9d\xbc\xec\x9a\x94\xec\x9d\xbc",
13547 "\xec\x9b\x94\xec\x9a\x94\xec\x9d\xbc",
13548 "\xed\x99\x94\xec\x9a\x94\xec\x9d\xbc",
13549 "\xec\x88\x98\xec\x9a\x94\xec\x9d\xbc",
13550 "\xeb\xaa\xa9\xec\x9a\x94\xec\x9d\xbc",
13551 "\xea\xb8\x88\xec\x9a\x94\xec\x9d\xbc",
13552 "\xed\x86\xa0\xec\x9a\x94\xec\x9d\xbc"},
13553 {
"Pazar",
"Pazartesi",
"Sal\xc4\xb1",
13554 "\xc3\x87" "ar" "\xc5\x9f" "amba",
13555 "Per" "\xc5\x9f" "embe",
"Cuma",
13560 {
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
13561 "Thursday",
"Friday",
"Saturday"},
13562 {
"\xc0\xcf\xbf\xe4\xc0\xcf",
13563 "\xbf\xf9\xbf\xe4\xc0\xcf",
13564 "\xc8\xad\xbf\xe4\xc0\xcf",
13565 "\xbc\xf6\xbf\xe4\xc0\xcf",
13566 "\xb8\xf1\xbf\xe4\xc0\xcf",
13567 "\xb1\xdd\xbf\xe4\xc0\xcf",
13568 "\xc5\xe4\xbf\xe4\xc0\xcf"},
13569 {
"Pazar",
"Pazartesi",
"Sali",
13571 "Persembe",
"Cuma",
13576 {0, 1, 2, 3, 4, 5, 6},
13577 {0, 1, 2, 3, 4, 5, 6},
13578 {1, 0, 2, 3, 4, 6, 5}
13582 {
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
13583 "Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"},
13611 {
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
13612 "Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"},
13632 "A" "\xc4\x9f" "s",
13640 {
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
13641 "Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"},
13669 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11},
13670 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11},
13671 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
13675 {
"Sun",
"Mon",
"Tue",
"Wed",
"Thu",
"Fri",
"Sat"},
13689 {
"Sun",
"Mon",
"Tue",
"Wed",
"Thu",
"Fri",
"Sat"},
13703 {
"Sun",
"Mon",
"Tue",
"Wed",
"Thu",
"Fri",
"Sat"},
13717 {0, 1, 2, 3, 4, 5, 6},
13718 {0, 1, 2, 3, 4, 5, 6},
13719 {0, 1, 2, 3, 4, 5, 6}
13722 #define AM_NAME_KR "ojeon" 13723 #define PM_NAME_KR "ohu" 13725 #define AM_NAME_KR_EUC "\xbf\xc0\xc0\xfc" 13726 #define PM_NAME_KR_EUC "\xbf\xc0\xc8\xc4" 13728 #define AM_NAME_KR_UTF8 "\xec\x98\xa4\xec\xa0\x84" 13729 #define PM_NAME_KR_UTF8 "\xec\x98\xa4\xed\x9b\x84" 13732 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11},
13733 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11},
13734 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
13740 {
"am",
"pm",
"Am",
"Pm",
"AM",
"PM",
13741 "a.m.",
"p.m.",
"A.m.",
"P.m.",
"A.M.",
"P.M."},
13745 {
"am",
"pm",
"Am",
"Pm",
"AM",
"PM",
13746 "a.m.",
"p.m.",
"A.m.",
"P.m.",
"A.M.",
"P.M."},
13750 {
"am",
"pm",
"Am",
"Pm",
"AM",
"PM",
13751 "a.m.",
"p.m.",
"A.m.",
"P.m.",
"A.M.",
"P.M."},
13757 {
"am",
"pm",
"Am",
"Pm",
"AM",
"PM",
13758 "a.m.",
"p.m.",
"A.m.",
"P.m.",
"A.M.",
"P.M."},
13762 {
"am",
"pm",
"Am",
"Pm",
"AM",
"PM",
13763 "a.m.",
"p.m.",
"A.m.",
"P.m.",
"A.M.",
"P.M."},
13769 {
"am",
"pm",
"Am",
"Pm",
"AM",
"PM",
13770 "a.m.",
"p.m.",
"A.m.",
"P.m.",
"A.M.",
"P.M."},
13780 const char *cur_format_str_ptr, *next_format_str_ptr;
13782 const char *last_src, *last_format;
13786 int cur_format_size;
13788 int month = 0, day = 0, year = 0, day_of_the_week = 0, week = -1;
13789 int monthcount = 0, daycount = 0, yearcount = 0, day_of_the_weekcount = 0;
13792 bool no_user_format;
13796 char stack_buf_str[64], stack_buf_format[64];
13797 char *initial_buf_str =
NULL, *initial_buf_format =
NULL;
13798 bool do_free_buf_str =
false, do_free_buf_format =
false;
13800 bool has_user_format =
false;
13812 return error_status;
13822 return error_status;
13829 return error_status;
13836 return error_status;
13845 return error_status;
13856 cs = initial_buf_str;
13857 last_src = cs +
strlen (cs);
13860 last_src = last_src + 1;
13862 no_user_format = (format_str ==
NULL) || (!has_user_format);
13864 if (no_user_format)
13867 const char *default_format_str;
13878 if (default_format_str ==
NULL)
13885 db_make_char (&default_format, strlen (default_format_str), default_format_str,
13887 format_str = &default_format;
13921 &initial_buf_format, &do_free_buf_format);
13927 cur_format_str_ptr = initial_buf_format;
13928 last_format = cur_format_str_ptr +
strlen (cur_format_str_ptr);
13931 while (cs < last_src && strchr (
WHITE_CHARS, *cs))
13937 while (cur_format_str_ptr < last_format && strchr (
WHITE_CHARS, *cur_format_str_ptr))
13939 cur_format_str_ptr++;
13942 while (cs < last_src)
13944 int token_size,
cmp, cs_byte_size;
13949 switch (cur_format)
13952 if (yearcount != 0)
13975 if (yearcount != 0)
14004 year += (i / 100) * 100;
14008 if (monthcount != 0)
14029 if (month < 1 || month > 12)
14038 if (monthcount != 0)
14066 if (monthcount != 0)
14118 if (day < 0 || day > 31)
14127 if (codeset != frmt_codeset)
14133 cmp =
intl_case_match_tok (date_lang_id, codeset, (
unsigned char *) (cur_format_str_ptr + 1),
14134 (
unsigned char *) cs, cur_format_size - 2, strlen (cs), &cs_byte_size);
14143 cs += cs_byte_size;
14147 if (strncasecmp ((
const char *) cur_format_str_ptr, (
const char *) cs, cur_format_size) != 0)
14154 cs += cur_format_size;
14165 if (day_of_the_weekcount != 0)
14173 day_of_the_weekcount++;
14183 if (day_of_the_week == 0)
14192 if (day_of_the_weekcount != 0)
14200 day_of_the_weekcount++;
14212 if (day_of_the_week == 0)
14221 if (day_of_the_weekcount != 0)
14229 day_of_the_weekcount++;
14242 if (day_of_the_week < 1 || day_of_the_week > 7)
14260 while (cs < last_src && strchr (
WHITE_CHARS, *cs))
14265 cur_format_str_ptr = next_format_str_ptr;
14268 while (cur_format_str_ptr < last_format && strchr (
WHITE_CHARS, *cur_format_str_ptr))
14270 cur_format_str_ptr++;
14273 if (last_format == next_format_str_ptr)
14275 while (cs < last_src && strchr (
WHITE_CHARS, *cs))
14280 if (cs != last_src)
14292 if (cs != last_src || cur_format_str_ptr != last_format)
14301 day = (daycount == 0) ? 1 : day;
14302 week = (day_of_the_weekcount == 0) ? -1 : day_of_the_week - 1;
14320 if (do_free_buf_str)
14325 if (do_free_buf_format)
14331 return error_status;
14343 const char *cur_format_str_ptr, *next_format_str_ptr;
14345 const char *last_format, *last_src;
14349 int cur_format_size;
14351 int second = 0, minute = 0, hour = 0;
14352 int time_count = 0;
14353 int mil_time_count = 0;
14357 bool no_user_format;
14361 char stack_buf_str[64], stack_buf_format[64];
14362 char *initial_buf_str =
NULL, *initial_buf_format =
NULL;
14363 bool do_free_buf_str =
false, do_free_buf_format =
false;
14365 bool has_user_format =
false;
14367 int tzh = 0, tzm = 0;
14368 bool set_tzh =
false, set_tzm =
false;
14369 int start_tzr = -1, start_tzd = -1;
14370 int len_tzr = -1, len_tzd = -1;
14372 bool is_negative_tzd =
false;
14382 return error_status;
14393 return error_status;
14400 return error_status;
14407 return error_status;
14416 return error_status;
14426 cs = initial_buf_str;
14427 last_src = cs +
strlen (cs);
14430 last_src = last_src + 1;
14432 no_user_format = (format_str ==
NULL) || (!has_user_format);
14434 if (no_user_format)
14437 const char *default_format_str;
14450 if (default_format_str ==
NULL)
14456 db_make_char (&default_format, strlen (default_format_str), default_format_str,
14458 format_str = &default_format;
14492 &initial_buf_format, &do_free_buf_format);
14498 cur_format_str_ptr = initial_buf_format;
14499 last_format = cur_format_str_ptr +
strlen (cur_format_str_ptr);
14502 while (cs < last_src && strchr (
WHITE_CHARS, *cs))
14508 while (cur_format_str_ptr < last_format && strchr (
WHITE_CHARS, *cur_format_str_ptr))
14510 cur_format_str_ptr++;
14513 while (cs < last_src)
14515 int cmp, cs_byte_size, token_size;
14519 cur_format =
get_next_format (cur_format_str_ptr, frmt_codeset, type, &cur_format_size, &next_format_str_ptr);
14520 switch (cur_format)
14526 if (mil_time_count != 0)
14566 if (time_count != 0)
14586 if (hour < 1 || hour > 12)
14595 if (time_count != 0)
14606 if (mil_time_count != 0)
14626 if (hour < 0 || hour > 23)
14644 if (minute < 0 || minute > 59)
14662 if (second < 0 || second > 59)
14671 if (codeset != frmt_codeset)
14677 cmp =
intl_case_match_tok (date_lang_id, codeset, (
unsigned char *) (cur_format_str_ptr + 1),
14678 (
unsigned char *) cs, cur_format_size - 2, strlen (cs), &cs_byte_size);
14687 cs += cs_byte_size;
14691 if (strncasecmp ((
const char *) cur_format_str_ptr, (
const char *) cs, cur_format_size) != 0)
14698 cs += cur_format_size;
14754 if (cur_format ==
DT_TZH)
14766 if (*cs ==
'+' || *cs ==
'-')
14768 if (cur_format ==
DT_TZM)
14776 is_negative_tzd =
true;
14780 is_negative_tzd =
false;
14805 while (cs < last_src && strchr (
WHITE_CHARS, *cs))
14810 cur_format_str_ptr = next_format_str_ptr;
14813 while (cur_format_str_ptr < last_format && strchr (
WHITE_CHARS, *cur_format_str_ptr))
14815 cur_format_str_ptr++;
14818 if (last_format == next_format_str_ptr)
14820 while (cs < last_src && strchr (
WHITE_CHARS, *cs))
14825 if (cs != last_src)
14836 if (len_tzd > 0 || len_tzr > 0)
14838 if (set_tzh ==
true || set_tzm ==
true)
14846 if (is_negative_tzd)
14853 if (cs != last_src || cur_format_str_ptr != last_format)
14860 if (am != 0 && pm == 0 && hour <= 12)
14862 hour = (hour == 12) ? 0 : hour;
14864 else if (am == 0 && pm != 0 && hour <= 12)
14866 hour = (hour == 12) ? hour : hour + 12;
14868 else if (am == 0 && pm == 0)
14882 if (do_free_buf_str)
14887 if (do_free_buf_format)
14893 return error_status;
14909 const char *cur_format_str_ptr, *next_format_str_ptr;
14911 const char *last_format, *last_src;
14913 int cur_format_size;
14916 int month = 0, day = 0, year = 0, day_of_the_week = 0, week = -1;
14917 int monthcount = 0, daycount = 0, yearcount = 0, day_of_the_weekcount = 0;
14919 int second = 0, minute = 0, hour = 0;
14920 int time_count = 0;
14921 int mil_time_count = 0;
14926 bool no_user_format;
14930 char stack_buf_str[64], stack_buf_format[64];
14931 char *initial_buf_str =
NULL, *initial_buf_format =
NULL;
14932 bool do_free_buf_str =
false, do_free_buf_format =
false;
14934 bool has_user_format =
false;
14936 int tzh = 0, tzm = 0;
14937 bool set_tzh =
false, set_tzm =
false;
14938 int start_tzr = -1, start_tzd = -1;
14939 int len_tzr = -1, len_tzd = -1;
14941 bool is_negative_tzd =
false;
14953 return error_status;
14963 return error_status;
14970 return error_status;
14977 return error_status;
14986 return error_status;
14997 cs = initial_buf_str;
14998 last_src = cs +
strlen (cs);
15001 last_src = last_src + 1;
15003 no_user_format = (format_str ==
NULL) || (!has_user_format);
15005 if (no_user_format)
15009 const char *default_format_str;
15032 if (default_format_str ==
NULL)
15039 db_make_char (&default_format, strlen (default_format_str), default_format_str,
15041 format_str = &default_format;
15075 &initial_buf_format, &do_free_buf_format);
15081 cur_format_str_ptr = initial_buf_format;
15082 last_format = cur_format_str_ptr +
strlen (cur_format_str_ptr);
15085 while (cs < last_src && strchr (
WHITE_CHARS, *cs))
15091 while (cur_format_str_ptr < last_format && strchr (
WHITE_CHARS, *cur_format_str_ptr))
15093 cur_format_str_ptr++;
15096 while (cs < last_src)
15098 int token_size,
cmp, cs_byte_size;
15102 cur_format =
get_next_format (cur_format_str_ptr, frmt_codeset, type, &cur_format_size, &next_format_str_ptr);
15103 switch (cur_format)
15106 if (yearcount != 0)
15128 if (yearcount != 0)
15156 year += (i / 100) * 100;
15160 if (monthcount != 0)
15180 if (month < 1 || month > 12)
15189 if (monthcount != 0)
15217 if (monthcount != 0)
15267 if (day < 0 || day > 31)
15279 if (mil_time_count != 0)
15319 if (time_count != 0)
15339 if (hour < 1 || hour > 12)
15348 if (time_count != 0)
15359 if (mil_time_count != 0)
15379 if (hour < 0 || hour > 23)
15397 if (minute < 0 || minute > 59)
15415 if (second < 0 || second > 59)
15424 if (codeset != frmt_codeset)
15431 cmp =
intl_case_match_tok (date_lang_id, codeset, (
unsigned char *) (cur_format_str_ptr + 1),
15432 (
unsigned char *) cs, cur_format_size - 2, strlen (cs), &cs_byte_size);
15441 cs += cs_byte_size;
15445 if (strncasecmp ((
const char *) (
void *) cur_format_str_ptr, (
const char *) cs, cur_format_size) != 0)
15451 cs += cur_format_size;
15461 if (day_of_the_weekcount != 0)
15469 day_of_the_weekcount++;
15480 if (day_of_the_week == 0)
15489 if (day_of_the_weekcount != 0)
15497 day_of_the_weekcount++;
15509 if (day_of_the_week == 0)
15518 if (day_of_the_weekcount != 0)
15526 day_of_the_weekcount++;
15538 if (day_of_the_week < 1 || day_of_the_week > 7)
15599 if (cur_format ==
DT_TZH)
15611 if (*cs ==
'+' || *cs ==
'-')
15613 if (cur_format ==
DT_TZM)
15621 is_negative_tzd =
true;
15625 is_negative_tzd =
false;
15651 while (cs < last_src && strchr (
WHITE_CHARS, *cs))
15656 cur_format_str_ptr = next_format_str_ptr;
15659 while (cur_format_str_ptr < last_format && strchr (
WHITE_CHARS, *cur_format_str_ptr))
15661 cur_format_str_ptr++;
15664 if (last_format == next_format_str_ptr)
15666 while (cs < last_src && strchr (
WHITE_CHARS, *cs))
15671 if (cs != last_src)
15682 if (len_tzd > 0 || len_tzr > 0)
15684 if (set_tzh ==
true || set_tzm ==
true)
15691 if (is_negative_tzd)
15698 if (cs != last_src || cur_format_str_ptr != last_format)
15708 day = (daycount == 0) ? 1 : day;
15709 week = (day_of_the_weekcount == 0) ? -1 : day_of_the_week - 1;
15726 if (am != 0 && pm == 0 && hour <= 12)
15728 hour = (hour == 12) ? 0 : hour;
15730 else if (am == 0 && pm != 0 && hour <= 12)
15732 hour = (hour == 12) ? hour : hour + 12;
15734 else if (am == 0 && pm == 0)
15760 if (set_tzh ==
true || set_tzm ==
true)
15773 const char *dst =
NULL;
15777 assert (start_tzd >= 0);
15778 dst = initial_buf_str + start_tzd;
15795 if (do_free_buf_str)
15800 if (do_free_buf_format)
15806 return error_status;
15820 const char *cur_format_str_ptr, *next_format_str_ptr;
15822 const char *last_format, *last_src;
15824 int cur_format_size;
15827 int month = 0, day = 0, year = 0, day_of_the_week = 0, week = -1;
15828 int monthcount = 0, daycount = 0, yearcount = 0, day_of_the_weekcount = 0;
15831 int millisecond = 0, second = 0, minute = 0, hour = 0;
15832 int time_count = 0;
15833 int mil_time_count = 0;
15838 bool no_user_format;
15842 char stack_buf_str[64], stack_buf_format[64];
15843 char *initial_buf_str =
NULL, *initial_buf_format =
NULL;
15844 bool do_free_buf_str =
false, do_free_buf_format =
false;
15846 bool has_user_format =
false;
15848 int tzh = 0, tzm = 0;
15849 bool set_tzh =
false, set_tzm =
false;
15850 int start_tzr = -1, start_tzd = -1;
15851 int len_tzr = -1, len_tzd = -1;
15853 bool is_negative_tzd =
false;
15864 return error_status;
15874 return error_status;
15881 return error_status;
15888 return error_status;
15897 return error_status;
15908 cs = initial_buf_str;
15909 last_src = cs +
strlen (cs);
15912 last_src = last_src + 1;
15914 no_user_format = (format_str ==
NULL) || (!has_user_format);
15916 if (no_user_format)
15920 const char *default_format_str;
15943 if (default_format_str ==
NULL)
15950 db_make_char (&default_format, strlen (default_format_str), default_format_str,
15952 format_str = &default_format;
15985 &initial_buf_format, &do_free_buf_format);
15991 cur_format_str_ptr = initial_buf_format;
15992 last_format = cur_format_str_ptr +
strlen (cur_format_str_ptr);
15995 while (cs < last_src && strchr (
WHITE_CHARS, *cs))
16001 while (cur_format_str_ptr < last_format && strchr (
WHITE_CHARS, *cur_format_str_ptr))
16003 cur_format_str_ptr++;
16006 while (cs < last_src)
16008 int token_size,
cmp, cs_byte_size;
16012 cur_format =
get_next_format (cur_format_str_ptr, frmt_codeset, type, &cur_format_size, &next_format_str_ptr);
16013 switch (cur_format)
16016 if (yearcount != 0)
16038 if (yearcount != 0)
16066 year += (i / 100) * 100;
16070 if (monthcount != 0)
16090 if (month < 1 || month > 12)
16099 if (monthcount != 0)
16127 if (monthcount != 0)
16177 if (day < 0 || day > 31)
16189 if (mil_time_count != 0)
16228 if (time_count != 0)
16247 if (hour < 1 || hour > 12)
16257 if (time_count != 0)
16277 if (hour < 1 || hour > 12)
16286 if (time_count != 0)
16297 if (mil_time_count != 0)
16317 if (hour < 0 || hour > 23)
16335 if (minute < 0 || minute > 59)
16353 if (second < 0 || second > 59)
16369 for (i = 0, fraction = 100;
char_isdigit (*cs); cs++, i++)
16371 millisecond += (int) ((*cs -
'0') * fraction + 0.5);
16375 if (millisecond < 0 || millisecond > 999)
16384 if (codeset != frmt_codeset)
16390 cmp =
intl_case_match_tok (date_lang_id, codeset, (
unsigned char *) (cur_format_str_ptr + 1),
16391 (
unsigned char *) cs, cur_format_size - 2, strlen (cs), &cs_byte_size);
16400 cs += cs_byte_size;
16404 if (strncasecmp ((
const char *) (
void *) cur_format_str_ptr, (
const char *) cs, cur_format_size) != 0)
16411 cs += cur_format_size;
16421 if (day_of_the_weekcount != 0)
16429 day_of_the_weekcount++;
16440 if (day_of_the_week == 0)
16449 if (day_of_the_weekcount != 0)
16457 day_of_the_weekcount++;
16469 if (day_of_the_week == 0)
16478 if (day_of_the_weekcount != 0)
16486 day_of_the_weekcount++;
16498 if (day_of_the_week < 1 || day_of_the_week > 7)
16559 if (cur_format ==
DT_TZH)
16571 if (*cs ==
'+' || *cs ==
'-')
16573 if (cur_format ==
DT_TZM)
16581 is_negative_tzd =
true;
16585 is_negative_tzd =
false;
16610 while (cs < last_src && strchr (
WHITE_CHARS, *cs))
16615 cur_format_str_ptr = next_format_str_ptr;
16618 while (cur_format_str_ptr < last_format && strchr (
WHITE_CHARS, *cur_format_str_ptr))
16620 cur_format_str_ptr++;
16623 if (last_format == next_format_str_ptr)
16625 while (cs < last_src && strchr (
WHITE_CHARS, *cs))
16630 if (cs != last_src)
16641 if (len_tzd > 0 || len_tzr > 0)
16643 if (set_tzh ==
true || set_tzm ==
true)
16650 if (is_negative_tzd)
16657 if (cs != last_src || cur_format_str_ptr != last_format)
16667 day = (daycount == 0) ? 1 : day;
16668 week = (day_of_the_weekcount == 0) ? -1 : day_of_the_week - 1;
16678 if (am != 0 && pm == 0 && hour <= 12)
16680 hour = (hour == 12) ? 0 : hour;
16682 else if (am == 0 && pm != 0 && hour <= 12)
16684 hour = (hour == 12) ? hour : hour + 12;
16686 else if (am == 0 && pm == 0)
16698 error_status =
db_datetime_encode (&tmp_datetime, month, day, year, hour, minute, second, millisecond);
16716 if (set_tzh ==
true || set_tzm ==
true)
16729 const char *dst =
NULL;
16734 assert (start_tzd >= 0);
16735 dst = initial_buf_str + start_tzd;
16751 if (do_free_buf_str)
16756 if (do_free_buf_format)
16762 return error_status;
16780 int scale_counter = 0;
16782 int before_dec_point = 0;
16783 int after_dec_point = 0;
16784 int space_started =
false;
16797 else if (*data ==
'+')
16806 tmp_data[
i] = *(data +
i);
16807 before_dec_point++;
16811 space_started =
true;
16820 if (space_started != 0)
16828 if (*(data + j) !=
'\0')
16834 if (*(data + i) ==
'.')
16838 while (*(data + i) !=
'\0' && scale_counter < scale)
16842 tmp_data[
i] = *(data +
i);
16847 space_started =
true;
16858 if (space_started != 0)
16866 if (*(data + j) !=
'\0')
16872 while (scale_counter < scale)
16880 else if (*(data + i) ==
'\0')
16884 while (scale_counter < scale)
16898 || before_dec_point > precision - scale)
16903 tmp_data[
i] =
'\0';
16904 strcpy (data, tmp_data);
16918 #define DB_NUMERIC_E38_MAX "99999999999999999999999999999999999999" 16927 char *format_str_ptr;
16931 int count_format = 0;
16936 int loopvar, met_decptr = 0;
16937 int use_default_precision = 0;
16939 char *first_cs_for_error, *first_format_str_for_error;
16941 char stack_buf_str[64], stack_buf_format[64];
16942 char *initial_buf_str =
NULL, *initial_buf_format =
NULL;
16943 bool do_free_buf_str =
false, do_free_buf_format =
false;
16944 char digit_grouping_symbol;
16945 char fraction_symbol;
16946 bool has_user_format;
16948 int number_lang_id;
16960 return error_status;
16967 return error_status;
16974 return error_status;
16981 return error_status;
16997 cs = initial_buf_str;
16998 last_cs = cs +
strlen (cs);
17001 if (!has_user_format)
17003 format_str_ptr = (
char *) dflt_format_str;
17004 last_format = format_str_ptr +
strlen (dflt_format_str);
17020 &initial_buf_format, &do_free_buf_format);
17026 format_str_ptr = initial_buf_format;
17027 last_format = format_str_ptr +
strlen (format_str_ptr);
17046 last_cs = last_cs + 1;
17049 while (cs < last_cs && strchr (
WHITE_CHARS, *cs))
17053 while (format_str_ptr < last_format && strchr (
WHITE_CHARS, *format_str_ptr))
17057 first_cs_for_error = cs;
17058 first_format_str_for_error = format_str_ptr;
17061 for (loopvar = 0; format_str_ptr + loopvar < last_format; loopvar++)
17063 switch (*(format_str_ptr + loopvar))
17068 if (met_decptr > 0)
17081 if (*(format_str_ptr + loopvar) == digit_grouping_symbol)
17085 else if (*(format_str_ptr + loopvar) == fraction_symbol)
17092 use_default_precision = 1;
17103 if (use_default_precision == 1)
17113 while (cs < last_cs)
17116 get_number_token (number_lang_id, format_str_ptr, &token_length, last_format, &next_fsp, format_codeset);
17117 switch (cur_format)
17120 if (count_format != 0)
17129 precision, scale, number_lang_id);
17133 cs += token_length;
17143 goto format_mismatch;
17151 goto format_mismatch;
17154 while (cs < last_cs && strchr (
WHITE_CHARS, *cs))
17161 if (strncasecmp ((format_str_ptr + 1), cs, token_length - 2) != 0)
17163 goto format_mismatch;
17165 cs += token_length - 2;
17175 while (cs < last_cs && strchr (
WHITE_CHARS, *cs))
17182 goto format_mismatch;
17187 while (cs < last_cs && strchr (
WHITE_CHARS, *cs))
17192 format_str_ptr = next_fsp;
17195 while (format_str_ptr < last_format && strchr (
WHITE_CHARS, *format_str_ptr))
17202 if (cs != last_cs || format_str_ptr != last_format)
17204 goto format_mismatch;
17210 if (do_free_buf_str)
17215 if (do_free_buf_format)
17221 return error_status;
17231 if (first_format_str_for_error == dflt_format_str)
17241 if (do_free_buf_str)
17246 if (do_free_buf_format)
17252 return error_status;
17253 #undef DB_NUMERIC_E38_MAX 17265 const char *cur_format_str_ptr, *next_format_str_ptr;
17266 const char *last_format_str_ptr;
17268 int cur_format_size;
17271 char *result_buf =
NULL;
17272 int result_len = 0;
17273 int result_size = 0;
17275 int month = 0, day = 0, year = 0;
17276 int second = 0, minute = 0, hour = 0, millisecond = 0;
17280 unsigned int tmp_int;
17284 bool no_user_format;
17287 char stack_buf_format[64];
17288 char *initial_buf_format =
NULL;
17289 bool do_free_buf_format =
false;
17292 bool has_user_format =
false;
17302 return error_status;
17311 return error_status;
17318 return error_status;
17324 no_user_format = (format_str ==
NULL) || (!has_user_format);
17326 if (no_user_format)
17334 if (result_buf ==
NULL)
17337 return error_status;
17345 if (result_buf ==
NULL)
17348 return error_status;
17356 if (result_buf ==
NULL)
17359 return error_status;
17367 if (result_buf ==
NULL)
17370 return error_status;
17380 if (result_buf ==
NULL)
17383 return error_status;
17387 result_len = retval;
17393 if (result_buf ==
NULL)
17396 return error_status;
17399 result_len = retval;
17407 if (result_buf ==
NULL)
17410 return error_status;
17414 result_len = retval;
17421 if (result_buf ==
NULL)
17424 return error_status;
17427 result_len = retval;
17439 return error_status;
17442 db_make_varchar (result_str, result_len, result_buf, result_len, codeset, collation_id);
17449 int ntzr = 0, ntzd = 0;
17450 int len_tzr = 0, len_tzd = 0;
17451 bool has_tzh =
false, has_tzm =
false;
17478 &initial_buf_format, &do_free_buf_format);
17484 cur_format_str_ptr = initial_buf_format;
17485 last_format_str_ptr = cur_format_str_ptr +
strlen (cur_format_str_ptr);
17492 get_next_format (cur_format_str_ptr, frmt_codeset, src_type, &cur_format_size, &next_format_str_ptr);
17493 switch (cur_format)
17520 cur_format_str_ptr = next_format_str_ptr;
17521 if (next_format_str_ptr == last_format_str_ptr)
17537 if (ntzr != 0 || ntzd != 0 || has_tzh ==
true || has_tzm ==
true)
17553 if (ntzr != 0 || ntzd != 0 || has_tzh ==
true || has_tzm ==
true)
17571 if (ntzr != 0 || ntzd != 0 || has_tzh ==
true || has_tzm ==
true)
17579 db_datetime_decode (dt, &month, &day, &year, &hour, &minute, &second, &millisecond);
17594 db_datetime_decode (&dt_local, &month, &day, &year, &hour, &minute, &second, &millisecond);
17613 db_datetime_decode (&dt_local, &month, &day, &year, &hour, &minute, &second, &millisecond);
17623 tz_id = tsmp_tz.
tz_id;
17659 if (ntzr != 0 || ntzd != 0 || has_tzh ==
true || has_tzm ==
true)
17669 left = len - 3 * ntzr - 3 * ntzd;
17683 if (result_buf ==
NULL)
17691 cur_format_str_ptr = initial_buf_format;
17693 while (i < result_size)
17695 int token_case_mode;
17699 get_next_format (cur_format_str_ptr, frmt_codeset, src_type, &cur_format_size, &next_format_str_ptr);
17700 switch (cur_format)
17703 if (month == 0 && day == 0 && year == 0)
17705 goto zerodate_exit;
17708 tmp_int = (year / 100) + 1;
17709 sprintf (&result_buf[i],
"%02d\n", tmp_int);
17711 cur_format_str_ptr += 2;
17715 sprintf (&result_buf[i],
"%04d\n", year);
17720 tmp_int = year - (year / 100) * 100;
17721 sprintf (&result_buf[i],
"%02d\n", tmp_int);
17726 sprintf (&result_buf[i],
"%02d\n", month);
17732 if (month == 0 && day == 0 && year == 0)
17734 goto zerodate_exit;
17737 if (*cur_format_str_ptr ==
'm')
17739 token_case_mode = 1;
17741 else if (*(cur_format_str_ptr + 1) ==
'O')
17743 token_case_mode = 2;
17747 token_case_mode = 0;
17754 &result_buf[i], &token_size);
17760 &result_buf[i], &token_size);
17773 if (month == 0 && day == 0 && year == 0)
17775 goto zerodate_exit;
17778 result_buf[
i] =
'1' + ((month - 1) / 3);
17783 sprintf (&result_buf[i],
"%02d\n", day);
17789 if (month == 0 && day == 0 && year == 0)
17791 goto zerodate_exit;
17794 tmp_int =
get_day (month, day, year);
17796 if (*cur_format_str_ptr ==
'd')
17798 token_case_mode = 1;
17800 else if (*(cur_format_str_ptr + 1) ==
'A')
17802 token_case_mode = 2;
17804 else if (*(cur_format_str_ptr + 1) ==
'Y')
17806 token_case_mode = 2;
17810 token_case_mode = 0;
17813 if (cur_format ==
DT_DAY)
17823 &result_buf[i], &token_size);
17836 if (month == 0 && day == 0 && year == 0)
17838 goto zerodate_exit;
17841 tmp_int =
get_day (month, day, year);
17842 result_buf[
i] =
'0' + tmp_int + 1;
17852 if (0 <= hour && hour <= 11)
17854 if (*cur_format_str_ptr ==
'a' || *cur_format_str_ptr ==
'p')
17858 else if (*(cur_format_str_ptr + 1) ==
'm')
17867 else if (12 <= hour && hour <= 23)
17869 if (*cur_format_str_ptr ==
'p' || *cur_format_str_ptr ==
'a')
17873 else if (*(cur_format_str_ptr + 1) ==
'm')
17911 if (0 <= hour && hour <= 11)
17913 if (*cur_format_str_ptr ==
'a' || *cur_format_str_ptr ==
'p')
17917 else if (*(cur_format_str_ptr + 2) ==
'm')
17926 else if (12 <= hour && hour <= 23)
17928 if (*cur_format_str_ptr ==
'p' || *cur_format_str_ptr ==
'a')
17932 else if (*(cur_format_str_ptr + 2) ==
'm')
17966 tmp_int = hour % 12;
17971 sprintf (&result_buf[i],
"%02d\n", tmp_int);
17976 sprintf (&result_buf[i],
"%02d\n", hour);
17981 sprintf (&result_buf[i],
"%02d\n", minute);
17986 sprintf (&result_buf[i],
"%02d\n", second);
17991 sprintf (&result_buf[i],
"%03d\n", millisecond);
18002 memcpy (&result_buf[i], cur_format_str_ptr, cur_format_size);
18003 i += cur_format_size;
18007 memcpy (&result_buf[i], cur_format_str_ptr + 1, cur_format_size - 2);
18008 i += cur_format_size - 2;
18012 memcpy (&result_buf[i], cur_format_str_ptr, cur_format_size);
18013 i += cur_format_size;
18018 memcpy (&result_buf[i], tzr, len_tzr);
18025 memcpy (&result_buf[i], tzd, len_tzd);
18031 if ((tzh >= 0) && (tzm >= 0))
18033 sprintf (&result_buf[i],
"%c%02d\n",
'+', tzh);
18038 sprintf (&result_buf[i],
"%c%02d\n",
'-', tzh);
18048 sprintf (&result_buf[i],
"%02d\n", tzm);
18057 cur_format_str_ptr = next_format_str_ptr;
18058 if (next_format_str_ptr == last_format_str_ptr)
18064 db_make_varchar (result_str, result_len, result_buf, i, codeset, collation_id);
18070 if (do_free_buf_format)
18075 return error_status;
18078 if (result_buf !=
NULL)
18100 char *format_str_ptr, *last_format;
18102 int token_length = 0;
18104 char *res_string, *res_ptr;
18106 char stack_buf_format[64];
18107 char *initial_buf_format =
NULL;
18108 bool do_free_buf_format =
false;
18110 char fraction_symbol;
18111 char digit_grouping_symbol;
18112 bool has_user_format =
false;
18122 if (number_lang ==
NULL)
18133 return error_status;
18149 return error_status;
18155 strcpy (cs, tmp_str);
18159 sprintf (tmp_str,
"%d",
db_get_int (src_value));
18164 return error_status;
18166 strcpy (cs, tmp_str);
18170 sprintf (tmp_str,
"%lld", (
long long)
db_get_bigint (src_value));
18175 return error_status;
18177 strcpy (cs, tmp_str);
18186 return error_status;
18188 strcpy (cs, tmp_str);
18234 return error_status;
18240 for (i = 0; i <
strlen (cs); i++)
18242 if (cs[i] == fraction_symbol)
18246 while (cs[i] ==
'0')
18250 if (cs[i] == fraction_symbol)
18263 if (format_str ==
NULL || !has_user_format)
18266 db_make_varchar (result_str, (ssize_t) strlen (cs), cs, strlen (cs), codeset, collation_id);
18268 return error_status;
18276 return error_status;
18287 return error_status;
18292 &initial_buf_format, &do_free_buf_format);
18299 format_str_ptr = initial_buf_format;
18300 last_format = format_str_ptr +
strlen (format_str_ptr);
18307 return error_status;
18324 if (res_string ==
NULL)
18332 res_ptr = res_string;
18340 while (format_str_ptr != last_format)
18343 get_number_token (number_lang_id, format_str_ptr, &token_length, last_format, &next_fsp, codeset);
18344 switch (cur_format)
18347 if (
make_number_to_char (number_lang_id, cs, format_str_ptr, &token_length, currency, &res_ptr, codeset)
18359 while (i < token_length)
18362 int symbol_size = 0;
18372 else if (res_ptr[i] ==
'+' || res_ptr[i] ==
'-')
18376 else if (res_ptr[i] ==
' ')
18378 while (res_ptr[i + j] ==
' ')
18385 res_ptr[i + j] = res_ptr[
i];
18395 res_ptr += token_length;
18398 strncpy (res_ptr, format_str_ptr, token_length);
18399 res_ptr += token_length;
18402 strncpy (res_ptr, (format_str_ptr + 1), token_length - 2);
18403 res_ptr += token_length - 2;
18416 format_str_ptr = next_fsp;
18423 if (format_str_ptr != last_format)
18433 db_make_varchar (result_str, (ssize_t) strlen (res_string), res_string, strlen (res_string), codeset, collation_id);
18438 if (do_free_buf_format)
18443 return error_status;
18485 if (max_length > size)
18487 max_length = (int) size;
18494 return error_status;
18496 if (max_length > 0)
18509 else if (error_status < 0)
18512 return error_status;
18515 cs[max_length] =
'\0';
18533 return error_status;
18543 DB_ELO temp_elo, *result_elo;
18544 INT64 size, chk_size;
18552 temp_elo.
locator = (
char *) path;
18558 return error_status;
18564 return error_status;
18572 error_status =
db_elo_read (&temp_elo, pos, lob_chunk, chk_size, &chk_size);
18573 if (error_status < 0)
18575 return error_status;
18578 if (error_status < 0)
18580 return error_status;
18621 error_status = (int) length;
18632 return error_status;
18646 int leadingzero =
false;
18647 char *res_str = *result_str;
18648 char *num, *format, *res;
18649 char *init_format = format_str;
18651 char format_end_char = init_format[*length];
18655 init_format[*length] =
'\0';
18658 if (
strlen (format_str) == 5 && !strncasecmp (format_str,
"seeee", 5))
18662 else if (
strlen (format_str) == 5 && !strncasecmp (format_str,
"ceeee", 5))
18666 else if (
strlen (format_str) == 6 && !strncasecmp (format_str,
"sceeee", 6))
18672 if (*num_string ==
'-')
18683 if (flag_sign == 1)
18691 if (*format_str ==
'\0')
18693 init_format[*length] = format_end_char;
18697 *length =
strlen (*result_str);
18706 strcpy (res_str, money_symbol);
18707 res_str +=
strlen (money_symbol);
18712 if (*format_str ==
'\0')
18714 init_format[*length] = format_end_char;
18717 *length =
strlen (*result_str);
18723 if (*length > 4 && !strncasecmp (&init_format[*length - 4],
"eeee", 4))
18728 format = format_str;
18735 while (*format ==
'0' || *format ==
'9' || *format == digit_grouping_symbol)
18740 if (*format == fraction_symbol)
18747 *res_str = fraction_symbol;
18752 if (*format ==
'0' || *format ==
'9')
18761 init_format[*length] = format_end_char;
18763 *length =
strlen (*result_str);
18773 else if (*format ==
'e')
18778 init_format[*length] = format_end_char;
18780 *length =
strlen (*result_str);
18789 else if (*num == fraction_symbol)
18808 else if (*num ==
'\0')
18832 else if (*num == fraction_symbol || *num ==
'\0')
18844 while (*format ==
'0' || *format ==
'9' || *format == digit_grouping_symbol)
18849 if (*format != fraction_symbol &&
char_tolower (*format) !=
'e')
18859 if (
'0' < *num && *num <=
'9')
18875 if (*num == fraction_symbol)
18880 roundoff (lang, *result_str, 1, &cipher, (
char *)
NULL);
18887 roundoff (lang, *result_str, 1, &cipher, (
char *)
NULL);
18890 else if (*num ==
'\0')
18900 init_format[*length] = format_end_char;
18902 *length =
strlen (*result_str);
18915 if (*format ==
'0' || *format ==
'9')
18917 if (*num == fraction_symbol)
18922 else if (*num ==
'\0')
18924 while (*format ==
'0' || *format ==
'9')
18937 init_format[*length] = format_end_char;
18939 *length =
strlen (*result_str);
18954 if (
strlen (format) > 4)
18962 init_format[*length] = format_end_char;
18964 *length =
strlen (*result_str);
18972 if (*num == fraction_symbol && *(num + 1) -
'0' > 4)
18974 roundoff (lang, *result_str, 1, &cipher, (
char *)
NULL);
18976 if (*num -
'0' > 4)
18978 roundoff (lang, *result_str, 1, &cipher, (
char *)
NULL);
18981 init_format[*length] = format_end_char;
18983 *length =
strlen (*result_str);
18997 if (*format_str ==
'0')
18999 leadingzero =
true;
19003 format = format_str;
19011 while (*format ==
'0' || *format ==
'9' || *format == digit_grouping_symbol)
19016 if (*format != fraction_symbol && *format !=
'\0')
19022 *(res_str + (format - format_str)) = *format;
19023 res = res_str + (format - format_str);
19026 if (format == format_str && num == num_string)
19031 else if (format != format_str && num == num_string)
19033 if (leadingzero != 0)
19035 while (format != format_str)
19039 if (*format ==
'9' || *format ==
'0')
19041 *(res_str + (format - format_str)) =
'0';
19043 else if (*format == digit_grouping_symbol)
19045 *(res_str + (format - format_str)) = digit_grouping_symbol;
19055 while (format != format_str)
19058 *(res_str + (format - format_str)) =
' ';
19063 else if (format == format_str && num != num_string)
19065 while (num != num_string)
19071 num = num_string + 1;
19082 if (format == format_str)
19088 while (format != format_str)
19090 if (*format == digit_grouping_symbol)
19092 *(res_str + (format - format_str)) = *format;
19094 else if ((*format ==
'9' || *format ==
'0') && num != num_string)
19096 *(res_str + (format - format_str)) = *num;
19101 *(res_str + (format - format_str)) = *num;
19102 if (leadingzero != 0)
19104 while (format != format_str)
19107 if (*format ==
'9' || *format ==
'0')
19109 *(res_str + (format - format_str)) =
'0';
19111 else if (*format == digit_grouping_symbol)
19113 *(res_str + (format - format_str)) = digit_grouping_symbol;
19123 while (format != format_str)
19126 *(res_str + (format - format_str)) =
' ';
19132 if (format == format_str && num == num_string)
19134 *(res_str + (format - format_str)) = *num;
19140 if (num != num_string)
19144 i =
strlen (init_format) - 1;
19145 while (init_format != &init_format[i])
19147 if (init_format[i] == fraction_symbol)
19151 else if (init_format[i] !=
'0' && init_format[i] !=
'9' && init_format[i] !=
's' && init_format[i] !=
'c' 19152 && init_format[i] != digit_grouping_symbol)
19163 while (i < *length)
19165 (*result_str)[
i] =
'#';
19169 (*result_str)[*length] =
'\0';
19170 init_format[*length] = format_end_char;
19181 while (*format ==
'0' || *format ==
'9' || *format == digit_grouping_symbol)
19186 if (*format != fraction_symbol && *format !=
'\0')
19191 if (*format == fraction_symbol && *num == fraction_symbol)
19197 while (*format !=
'\0')
19199 if ((*format ==
'9' || *format ==
'0') && *num !=
'\0')
19207 while (*format !=
'\0')
19209 if (*format ==
'9' || *format ==
'0')
19233 if (*num -
'0' > 4)
19242 else if (*format == fraction_symbol && *num ==
'\0')
19247 while (*format !=
'\0')
19249 if (*format ==
'9' || *format ==
'0')
19264 else if (*format ==
'\0' && *num == fraction_symbol)
19266 if (*(num + 1) -
'0' > 4)
19275 else if (*format ==
'\0' && *num ==
'\0')
19284 init_format[*length] = format_end_char;
19285 *length =
strlen (*result_str);
19296 int leng =
strlen (src_string);
19298 src_string[leng] =
'E';
19303 src_string[leng] =
'+';
19307 src_string[leng] =
'-';
19315 sprintf (&src_string[leng],
"%d", cipher);
19319 sprintf (&src_string[leng],
"%02d", cipher);
19334 int loop_state =
true;
19335 int is_overflow =
false;
19336 char *res = &src_string[
strlen (src_string)];
19337 char *for_ptr =
NULL;
19344 for_ptr = &format[
strlen (format)];
19347 if (*src_string ==
'\0')
19351 if (flag == 0 && *format ==
'\0')
19365 if (
'0' <= *res && *res <=
'9')
19367 switch (*res -
'0' + 1)
19379 loop_state =
false;
19384 if (res == src_string)
19386 loop_state =
false;
19387 is_overflow =
true;
19400 else if (*res == fraction_symbol || *res == digit_grouping_symbol)
19402 if (res == src_string)
19404 loop_state =
false;
19405 is_overflow =
true;
19416 else if (*res ==
' ')
19418 if (flag == 0 && *for_ptr == digit_grouping_symbol)
19420 *res = digit_grouping_symbol;
19426 loop_state =
false;
19430 loop_state =
false;
19431 is_overflow =
true;
19441 while (i <
strlen (src_string))
19443 src_string[
i] =
'#';
19447 src_string[
i] =
'\0';
19454 while (!(
'0' <= *res && *res <=
'9'))
19459 while (i <
strlen (res))
19467 res[
i] = fraction_symbol;
19495 int src_len =
strlen (src_string);
19496 int sign =
PLUS, exponent_sign =
PLUS, cipher = 0;
19497 char *ptr = src_string;
19513 else if (*ptr ==
'-')
19522 tmp_digit = tmp_digit * 10 + (*ptr -
'0');
19525 if (tmp_digit >= 10)
19529 if (*ptr != fraction_symbol)
19538 if (*ptr ==
'e' || *ptr ==
'E')
19549 exponent_sign =
PLUS;
19551 else if (*ptr ==
'-')
19553 exponent_sign =
MINUS;
19563 cipher = cipher * 10 + (*ptr -
'0');
19581 if (*scientific_str ==
NULL)
19586 for (i = 0; i < src_len + cipher; i++)
19588 (*scientific_str)[
i] =
'\0';
19591 result_str = *scientific_str;
19598 if (exponent_sign ==
PLUS)
19603 *result_str = *ptr;
19607 *(result_str + cipher) = fraction_symbol;
19611 if (*result_str == fraction_symbol)
19618 *result_str = *ptr;
19633 *result_str = fraction_symbol;
19636 while (i < cipher - 1)
19642 while (
char_isdigit (*ptr) || *ptr == fraction_symbol)
19644 if (*ptr == fraction_symbol)
19648 *result_str = *ptr;
19653 *result_str =
'\0';
19666 int state_table[7][7] = { {4, 5, 2, 3, -1, 6, -1},
19667 {4, 5, -1, 3, -1, 6, -1},
19668 {4, 5, -1, -1, -1, 6, -1},
19669 {4, 4, -1, -1, 4, 6, 7},
19670 {5, 5, -1, -1, 5, 6, 7},
19671 {6, 6, -1, -1, 6, -1, 7},
19672 {0, 0, 0, 0, 0, 0, 0}
19678 if (previous_state == -1)
19686 state = state_table[previous_state - 1][0];
19689 state = state_table[previous_state - 1][1];
19692 state = state_table[previous_state - 1][2];
19695 state = state_table[previous_state - 1][3];
19698 if (input_char == digit_grouping_symbol)
19700 state = state_table[previous_state - 1][4];
19703 else if (input_char == fraction_symbol)
19705 state = state_table[previous_state - 1][5];
19708 state = state_table[previous_state - 1][6];
19723 const int precision,
const int scale,
const INTL_LANG number_lang_id)
19733 result_str[0] =
'\0';
19738 while (state != 7 && src < last_src)
19747 strncat (result_str, src, 1);
19753 else if (*src ==
'+')
19768 int symbol_size = 0;
19771 (src, ¤cy, &symbol_size,
19775 src += symbol_size;
19776 (*token_length) += symbol_size;
19786 strncat (result_str, src, 1);
19792 while (token[j] ==
'0' || token[j] ==
'9' || token[j] == digit_grouping_symbol)
19796 while ((&src[k] < last_src) && (
char_isdigit (src[k]) || src[k] == digit_grouping_symbol))
19811 while (k > 0 && j > 0)
19813 if (token[j] == digit_grouping_symbol && src[k] != digit_grouping_symbol)
19826 if ((src[k] == digit_grouping_symbol && token[j] != digit_grouping_symbol)
19827 || (token[j] == digit_grouping_symbol && src[k] != digit_grouping_symbol))
19835 while (src < last_src && (
char_isdigit (*src) || *src == digit_grouping_symbol))
19837 if (*src != digit_grouping_symbol)
19839 strncat (result_str, src, 1);
19849 if (*src == fraction_symbol)
19851 strncat (result_str, src, 1);
19856 if (*token ==
'0' || *token ==
'9')
19858 strncat (result_str, src, 1);
19869 while (*token ==
'0' || *token ==
'9')
19884 if (
strlen (token) >= 4 && strncasecmp (token,
"eeee", 4) == 0 &&
char_tolower (*src) ==
'e' 19885 && (*(src + 1) ==
'+' || *(src + 1) ==
'-'))
19887 strncat (result_str, src, 2);
19889 (*token_length) += 2;
19893 strncat (result_str, src, 1);
19895 (*token_length) += 1;
19908 strncpy (result_str, res_ptr,
sizeof (result_str) - 1);
19953 return error_status;
19972 if (fsp == last_position)
19982 if (fsp[*length + 1] == digit_grouping_symbol)
19988 && fsp[*length + 2] == digit_grouping_symbol)
19996 while (fsp[*length] ==
'9' || fsp[*length] ==
'0' ||
char_tolower (fsp[*length]) ==
's' 19997 ||
char_tolower (fsp[*length]) ==
'c' || fsp[*length] == fraction_symbol
19998 || fsp[*length] == digit_grouping_symbol)
20003 *next_fsp = &fsp[*length];
20004 if (
strlen (*next_fsp) >= 4 && !strncasecmp (*next_fsp,
"eeee", 4))
20007 *next_fsp = &fsp[*length];
20014 while (last_position != &fsp[*length] && (fsp[*length] ==
' ' || fsp[*length] ==
'\t' || fsp[*length] ==
'\n'))
20018 *next_fsp = &fsp[*length];
20022 if (codeset ==
INTL_CODESET_KSC5601_EUC && (&fsp[*length + 1]) < last_position && fsp[*length + 1] == (
char) 0xa1)
20024 while ((&fsp[*length + 1]) < last_position && fsp[*length] == (
char) 0xa1 && fsp[*length + 1] == (
char) 0xa1)
20028 *next_fsp = &fsp[*length];
20035 while (fsp[*length] !=
'"')
20037 if (&fsp[*length] == last_position)
20044 *next_fsp = &fsp[*length];
20048 if (c == fraction_symbol)
20050 while (fsp[*length] ==
'9' || fsp[*length] ==
'0' ||
char_tolower (fsp[*length]) ==
's' 20051 ||
char_tolower (fsp[*length]) ==
'c' || fsp[*length] == fraction_symbol
20052 || fsp[*length] == digit_grouping_symbol)
20057 *next_fsp = &fsp[*length];
20058 if (
strlen (*next_fsp) >= 4 && !strncasecmp (*next_fsp,
"eeee", 4))
20061 *next_fsp = &fsp[*length];
20074 const char **next_pos)
20077 *format_length = 0;
20087 if (strncasecmp (sp,
"yyyy", 4) == 0)
20089 *format_length += 4;
20090 *next_pos = sp + *format_length;
20093 else if (strncasecmp (sp,
"yy", 2) == 0)
20095 *format_length += 2;
20096 *next_pos = sp + *format_length;
20110 if (strncasecmp (sp,
"dd", 2) == 0)
20112 *format_length += 2;
20113 *next_pos = sp + *format_length;
20116 else if (strncasecmp (sp,
"dy", 2) == 0)
20118 *format_length += 2;
20119 *next_pos = sp + *format_length;
20122 else if (strncasecmp (sp,
"day", 3) == 0)
20124 *format_length += 3;
20125 *next_pos = sp + *format_length;
20130 *format_length += 1;
20131 *next_pos = sp + *format_length;
20141 if (strncasecmp (sp,
"cc", 2) == 0)
20143 *format_length += 2;
20144 *next_pos = sp + *format_length;
20158 *format_length += 1;
20159 *next_pos = sp + *format_length;
20163 if (str_type !=
DB_TYPE_TIME && strncasecmp (sp,
"mm", 2) == 0)
20165 *format_length += 2;
20166 *next_pos = sp + *format_length;
20169 else if (str_type !=
DB_TYPE_TIME && strncasecmp (sp,
"month", 5) == 0)
20171 *format_length += 5;
20172 *next_pos = sp + *format_length;
20175 else if (str_type !=
DB_TYPE_TIME && strncasecmp (sp,
"mon", 3) == 0)
20177 *format_length += 3;
20178 *next_pos = sp + *format_length;
20181 else if (str_type !=
DB_TYPE_DATE && strncasecmp (sp,
"mi", 2) == 0)
20183 *format_length += 2;
20184 *next_pos = sp + *format_length;
20198 if (strncasecmp (sp,
"am", 2) == 0)
20200 *format_length += 2;
20201 *next_pos = sp + *format_length;
20204 else if (strncasecmp (sp,
"a.m.", 4) == 0)
20206 *format_length += 4;
20207 *next_pos = sp + *format_length;
20221 if (strncasecmp (sp,
"pm", 2) == 0)
20223 *format_length += 2;
20224 *next_pos = sp + *format_length;
20227 else if (strncasecmp (sp,
"p.m.", 4) == 0)
20229 *format_length += 4;
20230 *next_pos = sp + *format_length;
20244 if (strncasecmp (sp,
"hh24", 4) == 0)
20246 *format_length += 4;
20247 *next_pos = sp + *format_length;
20250 else if (strncasecmp (sp,
"hh12", 4) == 0)
20252 *format_length += 4;
20253 *next_pos = sp + *format_length;
20256 else if (strncasecmp (sp,
"hh", 2) == 0)
20258 *format_length += 2;
20259 *next_pos = sp + *format_length;
20262 else if (strncasecmp (sp,
"h", 1) == 0)
20264 *format_length += 1;
20265 *next_pos = sp + *format_length;
20279 if (strncasecmp (sp,
"ss", 2) == 0)
20281 *format_length += 2;
20282 *next_pos = sp + *format_length;
20292 && strncasecmp (sp,
"ff", 2) == 0)
20294 *format_length += 2;
20295 *next_pos = sp + *format_length;
20304 *format_length += 1;
20305 while (sp[*format_length] !=
'"')
20308 const unsigned char *ptr = (
const unsigned char *) sp + (*format_length);
20309 if (sp[*format_length] ==
'\0')
20314 *format_length += char_size;
20316 *format_length += 1;
20317 *next_pos = &sp[*format_length];
20330 *format_length += 1;
20331 *next_pos = sp + *format_length;
20340 if (strncasecmp (sp,
"tzr", 3) == 0)
20342 *format_length += 3;
20343 *next_pos = sp + *format_length;
20346 else if (strncasecmp (sp,
"tzd", 3) == 0)
20348 *format_length += 3;
20349 *next_pos = sp + *format_length;
20352 else if (strncasecmp (sp,
"tzh", 3) == 0)
20354 *format_length += 3;
20355 *next_pos = sp + *format_length;
20358 else if (strncasecmp (sp,
"tzm", 3) == 0)
20360 *format_length += 3;
20361 *next_pos = sp + *format_length;
20380 struct tm *tm, tm_val;
20382 if (time (&tloc) == -1)
20387 tm = localtime_r (&tloc, &tm_val);
20393 return tm->tm_year + 1900;
20403 struct tm *tm, tm_val;
20405 if (time (&tloc) == -1)
20410 tm = localtime_r (&tloc, &tm_val);
20416 return tm->tm_mon + 1;
20438 DB_TYPE arg1_type, arg2_type;
20440 int ndec = 0,
i, j;
20441 const char *integer_format_max =
"99,999,999,999,999,999,999,999,999,999,999,999,999";
20443 DB_VALUE format_val, formatted_val, numeric_val, trimmed_val;
20445 char fraction_symbol;
20446 char digit_grouping_symbol;
20482 if (bi > INT_MAX || bi < 0)
20484 goto invalid_argument_error;
20496 goto invalid_argument_error;
20523 goto invalid_argument_error;
20528 for (
i = 0;
i < len;
i++)
20530 if (c[
i] == fraction_symbol)
20537 goto invalid_argument_error;
20542 goto invalid_argument_error;
20557 num_dbval_p = &numeric_val;
20566 num_dbval_p = &numeric_val;
20576 num_dbval_p = value;
20585 i = snprintf (format,
sizeof (format) - 1,
"%s", integer_format_max);
20592 format[
i++] = fraction_symbol;
20593 for (j = 0; j < ndec; j++)
20602 error =
number_to_char (num_dbval_p, &format_val, number_lang, &formatted_val, domain);
20613 invalid_argument_error:
20693 return error_status;
20714 DB_BIGINT days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
20716 DB_BIGINT _y, _m, _d, _h, _mi, _s, _ms;
20725 _ms = *millisecond;
20736 if (d == 0 && h == 0 && mi == 0 && s == 0 && ms == 0 && (m > 0 || y > 0))
20740 _y += (_m - 12) / 12;
20749 days[2] =
LEAP (_y) ? 29 : 28;
20751 if (old_day > days[_m])
20756 goto set_and_return;
20784 days[2] =
LEAP (_y) ? 29 : 28;
20789 for (i = 1; i < _m; i++)
20798 days[2] =
LEAP (_y) ? 29 : 28;
20799 _d -= (days[2] == 29) ? 366 : 365;
20803 goto set_and_return;
20808 days[2] =
LEAP (_y) ? 29 : 28;
20809 for (_m = 1;; _m++)
20811 if (_d <= days[_m])
20830 if (_y >= 10000 || _y < 0)
20839 *minute = (int) _mi;
20840 *second = (int) _s;
20841 *millisecond = (int) _ms;
20864 DB_BIGINT days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
20867 DB_BIGINT _y, _m, _d, _h, _mi, _s, _ms;
20875 _ms = *millisecond;
20885 days[2] =
LEAP (_y) ? 29 : 28;
20927 days[2] =
LEAP (_y) ? 29 : 28;
20943 days[2] =
LEAP (_y) ? 29 : 28;
20947 if (d == 0 && h == 0 && mi == 0 && s == 0 && ms == 0 && (m > 0 || y > 0))
20960 days[2] =
LEAP (_y) ? 29 : 28;
20962 if (old_day > days[_m])
20967 goto set_and_return;
20970 days[2] =
LEAP (_y) ? 29 : 28;
20972 if (_d > days[_m] || _d < 0)
20975 for (i = 1; i < _m; i++)
20987 goto set_and_return;
20989 days[2] =
LEAP (_y) ? 29 : 28;
20990 _d += (days[2] == 29) ? 366 : 365;
20994 days[2] =
LEAP (_y) ? 29 : 28;
20995 for (_m = 1;; _m++)
20997 if (_d <= days[_m])
21016 if (_y >= 10000 || _y < 0)
21025 *minute = (int) _mi;
21026 *second = (int) _s;
21027 *millisecond = (int) _ms;
21056 int is_dt = -1, is_d = -1, is_t = -1, is_timest = -1, is_timezone = -1, is_local_timezone = -1;
21058 const char *date_s =
NULL;
21060 int y, m, d, h, mi, s, ms;
21089 bool has_explicit_time =
false;
21103 if (has_explicit_time)
21112 db_date = db_datetime.
date;
21120 if (is_dt && is_d && is_t && is_timest)
21136 dt_p = &db_datetime;
21155 is_local_timezone = 1;
21165 tz_id = dt_tz_p->
tz_id;
21177 is_local_timezone = 1;
21187 tz_id = ts_tz_p->
tz_id;
21206 y = m = d = h = mi = s = ms = 0;
21209 if (m == 0 && d == 0 && y == 0)
21225 ret =
add_and_normalize_date_time (&y, &m, &d, &h, &mi, &s, &ms, 0, 0, days, 0, 0, 0, 0);
21229 ret =
sub_and_normalize_date_time (&y, &m, &d, &h, &mi, &s, &ms, 0, 0, -days, 0, 0, 0, 0);
21236 ret =
sub_and_normalize_date_time (&y, &m, &d, &h, &mi, &s, &ms, 0, 0, days, 0, 0, 0, 0);
21240 ret =
add_and_normalize_date_time (&y, &m, &d, &h, &mi, &s, &ms, 0, 0, -days, 0, 0, 0, 0);
21264 strcpy (res_final, res_s);
21273 else if (is_dt >= 0)
21277 y = m = d = h = mi = s = ms = 0;
21280 if (m == 0 && d == 0 && y == 0 && h == 0 && mi == 0 && s == 0 && ms == 0)
21296 ret =
add_and_normalize_date_time (&y, &m, &d, &h, &mi, &s, &ms, 0, 0, days, 0, 0, 0, 0);
21300 ret =
sub_and_normalize_date_time (&y, &m, &d, &h, &mi, &s, &ms, 0, 0, -days, 0, 0, 0, 0);
21307 ret =
sub_and_normalize_date_time (&y, &m, &d, &h, &mi, &s, &ms, 0, 0, days, 0, 0, 0, 0);
21311 ret =
add_and_normalize_date_time (&y, &m, &d, &h, &mi, &s, &ms, 0, 0, -days, 0, 0, 0, 0);
21322 if (is_timezone > 0)
21338 if (is_timezone > 0)
21353 strcpy (res_final, res_s);
21359 if (is_timezone > 0)
21363 else if (is_local_timezone > 0)
21373 else if (is_timest >= 0)
21377 y = m = d = h = mi = s = ms = 0;
21383 if (m == 0 && d == 0 && y == 0 && h == 0 && mi == 0 && s == 0)
21399 ret =
add_and_normalize_date_time (&y, &m, &d, &h, &mi, &s, &ms, 0, 0, days, 0, 0, 0, 0);
21403 ret =
sub_and_normalize_date_time (&y, &m, &d, &h, &mi, &s, &ms, 0, 0, -days, 0, 0, 0, 0);
21410 ret =
sub_and_normalize_date_time (&y, &m, &d, &h, &mi, &s, &ms, 0, 0, days, 0, 0, 0, 0);
21414 ret =
add_and_normalize_date_time (&y, &m, &d, &h, &mi, &s, &ms, 0, 0, -days, 0, 0, 0, 0);
21426 if (is_local_timezone <= 0)
21428 if (is_timezone > 0)
21441 dt_tz.
tz_id = tz_id;
21466 strcpy (res_final, res_s);
21472 if (is_timezone > 0)
21476 else if (is_local_timezone > 0)
21495 return error_status;
21523 int digit_num, value, ret;
21525 if (str ==
NULL || str[0] ==
'\0')
21530 digit_num =
strlen (str);
21531 if (digit_num >= 1 && str[0] ==
'-')
21534 ret = sscanf (str,
"%4d", &value);
21538 ret = sscanf (str,
"%3d", &value);
21584 int i,
count = 0, cnt_src = 0;
21591 shift = (shift + 1) / 2;
21598 va_start (marker, first);
21599 while (cnt_src < n)
21607 cnt_src = shift - 1;
21609 for (i = count - 1; i >= 0; i--)
21614 *v[
i] = *v[cnt_src--];
21641 sscanf (expr,
"%lld", (
long long *) &v);
21669 const char *expr_s =
NULL, *date_s =
NULL;
21670 char res_s[64], millisec_s[64];
21672 DB_BIGINT millisec, seconds, minutes, hours;
21673 DB_BIGINT days, weeks, months, quarters, years;
21679 int narg, is_dt = -1, is_d = -1, is_t = -1, is_timest = -1, is_timezone = -1, is_local_timezone = -1;
21684 int y, m, d, h, mi, s, ms;
21731 if (expr_s ==
NULL)
21761 unit_int_val = (
DB_BIGINT) round (dbl);
21772 millisec_s[0] =
'\0';
21773 millisec = seconds = minutes = hours = 0;
21774 days = weeks = months = quarters = years = 0;
21776 #if defined (SERVER_MODE) 21778 #define PT_MILLISECOND 3087 21779 #define PT_SECOND (PT_MILLISECOND + 1) 21780 #define PT_MINUTE (PT_MILLISECOND + 2) 21781 #define PT_HOUR (PT_MILLISECOND + 3) 21782 #define PT_DAY (PT_MILLISECOND + 4) 21783 #define PT_WEEK (PT_MILLISECOND + 5) 21784 #define PT_MONTH (PT_MILLISECOND + 6) 21785 #define PT_QUARTER (PT_MILLISECOND + 7) 21786 #define PT_YEAR (PT_MILLISECOND + 8) 21787 #define PT_SECOND_MILLISECOND (PT_MILLISECOND + 9) 21788 #define PT_MINUTE_MILLISECOND (PT_MILLISECOND + 10) 21789 #define PT_MINUTE_SECOND (PT_MILLISECOND + 11) 21790 #define PT_HOUR_MILLISECOND (PT_MILLISECOND + 12) 21791 #define PT_HOUR_SECOND (PT_MILLISECOND + 13) 21792 #define PT_HOUR_MINUTE (PT_MILLISECOND + 14) 21793 #define PT_DAY_MILLISECOND (PT_MILLISECOND + 15) 21794 #define PT_DAY_SECOND (PT_MILLISECOND + 16) 21795 #define PT_DAY_MINUTE (PT_MILLISECOND + 17) 21796 #define PT_DAY_HOUR (PT_MILLISECOND + 18) 21797 #define PT_YEAR_MONTH (PT_MILLISECOND + 19) 21804 sign = (millisec >= 0);
21810 sign = (seconds >= 0);
21816 sign = (minutes >= 0);
21822 sign = (hours >= 0);
21828 sign = (days >= 0);
21834 sign = (weeks >= 0);
21840 sign = (months >= 0);
21846 sign = (quarters >= 0);
21852 sign = (years >= 0);
21859 narg = sscanf (expr_s,
"%lld%c%s", (
long long *) &seconds, &delim, millisec_s);
21865 millisec = unit_int_val;
21867 sign = (seconds >= 0);
21875 sscanf (expr_s,
"%lld%c%lld%c%s", (
long long *) &minutes, &delim, (
long long *) &seconds, &delim,
21882 millisec = unit_int_val;
21884 sign = (minutes >= 0);
21891 narg = sscanf (expr_s,
"%lld%c%lld", (
long long *) &minutes, &delim, (
long long *) &seconds);
21896 seconds = unit_int_val;
21898 sign = (minutes >= 0);
21906 sscanf (expr_s,
"%lld%c%lld%c%lld%c%s", (
long long *) &hours, &delim, (
long long *) &minutes, &delim,
21907 (
long long *) &seconds, &delim, millisec_s);
21913 millisec = unit_int_val;
21915 sign = (hours >= 0);
21923 sscanf (expr_s,
"%lld%c%lld%c%lld", (
long long *) &hours, &delim, (
long long *) &minutes, &delim,
21924 (
long long *) &seconds);
21929 seconds = unit_int_val;
21931 sign = (hours >= 0);
21938 narg = sscanf (expr_s,
"%lld%c%lld", (
long long *) &hours, &delim, (
long long *) &minutes);
21943 minutes = unit_int_val;
21945 sign = (hours >= 0);
21953 sscanf (expr_s,
"%lld%c%lld%c%lld%c%lld%c%s", (
long long *) &days, &delim, (
long long *) &hours, &delim,
21954 (
long long *) &minutes, &delim, (
long long *) &seconds, &delim, millisec_s);
21960 millisec = unit_int_val;
21962 sign = (days >= 0);
21971 sscanf (expr_s,
"%lld%c%lld%c%lld%c%lld", (
long long *) &days, &delim, (
long long *) &hours, &delim,
21972 (
long long *) &minutes, &delim, (
long long *) &seconds);
21977 seconds = unit_int_val;
21979 sign = (days >= 0);
21988 sscanf (expr_s,
"%lld%c%lld%c%lld", (
long long *) &days, &delim, (
long long *) &hours, &delim,
21989 (
long long *) &minutes);
21994 minutes = unit_int_val;
21996 sign = (days >= 0);
22004 narg = sscanf (expr_s,
"%lld%c%lld", (
long long *) &days, &delim, (
long long *) &hours);
22009 hours = unit_int_val;
22011 sign = (days >= 0);
22019 narg = sscanf (expr_s,
"%lld%c%lld", (
long long *) &years, &delim, (
long long *) &months);
22024 months = unit_int_val;
22026 sign = (years >= 0);
22036 #if defined (SERVER_MODE) 22038 #undef PT_MILLISECOND 22047 #undef PT_SECOND_MILLISECOND 22048 #undef PT_MINUTE_MILLISECOND 22049 #undef PT_MINUTE_SECOND 22050 #undef PT_HOUR_MILLISECOND 22051 #undef PT_HOUR_SECOND 22052 #undef PT_HOUR_MINUTE 22053 #undef PT_DAY_MILLISECOND 22054 #undef PT_DAY_SECOND 22055 #undef PT_DAY_MINUTE 22057 #undef PT_YEAR_MONTH 22061 years =
ABS (years);
22062 months =
ABS (months);
22064 weeks =
ABS (weeks);
22065 quarters =
ABS (quarters);
22066 hours =
ABS (hours);
22067 minutes =
ABS (minutes);
22068 seconds =
ABS (seconds);
22069 millisec =
ABS (millisec);
22080 months += 3 * quarters;
22093 bool has_explicit_time =
false;
22094 bool has_zone =
false;
22106 tz_id = dt_tz.
tz_id;
22116 else if (has_explicit_time)
22125 db_date = db_datetime.
date;
22132 if (is_dt && is_d && is_t && is_timest)
22147 dt_p = &db_datetime;
22166 is_local_timezone = 1;
22177 tz_id = dt_tz_p->
tz_id;
22189 is_local_timezone = 1;
22199 tz_id = ts_tz_p->
tz_id;
22219 y = m = d = h = mi = s = ms = 0;
22222 if (m == 0 && d == 0 && y == 0)
22238 sub_and_normalize_date_time (&y, &m, &d, &h, &mi, &s, &ms, years, months, days, hours, minutes, seconds,
22244 add_and_normalize_date_time (&y, &m, &d, &h, &mi, &s, &ms, years, months, days, hours, minutes, seconds,
22260 if (m == 0 && d == 0 && y == 0)
22278 if (res_final ==
NULL)
22283 strcpy (res_final, res_s);
22294 db_datetime.
date = db_datetime.
time = 0;
22297 if (m == 0 && d == 0 && y == 0 && h == 0 && mi == 0 && s == 0 && ms == 0)
22315 if (res_final ==
NULL)
22320 strcpy (res_final, res_s);
22326 if (is_local_timezone > 0)
22335 else if (is_timezone > 0)
22354 else if (is_dt >= 0)
22357 y = m = d = h = mi = s = ms = 0;
22361 if (m == 0 && d == 0 && y == 0 && h == 0 && mi == 0 && s == 0 && ms == 0)
22377 sub_and_normalize_date_time (&y, &m, &d, &h, &mi, &s, &ms, years, months, days, hours, minutes, seconds,
22383 add_and_normalize_date_time (&y, &m, &d, &h, &mi, &s, &ms, years, months, days, hours, minutes, seconds,
22395 if (is_timezone > 0)
22411 if (is_timezone > 0)
22421 if (res_final ==
NULL)
22426 strcpy (res_final, res_s);
22433 if (is_local_timezone > 0)
22437 else if (is_timezone > 0)
22447 else if (is_timest >= 0)
22451 y = m = d = h = mi = s = ms = 0;
22457 if (m == 0 && d == 0 && y == 0 && h == 0 && mi == 0 && s == 0)
22473 sub_and_normalize_date_time (&y, &m, &d, &h, &mi, &s, &ms, years, months, days, hours, minutes, seconds,
22479 add_and_normalize_date_time (&y, &m, &d, &h, &mi, &s, &ms, years, months, days, hours, minutes, seconds,
22491 if (is_local_timezone <= 0)
22493 if (is_timezone > 0)
22506 dt_tz.
tz_id = tz_id;
22527 if (res_final ==
NULL)
22532 strcpy (res_final, res_s);
22539 if (is_local_timezone > 0)
22543 else if (is_timezone > 0)
22563 return error_status;
22628 DB_TYPE res_type, format_type;
22629 const char *format_s =
NULL, *strend =
NULL;
22633 int y, m, d, h, mi, s, ms;
22634 int days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
22635 char format_specifiers[256][64];
22639 int tu, tv, tx, weeks, ld_fw, days_counter;
22646 char hours_or_minutes[4];
22647 int tzh = 0, tzm = 0;
22648 bool is_valid_tz =
false;
22649 bool has_tzh =
false;
22653 y = m = d = h = mi = s = ms = 0;
22656 memset (hours_or_minutes, 0,
sizeof (hours_or_minutes));
22657 memset (format_specifiers, 0,
sizeof (format_specifiers));
22672 return error_status;
22694 return error_status;
22710 return error_status;
22717 return error_status;
22719 is_valid_tz =
true;
22735 return error_status;
22745 return error_status;
22747 is_valid_tz =
true;
22759 return error_status;
22766 return error_status;
22768 is_valid_tz =
true;
22781 return error_status;
22787 return error_status;
22793 return error_status;
22796 is_valid_tz =
true;
22810 return error_status;
22819 return error_status;
22821 is_valid_tz =
true;
22837 return error_status;
22842 return error_status;
22848 return error_status;
22853 is_valid_tz =
true;
22882 is_valid_tz =
true;
22895 days[2] +=
LEAP (y);
22908 sprintf (format_specifiers[
'c'],
"%d", m);
22911 sprintf (format_specifiers[
'D'],
"%d", d);
22915 if (d % 10 == 1 && d / 10 != 1)
22917 strcat (format_specifiers[
'D'],
"st");
22919 else if (d % 10 == 2 && d / 10 != 1)
22921 strcat (format_specifiers[
'D'],
"nd");
22923 else if (d % 10 == 3 && d / 10 != 1)
22925 strcat (format_specifiers[
'D'],
"rd");
22929 strcat (format_specifiers[
'D'],
"th");
22934 sprintf (format_specifiers[
'd'],
"%02d", d);
22937 sprintf (format_specifiers[
'e'],
"%d", d);
22940 sprintf (format_specifiers[
'f'],
"%03d", ms);
22943 sprintf (format_specifiers[
'H'],
"%02d", h);
22946 sprintf (format_specifiers[
'h'],
"%02d", (h % 12 == 0) ? 12 : (h % 12));
22949 sprintf (format_specifiers[
'I'],
"%02d", (h % 12 == 0) ? 12 : (h % 12));
22952 sprintf (format_specifiers[
'i'],
"%02d", mi);
22955 for (j = d, i = 1; i < m; i++)
22959 sprintf (format_specifiers[
'j'],
"%03d", j);
22962 sprintf (format_specifiers[
'k'],
"%d", h);
22965 sprintf (format_specifiers[
'l'],
"%d", (h % 12 == 0) ? 12 : (h % 12));
22970 strcpy (format_specifiers[
'M'], lld->
month_name[m - 1]);
22974 sprintf (format_specifiers[
'm'],
"%02d", m);
22980 sprintf (format_specifiers[
'r'],
"%02d:%02d:%02d %s", (h % 12 == 0) ? 12 : (h % 12), mi, s,
22984 sprintf (format_specifiers[
'S'],
"%02d", s);
22987 sprintf (format_specifiers[
's'],
"%02d", s);
22990 sprintf (format_specifiers[
'T'],
"%02d:%02d:%02d", h, mi, s);
23000 for (days_counter = d, i = 1; i < m; i++)
23002 days_counter += days[
i];
23005 if (days_counter <= ld_fw)
23007 weeks = dow2 == 0 ? 1 : 0;
23011 days_counter -= (dow2 == 0) ? 0 : ld_fw;
23012 weeks = days_counter / 7 + (days_counter % 7 ? 1 : 0);
23020 days_counter = 365 +
LEAP (y - 1) - (dow2 == 0 ? 0 : 7 - dow2);
23021 tv = days_counter / 7 + (days_counter % 7 ? 1 : 0);
23025 sprintf (format_specifiers[
'U'],
"%02d", tu);
23026 sprintf (format_specifiers[
'V'],
"%02d", tv);
23027 sprintf (format_specifiers[
'X'],
"%04d", tx);
23034 weeks = dow2 >= 1 && dow2 <= 4 ? 1 : 0;
23036 ld_fw = dow2 == 0 ? 1 : 7 - dow2 + 1;
23038 for (days_counter = d, i = 1; i < m; i++)
23040 days_counter += days[
i];
23043 if (days_counter > ld_fw)
23045 days_counter -= ld_fw;
23046 weeks += days_counter / 7 + (days_counter % 7 ? 1 : 0);
23055 weeks = dow2 >= 1 && dow2 <= 4 ? 1 : 0;
23056 ld_fw = dow2 == 0 ? 1 : 7 - dow2 + 1;
23057 days_counter = 365 +
LEAP (y - 1) - ld_fw;
23058 tv = weeks + days_counter / 7 + (days_counter % 7 ? 1 : 0);
23064 if (dow2 >= 1 && dow2 <= 4)
23071 sprintf (format_specifiers[
'u'],
"%02d", tu);
23072 sprintf (format_specifiers[
'v'],
"%02d", tv);
23073 sprintf (format_specifiers[
'x'],
"%04d", tx);
23076 strcpy (format_specifiers[
'W'], lld->
day_name[dow]);
23079 sprintf (format_specifiers[
'w'],
"%d", dow);
23082 sprintf (format_specifiers[
'Y'],
"%04d", y);
23085 sprintf (format_specifiers[
'y'],
"%02d", y % 100);
23089 switch (format_type)
23112 memset (res, 0, len);
23115 strend = format_s + format_s_len;
23116 while (format_s < strend)
23135 if (ch ==
'T' && format_s + 2 < strend && *(format_s + 1) ==
'Z' 23136 && (*(format_s + 2) ==
'R' || *(format_s + 2) ==
'D' || *(format_s + 2) ==
'H' || *(format_s + 2) ==
'M'))
23138 if (is_valid_tz ==
false)
23148 switch (*(format_s + 2))
23158 if ((tzh >= 0) && (tzm >= 0))
23160 sprintf (hours_or_minutes,
"%c%02d",
'+', tzh);
23164 sprintf (hours_or_minutes,
"%c%02d",
'-', -tzh);
23166 strcat (res, hours_or_minutes);
23171 sprintf (hours_or_minutes,
"%02d", tzm);
23175 sprintf (hours_or_minutes,
"%02d", -tzm);
23177 strcat (res, hours_or_minutes);
23183 else if (
strlen (format_specifiers[(
unsigned char) ch]) == 0)
23190 strcat (res, format_specifiers[(
unsigned char) ch]);
23205 if (
strlen (res) + 16 > len)
23214 memset (res2, 0, len);
23215 strcpy (res2, res);
23225 memset (res, 0, len);
23226 strcpy (res, res2);
23240 return error_status;
23253 return error_status;
23274 int count = 0, len;
23278 const int res_count =
sizeof (res) /
sizeof (
char);
23283 memset (res, 0,
sizeof (res));
23292 while (*ch != 0 && (*ch >=
'0' && *ch <=
'9'))
23301 if (len == cnt || len == res_count - 1)
23334 const char *format2_s =
NULL;
23335 char *sstr =
NULL, *format_s =
NULL;
23337 int type, len1, len2, h24 = 0, _v, _x;
23339 int days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
23340 int y, m, d, h, mi, s, ms, am ;
23341 int u, U, v, V, dow, doy, w;
23342 char stack_buf_str[64];
23343 char *initial_buf_str =
NULL;
23344 bool do_free_buf_str =
false;
23348 int tzm = 0, tzh = 0;
23349 bool set_tzh =
false, set_tzm =
false;
23350 int start_tzr = -1, len_tzr = -1, start_tzd = -1, len_tzd = -1;
23352 bool is_negative_tzd =
false;
23354 if (str ==
NULL || format ==
NULL || date_lang ==
NULL)
23379 y = m = d = V = v = U = u = -1;
23380 h = mi = s = ms = 0;
23381 dow = doy = am = -1;
23392 sstr = initial_buf_str;
23396 len2 = (len2 < 0) ?
strlen (format2_s) : len2;
23404 memset (format_s, 0,
sizeof (
char) * (len2 + 1));
23407 for (i = 0; i < len2; i++)
23411 STRCHCAT (format_s, format2_s[i]);
23414 else if (
WHITESPACE (format2_s[i]) && i > 0 && format2_s[i - 1] ==
'%')
23425 if (domain ==
NULL)
23472 len2 =
strlen (format_s);
23476 while (i < len1 && j < len2)
23488 if (j > 0 && format_s[j - 1] ==
'%')
23494 if (j > 1 && format_s[j - 2] ==
'%')
23505 switch (format_s[j])
23513 goto conversion_error;
23520 goto conversion_error;
23532 goto conversion_error;
23539 goto conversion_error;
23548 goto conversion_error;
23558 goto conversion_error;
23570 goto conversion_error;
23580 goto conversion_error;
23590 goto conversion_error;
23600 goto conversion_error;
23611 goto conversion_error;
23621 goto conversion_error;
23631 goto conversion_error;
23641 goto conversion_error;
23651 goto conversion_error;
23662 goto conversion_error;
23672 goto conversion_error;
23679 goto conversion_error;
23688 goto conversion_error;
23699 goto conversion_error;
23717 goto conversion_error;
23728 goto conversion_error;
23737 if (sstr[i] !=
':')
23739 goto conversion_error;
23746 goto conversion_error;
23755 if (sstr[i] !=
':')
23757 goto conversion_error;
23764 goto conversion_error;
23772 goto conversion_error;
23790 goto conversion_error;
23800 goto conversion_error;
23810 goto conversion_error;
23817 if ((j + 1 < len2 && format_s[j + 1] !=
'Z') || (j + 1 == len2))
23822 goto conversion_error;
23831 if (sstr[i] !=
':')
23833 goto conversion_error;
23840 goto conversion_error;
23849 if (sstr[i] !=
':')
23851 goto conversion_error;
23858 goto conversion_error;
23863 else if (j + 2 < len2)
23865 switch (format_s[j + 2])
23884 int frmt_len_spec = 0;
23889 if (j_tzd + frmt_len_spec < len2)
23891 while (
char_isdigit (format_s[j_tzd + frmt_len_spec]))
23896 if (frmt_len_spec > 0)
23898 k =
parse_digits (&format_s[j_tzd], &tzd_exp_len, frmt_len_spec);
23901 goto conversion_error;
23908 goto conversion_error;
23912 len_tzd =
parse_tzd (sstr + i, tzd_exp_len);
23921 j += 2 + frmt_len_spec;
23930 if (format_s[j + 2] ==
'H')
23942 if (sstr[i] ==
'+' || sstr[i] ==
'-')
23944 if (format_s[j + 2] ==
'M')
23950 if (sstr[i] ==
'-')
23952 is_negative_tzd =
true;
23956 is_negative_tzd =
false;
23964 goto conversion_error;
23985 goto conversion_error;
23995 goto conversion_error;
24005 goto conversion_error;
24016 goto conversion_error;
24027 goto conversion_error;
24034 goto conversion_error;
24044 goto conversion_error;
24055 goto conversion_error;
24067 goto conversion_error;
24078 goto conversion_error;
24088 goto conversion_error;
24105 goto conversion_error;
24109 else if (sstr[i] != format_s[j] && format_s[j] !=
'%')
24118 else if (format_s[j] !=
'%')
24130 if (len_tzd > 0 || len_tzr > 0)
24132 if (set_tzh ==
true || set_tzm ==
true)
24139 if (is_negative_tzd)
24147 if (h24 == 1 || h == 0)
24149 goto conversion_error;
24157 if (h24 == 0 && h > 12)
24159 goto conversion_error;
24162 if (_x != _v && _x != -1)
24164 goto conversion_error;
24167 days[2] +=
LEAP (y);
24182 y = (y == -1) ? 1 : y;
24186 goto conversion_error;
24191 goto conversion_error;
24195 if (m != -1 && d > days[m])
24197 goto conversion_error;
24202 goto conversion_error;
24207 goto conversion_error;
24210 if (v == 0 || u > 53)
24212 goto conversion_error;
24215 if (V == 0 || u > 53)
24217 goto conversion_error;
24220 if (doy == 0 || doy > 365 +
LEAP (y))
24222 goto conversion_error;
24227 goto conversion_error;
24233 if ((am != -1 && h > 12) || (am == -1 && h > 23))
24235 goto conversion_error;
24237 if (am == 1 && h != -1)
24246 goto conversion_error;
24251 goto conversion_error;
24262 goto write_results;
24272 if (m >= 1 && m <= 12 && d >= 1 && d <= days[m])
24275 goto write_results;
24278 w = MAX (v, MAX (V, MAX (u, U)));
24280 if (dow != -1 && w != -1)
24283 int ld_fw, save_dow, dowdiff;
24285 if (U == w || V == w)
24291 dowdiff = dow - dow2;
24292 d = dow2 == 0 ? 32 - (7 - dow) : dowdiff < 0 ? 32 + dowdiff : 1 + dowdiff;
24293 m = dow2 == 0 || dowdiff < 0 ? 12 : 1;
24294 y = dow2 == 0 || dowdiff < 0 ? y - 1 : y;
24298 d = dow2 == 0 ? 1 : ld_fw + 1;
24302 goto conversion_error;
24306 else if (u == w || v == w)
24308 ld_fw = dow2 == 0 ? 1 : 7 - dow2 + 1;
24309 if (w == 0 || w == 1)
24312 dow = dow == 0 ? 7 : dow;
24313 dow2 = dow2 == 0 ? 7 : dow2;
24314 dowdiff = dow - dow2;
24316 if (dow2 >= 1 && dow2 <= 4)
24318 d = w == 0 ? 32 + dowdiff - 7 : dowdiff < 0 ? 32 + dowdiff : 1 + dowdiff;
24319 m = w == 0 || dowdiff < 0 ? 12 : 1;
24320 y = w == 0 || dowdiff < 0 ? y - 1 : y;
24324 d = dowdiff < 0 ? (w == 0 ? 32 + dowdiff : ld_fw + dow) : (w == 0 ? 1 + dowdiff : 1 + dowdiff + 7);
24325 m = dowdiff < 0 && w == 0 ? 12 : 1;
24326 y = dowdiff < 0 && w == 0 ? y - 1 : y;
24338 goto conversion_error;
24344 goto conversion_error;
24348 else if (doy != -1)
24350 for (m = 1; doy > days[m] && m <= 12; m++)
24364 y = (y == -1) ? 1 : y;
24365 m = (m == -1) ? 1 : m;
24366 d = (d == -1) ? 1 : d;
24368 if (y < 0 || m < 0 || d < 0)
24370 goto conversion_error;
24375 goto conversion_error;
24381 if (h < 0 || mi < 0 || s < 0)
24383 goto conversion_error;
24410 if (set_tzh ==
true || set_tzm ==
true)
24415 goto conversion_error;
24420 const char *dst =
NULL;
24425 assert (start_tzd >= 0);
24426 dst = sstr + start_tzd;
24430 len_tzd,
false, &db_datetimetz);
24433 goto conversion_error;
24445 if (do_free_buf_str)
24450 return error_status;
24453 if (do_free_buf_str)
24475 return error_status;
24490 int hour = 0,
min = 0, sec = 0, milisec = 0;
24530 sprintf (res_s,
"%02d:%02d:%02d.%03d", hour,
min, sec, milisec);
24534 sprintf (res_s,
"%02d:%02d:%02d", hour,
min, sec);
24556 if (domain !=
NULL)
24580 int y, m, d, hour,
min, sec, ms;
24585 if (date_value ==
NULL || result ==
NULL)
24617 sprintf (res_s,
"%02d/%02d/%04d", m, d, y);
24619 if (domain !=
NULL)
24647 return error_status;
24658 return (year / 4 - year / 100 + year / 400);
24684 int y1 = 0, m1 = 0,
d1 = 0;
24685 int y2 = 0, m2 = 0, d2 = 0;
24686 int hour,
min, sec, ms;
24687 int cly1, cly2, cnly1, cnly2, cdpm1, cdpm2, cdpy1, cdpy2,
diff,
i, cd1, cd2;
24688 int m_days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
24692 if (date_value1 ==
NULL || date_value2 ==
NULL || result ==
NULL)
24728 if ((y1 == 0 && m1 == 0 &&
d1 == 0 && hour == 0 && min == 0 && sec == 0 && ms == 0)
24729 || (y2 == 0 && m2 == 0 && d2 == 0 && hour == 0 && min == 0 && sec == 0 && ms == 0))
24743 cdpy1 = cly1 * 366 + cnly1 * 365;
24744 m_days[2] =
LEAP (y1) ? 29 : 28;
24746 for (i = 1; i < m1; i++)
24748 cdpm1 += m_days[
i];
24753 cdpy2 = cly2 * 366 + cnly2 * 365;
24754 m_days[2] =
LEAP (y2) ? 29 : 28;
24756 for (i = 1; i < m2; i++)
24758 cdpm2 += m_days[
i];
24761 cd1 = cdpy1 + cdpm1 +
d1;
24762 cd2 = cdpy2 + cdpm2 + d2;
24768 return error_status;
24775 time_t unix_timestamp;
24792 if (unix_timestamp < 0)
24798 if (format ==
NULL)
24812 switch (format_type)
24827 date_lang = &default_date_lang;
24830 error_status =
db_date_format (&ts_val, format, date_lang, result, domain);
24854 return error_status;
24868 int y1 = 0, m1 = 0,
d1 = 0, hour1 = 0, min1 = 0, sec1 = 0;
24869 int y2 = 0, m2 = 0, d2 = 0, hour2 = 0, min2 = 0, sec2 = 0;
24871 int leap_years1, leap_years2, days_this_year1, days_this_year2;
24872 int total_days1, total_days2;
24873 int total_seconds1, total_seconds2, time_diff, date_diff = 0;
24874 int min_res, sec_res, hour_res;
24877 int hour_aux, min_aux, sec_aux, ms_aux;
24899 if (hour_aux != hour1 || min_aux != min1 || sec_aux != sec1)
24937 if (hour_aux != hour2 || min_aux != min2 || sec_aux != sec2)
24969 if (val1_type != val2_type)
24980 total_days1 = y1 * 365 + leap_years1 + days_this_year1;
24984 total_days2 = y2 * 365 + leap_years2 + days_this_year2;
24986 date_diff = total_days1 - total_days2;
24989 total_seconds1 = sec1 + min1 * 60 + hour1 * 3600;
24990 total_seconds2 = sec2 + min2 * 60 + hour2 * 3600;
24991 time_diff = total_seconds1 - total_seconds2;
24993 date_diff = date_diff * 3600 * 24 + time_diff;
24995 hour_res = (date_diff / 3600);
24996 min_res = (date_diff % 3600) / 60;
24997 sec_res = date_diff - 3600 * hour_res - 60 * min_res;
25018 return error_status;
25037 int args[4], num_args = 0, tmp;
25039 const char *dot =
NULL, *end;
25042 *sign = *h = *m = *s = *ms = 0;
25044 if (!timestr || !timestr_size)
25050 end = timestr + timestr_size;
25062 while (dot != end && *dot !=
'.')
25075 tmp = (tmp < 3 ? tmp : 3);
25076 strncpy (ms_string, dot, tmp);
25078 ms_string[3] =
'\0';
25087 ms_string[1] =
'0';
25090 ms_string[2] =
'0';
25093 *ms = atoi (ms_string);
25099 if (ch != end && *ch ==
':')
25101 args[num_args++] = 0;
25107 while (num_args < (
int) (
sizeof (args) /
sizeof (*args)) &&
char_isdigit (*ch))
25113 if (tmp >= INT_MAX / 10)
25119 tmp = tmp * 10 + *ch -
'0';
25125 args[num_args++] = tmp;
25128 if (ch == end || *ch !=
':')
25140 *s = args[0] % 100;
25142 *m = args[0] % 100;
25143 *h = args[0] / 100;
25177 const char *src_str;
25178 int src_length = 0;
25194 src_str =
db_get_bit (src_value, &src_length);
25195 if (src_length > 0)
25207 return error_status;
25222 const char *src_str;
25254 return error_status;
25268 DB_TYPE src_type, length_type;
25300 return error_status;
25314 char path_buf[PATH_MAX + 1];
25319 path_buf[0] =
'\0';
25329 int path_buf_len = 0;
25338 return error_status;
25344 strcpy (path_buf, default_prefix);
25345 path_buf_len =
strlen (path_buf);
25348 strncat (path_buf,
db_get_string (src_value), MIN (src_size, PATH_MAX - path_buf_len));
25349 path_buf[path_buf_len + MIN (src_size, PATH_MAX - path_buf_len)] =
'\0';
25359 return error_status;
25385 error_status =
lob_length (src_value, result_value);
25393 return error_status;
25408 const char *src_str;
25440 return error_status;
25460 if (codeset_value !=
NULL)
25469 return error_status;
25497 return error_status;
25511 char path_buf[PATH_MAX + 1];
25516 path_buf[0] =
'\0';
25526 int path_buf_len = 0;
25535 return error_status;
25541 strcpy (path_buf, default_prefix);
25542 path_buf_len =
strlen (path_buf);
25545 strncat (path_buf,
db_get_string (src_value), MIN (src_size, PATH_MAX - path_buf_len));
25546 path_buf[path_buf_len + MIN (src_size, PATH_MAX - path_buf_len)] =
'\0';
25556 return error_status;
25582 error_status =
lob_length (src_value, result_value);
25590 return error_status;
25612 int *second,
int *millisecond,
const char **endp)
25641 return db_datetime_decode (&db_datetime, month, day, year, hour, minute, second, millisecond);
25688 return db_datetime_decode (dt_p, month, day, year, hour, minute, second, millisecond);
25792 int month = 0, day = 0, year = 0;
25822 return db_datetime_decode (dt_p, &month, &day, &year, hour, minute, second, millisecond);
25871 #if defined(ENABLE_UNUSED_FUNCTION) 25884 db_null_terminate_string (
const DB_VALUE * src_value,
char **strp)
25889 if (src_value ==
NULL)
25909 (*strp)[src_size] =
'\0';
25940 const bool has_escape_char,
const char *escape_str,
int *
const position,
25941 char **crt_char_p,
bool *
const is_escaped)
25946 if (pattern ==
NULL || length < 0 || position ==
NULL || crt_char_p ==
NULL || is_escaped ==
NULL || *position < 0
25947 || *position >= length)
25954 assert (has_escape_char ^ (escape_str ==
NULL));
25956 *crt_char_p =
NULL;
25957 *is_escaped =
false;
25959 if (has_escape_char
25960 &&
intl_cmp_char ((
unsigned char *) &(pattern[*position]), (
unsigned char *) escape_str, codeset,
25963 *position += char_size;
25964 if (*position >= length)
25967 *crt_char_p = (
char *) (&(pattern[*position - char_size]));
25970 *is_escaped =
true;
25973 *crt_char_p = (
char *) (&(pattern[*position]));
25974 intl_char_size ((
unsigned char *) *crt_char_p, 1, codeset, &char_size);
25975 *position += char_size;
26099 int *
const num_logical_chars,
int *
const last_safe_logical_pos,
26100 int *
const num_match_many,
int *
const num_match_one)
26104 const char *pattern_str =
NULL;
26105 int pattern_size = 0;
26107 if (pattern ==
NULL || num_logical_chars ==
NULL || last_safe_logical_pos ==
NULL || num_match_many ==
NULL 26108 || num_match_one ==
NULL)
26115 assert (has_escape_char ^ (escape_str ==
NULL));
26124 *num_logical_chars = 0;
26125 *last_safe_logical_pos = -22;
26126 *num_match_many = 0;
26127 *num_match_one = 0;
26131 for (i = 0; i < pattern_size;)
26133 char *crt_char_p =
NULL;
26134 bool is_escaped =
false;
26138 escape_str, &i, &crt_char_p, &is_escaped);
26148 ++(*num_match_many);
26152 ++(*num_match_one);
26156 if (*num_match_many == 0
26159 *last_safe_logical_pos = *num_logical_chars;
26162 ++(*num_logical_chars);
26201 const char *escape_str,
const bool compute_lower_bound,
26202 const int last_safe_logical_pos)
26205 const char *original =
NULL;
26206 int original_size = 0;
26207 char *result =
NULL;
26208 int result_length = 0;
26209 int result_size = 0;
26216 if (pattern ==
NULL || bound ==
NULL)
26223 assert (has_escape_char ^ (escape_str ==
NULL));
26241 if (last_safe_logical_pos < 0)
26243 if (compute_lower_bound)
26247 codeset, collation_id,
NULL);
26257 codeset, collation_id,
NULL);
26271 intl_char_count ((
unsigned char *) original, original_size, codeset, &char_count);
26273 assert (alloc_size >= original_size);
26276 if (result ==
NULL)
26283 assert (last_safe_logical_pos < char_count);
26285 for (i = 0, result_length = 0, result_size = 0; result_length <= last_safe_logical_pos;)
26287 char *crt_char_p =
NULL;
26288 bool is_escaped =
false;
26292 &crt_char_p, &is_escaped);
26298 if (result_length == last_safe_logical_pos)
26305 assert (result_length < last_safe_logical_pos);
26306 if (compute_lower_bound)
26318 if (result_length == last_safe_logical_pos && !compute_lower_bound)
26320 char *next_alpha_char_p = result + result_size;
26325 CAST_BUFLEN (original - crt_char_p) + original_size,
26326 (
unsigned char *) next_alpha_char_p, &next_len);
26327 result_length += next_len;
26332 intl_put_char ((
unsigned char *) result + result_size, (
unsigned char *) crt_char_p, codeset);
26339 assert (result_size <= alloc_size);
26342 result[result_size] = 0;
26349 if (result !=
NULL)
26383 const char *escape_str)
26386 const char *original =
NULL;
26387 int original_size = 0;
26388 char *result =
NULL;
26389 int result_length = 0;
26390 int result_size = 0;
26393 bool in_percent_sequence =
false;
26396 if (pattern ==
NULL || compressed_pattern ==
NULL)
26403 assert (has_escape_char ^ (escape_str ==
NULL));
26422 if (has_escape_char)
26426 intl_char_count ((
unsigned char *) original, original_size, codeset, &char_count);
26428 alloc_size = original_size + char_count *
strlen (escape_str);
26432 alloc_size = original_size;
26436 if (result ==
NULL)
26443 for (i = 0, result_length = 0, result_size = 0, in_percent_sequence =
false; i < original_size;)
26445 char *crt_char_p =
NULL;
26446 bool keep_crt_char =
false;
26447 bool needs_escape =
false;
26448 bool is_escaped =
false;
26452 &crt_char_p, &is_escaped);
26460 needs_escape =
true;
26467 keep_crt_char =
false;
26471 keep_crt_char =
true;
26478 assert (has_escape_char);
26480 intl_put_char ((
unsigned char *) result + result_size, (
unsigned char *) escape_str, codeset);
26483 result_size +=
intl_put_char ((
unsigned char *) result + result_size, (
unsigned char *) crt_char_p, codeset);
26489 in_percent_sequence =
true;
26493 in_percent_sequence =
false;
26497 assert (result_length <= alloc_size);
26498 result[result_size] = 0;
26507 if (result !=
NULL)
26530 const bool compute_lower_bound)
26533 bool has_escape_char =
false;
26535 int num_logical_chars = 0;
26536 int last_safe_logical_pos = 0;
26537 int num_match_many = 0;
26538 int num_match_one = 0;
26539 const char *escape_str =
NULL;
26543 if (src_pattern ==
NULL || result_bound ==
NULL)
26563 if (src_escape ==
NULL)
26565 has_escape_char =
false;
26572 has_escape_char =
true;
26593 has_escape_char =
true;
26605 &last_safe_logical_pos, &num_match_many, &num_match_one);
26613 compute_lower_bound, last_safe_logical_pos);
26649 bool ignore_prec_spaces,
bool ignore_trail_spaces,
char **
str_out,
bool * do_alloc)
26651 const char *val_buf;
26653 const char *val_buf_end =
NULL, *val_buf_end_non_space =
NULL;
26657 assert (pre_alloc_buf_size > 1);
26665 if (val_buf ==
NULL)
26675 val_size =
strlen (val_buf);
26678 if (val_size < pre_alloc_buf_size)
26681 strncpy (pre_alloc_buf, val_buf, val_size);
26682 pre_alloc_buf[val_size] =
'\0';
26683 *str_out = pre_alloc_buf;
26688 val_buf_end = val_buf + val_size;
26689 if (ignore_prec_spaces)
26691 while (val_buf < val_buf_end
26692 && ((*val_buf) ==
' ' || (*val_buf) ==
'\t' || (*val_buf) ==
'\r' || (*val_buf) ==
'\n'))
26700 if (ignore_trail_spaces && val_size > 0)
26702 val_buf_end_non_space = val_buf + val_size - 1;
26704 while (val_buf < val_buf_end_non_space
26705 && ((*val_buf_end_non_space) ==
' ' || (*val_buf_end_non_space) ==
'\t' || (*val_buf_end_non_space) ==
'\r' 26706 || (*val_buf_end_non_space) ==
'\n'))
26708 val_buf_end_non_space--;
26710 val_size =
CAST_BUFLEN (val_buf_end_non_space - val_buf) + 1;
26714 if (val_size < pre_alloc_buf_size)
26716 assert (ignore_prec_spaces || ignore_trail_spaces);
26719 strncpy (pre_alloc_buf, val_buf, val_size);
26720 pre_alloc_buf[val_size] =
'\0';
26721 *str_out = pre_alloc_buf;
26726 if (new_buf ==
NULL)
26730 strncpy (new_buf, val_buf, val_size);
26731 new_buf[val_size] =
'\0';
26732 *str_out = new_buf;
26750 const INTL_CODESET codeset,
int *token_id,
int *token_size)
26755 const char *parse_order;
26758 int skipped_leading_chars = 0;
26770 return error_status;
26782 return error_status;
26785 if (*token_id < 1 || *token_id > 12)
26789 return error_status;
26798 switch (token_type)
26801 p = (
const char **) lld->
day_name;
26821 p = (
const char **) lld->
am_pm;
26836 skipped_leading_chars++;
26841 for (i = 0; i < search_size; i++)
26844 int token_index = parse_order[
i];
26846 intl_case_match_tok (intl_lang_id, codeset, (
unsigned char *) p[token_index], (
unsigned char *) cs,
26847 strlen (p[token_index]), cs_size, token_size);
26849 assert (*token_size <= cs_size);
26853 *token_id = token_index + 1;
26854 *token_size += skipped_leading_chars;
26877 int token_id,
int case_mode,
char *buffer,
int *token_size)
26883 int print_len = -1;
26895 return error_status;
26898 switch (token_type)
26912 switch (intl_lang_id)
26930 switch (intl_lang_id)
26955 p = lld->
am_pm[token_id];
26971 switch (token_type)
26974 sprintf (buffer,
"%-6s", p);
26978 sprintf (buffer,
"%-4s", p);
26982 memcpy (buffer, p, 2);
26986 sprintf (buffer,
"%d", token_id + 1);
26987 *token_size = (token_id < 10) ? 1 : 2;
26990 sprintf (buffer,
"%s", p);
26991 *token_size =
strlen (p);
27000 token_bytes =
strlen (p);
27001 intl_char_count ((
unsigned char *) p, token_bytes, codeset, &token_len);
27003 if (case_mode == 2)
27007 intl_char_size ((
unsigned char *) buffer, token_len, codeset, token_size);
27009 else if (case_mode == 1)
27013 intl_char_size ((
unsigned char *) buffer, token_len, codeset, token_size);
27017 intl_char_size ((
unsigned char *) p, token_len, codeset, token_size);
27018 memcpy (buffer, p, *token_size);
27022 if (token_len < print_len)
27024 (void)
qstr_pad_string ((
unsigned char *) buffer + *token_size, print_len - token_len, codeset);
27025 *token_size +=
intl_pad_size (codeset) * (print_len - token_len);
27048 char *sz_end = sz + size;
27050 assert (src_locale != dst_locale);
27052 if (src_locale_group == dst_locale_group)
27054 assert (src_locale_frac == dst_locale_frac);
27058 assert (dst_locale_frac != dst_locale_group);
27060 for (; sz < sz_end && *sz !=
'\0'; sz++)
27062 if (*sz == src_locale_group)
27064 *sz = dst_locale_group;
27066 else if (*sz == src_locale_frac)
27068 *sz = dst_locale_frac;
27094 0x0, 0xF, 0xFF, 0xFFF, 0xFFFF,
27095 0xFFFFF, 0xFFFFFF, 0xFFFFFFF,
27096 0xFFFFFFFF, 0xFFFFFFFFF,
27097 0xFFFFFFFFFF, 0xFFFFFFFFFFF,
27098 0xFFFFFFFFFFFF, 0xFFFFFFFFFFFFF,
27099 0xFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFF,
27104 const char hex_digit[] =
"0123456789ABCDEF";
27108 const char *str =
NULL;
27109 char *hexval =
NULL;
27110 int str_size = 0, hexval_len = 0,
i = 0, error_code =
NO_ERROR;
27113 if (param ==
NULL || result ==
NULL)
27139 unsigned char pad_char[2];
27143 while (str_size >= pad_char_size
27144 && memcmp (&(str[str_size - pad_char_size]), pad_char, pad_char_size) == 0)
27146 str_size -= pad_char_size;
27158 hexval_len = str_size * 2;
27160 if (hexval ==
NULL)
27165 hexval[hexval_len] = 0;
27168 for (
i = 0;
i < str_size;
i++)
27170 hexval[
i * 2] = hex_digit[(str[
i] >> 4) & 0xF];
27171 hexval[
i * 2 + 1] = hex_digit[str[
i] & 0xF];
27182 UINT64 param_bigint;
27208 if (hexval ==
NULL)
27213 hexval[hexval_len] = 0;
27216 for (
i = hexval_len - 1;
i >= 0; --
i)
27218 hexval[
i] = hex_digit[param_bigint & 0xF];
27219 param_bigint >>= 4;
27253 #if !defined (CS_MODE) 27265 const char hex_digit[] =
"0123456789ABCDEF";
27267 char *guid_hex =
NULL;
27269 if (result ==
NULL)
27287 guid_bytes[6] &= 0x0F;
27289 guid_bytes[6] |= 0x40;
27292 guid_bytes[8] &= 0x3f;
27294 guid_bytes[8] |= 0x80;
27297 if (guid_hex ==
NULL)
27308 guid_hex[i * 2] = hex_digit[(guid_bytes[
i] >> 4) & 0xF];
27309 guid_hex[i * 2 + 1] = hex_digit[(guid_bytes[
i] & 0xF)];
27343 const char *str =
NULL;
27344 int str_size = 0, error_code =
NO_ERROR;
27347 if (param ==
NULL || result ==
NULL)
27371 unsigned char pad_char[2];
27375 while (str_size >= pad_char_size && memcmp (&(str[str_size - pad_char_size]), pad_char, pad_char_size) == 0)
27377 str_size -= pad_char_size;
27446 const unsigned char base_digits[] =
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
27457 bool num_is_signed =
false, res_is_signed =
false;
27458 bool res_has_minus =
false;
27464 char *num_p_str = num_str, *res_p_str =
NULL;
27465 char *num_end_ptr =
NULL;
27467 unsigned char swap = 0;
27468 int num_size = 0, res_size = 0;
27472 int from_base_int = 0, to_base_int = 0,
i = 0;
27475 if (num ==
NULL || from_base ==
NULL || to_base ==
NULL || result ==
NULL)
27501 num_is_signed = (from_base_int < 0);
27502 res_is_signed = (to_base_int < 0);
27503 from_base_int =
ABS (from_base_int);
27504 to_base_int =
ABS (to_base_int);
27506 if (from_base_int < 2 || from_base_int > 36 || to_base_int < 2 || to_base_int > 36)
27534 for (
i = 0; num_p_str[
i] !=
'\0'; ++
i)
27536 if (num_p_str[
i] ==
'.')
27538 num_p_str[
i] =
'\0';
27566 int prev_char_length = 0;
27567 char *str_start =
NULL, *str_end =
NULL;
27568 char *prev_char =
NULL;
27572 str_size = MIN (str_size,
sizeof (num_str) - 1);
27574 str_start = num_str;
27575 str_end = num_str + str_size;
27581 (
char *)
intl_prev_char ((
unsigned char *) str_end, (
unsigned char *) str_start, codeset,
27582 &prev_char_length);
27583 assert (prev_char >= str_start);
27587 str_size -= prev_char_length;
27590 str_end = prev_char;
27597 while (str_end > str_start);
27604 num_str[str_size] =
'\0';
27605 num_p_str = num_str;
27616 const char *num_bit_str =
db_get_bit (num, &num_size);
27623 num_str[num_size * 2] =
'\0';
27626 num_p_str = num_str;
27627 from_base_int = 16;
27628 num_is_signed =
false;
27641 base10 = (UINT64) strtoll (num_p_str, &num_end_ptr, from_base_int);
27645 base10 = (UINT64) strtoull (num_p_str, &num_end_ptr, from_base_int);
27655 if (num_end_ptr !=
NULL && *num_end_ptr !=
'\0')
27668 res_has_minus =
true;
27675 res_str[res_size++] =
'0';
27676 res_has_minus =
false;
27682 res_str[res_size++] = base_digits[base10 % to_base_int];
27683 base10 /= to_base_int;
27689 res_str[res_size++] =
'-';
27693 res_str[res_size] = 0;
27694 for (
i = 0;
i < res_size / 2;
i++)
27697 res_str[
i] = res_str[res_size -
i - 1];
27698 res_str[res_size -
i - 1] = swap;
27703 if (res_p_str ==
NULL)
27708 memcpy (res_p_str, res_str, res_size + 1);
27749 char digit_max = (char) (
'0' + base);
27750 char lower_char_max = (char) (
'a' - 10 + base);
27751 char upper_char_max = (char) (
'A' - 10 + base);
27752 bool has_decimal_point =
false;
27753 int space_length = 0;
27756 while (num_p < str_end)
27758 if (!
intl_is_space (num_p, str_end, codeset, &space_length))
27763 num_p += space_length;
27764 assert (num_p <= str_end);
27768 if (num_p == str_end)
27774 if (*num_p ==
'-' || *num_p ==
'+')
27780 if (base == 16 && *num_p ==
'0' && (*(num_p + 1) ==
'x' || *(num_p + 1) ==
'X'))
27785 if (num_p == str_end)
27792 for (; num_p != str_end; ++num_p)
27794 if (base < 10 && *num_p >=
'0' && *num_p < digit_max)
27798 if (base >= 10 && *num_p >=
'0' && *num_p <=
'9')
27803 if (base > 10 && *num_p >=
'a' && *num_p < lower_char_max)
27807 if (base > 10 && *num_p >=
'A' && *num_p < upper_char_max)
27812 if (*num_p ==
'.' && !has_decimal_point)
27816 has_decimal_point =
true;
27841 for (i = 0; i < 7; i++)
27847 for (i = 0; i < 12; i++)
27853 for (i = 0; i < 12; i++)
27860 for (i = 0; i < 7; i++)
27866 for (i = 0; i < 12; i++)
27872 for (i = 0; i < 12; i++)
27879 for (i = 0; i < 7; i++)
27885 for (i = 0; i < 12; i++)
27891 for (i = 0; i < 12; i++)
27920 if (src ==
NULL || result ==
NULL || enum_domain ==
NULL)
27970 const char *ip_string =
NULL;
27971 char *local_ipstring =
NULL;
27972 char *local_ipslice =
NULL;
27973 char *local_pivot =
NULL;
27976 const int ipsegmax = 256;
27978 int slice_count = 0;
27982 if (
string ==
NULL || result_numbered_ip ==
NULL)
28003 if (local_ipstring ==
NULL)
28008 memcpy (local_ipstring, ip_string, cnt);
28009 local_ipstring[cnt] =
'\0';
28011 ipbase = (
DB_BIGINT) ipsegmax *ipsegmax * ipsegmax;
28012 for (temp_tok = local_ipstring;; temp_tok =
NULL)
28015 local_ipslice = strtok_r (temp_tok,
". \t", &local_pivot);
28016 if (local_ipslice ==
NULL)
28028 result =
parse_int (&slice, local_ipslice, 0);
28029 if (result != 0 || slice < 0 || slice >= ipsegmax)
28035 numbered_ip += slice * ipbase;
28036 ipbase /= ipsegmax;
28039 if (numbered_ip < 0 || numbered_ip > (
DB_BIGINT) ipsegmax * ipsegmax * ipsegmax * ipsegmax || slice_count != 4)
28051 if (local_ipstring !=
NULL)
28088 char ip_string[16] = {
'\0' };
28089 char ip_seg_string[4] = {
'\0' };
28090 const int ip_seg_string_cnt = 4;
28092 const unsigned int ipv4_mask[] = { 0xFF000000, 0xFF0000, 0xFF00, 0xFF };
28093 const unsigned int ipfactor[] = { 256 * 256 * 256, 256 * 256, 256, 1 };
28094 unsigned int slice;
28096 int ret_string_len;
28099 if (number ==
NULL || result_ip_string ==
NULL)
28120 if (ip_number > ipmax || ip_number < 0)
28127 for (i = 0; i < 4; i++)
28129 slice = (ip_number & ipv4_mask[
i]) / ipfactor[i];
28130 snprintf (ip_seg_string, ip_seg_string_cnt,
"%u", slice);
28132 strcat (ip_string, ip_seg_string);
28135 strcat (ip_string,
".");
28140 ret_string_len =
strlen (ip_string);
28142 if (res_p_str ==
NULL)
28147 memcpy (res_p_str, ip_string, ret_string_len + 1);
28176 int base_type = 10;
28179 if (ipslice[0] ==
'\0')
28184 if (ipslice[0] ==
'0')
28188 if (ipslice[2] ==
'\0')
28195 else if (ipslice[1] !=
'\0')
28202 while (ipslice[pos] !=
'\0')
28204 if (base_type == 10)
28211 else if (base_type == 8)
28213 if (!(
'0' <= ipslice[pos] && ipslice[pos] <=
'7'))
28241 const char *fmt_str_ptr, *next_fmt_str_ptr, *last_fmt;
28243 char stack_buf_format[64];
28244 char *initial_buf_format =
NULL;
28245 bool do_free_buf_format =
false;
28286 &initial_buf_format, &do_free_buf_format);
28293 fmt_str_ptr = initial_buf_format;
28294 last_fmt = fmt_str_ptr +
strlen (fmt_str_ptr);
28296 while (fmt_str_ptr < last_fmt && strchr (
WHITE_CHARS, *fmt_str_ptr))
28301 next_fmt_str_ptr =
NULL;
28304 if (next_fmt_str_ptr !=
NULL && *next_fmt_str_ptr != 0)
28313 if (do_free_buf_format)
28416 return error_status;
28424 return error_status;
28432 return error_status;
28444 return error_status;
28447 if ((key_domain.
is_desc && cmp_res <= 0) || (!key_domain.
is_desc && cmp_res >= 0))
28451 return error_status;
28456 return error_status;
28472 int error_status, encode_len, src_len;
28473 const unsigned char *src_buf =
NULL;
28474 unsigned char *encode_buf =
NULL;
28485 return error_status;
28504 return error_status;
28513 error_status =
base64_encode (src_buf, src_len, &encode_buf, &encode_len);
28539 return error_status;
28562 int error_status,
err, decode_len, src_len;
28563 const unsigned char *src_buf =
NULL;
28564 unsigned char *decode_buf =
NULL;
28595 goto error_handling;
28604 err =
base64_decode (src_buf, src_len, &decode_buf, &decode_len);
28615 goto error_handling;
28628 goto error_handling;
28632 error_status =
err;
28633 goto error_handling;
28640 goto error_handling;
28644 return error_status;
28656 return error_status;
28689 switch (dbval_type)
28706 if (extr_operand == YEAR || extr_operand == MONTH || extr_operand == DAY)
28708 db_date_decode (&date, &extvar[MONTH], &extvar[DAY], &extvar[YEAR]);
28712 db_time_decode (&time, &extvar[HOUR], &extvar[MINUTE], &extvar[SECOND]);
28724 if (extr_operand == YEAR || extr_operand == MONTH || extr_operand == DAY)
28726 db_date_decode (&date, &extvar[MONTH], &extvar[DAY], &extvar[YEAR]);
28730 db_time_decode (&time, &extvar[HOUR], &extvar[MINUTE], &extvar[SECOND]);
28736 db_datetime_decode (datetime_p, &extvar[MONTH], &extvar[DAY], &extvar[YEAR], &extvar[HOUR], &extvar[MINUTE],
28748 db_datetime_decode (&datetime, &extvar[MONTH], &extvar[DAY], &extvar[YEAR], &extvar[HOUR], &extvar[MINUTE],
28749 &extvar[SECOND], &extvar[MILLISECOND]);
28759 db_datetime_decode (&datetime, &extvar[MONTH], &extvar[DAY], &extvar[YEAR], &extvar[HOUR], &extvar[MINUTE],
28760 &extvar[SECOND], &extvar[MILLISECOND]);
28772 switch (extr_operand)
28779 db_date_decode (&date, &extvar[MONTH], &extvar[DAY], &extvar[YEAR]);
28785 db_date_decode (&date, &extvar[MONTH], &extvar[DAY], &extvar[YEAR]);
28790 db_datetime_decode (&datetime_s, &extvar[MONTH], &extvar[DAY], &extvar[YEAR], &extvar[HOUR],
28791 &extvar[MINUTE], &extvar[SECOND], &extvar[MILLISECOND]);
28803 db_time_decode (&time, &extvar[HOUR], &extvar[MINUTE], &extvar[SECOND]);
28809 db_time_decode (&time, &extvar[HOUR], &extvar[MINUTE], &extvar[SECOND]);
28816 db_datetime_decode (&datetime_s, &extvar[MONTH], &extvar[DAY], &extvar[YEAR], &extvar[HOUR],
28817 &extvar[MINUTE], &extvar[SECOND], &extvar[MILLISECOND]);
28859 const char *t_source, *t_dest;
28881 if (len_source < 0)
28883 len_source =
strlen (t_source);
28887 len_dest =
strlen (t_dest);
28895 int month, day, year, julian_date;
28900 datetime->
date = julian_date;
28915 int hour,
min, sec;
28991 return error_status;
29007 return error_status;
29021 const char *timezone_str =
NULL;
29041 if (len_timezone < 0)
29043 len_timezone =
strlen (timezone_str);
29091 assert (max_expect_len > 1);
29094 if (*p ==
'-' || *p ==
'+')
static int end_day(void *data, const char *el_name)
int julian_encode(int m, int d, int y)
int db_inet_ntoa(DB_VALUE *result_ip_string, const DB_VALUE *number)
DB_C_FLOAT db_get_float(const DB_VALUE *value)
const char * month_short_parse_order
struct db_domain_info::char_info char_info
int db_compress_like_pattern(const DB_VALUE *const pattern, DB_VALUE *compressed_pattern, const bool has_escape_char, const char *escape_str)
int db_date_format(const DB_VALUE *date_value, const DB_VALUE *format, const DB_VALUE *date_lang, DB_VALUE *result, const TP_DOMAIN *domain)
int tz_create_session_tzid_for_time(const DB_TIME *src_time, bool src_is_utc, TZ_ID *tz_id)
#define TP_IS_DATE_OR_TIME_TYPE(typeid)
int db_time_format(const DB_VALUE *src_value, const DB_VALUE *format, const DB_VALUE *date_lang, DB_VALUE *result, const TP_DOMAIN *domain)
const char * month_name[CAL_MONTH_COUNT]
int bit_compare(const unsigned char *string1, int size1, const unsigned char *string2, int size2)
unsigned char * qstr_pad_string(unsigned char *s, int length, INTL_CODESET codeset)
#define DB_GET_STRING_PRECISION(v)
int db_make_datetime(DB_VALUE *value, const DB_DATETIME *datetime)
int intl_lower_string(const ALPHABET_DATA *alphabet, const unsigned char *src, unsigned char *dst, int length_in_chars)
int db_find_string_in_in_set(const DB_VALUE *needle, const DB_VALUE *stack, DB_VALUE *result)
int db_get_info_for_like_optimization(const DB_VALUE *const pattern, const bool has_escape_char, const char *escape_str, int *const num_logical_chars, int *const last_safe_logical_pos, int *const num_match_many, int *const num_match_one)
int db_value_coerce(const DB_VALUE *src, DB_VALUE *dest, const DB_DOMAIN *desired_domain)
#define QSTR_IS_LIKE_WILDCARD_CHAR(ch)
static long calc_unix_timestamp(struct tm *time_argument)
int db_get_date_weekday(const DB_VALUE *src_date, const int mode, DB_VALUE *result)
int db_get_date_quarter(const DB_VALUE *src_date, DB_VALUE *result)
int db_get_date_totaldays(const DB_VALUE *src_date, DB_VALUE *result)
void qstr_trim_trailing(const unsigned char *trim_charset_ptr, int trim_charset_size, const unsigned char *src_ptr, DB_TYPE src_type, int src_length, int src_size, INTL_CODESET codeset, int *trail_trimmed_length, int *trail_trimmed_size, bool trim_ascii_spaces)
char buf[DB_SMALL_CHAR_BUF_SIZE]
#define LANG_SYS_COLLATION
#define LANG_GET_BINARY_COLLATION(c)
int db_string_space(DB_VALUE const *count, DB_VALUE *result)
#define ER_TP_CANT_COERCE_OVERFLOW
static int qstr_bit_position(const unsigned char *sub_string, int sub_length, const unsigned char *src_string, int src_length, int *position)
int db_timestamptz_to_string(char *buf, int bufsize, DB_TIMESTAMP *utime, const TZ_ID *tz_id)
#define TZD_DEFAULT_EXPECTED_LEN
static int bstring_fls(const char *s, int n)
int db_get_week_of_year(int year, int month, int day, int mode)
int db_value_domain_min(DB_VALUE *value, const DB_TYPE type, const int precision, const int scale, const int codeset, const int collation_id, const DB_ENUMERATION *enumeration)
int db_elo_write(DB_ELO *elo, off_t pos, const void *buf, size_t count, DB_BIGINT *written_bytes)
#define db_locate_numeric(value)
int intl_pad_size(INTL_CODESET codeset)
int get_day(int month, int day, int year)
static int db_string_prefix_compare(const DB_VALUE *string1, const DB_VALUE *string2, DB_VALUE *result)
static int add_and_normalize_date_time(int *years, int *months, int *days, int *hours, int *minutes, int *seconds, int *milliseconds, DB_BIGINT y, DB_BIGINT m, DB_BIGINT d, DB_BIGINT h, DB_BIGINT mi, DB_BIGINT s, DB_BIGINT ms)
#define QSTR_IS_ANY_CHAR(s)
void qstr_make_typed_string(const DB_TYPE db_type, DB_VALUE *value, const int precision, DB_CONST_C_CHAR src, const int s_unit, const int codeset, const int collation_id)
const char * Short_Day_name_ISO[][7]
static int lob_from_file(const char *path, const DB_VALUE *src_value, DB_VALUE *lob_value, DB_TYPE lob_type)
int db_string_unique_prefix(const DB_VALUE *db_string1, const DB_VALUE *db_string2, DB_VALUE *db_result, TP_DOMAIN *key_domain)
static QSTR_CATEGORY qstr_get_category(const DB_VALUE *s)
const char * Short_Day_name_EUCKR[][7]
DB_CONST_C_BIT db_get_bit(const DB_VALUE *value, int *length)
int db_bigint_to_binary_string(const DB_VALUE *src_bigint, DB_VALUE *result)
DB_CONST_C_NCHAR db_get_nchar(const DB_VALUE *value, int *length)
#define DB_MAX_STRING_LENGTH
int db_bit_string_coerce(const DB_VALUE *src_string, DB_VALUE *dest_string, DB_DATA_STATUS *data_status)
int db_add_int_to_datetime(DB_DATETIME *datetime, DB_BIGINT bi2, DB_DATETIME *result_datetime)
int db_date_to_string(char *buf, int bufsize, DB_DATE *date)
int db_string_chr(DB_VALUE *res, DB_VALUE *dbval1, DB_VALUE *dbval2)
int db_get_date_format(const DB_VALUE *format_str, TIMESTAMP_FORMAT *format)
#define ER_ES_INVALID_PATH
int db_string_index_prefix(const DB_VALUE *string1, const DB_VALUE *string2, const DB_VALUE *index_type, DB_VALUE *prefix_index)
int db_make_bigint(DB_VALUE *value, const DB_BIGINT num)
int db_get_int(const DB_VALUE *value)
static int lob_length(const DB_VALUE *src_value, DB_VALUE *result_value)
int db_string_insert_substring(DB_VALUE *src_string, const DB_VALUE *position, const DB_VALUE *length, DB_VALUE *sub_string, DB_VALUE *result)
int db_string_regexp_replace(DB_VALUE *result, DB_VALUE *args[], int const num_args, cub_regex_object **comp_regex, char **comp_pattern)
#define INTL_NEXT_CHAR(ptr, s, codeset, current_char_size)
int parse_int(int *ret_p, const char *str_p, int base)
static bool is_safe_last_char_for_like_optimization(const char *chr, const bool is_escaped, INTL_CODESET codeset)
int tz_create_datetimetz_from_ses(const DB_DATETIME *dt, DB_DATETIMETZ *dt_tz)
DB_C_DOUBLE db_get_double(const DB_VALUE *value)
void numeric_coerce_num_to_double(DB_C_NUMERIC num, int scale, double *adouble)
int db_char_to_blob(const DB_VALUE *src_value, DB_VALUE *result_value)
int db_make_varchar(DB_VALUE *value, const int max_char_length, DB_CONST_C_CHAR str, const int char_str_byte_size, const int codeset, const int collation_id)
#define ER_DATE_EXCEED_LIMIT
int db_new_time(DB_VALUE *time_val, DB_VALUE *tz_source, DB_VALUE *tz_dest, DB_VALUE *result_time)
int db_datetime_decode(const DB_DATETIME *datetime, int *month, int *day, int *year, int *hour, int *minute, int *second, int *millisecond)
int db_convert_sec_to_time(const DB_VALUE *src, DB_VALUE *result)
int db_get_string_collation(const DB_VALUE *value)
static int db_get_next_like_pattern_character(const char *const pattern, const int length, const INTL_CODESET codeset, const bool has_escape_char, const char *escape_str, int *const position, char **crt_char_p, bool *const is_escaped)
static char db_string_escape_char(char c)
#define LOC_MAX_UCA_CHARS_SEQ
static bool varbit_truncated(const unsigned char *s, int s_length, int used_bits)
int db_timestamp_encode_ses(const DB_DATE *date, const DB_TIME *timeval, DB_TIMESTAMP *utime, TZ_ID *dest_tz_id)
#define ER_QSTR_INVALID_ESCAPE_SEQUENCE
int crypt_sha_two(THREAD_ENTRY *thread_p, const char *src, int src_len, int need_hash_len, char **dest_p, int *dest_len_p)
int db_string_fix_string_size(DB_VALUE *src_string)
static void left_nshift(const unsigned char *bit_string, int bit_string_size, int shift_amount, unsigned char *r, int r_size)
static int db_date_add_sub_interval_expr(DB_VALUE *result, const DB_VALUE *date, const DB_VALUE *expr, const int unit, int is_add)
TP_DOMAIN_STATUS tp_value_auto_cast(const DB_VALUE *src, DB_VALUE *dest, const TP_DOMAIN *desired_domain)
int tz_create_datetimetz_from_offset(const DB_DATETIME *dt, const int tzh, const int tzm, DB_DATETIMETZ *dt_tz)
int tz_create_datetimetz_from_zoneid_and_tzd(const DB_DATETIME *dt, TZ_REGION *default_tz_region, const int zone_id, const char *tzd, const int tzd_len, bool is_time_tz, DB_DATETIMETZ *dt_tz)
int count_nonleap_years_up_to(int year)
int db_get_enum_codeset(const DB_VALUE *value)
int db_guid(THREAD_ENTRY *thread_p, DB_VALUE *result)
const char * lang_date_format_parse(const INTL_LANG lang_id, const INTL_CODESET codeset, const DB_TYPE type, INTL_CODESET *format_codeset)
int tz_create_timestamptz_from_offset(const DB_DATE *date, const DB_TIME *time, const int tzh, const int tzm, DB_TIMESTAMPTZ *timestamp_tz)
void tz_get_session_tz_region(TZ_REGION *tz_region)
#define assert_release(e)
int db_create_fbo(DB_VALUE *value, DB_TYPE type)
#define QSTR_MAX_PRECISION(str_type)
#define ER_QSTR_INVALID_DATA_TYPE
int varbit_compare(const unsigned char *string1, int size1, const unsigned char *string2, int size2)
int db_subtract_int_from_datetime(DB_DATETIME *dt1, DB_BIGINT bi2, DB_DATETIME *result_datetime)
int db_get_time_from_dbvalue(const DB_VALUE *src_date, int *hour, int *minute, int *second, int *millisecond)
const char * am_pm[CAL_AM_PM_COUNT]
static int make_number(char *src, char *last_src, INTL_CODESET codeset, char *token, int *token_length, DB_VALUE *r, const int precision, const int scale, const INTL_LANG number_lang_id)
void intl_binary_to_euckr(const unsigned char *in_buf, const int in_size, unsigned char **out_buf, int *out_size)
int db_timestampltz_to_string(char *buf, int bufsize, DB_TIMESTAMP *utime)
static int qstr_pad(MISC_OPERAND pad_operand, int pad_length, const unsigned char *pad_charset_ptr, int pad_charset_length, int pad_charset_size, const unsigned char *src_ptr, DB_TYPE src_type, int src_length, int src_size, INTL_CODESET codeset, unsigned char **result, DB_TYPE *result_type, int *result_length, int *result_size)
INTL_LANG lang_get_lang_id_from_flag(const int flag, bool *has_user_format, bool *has_user_lang)
int db_string_reverse(const DB_VALUE *src_str, DB_VALUE *result_str)
#define UINT64_MAX_HEX_DIGITS
int db_string_to_datetime_ex(const char *str, int str_len, DB_DATETIME *datetime)
int tz_create_datetimetz_from_parts(const int m, const int d, const int y, const int h, const int mi, const int s, const int ms, const TZ_ID *tz_id, DB_DATETIMETZ *dt_tz)
int tz_create_timestamptz_from_zoneid_and_tzd(const DB_DATE *date, const DB_TIME *time, TZ_REGION *default_tz_region, const int zone_id, const char *tzd, const int tzd_len, DB_TIMESTAMPTZ *timestamp_tz)
#define DB_NUMERIC_E38_MAX
#define QSTR_SPLIT_KEY(id, is_desc, str1, size1, str2, size2, k, s, ti)
int db_make_date(DB_VALUE *value, const int month, const int day, const int year)
static int get_string_date_token_id(const STRING_DATE_TOKEN token_type, const INTL_LANG intl_lang_id, const char *cs, const INTL_CODESET codeset, int *token_id, int *token_size)
#define ER_QSTR_FORMAT_DUPLICATION
DB_DATETIMETZ * db_get_datetimetz(const DB_VALUE *value)
DB_CONST_C_CHAR db_get_char(const DB_VALUE *value, int *length)
int db_make_datetimeltz(DB_VALUE *value, const DB_DATETIME *datetime)
static int qstr_translate(const unsigned char *src_ptr, DB_TYPE src_type, int src_size, INTL_CODESET codeset, const unsigned char *from_str_ptr, int from_str_size, const unsigned char *to_str_ptr, int to_str_size, unsigned char **result_ptr, DB_TYPE *result_type, int *result_len, int *result_size)
int db_string_from_base64(DB_VALUE const *src, DB_VALUE *result)
const char Short_Month_name_parse_order[][12]
const char * Short_Month_name_ISO[][12]
#define ES_LOCAL_PATH_PREFIX
#define TP_IS_STRING_TYPE(typeid)
int db_string_to_timestamptz_ex(const char *str, int str_len, DB_TIMESTAMPTZ *ts_tz, bool *has_zone, bool is_cast)
int db_string_to_timestamp_ex(const char *str, int str_len, DB_TIMESTAMP *utime)
#define ER_QSTR_BAD_SRC_CODESET
int tz_conv_tz_time_w_zone_name(const DB_TIME *time_source, const char *source_zone, int len_source, const char *dest_zone, int len_dest, DB_TIME *time_dest)
const char * month_short_name[CAL_MONTH_COUNT]
static int qstr_substring(const unsigned char *src, int src_length, int start, int length, INTL_CODESET codeset, unsigned char **r, int *r_length, int *r_size)
int db_time_dbval(DB_VALUE *result, const DB_VALUE *datetime_value, const TP_DOMAIN *domain)
int db_from_unixtime(const DB_VALUE *src_value, const DB_VALUE *format, const DB_VALUE *date_lang, DB_VALUE *result, const TP_DOMAIN *domain)
int db_string_sha_one(DB_VALUE const *src, DB_VALUE *result)
double db_value_get_monetary_amount_as_double(const DB_VALUE *value)
#define ER_TIMESTAMP_CONVERSION
const char * Month_name_UTF8[][12]
static int roundoff(const INTL_LANG lang, char *src_string, int flag, int *cipher, char *format)
int db_to_timestamp(const DB_VALUE *src_str, const DB_VALUE *format_str, const DB_VALUE *date_lang, const DB_TYPE type, DB_VALUE *result_timestamp)
#define ER_QSTR_INVALID_FORMAT
#define DB_VALUE_PRECISION(value)
static int lob_to_bit_char(const DB_VALUE *src_value, DB_VALUE *result_value, DB_TYPE lob_type, int max_length)
static int qstr_ffs(int v)
char lang_digit_fractional_symbol(const INTL_LANG lang_id)
int db_add_time(const DB_VALUE *left, const DB_VALUE *right, DB_VALUE *result, const TP_DOMAIN *domain)
enum tp_domain_status TP_DOMAIN_STATUS
bool intl_is_space(const char *str, const char *str_end, const INTL_CODESET codeset, int *space_size)
const unsigned char * intl_prev_char(const unsigned char *s, const unsigned char *s_start, INTL_CODESET codeset, int *prev_char_size)
int intl_case_match_tok(const INTL_LANG lang_id, const INTL_CODESET codeset, unsigned char *tok, unsigned char *src, const int size_tok, const int size_src, int *matched_size_src)
static int get_number_token(const INTL_LANG lang, char *fsp, int *length, char *last_position, char **next_fsp, INTL_CODESET codeset)
bool intl_is_max_bound_chr(INTL_CODESET codeset, const unsigned char *chr)
int instr(int &result, const cub_regex_object ®, const std::string &src, const int position, const int occurrence, const int return_opt, const INTL_CODESET codeset)
#define ER_QSTR_SRC_TOO_LONG
static bool is_char_string(const DB_VALUE *s)
int base64_decode(const unsigned char *src, int src_len, unsigned char **dest, int *dest_len)
int db_blob_length(const DB_VALUE *src_value, DB_VALUE *result_value)
static int qstr_concatenate(const unsigned char *s1, int s1_length, int s1_precision, DB_TYPE s1_type, const unsigned char *s2, int s2_length, int s2_precision, DB_TYPE s2_type, INTL_CODESET codeset, unsigned char **result, int *result_length, int *result_size, DB_TYPE *result_type, DB_DATA_STATUS *data_status)
int db_string_make_empty_typed_string(DB_VALUE *db_val, const DB_TYPE db_type, int precision, int codeset, int collation_id)
int db_string_substring(const MISC_OPERAND substr_operand, const DB_VALUE *src_string, const DB_VALUE *start_position, const DB_VALUE *extraction_length, DB_VALUE *sub_string)
static int make_scientific_notation(char *src_string, int cipher)
#define DB_VALUE_SCALE(value)
DB_ELO * db_get_elo(const DB_VALUE *value)
int db_datetimetz_to_string(char *buf, int bufsize, DB_DATETIME *dt, const TZ_ID *tz_id)
static int scientific_to_decimal_string(const INTL_LANG lang, char *src_string, char **scientific_str)
void qstr_bit_to_hex_coerce(char *buffer, int buffer_size, const char *src, int src_length, int pad_flag, int *copy_size, int *truncation)
const char * Day_name_EUCKR[][7]
int crypt_generate_random_bytes(char *dest, int length)
#define REINTERPRET_CAST(dest_type, expr)
#define DATETIMETZ_BUF_SIZE
DB_TIMESTAMPTZ * db_get_timestamptz(const DB_VALUE *value)
int db_date_encode(DB_DATE *date, int month, int day, int year)
int db_make_short(DB_VALUE *value, const DB_C_SHORT num)
int intl_euckr_to_utf8(const unsigned char *in_buf, const int in_size, unsigned char **out_buf, int *out_size)
int db_timestamp_to_string(char *buf, int bufsize, DB_TIMESTAMP *utime)
const char * Short_Day_name_UTF8[][7]
const char * lang_get_collation_name(const int coll_id)
int intl_put_char(unsigned char *dest, const unsigned char *char_p, const INTL_CODESET codeset)
int db_check_time_date_format(const char *format_s)
int db_string_aes_decrypt(DB_VALUE const *src, DB_VALUE const *key, DB_VALUE *result)
int compile(cub_regex_object *&compiled_regex, const char *pattern, const std::regex_constants::syntax_option_type reg_flags, const LANG_COLLATION *collation)
int db_make_string(DB_VALUE *value, DB_CONST_C_CHAR str)
static int qstr_grow_string(DB_VALUE *src_string, DB_VALUE *result, int new_size)
#define SKIP_SPACES(ch, end)
DB_MONETARY * db_get_monetary(const DB_VALUE *value)
static int qstr_position(const char *sub_string, const int sub_size, const int sub_length, const char *src_string, const char *src_end, const char *src_string_bound, int src_length, int coll_id, bool is_forward_search, int *position)
UINT64 prm_get_bigint_value(PARAM_ID prm_id)
bool intl_is_min_bound_chr(INTL_CODESET codeset, const unsigned char *chr)
int tz_get_best_match_zone(const char *name, int *size)
int db_string_position(const DB_VALUE *sub_string, const DB_VALUE *src_string, DB_VALUE *result)
#define QSTR_MATCH(id, string1, size1, string2, size2, esc, has_last_escape, match_size)
int tz_create_datetimetz(const DB_DATETIME *dt, const char *tz_str, const int tz_size, const TZ_REGION *default_tz_region, DB_DATETIMETZ *dt_tz, const char **end_tz_str)
static bool is_integer(const DB_VALUE *i)
unsigned int DB_TIMESTAMP
static bool is_number(const DB_VALUE *n)
int db_unix_timestamp(const DB_VALUE *src_date, DB_VALUE *result_timestamp)
int db_add_days_to_year(const DB_VALUE *src_year, const DB_VALUE *src_days, DB_VALUE *result)
TP_DOMAIN * tp_domain_resolve_default(DB_TYPE type)
int db_string_concatenate(const DB_VALUE *string1, const DB_VALUE *string2, DB_VALUE *result, DB_DATA_STATUS *data_status)
static int qstr_bit_substring(const unsigned char *src, int src_length, int start, int length, unsigned char **r, int *r_length)
void er_set(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
int db_string_lower(const DB_VALUE *string, DB_VALUE *lower_string)
LANG_COLLATION * lang_get_collation(const int coll_id)
int db_make_enumeration(DB_VALUE *value, unsigned short index, DB_CONST_C_CHAR str, int size, unsigned char codeset, const int collation_id)
int db_value_put_encoded_time(DB_VALUE *value, const DB_TIME *time)
#define ER_QPROC_INVALID_PARAMETER
DB_BIGINT db_elo_size(DB_ELO *elo)
enum currency_check_mode CURRENCY_CHECK_MODE
#define DB_MAX_NUMERIC_PRECISION
#define ER_QPROC_STRING_SIZE_TOO_BIG
#define LIKE_WILDCARD_MATCH_MANY
#define ER_LANG_CODESET_NOT_AVAILABLE
int db_string_elt(DB_VALUE *result, DB_VALUE *arg[], int const num_args)
#define LIKE_WILDCARD_MATCH_ONE
static int db_date_add_sub_interval_days(DB_VALUE *result, const DB_VALUE *date, const DB_VALUE *db_days, bool is_add)
int tz_create_session_tzid_for_datetime(const DB_DATETIME *src_dt, bool src_is_utc, TZ_ID *tz_id)
char lang_digit_grouping_symbol(const INTL_LANG lang_id)
static void bit_ncat(unsigned char *r, int offset, const unsigned char *s, int n)
INTL_UTF8_VALIDITY intl_check_utf8(const unsigned char *buf, int size, char **pos)
#define LANG_COERCIBLE_CODESET
#define QSTR_NUM_BYTES(a)
int qstr_hex_to_bin(char *dest, int dest_size, const char *src, int src_size)
int db_string_to_datetimetz_ex(const char *str, int str_len, DB_DATETIMETZ *dt_tz, bool *has_zone)
struct db_domain_info::numeric_info numeric_info
#define ER_QSTR_TONUM_FORMAT_MISMATCH
int prm_get_integer_value(PARAM_ID prm_id)
#define QSTR_TIME_STAMPLENGTH
#define ER_TIME_CONVERSION
void intl_pad_char(const INTL_CODESET codeset, unsigned char *pad_char, int *pad_size)
int db_string_regexp_like(DB_VALUE *result, DB_VALUE *args[], int const num_args, cub_regex_object **comp_regex, char **comp_pattern)
static int start_month(void *data, const char **attr)
int db_timestamp_encode_utc(const DB_DATE *date, const DB_TIME *timeval, DB_TIMESTAMP *utime)
#define QSTR_TO_CHAR_LEN_MULTIPLIER_RATIO
static int parse_tzd(const char *str, const int max_expect_len)
int db_string_replace(const DB_VALUE *src_string, const DB_VALUE *srch_string, const DB_VALUE *repl_string, DB_VALUE *replaced_string)
#define ER_PRECISION_OVERFLOW
static bool is_valid_ip_slice(const char *ipslice)
#define ER_IT_DATA_OVERFLOW
#define ER_OUT_OF_VIRTUAL_MEMORY
#define DB_ENUM_OVERFLOW_VAL
int db_format(const DB_VALUE *value, const DB_VALUE *decimals, const DB_VALUE *number_lang, DB_VALUE *result, const TP_DOMAIN *domain)
bool intl_is_currency_symbol(const char *src, DB_CURRENCY *currency, int *symbol_size, const CURRENCY_CHECK_MODE check_mode)
static int db_str_to_millisec(const char *str)
int db_time_encode(DB_TIME *timeval, int hour, int minute, int second)
int db_string_compare(const DB_VALUE *string1, const DB_VALUE *string2, DB_VALUE *result)
int qstr_compare(const unsigned char *string1, int size1, const unsigned char *string2, int size2)
int db_sys_date_and_epoch_time(DB_VALUE *dt_dbval, DB_VALUE *ts_dbval)
#define ER_ATTEMPT_TO_USE_ZERODATE
const char * day_parse_order
static int shift_left(unsigned char *bit_string, int bit_string_size)
int db_string_pad(const MISC_OPERAND pad_operand, const DB_VALUE *src_string, const DB_VALUE *pad_length, const DB_VALUE *pad_charset, DB_VALUE *padded_string)
#define DB_VALUE_DOMAIN_TYPE(value)
int db_to_datetime(const DB_VALUE *src_str, const DB_VALUE *format_str, const DB_VALUE *date_lang, const DB_TYPE type, DB_VALUE *result_datetime)
int tp_value_string_to_double(const DB_VALUE *value, DB_VALUE *result)
int db_ascii(const DB_VALUE *param, DB_VALUE *result)
#define ER_QSTR_MISMATCHING_ARGUMENTS
int intl_iso88591_to_euckr(const unsigned char *in_buf, const int in_size, unsigned char **out_buf, int *out_size)
int db_string_substring_index(DB_VALUE *src_string, DB_VALUE *delim_string, const DB_VALUE *count, DB_VALUE *result)
int db_get_date_item(const DB_VALUE *src_date, const int item_type, DB_VALUE *result)
#define TP_DOMAIN_COLLATION(dom)
#define TP_IS_NUMERIC_TYPE(typeid)
const char * Month_name_EUCKR[][12]
#define DB_IS_STRING(value)
int db_string_upper(const DB_VALUE *string, DB_VALUE *upper_string)
static enum scanner_mode mode
static int make_number_to_char(const INTL_LANG lang, char *num_string, char *format_str, int *length, DB_CURRENCY currency, char **result_str, INTL_CODESET codeset)
static int qstr_trim(MISC_OPERAND tr_operand, const unsigned char *trim, int trim_length, int trim_size, const unsigned char *src_ptr, DB_TYPE src_type, int src_length, int src_size, INTL_CODESET codeset, unsigned char **res, DB_TYPE *res_type, int *res_length, int *res_size)
const char * day_short_parse_order
#define OR_CHECK_INT_OVERFLOW(i)
static int start_day(void *data, const char **attr)
const char * am_pm_parse_order
int db_date_dbval(DB_VALUE *result, const DB_VALUE *date_value, const TP_DOMAIN *domain)
int tz_str_to_region(const char *tz_str, const int tz_str_size, TZ_REGION *tz_region)
int substr(std::string &result, bool &is_matched, const cub_regex_object ®, const std::string &src, const int position, const int occurrence, const INTL_CODESET codeset)
static int end_month(void *data, const char *el_name)
int db_make_timestamptz(DB_VALUE *value, const DB_C_TIMESTAMPTZ *ts_tz_val)
int db_string_put_cs_and_collation(DB_VALUE *value, const int codeset, const int collation_id)
const char * Short_Month_name_EUCKR[][12]
void intl_binary_to_utf8(const unsigned char *in_buf, const int in_size, unsigned char **out_buf, int *out_size)
TP_DOMAIN_STATUS tp_value_cast(const DB_VALUE *src, DB_VALUE *dest, const TP_DOMAIN *desired_domain, bool implicit_coercion)
int db_char_string_coerce(const DB_VALUE *src_string, DB_VALUE *dest_string, DB_DATA_STATUS *data_status)
#define TP_DOMAIN_TYPE(dom)
const char AM_PM_parse_order[][12]
const char * Am_Pm_name_EUCKR[][12]
int db_datetime_to_timestamp(const DB_VALUE *src_datetime, DB_VALUE *result_timestamp)
#define TZ_DS_STRING_SIZE
static void cleanup(int signo)
#define ER_QSTR_INVALID_ESCAPE_CHARACTER
int db_timestamp(const DB_VALUE *src_datetime1, const DB_VALUE *src_time2, DB_VALUE *result_datetime)
int db_str_to_date(const DB_VALUE *str, const DB_VALUE *format, const DB_VALUE *date_lang, DB_VALUE *result, TP_DOMAIN *domain)
int db_sys_timestamp(DB_VALUE *result_timestamp)
int db_string_translate(const DB_VALUE *src_string, const DB_VALUE *from_string, const DB_VALUE *to_string, DB_VALUE *transed_string)
const char * Am_Pm_name_ISO[][12]
int db_date_parse_time(char const *str, int str_len, DB_TIME *time, int *millisecond)
int db_blob_to_bit(const DB_VALUE *src_value, const DB_VALUE *length_value, DB_VALUE *result_value)
#define NUMERIC_MAX_STRING_SIZE
unsigned char * DB_C_NUMERIC
int db_get_day_of_week(int year, int month, int day)
int db_string_instr(const DB_VALUE *src_string, const DB_VALUE *sub_string, const DB_VALUE *start_pos, DB_VALUE *result)
#define GUID_STANDARD_BYTES_LENGTH
int tz_datetimeltz_to_local(const DB_DATETIME *dt_ltz, DB_DATETIME *dt_local)
int db_date_add_interval_days(DB_VALUE *result, const DB_VALUE *date, const DB_VALUE *db_days)
#define LANG_COERCIBLE_COLL
const char * pr_type_name(DB_TYPE id)
int db_blob_from_file(const DB_VALUE *src_value, DB_VALUE *result_value)
int db_value_to_enumeration_value(const DB_VALUE *src, DB_VALUE *result, const TP_DOMAIN *enum_domain)
#define ER_QSTR_INCOMPATIBLE_CODE_SETS
int db_get_time_item(const DB_VALUE *src_date, const int item_type, DB_VALUE *result)
#define TZD_MAX_EXPECTED_LEN
#define QSTR_VALUE_PRECISION(value)
int db_value_domain_max(DB_VALUE *value, const DB_TYPE type, const int precision, const int scale, const int codeset, const int collation_id, const DB_ENUMERATION *enumeration)
const char * day_name[CAL_DAY_COUNT]
static int qstr_bit_coerce(const unsigned char *src, int src_length, int src_precision, DB_TYPE src_type, unsigned char **dest, int *dest_length, int dest_precision, DB_TYPE dest_type, DB_DATA_STATUS *data_status)
int char_compare(const unsigned char *string1, int size1, const unsigned char *string2, int size2)
int crypt_md5_buffer_hex(const char *buffer, size_t len, char *resblock)
#define db_private_free_and_init(thrd, ptr)
int db_value_put_encoded_date(DB_VALUE *value, const DB_DATE *date)
int db_timestamp_decode_w_tz_id(const DB_TIMESTAMP *utime, const TZ_ID *tz_id, DB_DATE *date, DB_TIME *timeval)
static int qstr_replace(const unsigned char *src_buf, int src_len, int src_size, INTL_CODESET codeset, int coll_id, const unsigned char *srch_str_buf, int srch_str_size, const unsigned char *repl_str_buf, int repl_str_size, unsigned char **result_buf, int *result_len, int *result_size)
int db_add_months(const DB_VALUE *src_date, const DB_VALUE *nmonth, DB_VALUE *result_date)
int db_from_tz(DB_VALUE *time_val, DB_VALUE *tz, DB_VALUE *time_val_with_tz)
int db_sys_date(DB_VALUE *result_date)
#define db_private_free(thrd, ptr)
int db_to_number(const DB_VALUE *src_str, const DB_VALUE *format_str, const DB_VALUE *number_lang, DB_VALUE *result_num)
static int to_number_next_state(const int previous_state, const int input_char, const INTL_LANG number_lang_id)
int conv_tz(void *p_out, const void *p_in, DB_TYPE type)
#define db_private_alloc(thrd, size)
int intl_char_size(const unsigned char *src, int length_in_chars, INTL_CODESET src_codeset, int *byte_count)
#define CONST_CAST(dest_type, expr)
const char * Month_name_ISO[][12]
int db_string_aes_encrypt(DB_VALUE const *src, DB_VALUE const *key, DB_VALUE *result)
const char * month_parse_order
need_clear_type need_clear
int nchar_compare(const unsigned char *string1, int size1, const unsigned char *string2, int size2, INTL_CODESET codeset)
int db_get_cs_coll_info(DB_VALUE *result, const DB_VALUE *val, const int mode)
int db_date_diff(const DB_VALUE *date_value1, const DB_VALUE *date_value2, DB_VALUE *result)
int count(int &result, const cub_regex_object ®, const std::string &src, const int position, const INTL_CODESET codeset)
int pr_clear_value(DB_VALUE *value)
const LANG_LOCALE_DATA * lang_get_specific_locale(const INTL_LANG lang, const INTL_CODESET codeset)
int db_timestamp_decode_ses(const DB_TIMESTAMP *utime, DB_DATE *date, DB_TIME *timeval)
DB_BIGINT db_get_bigint(const DB_VALUE *value)
#define ER_OPFUNC_INET_ATON_ARG
int db_get_date_from_days(const DB_VALUE *src, DB_VALUE *result)
int db_string_rlike(const DB_VALUE *src, const DB_VALUE *pattern, const DB_VALUE *case_sensitive, cub_regex_object **comp_regex, char **comp_pattern, int *result)
int db_time_to_string(char *buf, int bufsize, DB_TIME *time)
const char * lang_charset_cubrid_name(const INTL_CODESET codeset)
int db_string_char_length(const DB_VALUE *string, DB_VALUE *char_count)
static int adjust_precision(char *data, int precision, int scale)
#define DB_DEFAULT_NUMERIC_PRECISION
DB_DOMAIN * db_type_to_db_domain(const DB_TYPE type)
int db_json_copy_and_convert_to_utf8(const DB_VALUE *src_dbval, DB_VALUE *dest_dbval, const DB_VALUE **json_str_dbval)
int db_make_time(DB_VALUE *value, const int hour, const int minute, const int second)
int db_datetime_to_string(char *buf, int bufsize, DB_DATETIME *datetime)
int db_string_limit_size_string(DB_VALUE *src_string, DB_VALUE *result, const int new_size, int *spare_bytes)
int varnchar_compare(const unsigned char *string1, int size1, const unsigned char *string2, int size2, INTL_CODESET codeset)
int db_make_datetimetz(DB_VALUE *value, const DB_DATETIMETZ *datetimetz)
const char * intl_backskip_spaces(const char *str_begin, const char *str_end, const INTL_CODESET codeset)
struct db_domain_info::general_info general_info
#define ER_DATE_CONVERSION
static int get_cur_year(void)
int db_clob_to_char(const DB_VALUE *src_value, const DB_VALUE *codeset_value, DB_VALUE *result_value)
#define UINT64_MAX_BIN_DIGITS
int intl_euckr_to_iso88591(const unsigned char *in_buf, const int in_size, unsigned char **out_buf, int *out_size)
const char * Day_name_UTF8[][7]
void util_get_second_and_ms_since_epoch(time_t *secs, int *msec)
int db_last_day(const DB_VALUE *src_date, DB_VALUE *result_day)
static int qstr_bit_concatenate(const unsigned char *s1, int s1_length, int s1_precision, DB_TYPE s1_type, const unsigned char *s2, int s2_length, int s2_precision, DB_TYPE s2_type, unsigned char **result, int *result_length, int *result_size, DB_TYPE *result_type, DB_DATA_STATUS *data_status)
int crypt_default_encrypt(THREAD_ENTRY *thread_p, const char *src, int src_len, const char *key, int key_len, char **dest_p, int *dest_len_p, CIPHER_ENCRYPTION_TYPE enc_type)
static int print_string_date_token(const STRING_DATE_TOKEN token_type, const INTL_LANG intl_lang_id, const INTL_CODESET codeset, int token_id, int case_mode, char *buffer, int *token_size)
int parse_match_type(std::regex_constants::syntax_option_type ®_flags, std::string &opt_str)
int db_inet_aton(DB_VALUE *result_numbered_ip, const DB_VALUE *string)
#define TP_IS_CHAR_TYPE(typeid)
TP_DOMAIN_COLL_ACTION collation_flag
static void error(const char *msg)
const char Day_name_parse_order[][7]
int db_date_add_interval_expr(DB_VALUE *result, const DB_VALUE *date, const DB_VALUE *expr, const int unit)
int db_string_to_base64(DB_VALUE const *src, DB_VALUE *result)
static int hextoi(char hex_char)
int qstr_bit_to_bin(char *dest, int dest_size, const char *src, int src_size)
#define DB_DEFAULT_PRECISION
void tz_id_to_region(const TZ_ID *tz_id, TZ_REGION *tz_region)
#define TP_TYPE_HAS_COLLATION(typeid)
char * numeric_db_value_print(const DB_VALUE *val, char *buf)
int tz_utc_datetimetz_to_local(const DB_DATETIME *dt_utc, const TZ_ID *tz_id, DB_DATETIME *dt_local)
int db_sys_datetime(DB_VALUE *result_datetime)
int db_string_to_time_ex(const char *str, int str_len, DB_TIME *time)
int(* strmatch)(const LANG_COLLATION *lang_coll, bool is_match, const unsigned char *string1, int size1, const unsigned char *string2, int size2, const unsigned char *escape, const bool has_last_escape, int *str1_match_size, bool ignore_trailing_space)
#define QSTR_IS_NATIONAL_CHAR(s)
int qstr_bin_to_hex(char *dest, int dest_size, const char *src, int src_size)
int pr_clone_value(const DB_VALUE *src, DB_VALUE *dest)
int tz_conv_tz_datetime_w_zone_name(const DB_DATETIME *src_dt, const char *source_zone, int len_source, const char *dest_zone, int len_dest, DB_DATETIME *dest_dt)
int crypt_default_decrypt(THREAD_ENTRY *thread_p, const char *src, int src_len, const char *key, int key_len, char **dest_p, int *dest_len_p, CIPHER_ENCRYPTION_TYPE enc_type)
static int sub_and_normalize_date_time(int *years, int *months, int *days, int *hours, int *minutes, int *seconds, int *milliseconds, DB_BIGINT y, DB_BIGINT m, DB_BIGINT d, DB_BIGINT h, DB_BIGINT mi, DB_BIGINT s, DB_BIGINT ms)
int db_sys_time(DB_VALUE *result_time)
static int db_check_or_create_null_term_string(const DB_VALUE *str_val, char *pre_alloc_buf, int pre_alloc_buf_size, bool ignore_prec_spaces, bool ignore_trail_spaces, char **str_out, bool *do_alloc)
#define QSTR_IS_FIXED_LENGTH(s)
int db_convert_time_to_sec(const DB_VALUE *src_date, DB_VALUE *result)
const char * Am_Pm_name_UTF8[][12]
#define ER_QSTR_EMPTY_STRING
int db_make_varbit(DB_VALUE *value, const int max_bit_length, DB_CONST_C_BIT bit_str, const int bit_str_bit_size)
void julian_decode(int jul, int *monthp, int *dayp, int *yearp, int *weekp)
int db_string_escape_str(const char *src_str, size_t src_size, char **res_string, size_t *dest_size)
int db_get_date_dayofyear(const DB_VALUE *src_date, DB_VALUE *result)
int db_make_db_char(DB_VALUE *value, const INTL_CODESET codeset, const int collation_id, const char *str, const int size)
static void str_out(const char *fmt,...)
void init_builtin_calendar_names(LANG_LOCALE_DATA *lld)
#define REPL_POS_ARRAY_EXTENT
int db_hex(const DB_VALUE *param, DB_VALUE *result)
#define ER_QSTR_BAD_LENGTH
int db_datetime_encode(DB_DATETIME *datetime, int month, int day, int year, int hour, int minute, int second, int millisecond)
int db_string_trim(const MISC_OPERAND tr_operand, const DB_VALUE *trim_charset, const DB_VALUE *src_string, DB_VALUE *trimmed_string)
static int number_to_char(const DB_VALUE *src_value, const DB_VALUE *format_str, const DB_VALUE *number_lang, DB_VALUE *result_str, const TP_DOMAIN *domain)
int intl_lower_string_size(const ALPHABET_DATA *alphabet, const unsigned char *src, int src_size, int src_length)
int db_make_timestampltz(DB_VALUE *value, const DB_C_TIMESTAMP ts_val)
DB_DATE * db_get_date(const DB_VALUE *value)
int db_convert_to_time(const DB_VALUE *src_hour, const DB_VALUE *src_minute, const DB_VALUE *src_second, DB_VALUE *result)
int intl_set_min_bound_chr(INTL_CODESET codeset, char *chr)
int db_value_precision(const DB_VALUE *value)
#define ER_OBJ_INVALID_ARGUMENTS
int replace(std::string &result, const cub_regex_object ®, const std::string &src, const std::string &repl, const int position, const int occurrence, const INTL_CODESET codeset)
const char * lang_get_lang_name_from_id(const INTL_LANG lang_id)
int count_leap_years_up_to(int year)
int db_to_time(const DB_VALUE *src_str, const DB_VALUE *format_str, const DB_VALUE *date_lang, const DB_TYPE type, DB_VALUE *result_time)
#define QSTR_IS_VARIABLE_LENGTH(s)
int db_string_convert_to(const DB_VALUE *src_str_dbval, DB_VALUE *dest_str_dbval, INTL_CODESET dest_codeset, int dest_col)
char * intl_get_money_symbol(const DB_CURRENCY currency, INTL_CODESET codeset)
enum intl_codeset INTL_CODESET
int tz_get_offset_in_mins()
int intl_char_count(const unsigned char *src, int length_in_bytes, INTL_CODESET src_codeset, int *char_count)
static int qstr_coerce(const unsigned char *src, int src_length, int src_precision, DB_TYPE src_type, INTL_CODESET src_codeset, INTL_CODESET dest_codeset, unsigned char **dest, int *dest_length, int *dest_size, int dest_precision, DB_TYPE dest_type, DB_DATA_STATUS *data_status)
static const char nbits[]
const ALPHABET_DATA * lang_user_alphabet_w_coll(const int collation_id)
int intl_utf8_to_euckr(const unsigned char *in_buf, const int in_size, unsigned char **out_buf, int *out_size)
bool prm_get_bool_value(PARAM_ID prm_id)
int db_months_between(const DB_VALUE *start_mon, const DB_VALUE *end_mon, DB_VALUE *result_mon)
#define DB_MAX_BIT_LENGTH
#define QSTR_IS_ANY_CHAR_OR_BIT(s)
const char * Short_Month_name_UTF8[][12]
DB_TIMESTAMP * db_get_timestamp(const DB_VALUE *value)
int db_get_string_size(const DB_VALUE *value)
DB_C_SHORT db_get_short(const DB_VALUE *value)
static int parse_digits(char *s, int *nr, int cnt)
#define NUM_MISC_OPERANDS
int db_to_date(const DB_VALUE *src_str, const DB_VALUE *format_str, const DB_VALUE *date_lang, DB_VALUE *result_date)
int intl_cmp_char(const unsigned char *s1, const unsigned char *s2, INTL_CODESET codeset, int *char_size)
bool check_should_recompile(const cub_regex_object *compiled_regex, const char *compiled_pattern, const std::string &pattern, const std::regex_constants::syntax_option_type reg_flags)
void elo_init_structure(DB_ELO *elo)
void db_timestamp_decode_utc(const DB_TIMESTAMP *utime, DB_DATE *date, DB_TIME *timeval)
int db_make_varnchar(DB_VALUE *value, const int max_nchar_length, DB_CONST_C_NCHAR str, const int nchar_str_byte_size, const int codeset, const int collation_id)
int db_string_regexp_instr(DB_VALUE *result, DB_VALUE *args[], int const num_args, cub_regex_object **comp_regex, char **comp_pattern)
int db_string_regexp_count(DB_VALUE *result, DB_VALUE *args[], int const num_args, cub_regex_object **comp_regex, char **comp_pattern)
#define QSTR_DATETIME_LENGTH
#define TP_FLOATING_PRECISION_VALUE
#define TIMESTAMPTZ_BUF_SIZE
int db_time_diff(const DB_VALUE *val1, const DB_VALUE *val2, DB_VALUE *result)
#define ER_QSTR_INCOMPATIBLE_COLLATIONS
#define DB_VALUE_TYPE(value)
int db_string_like(const DB_VALUE *src_string, const DB_VALUE *pattern, const DB_VALUE *esc_char, int *result)
static DB_BIGINT get_single_unit_value(const char *expr, DB_BIGINT int_val)
int db_get_enum_collation(const DB_VALUE *value)
int db_get_datetime_from_dbvalue(const DB_VALUE *src_date, int *year, int *month, int *day, int *hour, int *minute, int *second, int *millisecond, const char **endp)
int db_timestamp_encode(DB_TIMESTAMP *utime, DB_DATE *date, DB_TIME *timeval)
int db_to_char(const DB_VALUE *src_value, const DB_VALUE *format_or_length, const DB_VALUE *lang_str, DB_VALUE *result_str, const TP_DOMAIN *domain)
int db_make_null(DB_VALUE *value)
#define DB_IS_NULL(value)
int db_date_sub_interval_days(DB_VALUE *result, const DB_VALUE *date, const DB_VALUE *db_days)
int db_string_sha_two(DB_VALUE const *src, DB_VALUE const *hash_len, DB_VALUE *result)
int db_make_double(DB_VALUE *value, const DB_C_DOUBLE num)
#define ER_QSTR_FORMAT_TOO_LONG
int db_add_weeks_and_days_to_date(int *day, int *month, int *year, int weeks, int day_week)
int db_date_sub_interval_expr(DB_VALUE *result, const DB_VALUE *date, const DB_VALUE *expr, const int unit)
int db_string_bit_length(const DB_VALUE *string, DB_VALUE *bit_count)
int db_clob_from_file(const DB_VALUE *src_value, DB_VALUE *result_value)
INTL_UTF8_VALIDITY intl_check_euckr(const unsigned char *buf, int size, char **pos)
int intl_upper_string(const ALPHABET_DATA *alphabet, const unsigned char *src, unsigned char *dst, int length_in_chars)
int base64_encode(const unsigned char *src, int src_len, unsigned char **dest, int *dest_len)
void db_date_decode(const DB_DATE *date, int *monthp, int *dayp, int *yearp)
int db_elo_read(const DB_ELO *elo, off_t pos, void *buf, size_t count, DB_BIGINT *read_bytes)
DB_DATETIME * db_get_datetime(const DB_VALUE *value)
int db_string_quote(const DB_VALUE *str, DB_VALUE *res)
int db_char_to_clob(const DB_VALUE *src_value, DB_VALUE *result_value)
#define ER_OPFUNC_INET_NTOA_ARG
int db_string_regexp_substr(DB_VALUE *result, DB_VALUE *args[], int const num_args, cub_regex_object **comp_regex, char **comp_pattern)
static void copy_and_shift_values(int shift, int n, DB_BIGINT *first,...)
const char Month_name_parse_order[][12]
static TIMESTAMP_FORMAT get_next_format(const char *sp, const INTL_CODESET codeset, DB_TYPE str_type, int *format_length, const char **next_pos)
int db_string_repeat(const DB_VALUE *src_string, const DB_VALUE *count, DB_VALUE *result)
int db_make_timestamp(DB_VALUE *value, const DB_C_TIMESTAMP timeval)
int db_make_int(DB_VALUE *value, const int num)
int db_get_string_length(const DB_VALUE *value)
int db_conv(const DB_VALUE *num, const DB_VALUE *from_base, const DB_VALUE *to_base, DB_VALUE *result)
int db_tz_offset(const DB_VALUE *src_str, DB_VALUE *result_str, DB_DATETIME *datetime)
int intl_convert_charset(const unsigned char *src, int length_in_chars, INTL_CODESET src_codeset, unsigned char *dest, INTL_CODESET dest_codeset, int *unconverted)
#define LANG_RT_COMMON_COLL(c1, c2, coll)
int tz_get_timezone_offset(const char *tz_str, int tz_size, char *result, DB_DATETIME *utc_datetime)
int db_make_char(DB_VALUE *value, const int char_length, DB_CONST_C_CHAR str, const int char_str_byte_size, const int codeset, const int collation_id)
int db_sys_timezone(DB_VALUE *result_timezone)
static int date_to_char(const DB_VALUE *src_value, const DB_VALUE *format_str, const DB_VALUE *date_lang, DB_VALUE *result_str, const TP_DOMAIN *domain)
const char * Day_name_ISO[][7]
static void set_time_argument(struct tm *dest, int year, int month, int day, int hour, int min, int sec)
int tz_explain_tz_id(const TZ_ID *tz_id, char *tzr, const int tzr_size, char *tzdst, const int tzdst_size, int *tzh, int *tzm)
#define TP_DOMAIN_CODESET(dom)
int intl_reverse_string(const unsigned char *src, unsigned char *dst, int length_in_chars, int size_in_bytes, INTL_CODESET codeset)
int db_clob_length(const DB_VALUE *src_value, DB_VALUE *result_value)
DB_TIME * db_get_time(const DB_VALUE *value)
int db_string_md5(DB_VALUE const *val, DB_VALUE *result)
#define ER_QPROC_INVALID_DATATYPE
#define INTL_CAN_COERCE_CS(cs_from, cs_to)
static bool is_str_valid_number(char *num_p, char *str_end, int base, INTL_CODESET codeset)
int numeric_coerce_string_to_num(const char *astring, int astring_length, INTL_CODESET codeset, DB_VALUE *result)
static bool varchar_truncated(const unsigned char *s, DB_TYPE s_type, int s_length, int used_chars, INTL_CODESET codeset)
void db_time_decode(DB_TIME *timeval, int *hourp, int *minutep, int *secondp)
static int qstr_eval_like(const char *tar, int tar_length, const char *expr, int expr_length, const char *escape, INTL_CODESET codeset, int coll_id)
int db_conv_tz(DB_VALUE *time_val, DB_VALUE *result_time)
const char * lang_charset_name(const INTL_CODESET codeset)
DB_CURRENCY lang_locale_currency(const char *locale_str)
static int get_cur_month(void)
int db_string_to_date_ex(const char *str, int str_len, DB_DATE *date)
int tz_create_session_tzid_for_timestamp(const DB_UTIME *src_ts, TZ_ID *tz_id)
static void convert_locale_number(char *sz, const int size, const INTL_LANG src_locale, const INTL_LANG dst_locale)
#define INTL_CODESET_MULT(codeset)
#define TP_IS_BIT_TYPE(typeid)
const char * DB_CONST_C_CHAR
int intl_set_max_bound_chr(INTL_CODESET codeset, char *chr)
#define QSTR_NEXT_ALPHA_CHAR(id, cur_chr, size, next_chr, len)
#define db_private_realloc(thrd, ptr, size)
int day_of_week(int jul_day)
#define DB_GET_UCHAR(dbval)
int intl_fast_iso88591_to_utf8(const unsigned char *in_buf, const int in_size, unsigned char **out_buf, int *out_size)
int db_string_extract_dbval(const MISC_OPERAND extr_operand, DB_VALUE *dbval_p, DB_VALUE *result_p, TP_DOMAIN *domain_p)
int intl_utf8_to_iso88591(const unsigned char *in_buf, const int in_size, unsigned char **out_buf, int *out_size)
static int parse_time_string(const char *timestr, int timestr_size, int *sign, int *h, int *m, int *s, int *ms)
const char Short_Day_name_parse_order[][7]
int db_json_convert_to_utf8(DB_VALUE *dbval)
int db_make_bit(DB_VALUE *value, const int bit_length, DB_CONST_C_BIT bit_str, const int bit_str_bit_size)
int db_get_string_codeset(const DB_VALUE *value)
static int db_round_dbvalue_to_int(const DB_VALUE *src, int *result)
int db_get_day_of_year(int year, int month, int day)
int intl_upper_string_size(const ALPHABET_DATA *alphabet, const unsigned char *src, int src_size, int src_length)
static void trim_leading(const unsigned char *trim_charset_ptr, int trim_charset_size, const unsigned char *src_ptr, DB_TYPE src_type, int src_length, int src_size, INTL_CODESET codeset, unsigned char **lead_trimmed_ptr, int *lead_trimmed_length, int *lead_trimmed_size, bool skip_spaces)
ES_TYPE es_get_type(const char *uri)
int db_get_like_optimization_bounds(const DB_VALUE *const pattern, DB_VALUE *bound, const bool has_escape_char, const char *escape_str, const bool compute_lower_bound, const int last_safe_logical_pos)
DB_CONST_C_CHAR db_get_string(const DB_VALUE *value)
struct db_char::@54 medium
int db_bit_to_blob(const DB_VALUE *src_value, DB_VALUE *result_value)
int db_get_date_week(const DB_VALUE *src_date, const DB_VALUE *mode, DB_VALUE *result)
#define QSTR_COMPARE(id, string1, size1, string2, size2, ti)
int db_make_nchar(DB_VALUE *value, const int nchar_length, DB_CONST_C_NCHAR str, const int nchar_str_byte_size, const int codeset, const int collation_id)
int db_datetimeltz_to_string(char *buf, int bufsize, DB_DATETIME *dt)
int db_like_bound(const DB_VALUE *const src_pattern, const DB_VALUE *const src_escape, DB_VALUE *const result_bound, const bool compute_lower_bound)
int db_value_domain_init(DB_VALUE *value, const DB_TYPE type, const int precision, const int scale)
int search(int &result, const cub_regex_object ®, const std::string &src, const INTL_CODESET codeset)
void clear(cub_regex_object *®ex, char *&pattern)
int get_last_day(int month, int year)
int db_date_parse_datetime_parts(char const *str, int str_len, DB_DATETIME *datetime, bool *has_explicit_time, bool *has_explicit_msec, bool *fits_as_timestamp, char const **endp)
const char * day_short_name[CAL_DAY_COUNT]
int crypt_sha_one(THREAD_ENTRY *thread_p, const char *src, int src_len, char **dest_p, int *dest_len_p)