WL#1986: Embedded library: don't set up parameter types on each execution of prepared statement
Affects: Server-4.1
—
Status: Un-Assigned
A part of execution of prepared statement is setting up of appropriate conversion functions, which unpack data of given type from network buffer and assign it to the parameter. In case of SQL syntax for prepared statement parameter data is obtained from variables. In case of embedded library parameters data is obtained directly from MYSQL_BIND buffers created from client API. Current implementation of this functionality for embedded library needs to be implemented in a more efficient and tidy manner. - types of parameters can be set up only once, when they've been changed, but not on each execution of prepared statement. - embedded library specific functionality should be pulled out of assign-all-parameters cycle, which (cycle) is not embedded-library specific. That is, embedded/SQL syntax/conventional specific functionality can be moved to a class, like (the version below stands for conventional mode; it's assumed that appropriate implementations of given interface exist for SQL syntax and embedded library): struct Param_data_source { inline Param_data_source(uchar **data_arg, uchar *data_end_arg); inline bool setup_one_conversion_function(); uchar **data; uchar *read_pos; uchar *data_end; }; inline Param_data_source::Param_data_source(uchar **data_arg, uchar *data_end_arg) : data(data_arg), read_pos(*data), data_end(data_end_arg) {} inline bool Param_data_source::setup_one_conversion_function(Item_param *it) { ushort typecode; static const uint signed_bit= 1 << 15; if (read_pos >= data_end) DBUG_RETURN(TRUE); typecode= sint2korr(read_pos); read_pos+= 2; it->unsigned_flag= test(typecode & signed_bit); setup_one_conversion_function(it, (uchar) (typecode & ~signed_bit)); DBUG_RETURN(FALSE); }
Copyright (c) 2000, 2024, Oracle Corporation and/or its affiliates. All rights reserved.