Code Duplication    Length = 48-48 lines in 4 locations

system/libraries/drivers/Database/Mssql.php 1 location

@@ 124-171 (lines=48) @@
121
        return '['.str_replace('.', '[.]', $table).']';
122
    }
123
124
    public function escape_column($column)
125
    {
126
        if (!$this->db_config['escape']) {
127
            return $column;
128
        }
129
130
        if ($column == '*') {
131
            return $column;
132
        }
133
134
        // This matches any functions we support to SELECT.
135
        if (preg_match('/(avg|count|sum|max|min)\(\s*(.*)\s*\)(\s*as\s*(.+)?)?/i', $column, $matches)) {
136
            if (count($matches) == 3) {
137
                return $matches[1].'('.$this->escape_column($matches[2]).')';
138
            } elseif (count($matches) == 5) {
139
                return $matches[1].'('.$this->escape_column($matches[2]).') AS '.$this->escape_column($matches[2]);
140
            }
141
        }
142
143
        // This matches any modifiers we support to SELECT.
144
        if (! preg_match('/\b(?:rand|all|distinct(?:row)?|high_priority|sql_(?:small_result|b(?:ig_result|uffer_result)|no_cache|ca(?:che|lc_found_rows)))\s/i', $column)) {
145
            if (stripos($column, ' AS ') !== false) {
146
                // Force 'AS' to uppercase
147
                $column = str_ireplace(' AS ', ' AS ', $column);
148
149
                // Runs escape_column on both sides of an AS statement
150
                $column = array_map(array($this, __FUNCTION__), explode(' AS ', $column));
151
152
                // Re-create the AS statement
153
                return implode(' AS ', $column);
154
            }
155
156
            return preg_replace('/[^.*]+/', '[$0]', $column);
157
        }
158
159
        $parts = explode(' ', $column);
160
        $column = '';
161
162
        for ($i = 0, $c = count($parts); $i < $c; $i++) {
163
            // The column is always last
164
            if ($i == ($c - 1)) {
165
                $column .= preg_replace('/[^.*]+/', '[$0]', $parts[$i]);
166
            } else { // otherwise, it's a modifier
167
                $column .= $parts[$i].' ';
168
            }
169
        }
170
        return $column;
171
    }
