CUBRID Engine  latest
string_opfunc.h
Go to the documentation of this file.
1 /*
2  * Copyright 2008 Search Solution Corporation
3  * Copyright 2016 CUBRID Corporation
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 
20 /*
21  * string_opfunc.h - Manipulate arbitrary strings
22  */
23 
24 #ifndef _STRING_OPFUNC_H_
25 #define _STRING_OPFUNC_H_
26 
27 #ident "$Id$"
28 
29 /* todo(rem) this doesn't belong to query module */
30 
31 #include "config.h"
32 #include "dbtype_def.h"
33 #include "intl_support.h"
34 #include "language_support.h"
35 #include "numeric_opfunc.h"
36 #include "object_domain.h"
37 #include "thread_compat.hpp"
38 #include "string_regex.hpp"
39 
40 #define QSTR_IS_CHAR(s) (((s)==DB_TYPE_CHAR) || \
41  ((s)==DB_TYPE_VARCHAR))
42 #define QSTR_IS_NATIONAL_CHAR(s) (((s)==DB_TYPE_NCHAR) || \
43  ((s)==DB_TYPE_VARNCHAR))
44 #define QSTR_IS_BIT(s) (((s)==DB_TYPE_BIT) || \
45  ((s)==DB_TYPE_VARBIT))
46 #define QSTR_IS_ANY_CHAR(s) (QSTR_IS_CHAR(s) || QSTR_IS_NATIONAL_CHAR(s))
47 #define QSTR_IS_ANY_CHAR_OR_BIT(s) (QSTR_IS_ANY_CHAR(s) \
48  || QSTR_IS_BIT(s))
49 
50 #define QSTR_IS_FIXED_LENGTH(s) (((s)==DB_TYPE_CHAR) || \
51  ((s)==DB_TYPE_NCHAR) || \
52  ((s)==DB_TYPE_BIT))
53 
54 #define QSTR_IS_VARIABLE_LENGTH(s) (((s)==DB_TYPE_VARCHAR) || \
55  ((s)==DB_TYPE_VARNCHAR) || \
56  ((s)==DB_TYPE_VARBIT))
57 
58 #define QSTR_NUM_BYTES(a) (((a) + 7) / 8)
59 
60 #define QSTR_CHAR_COMPARE(id, string1, size1, string2, size2, ti) \
61  QSTR_COMPARE(id, string1, size1, string2, size2, ti)
62 
63 #define QSTR_NCHAR_COMPARE(id, string1, size1, string2, size2, codeset, ti) \
64  QSTR_COMPARE(id, string1, size1, string2, size2, ti)
65 
66 #define QSTR_COMPARE(id, string1, size1, string2, size2, ti) \
67  (LANG_GET_COLLATION (id))->fastcmp ((LANG_GET_COLLATION (id)), (string1), \
68  (size1), (string2), (size2), ti)
69 #define QSTR_MATCH(id, string1, size1, string2, size2, esc, has_last_escape, \
70  match_size) \
71  (LANG_GET_COLLATION (id))->strmatch ((LANG_GET_COLLATION (id)), true, \
72  (string1), (size1), \
73  (string2), (size2), (esc), \
74  (has_last_escape), (match_size), false)
75 #define QSTR_NEXT_ALPHA_CHAR(id, cur_chr, size, next_chr, len) \
76  (LANG_GET_COLLATION (id))->next_coll_seq ((LANG_GET_COLLATION (id)), \
77  (cur_chr), (size), (next_chr), (len), false)
78 #define QSTR_SPLIT_KEY(id, is_desc, str1, size1, str2, size2, k, s, ti) \
79  (LANG_GET_COLLATION (id))->split_key ((LANG_GET_COLLATION (id)), is_desc, \
80  (str1), (size1), (str2), (size2), \
81  (k), (s), ti)
82 
83 
84 /*
85  * These are the sizes for scratch buffers for formatting numbers, dates,
86  * etc. inside db_value_get() and db_value_put().
87  */
88 #define NUM_BUF_SIZE 64
89 #define TIME_BUF_SIZE 64
90 #define DATE_BUF_SIZE 64
91 #define TIMESTAMP_BUF_SIZE (TIME_BUF_SIZE + DATE_BUF_SIZE)
92 #define DATETIME_BUF_SIZE (TIMESTAMP_BUF_SIZE + 4)
93 #define TIMEZONE_BUF_SIZE 64
94 #define TIMESTAMPTZ_BUF_SIZE (TIMESTAMP_BUF_SIZE + TIMEZONE_BUF_SIZE)
95 #define DATETIMETZ_BUF_SIZE (DATETIME_BUF_SIZE + TIMEZONE_BUF_SIZE)
96 
97 /*
98  * For the trim operation, db_string_trim(), this operand specifies
99  * that the trim character should be removed from the front, back
100  * or from both ends. In addition, this operand specifies an
101  * extract component (field) from the given datetime source.
102  */
103 #define NUM_MISC_OPERANDS 12
104 
105 typedef enum
106 {
107  LEADING, /* trim operand */
110  YEAR, /* extract operand */
117 
120 } MISC_OPERAND;
121 
122 /*
123  * Timestamp format
124  */
125 typedef enum
126 {
127  DT_END = -2, /* format string end */
128  DT_INVALID = -1, /* invalid format */
139  DT_DY, /* So far, DATE format */
150  DT_MS, /* So far, TIME format */
159 
160 #define LIKE_WILDCARD_MATCH_MANY '%'
161 #define LIKE_WILDCARD_MATCH_ONE '_'
162 
163 #define QSTR_IS_LIKE_WILDCARD_CHAR(ch) ((ch) == LIKE_WILDCARD_MATCH_ONE || \
164  (ch) == LIKE_WILDCARD_MATCH_MANY)
165 
166 extern int qstr_compare (const unsigned char *string1, int size1, const unsigned char *string2, int size2);
167 extern int char_compare (const unsigned char *string1, int size1, const unsigned char *string2, int size2);
168 extern int varnchar_compare (const unsigned char *string1, int size1, const unsigned char *string2, int size2,
169  INTL_CODESET codeset);
170 extern int nchar_compare (const unsigned char *string1, int size1, const unsigned char *string2, int size2,
171  INTL_CODESET codeset);
172 extern int bit_compare (const unsigned char *string1, int size1, const unsigned char *string2, int size2);
173 extern int varbit_compare (const unsigned char *string1, int size1, const unsigned char *string2, int size2);
174 extern int get_last_day (int month, int year);
175 extern int get_day (int month, int day, int year);
176 
177 extern int db_string_compare (const DB_VALUE * string1, const DB_VALUE * string2, DB_VALUE * result);
178 extern int db_string_unique_prefix (const DB_VALUE * db_string1, const DB_VALUE * db_string2, DB_VALUE * db_result,
179  TP_DOMAIN * key_domain);
180 extern int db_string_concatenate (const DB_VALUE * string1, const DB_VALUE * string2, DB_VALUE * result,
181  DB_DATA_STATUS * data_status);
182 extern int db_string_chr (DB_VALUE * res, DB_VALUE * dbval1, DB_VALUE * dbval2);
183 extern int db_string_instr (const DB_VALUE * src_string, const DB_VALUE * sub_string, const DB_VALUE * start_pos,
184  DB_VALUE * result);
185 extern int db_string_position (const DB_VALUE * sub_string, const DB_VALUE * src_string, DB_VALUE * result);
186 extern int db_string_substring (const MISC_OPERAND substr_operand, const DB_VALUE * src_string,
187  const DB_VALUE * start_position, const DB_VALUE * extraction_length,
188  DB_VALUE * sub_string);
189 extern int db_string_quote (const DB_VALUE * src_string, DB_VALUE * res);
190 extern int db_string_repeat (const DB_VALUE * src_string, const DB_VALUE * count, DB_VALUE * result);
191 extern int db_string_substring_index (DB_VALUE * src_string, DB_VALUE * delim_string, const DB_VALUE * count,
192  DB_VALUE * result);
193 extern int db_string_aes_encrypt (DB_VALUE const *src, DB_VALUE const *key, DB_VALUE * result);
194 extern int db_string_aes_decrypt (DB_VALUE const *src, DB_VALUE const *key, DB_VALUE * result);
195 extern int db_string_sha_one (DB_VALUE const *val, DB_VALUE * result);
196 extern int db_string_sha_two (DB_VALUE const *src, DB_VALUE const *len, DB_VALUE * result);
197 extern int db_string_md5 (DB_VALUE const *val, DB_VALUE * result);
198 extern int db_string_space (DB_VALUE const *count, DB_VALUE * result);
199 extern int db_string_insert_substring (DB_VALUE * src_string, const DB_VALUE * position, const DB_VALUE * length,
200  DB_VALUE * sub_string, DB_VALUE * result);
201 extern int db_string_elt (DB_VALUE * result, DB_VALUE * args[], int const num_args);
202 extern int db_string_escape_str (const char *src_str, size_t src_size, char **res_string, size_t * dest_size);
203 
204 #if defined (ENABLE_UNUSED_FUNCTION)
205 extern int db_string_byte_length (const DB_VALUE * string, DB_VALUE * byte_count);
206 #endif
207 extern int db_string_bit_length (const DB_VALUE * string, DB_VALUE * bit_count);
208 extern int db_string_char_length (const DB_VALUE * string, DB_VALUE * char_count);
209 
210 extern int db_string_lower (const DB_VALUE * string, DB_VALUE * lower_string);
211 extern int db_string_upper (const DB_VALUE * string, DB_VALUE * upper_string);
212 extern int db_string_trim (const MISC_OPERAND tr_operand, const DB_VALUE * trim_charset, const DB_VALUE * src_string,
213  DB_VALUE * trimmed_string);
214 extern int db_string_pad (const MISC_OPERAND pad_operand, const DB_VALUE * src_string, const DB_VALUE * pad_length,
215  const DB_VALUE * pad_charset, DB_VALUE * padded_string);
216 extern int db_string_like (const DB_VALUE * src_string, const DB_VALUE * pattern, const DB_VALUE * esc_char,
217  int *result);
218 
219 #ifdef __cplusplus
220 extern int db_string_rlike (const DB_VALUE * src_string, const DB_VALUE * pattern, const DB_VALUE * case_sensitive,
221  cub_regex_object ** comp_regex, char **comp_pattern, int *result);
222 
223 extern int db_string_regexp_count (DB_VALUE * result, DB_VALUE * args[], const int num_args,
224  cub_regex_object ** comp_regex, char **comp_pattern);
225 extern int db_string_regexp_instr (DB_VALUE * result, DB_VALUE * args[], const int num_args,
226  cub_regex_object ** comp_regex, char **comp_pattern);
227 extern int db_string_regexp_like (DB_VALUE * result, DB_VALUE * args[], const int num_args,
228  cub_regex_object ** comp_regex, char **comp_pattern);
229 extern int db_string_regexp_replace (DB_VALUE * result, DB_VALUE * args[], const int num_args,
230  cub_regex_object ** comp_regex, char **comp_pattern);
231 extern int db_string_regexp_substr (DB_VALUE * result, DB_VALUE * args[], const int num_args,
232  cub_regex_object ** comp_regex, char **comp_pattern);
233 #endif
234 
235 extern int db_string_limit_size_string (DB_VALUE * src_string, DB_VALUE * result, const int new_size, int *spare_bytes);
236 extern int db_string_fix_string_size (DB_VALUE * src_string);
237 extern int db_string_replace (const DB_VALUE * src_string, const DB_VALUE * srch_string, const DB_VALUE * repl_string,
238  DB_VALUE * replaced_string);
239 extern int db_string_translate (const DB_VALUE * src_string, const DB_VALUE * from_string, const DB_VALUE * to_string,
240  DB_VALUE * transed_string);
241 extern int db_bit_string_coerce (const DB_VALUE * src_string, DB_VALUE * dest_string, DB_DATA_STATUS * data_status);
242 extern int db_char_string_coerce (const DB_VALUE * src_string, DB_VALUE * dest_string, DB_DATA_STATUS * data_status);
243 extern int db_string_make_empty_typed_string (DB_VALUE * db_val, const DB_TYPE db_type, int precision, int codeset,
244  int collation_id);
245 extern int db_find_string_in_in_set (const DB_VALUE * needle, const DB_VALUE * stack, DB_VALUE * result);
246 extern int db_bigint_to_binary_string (const DB_VALUE * src_bigint, DB_VALUE * result);
247 extern int db_add_time (const DB_VALUE * left, const DB_VALUE * right, DB_VALUE * result, const TP_DOMAIN * domain);
248 extern int db_tz_offset (const DB_VALUE * src_str, DB_VALUE * result_str, DB_DATETIME * date_time);
249 extern int db_from_tz (DB_VALUE * time_val, DB_VALUE * tz, DB_VALUE * time_val_with_tz);
250 extern int db_new_time (DB_VALUE * time_val, DB_VALUE * tz_source, DB_VALUE * tz_dest, DB_VALUE * result_time);
251 extern int db_conv_tz (DB_VALUE * time_val, DB_VALUE * result_time);
252 extern int db_json_convert_to_utf8 (DB_VALUE * dbval);
253 extern int db_json_copy_and_convert_to_utf8 (const DB_VALUE * src_dbval, DB_VALUE * dest_dbval,
254  const DB_VALUE ** json_str_dbval);
255 extern int db_string_convert_to (const DB_VALUE * src_string, DB_VALUE * dest_string, INTL_CODESET dest_codeset,
256  int dest_col);
257 
258 #if defined(ENABLE_UNUSED_FUNCTION)
259 extern int db_string_convert (const DB_VALUE * src_string, DB_VALUE * dest_string);
260 #endif
261 extern unsigned char *qstr_pad_string (unsigned char *s, int length, INTL_CODESET codeset);
262 extern int qstr_bin_to_hex (char *dest, int dest_size, const char *src, int src_size);
263 extern int qstr_hex_to_bin (char *dest, int dest_size, const char *src, int src_size);
264 extern int qstr_bit_to_bin (char *dest, int dest_size, const char *src, int src_size);
265 extern void qstr_bit_to_hex_coerce (char *buffer, int buffer_size, const char *src, int src_length, int pad_flag,
266  int *copy_size, int *truncation);
267 extern int db_get_string_length (const DB_VALUE * value);
268 extern void qstr_make_typed_string (const DB_TYPE db_type, DB_VALUE * value, const int precision, DB_CONST_C_CHAR src,
269  const int s_unit, const int codeset, const int collation_id);
270 extern int db_add_months (const DB_VALUE * src_date, const DB_VALUE * nmonth, DB_VALUE * result_date);
271 extern int db_last_day (const DB_VALUE * src_date, DB_VALUE * result_day);
272 extern int db_str_to_date (const DB_VALUE * src_date, const DB_VALUE * src_format, const DB_VALUE * date_lang,
273  DB_VALUE * result_date, TP_DOMAIN * domain);
274 extern int db_time_format (const DB_VALUE * src_time, const DB_VALUE * src_format, const DB_VALUE * date_lang,
275  DB_VALUE * result_time, const TP_DOMAIN * domain);
276 extern int db_timestamp (const DB_VALUE * src_datetime1, const DB_VALUE * src_time2, DB_VALUE * result_datetime);
277 extern int db_unix_timestamp (const DB_VALUE * src_date, DB_VALUE * result_timestamp);
278 extern int db_datetime_to_timestamp (const DB_VALUE * src_datetime, DB_VALUE * result_timestamp);
279 extern int db_months_between (const DB_VALUE * start_mon, const DB_VALUE * end_mon, DB_VALUE * result_mon);
280 extern int db_sys_date (DB_VALUE * result_date);
281 extern int db_sys_time (DB_VALUE * result_time);
282 extern int db_sys_timestamp (DB_VALUE * result_timestamp);
283 extern int db_sys_datetime (DB_VALUE * result_datetime);
284 extern int db_sys_date_and_epoch_time (DB_VALUE * dt_dbval, DB_VALUE * ts_dbval);
285 extern int db_sys_timezone (DB_VALUE * result_timezone);
286 extern int db_to_char (const DB_VALUE * src_value, const DB_VALUE * format_or_length, const DB_VALUE * lang_str,
287  DB_VALUE * result_str, const TP_DOMAIN * domain);
288 extern int db_to_date (const DB_VALUE * src_str, const DB_VALUE * format_str, const DB_VALUE * date_lang,
289  DB_VALUE * result_date);
290 extern int db_to_time (const DB_VALUE * src_str, const DB_VALUE * format_str, const DB_VALUE * date_lang,
291  const DB_TYPE type, DB_VALUE * result_time);
292 extern int db_to_timestamp (const DB_VALUE * src_str, const DB_VALUE * format_str, const DB_VALUE * date_lang,
293  const DB_TYPE type, DB_VALUE * result_timestamp);
294 extern int db_to_datetime (const DB_VALUE * src_str, const DB_VALUE * format_str, const DB_VALUE * date_lang,
295  const DB_TYPE type, DB_VALUE * result_datetime);
296 extern int db_to_number (const DB_VALUE * src_str, const DB_VALUE * format_str, const DB_VALUE * number_lang,
297  DB_VALUE * result_num);
298 extern int db_string_reverse (const DB_VALUE * src_str, DB_VALUE * result_str);
299 extern int db_format (const DB_VALUE * number_text, const DB_VALUE * decimals, const DB_VALUE * number_lang,
300  DB_VALUE * result, const TP_DOMAIN * domain);
301 /* datetime functions */
302 extern int db_date_add_interval_days (DB_VALUE * result, const DB_VALUE * date, const DB_VALUE * days);
303 extern int db_date_sub_interval_days (DB_VALUE * result, const DB_VALUE * date, const DB_VALUE * days);
304 extern int db_date_add_interval_expr (DB_VALUE * result, const DB_VALUE * date, const DB_VALUE * expr, const int unit);
305 extern int db_date_sub_interval_expr (DB_VALUE * result, const DB_VALUE * date, const DB_VALUE * expr, const int unit);
306 extern int db_date_format (const DB_VALUE * date_value, const DB_VALUE * format, const DB_VALUE * date_lang,
307  DB_VALUE * result, const TP_DOMAIN * domain);
308 extern int db_date_dbval (DB_VALUE * result, const DB_VALUE * date_value, const TP_DOMAIN * domain);
309 extern int db_time_dbval (DB_VALUE * result, const DB_VALUE * datetime_value, const TP_DOMAIN * domain);
310 extern int count_leap_years_up_to (int year);
311 extern int count_nonleap_years_up_to (int year);
312 extern int db_date_diff (const DB_VALUE * date_value1, const DB_VALUE * date_value2, DB_VALUE * result);
313 extern int db_from_unixtime (const DB_VALUE * src_date, const DB_VALUE * format, const DB_VALUE * date_lang,
314  DB_VALUE * result, const TP_DOMAIN * domain);
315 extern int db_time_diff (const DB_VALUE * datetime_value1, const DB_VALUE * datetime_value2, DB_VALUE * result);
316 extern int db_bit_to_blob (const DB_VALUE * src_value, DB_VALUE * result_value);
317 extern int db_char_to_blob (const DB_VALUE * src_value, DB_VALUE * result_value);
318 extern int db_blob_to_bit (const DB_VALUE * src_value, const DB_VALUE * length_value, DB_VALUE * result_value);
319 extern int db_blob_from_file (const DB_VALUE * src_value, DB_VALUE * result_value);
320 extern int db_blob_length (const DB_VALUE * src_value, DB_VALUE * result_value);
321 extern int db_char_to_clob (const DB_VALUE * src_value, DB_VALUE * result_value);
322 extern int db_clob_to_char (const DB_VALUE * src_value, const DB_VALUE * codeset_value, DB_VALUE * result_value);
323 extern int db_clob_from_file (const DB_VALUE * src_value, DB_VALUE * result_value);
324 extern int db_clob_length (const DB_VALUE * src_value, DB_VALUE * result_value);
325 extern int db_get_date_quarter (const DB_VALUE * src_date, DB_VALUE * result);
326 #if !defined (SERVER_MODE)
327 extern int db_get_date_weekday (const DB_VALUE * src_date, const int type, DB_VALUE * result);
328 #endif /* !defined (SERVER_MODE) */
329 extern int db_get_date_dayofyear (const DB_VALUE * src_date, DB_VALUE * result);
330 extern int db_get_date_totaldays (const DB_VALUE * src_date, DB_VALUE * result);
331 extern int db_convert_time_to_sec (const DB_VALUE * src_date, DB_VALUE * result);
332 extern int db_convert_sec_to_time (const DB_VALUE * src, DB_VALUE * result);
333 extern int db_get_date_from_days (const DB_VALUE * src, DB_VALUE * result);
334 extern int db_add_days_to_year (const DB_VALUE * src_year, const DB_VALUE * src_days, DB_VALUE * result);
335 extern int db_convert_to_time (const DB_VALUE * src_hour, const DB_VALUE * src_minute, const DB_VALUE * src_second,
336  DB_VALUE * result);
337 extern int db_get_date_week (const DB_VALUE * src_date, const DB_VALUE * mode, DB_VALUE * result);
338 #if !defined (SERVER_MODE)
339 extern int db_get_date_item (const DB_VALUE * src_date, const int item_type, DB_VALUE * result);
340 extern int db_get_time_item (const DB_VALUE * src_date, const int item_type, DB_VALUE * result);
341 #endif /* !defined (SERVER_MODE) */
342 #if defined(ENABLE_UNUSED_FUNCTION)
343 extern int db_null_terminate_string (const DB_VALUE * src_value, char **strp);
344 #endif
345 
346 extern int db_get_info_for_like_optimization (const DB_VALUE * const pattern, const bool has_escape_char,
347  const char *escape_str, int *const num_logical_chars,
348  int *const last_safe_logical_pos, int *const num_match_many,
349  int *const num_match_one);
350 extern int db_compress_like_pattern (const DB_VALUE * const pattern, DB_VALUE * compressed_pattern,
351  const bool has_escape_char, const char *escape_str);
352 extern int db_get_like_optimization_bounds (const DB_VALUE * const pattern, DB_VALUE * bound,
353  const bool has_escape_char, const char *escape_str,
354  const bool compute_lower_bound, const int last_safe_logical_pos);
355 extern int db_like_bound (const DB_VALUE * const src_pattern, const DB_VALUE * const src_escape,
356  DB_VALUE * const result_bound, const bool compute_lower_bound);
357 extern int db_hex (const DB_VALUE * param, DB_VALUE * result);
358 #if !defined (CS_MODE)
359 /* todo(rem): this does not belong here */
360 extern int db_guid (THREAD_ENTRY * thread_p, DB_VALUE * result);
361 #endif /* !defined (CS_MODE) */
362 extern int db_ascii (const DB_VALUE * param, DB_VALUE * result);
363 extern int db_conv (const DB_VALUE * num, const DB_VALUE * from_base, const DB_VALUE * to_base, DB_VALUE * result);
365 extern int db_value_to_enumeration_value (const DB_VALUE * src, DB_VALUE * result, const TP_DOMAIN * enum_domain);
366 extern int db_inet_aton (DB_VALUE * result_numbered_ip, const DB_VALUE * string);
367 extern int db_inet_ntoa (DB_VALUE * result_ip_string, const DB_VALUE * number);
368 
369 extern void qstr_trim_trailing (const unsigned char *trim_charset_ptr, int trim_charset_size,
370  const unsigned char *src_ptr, DB_TYPE src_type, int src_length, int src_size,
371  INTL_CODESET codeset, int *trail_trimmed_length, int *trail_trimmed_size,
372  bool skip_spaces);
373 extern int db_get_date_format (const DB_VALUE * format_str, TIMESTAMP_FORMAT * format);
374 extern int db_get_time_from_dbvalue (const DB_VALUE * src_date, int *hour, int *minute, int *second, int *millisecond);
375 extern int db_get_datetime_from_dbvalue (const DB_VALUE * src_date, int *year, int *month, int *day, int *hour,
376  int *minute, int *second, int *millisecond, const char **endp);
377 extern int db_get_cs_coll_info (DB_VALUE * result, const DB_VALUE * val, const int mode);
378 extern int db_string_index_prefix (const DB_VALUE * string1, const DB_VALUE * string2, const DB_VALUE * index_type,
379  DB_VALUE * prefix_index);
380 extern int db_string_to_base64 (DB_VALUE const *val, DB_VALUE * result);
381 extern int db_string_from_base64 (DB_VALUE const *val, DB_VALUE * result);
382 extern int db_string_extract_dbval (const MISC_OPERAND extr_operand, DB_VALUE * dbval_p, DB_VALUE * result_p,
383  TP_DOMAIN * domain_p);
384 #endif /* _STRING_OPFUNC_H_ */
int db_from_tz(DB_VALUE *time_val, DB_VALUE *tz, DB_VALUE *time_val_with_tz)
int db_new_time(DB_VALUE *time_val, DB_VALUE *tz_source, DB_VALUE *tz_dest, DB_VALUE *result_time)
int db_bit_to_blob(const DB_VALUE *src_value, DB_VALUE *result_value)
int db_string_replace(const DB_VALUE *src_string, const DB_VALUE *srch_string, const DB_VALUE *repl_string, DB_VALUE *replaced_string)
int db_string_compare(const DB_VALUE *string1, const DB_VALUE *string2, DB_VALUE *result)
int db_string_extract_dbval(const MISC_OPERAND extr_operand, DB_VALUE *dbval_p, DB_VALUE *result_p, TP_DOMAIN *domain_p)
int db_time_diff(const DB_VALUE *datetime_value1, const DB_VALUE *datetime_value2, DB_VALUE *result)
int db_string_chr(DB_VALUE *res, DB_VALUE *dbval1, DB_VALUE *dbval2)
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_get_string_length(const DB_VALUE *value)
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)
int db_convert_sec_to_time(const DB_VALUE *src, DB_VALUE *result)
int qstr_bin_to_hex(char *dest, int dest_size, const char *src, int src_size)
int get_last_day(int month, int year)
int db_time_dbval(DB_VALUE *result, const DB_VALUE *datetime_value, const TP_DOMAIN *domain)
int db_string_regexp_replace(DB_VALUE *result, DB_VALUE *args[], int const num_args, cub_regex_object **comp_regex, char **comp_pattern)
DB_TYPE
Definition: dbtype_def.h:670
int db_timestamp(const DB_VALUE *src_datetime1, const DB_VALUE *src_time2, DB_VALUE *result_datetime)
int db_string_aes_decrypt(DB_VALUE const *src, DB_VALUE const *key, DB_VALUE *result)
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)
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)
int db_unix_timestamp(const DB_VALUE *src_date, DB_VALUE *result_timestamp)
int db_string_elt(DB_VALUE *result, DB_VALUE *args[], int const num_args)
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)
int db_string_space(DB_VALUE const *count, DB_VALUE *result)
int db_get_cs_coll_info(DB_VALUE *result, const DB_VALUE *val, const int mode)
int db_from_unixtime(const DB_VALUE *src_date, const DB_VALUE *format, const DB_VALUE *date_lang, DB_VALUE *result, const TP_DOMAIN *domain)
int db_guid(THREAD_ENTRY *thread_p, DB_VALUE *result)
int db_string_limit_size_string(DB_VALUE *src_string, DB_VALUE *result, const int new_size, int *spare_bytes)
unsigned char * qstr_pad_string(unsigned char *s, int length, INTL_CODESET codeset)
int db_string_concatenate(const DB_VALUE *string1, const DB_VALUE *string2, DB_VALUE *result, DB_DATA_STATUS *data_status)
int db_get_date_format(const DB_VALUE *format_str, TIMESTAMP_FORMAT *format)
int db_string_lower(const DB_VALUE *string, DB_VALUE *lower_string)
int db_string_index_prefix(const DB_VALUE *string1, const DB_VALUE *string2, const DB_VALUE *index_type, DB_VALUE *prefix_index)
int db_format(const DB_VALUE *number_text, const DB_VALUE *decimals, const DB_VALUE *number_lang, DB_VALUE *result, const TP_DOMAIN *domain)
int qstr_bit_to_bin(char *dest, int dest_size, const char *src, int src_size)
int db_string_convert_to(const DB_VALUE *src_string, DB_VALUE *dest_string, INTL_CODESET dest_codeset, int dest_col)
int db_char_string_coerce(const DB_VALUE *src_string, DB_VALUE *dest_string, DB_DATA_STATUS *data_status)
int db_string_position(const DB_VALUE *sub_string, const DB_VALUE *src_string, DB_VALUE *result)
int db_hex(const DB_VALUE *param, DB_VALUE *result)
void THREAD_ENTRY
int db_add_days_to_year(const DB_VALUE *src_year, const DB_VALUE *src_days, DB_VALUE *result)
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)
int db_json_convert_to_utf8(DB_VALUE *dbval)
int db_string_upper(const DB_VALUE *string, DB_VALUE *upper_string)
int db_sys_date(DB_VALUE *result_date)
int db_months_between(const DB_VALUE *start_mon, const DB_VALUE *end_mon, DB_VALUE *result_mon)
int db_string_from_base64(DB_VALUE const *val, DB_VALUE *result)
int db_get_date_week(const DB_VALUE *src_date, const DB_VALUE *mode, DB_VALUE *result)
int db_string_aes_encrypt(DB_VALUE const *src, DB_VALUE const *key, DB_VALUE *result)
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_string_translate(const DB_VALUE *src_string, const DB_VALUE *from_string, const DB_VALUE *to_string, DB_VALUE *transed_string)
int db_string_regexp_like(DB_VALUE *result, DB_VALUE *args[], int const num_args, cub_regex_object **comp_regex, char **comp_pattern)
int db_date_add_interval_expr(DB_VALUE *result, const DB_VALUE *date, const DB_VALUE *expr, const int unit)
int qstr_compare(const unsigned char *string1, int size1, const unsigned char *string2, int size2)
int db_datetime_to_timestamp(const DB_VALUE *src_datetime, DB_VALUE *result_timestamp)
int db_string_to_base64(DB_VALUE const *val, DB_VALUE *result)
static enum scanner_mode mode
int db_tz_offset(const DB_VALUE *src_str, DB_VALUE *result_str, DB_DATETIME *date_time)
int get_day(int month, int day, int year)
int db_string_instr(const DB_VALUE *src_string, const DB_VALUE *sub_string, const DB_VALUE *start_pos, DB_VALUE *result)
int db_sys_date_and_epoch_time(DB_VALUE *dt_dbval, DB_VALUE *ts_dbval)
int db_add_time(const DB_VALUE *left, const DB_VALUE *right, DB_VALUE *result, const TP_DOMAIN *domain)
int db_blob_from_file(const DB_VALUE *src_value, DB_VALUE *result_value)
int db_ascii(const DB_VALUE *param, DB_VALUE *result)
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)
int db_str_to_date(const DB_VALUE *src_date, const DB_VALUE *src_format, const DB_VALUE *date_lang, DB_VALUE *result_date, TP_DOMAIN *domain)
int db_add_months(const DB_VALUE *src_date, const DB_VALUE *nmonth, DB_VALUE *result_date)
int db_string_quote(const DB_VALUE *src_string, DB_VALUE *res)
int db_to_number(const DB_VALUE *src_str, const DB_VALUE *format_str, const DB_VALUE *number_lang, DB_VALUE *result_num)
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)
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 char_compare(const unsigned char *string1, int size1, const unsigned char *string2, int size2)
int db_get_date_from_days(const DB_VALUE *src, DB_VALUE *result)
int db_inet_ntoa(DB_VALUE *result_ip_string, const DB_VALUE *number)
int db_string_char_length(const DB_VALUE *string, DB_VALUE *char_count)
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_get_date_dayofyear(const DB_VALUE *src_date, DB_VALUE *result)
void init_builtin_calendar_names(LANG_LOCALE_DATA *lld)
int db_date_add_interval_days(DB_VALUE *result, const DB_VALUE *date, const DB_VALUE *days)
int bit_compare(const unsigned char *string1, int size1, const unsigned char *string2, int size2)
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)
int db_get_time_from_dbvalue(const DB_VALUE *src_date, int *hour, int *minute, int *second, int *millisecond)
int db_time_format(const DB_VALUE *src_time, const DB_VALUE *src_format, const DB_VALUE *date_lang, DB_VALUE *result_time, const TP_DOMAIN *domain)
int nchar_compare(const unsigned char *string1, int size1, const unsigned char *string2, int size2, INTL_CODESET codeset)
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)
int count(int &result, const cub_regex_object &reg, const std::string &src, const int position, const INTL_CODESET codeset)
int db_get_date_quarter(const DB_VALUE *src_date, DB_VALUE *result)
TIMESTAMP_FORMAT
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_conv(const DB_VALUE *num, const DB_VALUE *from_base, const DB_VALUE *to_base, DB_VALUE *result)
int varnchar_compare(const unsigned char *string1, int size1, const unsigned char *string2, int size2, INTL_CODESET codeset)
int db_to_date(const DB_VALUE *src_str, const DB_VALUE *format_str, const DB_VALUE *date_lang, DB_VALUE *result_date)
int db_string_md5(DB_VALUE const *val, DB_VALUE *result)
int db_string_like(const DB_VALUE *src_string, const DB_VALUE *pattern, const DB_VALUE *esc_char, int *result)
int db_last_day(const DB_VALUE *src_date, DB_VALUE *result_day)
int db_string_repeat(const DB_VALUE *src_string, const DB_VALUE *count, DB_VALUE *result)
int db_string_sha_one(DB_VALUE const *val, DB_VALUE *result)
DB_DATA_STATUS
int db_date_dbval(DB_VALUE *result, const DB_VALUE *date_value, const TP_DOMAIN *domain)
int db_sys_datetime(DB_VALUE *result_datetime)
int db_date_diff(const DB_VALUE *date_value1, const DB_VALUE *date_value2, DB_VALUE *result)
int db_sys_time(DB_VALUE *result_time)
int db_sys_timestamp(DB_VALUE *result_timestamp)
enum intl_codeset INTL_CODESET
Definition: intl_support.h:190
int db_blob_to_bit(const DB_VALUE *src_value, const DB_VALUE *length_value, DB_VALUE *result_value)
int db_get_date_weekday(const DB_VALUE *src_date, const int type, DB_VALUE *result)
int varbit_compare(const unsigned char *string1, int size1, const unsigned char *string2, int size2)
int db_clob_to_char(const DB_VALUE *src_value, const DB_VALUE *codeset_value, DB_VALUE *result_value)
int db_date_sub_interval_expr(DB_VALUE *result, const DB_VALUE *date, const DB_VALUE *expr, const int unit)
int db_convert_to_time(const DB_VALUE *src_hour, const DB_VALUE *src_minute, const DB_VALUE *src_second, DB_VALUE *result)
int db_find_string_in_in_set(const DB_VALUE *needle, const DB_VALUE *stack, DB_VALUE *result)
int db_value_to_enumeration_value(const DB_VALUE *src, DB_VALUE *result, const TP_DOMAIN *enum_domain)
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)
int db_string_reverse(const DB_VALUE *src_str, DB_VALUE *result_str)
int db_get_date_totaldays(const DB_VALUE *src_date, DB_VALUE *result)
int qstr_hex_to_bin(char *dest, int dest_size, const char *src, int src_size)
int db_clob_length(const DB_VALUE *src_value, DB_VALUE *result_value)
int db_string_regexp_substr(DB_VALUE *result, DB_VALUE *args[], int const num_args, cub_regex_object **comp_regex, char **comp_pattern)
int db_convert_time_to_sec(const DB_VALUE *src_date, DB_VALUE *result)
int db_conv_tz(DB_VALUE *time_val, DB_VALUE *result_time)
int db_string_escape_str(const char *src_str, size_t src_size, char **res_string, size_t *dest_size)
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_string_sha_two(DB_VALUE const *src, DB_VALUE const *len, DB_VALUE *result)
int db_string_unique_prefix(const DB_VALUE *db_string1, const DB_VALUE *db_string2, DB_VALUE *db_result, TP_DOMAIN *key_domain)
int db_string_trim(const MISC_OPERAND tr_operand, const DB_VALUE *trim_charset, const DB_VALUE *src_string, DB_VALUE *trimmed_string)
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 db_inet_aton(DB_VALUE *result_numbered_ip, const DB_VALUE *string)
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_blob_length(const DB_VALUE *src_value, DB_VALUE *result_value)
int count_leap_years_up_to(int year)
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_char_to_blob(const DB_VALUE *src_value, DB_VALUE *result_value)
const char * DB_CONST_C_CHAR
Definition: dbtype_def.h:1155
int db_sys_timezone(DB_VALUE *result_timezone)
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 skip_spaces)
int db_string_fix_string_size(DB_VALUE *src_string)
int db_date_sub_interval_days(DB_VALUE *result, const DB_VALUE *date, const DB_VALUE *days)
int count_nonleap_years_up_to(int year)
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)
MISC_OPERAND
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 db_bigint_to_binary_string(const DB_VALUE *src_bigint, DB_VALUE *result)
int db_bit_string_coerce(const DB_VALUE *src_string, DB_VALUE *dest_string, DB_DATA_STATUS *data_status)
int db_char_to_clob(const DB_VALUE *src_value, DB_VALUE *result_value)
int db_get_time_item(const DB_VALUE *src_date, const int item_type, DB_VALUE *result)