summaryrefslogtreecommitdiff
path: root/src/include/gtm/gtm_seq.h
blob: 6b34fba57317cf10f12df35ff66fe35364e9fe2e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/*-------------------------------------------------------------------------
 *
 * gtm_seq.h
 *
 *
 * Portions Copyright (c) 2012-2014, TransLattice, Inc.
 * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 * Portions Copyright (c) 2010-2012 Postgres-XC Development Group
 *
 * $PostgreSQL$
 *
 *-------------------------------------------------------------------------
 */
#ifndef GTM_SEQ_H
#define GTM_SEQ_H

#include "gtm/stringinfo.h"
#include "gtm/gtm_lock.h"
#include "gtm/libpq-be.h"

/* Global sequence  related structures */

typedef struct GTM_SeqLastVal
{
	char			gs_coord_name[SP_NODE_NAME];
	int32			gs_coord_procid;
	GTM_Sequence	gs_last_value;
} GTM_SeqLastVal;

typedef struct GTM_SeqInfo
{
	GTM_SequenceKey	gs_key;
	GTM_SequenceKey	gs_oldkey;
	GTM_Sequence	gs_value;
	GTM_Sequence	gs_backedUpValue;
	GTM_Sequence	gs_init_value;
	int32			gs_max_lastvals;
	int32			gs_lastval_count;
	GTM_SeqLastVal *gs_last_values;
	GTM_Sequence	gs_increment_by;
	GTM_Sequence	gs_min_value;
	GTM_Sequence	gs_max_value;
	bool			gs_cycle;
	bool			gs_called;
	GlobalTransactionId	gs_created_gxid;

	int32			gs_ref_count;
	int32			gs_state;
	GTM_RWLock		gs_lock;
} GTM_SeqInfo;

#define SEQ_STATE_ACTIVE	1
#define SEQ_STATE_DELETED	2

#define SEQ_IS_ASCENDING(s)		((s)->gs_increment_by > 0)
#define SEQ_IS_CYCLE(s)		((s)->gs_cycle)
#define SEQ_IS_CALLED(s)	((s)->gs_called)

#define SEQ_DEF_MAX_SEQVAL_ASCEND			0x7ffffffffffffffeLL
#define SEQ_DEF_MIN_SEQVAL_ASCEND			0x1

#define SEQ_DEF_MAX_SEQVAL_DESCEND			-0x1
#define SEQ_DEF_MIN_SEQVAL_DESCEND			-0x7ffffffffffffffeLL

#define SEQ_MAX_REFCOUNT		1024

/* SEQUENCE Management */
void GTM_InitSeqManager(void);

/* sequence commands in gtm/main/gtm_seq.c */
void ProcessSequenceInitCommand(Port *myport, StringInfo message, bool is_backup);
void ProcessSequenceGetCurrentCommand(Port *myport, StringInfo message);
void ProcessSequenceGetNextCommand(Port *myport, StringInfo message, bool is_backup);
void ProcessSequenceSetValCommand(Port *myport, StringInfo message, bool is_backup);
void ProcessSequenceResetCommand(Port *myport, StringInfo message, bool is_backup);
void ProcessSequenceCloseCommand(Port *myport, StringInfo message, bool is_backup);
void ProcessSequenceRenameCommand(Port *myport, StringInfo message, bool is_backup);
void ProcessSequenceAlterCommand(Port *myport, StringInfo message, bool is_backup);

void ProcessSequenceListCommand(Port *myport, StringInfo message);

void decode_seq_key(char* value, GTM_SequenceKey seqkey);
void GTM_SaveSeqInfo(FILE *ctlf);
int GTM_SeqRestore(GTM_SequenceKey seqkey,
			   GTM_Sequence increment_by,
			   GTM_Sequence minval,
			   GTM_Sequence maxval,
			   GTM_Sequence startval,
			   GTM_Sequence curval,
			   int32 state,
			   bool cycle,
			   bool called);

void GTM_CleanupSeqSession(char *coord_name, int coord_procid);

bool GTM_NeedSeqRestoreUpdate(GTM_SequenceKey seqkey);
void GTM_WriteRestorePointSeq(FILE *f);
void GTM_SeqRemoveCreated(void *seqinfo);
void GTM_SeqRestoreDropped(void *seqinfo);
void GTM_SeqRemoveDropped(void *seqinfo);
void GTM_SeqRestoreAltered(void *ptr);
void GTM_SeqRemoveAltered(void *seqinfo);
#endif