LCOV - code coverage report
Current view: top level - include - odbcss.h (source / functions) Hit Total Coverage
Test: FreeTDS coverage Lines: 15 15 100.0 %
Date: 2026-07-19 14:02:14 Functions: 2 2 100.0 %

          Line data    Source code
       1             : /* FreeTDS - Library of routines accessing Sybase and Microsoft databases
       2             :  * Copyright (C) 2008  Frediano Ziglio
       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 _odbcss_h_
      21             : #define _odbcss_h_
      22             : 
      23             : #ifdef TDSODBC_BCP
      24             : #include <sql.h>
      25             : #endif
      26             : 
      27             : #ifdef __cplusplus
      28             : extern "C" {
      29             : #endif
      30             : 
      31             : #define SQL_DIAG_SS_MSGSTATE    (-1150)
      32             : #define SQL_DIAG_SS_LINE        (-1154)
      33             : 
      34             : #define SQL_SOPT_SS_QUERYNOTIFICATION_TIMEOUT  1233
      35             : #define SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT  1234
      36             : #define SQL_SOPT_SS_QUERYNOTIFICATION_OPTIONS  1235
      37             : #define SQL_SOPT_SS_PARAM_FOCUS                1236
      38             : 
      39             : #ifndef SQL_SS_LENGTH_UNLIMITED
      40             : #define SQL_SS_LENGTH_UNLIMITED 0
      41             : #endif
      42             : 
      43             : #ifndef SQL_COPT_SS_BASE
      44             : #define SQL_COPT_SS_BASE        1200
      45             : #endif
      46             : 
      47             : #ifndef SQL_COPT_SS_ATTACHDBFILENAME
      48             : #define SQL_COPT_SS_ATTACHDBFILENAME    (SQL_COPT_SS_BASE+21)
      49             : #endif
      50             : 
      51             : #ifndef SQL_COPT_SS_MARS_ENABLED
      52             : #define SQL_COPT_SS_MARS_ENABLED        (SQL_COPT_SS_BASE+24)
      53             : #endif
      54             : 
      55             : #ifndef SQL_COPT_SS_OLDPWD
      56             : #define SQL_COPT_SS_OLDPWD      (SQL_COPT_SS_BASE+26)
      57             : #endif
      58             : 
      59             : #define SQL_INFO_FREETDS_TDS_VERSION    1300
      60             : #define SQL_INFO_FREETDS_SOCKET 1301
      61             : 
      62             : #ifndef SQL_MARS_ENABLED_NO
      63             : #define SQL_MARS_ENABLED_NO     0
      64             : #endif
      65             : 
      66             : #ifndef SQL_MARS_ENABLED_YES
      67             : #define SQL_MARS_ENABLED_YES    1
      68             : #endif
      69             : 
      70             : #ifndef SQL_SS_VARIANT
      71             : #define SQL_SS_VARIANT  (-150)
      72             : #endif
      73             : 
      74             : #ifndef SQL_SS_UDT
      75             : #define SQL_SS_UDT      (-151)
      76             : #endif
      77             : 
      78             : #ifndef SQL_SS_XML
      79             : #define SQL_SS_XML      (-152)
      80             : #endif
      81             : 
      82             : #ifndef SQL_SS_TABLE
      83             : #define SQL_SS_TABLE    (-153)
      84             : #endif
      85             : 
      86             : #ifndef SQL_SS_TIME2
      87             : #define SQL_SS_TIME2    (-154)
      88             : #endif
      89             : 
      90             : #ifndef SQL_SS_TIMESTAMPOFFSET
      91             : #define SQL_SS_TIMESTAMPOFFSET  (-155)
      92             : #endif
      93             : 
      94             : /*
      95             :  * these types are used from conversion from client to server
      96             :  */
      97             : #ifndef SQL_C_SS_TIME2
      98             : #define SQL_C_SS_TIME2  (0x4000)
      99             : #endif
     100             : 
     101             : #ifndef SQL_C_SS_TIMESTAMPOFFSET
     102             : #define SQL_C_SS_TIMESTAMPOFFSET        (0x4001)
     103             : #endif
     104             : 
     105             : #ifndef SQL_CA_SS_BASE
     106             : #define SQL_CA_SS_BASE 1200
     107             : #endif
     108             : 
     109             : #ifndef SQL_CA_SS_UDT_CATALOG_NAME
     110             : #define SQL_CA_SS_UDT_CATALOG_NAME      (SQL_CA_SS_BASE+18)
     111             : #endif
     112             : 
     113             : #ifndef SQL_CA_SS_UDT_SCHEMA_NAME
     114             : #define SQL_CA_SS_UDT_SCHEMA_NAME       (SQL_CA_SS_BASE+19)
     115             : #endif
     116             : 
     117             : #ifndef SQL_CA_SS_UDT_TYPE_NAME
     118             : #define SQL_CA_SS_UDT_TYPE_NAME (SQL_CA_SS_BASE+20)
     119             : #endif
     120             : 
     121             : #ifndef SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME
     122             : #define SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME        (SQL_CA_SS_BASE+21)
     123             : #endif
     124             : 
     125             : #ifndef SQL_CA_SS_XML_SCHEMACOLLECTION_CATALOG_NAME
     126             : #define SQL_CA_SS_XML_SCHEMACOLLECTION_CATALOG_NAME     (SQL_CA_SS_BASE+22)
     127             : #endif
     128             : 
     129             : #ifndef SQL_CA_SS_XML_SCHEMACOLLECTION_SCHEMA_NAME
     130             : #define SQL_CA_SS_XML_SCHEMACOLLECTION_SCHEMA_NAME      (SQL_CA_SS_BASE+23)
     131             : #endif
     132             : 
     133             : #ifndef SQL_CA_SS_XML_SCHEMACOLLECTION_NAME
     134             : #define SQL_CA_SS_XML_SCHEMACOLLECTION_NAME     (SQL_CA_SS_BASE+24)
     135             : #endif
     136             : 
     137             : typedef struct tagSS_TIME2_STRUCT {
     138             :         SQLUSMALLINT hour;
     139             :         SQLUSMALLINT minute;
     140             :         SQLUSMALLINT second;
     141             :         SQLUINTEGER fraction;
     142             : } SQL_SS_TIME2_STRUCT;
     143             : 
     144             : typedef struct tagSS_TIMESTAMPOFFSET_STRUCT {
     145             :         SQLSMALLINT year;
     146             :         SQLUSMALLINT month;
     147             :         SQLUSMALLINT day;
     148             :         SQLUSMALLINT hour;
     149             :         SQLUSMALLINT minute;
     150             :         SQLUSMALLINT second;
     151             :         SQLUINTEGER fraction;
     152             :         SQLSMALLINT timezone_hour;
     153             :         SQLSMALLINT timezone_minute;
     154             : } SQL_SS_TIMESTAMPOFFSET_STRUCT;
     155             : 
     156             : #define SQL_COPT_TDSODBC_IMPL_BASE      1500
     157             : /* note: values +0 to +8 allocated to TDSODBC_BCP options below */
     158             : #define SQL_COPT_TDSODBC_DATETIME_FORMAT (SQL_COPT_TDSODBC_IMPL_BASE+9)
     159             : #define SQL_COPT_TDSODBC_DATE_FORMAT (SQL_COPT_TDSODBC_IMPL_BASE+10)
     160             : #define SQL_COPT_TDSODBC_TIME_FORMAT (SQL_COPT_TDSODBC_IMPL_BASE+11)
     161             : 
     162             : #ifdef TDSODBC_BCP
     163             : 
     164             : #ifndef SUCCEED
     165             : #define SUCCEED 1
     166             : #endif
     167             : #ifndef FAIL
     168             : #define FAIL 0
     169             : #endif
     170             : 
     171             : #ifndef BCPKEEPIDENTITY
     172             : #define BCPKEEPIDENTITY 8
     173             : #endif
     174             : #ifndef BCPHINTSA
     175             : #define BCPHINTSA 10
     176             : #endif
     177             : #ifndef BCPHINTSW
     178             : #define BCPHINTSW 11
     179             : #endif
     180             : 
     181             : #define BCP_DIRECTION_IN 1
     182             : 
     183             : #define SQL_COPT_SS_BCP (SQL_COPT_SS_BASE+19)
     184             : #define SQL_BCP_OFF 0
     185             : #define SQL_BCP_ON 1
     186             : 
     187             : #define SQL_COPT_TDSODBC_IMPL_BCP_INITA (SQL_COPT_TDSODBC_IMPL_BASE)
     188             : /* deprecated SQL_COPT_TDSODBC_IMPL_BCP_CONTROL */
     189             : #define SQL_COPT_TDSODBC_IMPL_BCP_COLPTR        (SQL_COPT_TDSODBC_IMPL_BASE+2)
     190             : #define SQL_COPT_TDSODBC_IMPL_BCP_SENDROW       (SQL_COPT_TDSODBC_IMPL_BASE+3)
     191             : #define SQL_COPT_TDSODBC_IMPL_BCP_BATCH (SQL_COPT_TDSODBC_IMPL_BASE+4)
     192             : #define SQL_COPT_TDSODBC_IMPL_BCP_DONE  (SQL_COPT_TDSODBC_IMPL_BASE+5)
     193             : #define SQL_COPT_TDSODBC_IMPL_BCP_BIND  (SQL_COPT_TDSODBC_IMPL_BASE+6)
     194             : #define SQL_COPT_TDSODBC_IMPL_BCP_INITW (SQL_COPT_TDSODBC_IMPL_BASE+7)
     195             : #define SQL_COPT_TDSODBC_IMPL_BCP_CONTROL       (SQL_COPT_TDSODBC_IMPL_BASE+8)
     196             : 
     197             : #define SQL_VARLEN_DATA -10
     198             : 
     199             : /* copied from sybdb.h which was copied from tds.h */
     200             : /* TODO find a much better way... */
     201             : enum
     202             : {
     203             :         BCP_TYPE_SQLCHAR = 47,          /* 0x2F */
     204             : #define BCP_TYPE_SQLCHAR        BCP_TYPE_SQLCHAR
     205             :         BCP_TYPE_SQLVARCHAR = 39,       /* 0x27 */
     206             : #define BCP_TYPE_SQLVARCHAR     BCP_TYPE_SQLVARCHAR
     207             :         BCP_TYPE_SQLINTN = 38,          /* 0x26 */
     208             : #define BCP_TYPE_SQLINTN        BCP_TYPE_SQLINTN
     209             :         BCP_TYPE_SQLINT1 = 48,          /* 0x30 */
     210             : #define BCP_TYPE_SQLINT1        BCP_TYPE_SQLINT1
     211             :         BCP_TYPE_SQLINT2 = 52,          /* 0x34 */
     212             : #define BCP_TYPE_SQLINT2        BCP_TYPE_SQLINT2
     213             :         BCP_TYPE_SQLINT4 = 56,          /* 0x38 */
     214             : #define BCP_TYPE_SQLINT4        BCP_TYPE_SQLINT4
     215             :         BCP_TYPE_SQLINT8 = 127,         /* 0x7F */
     216             : #define BCP_TYPE_SQLINT8        BCP_TYPE_SQLINT8
     217             :         BCP_TYPE_SQLFLT8 = 62,          /* 0x3E */
     218             : #define BCP_TYPE_SQLFLT8        BCP_TYPE_SQLFLT8
     219             :         BCP_TYPE_SQLDATETIME = 61,      /* 0x3D */
     220             : #define BCP_TYPE_SQLDATETIME    BCP_TYPE_SQLDATETIME
     221             :         BCP_TYPE_SQLBIT = 50,           /* 0x32 */
     222             : #define BCP_TYPE_SQLBIT BCP_TYPE_SQLBIT
     223             :         BCP_TYPE_SQLBITN = 104,         /* 0x68 */
     224             : #define BCP_TYPE_SQLBITN        BCP_TYPE_SQLBITN
     225             :         BCP_TYPE_SQLTEXT = 35,          /* 0x23 */
     226             : #define BCP_TYPE_SQLTEXT        BCP_TYPE_SQLTEXT
     227             :         BCP_TYPE_SQLNTEXT = 99,         /* 0x63 */
     228             : #define BCP_TYPE_SQLNTEXT       BCP_TYPE_SQLNTEXT
     229             :         BCP_TYPE_SQLIMAGE = 34,         /* 0x22 */
     230             : #define BCP_TYPE_SQLIMAGE       BCP_TYPE_SQLIMAGE
     231             :         BCP_TYPE_SQLMONEY4 = 122,       /* 0x7A */
     232             : #define BCP_TYPE_SQLMONEY4      BCP_TYPE_SQLMONEY4
     233             :         BCP_TYPE_SQLMONEY = 60,         /* 0x3C */
     234             : #define BCP_TYPE_SQLMONEY       BCP_TYPE_SQLMONEY
     235             :         BCP_TYPE_SQLDATETIME4 = 58,     /* 0x3A */
     236             : #define BCP_TYPE_SQLDATETIME4   BCP_TYPE_SQLDATETIME4
     237             :         BCP_TYPE_SQLREAL = 59,          /* 0x3B */
     238             :         BCP_TYPE_SQLFLT4 = 59,          /* 0x3B */
     239             : #define BCP_TYPE_SQLREAL        BCP_TYPE_SQLREAL
     240             : #define BCP_TYPE_SQLFLT4        BCP_TYPE_SQLFLT4
     241             :         BCP_TYPE_SQLBINARY = 45,                /* 0x2D */
     242             : #define BCP_TYPE_SQLBINARY      BCP_TYPE_SQLBINARY
     243             :         BCP_TYPE_SQLVOID = 31,          /* 0x1F */
     244             : #define BCP_TYPE_SQLVOID        BCP_TYPE_SQLVOID
     245             :         BCP_TYPE_SQLVARBINARY = 37,     /* 0x25 */
     246             : #define BCP_TYPE_SQLVARBINARY   BCP_TYPE_SQLVARBINARY
     247             :         BCP_TYPE_SQLNUMERIC = 108,      /* 0x6C */
     248             : #define BCP_TYPE_SQLNUMERIC     BCP_TYPE_SQLNUMERIC
     249             :         BCP_TYPE_SQLDECIMAL = 106,      /* 0x6A */
     250             : #define BCP_TYPE_SQLDECIMAL     BCP_TYPE_SQLDECIMAL
     251             :         BCP_TYPE_SQLFLTN = 109,         /* 0x6D */
     252             : #define BCP_TYPE_SQLFLTN        BCP_TYPE_SQLFLTN
     253             :         BCP_TYPE_SQLMONEYN = 110,       /* 0x6E */
     254             : #define BCP_TYPE_SQLMONEYN      BCP_TYPE_SQLMONEYN
     255             :         BCP_TYPE_SQLDATETIMN = 111,     /* 0x6F */
     256             : #define BCP_TYPE_SQLDATETIMN    BCP_TYPE_SQLDATETIMN
     257             :         BCP_TYPE_SQLNVARCHAR = 103,     /* 0x67 */
     258             : #define BCP_TYPE_SQLNVARCHAR    BCP_TYPE_SQLNVARCHAR
     259             :         BCP_TYPE_SQLUNIQUEID = 36,      /* 0x24 */
     260             : #define BCP_TYPE_SQLUNIQUEID    BCP_TYPE_SQLUNIQUEID
     261             :         BCP_TYPE_SQLDATETIME2 = 42,    /* 0x2a */
     262             : #define BCP_TYPE_SQLDATETIME2   BCP_TYPE_SQLDATETIME2
     263             : };
     264             : 
     265             : typedef struct
     266             : {
     267             :         int dtdays;
     268             :         int dttime;
     269             : } DBDATETIME;
     270             : 
     271             : #if defined(__cplusplus) || (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L)
     272             : #define TDSODBC_INLINE inline
     273             : #elif defined(_MSC_VER)
     274             : #define TDSODBC_INLINE __inline
     275             : #else
     276             : #define TDSODBC_INLINE __inline__
     277             : #endif
     278             : 
     279             : struct tdsodbc_impl_bcp_init_params
     280             : {
     281             :         const void *tblname;
     282             :         const void *hfile;
     283             :         const void *errfile;
     284             :         int direction;
     285             : };
     286             : 
     287             : static TDSODBC_INLINE RETCODE SQL_API
     288             : bcp_initA(HDBC hdbc, const char *tblname, const char *hfile, const char *errfile, int direction)
     289             : {
     290          12 :         struct tdsodbc_impl_bcp_init_params params = {tblname, hfile, errfile, direction};
     291          12 :         return SQL_SUCCEEDED(SQLSetConnectAttr(hdbc, SQL_COPT_TDSODBC_IMPL_BCP_INITA, &params, SQL_IS_POINTER)) ? SUCCEED : FAIL;
     292             : }
     293             : 
     294             : static TDSODBC_INLINE RETCODE SQL_API
     295             : bcp_initW(HDBC hdbc, const SQLWCHAR *tblname, const SQLWCHAR *hfile, const SQLWCHAR *errfile, int direction)
     296             : {
     297          12 :         struct tdsodbc_impl_bcp_init_params params = {tblname, hfile, errfile, direction};
     298          12 :         return SQL_SUCCEEDED(SQLSetConnectAttr(hdbc, SQL_COPT_TDSODBC_IMPL_BCP_INITW, &params, SQL_IS_POINTER)) ? SUCCEED : FAIL;
     299             : }
     300             : 
     301             : struct tdsodbc_impl_bcp_control_params
     302             : {
     303             :         int field;
     304             :         void *value;
     305             : };
     306             : 
     307             : static TDSODBC_INLINE RETCODE SQL_API
     308             : bcp_control(HDBC hdbc, int field, void *value)
     309             : {
     310           4 :         struct tdsodbc_impl_bcp_control_params params = {field, value};
     311           4 :         return SQL_SUCCEEDED(SQLSetConnectAttr(hdbc, SQL_COPT_TDSODBC_IMPL_BCP_CONTROL, &params, SQL_IS_POINTER)) ? SUCCEED : FAIL;
     312             : }
     313             : 
     314             : struct tdsodbc_impl_bcp_colptr_params
     315             : {
     316             :         const unsigned char * colptr;
     317             :         int table_column;
     318             : };
     319             : 
     320             : static TDSODBC_INLINE RETCODE SQL_API
     321             : bcp_colptr(HDBC hdbc, const unsigned char * colptr, int table_column)
     322             : {
     323             :         struct tdsodbc_impl_bcp_colptr_params params = {colptr, table_column};
     324             :         return SQL_SUCCEEDED(SQLSetConnectAttr(hdbc, SQL_COPT_TDSODBC_IMPL_BCP_COLPTR, &params, SQL_IS_POINTER)) ? SUCCEED : FAIL;
     325             : }
     326             : 
     327             : static TDSODBC_INLINE RETCODE SQL_API
     328             : bcp_sendrow(HDBC hdbc)
     329             : {
     330         204 :         return SQL_SUCCEEDED(SQLSetConnectAttr(hdbc, SQL_COPT_TDSODBC_IMPL_BCP_SENDROW, NULL, SQL_IS_POINTER)) ? SUCCEED : FAIL;
     331             : }
     332             : 
     333             : struct tdsodbc_impl_bcp_batch_params
     334             : {
     335             :         int rows;
     336             : };
     337             : 
     338             : static TDSODBC_INLINE int SQL_API
     339          24 : bcp_batch(HDBC hdbc)
     340             : {
     341          24 :         struct tdsodbc_impl_bcp_batch_params params = {-1};
     342          24 :         return SQL_SUCCEEDED(SQLSetConnectAttr(hdbc, SQL_COPT_TDSODBC_IMPL_BCP_BATCH, &params, SQL_IS_POINTER)) ? params.rows : -1;
     343             : }
     344             : 
     345             : struct tdsodbc_impl_bcp_done_params
     346             : {
     347             :         int rows;
     348             : };
     349             : 
     350             : static TDSODBC_INLINE int SQL_API
     351          24 : bcp_done(HDBC hdbc)
     352             : {
     353          24 :         struct tdsodbc_impl_bcp_done_params params = {-1};
     354          24 :         return SQL_SUCCEEDED(SQLSetConnectAttr(hdbc, SQL_COPT_TDSODBC_IMPL_BCP_DONE, &params, SQL_IS_POINTER)) ? params.rows : -1;
     355             : }
     356             : 
     357             : struct tdsodbc_impl_bcp_bind_params
     358             : {
     359             :         const unsigned char * varaddr;
     360             :         int prefixlen;
     361             :         int varlen;
     362             :         const unsigned char * terminator;
     363             :         int termlen;
     364             :         int vartype;
     365             :         int table_column;
     366             : };
     367             : 
     368             : static TDSODBC_INLINE RETCODE SQL_API
     369             : bcp_bind(HDBC hdbc, const unsigned char * varaddr, int prefixlen, int varlen,
     370             :         const unsigned char * terminator, int termlen, int vartype, int table_column)
     371             : {
     372         612 :         struct tdsodbc_impl_bcp_bind_params params = {varaddr, prefixlen, varlen, terminator, termlen, vartype, table_column};
     373         612 :         return SQL_SUCCEEDED(SQLSetConnectAttr(hdbc, SQL_COPT_TDSODBC_IMPL_BCP_BIND, &params, SQL_IS_POINTER)) ? SUCCEED : FAIL;
     374             : }
     375             : 
     376             : #ifdef UNICODE
     377             : #define bcp_init bcp_initW
     378             : #define BCPHINTS BCPHINTSW
     379             : #else
     380             : #define bcp_init bcp_initA
     381             : #define BCPHINTS BCPHINTSA
     382             : #endif
     383             : 
     384             : #endif /* TDSODBC_BCP */
     385             : 
     386             : #ifdef __cplusplus
     387             : }
     388             : #endif
     389             : 
     390             : #endif /* _odbcss_h_ */

Generated by: LCOV version 1.13