org.postgresql.core.v3.CopyOutImpl Maven / Gradle / Ivy
Show all versions of postgresql-holo Show documentation
/*
* Copyright (c) 2009, PostgreSQL Global Development Group
* See the LICENSE file in the project root for more information.
*/
package org.postgresql.core.v3;
import org.postgresql.copy.CopyOut;
import org.checkerframework.checker.nullness.qual.Nullable;
import java.sql.SQLException;
/**
* Anticipated flow of a COPY TO STDOUT operation:
*
* CopyManager.copyOut() ->QueryExecutor.startCopy() - sends given query to server
* ->processCopyResults(): - receives CopyOutResponse from Server - creates new CopyOutImpl
* ->initCopy(): - receives copy metadata from server ->CopyOutImpl.init() ->lock()
* connection for this operation - if query fails an exception is thrown - if query returns wrong
* CopyOperation, copyOut() cancels it before throwing exception <-returned: new CopyOutImpl
* holding lock on connection repeat CopyOut.readFromCopy() until null
* ->CopyOutImpl.readFromCopy() ->QueryExecutorImpl.readFromCopy() ->processCopyResults() -
* on copydata row from server ->CopyOutImpl.handleCopydata() stores reference to byte array - on
* CopyDone, CommandComplete, ReadyForQuery ->unlock() connection for use by other operations
* <-returned: byte array of data received from server or null at end.
*/
public class CopyOutImpl extends CopyOperationImpl implements CopyOut {
private byte @Nullable [] currentDataRow;
public byte @Nullable [] readFromCopy() throws SQLException {
return readFromCopy(true);
}
@Override
public byte @Nullable [] readFromCopy(boolean block) throws SQLException {
currentDataRow = null;
getQueryExecutor().readFromCopy(this, block);
return currentDataRow;
}
protected void handleCopydata(byte[] data) {
currentDataRow = data;
}
}