From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Thu, 29 Nov 2018 13:53:41 +0300 From: Vladimir Davydov Subject: Re: [tarantool-patches] [PATCH v3 4/7] iproto: replace obuf by mpstream in execute.c Message-ID: <20181129105340.3d2xmkxqsht4wq3r@esperanza> References: <33c6e6cbd7d667980212902f6825d3d7e941ec77.1543344471.git.imeevma@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <33c6e6cbd7d667980212902f6825d3d7e941ec77.1543344471.git.imeevma@gmail.com> To: imeevma@tarantool.org Cc: v.shpilevoy@tarantool.org, tarantool-patches@freelists.org List-ID: On Tue, Nov 27, 2018 at 10:25:43PM +0300, imeevma@tarantool.org wrote: > @@ -627,81 +610,53 @@ sql_prepare_and_execute(const struct sql_request *request, > } > > int > -sql_response_dump(struct sql_response *response, int *keys, struct obuf *out) > +sql_response_dump(struct sql_response *response, int *keys, > + struct mpstream *stream) > { > sqlite3 *db = sql_get(); > struct sqlite3_stmt *stmt = (struct sqlite3_stmt *) response->prep_stmt; > - struct port_tuple *port_tuple = (struct port_tuple *) &response->port; > int rc = 0, column_count = sqlite3_column_count(stmt); > if (column_count > 0) { > - if (sql_get_description(stmt, out, column_count) != 0) { > + if (sql_get_description(stmt, stream, column_count) != 0) { > err: > rc = -1; > goto finish; > } > *keys = 2; > - int size = mp_sizeof_uint(IPROTO_DATA) + > - mp_sizeof_array(port_tuple->size); > - char *pos = (char *) obuf_alloc(out, size); > - if (pos == NULL) { > - diag_set(OutOfMemory, size, "obuf_alloc", "pos"); > - goto err; > - } > - pos = mp_encode_uint(pos, IPROTO_DATA); > - pos = mp_encode_array(pos, port_tuple->size); > - /* > - * Just like SELECT, SQL uses output format compatible > - * with Tarantool 1.6 > - */ > - if (port_dump_msgpack_16(&response->port, out) < 0) { > + mpstream_encode_uint(stream, IPROTO_DATA); > + mpstream_flush(stream); > + if (port_dump_msgpack(&response->port, stream->ctx) < 0) { stream->ctx isn't guaranteed to be an obuf And when you introduce vstream later, you simply move this code to another file. This is confusing. May be we should pass alloc/reserve used in mpstream to port_dump instead of obuf?