Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 21 additions & 6 deletions phpstan.baseline.neon
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,6 @@ parameters:
count: 5
path: src/Database/Eloquent/Builder.php

-
message: "#^Call to an undefined method Bavix\\\\LaravelClickHouse\\\\Database\\\\Eloquent\\\\Builder\\:\\:forPage\\(\\)\\.$#"
count: 1
path: src/Database/Eloquent/Builder.php

-
message: "#^Call to an undefined method Bavix\\\\LaravelClickHouse\\\\Database\\\\Eloquent\\\\Builder\\:\\:forPageAfterId\\(\\)\\.$#"
count: 1
Expand Down Expand Up @@ -290,6 +285,11 @@ parameters:
count: 1
path: src/Database/Eloquent/Builder.php

-
message: "#^Method Bavix\\\\LaravelClickHouse\\\\Database\\\\Query\\\\Builder\\:\\:get\\(\\) invoked with 1 parameter, 0 required\\.$#"
count: 1
path: src/Database/Eloquent/Builder.php

-
message: "#^PHPDoc tag @param for parameter \\$query with type Illuminate\\\\Database\\\\Query\\\\Builder is incompatible with native type Bavix\\\\LaravelClickHouse\\\\Database\\\\Query\\\\Builder\\.$#"
count: 2
Expand Down Expand Up @@ -912,7 +912,7 @@ parameters:

-
message: "#^Cannot cast mixed to int\\.$#"
count: 1
count: 2
path: src/Database/Query/Builder.php

-
Expand All @@ -925,11 +925,21 @@ parameters:
count: 1
path: src/Database/Query/Builder.php

-
message: "#^Method Bavix\\\\LaravelClickHouse\\\\Database\\\\Query\\\\Builder\\:\\:forPage\\(\\) should return \\$this\\(Bavix\\\\LaravelClickHouse\\\\Database\\\\Query\\\\Builder\\) but returns static\\(Bavix\\\\LaravelClickHouse\\\\Database\\\\Query\\\\Builder\\)\\.$#"
count: 1
path: src/Database/Query/Builder.php

-
message: "#^Method Bavix\\\\LaravelClickHouse\\\\Database\\\\Query\\\\Builder\\:\\:get\\(\\) return type with generic class Illuminate\\\\Support\\\\Collection does not specify its types\\: TKey, TValue$#"
count: 1
path: src/Database/Query/Builder.php

-
message: "#^Method Bavix\\\\LaravelClickHouse\\\\Database\\\\Query\\\\Builder\\:\\:getCountForPagination\\(\\) has no return type specified\\.$#"
count: 1
path: src/Database/Query/Builder.php

-
message: "#^Method Bavix\\\\LaravelClickHouse\\\\Database\\\\Query\\\\Builder\\:\\:insert\\(\\) has parameter \\$values with no value type specified in iterable type array\\.$#"
count: 1
Expand All @@ -950,6 +960,11 @@ parameters:
count: 1
path: src/Database/Query/Builder.php

-
message: "#^Parameter \\#1 \\$table of method Tinderbox\\\\ClickhouseBuilder\\\\Integrations\\\\Laravel\\\\Connection\\:\\:table\\(\\) expects Closure\\|string\\|Tinderbox\\\\ClickhouseBuilder\\\\Integrations\\\\Laravel\\\\Builder, static\\(Bavix\\\\LaravelClickHouse\\\\Database\\\\Query\\\\Builder\\) given\\.$#"
count: 1
path: src/Database/Query/Builder.php

-
message: "#^Property Bavix\\\\LaravelClickHouse\\\\Database\\\\Query\\\\Builder\\:\\:\\$connection has no type specified\\.$#"
count: 1
Expand Down
12 changes: 6 additions & 6 deletions phpunit.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,17 @@
</report>
</coverage>
<testsuites>
<testsuite name="Wallet WarmUp Suite">
<testsuite name="Clickhouse Suite">
<directory>tests</directory>
</testsuite>
</testsuites>
<logging/>
<php>
<env name="DB_CONNECTION" value="testing"/>
<env name="DB_DATABASE" value="wallet"/>
<env name="DB_USERNAME" value="root"/>
<env name="DB_PASSWORD" value="wallet"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="CLICKHOUSE_HOST" value="localhost"/>
<env name="CLICKHOUSE_PORT" value="8123"/>
<env name="CLICKHOUSE_DATABASE" value="default"/>
<env name="CLICKHOUSE_USERNAME" value="default"/>
<env name="CLICKHOUSE_PASSWORD" value=""/>
</php>
<source>
<include>
Expand Down
28 changes: 28 additions & 0 deletions src/Database/Query/Builder.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use Illuminate\Support\Traits\Macroable;
use Tinderbox\Clickhouse\Common\Format;
use Tinderbox\ClickhouseBuilder\Query\BaseBuilder;
use Tinderbox\ClickhouseBuilder\Query\Expression;
use Tinderbox\ClickhouseBuilder\Query\Grammar;

