fix: flatten business data plan table stats
This commit is contained in:
parent
be670ad988
commit
90a0fd29f5
@ -80,10 +80,10 @@ class BusinessDataPlan extends Command
|
||||
->where('TABLE_SCHEMA', $database)
|
||||
->get(['TABLE_NAME', 'TABLE_ROWS', 'DATA_LENGTH', 'INDEX_LENGTH'])
|
||||
->mapWithKeys(static fn (object $row): array => [
|
||||
(string) $row->TABLE_NAME => [[
|
||||
(string) $row->TABLE_NAME => [
|
||||
'rows' => $row->TABLE_ROWS === null ? null : (int) $row->TABLE_ROWS,
|
||||
'bytes' => (int) $row->DATA_LENGTH + (int) $row->INDEX_LENGTH,
|
||||
]],
|
||||
],
|
||||
])->all();
|
||||
}
|
||||
}
|
||||
|
||||
43
tests/Unit/Console/BusinessDataPlanTest.php
Normal file
43
tests/Unit/Console/BusinessDataPlanTest.php
Normal file
@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Unit\Console;
|
||||
|
||||
use App\Console\Commands\BusinessDataPlan;
|
||||
use Illuminate\Database\ConnectionInterface;
|
||||
use Illuminate\Database\Query\Builder;
|
||||
use Illuminate\Support\Collection;
|
||||
use Mockery;
|
||||
use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration;
|
||||
use Modules\EcommerceFinance\Services\BusinessDataPlacement;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use ReflectionMethod;
|
||||
|
||||
class BusinessDataPlanTest extends TestCase
|
||||
{
|
||||
use MockeryPHPUnitIntegration;
|
||||
|
||||
public function test_mysql_table_statistics_are_keyed_by_their_flat_row_shape(): void
|
||||
{
|
||||
$connection = Mockery::mock(ConnectionInterface::class);
|
||||
$query = Mockery::mock(Builder::class);
|
||||
$placements = Mockery::mock(BusinessDataPlacement::class);
|
||||
|
||||
$placements->shouldReceive('connection')->once()->andReturn($connection);
|
||||
$connection->shouldReceive('getDriverName')->once()->andReturn('mysql');
|
||||
$connection->shouldReceive('getDatabaseName')->once()->andReturn('caiwu_business_mirror');
|
||||
$connection->shouldReceive('table')->once()->with('information_schema.TABLES')->andReturn($query);
|
||||
$query->shouldReceive('where')->once()->with('TABLE_SCHEMA', 'caiwu_business_mirror')->andReturnSelf();
|
||||
$query->shouldReceive('get')->once()->with(['TABLE_NAME', 'TABLE_ROWS', 'DATA_LENGTH', 'INDEX_LENGTH'])
|
||||
->andReturn(new Collection([(object) [
|
||||
'TABLE_NAME' => 'fact_rows',
|
||||
'TABLE_ROWS' => 123,
|
||||
'DATA_LENGTH' => 4096,
|
||||
'INDEX_LENGTH' => 1024,
|
||||
]]));
|
||||
|
||||
$method = new ReflectionMethod(BusinessDataPlan::class, 'tableSizes');
|
||||
$sizes = $method->invoke(new BusinessDataPlan(), $placements);
|
||||
|
||||
$this->assertSame(['rows' => 123, 'bytes' => 5120], $sizes['fact_rows']);
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user