, tblname->mb, hfile->mb, errfile->mb, direction);
103 #ifdef ENABLE_ODBC_WIDE 117 if(
dbc->tds_socket->conn->tds_version < 0x500)
120 if(direction != BCP_DIRECTION_IN || hfile || errfile)
139 dbc->bcpinfo->direction = direction;
141 dbc->bcpinfo->xfer_init = 0;
142 dbc->bcpinfo->bind_count = 0;
185 dbc->bcpinfo->hint =
dbc->bcphint;
213 if(
dbc->bcpinfo->direction != BCP_DIRECTION_IN)
215 if(table_column <= 0 || table_column >
dbc->bcpinfo->bindinfo->num_cols)
218curcol =
dbc->bcpinfo->bindinfo->columns[table_column - 1];
246 if(
dbc->bcpinfo->direction != BCP_DIRECTION_IN)
253 if(
dbc->bcpinfo->xfer_init == 0) {
259 dbc->bcpinfo->xfer_init = 1;
262 dbc->bcpinfo->parent =
dbc;
311 if(!(
dbc->bcpinfo))
346 const void*
terminator,
inttermlen,
intvartype,
inttable_column)
351 dbc, varaddr, prefixlen, varlen,
356 if(
dbc->bcpinfo->direction != BCP_DIRECTION_IN)
362 if(prefixlen != 0 && prefixlen != 1 && prefixlen != 2 && prefixlen != 4 && prefixlen != 8)
373 if(table_column <= 0 || table_column >
dbc->bcpinfo->bindinfo->num_cols)
376 if(varaddr ==
NULL&& (prefixlen != 0 || termlen != 0))
379colinfo =
dbc->bcpinfo->bindinfo->columns[table_column - 1];
383 if(varaddr ==
NULL&& varlen >= 0) {
412 char*orig_dest = dest;
416 returndest - orig_dest;
419 if(destlen > srclen)
421memcpy(dest, src, destlen);
427 intdesttype,
unsigned char* dest,
TDSCOLUMN*bindcol)
436 intalways_convert = 0;
444 dbc, srctype, src, (
int)src_len, desttype, dest, (
int)destlen);
450src = (
char*) &dta;
467src = (
char*) #
474 if((srctype == desttype ||
is_similar_type(srctype, desttype)) && !always_convert) {
477(
dbc, bindcol, src, src_len,
478(
char*)dest, destlen);
481ret = destlen < src_len ? destlen : (
TDS_INT) src_len;
482memcpy(dest, src, ret);
505ret = destlen <
len? destlen :
len;
506memcpy(dest, dres.
ib, ret);
528memcpy(dest, &dres,
len);
535(
char*)dest, destlen);
558 intconverted_data_size;
575memcpy(&ti, dataptr, 1);
580memcpy(&
si, dataptr, 2);
585memcpy(&li, dataptr, 4);
590memcpy(&lli, dataptr, 8);
626col_len = (bytes_read < col_len) ? bytes_read : col_len;
628col_len = bytes_read;
635 if((converted_data_size =
661 if(term_len == 1 && *term ==
'\0')
662 returnstrlen(pdata);
665 for(bufpos = 0; bufpos >= 0 && memcmp(pdata, term, term_len) != 0; pdata++) {
static const char si[8][64]
TDS_INT convert_datetime2server(int bindtype, const void *src, TDS_DATETIMEALL *dta)
DSTR * odbc_dstr_copy(TDS_DBC *dbc, DSTR *s, int size, const SQLCHAR *str)
#define is_numeric_type(x)
tds_sysdep_int32_type TDS_INT
static bool is_tds_type_valid(int type)
unsigned char TDS_TINYINT
tds_sysdep_int16_type TDS_SMALLINT
#define is_similar_type(x, y)
void odbc_bcp_sendrow(TDS_DBC *dbc)
Write data in host variables to the table.
int odbc_bcp_batch(TDS_DBC *dbc)
Commit a set of rows to the table.
static TDSRET _bcp_get_col_data(TDSBCPINFO *bcpinfo, TDSCOLUMN *bindcol, int offset)
#define ODBCBCP_ERROR_DBINT(code)
void odbc_bcp_free_storage(TDS_DBC *dbc)
#define ODBCBCP_ERROR_RETURN(code)
static SQLLEN _bcp_get_term_var(const TDS_CHAR *pdata, const TDS_CHAR *term, int term_len)
Get the data for bcp-in from program variables, where the program data have been identified as charac...
int odbc_bcp_done(TDS_DBC *dbc)
Conclude the transfer of data from program variables.
static SQLLEN _bcp_iconv_helper(const TDS_DBC *dbc, const TDSCOLUMN *bindcol, const TDS_CHAR *src, size_t srclen, char *dest, size_t destlen)
void odbc_bcp_init(TDS_DBC *dbc, const ODBC_CHAR *tblname, const ODBC_CHAR *hfile, const ODBC_CHAR *errfile, int direction _WIDE)
Prepare for bulk copy operation on a table.
void odbc_bcp_colptr(TDS_DBC *dbc, const void *colptr, int table_column)
Override bcp_bind() by pointing to a different host variable.
void odbc_bcp_control(TDS_DBC *dbc, int field, void *value)
Set BCP options for data transfer.
void odbc_bcp_bind(TDS_DBC *dbc, const void *varaddr, int prefixlen, int varlen, const void *terminator, int termlen, int vartype, int table_column)
Bind a program host variable to a database column.
static TDS_INT _tdsodbc_dbconvert(TDS_DBC *dbc, int srctype, const TDS_CHAR *src, SQLLEN src_len, int desttype, unsigned char *dest, TDSCOLUMN *bindcol)
#define SYBMSDATETIMEOFFSET
#define tds_sysdep_int64_type
#define tds_bcp_start_copy_in
#define tds_get_size_by_type
#define tds_numeric_bytes_per_prec
#define tds_get_conversion_type
#define tds_bcp_send_record
static size_t tds_dstr_len(DSTR *s)
Returns the length of the string in bytes.
#define tds_alloc_bcpinfo
void odbc_convert_err_set(struct _sql_errors *errs, TDS_INT err)
if(yy_accept[yy_current_state])
const GenericPointer< typename T::ValueType > T2 value
#define SQL_C_TYPE_TIMESTAMP
this structure is not directed connected to a TDS protocol but keeps any DATE/TIME information.
Metadata about columns in regular and compute rows.
TDS_INT bcp_prefix_len
The length, in bytes, of any length prefix this column may have.
TDS_INT column_size
maximun size of data.
BCPCOLDATA * bcp_column_data
TDS_SMALLINT column_bindtype
TDS_TINYINT column_prec
precision for decimal/numeric
TDS_SERVER_TYPE column_type
This type can be different from wire type because conversion (e.g.
TDSICONV * char_conv
refers to previously allocated iconv information
TDS_TINYINT column_scale
scale for decimal/numeric
TDS_CHAR * column_varaddr
TDS_CHAR * bcp_terminator
Information for a server connection.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4