LTP GCOV extension - code coverage report
Current view: directory - ctlib/unittests - blk_in.c
Test: FreeTDS coverage
Date: 2009-01-08 Instrumented lines: 88
Code covered: 78.4 % Executed lines: 69

       1                 : #if HAVE_CONFIG_H
       2                 : #include <config.h>
       3                 : #endif /* HAVE_CONFIG_H */
       4                 : 
       5                 : #include <stdio.h>
       6                 : #include <assert.h>
       7                 : 
       8                 : #if HAVE_STDLIB_H
       9                 : #include <stdlib.h>
      10                 : #endif /* HAVE_STDLIB_H */
      11                 : 
      12                 : #if HAVE_SYS_STAT_H
      13                 : #include <sys/stat.h>
      14                 : #endif /* HAVE_SYS_STAT_H */
      15                 : 
      16                 : #if HAVE_STRING_H
      17                 : #include <string.h>
      18                 : #endif /* HAVE_STRING_H */
      19                 : 
      20                 : 
      21                 : #include <ctpublic.h>
      22                 : #include <bkpublic.h>
      23                 : #include "common.h"
      24                 : #include "blk_in.h"
      25                 : 
      26                 : static int
      27                 : do_bind(CS_BLKDESC * blkdesc, int colnum, CS_INT host_format, CS_INT host_type, CS_INT host_maxlen, 
      28                 :         void        *var_addr,
      29                 :         CS_INT      *var_len_addr,
      30                 :         CS_SMALLINT *var_ind_addr );
      31                 : 
      32                 : static char command[512];
      33                 : 
      34                 : /*
      35                 :  * Static data for insertion
      36                 :  */
      37                 : int  not_null_bit = 1;
      38                 : CS_INT      l_not_null_bit = 4;
      39                 : CS_SMALLINT i_not_null_bit = 0;
      40                 : 
      41                 : char not_null_char[] = "a char";
      42                 : CS_INT      l_not_null_char = 6;
      43                 : CS_SMALLINT i_not_null_char = 0;
      44                 : 
      45                 : char not_null_varchar[] = "a varchar";
      46                 : CS_INT      l_not_null_varchar = 9;
      47                 : CS_SMALLINT i_not_null_varchar = 0;
      48                 : 
      49                 : char not_null_datetime[]                = "Dec 17 2003  3:44PM";
      50                 : CS_INT      l_not_null_datetime = 19; 
      51                 : CS_SMALLINT i_not_null_datetime = 0;
      52                 : 
      53                 : char not_null_smalldatetime[]   = "Dec 17 2003  3:44PM";
      54                 : CS_INT      l_not_null_smalldatetime = 19;
      55                 : CS_SMALLINT i_not_null_smalldatetime = 0;
      56                 : 
      57                 : char not_null_money[] = "12.34";
      58                 : CS_INT      l_not_null_money = 5;
      59                 : CS_SMALLINT i_not_null_money = 0;
      60                 : 
      61                 : char not_null_smallmoney[] = "12.34";
      62                 : CS_INT      l_not_null_smallmoney = 5;
      63                 : CS_SMALLINT i_not_null_smallmoney = 0;
      64                 : 
      65                 : char not_null_float[] = "12.34";
      66                 : CS_INT      l_not_null_float = 5;
      67                 : CS_SMALLINT i_not_null_float = 0;
      68                 : 
      69                 : char not_null_real[] = "12.34";
      70                 : CS_INT      l_not_null_real = 5;
      71                 : CS_SMALLINT i_not_null_real = 0;
      72                 : 
      73                 : char not_null_decimal[] = "12.34";
      74                 : CS_INT      l_not_null_decimal = 5;
      75                 : CS_SMALLINT i_not_null_decimal = 0;
      76                 : 
      77                 : char not_null_numeric[] = "12.34";
      78                 : CS_INT      l_not_null_numeric = 5;
      79                 : CS_SMALLINT i_not_null_numeric = 0;
      80                 : 
      81                 : int  not_null_int        = 1234;
      82                 : CS_INT      l_not_null_int = 4;
      83                 : CS_SMALLINT i_not_null_int = 0;
      84                 : 
      85                 : int  not_null_smallint   = 1234;
      86                 : CS_INT      l_not_null_smallint = 4;
      87                 : CS_SMALLINT i_not_null_smallint = 0;
      88                 : 
      89                 : int  not_null_tinyint    = 123;
      90                 : CS_INT      l_not_null_tinyint = 4;
      91                 : CS_SMALLINT i_not_null_tinyint = 0;
      92                 : 
      93                 : CS_INT      l_null_char = 0;
      94                 : CS_SMALLINT i_null_char = -1;
      95                 : 
      96                 : CS_INT      l_null_varchar = 0;
      97                 : CS_SMALLINT i_null_varchar = -1;
      98                 : 
      99                 : CS_INT      l_null_datetime = 0;
     100                 : CS_SMALLINT i_null_datetime = -1;
     101                 : 
     102                 : CS_INT      l_null_smalldatetime = 0;
     103                 : CS_SMALLINT i_null_smalldatetime = -1;
     104                 : 
     105                 : CS_INT      l_null_money = 0;
     106                 : CS_SMALLINT i_null_money = -1;
     107                 : 
     108                 : CS_INT      l_null_smallmoney = 0;
     109                 : CS_SMALLINT i_null_smallmoney = -1;
     110                 : 
     111                 : CS_INT      l_null_float = 0;
     112                 : CS_SMALLINT i_null_float = -1;
     113                 : 
     114                 : CS_INT      l_null_real = 0;
     115                 : CS_SMALLINT i_null_real = -1;
     116                 : 
     117                 : CS_INT      l_null_decimal = 0;
     118                 : CS_SMALLINT i_null_decimal = -1;
     119                 : 
     120                 : CS_INT      l_null_numeric = 0;
     121                 : CS_SMALLINT i_null_numeric = -1;
     122                 : 
     123                 : CS_INT      l_null_int = 0;
     124                 : CS_SMALLINT i_null_int = -1;
     125                 : 
     126                 : CS_INT      l_null_smallint = 0;
     127                 : CS_SMALLINT i_null_smallint = -1;
     128                 : 
     129                 : CS_INT      l_null_tinyint = 0;
     130                 : CS_SMALLINT i_null_tinyint = -1;
     131                 : 
     132                 : static void
     133                 : do_binds(CS_BLKDESC * blkdesc)
     134               2 : {
     135                 :         enum { prefixlen = 0 };
     136                 :         enum { termlen = 0 };
     137                 :         enum NullValue { IsNull, IsNotNull };
     138                 : 
     139                 :         CS_RETCODE ret;
     140                 : 
     141                 :         /* non nulls */
     142                 : 
     143               2 :         ret = do_bind(blkdesc, 1, CS_FMT_UNUSED,   CS_INT_TYPE,   4,  &not_null_bit, &l_not_null_bit, &i_not_null_bit); 
     144               2 :         ret = do_bind(blkdesc, 2, CS_FMT_NULLTERM, CS_CHAR_TYPE,  7,  not_null_char, &l_not_null_char, &i_not_null_char); 
     145               2 :         ret = do_bind(blkdesc, 3, CS_FMT_NULLTERM, CS_CHAR_TYPE,  10, not_null_varchar, &l_not_null_varchar, &i_not_null_varchar); 
     146               2 :         ret = do_bind(blkdesc, 4, CS_FMT_NULLTERM, CS_CHAR_TYPE,  20, not_null_datetime, &l_not_null_datetime, &i_not_null_datetime); 
     147               2 :         ret = do_bind(blkdesc, 5, CS_FMT_NULLTERM, CS_CHAR_TYPE,  20, not_null_smalldatetime, &l_not_null_smalldatetime, &i_not_null_smalldatetime); 
     148               2 :         ret = do_bind(blkdesc, 6, CS_FMT_NULLTERM, CS_CHAR_TYPE,  6,  not_null_money, &l_not_null_money, &i_not_null_money); 
     149               2 :         ret = do_bind(blkdesc, 7, CS_FMT_NULLTERM, CS_CHAR_TYPE,  6,  not_null_smallmoney, &l_not_null_smallmoney, &i_not_null_smallmoney); 
     150               2 :         ret = do_bind(blkdesc, 8, CS_FMT_NULLTERM, CS_CHAR_TYPE,  6,  not_null_float, &l_not_null_float, &i_not_null_float); 
     151               2 :         ret = do_bind(blkdesc, 9, CS_FMT_NULLTERM, CS_CHAR_TYPE,  6,  not_null_real, &l_not_null_real, &i_not_null_real); 
     152               2 :         ret = do_bind(blkdesc, 10, CS_FMT_NULLTERM, CS_CHAR_TYPE, 6,  not_null_decimal, &l_not_null_decimal, &i_not_null_decimal); 
     153               2 :         ret = do_bind(blkdesc, 11, CS_FMT_NULLTERM, CS_CHAR_TYPE, 6,  not_null_numeric, &l_not_null_numeric, &i_not_null_numeric); 
     154               2 :         ret = do_bind(blkdesc, 12, CS_FMT_UNUSED,   CS_INT_TYPE,  4,  &not_null_int, &l_not_null_int, &i_not_null_int); 
     155               2 :         ret = do_bind(blkdesc, 13, CS_FMT_UNUSED,   CS_INT_TYPE,  4,  &not_null_smallint, &l_not_null_smallint, &i_not_null_smallint); 
     156               2 :         ret = do_bind(blkdesc, 14, CS_FMT_UNUSED,   CS_INT_TYPE,  4,  &not_null_tinyint, &l_not_null_tinyint, &i_not_null_tinyint); 
     157                 : 
     158                 :         /* nulls */
     159                 : 
     160               2 :         ret = do_bind(blkdesc, 15, CS_FMT_NULLTERM, CS_CHAR_TYPE, 7,  not_null_char, &l_null_char, &i_null_char); 
     161               2 :         ret = do_bind(blkdesc, 16, CS_FMT_NULLTERM, CS_CHAR_TYPE, 10, not_null_varchar, &l_null_varchar, &i_null_varchar); 
     162               2 :         ret = do_bind(blkdesc, 17, CS_FMT_NULLTERM, CS_CHAR_TYPE, 20, not_null_datetime, &l_null_datetime, &i_null_datetime); 
     163               2 :         ret = do_bind(blkdesc, 18, CS_FMT_NULLTERM, CS_CHAR_TYPE, 20, not_null_smalldatetime, &l_null_smalldatetime, &i_null_smalldatetime); 
     164               2 :         ret = do_bind(blkdesc, 19, CS_FMT_NULLTERM, CS_CHAR_TYPE, 6, not_null_money, &l_null_money, &i_null_money); 
     165               2 :         ret = do_bind(blkdesc, 20, CS_FMT_NULLTERM, CS_CHAR_TYPE, 6, not_null_smallmoney, &l_null_smallmoney, &i_null_smallmoney); 
     166               2 :         ret = do_bind(blkdesc, 21, CS_FMT_NULLTERM, CS_CHAR_TYPE, 6, not_null_float, &l_null_float, &i_null_float); 
     167               2 :         ret = do_bind(blkdesc, 22, CS_FMT_NULLTERM, CS_CHAR_TYPE, 6, not_null_real, &l_null_real, &i_null_real); 
     168               2 :         ret = do_bind(blkdesc, 23, CS_FMT_NULLTERM, CS_CHAR_TYPE, 6, not_null_decimal, &l_null_decimal, &i_null_decimal); 
     169               2 :         ret = do_bind(blkdesc, 24, CS_FMT_NULLTERM, CS_CHAR_TYPE, 6, not_null_numeric, &l_null_numeric, &i_null_numeric); 
     170               2 :         ret = do_bind(blkdesc, 25, CS_FMT_UNUSED,   CS_INT_TYPE,  4,  &not_null_int, &l_null_int, &i_null_int); 
     171               2 :         ret = do_bind(blkdesc, 26, CS_FMT_UNUSED,   CS_INT_TYPE,  4,  &not_null_smallint, &l_null_smallint, &i_null_smallint); 
     172               2 :         ret = do_bind(blkdesc, 27, CS_FMT_UNUSED,   CS_INT_TYPE,  4,  &not_null_tinyint, &l_null_tinyint, &i_null_tinyint); 
     173                 : 
     174               2 : }
     175                 : 
     176                 : static int
     177                 : do_bind(CS_BLKDESC * blkdesc, int colnum, CS_INT host_format, CS_INT host_type, CS_INT host_maxlen, 
     178                 :         void        *var_addr,
     179                 :         CS_INT      *var_len_addr,
     180                 :         CS_SMALLINT *var_ind_addr )
     181              54 : {
     182                 :         CS_DATAFMT datafmt;
     183                 :         CS_RETCODE ret;
     184                 : 
     185              54 :         ret = blk_describe(blkdesc, colnum, &datafmt);
     186              54 :         if (ret != CS_SUCCEED) {
     187               0 :                 fprintf(stderr, "blk_describe(%d) failed", colnum);
     188               0 :                 return CS_FAIL;
     189                 :         }
     190                 : 
     191              54 :         datafmt.format = host_format;
     192              54 :         datafmt.datatype = host_type;
     193              54 :         datafmt.maxlength = host_maxlen;
     194              54 :         datafmt.count = 1;
     195                 : 
     196              54 :         ret = blk_bind(blkdesc, colnum, &datafmt, var_addr, var_len_addr, var_ind_addr );
     197              54 :         if (ret != CS_SUCCEED) {
     198               0 :                 fprintf(stderr, "blk_bind() failed\n");
     199               0 :                 return CS_FAIL;
     200                 :         }
     201              54 :         return CS_SUCCEED;
     202                 : }
     203                 : 
     204                 : 
     205                 : int
     206                 : main(int argc, char **argv)
     207               2 : {
     208                 :         CS_CONTEXT *ctx;
     209                 :         CS_CONNECTION *conn;
     210                 :         CS_COMMAND *cmd;
     211                 :         CS_BLKDESC *blkdesc;
     212               2 :         int verbose = 0;
     213               2 :         int count = 0;
     214               2 :         int ret = 0;
     215                 :         int i;
     216                 : 
     217               2 :         const char *table_name = "all_types_bcp_unittest";
     218                 : 
     219               2 :         fprintf(stdout, "%s: Retrieve data using array binding \n", __FILE__);
     220               2 :         if (verbose) {
     221               0 :                 fprintf(stdout, "Trying login\n");
     222                 :         }
     223               2 :         ret = try_ctlogin(&ctx, &conn, &cmd, verbose);
     224               2 :         if (ret != CS_SUCCEED) {
     225               0 :                 fprintf(stderr, "Login failed\n");
     226               0 :                 return 1;
     227                 :         }
     228                 : 
     229               2 :         sprintf(command,"if exists (select 1 from sysobjects where type = 'U' and name = '%s') drop table %s", 
     230                 :                     table_name, table_name);
     231                 : 
     232               2 :         ret = run_command(cmd, command);
     233               2 :         if (ret != CS_SUCCEED)
     234               0 :                 return 1;
     235                 : 
     236               2 :         ret = run_command(cmd, create_table_sql);
     237               2 :         if (ret != CS_SUCCEED)
     238               0 :                 return 1;
     239                 : 
     240               2 :         ret = blk_alloc(conn, BLK_VERSION_100, &blkdesc);
     241               2 :         if (ret != CS_SUCCEED) {
     242               0 :                 fprintf(stderr, "blk_alloc() failed\n");
     243               0 :                 return 1;
     244                 :         }
     245                 : 
     246               2 :         ret = blk_init(blkdesc, CS_BLK_IN, (char *) table_name, CS_NULLTERM );
     247                 : 
     248               2 :         if (ret != CS_SUCCEED) {
     249               0 :                 fprintf(stderr, "blk_init() failed\n");
     250               0 :                 return 1;
     251                 :         }
     252                 : 
     253               2 :         do_binds(blkdesc);
     254                 : 
     255               2 :         fprintf(stdout, "Sending same row 10 times... \n");
     256              22 :         for (i=0; i<10; i++) {
     257              20 :                 if((ret = blk_rowxfer(blkdesc)) != CS_SUCCEED) {
     258               0 :                         fprintf(stderr, "blk_rowxfer() failed\n");
     259               0 :                         return 1;
     260                 :                 }
     261                 :         }
     262                 : 
     263               2 :         ret = blk_done(blkdesc, CS_BLK_ALL, &count);
     264               2 :         if (ret != CS_SUCCEED) {
     265               0 :                 fprintf(stderr, "blk_done() failed\n");
     266               0 :                 return 1;
     267                 :         }
     268                 : 
     269               2 :         blk_drop(blkdesc);
     270                 : 
     271               2 :         printf("%d rows copied.\n", count);
     272                 : 
     273               2 :         printf("done\n");
     274                 : 
     275               2 :         ret = try_ctlogout(ctx, conn, cmd, verbose);
     276               2 :         if (ret != CS_SUCCEED) {
     277               0 :                 fprintf(stderr, "Logout failed\n");
     278               0 :                 return 1;
     279                 :         }
     280                 : 
     281               2 :         return 0;
     282                 : }

Generated by: LTP GCOV extension version 1.6