172
173
    /**
174
     * Limit in SQL Server 2000 only uses the keyword

system/libraries/drivers/Database/Mysql.php 1 location

@@ 125-172 (lines=48) @@
122
        return '`'.str_replace('.', '`.`', $table).'`';
123
    }
124
125
    public function escape_column($column)
126
    {
127
        if (!$this->db_config['escape']) {
128
            return $column;
129
        }
130
131
        if ($column == '*') {
132
            return $column;
133
        }
134
135
        // This matches any functions we support to SELECT.
136
        if (preg_match('/(avg|count|sum|max|min)\(\s*(.*)\s*\)(\s*as\s*(.+)?)?/i', $column, $matches)) {
137
            if (count($matches) == 3) {
138
                return $matches[1].'('.$this->escape_column($matches[2]).')';
139
            } elseif (count($matches) == 5) {
140
                return $matches[1].'('.$this->escape_column($matches[2]).') AS '.$this->escape_column($matches[2]);
141
            }
142
        }
143
        
144
        // This matches any modifiers we support to SELECT.
145
        if (! preg_match('/\b(?:rand|all|distinct(?:row)?|high_priority|sql_(?:small_result|b(?:ig_result|uffer_result)|no_cache|ca(?:che|lc_found_rows)))\s/i', $column)) {
146
            if (stripos($column, ' AS ') !== false) {
147
                // Force 'AS' to uppercase
148
                $column = str_ireplace(' AS ', ' AS ', $column);
149
150
                // Runs escape_column on both sides of an AS statement
151
                $column = array_map(array($this, __FUNCTION__), explode(' AS ', $column));
152
153
                // Re-create the AS statement
154
                return implode(' AS ', $column);
155
            }
156
157
            return preg_replace('/[^.*]+/', '`$0`', $column);
158
        }
159
160
        $parts = explode(' ', $column);
161
        $column = '';
162
163
        for ($i = 0, $c = count($parts); $i < $c; $i++) {
164
            // The column is always last
165
            if ($i == ($c - 1)) {
166
                $column .= preg_replace('/[^.*]+/', '`$0`', $parts[$i]);
167
            } else { // otherwise, it's a modifier
168
                $column .= $parts[$i].' ';
169
            }
170
        }
171
        return $column;
172
    }
173
174
    public function regex($field, $match, $type, $num_regexs)
175
    {

system/libraries/drivers/Database/Pdosqlite.php 1 location

@@ 88-135 (lines=48) @@
85
        return '`'.str_replace('.', '`.`', $table).'`';
86
    }
87
88
    public function escape_column($column)
89
    {
90
        if (! $this->db_config['escape']) {
91
            return $column;
92
        }
93
94
        if ($column == '*') {
95
            return $column;
96
        }
97
98
        // This matches any functions we support to SELECT.
99
        if (preg_match('/(avg|count|sum|max|min)\(\s*(.*)\s*\)(\s*as\s*(.+)?)?/i', $column, $matches)) {
100
            if (count($matches) == 3) {
101
                return $matches[1].'('.$this->escape_column($matches[2]).')';
102
            } elseif (count($matches) == 5) {
103
                return $matches[1].'('.$this->escape_column($matches[2]).') AS '.$this->escape_column($matches[2]);
104
            }
105
        }
106
107
        // This matches any modifiers we support to SELECT.
108
        if (! preg_match('/\b(?:rand|all|distinct(?:row)?|high_priority|sql_(?:small_result|b(?:ig_result|uffer_result)|no_cache|ca(?:che|lc_found_rows)))\s/i', $column)) {
109
            if (stripos($column, ' AS ') !== false) {
110
                // Force 'AS' to uppercase
111
                $column = str_ireplace(' AS ', ' AS ', $column);
112
113
                // Runs escape_column on both sides of an AS statement
114
                $column = array_map(array($this, __FUNCTION__), explode(' AS ', $column));
115
116
                // Re-create the AS statement
117
                return implode(' AS ', $column);
118
            }
119
120
            return preg_replace('/[^.*]+/', '`$0`', $column);
121
        }
122
123
        $parts = explode(' ', $column);
124
        $column = '';
125
126
        for ($i = 0, $c = count($parts); $i < $c; $i++) {
127
            // The column is always last
128
            if ($i == ($c - 1)) {
129
                $column .= preg_replace('/[^.*]+/', '`$0`', $parts[$i]);
130
            } else { // otherwise, it's a modifier
131
                $column .= $parts[$i].' ';
132
            }
133
        }
134
        return $column;
135
    }
136
137
    public function limit($limit, $offset = 0)
138
    {

system/libraries/drivers/Database/Pgsql.php 1 location

@@ 102-149 (lines=48) @@
99
        return '"'.str_replace('.', '"."', $table).'"';
100
    }
101
102
    public function escape_column($column)
103
    {
104
        if (!$this->db_config['escape']) {
105
            return $column;
106
        }
107
108
        if ($column == '*') {
109
            return $column;
110
        }
111
112
        // This matches any functions we support to SELECT.
113
        if (preg_match('/(avg|count|sum|max|min)\(\s*(.*)\s*\)(\s*as\s*(.+)?)?/i', $column, $matches)) {
114
            if (count($matches) == 3) {
115
                return $matches[1].'('.$this->escape_column($matches[2]).')';
116
            } elseif (count($matches) == 5) {
117
                return $matches[1].'('.$this->escape_column($matches[2]).') AS '.$this->escape_column($matches[2]);
118
            }
119
        }
120
121
        // This matches any modifiers we support to SELECT.
122
        if (! preg_match('/\b(?:all|distinct)\s/i', $column)) {
123
            if (stripos($column, ' AS ') !== false) {
124
                // Force 'AS' to uppercase
125
                $column = str_ireplace(' AS ', ' AS ', $column);
126
127
                // Runs escape_column on both sides of an AS statement
128
                $column = array_map(array($this, __FUNCTION__), explode(' AS ', $column));
129
130
                // Re-create the AS statement
131
                return implode(' AS ', $column);
132
            }
133
134
            return preg_replace('/[^.*]+/', '"$0"', $column);
135
        }
136
137
        $parts = explode(' ', $column);
138
        $column = '';
139
140
        for ($i = 0, $c = count($parts); $i < $c; $i++) {
141
            // The column is always last
142
            if ($i == ($c - 1)) {
143
                $column .= preg_replace('/[^.*]+/', '"$0"', $parts[$i]);
144
            } else { // otherwise, it's a modifier
145
                $column .= $parts[$i].' ';
146
            }
147
        }
148
        return $column;
149
    }
150
151
    public function regex($field, $match, $type, $num_regexs)
152
    {