/var/www/hkosl.com/demo_google/application/vendor/illuminate/database/Grammar.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
<?php

namespace Illuminate\Database;

use 
Illuminate\Database\Query\Expression;

abstract class 
Grammar
{
    
/**
     * The grammar table prefix.
     *
     * @var string
     */
    
protected $tablePrefix '';

    
/**
     * Wrap an array of values.
     *
     * @param  array  $values
     * @return array
     */
    
public function wrapArray(array $values)
    {
        return 
array_map([$this'wrap'], $values);
    }

    
/**
     * Wrap a table in keyword identifiers.
     *
     * @param  \Illuminate\Database\Query\Expression|string  $table
     * @return string
     */
    
public function wrapTable($table)
    {
        if (! 
$this->isExpression($table)) {
            return 
$this->wrap($this->tablePrefix.$tabletrue);
        }

        return 
$this->getValue($table);
    }

    
/**
     * Wrap a value in keyword identifiers.
     *
     * @param  \Illuminate\Database\Query\Expression|string  $value
     * @param  bool    $prefixAlias
     * @return string
     */
    
public function wrap($value$prefixAlias false)
    {
        if (
$this->isExpression($value)) {
            return 
$this->getValue($value);
        }

        
// If the value being wrapped has a column alias we will need to separate out
        // the pieces so we can wrap each of the segments of the expression on it
        // own, and then joins them both back together with the "as" connector.
        
if (strpos(strtolower($value), ' as ') !== false) {
            return 
$this->wrapAliasedValue($value$prefixAlias);
        }

        return 
$this->wrapSegments(explode('.'$value));
    }

    
/**
     * Wrap a value that has an alias.
     *
     * @param  string  $value
     * @param  bool  $prefixAlias
     * @return string
     */
    
protected function wrapAliasedValue($value$prefixAlias false)
    {
        
$segments preg_split('/\s+as\s+/i'$value);

        
// If we are wrapping a table we need to prefix the alias with the table prefix
        // as well in order to generate proper syntax. If this is a column of course
        // no prefix is necessary. The condition will be true when from wrapTable.
        
if ($prefixAlias) {
            
$segments[1] = $this->tablePrefix.$segments[1];
        }

        return 
$this->wrap(
            
$segments[0]).' as '.$this->wrapValue($segments[1]
        );
    }

    
/**
     * Wrap the given value segments.
     *
     * @param  array  $segments
     * @return string
     */
    
protected function wrapSegments($segments)
    {
        return 
collect($segments)->map(function ($segment$key) use ($segments) {
            return 
$key == && count($segments) > 1
                            
$this->wrapTable($segment)
                            : 
$this->wrapValue($segment);
        })->
implode('.');
    }

    
/**
     * Wrap a single string in keyword identifiers.
     *
     * @param  string  $value
     * @return string
     */
    
protected function wrapValue($value)
    {
        if (
$value !== '*') {
            return 
'"'.str_replace('"''""'$value).'"';
        }

        return 
$value;
    }

    
/**
     * Convert an array of column names into a delimited string.
     *
     * @param  array   $columns
     * @return string
     */
    
public function columnize(array $columns)
    {
        return 
implode(', 'array_map([$this'wrap'], $columns));
    }

    
/**
     * Create query parameter place-holders for an array.
     *
     * @param  array   $values
     * @return string
     */
    
public function parameterize(array $values)
    {
        return 
implode(', 'array_map([$this'parameter'], $values));
    }

    
/**
     * Get the appropriate query parameter place-holder for a value.
     *
     * @param  mixed   $value
     * @return string
     */
    
public function parameter($value)
    {
        return 
$this->isExpression($value) ? $this->getValue($value) : '?';
    }

    
/**
     * Determine if the given value is a raw expression.
     *
     * @param  mixed  $value
     * @return bool
     */
    
public function isExpression($value)
    {
        return 
$value instanceof Expression;
    }

    
/**
     * Get the value of a raw expression.
     *
     * @param  \Illuminate\Database\Query\Expression  $expression
     * @return string
     */
    
public function getValue($expression)
    {
        return 
$expression->getValue();
    }

    
/**
     * Get the format for database stored dates.
     *
     * @return string
     */
    
public function getDateFormat()
    {
        return 
'Y-m-d H:i:s';
    }

    
/**
     * Get the grammar's table prefix.
     *
     * @return string
     */
    
public function getTablePrefix()
    {
        return 
$this->tablePrefix;
    }

    
/**
     * Set the grammar's table prefix.
     *
     * @param  string  $prefix
     * @return $this
     */
    
public function setTablePrefix($prefix)
    {
        
$this->tablePrefix $prefix;

        return 
$this;
    }
}