[ https://issues.apache.org/jira/browse/PHOENIX-3572?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15957427#comment-15957427 ]
ASF GitHub Bot commented on PHOENIX-3572: ----------------------------------------- Github user JamesRTaylor commented on a diff in the pull request: https://github.com/apache/phoenix/pull/229#discussion_r109997991 --- Diff: phoenix-core/src/main/java/org/apache/phoenix/iterate/CursorResultIterator.java --- @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.phoenix.iterate; + +import org.apache.phoenix.schema.tuple.Tuple; +import org.apache.phoenix.util.CursorUtil; + +import java.sql.SQLException; +import java.util.List; + +public class CursorResultIterator implements ResultIterator { + private String cursorName; + private PeekingResultIterator delegate; + //TODO Configure fetch size from FETCH call + private int fetchSize = 0; + private int rowsRead = 0; + public CursorResultIterator(PeekingResultIterator delegate, String cursorName) { + this.delegate = delegate; + this.cursorName = cursorName; + } + + @Override + public Tuple next() throws SQLException { + if(!CursorUtil.moreValues(cursorName)){ + return null; + } else if (fetchSize == rowsRead) { + return null; + } + + Tuple next = delegate.next(); + CursorUtil.updateCursor(cursorName,next, delegate.peek()); + rowsRead++; + return next; + } + + @Override + public void explain(List<String> planSteps) { + delegate.explain(planSteps); + planSteps.add("CLIENT CURSOR " + cursorName); + } + + @Override + public String toString() { + return "CursorResultIterator [cursor=" + cursorName + "]"; + } + + @Override + public void close() throws SQLException { + //NOP --- End diff -- Does this need to call delegate.close()? If not, what closes the underlying query? > Support FETCH NEXT| n ROWS from Cursor > -------------------------------------- > > Key: PHOENIX-3572 > URL: https://issues.apache.org/jira/browse/PHOENIX-3572 > Project: Phoenix > Issue Type: Sub-task > Reporter: Biju Nair > Assignee: Biju Nair > > Implement required changes to support > - {{DECLARE}} and {{OPEN}} a cursor > - query {{FETCH NEXT | n ROWS}} from the cursor > - {{CLOSE}} the cursor > Based on the feedback in [PR > #192|https://github.com/apache/phoenix/pull/192], implement the changes using > {{ResultSet}}. -- This message was sent by Atlassian JIRA (v6.3.15#6346)