FreeTDS API
|
Handle bulk copy. More...
#include <config.h>
#include <assert.h>
#include <freetds/tds.h>
#include <freetds/checks.h>
#include <freetds/bytes.h>
#include <freetds/iconv.h>
#include <freetds/stream.h>
#include <freetds/convert.h>
#include <freetds/utils/string.h>
#include <freetds/replacements.h>
Classes | |
struct | tds_file_stream |
input stream to read a file More... | |
struct | tds_pbcb |
Holds clause buffer. More... | |
Macros | |
#define | BULKCOL(n) |
Typedefs | |
typedef struct tds_file_stream | TDSFILESTREAM |
input stream to read a file | |
typedef struct tds_pbcb | TDSPBCB |
Holds clause buffer. | |
Enumerations | |
enum | { BULKCOL_colcnt , BULKCOL_colid , BULKCOL_type , BULKCOL_length , BULKCOL_status , BULKCOL_offset , BULKCOL_COUNT , BULKCOL_ALL = (1 << BULKCOL_COUNT) -1 } |
Functions | |
static int | tds5_bcp_add_fixed_columns (TDSBCPINFO *bcpinfo, tds_bcp_get_col_data get_col_data, tds_bcp_null_error null_error, int offset, unsigned char *rowbuffer, int start) |
Add fixed size columns to the row. | |
static int | tds5_bcp_add_variable_columns (TDSBCPINFO *bcpinfo, tds_bcp_get_col_data get_col_data, tds_bcp_null_error null_error, int offset, TDS_UCHAR *rowbuffer, int start, int *pncols) |
Add variable size columns to the row. | |
static int | tds5_bulk_insert_column (const char *name) |
static TDSRET | tds5_process_insert_bulk_reply (TDSSOCKET *tds, TDSBCPINFO *bcpinfo) |
static TDSRET | tds5_send_record (TDSSOCKET *tds, TDSBCPINFO *bcpinfo, tds_bcp_get_col_data get_col_data, tds_bcp_null_error null_error, int offset) |
static void | tds5_swap_data (const TDSCOLUMN *col TDS_UNUSED, void *p TDS_UNUSED) |
static TDSRET | tds7_bcp_send_colmetadata (TDSSOCKET *tds, TDSBCPINFO *bcpinfo) |
Send BCP metadata to server. | |
static TDSRET | tds7_build_bulk_insert_stmt (TDSSOCKET *tds, TDSPBCB *clause, TDSCOLUMN *bcpcol, int first) |
Help to build query to be sent to server. | |
static TDSRET | tds7_send_record (TDSSOCKET *tds, TDSBCPINFO *bcpinfo, tds_bcp_get_col_data get_col_data, tds_bcp_null_error null_error, int offset) |
TDSRET | tds_bcp_done (TDSSOCKET *tds, int *rows_copied) |
Tell we finished sending BCP data to server. | |
TDSRET | tds_bcp_fread (TDSSOCKET *tds, TDSICONV *char_conv, FILE *stream, const char *terminator, size_t term_len, char **outbuf, size_t *outbytes) |
Read a data file, passing the data through iconv(). | |
TDSRET | tds_bcp_init (TDSSOCKET *tds, TDSBCPINFO *bcpinfo) |
Initialize BCP information. | |
static void | tds_bcp_row_free (TDSRESULTINFO *result, unsigned char *row TDS_UNUSED) |
Free row data allocated in the result set. | |
static void | tds_bcp_row_free (TDSRESULTINFO *result, unsigned char *row) |
TDSRET | tds_bcp_send_record (TDSSOCKET *tds, TDSBCPINFO *bcpinfo, tds_bcp_get_col_data get_col_data, tds_bcp_null_error null_error, int offset) |
Send one row of data to server. | |
TDSRET | tds_bcp_start (TDSSOCKET *tds, TDSBCPINFO *bcpinfo) |
Start sending BCP data to server. | |
TDSRET | tds_bcp_start_copy_in (TDSSOCKET *tds, TDSBCPINFO *bcpinfo) |
Start bulk copy to server. | |
static TDSRET | tds_bcp_start_insert_stmt (TDSSOCKET *tds, TDSBCPINFO *bcpinfo) |
Prepare the query to be sent to server to request BCP information. | |
static int | tds_file_stream_read (TDSINSTREAM *stream, void *ptr, size_t len) |
Reads a chunk of data from file stream checking for terminator. | |
TDSRET | tds_writetext_continue (TDSSOCKET *tds, const TDS_UCHAR *text, TDS_UINT size) |
Send some data in the writetext request started by tds_writetext_start. | |
TDSRET | tds_writetext_end (TDSSOCKET *tds) |
Finish sending writetext data. | |
TDSRET | tds_writetext_start (TDSSOCKET *tds, const char *objname, const char *textptr, const char *timestamp, int with_log, TDS_UINT size) |
Start writing writetext request. | |
Handle bulk copy.
#define BULKCOL | ( | n | ) |
|
static |
Add fixed size columns to the row.
bcpinfo | BCP information |
get_col_data | function to call to retrieve data to be sent |
ignored | function to call if we try to send NULL if not allowed (not used) |
offset | passed to get_col_data and null_error to specify the row to get |
rowbuffer | row buffer to write to |
start | row buffer last end position |
|
static |
Add variable size columns to the row.
bcpinfo | BCP information already prepared |
get_col_data | function to call to retrieve data to be sent |
null_error | function to call if we try to send NULL if not allowed |
offset | passed to get_col_data and null_error to specify the row to get |
rowbuffer | The row image that will be sent to the server. |
start | Where to begin copying data into the rowbuffer. |
pncols | Address of output variable holding the count of columns added to the rowbuffer. |
|
static |
Send BCP metadata to server.
Only for TDS 7.0+.
tds | A pointer to the TDSSOCKET structure managing a client/server operation. |
bcpinfo | BCP information |
|
static |
Help to build query to be sent to server.
Append column declaration to the query. Only for TDS 7.0+.
tds | A pointer to the TDSSOCKET structure managing a client/server operation. | |
[out] | clause | output string |
bcpcol | column to append | |
first | true if column is the first |
TDSRET tds_bcp_done | ( | TDSSOCKET * | tds, |
int * | rows_copied | ||
) |
Tell we finished sending BCP data to server.
tds | A pointer to the TDSSOCKET structure managing a client/server operation. | |
[out] | rows_copied | number of rows copied to server |
TDSRET tds_bcp_fread | ( | TDSSOCKET * | tds, |
TDSICONV * | char_conv, | ||
FILE * | stream, | ||
const char * | terminator, | ||
size_t | term_len, | ||
char ** | outbuf, | ||
size_t * | outbytes | ||
) |
Read a data file, passing the data through iconv().
TDS_SUCCESS | success |
TDS_FAIL | error reading the column |
TDS_NO_MORE_RESULTS | end of file detected |
TDSRET tds_bcp_init | ( | TDSSOCKET * | tds, |
TDSBCPINFO * | bcpinfo | ||
) |
Initialize BCP information.
Query structure of the table to server.
tds | A pointer to the TDSSOCKET structure managing a client/server operation. |
bcpinfo | BCP information to initialize. Structure should be allocate and table name and direction should be already set. |
TDSRET tds_bcp_send_record | ( | TDSSOCKET * | tds, |
TDSBCPINFO * | bcpinfo, | ||
tds_bcp_get_col_data | get_col_data, | ||
tds_bcp_null_error | null_error, | ||
int | offset | ||
) |
Send one row of data to server.
tds | A pointer to the TDSSOCKET structure managing a client/server operation. |
bcpinfo | BCP information |
get_col_data | function to call to retrieve data to be sent |
ignored | function to call if we try to send NULL if not allowed (not used) |
offset | passed to get_col_data and null_error to specify the row to get |
TDSRET tds_bcp_start | ( | TDSSOCKET * | tds, |
TDSBCPINFO * | bcpinfo | ||
) |
Start sending BCP data to server.
Initialize stream to accept data.
tds | A pointer to the TDSSOCKET structure managing a client/server operation. |
bcpinfo | BCP information already prepared |
TDSRET tds_bcp_start_copy_in | ( | TDSSOCKET * | tds, |
TDSBCPINFO * | bcpinfo | ||
) |
Start bulk copy to server.
tds | A pointer to the TDSSOCKET structure managing a client/server operation. |
bcpinfo | BCP information already prepared |
|
static |
Prepare the query to be sent to server to request BCP information.
tds | A pointer to the TDSSOCKET structure managing a client/server operation. |
bcpinfo | BCP information |
|
static |
Reads a chunk of data from file stream checking for terminator.
stream | file stream |
ptr | buffer where to read data |
len | length of buffer |
TDSRET tds_writetext_continue | ( | TDSSOCKET * | tds, |
const TDS_UCHAR * | text, | ||
TDS_UINT | size | ||
) |
Send some data in the writetext request started by tds_writetext_start.
You should write in total (with multiple calls to this function) all bytes declared calling tds_writetext_start.
tds | A pointer to the TDSSOCKET structure managing a client/server operation. |
text | data to write |
size | data size in bytes |
TDSRET tds_writetext_end | ( | TDSSOCKET * | tds | ) |
Finish sending writetext data.
tds | A pointer to the TDSSOCKET structure managing a client/server operation. |
TDSRET tds_writetext_start | ( | TDSSOCKET * | tds, |
const char * | objname, | ||
const char * | textptr, | ||
const char * | timestamp, | ||
int | with_log, | ||
TDS_UINT | size | ||
) |
Start writing writetext request.
This request start a bulk session.
tds | A pointer to the TDSSOCKET structure managing a client/server operation. |
objname | table name |
textptr | TEXTPTR (see sql documentation) |
timestamp | data timestamp |
with_log | is log is enabled during insert |
size | bytes to be inserted |