mirror of
https://git.postgresql.org/git/postgresql.git
synced 2026-02-12 01:18:35 +08:00
argument as a 'regclass' value instead of a text string. The frontend conversion of text string to pg_class OID is now encapsulated as an implicitly-invocable coercion from text to regclass. This provides backwards compatibility to the old behavior when the sequence argument is explicitly typed as 'text'. When the argument is just an unadorned literal string, it will be taken as 'regclass', which means that the stored representation will be an OID. This solves longstanding problems with renaming sequences that are referenced in default expressions, as well as new-in-8.1 problems with renaming such sequences' schemas or moving them to another schema. All per recent discussion. Along the way, fix some rather serious problems in dbmirror's support for mirroring sequence operations (int4 vs int8 confusion for instance).
110 lines
2.7 KiB
C
110 lines
2.7 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* sequence.h
|
|
* prototypes for sequence.c.
|
|
*
|
|
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* $PostgreSQL: pgsql/src/include/commands/sequence.h,v 1.33 2005/10/02 23:50:12 tgl Exp $
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef SEQUENCE_H
|
|
#define SEQUENCE_H
|
|
|
|
#include "nodes/parsenodes.h"
|
|
#include "access/xlog.h"
|
|
#include "fmgr.h"
|
|
|
|
|
|
/*
|
|
* On a machine with no 64-bit-int C datatype, sizeof(int64) will not be 8,
|
|
* but we need this struct type to line up with the way that a sequence
|
|
* table is defined --- and pg_type will say that int8 is 8 bytes anyway.
|
|
* So, we need padding. Ugly but necessary.
|
|
*/
|
|
typedef struct FormData_pg_sequence
|
|
{
|
|
NameData sequence_name;
|
|
#ifndef INT64_IS_BUSTED
|
|
int64 last_value;
|
|
int64 increment_by;
|
|
int64 max_value;
|
|
int64 min_value;
|
|
int64 cache_value;
|
|
int64 log_cnt;
|
|
#else
|
|
int32 last_value;
|
|
int32 pad1;
|
|
int32 increment_by;
|
|
int32 pad2;
|
|
int32 max_value;
|
|
int32 pad3;
|
|
int32 min_value;
|
|
int32 pad4;
|
|
int32 cache_value;
|
|
int32 pad5;
|
|
int32 log_cnt;
|
|
int32 pad6;
|
|
#endif
|
|
bool is_cycled;
|
|
bool is_called;
|
|
} FormData_pg_sequence;
|
|
|
|
typedef FormData_pg_sequence *Form_pg_sequence;
|
|
|
|
/*
|
|
* Columns of a sequence relation
|
|
*/
|
|
|
|
#define SEQ_COL_NAME 1
|
|
#define SEQ_COL_LASTVAL 2
|
|
#define SEQ_COL_INCBY 3
|
|
#define SEQ_COL_MAXVALUE 4
|
|
#define SEQ_COL_MINVALUE 5
|
|
#define SEQ_COL_CACHE 6
|
|
#define SEQ_COL_LOG 7
|
|
#define SEQ_COL_CYCLE 8
|
|
#define SEQ_COL_CALLED 9
|
|
|
|
#define SEQ_COL_FIRSTCOL SEQ_COL_NAME
|
|
#define SEQ_COL_LASTCOL SEQ_COL_CALLED
|
|
|
|
/* XLOG stuff */
|
|
#define XLOG_SEQ_LOG 0x00
|
|
|
|
typedef struct xl_seq_rec
|
|
{
|
|
RelFileNode node;
|
|
/* SEQUENCE TUPLE DATA FOLLOWS AT THE END */
|
|
} xl_seq_rec;
|
|
|
|
extern Datum nextval(PG_FUNCTION_ARGS);
|
|
extern Datum nextval_oid(PG_FUNCTION_ARGS);
|
|
extern Datum currval_oid(PG_FUNCTION_ARGS);
|
|
extern Datum setval_oid(PG_FUNCTION_ARGS);
|
|
extern Datum setval3_oid(PG_FUNCTION_ARGS);
|
|
extern Datum lastval(PG_FUNCTION_ARGS);
|
|
|
|
extern void DefineSequence(CreateSeqStmt *stmt);
|
|
extern void AlterSequence(AlterSeqStmt *stmt);
|
|
|
|
extern void seq_redo(XLogRecPtr lsn, XLogRecord *rptr);
|
|
extern void seq_desc(char *buf, uint8 xl_info, char *rec);
|
|
|
|
/* Set the upper and lower bounds of a sequence */
|
|
#ifndef INT64_IS_BUSTED
|
|
#ifdef HAVE_LL_CONSTANTS
|
|
#define SEQ_MAXVALUE ((int64) 0x7FFFFFFFFFFFFFFFLL)
|
|
#else
|
|
#define SEQ_MAXVALUE ((int64) 0x7FFFFFFFFFFFFFFF)
|
|
#endif
|
|
#else /* INT64_IS_BUSTED */
|
|
#define SEQ_MAXVALUE ((int64) 0x7FFFFFFF)
|
|
#endif /* INT64_IS_BUSTED */
|
|
|
|
#define SEQ_MINVALUE (-SEQ_MAXVALUE)
|
|
|
|
#endif /* SEQUENCE_H */
|