39 #if defined (SUPPRESS_STRLEN_WARNING) 40 #define strlen(s1) ((int) strlen(s1)) 44 #define UX_CHAR wchar_t 47 #define CMSB(x) ((x) & 0x80) 49 #define FORMERBYTE(x) ((UX_CHAR)(((unsigned)(x) & 0xff00) >> 8)) 50 #define LATTERBYTE(x) ((UX_CHAR)((x) & 0xff)) 52 #define COMMAS_OFFSET(COND, N) (COND == TRUE ? (N / 3) : 0) 54 #define TIME_STRING_MAX 20 58 #define COMMA_CHAR ',' 60 #define SHORT_TO_INT(short_val) ((int)short_val) 61 #define OBJECT_SYMBOL_MAX 512 63 #define DATE_ABREV_NAME_LENGTH 3 64 #define DATE_TEMP_BUFFER_LENGTH 50 85 #define DOUBLE_FORMAT_SCIENTIFIC 'e' 86 #define DOUBLE_FORMAT_DECIMAL 'f' 118 #define INT_FORMAT_UNSIGNED_DECIMAL 'u' 119 #define INT_FORMAT_SIGNED_DECIMAL 'd' 120 #define INT_FORMAT_OCTAL 'o' 121 #define INT_FORMAT_HEXADECIMAL 'x' 122 #define INT_FORMAT_CHARACTER 'c' 153 0, 2,
false,
true,
false,
true,
true 167 #define TIME_FORMAT_TWELVE_HOUR "%I:%M:%S %p" 168 #define TIME_FORMAT_TWELVE_HOUR_W_TIMEZONE "%I:%M:%S %p %Z" 169 #define TIME_FORMAT_TWENTY_FOUR_HOUR "%H:%M:%S" 170 #define TIME_FORMAT_TWENTY_FOUR_HOUR_W_TIMEZONE "%H:%M:%S %Z" 270 const char *leading_str,
const char *trailing_str,
bool leading_zeros,
271 bool trailing_zeros,
bool commas,
char conversion);
272 #if defined (ENABLE_UNUSED_FUNCTION) 277 bool commas,
char conversion);
281 static char *
set_to_string (
DB_VALUE * value,
char begin_notation,
char end_notation,
int max_entries,
284 static char *
string_to_string (
const char *string_value,
char string_delimiter,
char string_introducer,
int length,
285 int *result_length,
bool plain_string,
bool change_single_quote);
296 int i, num_of_digits, last_digit, num_of_commas, string_len;
303 num_of_digits = last_digit = num_of_commas = 0;
304 string_len =
strlen (
string);
309 for (i = 0; i < string_len; i++)
312 if (!(
CMSB (
string[i])) && isdigit (
string[i]))
338 num_of_commas = num_of_digits / 3;
339 if (!(num_of_digits % 3))
353 l2 = string_len + num_of_commas;
359 temp[l2--] =
string[l1--];
361 while (
string[l1] !=
'.');
363 temp[l2--] =
string[l1--];
365 for (i = 0; num_of_commas; i++)
367 if (i && !(i % 3) && num_of_commas)
374 temp[l2--] =
string[l1--];
395 size_t remainder_len;
397 if (numeric_string ==
NULL)
405 if ((prefix = strchr (numeric_string,
'.')) ==
NULL)
414 if ((remainder_len = strcspn (prefix + 1,
"0123456789")) == 0)
417 char *remainder = numeric_string +
strlen (numeric_string);
419 while (remainder-- > prefix)
421 if (*remainder ==
'0')
433 int num_of_trailing_zeros = 0;
434 char *remainder = numeric_string + remainder_len;
435 char *end = numeric_string +
strlen (numeric_string);
437 while (remainder-- > prefix)
439 if (*remainder ==
'0')
441 num_of_trailing_zeros++;
449 while ((remainder++ + num_of_trailing_zeros) < end)
451 *remainder = *(remainder + num_of_trailing_zeros);
472 const char *trailing_str,
bool leading_zeros,
bool trailing_zeros,
bool commas,
char conversion)
474 char numeric_conversion_string[1024];
475 char precision_string[16];
476 char format_string[32];
477 int i, overall_fieldwidth;
484 overall_fieldwidth = field_width;
491 snprintf (precision_string,
sizeof (precision_string) - 1,
".%u", (
int) precision);
495 format_string[i++] =
'%';
497 if ((double_value < (
double) 0) || (leading_sign ==
true))
499 format_string[i++] =
'+';
500 if (overall_fieldwidth)
502 overall_fieldwidth++;
506 if (leading_zeros ==
true)
508 format_string[i++] =
'0';
511 if ((trailing_zeros ==
true) && (precision))
513 format_string[i++] =
'#';
516 format_string[i++] =
'*';
517 format_string[
i] = 0;
520 strcat ((
char *) format_string, (
char *) precision_string);
521 i =
strlen (format_string);
522 format_string[i++] = conversion;
523 format_string[
i] = 0;
526 overall_fieldwidth += 4;
529 if (!sprintf ((
char *) numeric_conversion_string, (
char *) format_string, (
int) field_width, double_value))
536 int actual_fieldwidth =
strlen (numeric_conversion_string);
537 int leading_size = (leading_str !=
NULL) ?
strlen (leading_str) : 0;
538 int trailing_size = (trailing_str !=
NULL) ?
strlen (trailing_str) : 0;
540 if ((
size_t) (leading_size + actual_fieldwidth + 1) >
sizeof (numeric_conversion_string))
544 if (leading_size > 0)
546 memmove (numeric_conversion_string + leading_size, numeric_conversion_string, actual_fieldwidth);
547 memcpy (numeric_conversion_string, leading_str, leading_size);
549 numeric_conversion_string[actual_fieldwidth + leading_size] =
'\0';
550 actual_fieldwidth += leading_size;
554 if (strstr (numeric_conversion_string,
"+.+") || strstr (numeric_conversion_string,
"++"))
555 sprintf (numeric_conversion_string,
"Inf");
556 if (strstr (numeric_conversion_string,
"-.-") || strstr (numeric_conversion_string,
"--"))
557 sprintf (numeric_conversion_string,
"-Inf");
560 if (trailing_zeros ==
false)
563 actual_fieldwidth =
strlen (numeric_conversion_string);
566 if ((
size_t) (trailing_size + actual_fieldwidth + 1) >
sizeof (numeric_conversion_string))
571 if (trailing_size > 0)
573 memcpy (numeric_conversion_string + actual_fieldwidth, trailing_str, trailing_size);
574 numeric_conversion_string[actual_fieldwidth + trailing_size] =
'\0';
575 actual_fieldwidth += trailing_size;
578 if (field_width == 0)
581 (
char *) malloc (actual_fieldwidth +
COMMAS_OFFSET (commas, actual_fieldwidth) + 1)) ==
NULL)
585 (void) strcpy (return_string, numeric_conversion_string);
590 (
char *) malloc (overall_fieldwidth +
COMMAS_OFFSET (commas, actual_fieldwidth) + 1)) ==
NULL)
594 if (actual_fieldwidth <= overall_fieldwidth)
596 return_string = strcpy (return_string, numeric_conversion_string);
600 return_string[overall_fieldwidth] = numeric_conversion_string[actual_fieldwidth];
601 while (overall_fieldwidth)
603 return_string[--overall_fieldwidth] = numeric_conversion_string[--actual_fieldwidth];
611 return (return_string);
615 #if defined (ENABLE_UNUSED_FUNCTION) 627 if (time_value ==
NULL)
651 int month, day, year;
653 if (date_value ==
NULL)
663 (void) sprintf (temp_buffer,
"%02d/%02d/%04d", month, day, year);
674 (void) sprintf (temp_buffer,
"%s %d, %04d", month_name, day, year);
680 if (dayofweek < 0 || dayofweek > 6)
694 if (dayofweek < 0 || dayofweek > 6)
702 (void) sprintf (temp_buffer,
"%s, %s %d, %04d", day_name, month_name, day, year);
713 (void) sprintf (temp_buffer,
"%d. %s %04d", day, month_name, year);
718 (void) sprintf (temp_buffer,
"%02d/%02d/%02d", year % 100, month, day);
723 (void) sprintf (temp_buffer,
"%02d/%02d/%02d", month, day, year % 100);
728 (void) sprintf (temp_buffer,
"%02d/%02d/%02d", day, month, year % 100);
733 temp_buffer[0] =
'\0';
753 char numeric_conversion_string[1024];
754 char format_string[10];
755 char long_decimal =
'l';
757 int overall_fieldwidth;
764 overall_fieldwidth = field_width;
765 format_string[i++] =
'%';
767 if (leading_zeros ==
true)
769 format_string[i++] =
'0';
772 if (leading_symbol ==
true)
774 format_string[i++] =
'#';
775 if (overall_fieldwidth)
781 if (overall_fieldwidth && (int_value < 0))
783 overall_fieldwidth++;
789 if (overall_fieldwidth)
791 overall_fieldwidth += 2;
803 format_string[i++] =
'+';
806 format_string[i++] =
'*';
808 format_string[i++] = long_decimal;
809 format_string[i++] = long_decimal;
810 format_string[i++] = conversion;
811 format_string[i++] = (char) 0;
813 if (!sprintf (numeric_conversion_string, (
char *) format_string, (
int) field_width, int_value))
820 int actual_fieldwidth =
strlen (numeric_conversion_string);
822 if (field_width == 0)
825 (
char *) malloc (actual_fieldwidth +
COMMAS_OFFSET (commas, actual_fieldwidth) + 1)) ==
NULL)
829 (void) strcpy (return_string, (
const char *) &numeric_conversion_string[0]);
834 (
char *) malloc (overall_fieldwidth +
COMMAS_OFFSET (commas, actual_fieldwidth) + 1)) ==
NULL)
838 if (actual_fieldwidth <= overall_fieldwidth)
840 return_string = strcpy (return_string, numeric_conversion_string);
844 return_string[overall_fieldwidth] = numeric_conversion_string[actual_fieldwidth];
845 while (overall_fieldwidth)
847 return_string[--overall_fieldwidth] = numeric_conversion_string[--actual_fieldwidth];
855 return (return_string);
918 max_length = prec + comma_length + 3;
919 return_string = (
char *) malloc (max_length);
920 if (return_string ==
NULL)
926 if (
strlen (str_buf) > max_length - 1)
931 strcpy (return_string, str_buf);
955 temp_string = (
char *) malloc (max_length);
956 if (temp_string ==
NULL)
971 return (return_string);
989 int cardinality, total_string_length,
i;
1009 if (cardinality < 0)
1013 else if (cardinality == 0)
1015 char temp_buffer[4];
1018 if (begin_notation !=
'\0')
1020 temp_buffer[i++] = begin_notation;
1022 if (end_notation !=
'\0')
1024 temp_buffer[i++] = end_notation;
1026 temp_buffer[
i] =
'\0';
1030 if (max_entries != -1 && max_entries < cardinality)
1032 cardinality = max_entries;
1034 string_array = (
char **) malloc ((cardinality + 2) *
sizeof (
char *));
1035 if (string_array ==
NULL)
1040 memset (string_array, 0, (cardinality + 2) *
sizeof (
char *));
1042 total_string_length = cardinality * 2;
1043 for (i = 0; i < cardinality; i++)
1052 if (string_array[i] ==
NULL)
1055 if (string_array[i] ==
NULL)
1060 total_string_length +=
strlen (string_array[i]);
1063 return_string = (
char *) malloc (total_string_length + 4);
1064 if (return_string ==
NULL)
1069 if (begin_notation !=
'\0')
1071 (void) sprintf (return_string,
"%c%s", begin_notation, string_array[0]);
1075 (void) strcpy (return_string, string_array[0]);
1078 for (i = 1; i < cardinality; i++)
1080 (void) strcat (return_string,
", ");
1081 (void) strcat (return_string, string_array[i]);
1083 if (end_notation !=
'\0')
1085 int len =
strlen (return_string);
1087 return_string[len++] = end_notation;
1088 return_string[len] =
'\0';
1092 for (i = 0; i < cardinality; i++)
1094 if (string_array[i] ==
NULL)
1121 new_string = (
char *) malloc (
strlen (
string) + 1);
1124 strcpy (new_string,
string);
1127 return (new_string);
1145 char *con_buf_ptr =
NULL;
1146 int con_buf_size = 0;
1150 if (string_value ==
NULL)
1155 ptr = (
char *) string_value;
1156 while (*ptr !=
'\0')
1158 if (*ptr ==
'\t' || *ptr ==
'\n' || *ptr ==
'\\')
1167 if (result_length !=
NULL)
1169 *result_length = length;
1174 return_string = (
char *) malloc (length + num_found + 1);
1175 if (return_string ==
NULL)
1181 for (i = 0; i < length; i++)
1183 if (string_value[i] ==
'\t')
1185 ptr += sprintf (ptr,
"\\t");
1187 else if (string_value[i] ==
'\n')
1189 ptr += sprintf (ptr,
"\\n");
1191 else if (string_value[i] ==
'\\')
1193 ptr += sprintf (ptr,
"\\\\");
1197 *(ptr++) = string_value[i];
1205 if (con_buf_ptr !=
NULL)
1207 free (return_string);
1208 return_string = con_buf_ptr;
1209 ptr = con_buf_ptr + con_buf_size;
1215 *result_length =
CAST_STRLEN (ptr - return_string);
1233 string_to_string (
const char *string_value,
char string_delimiter,
char string_introducer,
int length,
1234 int *result_length,
bool plain_string,
bool change_single_quote)
1238 char *con_buf_ptr =
NULL;
1239 int con_buf_size = 0;
1240 int num_found = 0,
i = 0;
1242 if (plain_string ==
true)
1247 if (string_delimiter ==
'\0')
1252 if (string_value ==
NULL)
1257 if (change_single_quote ==
true)
1259 ptr = (
char *) string_value;
1261 while (*ptr !=
'\0')
1271 if ((return_string = (
char *) malloc (length + 4 + num_found)) ==
NULL)
1277 if (string_introducer)
1279 *ptr++ = string_introducer;
1281 *ptr++ = string_delimiter;
1283 if (change_single_quote ==
true)
1285 for (
i = 0;
i < length;
i++)
1287 if (string_value[
i] ==
'\'')
1289 *(ptr++) = string_value[
i];
1294 *(ptr++) = string_value[
i];
1297 *(ptr++) = string_delimiter;
1302 memcpy (ptr, string_value, length);
1303 ptr[length] = string_delimiter;
1304 ptr = ptr + length + 1;
1311 if (con_buf_ptr !=
NULL)
1313 free (return_string);
1314 return_string = con_buf_ptr;
1315 ptr = con_buf_ptr + con_buf_size;
1321 *result_length =
CAST_STRLEN (ptr - return_string);
1337 char column_enclosure)
1339 char *result =
NULL;
1340 char *json_body =
NULL;
1342 char string_delimiter =
1344 bool change_single_quote = (output_type !=
CSQL_UNKNOWN_OUTPUT && column_enclosure ==
'\'');
1357 default_bigint_profile.
format);
1376 default_short_profile.
commas, default_short_profile.
format);
1387 default_float_profile.
commas, default_float_profile.
format);
1398 default_double_profile.
format);
1414 int dummy, bytes_size, decomp_size;
1415 bool need_decomp =
false;
1417 char *decomposed =
NULL;
1429 decomposed = (
char *) malloc (decomp_size *
sizeof (
char));
1430 if (decomposed !=
NULL)
1435 bytes_size = decomp_size;
1443 result =
string_to_string (str, string_delimiter,
'\0', bytes_size, &len, plain_string, change_single_quote);
1445 if (decomposed !=
NULL)
1455 int dummy, bytes_size, decomp_size;
1456 bool need_decomp =
false;
1458 char *decomposed =
NULL;
1470 decomposed = (
char *) malloc (decomp_size *
sizeof (
char));
1471 if (decomposed !=
NULL)
1476 bytes_size = decomp_size;
1484 result =
string_to_string (str, string_delimiter,
'N', bytes_size, &len, plain_string, change_single_quote);
1486 if (decomposed !=
NULL)
1494 result =
bit_to_string (value, string_delimiter, plain_string);
1538 result = new_result;
1549 default_set_profile.
max_entries, plain_string, output_type, column_enclosure);
1577 char *leading_str =
NULL;
1578 char *trailing_str =
NULL;
1602 leading_str, trailing_str, default_monetary_profile.
leadingzeros,
1627 result = new_result;
1790 int bytes_size, decomp_size;
1791 bool need_decomp =
false;
1793 char *decomposed =
NULL;
1799 default_short_profile.
commas, default_short_profile.
format);
1826 decomposed = (
char *) malloc (decomp_size *
sizeof (
char));
1827 if (decomposed !=
NULL)
1833 bytes_size = decomp_size;
1841 result =
string_to_string (str, string_delimiter,
'\0', bytes_size, &len, plain_string, change_single_quote);
1842 if (decomposed !=
NULL)
1851 char temp_buffer[256];
DB_C_FLOAT db_get_float(const DB_VALUE *value)
int db_strftime(char *s, int smax, const char *fmt, DB_DATE *date, DB_TIME *timeval)
DB_COLLECTION * db_get_set(const DB_VALUE *value)
int db_timestamptz_to_string(char *buf, int bufsize, DB_TIMESTAMP *utime, const TZ_ID *tz_id)
const char * db_get_class_name(DB_OBJECT *class_)
const char * db_get_type_name(DB_TYPE type_id)
int db_get_int(const DB_VALUE *value)
DB_C_DOUBLE db_get_double(const DB_VALUE *value)
int db_get_enum_codeset(const DB_VALUE *value)
int db_get_enum_string_size(const DB_VALUE *value)
char * db_get_json_raw_body(const DB_VALUE *value)
#define DATETIME_BUF_SIZE
int db_timestampltz_to_string(char *buf, int bufsize, DB_TIMESTAMP *utime)
int intl_get_currency_symbol_position(const DB_CURRENCY currency)
DB_DATETIMETZ * db_get_datetimetz(const DB_VALUE *value)
DB_CONST_C_CHAR db_get_char(const DB_VALUE *value, int *length)
#define DB_VALUE_PRECISION(value)
int db_print_mop(DB_OBJECT *obj, char *buffer, int maxlen)
DB_ELO * db_get_elo(const DB_VALUE *value)
int db_date_weekday(DB_DATE *date)
int db_datetimetz_to_string(char *buf, int bufsize, DB_DATETIME *dt, const TZ_ID *tz_id)
#define DATETIMETZ_BUF_SIZE
DB_TIMESTAMPTZ * db_get_timestamptz(const DB_VALUE *value)
DB_MONETARY * db_get_monetary(const DB_VALUE *value)
void unicode_decompose_string(const char *str_in, const int size_in, char *str_out, int *size_out, const UNICODE_NORMALIZATION *norm)
int db_set_get(DB_SET *set, int index, DB_VALUE *value)
static void return_string(CSS_CONN_ENTRY *conn, unsigned short request_id, char **buffer, int *buffer_size)
#define TIMESTAMP_BUF_SIZE
DB_OBJECT * db_get_object(const DB_VALUE *value)
int db_fetch_set(DB_SET *set, DB_FETCH_MODE purpose, int quit_on_error)
UNICODE_NORMALIZATION * lang_get_generic_unicode_norm(void)
unsigned short db_get_enum_short(const DB_VALUE *value)
#define NUMERIC_MAX_STRING_SIZE
#define db_private_free(thrd, ptr)
int db_set_size(DB_SET *set)
#define db_utime_to_string
DB_BIGINT db_get_bigint(const DB_VALUE *value)
static const char * time_as_string(DB_TRIGGER_TIME tr_time)
int db_time_to_string(char *buf, int bufsize, DB_TIME *time)
int db_datetime_to_string(char *buf, int bufsize, DB_DATETIME *datetime)
int db_bit_string(const DB_VALUE *the_db_bit, const char *bit_format, char *string, int max_size)
DB_CONST_C_CHAR db_get_enum_string(const DB_VALUE *value)
char * numeric_db_value_print(const DB_VALUE *val, char *buf)
int(* csql_text_utf8_to_console)(const char *, const int, char **, int *)
#define free_and_init(ptr)
DB_DATE * db_get_date(const DB_VALUE *value)
char * intl_get_money_symbol_console(const DB_CURRENCY currency)
bool prm_get_bool_value(PARAM_ID prm_id)
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)
bool unicode_string_need_decompose(const char *str_in, const int size_in, int *decomp_size, const UNICODE_NORMALIZATION *norm)
#define TIMESTAMPTZ_BUF_SIZE
#define DB_VALUE_TYPE(value)
void db_date_decode(const DB_DATE *date, int *monthp, int *dayp, int *yearp)
DB_DATETIME * db_get_datetime(const DB_VALUE *value)
int db_value_clear(DB_VALUE *value)
int db_get_string_length(const DB_VALUE *value)
DB_TIME * db_get_time(const DB_VALUE *value)
int db_get_string_codeset(const DB_VALUE *value)
int db_datetimeltz_to_string(char *buf, int bufsize, DB_DATETIME *dt)