[prev in list] [next in list] [prev in thread] [next in thread]
List: pecl-cvs
Subject: [PECL-CVS] com =?UTF-8?Q?pecl/database/mysql=5Fxdevapi=3A=20orabug=20=23=33=30=31=33?= =?UTF-8?Q?=34
From: hery ramilison <mysqlre () php ! net>
Date: 2020-08-27 15:29:21
Message-ID: php-mail-fab19b92e2c85012765d071786691a571309384709 () git ! php ! net
[Download RAW message or body]
Commit: dee08675cc59acc92ba62161b27bc21a98056419
Author: Darek Slusarczyk <dariusz.slusarczyk@oracle.com> Thu, 27 Aug 2020 \
17:29:21 +0200
Parents: 478b595862381d466b75445922919acd60f026a2
Branches: master
Link: http://git.php.net/?p=pecl/database/mysql_xdevapi.git;a=commitdiff;h=dee08675cc59acc92ba62161b27bc21a98056419
Log:
orabug #30134451: mysqlndx replace raw zval with improved zvalue where possible
refactorings in:
- session, statement, sql result iterator
- remove function to_zend_string and all related
Bugs:
https://bugs.php.net/30134451
Changed paths:
M mysqlx_session.cc
M mysqlx_sql_statement.cc
M mysqlx_sql_statement.h
M mysqlx_sql_statement_result_iterator.cc
M util/string_utils.cc
M util/string_utils.h
M util/zend_utils.cc
M util/zend_utils.h
M xmysqlnd/xmysqlnd_session.h
M xmysqlnd/xmysqlnd_stmt_execution_state.cc
M xmysqlnd/xmysqlnd_stmt_execution_state.h
M xmysqlnd/xmysqlnd_wireprotocol.cc
["diff_dee08675cc59acc92ba62161b27bc21a98056419.txt" (text/plain)]
diff --git a/mysqlx_session.cc b/mysqlx_session.cc
index 4fe2da51..a7f0f5ec 100644
--- a/mysqlx_session.cc
+++ b/mysqlx_session.cc
@@ -315,33 +315,31 @@ MYSQL_XDEVAPI_PHP_METHOD(mysqlx_session, getSchema)
DBG_VOID_RETURN;
}
-static void
+static util::zvalue
mysqlx_execute_session_query(XMYSQLND_SESSION session,
const std::string_view& namespace_,
const util::string_view& query,
const zend_long flags,
- zval * const return_value,
- const unsigned int argc,
- const zval * args)
+ const util::zvalues& args)
{
DBG_ENTER("mysqlx_execute_session_query");
xmysqlnd_stmt* stmt = session->create_statement_object(session);
- if (stmt) {
- util::zvalue stmt_obj = create_sql_stmt(stmt, namespace_, query);
-
- bool found{ false };
- for (unsigned int i{0}; i < argc; ++i) {
- if (!mysqlx_sql_statement_bind_one_param(stmt_obj.ptr(), &args[i])) {
- found = true;
- break;
- }
- }
- if (!found) {
- mysqlx_sql_statement_execute(Z_MYSQLX_P(stmt_obj.ptr()), flags, return_value);
+ util::zvalue stmt_obj = create_sql_stmt(stmt, namespace_, query);
+
+ bool found{ false };
+ for (const auto& arg : args) {
+ if (!mysqlx_sql_statement_bind_one_param(stmt_obj.ptr(), arg)) {
+ found = true;
+ break;
}
}
- DBG_VOID_RETURN;
+ util::zvalue result;
+ if (!found) {
+ result = mysqlx_sql_statement_execute(Z_MYSQLX_P(stmt_obj.ptr()), flags);
+ }
+
+ DBG_RETURN(result);
}
MYSQL_XDEVAPI_PHP_METHOD(mysqlx_session, sql)
@@ -468,18 +466,21 @@ MYSQL_XDEVAPI_PHP_METHOD(mysqlx_session, startTransaction)
util::raw_zval* object_zv{nullptr};
constexpr util::string_view query{"START TRANSACTION"};
- zval* args{nullptr};
- int argc{0};
if (util::get_method_arguments(execute_data, getThis(), "O", &object_zv, \
mysqlx_session_class_entry) == FAILURE) {
DBG_VOID_RETURN;
}
- RETVAL_FALSE;
+ RETVAL_NULL();
auto& data_object{ fetch_session_data(object_zv) };
if (data_object.session) {
- mysqlx_execute_session_query(data_object.session, namespace_sql, query, \
MYSQLX_EXECUTE_FLAG_BUFFERED, return_value, argc, args); \
+ mysqlx_execute_session_query( + data_object.session,
+ namespace_sql, query,
+ MYSQLX_EXECUTE_FLAG_BUFFERED,
+ util::zvalues()
+ ).move_to(return_value);
}
DBG_VOID_RETURN;
@@ -491,18 +492,22 @@ MYSQL_XDEVAPI_PHP_METHOD(mysqlx_session, commit)
util::raw_zval* object_zv{nullptr};
constexpr util::string_view query{"COMMIT"};
- zval* args{nullptr};
- int argc{0};
if (util::get_method_arguments(execute_data, getThis(), "O", &object_zv, \
mysqlx_session_class_entry) == FAILURE) {
DBG_VOID_RETURN;
}
- RETVAL_FALSE;
+ RETVAL_NULL();
auto& data_object{ fetch_session_data(object_zv) };
if (data_object.session) {
- mysqlx_execute_session_query(data_object.session, namespace_sql, query, \
MYSQLX_EXECUTE_FLAG_BUFFERED, return_value, argc, args); \
+ mysqlx_execute_session_query( + data_object.session,
+ namespace_sql,
+ query,
+ MYSQLX_EXECUTE_FLAG_BUFFERED,
+ util::zvalues()
+ ).move_to(return_value);
}
DBG_VOID_RETURN;
@@ -514,18 +519,22 @@ MYSQL_XDEVAPI_PHP_METHOD(mysqlx_session, rollback)
util::raw_zval* object_zv{nullptr};
constexpr util::string_view query{"ROLLBACK"};
- zval* args{nullptr};
- int argc{0};
if (util::get_method_arguments(execute_data, getThis(), "O", &object_zv, \
mysqlx_session_class_entry) == FAILURE) {
DBG_VOID_RETURN;
}
- RETVAL_FALSE;
+ RETVAL_NULL();
auto& data_object{ fetch_session_data(object_zv) };
if (data_object.session) {
- mysqlx_execute_session_query(data_object.session, namespace_sql, query, \
MYSQLX_EXECUTE_FLAG_BUFFERED, return_value, argc, args); \
+ mysqlx_execute_session_query( + data_object.session,
+ namespace_sql,
+ query,
+ MYSQLX_EXECUTE_FLAG_BUFFERED,
+ util::zvalues()
+ ).move_to(return_value);
}
DBG_VOID_RETURN;
@@ -557,27 +566,25 @@ MYSQL_XDEVAPI_PHP_METHOD(mysqlx_session, setSavepoint)
auto& data_object = fetch_session_data(object_zv);
util::string query{ "SAVEPOINT " };
- util::string name;
+ util::zvalue name;
if( savepoint_name.empty() ) {
//Generate a valid savepoint name
name = generate_savepoint_name( data_object.session->data->savepoint_name_seed++ \
); } else {
- name = savepoint_name.to_string();
+ name = savepoint_name;
}
- query += escape_identifier( name );
+ query += util::escape_identifier( name.to_string_view() );
if (data_object.session) {
- zval * args{ nullptr };
- int argc = 0;
mysqlx_execute_session_query(
- data_object.session,
- namespace_sql,
- {query.c_str(), query.size()} ,
- MYSQLX_EXECUTE_FLAG_BUFFERED,
- return_value, argc, args);
+ data_object.session,
+ namespace_sql,
+ {query.c_str(), query.size()} ,
+ MYSQLX_EXECUTE_FLAG_BUFFERED,
+ util::zvalues());
}
- RETVAL_STRINGL( name.c_str(), name.size() );
+ name.move_to(return_value);
DBG_VOID_RETURN;
}
@@ -586,7 +593,7 @@ MYSQL_XDEVAPI_PHP_METHOD(mysqlx_session, rollbackTo)
{
DBG_ENTER("mysqlx_session::rollbackTo");
- zval* object_zv{ nullptr };
+ util::raw_zval* object_zv{ nullptr };
util::arg_string savepoint_name;
if (util::get_method_arguments(
execute_data, getThis(), "Os",
@@ -597,19 +604,18 @@ MYSQL_XDEVAPI_PHP_METHOD(mysqlx_session, rollbackTo)
RETVAL_FALSE;
- util::string name = escape_identifier( savepoint_name.to_string() );
+ util::string name = util::escape_identifier( savepoint_name.to_view() );
auto& data_object{ fetch_session_data( object_zv) };
const util::string query{ "ROLLBACK TO " + name };
if (data_object.session) {
- zval * args{ nullptr };
- int argc = 0;
mysqlx_execute_session_query(
- data_object.session,
- namespace_sql,
- {query.c_str(), query.size()} ,
- MYSQLX_EXECUTE_FLAG_BUFFERED,
- return_value, argc, args);
+ data_object.session,
+ namespace_sql,
+ {query.c_str(), query.size()} ,
+ MYSQLX_EXECUTE_FLAG_BUFFERED,
+ util::zvalues()
+ ).move_to(return_value);
}
DBG_VOID_RETURN;
@@ -619,7 +625,7 @@ MYSQL_XDEVAPI_PHP_METHOD(mysqlx_session, releaseSavepoint)
{
DBG_ENTER("mysqlx_session::releaseSavepoint");
- zval* object_zv{ nullptr };
+ util::raw_zval* object_zv{ nullptr };
util::arg_string savepoint_name;
if (util::get_method_arguments(
execute_data, getThis(), "Os",
@@ -630,19 +636,18 @@ MYSQL_XDEVAPI_PHP_METHOD(mysqlx_session, releaseSavepoint)
RETVAL_FALSE;
- util::string name = escape_identifier( savepoint_name.to_string() );
+ util::string name = util::escape_identifier( savepoint_name.to_view() );
auto& data_object{ fetch_session_data( object_zv) };
const util::string query{ "RELEASE SAVEPOINT " + name };
if (data_object.session) {
- zval * args{ nullptr };
- int argc = 0;
mysqlx_execute_session_query(
- data_object.session,
- namespace_sql,
- {query.c_str(), query.size()} ,
- MYSQLX_EXECUTE_FLAG_BUFFERED,
- return_value, argc, args);
+ data_object.session,
+ namespace_sql,
+ {query.c_str(), query.size()} ,
+ MYSQLX_EXECUTE_FLAG_BUFFERED,
+ util::zvalues()
+ ).move_to(return_value);
}
DBG_VOID_RETURN;
diff --git a/mysqlx_sql_statement.cc b/mysqlx_sql_statement.cc
index 97c31b70..46db8640 100644
--- a/mysqlx_sql_statement.cc
+++ b/mysqlx_sql_statement.cc
@@ -396,7 +396,7 @@ mysqlx_fetch_data_with_callback(st_mysqlx_statement* object, \
st_xmysqlnd_exec_wi }
bool
-mysqlx_sql_statement_bind_one_param(zval* object_zv, const util::zvalue& param)
+mysqlx_sql_statement_bind_one_param(util::raw_zval* object_zv, const util::zvalue& \
param) {
DBG_ENTER("mysqlx_sql_statement_bind_one_param");
@@ -457,34 +457,32 @@ mysqlx_sql_stmt_on_error(
DBG_RETURN(HND_PASS_RETURN_FAIL);
}
-void
-mysqlx_sql_statement_get_results(
- st_mysqlx_statement* object,
- zval* return_value
-)
+util::zvalue
+mysqlx_sql_statement_get_results(st_mysqlx_statement* object)
{
DBG_ENTER("mysqlx_sql_statement_get_results");
+ util::zvalue result;
xmysqlnd_stmt * stmt = object->stmt;
if (PASS == object->send_query_status) {
if (object->execute_flags & MYSQLX_EXECUTE_FLAG_ASYNC) {
DBG_INF("ASYNC");
- RETVAL_BOOL(PASS == object->send_query_status);
+ result = (PASS == object->send_query_status);
} else {
const st_xmysqlnd_stmt_on_warning_bind on_warning = { mysqlx_sql_stmt_on_warning, \
nullptr }; const st_xmysqlnd_stmt_on_error_bind on_error = { \
mysqlx_sql_stmt_on_error, nullptr };
- XMYSQLND_STMT_RESULT * result;
+ XMYSQLND_STMT_RESULT* stmt_result;
if (object->execute_flags & MYSQLX_EXECUTE_FLAG_BUFFERED) {
- result = stmt->get_buffered_result(stmt, &object->has_more_results, on_warning, \
on_error, nullptr, nullptr); + stmt_result = stmt->get_buffered_result(stmt, \
&object->has_more_results, on_warning, on_error, nullptr, nullptr); } else {
- result = stmt->get_fwd_result(stmt, MYSQLX_EXECUTE_FWD_PREFETCH_COUNT, \
&object->has_more_rows_in_set, &object->has_more_results, on_warning, on_error, \
nullptr, nullptr); + stmt_result = stmt->get_fwd_result(stmt, \
MYSQLX_EXECUTE_FWD_PREFETCH_COUNT, &object->has_more_rows_in_set, \
&object->has_more_results, on_warning, on_error, nullptr, nullptr); }
DBG_INF_FMT("has_more_results=%s has_more_rows_in_set=%s",
object->has_more_results? "TRUE":"FALSE",
object->has_more_rows_in_set? "TRUE":"FALSE");
- if (result) {
- create_sql_stmt_result(result, object).move_to(return_value);
+ if (stmt_result) {
+ result = create_sql_stmt_result(stmt_result, object);
} else {
RAISE_EXCEPTION_FETCH_FAIL();
/* Or we should close the connection, rendering it unusable at this point ?*/
@@ -492,32 +490,30 @@ mysqlx_sql_statement_get_results(
}
}
}
- DBG_VOID_RETURN;
+ DBG_RETURN(result);
}
-void
+util::zvalue
mysqlx_sql_statement_execute(
- const st_mysqlx_object* const mysqlx_object,
- const zend_long flags,
- zval* return_value
-)
+ const st_mysqlx_object* const mysqlx_object,
+ const zend_long flags)
{
st_mysqlx_statement* object = (st_mysqlx_statement*) mysqlx_object->ptr;
DBG_ENTER("mysqlx_sql_statement_execute");
+ util::zvalue result;
+
if (!object || !object->stmt_execute) {
php_error_docref(nullptr, E_WARNING, "invalid object of class %s", \
ZSTR_VAL(mysqlx_object->zo.ce->name)); DBG_ERR_FMT("invalid object of class %s on \
%s::%d", ZSTR_VAL(mysqlx_object->zo.ce->name), __FILE__, __LINE__);
- DBG_VOID_RETURN;
+ DBG_RETURN(result);
}
- RETVAL_FALSE;
-
if ((flags | MYSQLX_EXECUTE_ALL_FLAGS) != MYSQLX_EXECUTE_ALL_FLAGS) {
util::ostringstream os;
os << "Invalid flags. Unknown " << (flags - (flags | MYSQLX_EXECUTE_ALL_FLAGS));
php_error_docref(nullptr, E_WARNING, "%s", os.str().c_str());
- DBG_VOID_RETURN;
+ DBG_RETURN(result);
}
DBG_INF_FMT("flags=%lu", flags);
DBG_INF_FMT("%sSYNC", (flags & MYSQLX_EXECUTE_FLAG_ASYNC)? "A":"");
@@ -533,10 +529,10 @@ mysqlx_sql_statement_execute(
object->has_more_results = FALSE;
object->send_query_status = stmt->send_raw_message(stmt, \
xmysqlnd_stmt_execute__get_protobuf_message(object->stmt_execute), nullptr, nullptr); \
- mysqlx_sql_statement_get_results(object, return_value);
+ result = mysqlx_sql_statement_get_results(object);
}
}
- DBG_VOID_RETURN;
+ DBG_RETURN(result);
}
MYSQL_XDEVAPI_PHP_METHOD(mysqlx_sql_statement, execute)
@@ -552,7 +548,7 @@ MYSQL_XDEVAPI_PHP_METHOD(mysqlx_sql_statement, execute)
DBG_VOID_RETURN;
}
- mysqlx_sql_statement_execute(Z_MYSQLX_P(object_zv), flags, return_value);
+ mysqlx_sql_statement_execute(Z_MYSQLX_P(object_zv), flags).move_to(return_value);
DBG_VOID_RETURN;
}
diff --git a/mysqlx_sql_statement.h b/mysqlx_sql_statement.h
index 8a775991..7c059428 100644
--- a/mysqlx_sql_statement.h
+++ b/mysqlx_sql_statement.h
@@ -76,8 +76,8 @@ void mysqlx_register_sql_statement_class(INIT_FUNC_ARGS, \
zend_object_handlers* m void \
mysqlx_unregister_sql_statement_class(SHUTDOWN_FUNC_ARGS);
util::zvalue create_sql_stmt(drv::xmysqlnd_stmt* stmt, const std::string_view& \
namespace_, const util::string_view& query);
-bool mysqlx_sql_statement_bind_one_param(zval * object_zv, const util::zvalue& \
param);
-void mysqlx_sql_statement_execute(const st_mysqlx_object* const mysqlx_object, const \
zend_long flags, zval* return_value); +bool \
mysqlx_sql_statement_bind_one_param(util::raw_zval* object_zv, const util::zvalue& \
param); +util::zvalue mysqlx_sql_statement_execute(const st_mysqlx_object* const \
mysqlx_object, const zend_long flags);
} // namespace devapi
diff --git a/mysqlx_sql_statement_result_iterator.cc \
b/mysqlx_sql_statement_result_iterator.cc index 0b5bf09c..5cd36b2d 100644
--- a/mysqlx_sql_statement_result_iterator.cc
+++ b/mysqlx_sql_statement_result_iterator.cc
@@ -35,18 +35,18 @@ using namespace drv;
struct st_mysqlx_sql_result_iterator : util::custom_allocable
{
- zend_object_iterator intern;
- XMYSQLND_STMT_RESULT * result;
- zval current_row;
+ zend_object_iterator intern;
+ XMYSQLND_STMT_RESULT* result;
+ util::zvalue current_row;
size_t row_num;
- zend_bool started;
- zend_bool usable;
+ bool started;
+ bool usable;
};
static void
XMYSQLND_METHOD(mysqlx_sql_result_iterator, dtor)(zend_object_iterator * iter)
{
- st_mysqlx_sql_result_iterator* iterator = (st_mysqlx_sql_result_iterator*) iter;
+ st_mysqlx_sql_result_iterator* iterator = \
reinterpret_cast<st_mysqlx_sql_result_iterator*>(iter); \
DBG_ENTER("mysqlx_sql_result_iterator::dtor"); if (iterator->result) {
iterator->result->m.free_reference(iterator->result, nullptr, nullptr);
@@ -54,7 +54,6 @@ XMYSQLND_METHOD(mysqlx_sql_result_iterator, \
dtor)(zend_object_iterator * iter)
/* cleanup handled in sxe_object_dtor as we dont always have an iterator wrapper */
zval_ptr_dtor(&iterator->intern.data);
- zval_ptr_dtor(&iterator->current_row);
DBG_VOID_RETURN;
}
@@ -75,7 +74,7 @@ XMYSQLND_METHOD(mysqlx_sql_result_iterator, \
current_data)(zend_object_iterator * st_mysqlx_sql_result_iterator* iterator = \
(st_mysqlx_sql_result_iterator*) iter; \
DBG_ENTER("mysqlx_sql_result_iterator::current_data"); DBG_INF_FMT("usable=%s \
started=%s row_num=%u", iterator->usable? "TRUE":"FALSE", iterator->started? \
"TRUE":"FALSE", iterator->row_num);
- DBG_RETURN((iterator->result && iterator->usable)? &iterator->current_row : \
nullptr); + DBG_RETURN((iterator->result && iterator->usable)? \
iterator->current_row.ptr() : nullptr); }
static enum_func_status
@@ -85,11 +84,10 @@ XMYSQLND_METHOD(mysqlx_sql_result_iterator, \
fetch_current_data)(zend_object_iter \
DBG_ENTER("mysqlx_sql_result_iterator::fetch_current_data"); DBG_INF_FMT("usable=%s \
started=%s row_num=%u", iterator->usable? "TRUE":"FALSE", iterator->started? \
"TRUE":"FALSE", iterator->row_num); if (iterator->result && iterator->usable) {
- zval_ptr_dtor(&iterator->current_row);
- ZVAL_UNDEF(&iterator->current_row);
+ iterator->current_row.reset();
- if (PASS == iterator->result->m.fetch_current(iterator->result, \
&iterator->current_row, nullptr, nullptr) &&
- IS_ARRAY == Z_TYPE(iterator->current_row))
+ if (PASS == iterator->result->m.fetch_current(iterator->result, \
iterator->current_row.ptr(), nullptr, nullptr) && \
+ iterator->current_row.is_array()) {
DBG_RETURN(PASS);
} else {
@@ -111,7 +109,7 @@ XMYSQLND_METHOD(mysqlx_sql_result_iterator, \
next)(zend_object_iterator * iter) {
iterator->row_num++;
} else {
- iterator->usable = FALSE;
+ iterator->usable = false;
}
}
DBG_VOID_RETURN;
@@ -123,15 +121,15 @@ XMYSQLND_METHOD(mysqlx_sql_result_iterator, \
rewind)(zend_object_iterator * iter) st_mysqlx_sql_result_iterator* iterator = \
(st_mysqlx_sql_result_iterator*) iter; \
DBG_ENTER("mysqlx_sql_result_iterator::rewind"); if (iterator->result && \
iterator->usable) {
- iterator->started = FALSE;
+ iterator->started = false;
iterator->row_num = 0;
if (PASS == iterator->result->m.rewind(iterator->result) &&
PASS == XMYSQLND_METHOD(mysqlx_sql_result_iterator, fetch_current_data)(iter))
{
- iterator->usable = TRUE;
- iterator->started = TRUE;
+ iterator->usable = true;
+ iterator->started = true;
} else {
- iterator->usable = FALSE;
+ iterator->usable = false;
}
// XMYSQLND_METHOD(mysqlx_sql_result_iterator, next)(iter);
DBG_INF_FMT("usable=%s started=%s row_num=%u", iterator->usable? "TRUE":"FALSE", \
iterator->started? "TRUE":"FALSE", iterator->row_num);
diff --git a/util/string_utils.cc b/util/string_utils.cc
index 7f2e2c81..d6e8cc3a 100644
--- a/util/string_utils.cc
+++ b/util/string_utils.cc
@@ -58,24 +58,8 @@ strings to_strings(zval* zvals, int count)
return strings;
}
-zend_string* to_zend_string(const char* str)
-{
- return zend_string_init(str, strlen(str), 0);
-}
-
-zend_string* to_zend_string(const string& str)
-{
- return zend_string_init(str.c_str(), str.length(), 0);
-}
-
-zend_string* to_zend_string(formatter& fmt)
-{
- const string& str{ fmt.str() };
- return to_zend_string(str);
-}
-
string
-escape_identifier( const string& identifier ) {
+escape_identifier( const string_view& identifier ) {
util::stringstream result;
result << '`';
for( const auto& ch : identifier ) {
diff --git a/util/string_utils.h b/util/string_utils.h
index 14e355b5..94c98f3a 100644
--- a/util/string_utils.h
+++ b/util/string_utils.h
@@ -125,16 +125,12 @@ strings to_strings(zval* zvals, int count, Pred pred)
return strings;
}
-zend_string* to_zend_string(const char* str);
-zend_string* to_zend_string(const string& str);
-zend_string* to_zend_string(formatter& fmt);
-
//------------------------------------------------------------------------------
/*
* Escape an identifier name adding '`' everywhere needed
*/
-string escape_identifier( const string& identifier );
+string escape_identifier( const string_view& identifier );
template<size_t Length>
st_mysqlnd_string literal_to_mysqlnd_str(const char (&literal)[Length])
diff --git a/util/zend_utils.cc b/util/zend_utils.cc
index e7e671fd..9aaf4626 100644
--- a/util/zend_utils.cc
+++ b/util/zend_utils.cc
@@ -19,6 +19,7 @@
#include "mysqlnd_api.h"
#include "zend_utils.h"
#include "string_utils.h"
+#include "value.h"
namespace mysqlx {
@@ -64,17 +65,15 @@ void free_error_info_list(
// -----------------------------------------------------------------
-bool is_module_loaded(const char* module_name)
+bool is_module_loaded(const string_view& module_name)
{
- zend_string* module_zname{ to_zend_string(module_name) };
- const bool is_loaded{ zend_hash_exists(&module_registry, module_zname) ? true : \
false };
- zend_string_release(module_zname);
- return is_loaded;
+ zvalue modules(&module_registry);
+ return modules.contains(module_name);
}
bool is_openssl_loaded()
{
- const char* Openssl_module_name{ "openssl" };
+ constexpr string_view Openssl_module_name{ "openssl" };
return is_module_loaded(Openssl_module_name);
}
diff --git a/util/zend_utils.h b/util/zend_utils.h
index dd767e1d..5994f952 100644
--- a/util/zend_utils.h
+++ b/util/zend_utils.h
@@ -19,6 +19,7 @@
#define MYSQL_XDEVAPI_UTIL_ZEND_UTILS_H
#include <utility>
+#include "strings.h"
namespace mysqlx::util::zend {
@@ -30,7 +31,7 @@ void free_error_info_list(
// ----------------
-bool is_module_loaded(const char* module_name);
+bool is_module_loaded(const string_view& module_name);
bool is_openssl_loaded();
} // namespace mysqlx::util::zend
diff --git a/xmysqlnd/xmysqlnd_session.h b/xmysqlnd/xmysqlnd_session.h
index ddbfcbb6..745bf47d 100644
--- a/xmysqlnd/xmysqlnd_session.h
+++ b/xmysqlnd/xmysqlnd_session.h
@@ -481,7 +481,7 @@ public:
/* Used only in case of non network transports */
std::string socket_path;
std::string server_host_info;
- size_t client_id;
+ uint64_t client_id;
const MYSQLND_CHARSET* charset;
/* If error packet, we use these */
MYSQLND_ERROR_INFO* error_info{nullptr};
diff --git a/xmysqlnd/xmysqlnd_stmt_execution_state.cc \
b/xmysqlnd/xmysqlnd_stmt_execution_state.cc index 73b85e91..050ba962 100644
--- a/xmysqlnd/xmysqlnd_stmt_execution_state.cc
+++ b/xmysqlnd/xmysqlnd_stmt_execution_state.cc
@@ -74,7 +74,7 @@ XMYSQLND_METHOD(xmysqlnd_stmt_execution_state, \
get_generated_ids)(const XMYSQLND }
static void
-XMYSQLND_METHOD(xmysqlnd_stmt_execution_state, \
set_affected_items_count)(XMYSQLND_STMT_EXECUTION_STATE * const state, const size_t \
value) +XMYSQLND_METHOD(xmysqlnd_stmt_execution_state, \
set_affected_items_count)(XMYSQLND_STMT_EXECUTION_STATE * const state, const uint64_t \
value) {
DBG_ENTER("xmysqlnd_stmt_execution_state::set_affected_items_count");
DBG_INF_FMT("value=" MYSQLX_LLU_SPEC, value);
@@ -83,7 +83,7 @@ XMYSQLND_METHOD(xmysqlnd_stmt_execution_state, \
set_affected_items_count)(XMYSQLN }
static void
-XMYSQLND_METHOD(xmysqlnd_stmt_execution_state, \
set_matched_items_count)(XMYSQLND_STMT_EXECUTION_STATE * const state, const size_t \
value) +XMYSQLND_METHOD(xmysqlnd_stmt_execution_state, \
set_matched_items_count)(XMYSQLND_STMT_EXECUTION_STATE * const state, const uint64_t \
value) {
DBG_ENTER("xmysqlnd_stmt_execution_state::set_matched_items_count");
DBG_INF_FMT("value=" MYSQLX_LLU_SPEC, value);
@@ -92,7 +92,7 @@ XMYSQLND_METHOD(xmysqlnd_stmt_execution_state, \
set_matched_items_count)(XMYSQLND }
static void
-XMYSQLND_METHOD(xmysqlnd_stmt_execution_state, \
set_found_items_count)(XMYSQLND_STMT_EXECUTION_STATE * const state, const size_t \
value) +XMYSQLND_METHOD(xmysqlnd_stmt_execution_state, \
set_found_items_count)(XMYSQLND_STMT_EXECUTION_STATE * const state, const uint64_t \
value) {
DBG_ENTER("xmysqlnd_stmt_execution_state::set_found_items_count");
DBG_INF_FMT("value=" MYSQLX_LLU_SPEC, value);
diff --git a/xmysqlnd/xmysqlnd_stmt_execution_state.h \
b/xmysqlnd/xmysqlnd_stmt_execution_state.h index cc2f3f61..b5b12e3e 100644
--- a/xmysqlnd/xmysqlnd_stmt_execution_state.h
+++ b/xmysqlnd/xmysqlnd_stmt_execution_state.h
@@ -36,9 +36,9 @@ typedef \
size_t (*func_xmysqlnd_stmt_execution_state__get_found_items_count)(con typedef \
uint64_t (*func_xmysqlnd_stmt_execution_state__get_last_insert_id)(const \
XMYSQLND_STMT_EXECUTION_STATE * const state); typedef const util::vector< \
util::string>* (*func_xmysqlnd_stmt_execution_state__get_generated_ids)(const \
XMYSQLND_STMT_EXECUTION_STATE * const state);
-typedef void (*func_xmysqlnd_stmt_execution_state__set_affected_items_count)(XMYSQLND_STMT_EXECUTION_STATE \
* const state, const size_t value);
-typedef void (*func_xmysqlnd_stmt_execution_state__set_matched_items_count)(XMYSQLND_STMT_EXECUTION_STATE \
* const state, const size_t value);
-typedef void (*func_xmysqlnd_stmt_execution_state__set_found_items_count)(XMYSQLND_STMT_EXECUTION_STATE \
* const state, const size_t value); +typedef \
void (*func_xmysqlnd_stmt_execution_state__set_affected_items_count)(XMYSQLND_STMT_EXECUTION_STATE \
* const state, const uint64_t value); +typedef \
void (*func_xmysqlnd_stmt_execution_state__set_matched_items_count)(XMYSQLND_STMT_EXECUTION_STATE \
* const state, const uint64_t value); +typedef \
void (*func_xmysqlnd_stmt_execution_state__set_found_items_count)(XMYSQLND_STMT_EXECUTION_STATE \
* const state, const uint64_t value); typedef \
void (*func_xmysqlnd_stmt_execution_state__set_last_insert_id)(XMYSQLND_STMT_EXECUTION_STATE \
* const state, const uint64_t value); typedef \
void (*func_xmysqlnd_stmt_execution_state__set_add_generated_doc_id)(XMYSQLND_STMT_EXECUTION_STATE \
* const state, const util::string& id);
diff --git a/xmysqlnd/xmysqlnd_wireprotocol.cc b/xmysqlnd/xmysqlnd_wireprotocol.cc
index 6eeeab2c..5c4590a5 100644
--- a/xmysqlnd/xmysqlnd_wireprotocol.cc
+++ b/xmysqlnd/xmysqlnd_wireprotocol.cc
@@ -1270,13 +1270,14 @@ enum_func_status xmysqlnd_row_time_field_to_zval( zval* zv,
DBG_INF_FMT("usecs =" MYSQLX_LLU_SPEC, useconds);
} while (0);
- auto str = util::formatter("%s%02u:%02u:%02u.%08u")
+ auto time_formatter = util::formatter("%s%02u:%02u:%02u.%08u")
% (neg ? "-" : "")
% hours
% minutes
% seconds
% useconds;
- ZVAL_NEW_STR(zv, util::to_zend_string(str));
+ util::zvalue formatted_time = time_formatter.str();
+ formatted_time.move_to(zv);
}
}
DBG_RETURN( ret );
@@ -1319,14 +1320,15 @@ enum_func_status xmysqlnd_row_datetime_field_to_zval( zval* \
zv, DBG_INF_FMT("usecs =" MYSQLX_LLU_SPEC, useconds);
} while (0);
- auto str = util::formatter("%04u-%02u-%02u %02u:%02u:%02u")
+ auto datetime_formatter = util::formatter("%04u-%02u-%02u %02u:%02u:%02u")
% year
% month
% day
% hours
% minutes
% seconds;
- ZVAL_NEW_STR(zv, util::to_zend_string(str));
+ util::zvalue formatted_datetime = datetime_formatter.str();
+ formatted_datetime.move_to(zv);
}
}
DBG_RETURN( ret );
@@ -1363,11 +1365,12 @@ enum_func_status xmysqlnd_row_date_field_to_zval(
DBG_INF_FMT("day =" MYSQLX_LLU_SPEC, day);
} while (0);
- auto str = util::formatter("%04u-%02u-%02u")
+ auto date_formatter = util::formatter("%04u-%02u-%02u")
% year
% month
% day;
- ZVAL_NEW_STR(zv, util::to_zend_string(str));
+ util::zvalue formatted_date = date_formatter.str();
+ formatted_date.move_to(zv);
ret = PASS;
}
}
--
PECL CVS Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic