pglobject.cc
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  *   FILE
  4.  * pglobject.cc
  5.  *
  6.  *   DESCRIPTION
  7.  *      implementation of the PgLargeObject class.
  8.  *   PgLargeObject encapsulates a frontend to backend connection
  9.  *
  10.  * Copyright (c) 1994, Regents of the University of California
  11.  *
  12.  * IDENTIFICATION
  13.  *   $Header: /usr/local/cvsroot/pgsql/src/interfaces/libpq++/pglobject.cc,v 1.5 1999/05/30 15:17:58 tgl Exp $
  14.  *
  15.  *-------------------------------------------------------------------------
  16.  */
  17.  
  18. extern "C" {
  19. #include "libpq/libpq-fs.h"
  20. }
  21. #include "pglobject.h"
  22. // ****************************************************************
  23. //
  24. // PgLargeObject Implementation
  25. //
  26. // ****************************************************************
  27. // default constructor
  28. // creates a large object in the default database
  29. // See PQconnectdb() for conninfo usage
  30. PgLargeObject::PgLargeObject(const char* conninfo)
  31. : PgConnection(conninfo)
  32. {
  33.   Init();
  34.   Create();
  35.   Open();
  36. }
  37. // constructor
  38. // open an existing large object in the default database
  39. // See PQconnectdb() for conninfo usage
  40. PgLargeObject::PgLargeObject(Oid lobjId, const char* conninfo) 
  41. : PgConnection(conninfo)
  42. {
  43.   Init(lobjId);
  44.   if ( !pgObject ) {
  45. Create();
  46.   }
  47.   Open();
  48. }
  49. // destructor -- closes large object
  50. PgLargeObject::~PgLargeObject()
  51. {
  52.   Close();
  53. }
  54. // PgLargeObject::Init
  55. // Initialize the variables
  56. void PgLargeObject::Init(Oid lobjId)
  57. {
  58.   pgFd = -1;
  59.   pgObject = lobjId;
  60. }
  61. // PgLargeObject::create
  62. // create large object and check for errors
  63. void PgLargeObject::Create()
  64. {
  65.   // Create the object
  66.   pgObject = lo_creat(pgConn, INV_READ|INV_WRITE);
  67.   
  68.   // Check for possible errors
  69.   if (!pgObject)
  70. loStatus = "PgLargeObject: can't create large object" ;
  71.   else
  72. loStatus = "PgLargeObject: created large object" ;
  73. }
  74. // PgLargeObject::open
  75. // open large object and check for errors
  76. void PgLargeObject::Open()
  77. {
  78.   // Open the object
  79.   pgFd = lo_open(pgConn, pgObject, INV_READ|INV_WRITE);
  80.   
  81.   // Check for possible errors
  82.   string objStr( IntToString(pgObject) );
  83.   if (pgFd < 0)
  84.       loStatus = "PgLargeObject: can't open large object " + objStr ;
  85.   else
  86.       loStatus = "PgLargeObject: created and opened large object " + objStr ;
  87. }
  88. // PgLargeObject::unlink
  89. // destruct large object and delete from it from the database
  90. int PgLargeObject::Unlink()
  91. {
  92.   // Unlink the object
  93.   int temp = lo_unlink(pgConn, pgObject);
  94.   
  95.   // Initialize the large object upon success
  96.   if (!temp) {
  97.       Close();
  98.       Init();
  99.   }
  100.   
  101.   // Return the status
  102.   return temp;
  103. }
  104. void PgLargeObject::Close()
  105.   if (pgFd >= 0) lo_close(pgConn, pgFd); 
  106. }
  107. int PgLargeObject::Read(char* buf, int len)
  108.   return lo_read(pgConn, pgFd, buf, len); 
  109. }
  110. int PgLargeObject::Write(const char* buf, int len)
  111.   return lo_write(pgConn, pgFd, (char*)buf, len); 
  112. }
  113. int PgLargeObject::LSeek(int offset, int whence)
  114.   return lo_lseek(pgConn, pgFd, offset, whence); 
  115. }
  116. int PgLargeObject::Tell()
  117.   return lo_tell(pgConn, pgFd); 
  118. }
  119. Oid PgLargeObject::Import(const char* filename) 
  120.   return pgObject = lo_import(pgConn, (char*)filename); 
  121. }
  122. int PgLargeObject::Export(const char* filename) 
  123.   return lo_export(pgConn, pgObject, (char*)filename); 
  124. }
  125. string PgLargeObject::Status() 
  126.   return loStatus; 
  127. }