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

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * tid.c
  4.  *   Functions for the built-in type tuple id
  5.  *
  6.  * Copyright (c) 1994, Regents of the University of California
  7.  *
  8.  *
  9.  * IDENTIFICATION
  10.  *   $Header: /usr/local/cvsroot/pgsql/src/backend/utils/adt/tid.c,v 1.6.2.1 1999/08/02 05:24:57 scrappy Exp $
  11.  *
  12.  * NOTES
  13.  *   input routine largely stolen from boxin().
  14.  *
  15.  *-------------------------------------------------------------------------
  16.  */
  17. #include "postgres.h"
  18. #include "utils/builtins.h"
  19. #define LDELIM '('
  20. #define RDELIM ')'
  21. #define DELIM ','
  22. #define NTIDARGS 2
  23. /* ----------------------------------------------------------------
  24.  * tidin
  25.  * ----------------------------------------------------------------
  26.  */
  27. ItemPointer
  28. tidin(char *str)
  29. {
  30. char    *p,
  31.    *coord[NTIDARGS];
  32. int i;
  33. ItemPointer result;
  34. BlockNumber blockNumber;
  35. OffsetNumber offsetNumber;
  36. if (str == NULL)
  37. return NULL;
  38. for (i = 0, p = str; *p && i < NTIDARGS && *p != RDELIM; p++)
  39. if (*p == DELIM || (*p == LDELIM && !i))
  40. coord[i++] = p + 1;
  41. if (i < NTIDARGS - 1)
  42. return NULL;
  43. blockNumber = (BlockNumber) atoi(coord[0]);
  44. offsetNumber = (OffsetNumber) atoi(coord[1]);
  45. result = (ItemPointer) palloc(sizeof(ItemPointerData));
  46. ItemPointerSet(result, blockNumber, offsetNumber);
  47. return result;
  48. }
  49. /* ----------------------------------------------------------------
  50.  * tidout
  51.  * ----------------------------------------------------------------
  52.  */
  53. char *
  54. tidout(ItemPointer itemPtr)
  55. {
  56. BlockNumber blockNumber;
  57. OffsetNumber offsetNumber;
  58. BlockId blockId;
  59. char buf[32];
  60. char    *str;
  61. blockId = &(itemPtr->ip_blkid);
  62. blockNumber = BlockIdGetBlockNumber(blockId);
  63. offsetNumber = itemPtr->ip_posid;
  64. sprintf(buf, "(%d,%d)", blockNumber, offsetNumber);
  65. str = (char *) palloc(strlen(buf) + 1);
  66. strcpy(str, buf);
  67. return str;
  68. }