← Back to team overview

maria-developers team mailing list archive

Re: f854ac4d9e0: MDEV-21916: COM_STMT_BULK_EXECUTE with RETURNING insert wrong values

 

Hi, Oleksandr!

On Jul 30, Oleksandr Byelkin wrote:
> On Wed, Jul 29, 2020 at 7:47 PM Sergei Golubchik <serg@xxxxxxxxxxx> wrote:
> 
> > > +  /*
> > > +     Here second buffer for not optimized commands,
> > > +     optimized commands do it inside thier internal loop.
> > > +  */
> > > +  if (!(sql_command_flags[lex->sql_command] & CF_SP_BULK_OPTIMIZED) &&
> > > +      this->lex->has_returning())
> > > +  {
> > > +    // Above check can be true for SELECT in future
> > > +    DBUG_ASSERT(lex->sql_command != SQLCOM_SELECT);
> > > +    if ((readbuff=
> > > +           net_try_allocate_new_packet(&thd->net, thd,
> > > +                                       MYF(MY_THREAD_SPECIFIC))) == NULL)
> >
> > sorry, I'm confused. You allocate a buffer here, in
> > Prepared_statement::execute_bulk_loop, and then again in mysql_insert() ?
> 
> there are 2 way to execute "bulk" operation:
> 1) optimized (it is only INSERT (REPLACE) for now) where all is done inside
> insert procedure (one table open, one transaction)
> 2) many calls of the procedure (DELETE/UPDATE) which as output make
> "picture" of one call (one OK/EOF and maybe result set) (as side
> effect many time tables opened and it is different transaction)
> 
> so it is in fact 2 independent ways and that is why it is in 2 places.

May be, then, add

  DBUG_ASSERT(lex->sql_command != SQLCOM_INSERT);

?

Regards,
Sergei
VP of MariaDB Server Engineering
and security@xxxxxxxxxxx


References