diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/backend/access/transam/gtm.c | 16 | ||||
| -rw-r--r-- | src/gtm/main/gtm_seq.c | 24 |
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 */ |
