Passed
Push — master ( 6df7c9...74bc2a )
by y
02:15
created

SQL   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 8
eloc 12
c 0
b 0
f 0
dl 0
loc 44
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A marks() 0 5 3
A slotsEqual() 0 6 2
A __construct() 0 1 1
A slots() 0 6 2
1
<?php
2
3
namespace Helix\DB;
4
5
use Countable;
6
use Helix\DB\SQL\Expression;
7
use Helix\DB\SQL\ExpressionInterface;
8
9
/**
10
 * Static helper for building SQL.
11
 *
12
 * The methods here are driver agnostic, and do not quote values.
13
 */
14
class SQL {
15
16
    /**
17
     * Returns an array of `?` placeholders.
18
     *
19
     * @param int|array|Countable $count
20
     * @return ExpressionInterface[]
21
     */
22
    public static function marks ($count): array {
23
        if (is_array($count) or $count instanceof Countable) {
24
            $count = count($count);
25
        }
26
        return array_fill(0, $count, new Expression('?'));
27
    }
28
29
    /**
30
     * Converts an array of columns to `:named` placeholders for prepared queries.
31
     *
32
     * Qualified columns are slotted as `qualifier__column` (two underscores).
33
     *
34
     * @param string[] $columns
35
     * @return string[] `["column" => ":column"]`
36
     */
37
    public static function slots (array $columns): array {
38
        $slots = [];
39
        foreach ($columns as $column) {
40
            $slots[(string)$column] = ':' . str_replace('.', '__', $column);
41
        }
42
        return $slots;
43
    }
44
45
    /**
46
     * @param string[] $columns
47
     * @return string[] `["column" => "column=:column"]`
48
     */
49
    public static function slotsEqual (array $columns): array {
50
        $slots = static::slots($columns);
51
        foreach ($slots as $column => $slot) {
52
            $slots[$column] = "{$column} = {$slot}";
53
        }
54
        return $slots;
55
    }
56
57
    final private function __construct () { }
58
}