home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / DBObject.cp < prev    next >
Text File  |  1996-05-31  |  4KB  |  186 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        : @(#)DBObject.cp    1.1
  17.  *    Original date    : 10-3-1993 / 30-11-1995
  18.  *    Description    : Sybase Base Class for all Database Classes
  19.  *              uses RogueWave class library
  20.  *
  21.  *---------------------------------------------------------------------------
  22.  */
  23. static const char SccsId[]="@(#)DBObject.cp    1.1\t06 Feb 1996 Copyright 1995 Cadre Technologies Inc.";
  24.  
  25. EXEC SQL INCLUDE SQLCA;
  26.  
  27. #ifdef WIN32
  28. #    include "fstream.h"
  29. #else
  30. #    include "stream.h"
  31. #endif
  32. #include <string.h>
  33. #include <stdlib.h>
  34.  
  35. #ifndef DBOBJECT_HXX
  36. #include "DBObject.hxx"
  37. #endif
  38.  
  39. #ifndef SQLPRINT_HXX
  40. #include "SqlPrint.hxx"
  41. #endif
  42.  
  43. static unsigned hashInt(const int& i)
  44. {
  45.     return i;
  46. }
  47.  
  48. static unsigned hashName(const RWCString& s)
  49. {
  50.     return s.hash();
  51. }
  52.  
  53.  
  54. EXEC SQL WHENEVER SQLERROR CALL sqlprint();
  55. EXEC SQL WHENEVER SQLWARNING CALL sqlprint();
  56. EXEC SQL WHENEVER NOT FOUND CONTINUE;
  57.  
  58. DBObject::DBObject(const RWCString &name) :
  59.     dbState(CREATED),
  60.     className(name)
  61. {
  62. }
  63.  
  64. DBObject::~DBObject()
  65. {
  66. }
  67.  
  68. int DBObject::connectDB(const char *name)
  69. {
  70.     // cast away const
  71.     char *_name = (char *)name;
  72.  
  73.     EXEC SQL BEGIN DECLARE SECTION;
  74.     char *dbName = _name;
  75.     char user[80];
  76.     char passwd[80];
  77.     char server[80];
  78.     EXEC SQL END DECLARE SECTION;
  79.  
  80.     EXEC SQL WHENEVER SQLERROR CALL sqlprint();
  81.  
  82.     char *p;
  83.  
  84. #ifdef WIN32
  85.     if (p = ::getenv("DBUSERNAME"))
  86.         strcpy(user, p);
  87.     else if (p = ::getenv("USERNAME"))
  88.         strcpy(user, p);
  89. #else /* !WIN32 */
  90.     if (p = ::getlogin())
  91.         strcpy(user, p);
  92. #endif /* !WIN32 */
  93.     else 
  94.         strcpy(user, "unknown");
  95.  
  96.     if (p = ::getenv("DBPASSWD"))
  97.         strcpy(passwd, p);
  98.     else {
  99.         char tmp[80];
  100.         strcpy(tmp, user);
  101.         strcpy(passwd, strcat(tmp, "_password"));
  102.     }
  103.  
  104.     if (p = ::getenv("DSQUERY"))
  105.         strcpy(server, p);
  106.     else
  107.         strcpy(server, "SYBASE");
  108.  
  109.     EXEC SQL CONNECT :user IDENTIFIED BY :passwd USING :server;
  110.     EXEC SQL USE :dbName;
  111.     EXEC SQL EXECUTE IMMEDIATE "SET CHAINED OFF";
  112.  
  113.     return sqlca.sqlcode != 0 ? -1 : 0;
  114. }
  115.  
  116. #if 0
  117.     //
  118.     // included as an example
  119.     //
  120.  
  121. int DBObject::disConnectDB()
  122. {
  123.     E*EC SQL DISCONNECT DEFAULT;
  124.     return sqlca.sqlcode != 0 ? -1 : 0;
  125. }
  126. #endif /* 0 */
  127.  
  128. int DBObject::beginWork()
  129. {
  130.     // does not exist in in Sybase 10.0
  131.     //
  132.     // E*EC SQL BEGIN WORK;
  133.     // return sqlca.sqlcode != 0 ? -1 : 0;
  134.     return 0;
  135. }
  136.  
  137. int DBObject::commit()
  138. {
  139.     EXEC SQL COMMIT WORK;
  140.     return sqlca.sqlcode != 0 ? -1 : 0;
  141. }
  142.  
  143. int DBObject::rollback()
  144. {
  145.     EXEC SQL ROLLBACK WORK;
  146.     return sqlca.sqlcode != 0 ? -1 : 0;
  147. }
  148.  
  149. int DBObject::notFound()
  150. {
  151.     return dbState == SQL_ERROR && sqlca.sqlcode == 100;
  152. }
  153.  
  154. void DBObject::resetState()
  155. {
  156.     dbState = CREATED;
  157. }
  158.  
  159. int DBObject::processSqlStatus()
  160. {
  161.     switch (dbState) {
  162.     case CREATED:
  163.     case NORMAL:
  164.         if (sqlca.sqlcode != 0) {
  165.             dbState = SQL_ERROR;
  166.             return -1;
  167.         } else {
  168.             dbState = NORMAL;
  169.             return 0;
  170.         }
  171.     case SQL_ERROR:
  172.     case TYPE_ERROR:
  173.         return -1;
  174.     }
  175.     return -1;
  176. }
  177.  
  178. void DBObject::stripTrailingSpaces(char *str)
  179. {
  180.     register char *ptr = &(str[strlen(str) - 1]);
  181.  
  182.     while (*ptr == ' ')
  183.         *ptr-- = '\0';
  184. }
  185.  
  186.