LCOV - code coverage report
Current view: top level - include - ctlib.h (source / functions) Hit Total Coverage
Test: FreeTDS coverage Lines: 1 1 100.0 %
Date: 2025-01-18 12:13:41 Functions: 0 0 -

          Line data    Source code
       1             : /* FreeTDS - Library of routines accessing Sybase and Microsoft databases
       2             :  * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004  Brian Bruns
       3             :  *
       4             :  * This library is free software; you can redistribute it and/or
       5             :  * modify it under the terms of the GNU Library General Public
       6             :  * License as published by the Free Software Foundation; either
       7             :  * version 2 of the License, or (at your option) any later version.
       8             :  *
       9             :  * This library is distributed in the hope that it will be useful,
      10             :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      11             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12             :  * Library General Public License for more details.
      13             :  *
      14             :  * You should have received a copy of the GNU Library General Public
      15             :  * License along with this library; if not, write to the
      16             :  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
      17             :  * Boston, MA 02111-1307, USA.
      18             :  */
      19             : 
      20             : #ifndef _ctlib_h_
      21             : #define _ctlib_h_
      22             : 
      23             : #include <freetds/tds.h>
      24             : #include <freetds/convert.h>
      25             : #include <freetds/utils/string.h>
      26             : #include <freetds/bool.h>
      27             : 
      28             : /*
      29             :  * Internal (not part of the exposed API) prototypes and such.
      30             :  */
      31             : 
      32             : #include <freetds/pushvis.h>
      33             : 
      34             : #ifdef __cplusplus
      35             : extern "C"
      36             : {
      37             : #if 0
      38             : }
      39             : #endif
      40             : #endif
      41             : 
      42             : /* Fix a problem with Windows headers */
      43             : #undef small
      44             : 
      45             : /*
      46             :  * internal types
      47             :  */
      48             : struct _cs_config
      49             : {
      50             :         short cs_expose_formats;
      51             : };
      52             : 
      53             : /* Code changed for error handling */
      54             : /* Code changes starts here - CT_DIAG - 01 */
      55             : 
      56             : /* This structure is used in CT_DIAG */
      57             : 
      58             : struct cs_diag_msg_client
      59             : {
      60             :         struct cs_diag_msg_client *next;
      61             :         CS_CLIENTMSG clientmsg;
      62             : };
      63             : 
      64             : typedef struct {
      65             :         CS_MSGNUM msgnumber;
      66             :         CS_INT state;
      67             :         CS_INT severity;
      68             :         CS_CHAR text[CS_MAX_MSG];
      69             :         CS_INT textlen;
      70             :         CS_CHAR svrname[132];
      71             :         CS_INT svrnlen;
      72             :         CS_CHAR proc[132];
      73             :         CS_INT proclen;
      74             :         CS_INT line;
      75             :         CS_INT status;
      76             :         CS_BYTE sqlstate[CS_SQLSTATE_SIZE];
      77             :         CS_INT sqlstatelen;
      78             : } CS_SERVERMSG_SMALL;
      79             : 
      80             : typedef struct {
      81             :         CS_MSGNUM msgnumber;
      82             :         CS_INT state;
      83             :         CS_INT severity;
      84             :         CS_CHAR text[CS_MAX_MSG];
      85             :         CS_INT textlen;
      86             :         CS_CHAR svrname[256];
      87             :         CS_INT svrnlen;
      88             :         CS_CHAR proc[256];
      89             :         CS_INT proclen;
      90             :         CS_INT line;
      91             :         CS_INT status;
      92             :         CS_BYTE sqlstate[CS_SQLSTATE_SIZE];
      93             :         CS_INT sqlstatelen;
      94             : } CS_SERVERMSG_LARGE;
      95             : 
      96             : typedef struct {
      97             :         CS_MSGNUM msgnumber;
      98             :         CS_INT state;
      99             :         CS_INT severity;
     100             :         CS_CHAR text[CS_MAX_MSG];
     101             :         CS_INT textlen;
     102             : } CS_SERVERMSG_COMMON1;
     103             : 
     104             : typedef struct {
     105             :         CS_INT line;
     106             :         CS_INT status;
     107             :         CS_BYTE sqlstate[CS_SQLSTATE_SIZE];
     108             :         CS_INT sqlstatelen;
     109             : } CS_SERVERMSG_COMMON2;
     110             : 
     111             : typedef union
     112             : {
     113             :         CS_SERVERMSG_SMALL small;
     114             :         CS_SERVERMSG_LARGE large;
     115             :         CS_SERVERMSG_COMMON1 common;
     116             :         CS_SERVERMSG user;
     117             : } CS_SERVERMSG_INTERNAL;
     118             : 
     119             : struct cs_diag_msg_svr
     120             : {
     121             :         struct cs_diag_msg_svr *next;
     122             :         CS_SERVERMSG_INTERNAL servermsg;
     123             : };
     124             : 
     125             : /* Code changes ends here - CT_DIAG - 01 */
     126             : 
     127             : struct cs_diag_msg
     128             : {
     129             :         CS_CLIENTMSG *msg;
     130             :         struct cs_diag_msg *next;
     131             : };
     132             : 
     133             : struct _cs_context
     134             : {
     135             :         CS_INT date_convert_fmt;
     136             :         CS_INT cs_errhandletype;
     137             :         CS_INT cs_diag_msglimit;
     138             : 
     139             :         /* added for storing the maximum messages limit CT_DIAG */
     140             :         /* code changes starts here - CT_DIAG - 02 */
     141             : 
     142             :         CS_INT cs_diag_msglimit_client;
     143             :         CS_INT cs_diag_msglimit_server;
     144             :         CS_INT cs_diag_msglimit_total;
     145             :         struct cs_diag_msg_client *clientstore;
     146             :         struct cs_diag_msg_svr *svrstore;
     147             : 
     148             :         /* code changes ends here - CT_DIAG - 02 */
     149             : 
     150             :         struct cs_diag_msg *msgstore;
     151             :         CS_CSLIBMSG_FUNC _cslibmsg_cb;
     152             :         CS_CLIENTMSG_FUNC _clientmsg_cb;
     153             :         CS_SERVERMSG_FUNC _servermsg_cb;
     154             :         /* code changes start here - CS_CONFIG - 01*/
     155             :         void *userdata;
     156             :         int userdata_len;
     157             :         /* code changes end here - CS_CONFIG - 01*/
     158             :         TDSCONTEXT *tds_ctx;
     159             :         CS_CONFIG config;
     160             :         int login_timeout;  /**< not used unless positive */
     161             :         int query_timeout;  /**< not used unless positive */
     162             : 
     163             :         /** structures uses large identifiers */
     164             :         bool use_large_identifiers;
     165             : };
     166             : 
     167             : static inline size_t cs_servermsg_len(CS_CONTEXT *ctx)
     168             : {
     169          48 :         if (ctx->use_large_identifiers)
     170             :                 return sizeof(CS_SERVERMSG_LARGE);
     171             :         return sizeof(CS_SERVERMSG_SMALL);
     172             : }
     173             : 
     174             : /*
     175             :  * internal typedefs
     176             :  */
     177             : typedef struct _ct_colinfo
     178             : {
     179             :         TDS_SMALLINT *indicator;
     180             : }
     181             : CT_COLINFO;
     182             : 
     183             : typedef struct _cs_dynamic CS_DYNAMIC;
     184             : 
     185             : struct _cs_connection
     186             : {
     187             :         CS_CONTEXT *ctx;
     188             :         TDSLOGIN *tds_login;
     189             :         TDSSOCKET *tds_socket;
     190             :         CS_CLIENTMSG_FUNC _clientmsg_cb;
     191             :         CS_SERVERMSG_FUNC _servermsg_cb;
     192             :         void *userdata;
     193             :         int userdata_len;
     194             :         CS_LOCALE *locale;
     195             :         CS_COMMAND *cmds;
     196             :         CS_DYNAMIC *dynlist;
     197             :         char *server_addr;
     198             :         bool network_auth;
     199             : };
     200             : 
     201             : /*
     202             :  * Formerly CSREMOTE_PROC_PARAM, this structure can be used in other
     203             :  * places, too.
     204             :  */
     205             : 
     206             : typedef struct _cs_param
     207             : {
     208             :         struct _cs_param *next;
     209             :         char *name;
     210             :         int status;
     211             :         int datatype;
     212             :         CS_INT maxlen;
     213             :         CS_INT scale;
     214             :         CS_INT precision;
     215             :         CS_INT *datalen;
     216             :         CS_SMALLINT *ind;
     217             :         CS_BYTE *value;
     218             :         int param_by_value;
     219             :         CS_INT datalen_value;
     220             :         CS_SMALLINT indicator_value;
     221             : } CS_PARAM;
     222             : 
     223             : /*
     224             :  * Code added for RPC functionality - SUHA
     225             :  * RPC Code changes starts here
     226             :  */
     227             : 
     228             : typedef CS_PARAM CSREMOTE_PROC_PARAM;
     229             : 
     230             : typedef struct _csremote_proc
     231             : {
     232             :         char *name;
     233             :         CS_SMALLINT options;
     234             :         CSREMOTE_PROC_PARAM *param_list;
     235             : } CSREMOTE_PROC;
     236             : 
     237             : /*
     238             :  * Structure CS_COMMAND changed for RPC functionality -SUHA
     239             :  * Added CSREMOTE_PROC *rpc to CS_COMMAND structure
     240             :  */
     241             : 
     242             : typedef CS_PARAM CS_DYNAMIC_PARAM;
     243             : 
     244             : struct _cs_dynamic
     245             : {
     246             :         struct _cs_dynamic *next;
     247             :         char *id;
     248             :         char *stmt;
     249             :         CS_DYNAMIC_PARAM *param_list;
     250             :         TDSDYNAMIC *tdsdyn;
     251             : }; 
     252             : 
     253             : /* specific FreeTDS commands */
     254             : #define CS_DYNAMIC_CMD   160
     255             : #define CS_CUR_CMD       161
     256             : 
     257             : /* values for cs_command.results_state */
     258             : 
     259             : #define _CS_RES_NONE            -1
     260             : #define _CS_RES_INIT            0
     261             : #define _CS_RES_RESULTSET_EMPTY 1
     262             : #define _CS_RES_RESULTSET_ROWS  2
     263             : #define _CS_RES_STATUS          3
     264             : #define _CS_RES_CMD_DONE        4
     265             : #define _CS_RES_CMD_SUCCEED     5
     266             : #define _CS_RES_END_RESULTS     6
     267             : #define _CS_RES_DESCRIBE_RESULT 7
     268             : 
     269             : /* values for cs_command.command_state */
     270             : 
     271             : #define _CS_COMMAND_IDLE        0
     272             : #define _CS_COMMAND_BUILDING    1
     273             : #define _CS_COMMAND_READY       2
     274             : #define _CS_COMMAND_SENT        3
     275             : 
     276             : /* values for cs_command.cancel_state */
     277             : #define _CS_CANCEL_NOCANCEL     0
     278             : #define _CS_CANCEL_PENDING      1
     279             : 
     280             : struct _cs_command
     281             : {
     282             :         struct _cs_command *next;
     283             :         CS_INT command_state;
     284             :         CS_INT results_state;
     285             :         CS_INT cancel_state;
     286             :         CS_INT cursor_state;
     287             :         CS_CONNECTION *con;
     288             :         CS_INT command_type;
     289             :         CS_CHAR *query;
     290             :         short dynamic_cmd;
     291             :         CS_DYNAMIC *dyn;
     292             :         int row_prefetched;
     293             :         int curr_result_type;
     294             :         int bind_count;
     295             :         int get_data_item;
     296             :         int get_data_bytes_returned;
     297             :         CS_IODESC *iodesc;
     298             :         CS_INT send_data_started;
     299             :         CSREMOTE_PROC *rpc;
     300             :         CS_PARAM *input_params;
     301             :         CS_INT client_cursor_id;
     302             :         TDSCURSOR *cursor;
     303             :         void *userdata;
     304             :         int userdata_len;
     305             : };
     306             : 
     307             : struct _cs_blkdesc
     308             : {
     309             :         TDSBCPINFO bcpinfo;
     310             : };
     311             : 
     312             : 
     313             : #define _CS_ERRHAND_INLINE 1
     314             : #define _CS_ERRHAND_CB     2
     315             : 
     316             : struct _cs_locale
     317             : {
     318             :         char *language;
     319             :         char *charset;
     320             :         char *time;
     321             :         char *collate;
     322             : };
     323             : 
     324             : /* internal defines for cursor processing */
     325             : 
     326             : #define _CS_CURS_TYPE_UNACTIONED 0
     327             : #define _CS_CURS_TYPE_REQUESTED  1
     328             : #define _CS_CURS_TYPE_SENT       2
     329             : 
     330             : typedef struct {
     331             :         CS_CHAR name[132];
     332             :         CS_INT namelen;
     333             :         CS_INT datatype;
     334             :         CS_INT format;
     335             :         CS_INT maxlength;
     336             :         CS_INT scale;
     337             :         CS_INT precision;
     338             :         CS_INT status;
     339             :         CS_INT count;
     340             :         CS_INT usertype;
     341             :         CS_LOCALE *locale;
     342             : } CS_DATAFMT_SMALL;
     343             : 
     344             : typedef struct {
     345             :         CS_CHAR name[256];
     346             :         CS_INT namelen;
     347             :         CS_INT datatype;
     348             :         CS_INT format;
     349             :         CS_INT maxlength;
     350             :         CS_INT scale;
     351             :         CS_INT precision;
     352             :         CS_INT status;
     353             :         CS_INT count;
     354             :         CS_INT usertype;
     355             :         CS_LOCALE *locale;
     356             : } CS_DATAFMT_LARGE;
     357             : 
     358             : typedef struct {
     359             :         CS_INT datatype;
     360             :         CS_INT format;
     361             :         CS_INT maxlength;
     362             :         CS_INT scale;
     363             :         CS_INT precision;
     364             :         CS_INT status;
     365             :         CS_INT count;
     366             :         CS_INT usertype;
     367             :         CS_LOCALE *locale;
     368             : } CS_DATAFMT_COMMON;
     369             : 
     370             : typedef union
     371             : {
     372             :         CS_DATAFMT_SMALL small;
     373             :         CS_DATAFMT_LARGE large;
     374             :         CS_DATAFMT user;
     375             : } CS_DATAFMT_INTERNAL;
     376             : 
     377             : /*
     378             :  * internal prototypes
     379             :  */
     380             : TDSRET _ct_handle_server_message(const TDSCONTEXT * ctxptr, TDSSOCKET * tdsptr, TDSMESSAGE * msgptr);
     381             : int _ct_handle_client_message(const TDSCONTEXT * ctxptr, TDSSOCKET * tdsptr, TDSMESSAGE * msgptr);
     382             : TDS_SERVER_TYPE _ct_get_server_type(TDSSOCKET *tds, int datatype);
     383             : int _ct_bind_data(CS_CONTEXT *ctx, TDSRESULTINFO * resinfo, TDSRESULTINFO *bindinfo, CS_INT offset);
     384             : int _ct_get_client_type(const TDSCOLUMN *col, bool describe);
     385             : void _ctclient_msg(CS_CONNECTION * con, const char *funcname, int layer, int origin, int severity, int number,
     386             :                    const char *fmt, ...);
     387             : CS_INT _ct_diag_clearmsg(CS_CONTEXT * context, CS_INT type);
     388             : void _cs_locale_free(CS_LOCALE *locale);
     389             : CS_LOCALE *_cs_locale_copy(CS_LOCALE *orig);
     390             : int _cs_locale_copy_inplace(CS_LOCALE *new_locale, CS_LOCALE *orig);
     391             : 
     392             : int _cs_convert_not_client(CS_CONTEXT *ctx, const TDSCOLUMN *curcol, CONV_RESULT *convert_buffer, unsigned char **p_src);
     393             : 
     394             : CS_RETCODE _cs_convert(CS_CONTEXT * ctx, const CS_DATAFMT_COMMON * srcfmt, CS_VOID * srcdata,
     395             :         const CS_DATAFMT_COMMON * destfmt, CS_VOID * destdata, CS_INT * resultlen);
     396             : bool _ct_is_large_identifiers_version(CS_INT version);
     397             : const CS_DATAFMT_COMMON * _ct_datafmt_common(CS_CONTEXT * ctx, const CS_DATAFMT * datafmt);
     398             : const CS_DATAFMT_LARGE *_ct_datafmt_conv_in(CS_CONTEXT * ctx, const CS_DATAFMT * datafmt, CS_DATAFMT_LARGE * fmtbuf);
     399             : CS_DATAFMT_LARGE *_ct_datafmt_conv_prepare(CS_CONTEXT * ctx, CS_DATAFMT * datafmt, CS_DATAFMT_LARGE * fmtbuf);
     400             : void _ct_datafmt_conv_back(CS_DATAFMT * datafmt, CS_DATAFMT_LARGE * fmtbuf);
     401             : 
     402             : CS_RETCODE _ct_props_dstr(CS_CONNECTION * con, DSTR *s, CS_INT action, CS_VOID * buffer, CS_INT buflen, CS_INT * outlen);
     403             : 
     404             : #ifdef __cplusplus
     405             : #if 0
     406             : {
     407             : #endif
     408             : }
     409             : #endif
     410             : 
     411             : #include <freetds/popvis.h>
     412             : 
     413             : #endif

Generated by: LCOV version 1.13