Skip to content

Commit 8ef1211

Browse files
authored
Merge pull request #2 from bavix/develop
first version
2 parents 43bd2e8 + df0e98d commit 8ef1211

File tree

10 files changed

+128
-102
lines changed

10 files changed

+128
-102
lines changed

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ Bavix\LaravelClickHouse\ClickHouseServiceProvider::class,
2121
And add new connection into your config/database.php file. Something like this:
2222
```php
2323
'connections' => [
24-
'clickhouse' => [
25-
'driver' => 'clickhouse-ext',
24+
'bavix::clickhouse' => [
25+
'driver' => 'bavix::clickhouse',
2626
'host' => '',
2727
'port' => '',
2828
'database' => '',
@@ -38,8 +38,8 @@ And add new connection into your config/database.php file. Something like this:
3838
Or like this, if clickhouse runs in cluster
3939
```php
4040
'connections' => [
41-
'clickhouse' => [
42-
'driver' => 'clickhouse-ext',
41+
'bavix::clickhouse' => [
42+
'driver' => 'bavix::clickhouse',
4343
'cluster' => [
4444
'server-1' => [
4545
'host' => '',

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
"require": {
1111
"php": ">=7.2",
1212
"laravel/framework": "^6.0|^7.0",
13-
"the-tinderbox/clickhouse-builder": "^3.0"
13+
"the-tinderbox/clickhouse-builder": "^3.0",
14+
"ext-json": "*"
1415
},
1516
"require-dev": {
1617
"infection/infection": "0.15.*|0.16.*",

src/ClickHouseServiceProvider.php

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,34 @@
44

55
namespace Bavix\LaravelClickHouse;
66

7-
use Illuminate\Support\ServiceProvider;
87
use Illuminate\Database\DatabaseManager;
8+
use Illuminate\Support\ServiceProvider;
99
use Bavix\LaravelClickHouse\Database\Connection;
1010
use Bavix\LaravelClickHouse\Database\Eloquent\Model;
1111

1212
class ClickHouseServiceProvider extends ServiceProvider
1313
{
1414
/**
1515
* @return void
16+
* @throws
1617
*/
1718
public function boot(): void
1819
{
19-
$this->app->resolving('db', function ($db) {
20-
$db->extend('clickhouse-ext', function ($config, $name) {
21-
$config['name'] = $name;
22-
$connection = new Connection($config);
23-
if ($this->app->bound('events')) {
24-
$connection->setEventDispatcher($this->app['events']);
25-
}
20+
Model::setConnectionResolver($this->app['db']);
21+
Model::setEventDispatcher($this->app['events']);
22+
}
2623

27-
return $connection;
24+
/**
25+
* @return void
26+
*/
27+
public function register(): void
28+
{
29+
$this->app->resolving('db', static function (DatabaseManager $db) {
30+
$db->extend('bavix::clickhouse', static function ($config, $name) {
31+
return new Connection(\array_merge($config, [
32+
'name' => $name,
33+
]));
2834
});
29-
30-
Model::setConnectionResolver($db);
3135
});
3236
}
3337
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace Bavix\LaravelClickHouse\Database\Eloquent\Concerns;
4+
5+
trait Common
6+
{
7+
8+
/**
9+
* Save the model to the database.
10+
*
11+
* @param array $options
12+
* @return bool
13+
*/
14+
public function save(array $options = []): bool
15+
{
16+
return static::insert($this->toArray());
17+
}
18+
19+
}

src/Database/Eloquent/Model.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@
2222
use Bavix\LaravelClickHouse\Database\Query\Builder as QueryBuilder;
2323

2424
/**
25-
* @mixin \Eloquent
25+
* Class Model
26+
* @package Bavix\LaravelClickHouse\Database\Eloquent
2627
*/
2728
abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializable
2829
{
2930
use Concerns\HasAttributes,
31+
Concerns\Common,
3032
HasEvents,
3133
HasRelationships,
3234
HidesAttributes,
@@ -37,7 +39,7 @@ abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializab
3739
*
3840
* @var string
3941
*/
40-
protected $connection = 'clickhouse';
42+
protected $connection = 'bavix::clickhouse';
4143

4244
/**
4345
* The table associated with the model.
@@ -426,7 +428,7 @@ public function setConnection(string $name)
426428
*/
427429
public static function resolveConnection(string $connection = null)
428430
{
429-
return static::$resolver->connection($connection);
431+
return static::getConnectionResolver()->connection($connection);
430432
}
431433

432434
/**

tests/Unit/Database/ConnectionTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,6 @@ public function testQuery(): void
1818
'database' => 'default',
1919
]);
2020

21-
$this->assertInstanceOf(Builder::class, $connection->query());
21+
self::assertInstanceOf(Builder::class, $connection->query());
2222
}
2323
}

tests/Unit/Database/Eloquent/BuilderTest.php

Lines changed: 39 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -49,18 +49,18 @@ public function testWhereKey(): void
4949

5050
$wheres = $this->builder->getQuery()->getWheres();
5151

52-
$this->assertCount(1, $wheres);
52+
self::assertCount(1, $wheres);
5353
/** @var TwoElementsLogicExpression $expression */
5454
$expression = $wheres[0];
55-
$this->assertInstanceOf(TwoElementsLogicExpression::class, $expression);
55+
self::assertInstanceOf(TwoElementsLogicExpression::class, $expression);
5656
/** @var Identifier $first */
5757
$first = $expression->getFirstElement();
58-
$this->assertInstanceOf(Identifier::class, $first);
59-
$this->assertSame($this->model->getTable().'.'.$this->model->getKeyName(), (string) $first);
60-
$this->assertSame($id, $expression->getSecondElement());
58+
self::assertInstanceOf(Identifier::class, $first);
59+
self::assertSame($this->model->getTable().'.'.$this->model->getKeyName(), (string) $first);
60+
self::assertSame($id, $expression->getSecondElement());
6161
$operator = $expression->getOperator();
62-
$this->assertInstanceOf(Operator::class, $operator);
63-
$this->assertSame('=', $operator->getValue());
62+
self::assertInstanceOf(Operator::class, $operator);
63+
self::assertSame('=', $operator->getValue());
6464
}
6565

6666
public function testWhereKeyNot(): void
@@ -71,20 +71,20 @@ public function testWhereKeyNot(): void
7171

7272
$wheres = $this->builder->getQuery()->getWheres();
7373

74-
$this->assertCount(1, $wheres);
74+
self::assertCount(1, $wheres);
7575
/** @var TwoElementsLogicExpression $expression */
7676
$expression = $wheres[0];
77-
$this->assertInstanceOf(TwoElementsLogicExpression::class, $expression);
77+
self::assertInstanceOf(TwoElementsLogicExpression::class, $expression);
7878
/** @var Identifier $first */
7979
$first = $expression->getFirstElement();
80-
$this->assertInstanceOf(Identifier::class, $first);
81-
$this->assertSame($this->model->getTable().'.'.$this->model->getKeyName(), (string) $first);
80+
self::assertInstanceOf(Identifier::class, $first);
81+
self::assertSame($this->model->getTable().'.'.$this->model->getKeyName(), (string) $first);
8282
/** @var Tuple $second */
8383
$second = $expression->getSecondElement();
84-
$this->assertSame($ids, $second->getElements());
84+
self::assertSame($ids, $second->getElements());
8585
$operator = $expression->getOperator();
86-
$this->assertInstanceOf(Operator::class, $operator);
87-
$this->assertSame('NOT IN', $operator->getValue());
86+
self::assertInstanceOf(Operator::class, $operator);
87+
self::assertSame('NOT IN', $operator->getValue());
8888
}
8989

9090
public function testWhereSimple(): void
@@ -94,18 +94,18 @@ public function testWhereSimple(): void
9494

9595
$wheres = $this->builder->getQuery()->getWheres();
9696

97-
$this->assertCount(1, $wheres);
97+
self::assertCount(1, $wheres);
9898
/** @var TwoElementsLogicExpression $expression */
9999
$expression = $wheres[0];
100-
$this->assertInstanceOf(TwoElementsLogicExpression::class, $expression);
100+
self::assertInstanceOf(TwoElementsLogicExpression::class, $expression);
101101
/** @var Identifier $first */
102102
$first = $expression->getFirstElement();
103-
$this->assertInstanceOf(Identifier::class, $first);
104-
$this->assertSame('date_column', (string) $first);
105-
$this->assertSame($date, $expression->getSecondElement());
103+
self::assertInstanceOf(Identifier::class, $first);
104+
self::assertSame('date_column', (string) $first);
105+
self::assertSame($date, $expression->getSecondElement());
106106
$operator = $expression->getOperator();
107-
$this->assertInstanceOf(Operator::class, $operator);
108-
$this->assertSame('>', $operator->getValue());
107+
self::assertInstanceOf(Operator::class, $operator);
108+
self::assertSame('>', $operator->getValue());
109109
}
110110

111111
public function testWhereClosure(): void
@@ -125,7 +125,7 @@ public function testWhereClosure(): void
125125

126126
$sql = $this->builder->toSql();
127127

128-
$this->assertSame('SELECT * FROM `test_table` WHERE (`id` < 10 OR `id` = 15) AND `status` = 100', $sql);
128+
self::assertSame('SELECT * FROM `test_table` WHERE (`id` < 10 OR `id` = 15) AND `status` = 100', $sql);
129129
}
130130

131131
public function testOrWhere(): void
@@ -136,7 +136,7 @@ public function testOrWhere(): void
136136
$this->builder->orWhere('date_column', '>', $date);
137137

138138
$sql = $this->builder->toSql();
139-
$this->assertSame(
139+
self::assertSame(
140140
'SELECT * FROM `test_table` WHERE `id` = '.$id.' OR `date_column` > \''.$date.'\'',
141141
$sql
142142
);
@@ -159,9 +159,9 @@ public function testFind(): void
159159

160160
$model = $this->builder->find($id);
161161

162-
$this->assertInstanceOf(EloquentModelCastingTest::class, $model);
163-
$this->assertSame($id, $model->id);
164-
$this->assertSame($stringAttribute, $model->stringAttribute);
162+
self::assertInstanceOf(EloquentModelCastingTest::class, $model);
163+
self::assertSame($id, $model->id);
164+
self::assertSame($stringAttribute, $model->stringAttribute);
165165
}
166166

167167
public function testFindMany(): void
@@ -184,8 +184,8 @@ public function testFindMany(): void
184184

185185
$models = $this->builder->findMany($ids->toArray());
186186

187-
$this->assertInstanceOf(Collection::class, $models);
188-
$this->assertCount($ids->count(), $models);
187+
self::assertInstanceOf(Collection::class, $models);
188+
self::assertCount($ids->count(), $models);
189189
}
190190

191191
public function testFindOrFail(): void
@@ -234,18 +234,18 @@ public function testGet(): void
234234

235235
$collection = $this->builder->get();
236236

237-
$this->assertInstanceOf(Collection::class, $collection);
238-
$this->assertCount(1, $collection);
237+
self::assertInstanceOf(Collection::class, $collection);
238+
self::assertCount(1, $collection);
239239

240240
$retrievedModel = $collection[0];
241-
$this->assertSame($connectionResultRow['id'], $retrievedModel->id);
242-
$this->assertSame((int) $connectionResultRow['intAttribute'], $retrievedModel->intAttribute);
243-
$this->assertSame((float) $connectionResultRow['floatAttribute'], $retrievedModel->floatAttribute);
244-
$this->assertSame((string) $connectionResultRow['stringAttribute'], $retrievedModel->stringAttribute);
245-
$this->assertTrue($retrievedModel->boolAttribute);
246-
$this->assertTrue($retrievedModel->booleanAttribute);
247-
$this->assertEquals(json_decode($connectionResultRow['objectAttribute']), $retrievedModel->objectAttribute);
248-
$this->assertSame(json_decode($connectionResultRow['arrayAttribute'], true), $retrievedModel->arrayAttribute);
249-
$this->assertSame($connectionResultRow['arrayAttribute'], $retrievedModel->jsonAttribute);
241+
self::assertSame($connectionResultRow['id'], $retrievedModel->id);
242+
self::assertSame((int) $connectionResultRow['intAttribute'], $retrievedModel->intAttribute);
243+
self::assertSame((float) $connectionResultRow['floatAttribute'], $retrievedModel->floatAttribute);
244+
self::assertSame((string) $connectionResultRow['stringAttribute'], $retrievedModel->stringAttribute);
245+
self::assertTrue($retrievedModel->boolAttribute);
246+
self::assertTrue($retrievedModel->booleanAttribute);
247+
self::assertEquals(json_decode($connectionResultRow['objectAttribute']), $retrievedModel->objectAttribute);
248+
self::assertSame(json_decode($connectionResultRow['arrayAttribute'], true), $retrievedModel->arrayAttribute);
249+
self::assertSame($connectionResultRow['arrayAttribute'], $retrievedModel->jsonAttribute);
250250
}
251251
}

tests/Unit/Database/Eloquent/CollectionTest.php

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,13 @@ public function testMapModelToModel(): void
5858
return $model;
5959
});
6060

61-
$this->assertInstanceOf(Collection::class, $models);
62-
$this->assertCount($connectionResult->count(), $models);
61+
self::assertInstanceOf(Collection::class, $models);
62+
self::assertCount($connectionResult->count(), $models);
6363

6464
$models->each(function (EloquentModelCastingTest $model, int $key) use ($now) {
65-
$this->assertSame($key + 1, $model->id);
66-
$this->assertInstanceOf(Carbon::class, $model->datetimeAttribute);
67-
$this->assertSame($now->toDateTimeString(), $model->datetimeAttribute->toDateTimeString());
65+
self::assertSame($key + 1, $model->id);
66+
self::assertInstanceOf(Carbon::class, $model->datetimeAttribute);
67+
self::assertSame($now->toDateTimeString(), $model->datetimeAttribute->toDateTimeString());
6868
});
6969
}
7070

@@ -89,13 +89,13 @@ public function testMapModelToArray(): void
8989
];
9090
});
9191

