home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / Sybase.cxx < prev    next >
C/C++ Source or Header  |  1996-05-31  |  4KB  |  143 lines

  1. /*---------------------------------------------------------------------------
  2.  *
  3.  * Copyright (c) 1995 Cadre Technologies Inc.
  4.  *
  5.  * This software is furnished under a license and may be used only in
  6.  * accordance with the terms of such license and with the inclusion of
  7.  * the above copyright notice. This software or any other copies thereof
  8.  * may not be provided or otherwise made available to any other person.
  9.  * No title to and ownership of the software is hereby transferred.
  10.  *
  11.  * The information in this software is subject to change without notice
  12.  * and should not be construed as a commitment by Cadre Technologies Inc.
  13.  *
  14.  *---------------------------------------------------------------------------
  15.  *
  16.  *    File        : @(#)Sybase.cxx    1.2
  17.  *    Original date    : Mon Dec  4 11:11:19 MET 1995
  18.  *    Description    : Sybase specific functions
  19.  *              uses RogueWave class library
  20.  *
  21.  *---------------------------------------------------------------------------
  22.  */
  23. static const char SccsId[]="@(#)Sybase.cxx    1.2\t07 Feb 1996 Copyright 1995 Cadre Technologies Inc.";
  24.  
  25. #define MAX_CHAR_BUF 1024
  26.  
  27. #include <string.h>
  28. #include <ctpublic.h>
  29.  
  30. #ifndef __RWCSTRING_H__
  31. #include "rw/cstring.h"
  32. #endif
  33.  
  34. // taken from example $SYBASE/sample/ctlibrary/exutils.c, ex_display_column()
  35. //
  36. RWCString sybConvert(CS_VOID *data, CS_INT dataType, int isStrType, CS_INT dataLength, CS_SMALLINT indicator)
  37. {
  38.     if (indicator == CS_NULLDATA)
  39.     return "NULL";
  40.  
  41.     CS_CONTEXT *ctx;
  42.     if (cs_ctx_global(CS_VERSION_100, &ctx) != CS_SUCCEED) {
  43.     // error
  44.     //if (dataType == CS_CHAR_TYPE || dataType == CS_VARCHAR_TYPE)
  45.     if (isStrType)
  46.         return "''";
  47.     return "0";
  48.     }
  49.  
  50.     CS_BOOL res;
  51.     cs_will_convert(ctx, dataType, CS_CHAR_TYPE, &res);
  52.     if (res != CS_TRUE) {
  53.     // error
  54.     if (isStrType)
  55.         return "''";
  56.     return "0";
  57.     }
  58.  
  59.     CS_CHAR wbuf[MAX_CHAR_BUF];
  60.     CS_INT olen;
  61.     CS_DATAFMT fmt[2];
  62.     //
  63.     memset(&fmt[0], 0, sizeof(fmt[0]));
  64.     fmt[0].datatype = dataType;
  65.     fmt[0].maxlength = dataLength;
  66.     fmt[0].format = CS_FMT_UNUSED;
  67.     fmt[0].locale = NULL;
  68.     //
  69.     memset(&fmt[1], 0, sizeof(fmt[1]));
  70.     fmt[1].datatype = CS_CHAR_TYPE;
  71.     fmt[1].maxlength = MAX_CHAR_BUF;
  72.     fmt[1].format = CS_FMT_NULLTERM;
  73.     fmt[1].locale = NULL;
  74.  
  75.     if (cs_convert(ctx, &fmt[0], data, &fmt[1], wbuf, &olen) != CS_SUCCEED) {
  76.     // error
  77.     if (isStrType)
  78.         return "''";
  79.     return "0";
  80.     }
  81.  
  82.     if (isStrType) {
  83.     RWCString qStr = "";
  84.     --olen;
  85.     for (int i = 0; i < olen; ++i) {
  86.         if (wbuf[i] == '\'')
  87.         qStr += "'";
  88.         qStr += wbuf[i];
  89.     }
  90.     return "'" + qStr + "'";
  91.     }
  92.  
  93.     return RWCString(wbuf);
  94. }
  95.  
  96. char *sybTruncate(char *str)
  97. {
  98.     for (char *s = str + strlen(str) - 1; s >= str; --s) {
  99.     if (*s != ' ') {
  100.         *(s+1) = '\0';
  101.         return str;
  102.     }
  103.     }
  104.     return str;
  105. }
  106.  
  107. #if 0
  108.  
  109. void *sybNull(CS_INT dataType)
  110. {
  111.     switch (dataType) {
  112.     case CS_BINARY_TYPE:
  113.     case CS_VARBINARY_TYPE:
  114.     case CS_CHAR_TYPE:
  115.     case CS_VARCHAR_TYPE:
  116.     case CS_BOUNDARY_TYPE:
  117.     case CS_SENSITIVITY_TYPE:
  118.     case CS_TEXT_TYPE:
  119.     case CS_IMAGE_TYPE:
  120.         // empty array/string
  121.         return "";
  122.     case CS_DECIMAL_TYPE:
  123.     case CS_NUMERIC_TYPE:
  124.         // 0.0 (dflt scale and precision)
  125.         break;
  126.     case CS_DATETIME_TYPE:
  127.         // 8 * '\0'
  128.         break;
  129.     case CS_DATETIME4_TYPE:
  130.         // 4 * '\0'
  131.         break;
  132.     case CS_MONEY_TYPE:
  133.     case CS_MONEY4_TYPE:
  134.         // $0.0
  135.         break;
  136.     default:
  137.         // 0
  138.         break;
  139.     }
  140. }
  141.  
  142. #endif /* 0 */
  143.