[ 
https://issues.apache.org/jira/browse/PHOENIX-1016?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14067320#comment-14067320
 ] 

Thomas D'Silva commented on PHOENIX-1016:
-----------------------------------------

[~jamestaylor]

Sorry, I mean if a sequence *is not* declared with CYCLE and the min/max limit 
is reached an exception is thrown. 

I downloaded the 3.0 code from 
http://mirrors.koehn.com/apache/incubator/phoenix/phoenix-3.0.0-incubating/  
and verified that the test fails if a sequence is not returned. I am trying to 
figure out what changed in 3.1. 

In ConnectionQueryServicesImpl.removeConnectio() formerSequenceMap is not null 
in 3.0, but is null in 3.1, so it does not call returnAllSequences.  I will try 
and figure out why this is happening..

{code}
 @Override
    public void removeConnection(PhoenixConnection connection) throws 
SQLException {
        ConcurrentMap<SequenceKey,Sequence> formerSequenceMap = null;
        synchronized(this) {
            if (--connectionCount == 0) {
                if (!this.sequenceMap.isEmpty()) {
                    formerSequenceMap = this.sequenceMap;
                    this.sequenceMap = Maps.newConcurrentMap();
                }
            }
        }
        // Since we're using the former sequenceMap, we can do this outside
        // the lock.
        if (formerSequenceMap != null) {
            // When there are no more connections, attempt to return any 
sequences
            returnAllSequences(formerSequenceMap);
        }
    }
{code}

> Support MINVALUE, MAXVALUE, and CYCLE options in CREATE SEQUENCE
> ----------------------------------------------------------------
>
>                 Key: PHOENIX-1016
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-1016
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: James Taylor
>            Assignee: Thomas D'Silva
>         Attachments: AddSeqColumns.txt, PHOENIX-1016-3.1.v3.patch, 
> PHOENIX-1016-3.1.v4.patch, PHOENIX-1016-4.1.v3.patch, 
> PHOENIX-1016-4.1.v4.patch, PHOENIX-1016.3.0.patch, PHOENIX-1016.patch, 
> PHOENIX-1016.v2.3.0.patch, PHOENIX-1016.v2.patch, diff.txt
>
>
> We currently don't support MINVALUE, MAXVALUE, and CYCLE options in CREATE 
> SEQUENCE, but we should. See 
> http://msdn.microsoft.com/en-us/library/ff878091.aspx for the syntax.
> I believe MINVALUE applies if the INCREMENT is negative while MAXVALUE 
> applies otherwise. If the value of a sequence goes beyond MINVALUE/MAXVALUE, 
> then:
> - if CYCLE is true, then the sequence value should start again at the START 
> WITH value (or the MINVALUE if specified too? Not sure about this).
> - if CYCLE is false, then an exception should be thrown.
> To implement this:
> - make the grammar changes in PhoenixSQL.g
> - add member variables for MINVALUE, MAXVALUE, and CYCLE to 
> CreateSequenceStatement
> - add the appropriate error checking and handle bind variables for these new 
> options in CreateSequenceCompiler
> - modify the MetaDataClient.createSequence() call by passing along these new 
> parameters.
> - same for ConnectionQueryServices.createSequence() call
> - same for Sequence.createSequence().
> - pass along these parameters as new KeyValues in the Append that constitutes 
> the RPC call
> - act on these in the SequenceRegionObserver coprocessor as indicated above.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to