92-
$this->assertInstanceOf(\Illuminate\Support\Collection::class, $collection);
93-
$this->assertCount($connectionResult->count(), $collection);
92+
self::assertInstanceOf(\Illuminate\Support\Collection::class, $collection);
93+
self::assertCount($connectionResult->count(), $collection);
9494

9595
$collection->each(function (array $row, int $key) use ($now) {
96-
$this->assertSame($key + 1, $row['id']);
97-
$this->assertInstanceOf(Carbon::class, $row['datetimeAttribute']);
98-
$this->assertSame($now->toDateTimeString(), $row['datetimeAttribute']->toDateTimeString());
96+
self::assertSame($key + 1, $row['id']);
97+
self::assertInstanceOf(Carbon::class, $row['datetimeAttribute']);
98+
self::assertSame($now->toDateTimeString(), $row['datetimeAttribute']->toDateTimeString());
9999
});
100100
}
101101

@@ -117,10 +117,10 @@ public function testFind($key): void
117117
$found = EloquentModelCastingTest::all()->find($key);
118118

119119
if (is_array($key)) {
120-
$this->assertInstanceOf(Collection::class, $found);
121-
$this->assertCount(count($key), $found);
120+
self::assertInstanceOf(Collection::class, $found);
121+
self::assertCount(count($key), $found);
122122
} else {
123-
$this->assertInstanceOf(EloquentModelCastingTest::class, $found);
123+
self::assertInstanceOf(EloquentModelCastingTest::class, $found);
124124
}
125125
}
126126

@@ -148,7 +148,7 @@ public function testContains(bool $expected, $key, $operator = null, $value = nu
148148
$contains = EloquentModelCastingTest::all()->contains($key);
149149
}
150150

151-
$this->assertSame($expected, $contains);
151+
self::assertSame($expected, $contains);
152152
}
153153

154154
public function testGet(): void
@@ -167,13 +167,13 @@ public function testGet(): void
167167

168168
$models = EloquentModelCastingTest::all();
169169

170-
$this->assertInstanceOf(Collection::class, $models);
171-
$this->assertCount($connectionResult->count(), $models);
170+
self::assertInstanceOf(Collection::class, $models);
171+
self::assertCount($connectionResult->count(), $models);
172172
$models = $models->map(function (EloquentModelCastingTest $model) {
173173
return $model->toArray();
174174
});
175175

176-
$this->assertSame(
176+
self::assertSame(
177177
$connectionResult
178178
->map(function (array $row) {
179179
$row['floatAttribute'] = (float) $row['floatAttribute'];

0 commit comments

Comments
 (0)