be-fsstubs.c
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:12k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * be-fsstubs.c
  4.  *   support for filesystem operations on large objects
  5.  *
  6.  * Copyright (c) 1994, Regents of the University of California
  7.  *
  8.  *
  9.  * IDENTIFICATION
  10.  *   $Header: /usr/local/cvsroot/pgsql/src/backend/libpq/be-fsstubs.c,v 1.35 1999/06/04 21:13:38 tgl Exp $
  11.  *
  12.  * NOTES
  13.  *   This should be moved to a more appropriate place.  It is here
  14.  *   for lack of a better place.
  15.  *
  16.  *   Builtin functions for open/close/read/write operations on large objects.
  17.  *
  18.  *   These functions operate in a private GlobalMemoryContext, which means
  19.  *   that large object descriptors hang around until we destroy the context.
  20.  *   That happens in lo_commit().  It'd be possible to prolong the lifetime
  21.  *   of the context so that LO FDs are good across transactions (for example,
  22.  *   we could release the context only if we see that no FDs remain open).
  23.  *   But we'd need additional state in order to do the right thing at the
  24.  *   end of an aborted transaction.  FDs opened during an aborted xact would
  25.  *   still need to be closed, since they might not be pointing at valid
  26.  *   relations at all.  For now, we'll stick with the existing documented
  27.  *   semantics of LO FDs: they're only good within a transaction.
  28.  *
  29.  *-------------------------------------------------------------------------
  30.  */
  31. #include <fcntl.h>
  32. #include <sys/types.h>
  33. #include <sys/stat.h>
  34. #include <unistd.h>
  35. #include <string.h>
  36. #include <postgres.h>
  37. #include <lib/dllist.h>
  38. #include <libpq/libpq.h>
  39. #include <libpq/libpq-fs.h>
  40. #include <nodes/nodes.h>
  41. #include <utils/memutils.h>
  42. #include <lib/fstack.h>
  43. #include <utils/mcxt.h>
  44. #include <catalog/pg_shadow.h> /* for superuser() */
  45. #include <storage/fd.h> /* for O_ */
  46. #include <storage/large_object.h>
  47. #include <libpq/be-fsstubs.h>
  48. /* [PA] is Pascal Andr