Search in sources :

Example 11 with XProtocolRowInputStream

use of com.mysql.cj.protocol.x.XProtocolRowInputStream in project aws-mysql-jdbc by awslabs.

the class StreamingSqlResultBuilder method addProtocolEntity.

@Override
public boolean addProtocolEntity(ProtocolEntity entity) {
    if (entity instanceof Notice) {
        this.statementExecuteOkBuilder.addProtocolEntity(entity);
    } else {
        this.lastEntity = entity;
    }
    AtomicBoolean readLastResult = new AtomicBoolean(false);
    Supplier<ProtocolEntity> okReader = () -> {
        if (readLastResult.get()) {
            throw new CJCommunicationsException("Invalid state attempting to read ok packet");
        }
        if (this.protocol.hasMoreResults()) {
            StatementExecuteOk res = this.statementExecuteOkBuilder.build();
            this.statementExecuteOkBuilder = new StatementExecuteOkBuilder();
            return res;
        }
        readLastResult.set(true);
        return this.protocol.readQueryResult(this.statementExecuteOkBuilder);
    };
    Supplier<SqlResult> resultStream = () -> {
        if (readLastResult.get()) {
            return null;
        } else if (this.lastEntity != null && this.lastEntity instanceof Field || this.protocol.isSqlResultPending()) {
            ColumnDefinition cd;
            if (this.lastEntity != null && this.lastEntity instanceof Field) {
                cd = this.protocol.readMetadata((Field) this.lastEntity, (n) -> {
                    this.statementExecuteOkBuilder.addProtocolEntity(n);
                });
                this.lastEntity = null;
            } else {
                cd = this.protocol.readMetadata(this.statementExecuteOkBuilder::addProtocolEntity);
            }
            return new SqlSingleResult(cd, this.protocol.getServerSession().getDefaultTimeZone(), new XProtocolRowInputStream(cd, this.protocol, (n) -> {
                this.statementExecuteOkBuilder.addProtocolEntity(n);
            }), okReader, this.pset);
        } else {
            readLastResult.set(true);
            SqlResultBuilder rb = new SqlResultBuilder(this.defaultTimeZone, this.pset);
            rb.addProtocolEntity(entity);
            return this.protocol.readQueryResult(rb);
        }
    };
    this.result = new SqlMultiResult(resultStream);
    return true;
}
Also used : PropertySet(com.mysql.cj.conf.PropertySet) CJCommunicationsException(com.mysql.cj.exceptions.CJCommunicationsException) ResultBuilder(com.mysql.cj.protocol.ResultBuilder) ColumnDefinition(com.mysql.cj.protocol.ColumnDefinition) ProtocolEntity(com.mysql.cj.protocol.ProtocolEntity) XProtocolRowInputStream(com.mysql.cj.protocol.x.XProtocolRowInputStream) TimeZone(java.util.TimeZone) Field(com.mysql.cj.result.Field) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Supplier(java.util.function.Supplier) MysqlxSession(com.mysql.cj.MysqlxSession) ArrayList(java.util.ArrayList) StatementExecuteOkBuilder(com.mysql.cj.protocol.x.StatementExecuteOkBuilder) List(java.util.List) Notice(com.mysql.cj.protocol.x.Notice) XProtocol(com.mysql.cj.protocol.x.XProtocol) StatementExecuteOk(com.mysql.cj.protocol.x.StatementExecuteOk) StatementExecuteOkBuilder(com.mysql.cj.protocol.x.StatementExecuteOkBuilder) CJCommunicationsException(com.mysql.cj.exceptions.CJCommunicationsException) StatementExecuteOk(com.mysql.cj.protocol.x.StatementExecuteOk) ColumnDefinition(com.mysql.cj.protocol.ColumnDefinition) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Field(com.mysql.cj.result.Field) XProtocolRowInputStream(com.mysql.cj.protocol.x.XProtocolRowInputStream) Notice(com.mysql.cj.protocol.x.Notice) ProtocolEntity(com.mysql.cj.protocol.ProtocolEntity)

Aggregations

StatementExecuteOkBuilder (com.mysql.cj.protocol.x.StatementExecuteOkBuilder)11 XProtocolRowInputStream (com.mysql.cj.protocol.x.XProtocolRowInputStream)11 ColumnDefinition (com.mysql.cj.protocol.ColumnDefinition)10 Row (com.mysql.cj.result.Row)9 Test (org.junit.jupiter.api.Test)9 StringValueFactory (com.mysql.cj.result.StringValueFactory)8 DocFilterParams (com.mysql.cj.xdevapi.DocFilterParams)4 FilterParams (com.mysql.cj.xdevapi.FilterParams)3 TableFilterParams (com.mysql.cj.xdevapi.TableFilterParams)3 ArrayList (java.util.ArrayList)3 Field (com.mysql.cj.result.Field)2 SqlResult (com.mysql.cj.xdevapi.SqlResult)2 SqlResultBuilder (com.mysql.cj.xdevapi.SqlResultBuilder)2 MysqlxSession (com.mysql.cj.MysqlxSession)1 PropertySet (com.mysql.cj.conf.PropertySet)1 CJCommunicationsException (com.mysql.cj.exceptions.CJCommunicationsException)1 ProtocolEntity (com.mysql.cj.protocol.ProtocolEntity)1 ResultBuilder (com.mysql.cj.protocol.ResultBuilder)1 Notice (com.mysql.cj.protocol.x.Notice)1 StatementExecuteOk (com.mysql.cj.protocol.x.StatementExecuteOk)1