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

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * inv_api.c
  4.  *   routines for manipulating inversion fs large objects. This file
  5.  *   contains the user-level large object application interface routines.
  6.  *
  7.  * Copyright (c) 1994, Regents of the University of California
  8.  *
  9.  *
  10.  * IDENTIFICATION
  11.  *   $Header: /usr/local/cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.53 1999/05/25 16:11:15 momjian Exp $
  12.  *
  13.  *-------------------------------------------------------------------------
  14.  */
  15. #include <sys/types.h>
  16. #include <stdio.h> /* for sprintf() */
  17. #include <string.h>
  18. #include <sys/file.h>
  19. #include <sys/stat.h>
  20. #include "postgres.h"
  21. #include "access/genam.h"
  22. #include "access/heapam.h"
  23. #include "access/relscan.h"
  24. #include "access/tupdesc.h"
  25. #include "access/transam.h"
  26. #include "access/xact.h"
  27. #include "access/nbtree.h"
  28. #include "access/tupdesc.h"
  29. #include "catalog/catalog.h" /* for newoid() */
  30. #include "catalog/heap.h"
  31. #include "catalog/index.h" /* for index_create() */
  32. #include "catalog/pg_am.h" /* for BTREE_AM_OID */
  33. #include "catalog/pg_type.h" /* for INT4OID */
  34. #include "catalog/pg_opclass.h" /* for INT4_OPS_OID */
  35. #include "fmgr.h"
  36. #include "libpq/libpq-fs.h"
  37. #include "miscadmin.h"
  38. #include "nodes/pg_list.h"
  39. #include "storage/itemptr.h"
  40. #include "storage/bufpage.h"
  41. #include "storage/bufmgr.h"
  42. #include "storage/large_object.h"
  43. #include "storage/lmgr.h"
  44. #include "storage/smgr.h"
  45. #include "utils/builtins.h" /* for namestrcpy() */
  46. #include "utils/rel.h"
  47. #include "utils/relcache.h"
  48. /*
  49.  * Warning, Will Robinson...  In order to pack data into an inversion
  50.  * file as densely as possible, we violate the class abstraction here.
  51.  * When we're appending a new tuple to the end of the table, we check
  52.  * the last page to see how much data we can put on it.  If it's more
  53.  * than IMINBLK, we write enough to fill the page.  This limits external
  54.  * fragmentation. In no case can we write more than IMAXBLK, since
  55.  * the 8K postgres page size less overhead leaves only this much space
  56.  * for data.
  57.  */
  58. /*
  59.  * In order to prevent buffer leak on transaction commit, large object
  60.  * scan index handling has been modified. Indexes are persistant inside
  61.  * a transaction but may be closed between two calls to this API (when
  62.  * transaction is committed while object is opened, or when no
  63.  * transaction is active). Scan indexes are thus now reinitialized using
  64.  * the object current offset. [PA]
  65.  *
  66.  * Some cleanup has been also done for non freed memory.
  67.  *
  68.  * For subsequent notes, [PA] is Pascal Andr