Skip to content

Commit 3355471

Browse files
authored
Merge pull request #10 from bavix/7-method-bavixlaravelclickhousedatabasequerybuildergetcountforpagination-does-not-exist
Method Bavix\LaravelClickHouse\Database\Query\Builder::getCountForPagination does not exist
2 parents d7785de + b8c0cf9 commit 3355471

File tree

7 files changed

+149
-18
lines changed

7 files changed

+149
-18
lines changed

phpstan.baseline.neon

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,6 @@ parameters:
3535
count: 5
3636
path: src/Database/Eloquent/Builder.php
3737

38-
-
39-
message: "#^Call to an undefined method Bavix\\\\LaravelClickHouse\\\\Database\\\\Eloquent\\\\Builder\\:\\:forPage\\(\\)\\.$#"
40-
count: 1
41-
path: src/Database/Eloquent/Builder.php
42-
4338
-
4439
message: "#^Call to an undefined method Bavix\\\\LaravelClickHouse\\\\Database\\\\Eloquent\\\\Builder\\:\\:forPageAfterId\\(\\)\\.$#"
4540
count: 1
@@ -290,6 +285,11 @@ parameters:
290285
count: 1
291286
path: src/Database/Eloquent/Builder.php
292287

288+
-
289+
message: "#^Method Bavix\\\\LaravelClickHouse\\\\Database\\\\Query\\\\Builder\\:\\:get\\(\\) invoked with 1 parameter, 0 required\\.$#"
290+
count: 1
291+
path: src/Database/Eloquent/Builder.php
292+
293293
-
294294
message: "#^PHPDoc tag @param for parameter \\$query with type Illuminate\\\\Database\\\\Query\\\\Builder is incompatible with native type Bavix\\\\LaravelClickHouse\\\\Database\\\\Query\\\\Builder\\.$#"
295295
count: 2
@@ -912,7 +912,7 @@ parameters:
912912

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

918918
-
@@ -925,11 +925,21 @@ parameters:
925925
count: 1
926926
path: src/Database/Query/Builder.php
927927

928+
-
929+
message: "#^Method Bavix\\\\LaravelClickHouse\\\\Database\\\\Query\\\\Builder\\:\\:forPage\\(\\) should return \\$this\\(Bavix\\\\LaravelClickHouse\\\\Database\\\\Query\\\\Builder\\) but returns static\\(Bavix\\\\LaravelClickHouse\\\\Database\\\\Query\\\\Builder\\)\\.$#"
930+
count: 1
931+
path: src/Database/Query/Builder.php
932+
928933
-
929934
message: "#^Method Bavix\\\\LaravelClickHouse\\\\Database\\\\Query\\\\Builder\\:\\:get\\(\\) return type with generic class Illuminate\\\\Support\\\\Collection does not specify its types\\: TKey, TValue$#"
930935
count: 1
931936
path: src/Database/Query/Builder.php
932937

938+
-
939+
message: "#^Method Bavix\\\\LaravelClickHouse\\\\Database\\\\Query\\\\Builder\\:\\:getCountForPagination\\(\\) has no return type specified\\.$#"
940+
count: 1
941+
path: src/Database/Query/Builder.php
942+
933943
-
934944
message: "#^Method Bavix\\\\LaravelClickHouse\\\\Database\\\\Query\\\\Builder\\:\\:insert\\(\\) has parameter \\$values with no value type specified in iterable type array\\.$#"
935945
count: 1
@@ -950,6 +960,11 @@ parameters:
950960
count: 1
951961
path: src/Database/Query/Builder.php
952962

963+
-
964+
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\\.$#"
965+
count: 1
966+
path: src/Database/Query/Builder.php
967+
953968
-
954969
message: "#^Property Bavix\\\\LaravelClickHouse\\\\Database\\\\Query\\\\Builder\\:\\:\\$connection has no type specified\\.$#"
955970
count: 1

phpunit.xml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@
77
</report>
88
</coverage>
99
<testsuites>
10-
<testsuite name="Wallet WarmUp Suite">
10+
<testsuite name="Clickhouse Suite">
1111
<directory>tests</directory>
1212
</testsuite>
1313
</testsuites>
1414
<logging/>
1515
<php>
16-
<env name="DB_CONNECTION" value="testing"/>
17-
<env name="DB_DATABASE" value="wallet"/>
18-
<env name="DB_USERNAME" value="root"/>
19-
<env name="DB_PASSWORD" value="wallet"/>
20-
<env name="CACHE_DRIVER" value="array"/>
16+
<env name="CLICKHOUSE_HOST" value="localhost"/>
17+
<env name="CLICKHOUSE_PORT" value="8123"/>
18+
<env name="CLICKHOUSE_DATABASE" value="default"/>
19+
<env name="CLICKHOUSE_USERNAME" value="default"/>
20+
<env name="CLICKHOUSE_PASSWORD" value=""/>
2121
</php>
2222
<source>
2323
<include>

