functions.php
PHP
Path: src/Database/Virtual/functions.php
<?php
namespace mini;
use mini\Database\Session;
use mini\Database\VirtualDatabase;
/**
* Virtual Database Feature - Global Helper Function
*
* Provides vdb() helper for accessing the VirtualDatabase via Session.
*/
// Register VirtualDatabase engine - singleton that holds registered tables
Mini::$mini->addService(VirtualDatabase::class, Lifetime::Singleton, fn() => Mini::$mini->loadServiceConfig(VirtualDatabase::class));
// Register Session - scoped per request/fiber for temp table isolation
Mini::$mini->addService(Session::class, Lifetime::Scoped, fn() => Mini::$mini->get(VirtualDatabase::class)->session());
/**
* Get a VirtualDatabase session for the current request scope
*
* Returns a Session that wraps the VirtualDatabase. Each request/fiber gets
* its own Session with isolated temporary tables. Use getEngine() to access
* the underlying VirtualDatabase for table registration.
*
* Usage:
* ```php
* // Standard querying
* vdb()->query("SELECT * FROM countries WHERE continent = ?", ['Europe']);
* vdb()->queryOne("SELECT * FROM users WHERE id = ?", [123]);
*
* // Temporary tables (isolated per request/fiber)
* vdb()->exec("CREATE TEMPORARY TABLE tmp AS SELECT * FROM users WHERE active = 1");
* vdb()->query("SELECT * FROM tmp");
*
* // Access underlying engine for table registration
* vdb()->getEngine()->registerTable('data', new ArrayTable(...$columns));
* ```
*
* @return Session The session-scoped database interface
*/
function vdb(): Session
{
return Mini::$mini->get(Session::class);
}