class Builder extends BaseBuilder
Expand Down Expand Up @@ -125,6 +126,33 @@ public function insert(array $values): bool
return $this->connection->insert($this->grammar->compileInsert($this, $values), Arr::flatten($values));
}

public function getCountForPagination()
{
return (int) $this->getConnection()
->table(
$this
->cloneWithout([
'columns' => [],
'orders' => [],
'limit' => null,
])
->select(new Expression('1')), null
)
->count();
}

/**
* Set the limit and offset for a given page.
*
* @param int $page
* @param int $perPage
* @return $this
*/
public function forPage($page, $perPage = 15)
{
return $this->limit($perPage, ($page - 1) * $perPage);
}

public function getConnection(): Connection
{
return $this->connection;
Expand Down
17 changes: 17 additions & 0 deletions tests/FirstTableEntry.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?php

declare(strict_types=1);

namespace Bavix\LaravelClickHouse\Tests;

use Bavix\LaravelClickHouse\Database\Eloquent\Model;

class FirstTableEntry extends Model
{
/**
* @var string
*/
protected $table = 'my_first_table';

protected $fillable = ['user_id', 'message', 'timestamp', 'metric'];
}
27 changes: 27 additions & 0 deletions tests/TestCase.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

declare(strict_types=1);

namespace Bavix\LaravelClickHouse\Tests;

use Bavix\LaravelClickHouse\ClickHouseServiceProvider;

class TestCase extends \Orchestra\Testbench\TestCase
{
protected function getPackageProviders($app): array
{
return [ClickHouseServiceProvider::class];
}

protected function getEnvironmentSetUp($app): void
{
$app['config']->set('database.connections.bavix::clickhouse', [
'host' => env('CLICKHOUSE_HOST', 'localhost'),
'port' => env('CLICKHOUSE_PORT', '8123'),
'driver' => env('CLICKHOUSE_DRIVER', 'bavix::clickhouse'),
'database' => env('CLICKHOUSE_DATABASE', 'default'),
'username' => env('CLICKHOUSE_USERNAME', 'default'),
'password' => env('CLICKHOUSE_PASSWORD', ''),
]);
}
}
8 changes: 2 additions & 6 deletions tests/Unit/Database/ConnectionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

use Bavix\LaravelClickHouse\Database\Connection;
use Bavix\LaravelClickHouse\Database\Query\Builder;
use PHPUnit\Framework\TestCase;
use Bavix\LaravelClickHouse\Tests\TestCase;
use Tinderbox\Clickhouse\Exceptions\ClientException;

class ConnectionTest extends TestCase
Expand All @@ -19,11 +19,7 @@ class ConnectionTest extends TestCase
protected function setUp(): void
{
parent::setUp();
$this->connection = new Connection([
'host' => 'localhost',
'port' => '8123',
'database' => 'default',
]);
$this->connection = $this->getConnection('bavix::clickhouse');
}

public function testQuery(): void
Expand Down
48 changes: 48 additions & 0 deletions tests/Unit/Database/Eloquent/FirstTableTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php

declare(strict_types=1);

namespace Bavix\LaravelClickHouse\Tests\Unit\Database\Eloquent;

use Bavix\LaravelClickHouse\Database\Connection;
use Bavix\LaravelClickHouse\Tests\FirstTableEntry;
use Bavix\LaravelClickHouse\Tests\TestCase;

class FirstTableTest extends TestCase
{
/**
* @var Connection
*/
protected $connection;

protected function setUp(): void
{
parent::setUp();
$this->connection = $this->getConnection('bavix::clickhouse');
}

public function testPaginate(): void
{
$this->connection->statement('DROP TABLE IF EXISTS my_first_table');

$result = $this->connection->statement('CREATE TABLE my_first_table
(
user_id UInt32,
message String,
timestamp DateTime,
metric Float32
)
ENGINE = MergeTree()
PRIMARY KEY (user_id, timestamp)');
self::assertTrue($result);

self::assertTrue(FirstTableEntry::query()->insert([
'user_id' => 1,
'message' => 'hello world',
'timestamp' => new \DateTime(),
'metric' => 42,
]));

self::assertCount(1, FirstTableEntry::query()->paginate()->items());
}
}