Passed
Push — master ( 7b4f81...84e0ca )
by Igor
03:22
created

StreamInsert   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 58
Duplicated Lines 0 %

Test Coverage

Coverage 94.74%

Importance

Changes 0
Metric Value
wmc 5
dl 0
loc 58
ccs 18
cts 19
cp 0.9474
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A insert() 0 16 2
A __construct() 0 13 3
1
<?php
2
3
namespace ClickHouseDB\Transport;
4
5
use ClickHouseDB\Statement;
6
7
/**
8
 * Class StreamInsert
9
 * @deprecated
10
 * @package ClickHouseDB\Transport
11
 */
12
class StreamInsert
13
{
14
    /**
15
     * @var resource
16
     */
17
    private $source;
18
19
    /**
20
     * @var CurlerRequest
21
     */
22
    private $request;
23
24
    /**
25
     * @var CurlerRolling
26
     */
27
    private $curlerRolling;
28
29
    /**
30
     * @param resource $source
31
     * @param CurlerRequest $request
32
     * @param CurlerRolling|null $curlerRolling
33
     */
34 4
    public function __construct($source, CurlerRequest $request, $curlerRolling=null)
35
    {
36 4
        if (!is_resource($source)) {
37
            throw new \InvalidArgumentException('Argument $source must be resource');
38
        }
39 4
        if ($curlerRolling instanceof CurlerRolling)
40
        {
41 3
            $this->curlerRolling = $curlerRolling;
42
        } else {
43 1
            $this->curlerRolling = new CurlerRolling();
44
        }
45 4
        $this->source = $source;
46 4
        $this->request = $request;
47 4
    }
48
49
    /**
50
     * @param callable $callback function for stream read data
51
     * @return \ClickHouseDB\Statement
52
     * @throws \Exception
53
     */
54 4
    public function insert($callback)
55
    {
56
        try {
57 4
            if (!is_callable($callback)) {
58 2
                throw new \InvalidArgumentException('Argument $callback can not be called as a function');
59
            }
60
61
            //
62 2
            $this->request->header('Transfer-Encoding', 'chunked');
63 2
            $this->request->setReadFunction($callback);
64 2
            $this->curlerRolling->execOne($this->request, true);
65 2
            $statement = new Statement($this->request);
66 2
            $statement->error();
67 2
            return $statement;
68
        } finally {
69 4
            fclose($this->source);
70
        }
71
    }
72
}
73