57 size_t * outlen,
bool * isnull);
64 size_t * outlen,
bool * isnull);
90 if (!domain_initalized)
102 precision = scale = 0;
119 if (type == CI_TYPE_NULL || addr ==
NULL)
129 if (len <
sizeof (INT64))
136 if (len <
sizeof (
int))
143 if (len <
sizeof (
short))
150 if (len <
sizeof (
float))
157 if (len <
sizeof (
double))
163 case CI_TYPE_VARCHAR:
165 case CI_TYPE_VARNCHAR:
169 if (type == CI_TYPE_CHAR)
171 else if (type == CI_TYPE_VARCHAR)
173 else if (type == CI_TYPE_NCHAR)
175 else if (type == CI_TYPE_VARNCHAR)
184 if (type == CI_TYPE_BIT)
186 else if (type == CI_TYPE_VARBIT)
195 if (len <
sizeof (*xtime))
197 xtime = (CI_TIME *) addr;
198 time.
hour = xtime->hour;
199 time.
minute = xtime->minute;
200 time.
second = xtime->second;
209 if (len <
sizeof (*xtime))
211 xtime = (CI_TIME *) addr;
212 date.
year = xtime->year;
213 date.
month = xtime->month;
214 date.
day = xtime->day;
218 case CI_TYPE_TIMESTAMP:
224 if (len <
sizeof (*xtime))
227 xtime = (CI_TIME *) addr;
230 res =
db_make_date (&d, xtime->month, xtime->day, xtime->year);
233 res =
db_make_time (&t, xtime->hour, xtime->minute, xtime->second);
246 case CI_TYPE_DATETIME:
252 if (len <
sizeof (*xtime))
255 xtime = (CI_TIME *) addr;
257 db_datetime_encode (&dt, xtime->month, xtime->day, xtime->year, xtime->hour, xtime->minute, xtime->second,
263 case CI_TYPE_MONETARY:
265 if (len <
sizeof (
double))
271 case CI_TYPE_NUMERIC:
281 if (len <
sizeof (CI_OID))
283 xoid = (CI_OID *) addr;
295 case CI_TYPE_COLLECTION:
299 if (len <
sizeof (CI_COLLECTION *))
301 col = (CI_COLLECTION *) addr;
344 int buflen, xflen, outlen;
365 if (len <
sizeof (
int))
373 if (len <
sizeof (
short))
381 if (len <
sizeof (
float))
389 if (len <
sizeof (
double))
400 case CI_TYPE_VARCHAR:
410 case CI_TYPE_VARNCHAR:
427 CI_TIME *xtime = (CI_TIME *) addr;
431 if (len <
sizeof (*xtime))
442 xflen =
sizeof (*xtime);
447 CI_TIME *xtime = (CI_TIME *) addr;
451 if (len <
sizeof (*xtime))
462 xflen =
sizeof (*xtime);
465 case CI_TYPE_TIMESTAMP:
467 CI_TIME *xtime = (CI_TIME *) addr;
471 int D, M, Y, h, m, s;
473 if (len <
sizeof (*xtime))
490 xflen =
sizeof (*xtime);
493 case CI_TYPE_MONETARY:
495 if (len <
sizeof (
double))
501 case CI_TYPE_NUMERIC:
535 CI_OID *xoid = (CI_OID *) addr;
539 if (len <
sizeof (CI_OID))
568 xflen =
sizeof (*xoid);
572 case CI_TYPE_COLLECTION:
577 if (len <
sizeof (CI_COLLECTION *))
580 col = (CI_COLLECTION *) addr;
602 *out_len = ((outlen == 0) ? xflen : outlen);
769 size_t * outlen,
bool * isnull)
779 return vbt->
tbl.
ifs->
get_value (tbl, idx, type, addr, len, outlen, isnull);
970 *xt = CI_TYPE_BIGINT;
976 *xt = CI_TYPE_DOUBLE;
979 *xt = CI_TYPE_VARCHAR;
991 *xt = CI_TYPE_COLLECTION;
997 *xt = CI_TYPE_TIMESTAMP;
1000 *xt = CI_TYPE_DATETIME;
1006 *xt = CI_TYPE_MONETARY;
1009 *xt = CI_TYPE_SHORT;
1012 *xt = CI_TYPE_NUMERIC;
1018 *xt = CI_TYPE_VARBIT;
1024 *xt = CI_TYPE_NCHAR;
1027 *xt = CI_TYPE_VARNCHAR;
1060 case CI_TYPE_BIGINT:
1066 case CI_TYPE_DOUBLE:
1072 case CI_TYPE_VARCHAR:
1081 case CI_TYPE_VARBIT:
1090 case CI_TYPE_TIMESTAMP:
1093 case CI_TYPE_DATETIME:
1096 case CI_TYPE_MONETARY:
1099 case CI_TYPE_NUMERIC:
1105 case CI_TYPE_COLLECTION:
1126 oid->
slotid = (xoid->d2 >> 16) & 0xffff;
1127 oid->
volid = xoid->d2 & 0xffff;
1141 xoid->d2 = ((oid->
slotid << 16) & 0xffff0000) | oid->
volid;
1157 if (dbval ==
NULL || (type != CI_TYPE_NULL && (addr ==
NULL || len <= 0)))
1178 size_t * outlen,
bool * isnull)
1180 if (dbval ==
NULL || addr ==
NULL || len <= 0 || outlen ==
NULL || isnull ==
NULL)
int api_collection_set_to_db_value(API_COLLECTION *col, DB_VALUE *val)
void oid2xoid(OID *oid, BIND_HANDLE conn, CI_OID *xoid)
static VALUE_BIND_TABLE_IFS VB_IFS_
static void vbt_dtor(VALUE_AREA *v, API_VALUE *aval)
int db_domain_scale(const DB_DOMAIN *domain)
int create_db_value_bind_table(int nvalue, void *impl, int auto_apply, BIND_HANDLE conn_handle, int(*get_index_by_name)(void *, const char *, int *), int(*get_db_value)(void *, int, DB_VALUE *), int(*set_db_value)(void *, int, DB_VALUE *), int(*init_domain)(void *, int, DB_VALUE *), VALUE_BIND_TABLE **rtable)
DB_OBJECT * db_object(DB_IDENTIFIER *oid)
int db_domain_precision(const DB_DOMAIN *domain)
int(* init_domain)(void *, int, DB_VALUE *)
#define ER_INTERFACE_NOT_SUPPORTED_OPERATION
int array_indexer_create(int nvalue, VALUE_INDEXER **rvi)
int db_timestamp_encode_ses(const DB_DATE *date, const DB_TIME *timeval, DB_TIMESTAMP *utime, TZ_ID *dest_tz_id)
enum check_purpose_s CHECK_PURPOSE
void(* destroy)(VALUE_INDEXER *indexer, void(*df)(VALUE_AREA *va, API_VALUE *db))
int(* get_db_value)(void *, int, DB_VALUE *)
static int vbt_apply_updatesf_map(void *arg, int index, VALUE_AREA *va, API_VALUE *val)
int db_make_date(DB_VALUE *value, const int month, const int day, const int year)
static int vbt_lazy_init_db_value(VALUE_BIND_TABLE_ *vbt, int index, CHECK_PURPOSE pup, VALUE_AREA **rva, DB_VALUE **rv)
void xoid2oid(CI_OID *xoid, OID *oid)
static void vbt_api_destroy(VALUE_BIND_TABLE *table)
int db_type_to_type(DB_TYPE dt, CI_TYPE *xt)
struct VALUE_AREA VALUE_AREA
static int vbt_api_get_value(VALUE_BIND_TABLE *tbl, int index, CI_TYPE type, void *addr, size_t len, size_t *outlen, bool *isnull)
int api_collection_create_from_db_value(BIND_HANDLE conn, const DB_VALUE *val, API_COLLECTION **rc)
unsigned int DB_TIMESTAMP
#define api_er_set(a, b, c, d)
int db_make_monetary(DB_VALUE *value, const DB_CURRENCY type, const double amount)
#define ER_INTERFACE_GENERIC
static int db_value_to_value(BIND_HANDLE conn, const DB_VALUE *val, CI_TYPE type, void *addr, size_t len, size_t *outlen, bool *isnull)
DB_IDENTIFIER * db_identifier(DB_OBJECT *obj)
static int vbt_api_set_value(VALUE_BIND_TABLE *tbl, int index, CI_TYPE type, void *addr, size_t len)
static int vbt_api_apply_updates(VALUE_BIND_TABLE *tbl)
DB_TYPE db_value_type(const DB_VALUE *value)
int coerce_db_value_to_value(const DB_VALUE *dbval, BIND_HANDLE conn, CI_TYPE type, void *addr, size_t len, size_t *outlen, bool *isnull)
#define DB_VALUE_DOMAIN_TYPE(value)
int db_value_free(DB_VALUE *value)
DB_OBJECT * db_get_object(const DB_VALUE *value)
struct API_VALUE API_VALUE
DB_VALUE * db_value_create(void)
int(* map)(VALUE_INDEXER *indexer, int(*mapf)(void *, int, VALUE_AREA *, API_VALUE *), void *arg)
int db_timestamp_decode_ses(const DB_TIMESTAMP *utime, DB_DATE *date, DB_TIME *timeval)
DB_DOMAIN * db_type_to_db_domain(const DB_TYPE type)
int db_make_time(DB_VALUE *value, const int hour, const int minute, const int second)
int(* check)(VALUE_INDEXER *indexer, int index, CHECK_PURPOSE pup)
VALUE_BIND_TABLE_IFS * ifs
int pr_clone_value(const DB_VALUE *src, DB_VALUE *dest)
OID * db_get_oid(const DB_VALUE *value)
int(* get)(VALUE_INDEXER *indexer, int index, VALUE_AREA **rva, API_VALUE **rv)
int db_datetime_encode(DB_DATETIME *datetime, int month, int day, int year, int hour, int minute, int second, int millisecond)
DB_DATE * db_get_date(const DB_VALUE *value)
int db_value_put(DB_VALUE *value, const DB_TYPE_C c_type, void *input, const int input_length)
static int vbt_api_get_value_by_name(VALUE_BIND_TABLE *tbl, const char *name, CI_TYPE type, void *addr, size_t len, size_t *outlen, bool *isnull)
int(* get_value)(VALUE_BIND_TABLE *tbl, int index, CI_TYPE type, void *addr, size_t len, size_t *outlen, bool *isnull)
int db_value_get(DB_VALUE *value, const DB_TYPE_C c_type, void *buf, const int buflen, int *xflen, int *outlen)
int(* set_value)(VALUE_BIND_TABLE *tbl, int index, CI_TYPE type, void *addr, size_t len)
#define DB_CURRENCY_DEFAULT
int(* get_index_by_name)(void *, const char *, int *)
int db_make_null(DB_VALUE *value)
void db_date_decode(const DB_DATE *date, int *monthp, int *dayp, int *yearp)
int type_to_db_type(CI_TYPE xt, DB_TYPE *dt)
int db_value_clear(DB_VALUE *value)
int db_make_oid(DB_VALUE *value, const OID *oid)
int(* set)(VALUE_INDEXER *indexer, int index, VALUE_AREA *va, API_VALUE *val)
DB_TIME * db_get_time(const DB_VALUE *value)
static int value_to_db_value(CI_TYPE type, void *addr, size_t len, DB_VALUE *val, bool domain_initialized)
int numeric_coerce_string_to_num(const char *astring, int astring_length, INTL_CODESET codeset, DB_VALUE *result)
void db_time_decode(DB_TIME *timeval, int *hourp, int *minutep, int *secondp)
#define ER_INTERFACE_INVALID_ARGUMENT
int(* set_db_value)(void *, int, DB_VALUE *)
static int vbt_resetf_map(void *arg, int index, VALUE_AREA *va, API_VALUE *val)
DB_CONST_C_CHAR db_get_string(const DB_VALUE *value)
static int vbt_api_reset(VALUE_BIND_TABLE *tbl)
int coerce_value_to_db_value(CI_TYPE type, void *addr, size_t len, DB_VALUE *dbval, bool domain_initialized)
static int vbt_api_set_value_by_name(VALUE_BIND_TABLE *tbl, const char *name, CI_TYPE type, void *addr, size_t len)
int db_value_domain_init(DB_VALUE *value, const DB_TYPE type, const int precision, const int scale)
#define ER_INTERFACE_NO_MORE_MEMORY