RowsWithKeyWrapper   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 93
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 46
dl 0
loc 93
ccs 40
cts 40
cp 1
rs 10
c 0
b 0
f 0
wmc 7

5 Methods

Rating   Name   Duplication   Size   Complexity  
A getDocBlockReturnType() 0 3 1
A generateMethodBodyWithLobReturnData() 0 10 1
A getReturnTypeDeclaration() 0 3 1
A generateMethodBodyWithoutLob() 0 25 2
A generateMethodBodyWithLobFetchData() 0 22 2
1
<?php
2
declare(strict_types=1);
3
4
namespace SetBased\Stratum\MySql\Wrapper;
5
6
use SetBased\Stratum\Common\Wrapper\Helper\WrapperContext;
7
use SetBased\Stratum\MySql\Exception\MySqlDataLayerException;
8
use SetBased\Stratum\MySql\Exception\MySqlQueryErrorException;
9
10
/**
11
 * Class for generating a wrapper method for a stored procedure that selects 0 or more rows. The rows are returned as
12
 * nested arrays.
13
 */
14
class RowsWithKeyWrapper extends MysqlWrapper
15
{
16
  //--------------------------------------------------------------------------------------------------------------------
17
  /**
18
   * @inheritdoc
19 1
   */
20
  protected function generateMethodBodyWithLobFetchData(WrapperContext $context): void
21 1
  {
22
    $key = '';
23
    foreach ($context->phpStratumMetadata['designation']['columns'] as $column)
24
    {
25
      $key .= '[$new[\''.$column.'\']]';
26
    }
27
28 1
    $context->codeStore->append('$row = [];');
29
    $context->codeStore->append('$this->bindAssoc($stmt, $row);');
30 1
    $context->codeStore->append('');
31
    $context->codeStore->append('$ret = [];');
32
    $context->codeStore->append('while (($b = $stmt->fetch()))');
33
    $context->codeStore->append('{');
34
    $context->codeStore->append('$new = [];');
35
    $context->codeStore->append('foreach($row as $key => $value)');
36
    $context->codeStore->append('{');
37 1
    $context->codeStore->append('$new[$key] = $value;');
38
    $context->codeStore->append('}');
39 1
    $context->codeStore->append('$ret'.$key.' = $new;');
40
    $context->codeStore->append('}');
41 1
    $context->codeStore->append('');
42
  }
43 1
44 1
  //--------------------------------------------------------------------------------------------------------------------
45
  /**
46 1
   * @inheritdoc
47
   */
48
  protected function generateMethodBodyWithLobReturnData(WrapperContext $context): void
49 1
  {
50 1
    $this->throws(MySqlDataLayerException::class);
51 1
52 1
    $context->codeStore->append('if ($b===false)');
53 1
    $context->codeStore->append('{');
54 1
    $context->codeStore->append('throw $this->dataLayerError(\'mysqli_stmt::fetch\');');
55 1
    $context->codeStore->append('}');
56
    $context->codeStore->append('');
57
    $context->codeStore->append('return $ret;');
58
  }
59
60
  //--------------------------------------------------------------------------------------------------------------------
61
  /**
62 1
   * @inheritdoc
63
   */
64 1
  protected function generateMethodBodyWithoutLob(WrapperContext $context): void
65 1
  {
66
    $this->throws(MySqlQueryErrorException::class);
67 1
68
    $key = '';
69
    foreach ($context->phpStratumMetadata['designation']['columns'] as $column)
70 1
    {
71 1
      $key .= '[$row[\''.$column.'\']]';
72 1
    }
73 1
74 1
    $context->codeStore->append(sprintf("\$result = \$this->query('call %s(%s)');",
75 1
                                        $context->phpStratumMetadata['routine_name'],
76 1
                                        $this->getRoutineArgs($context)));
77 1
    $context->codeStore->append('$ret = [];');
78 1
    $context->codeStore->append('while (($row = $result->fetch_array(MYSQLI_ASSOC)))');
79 1
    $context->codeStore->append('{');
80 1
    $context->codeStore->append(sprintf('$ret%s = $row;', $key));
81 1
    $context->codeStore->append('}');
82 1
    $context->codeStore->append('$result->free();');
83 1
    $context->codeStore->append('if ($this->mysqli->more_results())');
84
    $context->codeStore->append('{');
85
    $context->codeStore->append('$this->mysqli->next_result();');
86
    $context->codeStore->append('}');
87
    $context->codeStore->append('');
88
    $context->codeStore->append('return $ret;');
89
  }
90 1
91
  //--------------------------------------------------------------------------------------------------------------------
92 1
  /**
93
   * @inheritdoc
94 1
   */
95 1
  protected function getDocBlockReturnType(WrapperContext $context): string
96 1
  {
97
    return 'array[]';
98
  }
99
100
  //--------------------------------------------------------------------------------------------------------------------
101
  /**
102
   * @inheritdoc
103
   */
104
  protected function getReturnTypeDeclaration(WrapperContext $context): string
105
  {
106
    return ': array';
107
  }
108
109
  //--------------------------------------------------------------------------------------------------------------------
110
}
111
112
//----------------------------------------------------------------------------------------------------------------------
113