93 lines
2.2 KiB
C
93 lines
2.2 KiB
C
|
/*-------------------------------------------------------------------------
|
||
|
*
|
||
|
* tid.c--
|
||
|
* Functions for the built-in type tuple id
|
||
|
*
|
||
|
* Copyright (c) 1994, Regents of the University of California
|
||
|
*
|
||
|
*
|
||
|
* IDENTIFICATION
|
||
|
* $Header: /cvsroot/pgsql/src/backend/utils/adt/tid.c,v 1.1.1.1 1996/07/09 06:22:05 scrappy Exp $
|
||
|
*
|
||
|
* NOTES
|
||
|
* input routine largely stolen from boxin().
|
||
|
*
|
||
|
*-------------------------------------------------------------------------
|
||
|
*/
|
||
|
#include <stdio.h> /* for sprintf() */
|
||
|
#include <string.h>
|
||
|
#include "postgres.h"
|
||
|
#include "storage/block.h"
|
||
|
#include "storage/off.h"
|
||
|
#include "storage/itemptr.h"
|
||
|
#include "storage/bufpage.h"
|
||
|
|
||
|
#include "utils/palloc.h"
|
||
|
#include "utils/builtins.h" /* where function declarations go */
|
||
|
|
||
|
|
||
|
#define LDELIM '('
|
||
|
#define RDELIM ')'
|
||
|
#define DELIM ','
|
||
|
#define NTIDARGS 2
|
||
|
|
||
|
/* ----------------------------------------------------------------
|
||
|
* tidin
|
||
|
* ----------------------------------------------------------------
|
||
|
*/
|
||
|
ItemPointer
|
||
|
tidin(char *str)
|
||
|
{
|
||
|
char *p, *coord[NTIDARGS];
|
||
|
int i;
|
||
|
ItemPointer result;
|
||
|
|
||
|
BlockNumber blockNumber;
|
||
|
OffsetNumber offsetNumber;
|
||
|
|
||
|
if (str == NULL)
|
||
|
return NULL;
|
||
|
|
||
|
for (i = 0, p = str; *p && i < NTIDARGS && *p != RDELIM; p++)
|
||
|
if (*p == DELIM || (*p == LDELIM && !i))
|
||
|
coord[i++] = p + 1;
|
||
|
|
||
|
if (i < NTIDARGS - 1)
|
||
|
return NULL;
|
||
|
|
||
|
blockNumber = (BlockNumber) atoi(coord[0]);
|
||
|
offsetNumber = (OffsetNumber) atoi(coord[1]);
|
||
|
|
||
|
result = (ItemPointer) palloc(sizeof(ItemPointerData));
|
||
|
|
||
|
ItemPointerSet(result, blockNumber, offsetNumber);
|
||
|
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
/* ----------------------------------------------------------------
|
||
|
* tidout
|
||
|
* ----------------------------------------------------------------
|
||
|
*/
|
||
|
char *
|
||
|
tidout(ItemPointer itemPtr)
|
||
|
{
|
||
|
BlockNumber blockNumber;
|
||
|
OffsetNumber offsetNumber;
|
||
|
BlockId blockId;
|
||
|
char buf[32];
|
||
|
char *str;
|
||
|
|
||
|
blockId = &(itemPtr->ip_blkid);
|
||
|
|
||
|
blockNumber = BlockIdGetBlockNumber(blockId);
|
||
|
offsetNumber = itemPtr->ip_posid;
|
||
|
|
||
|
sprintf(buf, "(%d,%d)", blockNumber, offsetNumber);
|
||
|
|
||
|
str = (char *) palloc(strlen(buf)+1);
|
||
|
strcpy(str, buf);
|
||
|
|
||
|
return str;
|
||
|
}
|