summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/transam/gtm.c16
-rw-r--r--src/gtm/main/gtm_seq.c24
2 files changed, 21 insertions, 19 deletions
diff --git a/src/backend/access/transam/gtm.c b/src/backend/access/transam/gtm.c
index 27acfb202d..7e9593aa1a 100644
--- a/src/backend/access/transam/gtm.c
+++ b/src/backend/access/transam/gtm.c
@@ -343,7 +343,7 @@ CreateSequenceGTM(char *seqname, GTM_Sequence increment, GTM_Sequence minval,
{
GTM_SequenceKeyData seqkey;
CheckConnection();
- seqkey.gsk_keylen = strlen(seqname);
+ seqkey.gsk_keylen = strlen(seqname) + 1;
seqkey.gsk_key = seqname;
return conn ? open_sequence(conn, &seqkey, increment, minval, maxval, startval, cycle) : 0;
@@ -358,7 +358,7 @@ AlterSequenceGTM(char *seqname, GTM_Sequence increment, GTM_Sequence minval,
{
GTM_SequenceKeyData seqkey;
CheckConnection();
- seqkey.gsk_keylen = strlen(seqname);
+ seqkey.gsk_keylen = strlen(seqname) + 1;
seqkey.gsk_key = seqname;
return conn ? alter_sequence(conn, &seqkey, increment, minval, maxval, startval, lastval, cycle, is_restart) : 0;
@@ -374,7 +374,7 @@ GetCurrentValGTM(char *seqname)
GTM_Sequence ret = -1;
GTM_SequenceKeyData seqkey;
CheckConnection();
- seqkey.gsk_keylen = strlen(seqname);
+ seqkey.gsk_keylen = strlen(seqname) + 1;
seqkey.gsk_key = seqname;
if (conn)
@@ -396,7 +396,7 @@ GetNextValGTM(char *seqname)
GTM_Sequence ret = -1;
GTM_SequenceKeyData seqkey;
CheckConnection();
- seqkey.gsk_keylen = strlen(seqname);
+ seqkey.gsk_keylen = strlen(seqname) + 1;
seqkey.gsk_key = seqname;
if (conn)
@@ -417,7 +417,7 @@ SetValGTM(char *seqname, GTM_Sequence nextval, bool iscalled)
{
GTM_SequenceKeyData seqkey;
CheckConnection();
- seqkey.gsk_keylen = strlen(seqname);
+ seqkey.gsk_keylen = strlen(seqname) + 1;
seqkey.gsk_key = seqname;
return conn ? set_val(conn, &seqkey, nextval, iscalled) : -1;
@@ -435,7 +435,7 @@ DropSequenceGTM(char *name, GTM_SequenceKeyType type)
{
GTM_SequenceKeyData seqkey;
CheckConnection();
- seqkey.gsk_keylen = strlen(name);
+ seqkey.gsk_keylen = strlen(name) + 1;
seqkey.gsk_key = name;
seqkey.gsk_type = type;
@@ -450,9 +450,9 @@ RenameSequenceGTM(char *seqname, const char *newseqname)
{
GTM_SequenceKeyData seqkey, newseqkey;
CheckConnection();
- seqkey.gsk_keylen = strlen(seqname);
+ seqkey.gsk_keylen = strlen(seqname) + 1;
seqkey.gsk_key = seqname;
- newseqkey.gsk_keylen = strlen(newseqname);
+ newseqkey.gsk_keylen = strlen(newseqname) + 1;
newseqkey.gsk_key = (char *) newseqname;
return conn ? rename_sequence(conn, &seqkey, &newseqkey) : -1;
diff --git a/src/gtm/main/gtm_seq.c b/src/gtm/main/gtm_seq.c
index 98f9431546..b6a84b865b 100644
--- a/src/gtm/main/gtm_seq.c
+++ b/src/gtm/main/gtm_seq.c
@@ -371,7 +371,6 @@ int GTM_SeqAlter(GTM_SequenceKey seqkey,
GTM_RWLockAcquire(&seqinfo->gs_lock, GTM_LOCKMODE_WRITE);
/* Modify the data if necessary */
-
if (seqinfo->gs_cycle != cycle)
seqinfo->gs_cycle = cycle;
if (seqinfo->gs_min_value != minval)
@@ -381,19 +380,22 @@ int GTM_SeqAlter(GTM_SequenceKey seqkey,
if (seqinfo->gs_increment_by != increment_by)
seqinfo->gs_increment_by = increment_by;
- /* Here Restart has been used with a value, reinitialize last_value to a new value */
- if (seqinfo->gs_last_value != lastval)
- seqinfo->gs_last_value = lastval;
-
- /* Start has been used, reinitialize init value */
- if (seqinfo->gs_init_value != startval)
- seqinfo->gs_last_value = seqinfo->gs_init_value = startval;
-
- /* Restart command has been used, reset the sequence */
+ /*
+ * Check start/restart processes.
+ * Check first if restart is necessary and reset sequence in that case.
+ * If not, check if a simple start is necessary and update sequence.
+ */
if (is_restart)
{
+ /* Restart command has been used, reset the sequence */
seqinfo->gs_called = false;
- seqinfo->gs_init_value = seqinfo->gs_last_value;
+ seqinfo->gs_init_value = seqinfo->gs_last_value = lastval;
+ }
+ else
+ {
+ /* Start has been used, reinitialize init value */
+ if (seqinfo->gs_init_value != startval)
+ seqinfo->gs_init_value = seqinfo->gs_last_value = startval;
}
/* Remove the old key with the old name */