1996-07-09 08:22:35 +02:00
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
*
|
|
|
|
* tid.c--
|
1997-09-07 07:04:48 +02:00
|
|
|
* Functions for the built-in type tuple id
|
1996-07-09 08:22:35 +02:00
|
|
|
*
|
|
|
|
* Copyright (c) 1994, Regents of the University of California
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* IDENTIFICATION
|
1998-02-26 05:46:47 +01:00
|
|
|
* $Header: /cvsroot/pgsql/src/backend/utils/adt/tid.c,v 1.5 1998/02/26 04:37:22 momjian Exp $
|
1996-07-09 08:22:35 +02:00
|
|
|
*
|
|
|
|
* NOTES
|
1997-09-07 07:04:48 +02:00
|
|
|
* input routine largely stolen from boxin().
|
1996-07-09 08:22:35 +02:00
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
1997-09-07 07:04:48 +02:00
|
|
|
#include <stdio.h> /* for sprintf() */
|
1996-07-09 08:22:35 +02:00
|
|
|
#include <string.h>
|
|
|
|
#include "postgres.h"
|
|
|
|
#include "storage/bufpage.h"
|
|
|
|
|
|
|
|
#include "utils/palloc.h"
|
1997-09-07 07:04:48 +02:00
|
|
|
#include "utils/builtins.h" /* where function declarations go */
|
1996-07-09 08:22:35 +02:00
|
|
|
|
|
|
|
|
1997-09-07 07:04:48 +02:00
|
|
|
#define LDELIM '('
|
|
|
|
#define RDELIM ')'
|
|
|
|
#define DELIM ','
|
|
|
|
#define NTIDARGS 2
|
1996-07-09 08:22:35 +02:00
|
|
|
|
|
|
|
/* ----------------------------------------------------------------
|
1997-09-07 07:04:48 +02:00
|
|
|
* tidin
|
1996-07-09 08:22:35 +02:00
|
|
|
* ----------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
ItemPointer
|
|
|
|
tidin(char *str)
|
|
|
|
{
|
1997-09-08 04:41:22 +02:00
|
|
|
char *p,
|
|
|
|
*coord[NTIDARGS];
|
|
|
|
int i;
|
|
|
|
ItemPointer result;
|
1997-09-07 07:04:48 +02:00
|
|
|
|
1997-09-08 04:41:22 +02:00
|
|
|
BlockNumber blockNumber;
|
|
|
|
OffsetNumber offsetNumber;
|
1997-09-07 07:04:48 +02:00
|
|
|
|
|
|
|
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;
|
1996-07-09 08:22:35 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/* ----------------------------------------------------------------
|
1997-09-07 07:04:48 +02:00
|
|
|
* tidout
|
1996-07-09 08:22:35 +02:00
|
|
|
* ----------------------------------------------------------------
|
|
|
|
*/
|
1998-02-26 05:46:47 +01:00
|
|
|
char *
|
1996-07-09 08:22:35 +02:00
|
|
|
tidout(ItemPointer itemPtr)
|
|
|
|
{
|
1997-09-08 04:41:22 +02:00
|
|
|
BlockNumber blockNumber;
|
|
|
|
OffsetNumber offsetNumber;
|
|
|
|
BlockId blockId;
|
|
|
|
char buf[32];
|
|
|
|
char *str;
|
1997-09-07 07:04:48 +02:00
|
|
|
|
|
|
|
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;
|
1996-07-09 08:22:35 +02:00
|
|
|
}
|