src/Database/Query/Builder.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Illuminate\Support\Traits\Macroable;
1111
use Tinderbox\Clickhouse\Common\Format;
1212
use Tinderbox\ClickhouseBuilder\Query\BaseBuilder;
13+
use Tinderbox\ClickhouseBuilder\Query\Expression;
1314
use Tinderbox\ClickhouseBuilder\Query\Grammar;
1415

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

129+
public function getCountForPagination()
130+
{
131+
return (int) $this->getConnection()
132+
->table(
133+
$this
134+
->cloneWithout([
135+
'columns' => [],
136+
'orders' => [],
137+
'limit' => null,
138+
])
139+
->select(new Expression('1')), null
140+
)
141+
->count();
142+
}
143+
144+
/**
145+
* Set the limit and offset for a given page.
146+
*
147+
* @param int $page
148+
* @param int $perPage
149+
* @return $this
150+
*/
151+
public function forPage($page, $perPage = 15)
152+
{
153+
return $this->limit($perPage, ($page - 1) * $perPage);
154+
}
155+
128156
public function getConnection(): Connection
129157
{
130158
return $this->connection;

tests/FirstTableEntry.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Bavix\LaravelClickHouse\Tests;
6+
7+
use Bavix\LaravelClickHouse\Database\Eloquent\Model;
8+
9+
class FirstTableEntry extends Model
10+
{
11+
/**
12+
* @var string
13+
*/
14+
protected $table = 'my_first_table';
15+
16+
protected $fillable = ['user_id', 'message', 'timestamp', 'metric'];
17+
}

tests/TestCase.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Bavix\LaravelClickHouse\Tests;
6+
7+
use Bavix\LaravelClickHouse\ClickHouseServiceProvider;
8+
9+
class TestCase extends \Orchestra\Testbench\TestCase
10+
{
11+
protected function getPackageProviders($app): array
12+
{
13+
return [ClickHouseServiceProvider::class];
14+
}
15+
16+
protected function getEnvironmentSetUp($app): void
17+
{
18+
$app['config']->set('database.connections.bavix::clickhouse', [
19+
'host' => env('CLICKHOUSE_HOST', 'localhost'),
20+
'port' => env('CLICKHOUSE_PORT', '8123'),
21+
'driver' => env('CLICKHOUSE_DRIVER', 'bavix::clickhouse'),
22+
'database' => env('CLICKHOUSE_DATABASE', 'default'),
23+
'username' => env('CLICKHOUSE_USERNAME', 'default'),
24+
'password' => env('CLICKHOUSE_PASSWORD', ''),
25+
]);
26+
}
27+
}

tests/Unit/Database/ConnectionTest.php

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
use Bavix\LaravelClickHouse\Database\Connection;
88
use Bavix\LaravelClickHouse\Database\Query\Builder;
9-
use PHPUnit\Framework\TestCase;
9+
use Bavix\LaravelClickHouse\Tests\TestCase;
1010
use Tinderbox\Clickhouse\Exceptions\ClientException;
1111

1212
class ConnectionTest extends TestCase
@@ -19,11 +19,7 @@ class ConnectionTest extends TestCase
1919
protected function setUp(): void
2020
{
2121
parent::setUp();
22-
$this->connection = new Connection([
23-
'host' => 'localhost',
24-
'port' => '8123',
25-
'database' => 'default',
26-
]);
22+
$this->connection = $this->getConnection('bavix::clickhouse');
2723
}
2824

2925
public function testQuery(): void
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Bavix\LaravelClickHouse\Tests\Unit\Database\Eloquent;
6+
7+
use Bavix\LaravelClickHouse\Database\Connection;
8+
use Bavix\LaravelClickHouse\Tests\FirstTableEntry;
9+
use Bavix\LaravelClickHouse\Tests\TestCase;
10+
11+
class FirstTableTest extends TestCase
12+
{
13+
/**
14+
* @var Connection
15+
*/
16+
protected $connection;
17+
18+
protected function setUp(): void
19+
{
20+
parent::setUp();
21+
$this->connection = $this->getConnection('bavix::clickhouse');
22+
}
23+
24+
public function testPaginate(): void
25+
{
26+
$this->connection->statement('DROP TABLE IF EXISTS my_first_table');
27+
28+
$result = $this->connection->statement('CREATE TABLE my_first_table
29+
(
30+
user_id UInt32,
31+
message String,
32+
timestamp DateTime,
33+
metric Float32
34+
)
35+
ENGINE = MergeTree()
36+
PRIMARY KEY (user_id, timestamp)');
37+
self::assertTrue($result);
38+
39+
self::assertTrue(FirstTableEntry::query()->insert([
40+
'user_id' => 1,
41+
'message' => 'hello world',
42+
'timestamp' => new \DateTime(),
43+
'metric' => 42,
44+
]));
45+
46+
self::assertCount(1, FirstTableEntry::query()->paginate()->items());
47+
}
48+
}

0 commit comments

Comments
 (0)