classConnectionExecution
final class ConnectionExecution
Coordinates native connection execution with its shadow session.
Methods§
public function __construct(
private mysqli $mysqli,
?ZtdConfig $config = null,
?SessionFactory $factory = null,
)Create a shadow session for the supplied native connection.
Parameters
$mysqli | mysqli | |
$config | ?ZtdConfig | |
$factory | ?SessionFactory |
Calls 3
- new MySqlSessionFactory line 37
- new MysqliConnection line 38
- static-call ZtdConfig::default() line 38
public function native(): mysqliReturn the wrapped native connection.
Returns
mysqliTest cases 1
Called from 34
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::__get() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:148
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::__isset() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:156
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::multi_query() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:201
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::close() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:247
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::select_db() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:257
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::set_charset() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:266
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::real_escape_string() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:275
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::escape_string() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:284
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::ping() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:293
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::character_set_name() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:302
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::change_user() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:311
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::connect() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:329
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::debug() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:339
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::dump_debug_info() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:349
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::get_charset() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:358
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::get_client_info() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:369
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::get_connection_stats() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:381
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::get_server_info() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:390
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::get_warnings() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:399
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::init() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:410
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::kill() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:421
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::more_results() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:430
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::next_result() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:439
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::options() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:448
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::real_connect() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:464
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::reap_async_query() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:473
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::refresh() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:482
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::ssl_set() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:515
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::stat() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:525
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::stmt_init() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:534
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::store_result() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:544
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::thread_safe() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:553
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::use_result() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:562
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::set_opt() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:571
public function session(): SessionReturn the session shared by statements on this connection.
Returns
Test cases 14
ConnectionExecutionTest::testAutocommitCommitsShadowRowscallsConnectionExecutionTest::testBeginTransactionCreatesAShadowRollbackScopecallsConnectionExecutionTest::testCommitRetainsShadowRowsAcrossRollbackcallsConnectionExecutionTest::testRealQuerySynchronizesTransactionStatementscallsConnectionExecutionTest::testRollBackRestoresTheShadowSnapshotcallsConnectionExecutionTest::testSavepointRestoresShadowRowsOnRollbackToSavepointcallsConnectionExecutionTest::testSessionKeepsSimulatedWritesOffTheNativeConnectioncallsStatementExecutionTest::testAffectedRowsReturnsTheSimulatedCountcallsStatementExecutionTest::testExecuteDoesNotWriteThePhysicalTablecallsStatementExecutionTest::testFetchReturnsNullForAWritingStatementcallsStatementExecutionTest::testGetResultReturnsTheBufferedSelectcallsStatementExecutionTest::testNativeReturnsThePreparedStatementcallsStatementExecutionTest::testResetDiscardsTheSimulatedResultcallsStatementExecutionTest::testResultTracksSimulatedWritescalls
Called from 3
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::enableZtd() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:103
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::disableZtd() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:111
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::isZtdEnabled() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:119
public function simulatedAffectedRows(): ?intReturn the simulated count when native affected_rows must be overridden.
Returns
?intTest cases 2
Called from 1
public function prepare(
string $query,
Closure(mysqli_stmt, Session, RewritePlan): mysqli_stmt $wrap,
): mysqli_stmt|falsePrepare rewritten SQL and let the facade wrap the native statement.
Parameters
$query | string | |
$wrap | Closure(mysqli_stmt, Session, RewritePlan): mysqli_stmt |
Returns
mysqli_stmt|falseThrows
ZtdMysqliException When ZTD-specific exception occurs (wraps DatabaseException).Test cases 1
Called from 1
Calls 4
- method-call Session::isEnabled() line 74
- method-call
mysqli::prepare()line 75 - method-call Session::rewrite() line 79
- new ZtdMysqliException line 81
public function query(
string $query,
int $resultMode,
Closure(string): mysqli_result|bool $execute,
): mysqli_result|boolSynchronize transaction queries before dispatching statement execution.
Parameters
$query | string | |
$resultMode | int | |
$execute | Closure(string): mysqli_result|bool |
Returns
mysqli_result|boolTest cases 1
Called from 1
Calls 4
- method-call Session::isEnabled() line 100
- method-call
mysqli::query()line 102 - method-call Session::transactionStatement() line 105
- method-call Session::applyTransactionStatement() line 109
public function realQuery(string $query, Closure(string): mysqli_stmt|false $prepare): boolApply transaction state after successful native execution.
Parameters
$query | string | |
$prepare | Closure(string): mysqli_stmt|false |
Returns
boolTest cases 2
Called from 1
Calls 4
- method-call Session::isEnabled() line 126
- method-call
mysqli::real_query()line 127 - method-call Session::transactionStatement() line 130
- method-call Session::applyTransactionStatement() line 134
public function beginTransaction(int $flags = 0, ?string $name = null): boolSynchronize native execution with shadow transaction state.
Parameters
$flags | int | |
$name | ?string |
Returns
boolTest cases 9
ConnectionExecutionTest::testAutocommitCommitsShadowRowscallsConnectionExecutionTest::testBeginTransactionCreatesAShadowRollbackScopecallsConnectionExecutionTest::testBeginTransactionDefersTheDefaultSnapshotUntilTheFirstReadcallsConnectionExecutionTest::testCommitEndsTheNativeTransactionWithoutStartingAnothercallsConnectionExecutionTest::testCommitRetainsShadowRowsAcrossRollbackcallsConnectionExecutionTest::testReleaseSavepointRemovesTheNativeSavepointcallsConnectionExecutionTest::testRollBackEndsTheNativeTransactionWithoutStartingAnothercallsConnectionExecutionTest::testRollBackRestoresTheShadowSnapshotcallsConnectionExecutionTest::testSavepointRestoresShadowRowsOnRollbackToSavepointcalls
Called from 1
Calls 2
- method-call
mysqli::begin_transaction()line 149 - method-call Session::beginTransaction() line 151
public function commit(int $flags = 0, ?string $name = null): boolSynchronize native execution with shadow transaction state.
Parameters
$flags | int | |
$name | ?string |
Returns
boolTest cases 2
Called from 1
Calls 2
- method-call
mysqli::commit()line 162 - method-call Session::commitTransaction() line 164
public function rollBack(int $flags = 0, ?string $name = null): boolSynchronize native execution with shadow transaction state.
Parameters
$flags | int | |
$name | ?string |
Returns
boolTest cases 7
ConnectionExecutionTest::testAutocommitCommitsShadowRowscallsConnectionExecutionTest::testBeginTransactionCreatesAShadowRollbackScopecallsConnectionExecutionTest::testCommitRetainsShadowRowsAcrossRollbackcallsConnectionExecutionTest::testReleaseSavepointRemovesTheNativeSavepointcallsConnectionExecutionTest::testRollBackEndsTheNativeTransactionWithoutStartingAnothercallsConnectionExecutionTest::testRollBackRestoresTheShadowSnapshotcallsConnectionExecutionTest::testSavepointRestoresShadowRowsOnRollbackToSavepointcalls
Called from 1
Calls 2
- method-call
mysqli::rollback()line 175 - method-call Session::rollBackTransaction() line 177
public function autocommit(bool $enable): boolSynchronize native execution with shadow transaction state.
Parameters
$enable | bool |
Returns
boolTest cases 1
Called from 1
Calls 3
- method-call
mysqli::autocommit()line 188 - method-call Session::commitTransaction() line 191
- method-call Session::beginTransaction() line 193
public function releaseSavepoint(string $name): boolSynchronize native execution with shadow transaction state.
Parameters
$name | string |
Returns
boolTest cases 1
Called from 1
Calls 3
- method-call
mysqli::release_savepoint()line 205 - method-call Session::applyTransactionStatement() line 207
- static-call TransactionStatement::release() line 207
public function savepoint(string $name): boolSynchronize native execution with shadow transaction state.
Parameters
$name | string |
Returns
boolTest cases 2
Called from 1
Calls 3
- method-call
mysqli::savepoint()line 218 - method-call Session::applyTransactionStatement() line 220
- static-call TransactionStatement::savepoint() line 220
public function executeQuery<TParameter>(
string $query,
array<TParameter>|null $params,
Closure(string): mysqli_stmt|false $prepare,
Closure(mysqli_stmt): ?int $affectedRows,
): mysqli_result|boolExecute through the facade while retaining the simulated affected-row count.
Parameters
$query | string | |
$params | array<TParameter>|null | |
$prepare | Closure(string): mysqli_stmt|false | |
$affectedRows | Closure(mysqli_stmt): ?int |
Returns
mysqli_result|boolpublic function affectedRows(): intGet the affected row count from the last ZTD or regular operation.
Note: Direct property access ($this->affected_rows) is not supported because PHP's C extension property handler for mysqli takes precedence over __get when the parent constructor was not called. Use this method instead.
Returns
intPrivate surface 3§
Implementation details, listed for orientation only.
private Session $sessionprivate ?int $ztdAffectedRowCount = nullprivate mysqli $mysqliTest cases 30§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 17
ConnectionExecutionTest::testAffectedRowsUsesTheNativeCountBeforeSimulationcallsConnectionExecutionTest::testAutocommitCommitsShadowRowscallsConnectionExecutionTest::testBeginTransactionCreatesAShadowRollbackScopecallsConnectionExecutionTest::testBeginTransactionDefersTheDefaultSnapshotUntilTheFirstReadcallsConnectionExecutionTest::testCommitEndsTheNativeTransactionWithoutStartingAnothercallsConnectionExecutionTest::testCommitRetainsShadowRowsAcrossRollbackcallsConnectionExecutionTest::testExecuteQueryRetainsTheDispatchedAffectedRowCountcallsConnectionExecutionTest::testNativeReturnsTheProvidedConnectioncallsConnectionExecutionTest::testPreparePreservesTheWrappingCallbackcallsConnectionExecutionTest::testQueryPreservesFacadeDispatchcallsConnectionExecutionTest::testRealQuerySynchronizesTransactionStatementscallsConnectionExecutionTest::testReleaseSavepointRemovesTheNativeSavepointcallsConnectionExecutionTest::testRollBackEndsTheNativeTransactionWithoutStartingAnothercallsConnectionExecutionTest::testRollBackRestoresTheShadowSnapshotcallsConnectionExecutionTest::testSavepointRestoresShadowRowsOnRollbackToSavepointcallsConnectionExecutionTest::testSessionKeepsSimulatedWritesOffTheNativeConnectioncallsConnectionExecutionTest::testSimulatedAffectedRowsStartsWithoutAnOverridecalls
Other tests reaching this symbol 13
MysqliCteShadowingTestcallsMysqliForeignKeyCascadeTestcallsMysqliFullTextSearchTestcallsMysqliLoadDataTestcallsMysqliSessionFactoryInjectionTestcallsStatementExecutionTest::testAffectedRowsReturnsTheSimulatedCountcallsStatementExecutionTest::testExecuteDoesNotWriteThePhysicalTablecallsStatementExecutionTest::testFetchReturnsNullForAWritingStatementcallsStatementExecutionTest::testGetResultReturnsTheBufferedSelectcallsStatementExecutionTest::testNativeReturnsThePreparedStatementcallsStatementExecutionTest::testResetDiscardsTheSimulatedResultcallsStatementExecutionTest::testResultTracksSimulatedWritescallsZtdMysqliTestcalls
Relations§
Instantiated in 2
Method calls 49
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::enableZtd() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:103
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::disableZtd() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:111
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::isZtdEnabled() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:119
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::lastAffectedRows() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:131
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::__get() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:143
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::__get() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:148
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::__isset() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:156
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::prepare() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:168
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::query() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:180
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::real_query() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:192
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::multi_query() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:201
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::begin_transaction() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:210
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::commit() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:219
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::rollback() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:228
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::autocommit() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:237
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::close() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:247
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::select_db() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:257
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::set_charset() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:266
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::real_escape_string() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:275
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::escape_string() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:284
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::ping() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:293
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::character_set_name() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:302
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::change_user() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:311
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::connect() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:329
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::debug() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:339
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::dump_debug_info() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:349
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::get_charset() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:358
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::get_client_info() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:369
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::get_connection_stats() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:381
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::get_server_info() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:390
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::get_warnings() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:399
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::init() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:410
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::kill() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:421
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::more_results() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:430
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::next_result() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:439
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::options() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:448
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::real_connect() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:464
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::reap_async_query() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:473
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::refresh() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:482
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::release_savepoint() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:491
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::savepoint() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:500
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::ssl_set() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:515
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::stat() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:525
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::stmt_init() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:534
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::store_result() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:544
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::thread_safe() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:553
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::use_result() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:562
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::set_opt() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:571
- method-call ZtdQuery\Adapter\Mysqli\ZtdMysqli::execute_query() packages/ztd-query-mysqli-adapter/src/ZtdMysqli.php:602