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

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  *   FILE
  4.  * pgcursordb.cpp
  5.  *
  6.  *   DESCRIPTION
  7.  *      implementation of the PgCursor class.
  8.  *   PgCursor encapsulates a cursor interface to the backend
  9.  *
  10.  * Copyright (c) 1994, Regents of the University of California
  11.  *
  12.  * IDENTIFICATION
  13.  *   $Header: /usr/local/cvsroot/pgsql/src/interfaces/libpq++/pgcursordb.cc,v 1.4 1999/06/01 02:43:37 momjian Exp $
  14.  *
  15.  *-------------------------------------------------------------------------
  16.  */
  17.  
  18. #include "pgcursordb.h"
  19.  
  20. // ****************************************************************
  21. //
  22. // PgCursor Implementation
  23. //
  24. // ****************************************************************
  25. // Make a connection to the specified database with default environment
  26. // See PQconnectdb() for conninfo usage
  27. PgCursor::PgCursor(const char* conninfo, const char* cursor)
  28.    : PgTransaction(conninfo), pgCursor(cursor)
  29. {}
  30. // Do not make a connection to the backend -- just query
  31. // Connection should not be closed after the object destructs since some
  32. // other object is using the connection
  33. //PgCursor::PgCursor(const PgConnection& conn, const char* cursor)
  34. //   : PgTransaction(conn), pgCursor(cursor)
  35. //{}
  36. // Destructor: End the transaction block
  37. PgCursor::~PgCursor()
  38. {
  39. Close();
  40. }
  41. // ****************************************************************
  42. //
  43. // PgCursor: Cursor Interface Implementation
  44. //
  45. // ****************************************************************
  46. // Declare a cursor: name has already been supplied in the constructor
  47. int PgCursor::Declare(const string& query, int binary)
  48. {
  49. string cmd = "DECLARE " + pgCursor;
  50. if ( binary )
  51.      cmd += " BINARY";
  52. cmd += " CURSOR FOR " + query;
  53. return ExecCommandOk( cmd.c_str() );
  54. } // End Declare()
  55. // Fetch ALL tuples in given direction
  56. int PgCursor::Fetch(const char* dir)
  57. {
  58. return Fetch("ALL", dir);
  59. } // End Fetch()
  60. // Fetch specified amount of tuples in given direction
  61. int PgCursor::Fetch(unsigned num, const char* dir)
  62. {
  63. return Fetch( IntToString(num), dir );
  64. } // End Fetch()
  65. // Create and execute the actual fetch command with the given arguments
  66. int PgCursor::Fetch(const string& num, const string& dir)
  67. {
  68. string cmd = "FETCH " + dir + " " + num + " IN " + pgCursor;
  69. return ExecTuplesOk( cmd.c_str() );
  70. } // End Fetch()
  71. // Close the cursor: no more queries using the cursor should be allowed
  72. // Actually, the backend should take care of it.
  73. int PgCursor::Close()
  74. {
  75. string cmd = "CLOSE " + pgCursor;
  76. return ExecCommandOk( cmd.c_str() );
  77. } // End CloseCursor()