Verzeichnisstruktur phpBB-3.1.0


Veröffentlicht
27.10.2014

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

sqlite.php

Zuletzt modifiziert: 09.10.2024, 12:54 - Dateigröße: 8.18 KiB


 001  <?php
 002  /**
 003  *
 004  * This file is part of the phpBB Forum Software package.
 005  *
 006  * @copyright (c) phpBB Limited <https://www.phpbb.com>
 007  * @license GNU General Public License, version 2 (GPL-2.0)
 008  *
 009  * For full copyright and license information, please see
 010  * the docs/CREDITS.txt file.
 011  *
 012  */
 013   
 014  namespace phpbb\db\driver;
 015   
 016  /**
 017  * Sqlite Database Abstraction Layer
 018  * Minimum Requirement: 2.8.2+
 019  */
 020  class sqlite extends \phpbb\db\driver\driver
 021  {
 022      var $connect_error = '';
 023   
 024      /**
 025      * {@inheritDoc}
 026      */
 027      function sql_connect($sqlserver, $sqluser, $sqlpassword, $database, $port = false, $persistency = false, $new_link = false)
 028      {
 029          $this->persistency = $persistency;
 030          $this->user = $sqluser;
 031          $this->server = $sqlserver . (($port) ? ':' . $port : '');
 032          $this->dbname = $database;
 033   
 034          $error = '';
 035          if ($this->persistency)
 036          {
 037              if (!function_exists('sqlite_popen'))
 038              {
 039                  $this->connect_error = 'sqlite_popen function does not exist, is sqlite extension installed?';
 040                  return $this->sql_error('');
 041              }
 042              $this->db_connect_id = @sqlite_popen($this->server, 0666, $error);
 043          }
 044          else
 045          {
 046              if (!function_exists('sqlite_open'))
 047              {
 048                  $this->connect_error = 'sqlite_open function does not exist, is sqlite extension installed?';
 049                  return $this->sql_error('');
 050              }
 051              $this->db_connect_id = @sqlite_open($this->server, 0666, $error);
 052          }
 053   
 054          if ($this->db_connect_id)
 055          {
 056              @sqlite_query('PRAGMA short_column_names = 1', $this->db_connect_id);
 057  //            @sqlite_query('PRAGMA encoding = "UTF-8"', $this->db_connect_id);
 058          }
 059   
 060          return ($this->db_connect_id) ? true : array('message' => $error);
 061      }
 062   
 063      /**
 064      * {@inheritDoc}
 065      */
 066      function sql_server_info($raw = false, $use_cache = true)
 067      {
 068          global $cache;
 069   
 070          if (!$use_cache || empty($cache) || ($this->sql_server_version = $cache->get('sqlite_version')) === false)
 071          {
 072              $result = @sqlite_query('SELECT sqlite_version() AS version', $this->db_connect_id);
 073              $row = @sqlite_fetch_array($result, SQLITE_ASSOC);
 074   
 075              $this->sql_server_version = (!empty($row['version'])) ? $row['version'] : 0;
 076   
 077              if (!empty($cache) && $use_cache)
 078              {
 079                  $cache->put('sqlite_version', $this->sql_server_version);
 080              }
 081          }
 082   
 083          return ($raw) ? $this->sql_server_version : 'SQLite ' . $this->sql_server_version;
 084      }
 085   
 086      /**
 087      * SQL Transaction
 088      * @access private
 089      */
 090      function _sql_transaction($status = 'begin')
 091      {
 092          switch ($status)
 093          {
 094              case 'begin':
 095                  return @sqlite_query('BEGIN', $this->db_connect_id);
 096              break;
 097   
 098              case 'commit':
 099                  return @sqlite_query('COMMIT', $this->db_connect_id);
 100              break;
 101   
 102              case 'rollback':
 103                  return @sqlite_query('ROLLBACK', $this->db_connect_id);
 104              break;
 105          }
 106   
 107          return true;
 108      }
 109   
 110      /**
 111      * {@inheritDoc}
 112      */
 113      function sql_query($query = '', $cache_ttl = 0)
 114      {
 115          if ($query != '')
 116          {
 117              global $cache;
 118   
 119              // EXPLAIN only in extra debug mode
 120              if (defined('DEBUG'))
 121              {
 122                  $this->sql_report('start', $query);
 123              }
 124              else if (defined('PHPBB_DISPLAY_LOAD_TIME'))
 125              {
 126                  $this->curtime = microtime(true);
 127              }
 128   
 129              $this->query_result = ($cache && $cache_ttl) ? $cache->sql_load($query) : false;
 130              $this->sql_add_num_queries($this->query_result);
 131   
 132              if ($this->query_result === false)
 133              {
 134                  if (($this->query_result = @sqlite_query($query, $this->db_connect_id)) === false)
 135                  {
 136                      $this->sql_error($query);
 137                  }
 138   
 139                  if (defined('DEBUG'))
 140                  {
 141                      $this->sql_report('stop', $query);
 142                  }
 143                  else if (defined('PHPBB_DISPLAY_LOAD_TIME'))
 144                  {
 145                      $this->sql_time += microtime(true) - $this->curtime;
 146                  }
 147   
 148                  if ($cache && $cache_ttl)
 149                  {
 150                      $this->open_queries[(int) $this->query_result] = $this->query_result;
 151                      $this->query_result = $cache->sql_save($this, $query, $this->query_result, $cache_ttl);
 152                  }
 153                  else if (strpos($query, 'SELECT') === 0 && $this->query_result)
 154                  {
 155                      $this->open_queries[(int) $this->query_result] = $this->query_result;
 156                  }
 157              }
 158              else if (defined('DEBUG'))
 159              {
 160                  $this->sql_report('fromcache', $query);
 161              }
 162          }
 163          else
 164          {
 165              return false;
 166          }
 167   
 168          return $this->query_result;
 169      }
 170   
 171      /**
 172      * Build LIMIT query
 173      */
 174      function _sql_query_limit($query, $total, $offset = 0, $cache_ttl = 0)
 175      {
 176          $this->query_result = false;
 177   
 178          // if $total is set to 0 we do not want to limit the number of rows
 179          if ($total == 0)
 180          {
 181              $total = -1;
 182          }
 183   
 184          $query .= "\n LIMIT " . ((!empty($offset)) ? $offset . ', ' . $total : $total);
 185   
 186          return $this->sql_query($query, $cache_ttl);
 187      }
 188   
 189      /**
 190      * {@inheritDoc}
 191      */
 192      function sql_affectedrows()
 193      {
 194          return ($this->db_connect_id) ? @sqlite_changes($this->db_connect_id) : false;
 195      }
 196   
 197      /**
 198      * {@inheritDoc}
 199      */
 200      function sql_fetchrow($query_id = false)
 201      {
 202          global $cache;
 203   
 204          if ($query_id === false)
 205          {
 206              $query_id = $this->query_result;
 207          }
 208   
 209          if ($cache && $cache->sql_exists($query_id))
 210          {
 211              return $cache->sql_fetchrow($query_id);
 212          }
 213   
 214          return ($query_id !== false) ? @sqlite_fetch_array($query_id, SQLITE_ASSOC) : false;
 215      }
 216   
 217      /**
 218      * {@inheritDoc}
 219      */
 220      function sql_rowseek($rownum, &$query_id)
 221      {
 222          global $cache;
 223   
 224          if ($query_id === false)
 225          {
 226              $query_id = $this->query_result;
 227          }
 228   
 229          if ($cache && $cache->sql_exists($query_id))
 230          {
 231              return $cache->sql_rowseek($rownum, $query_id);
 232          }
 233   
 234          return ($query_id !== false) ? @sqlite_seek($query_id, $rownum) : false;
 235      }
 236   
 237      /**
 238      * {@inheritDoc}
 239      */
 240      function sql_nextid()
 241      {
 242          return ($this->db_connect_id) ? @sqlite_last_insert_rowid($this->db_connect_id) : false;
 243      }
 244   
 245      /**
 246      * {@inheritDoc}
 247      */
 248      function sql_freeresult($query_id = false)
 249      {
 250          global $cache;
 251   
 252          if ($query_id === false)
 253          {
 254              $query_id = $this->query_result;
 255          }
 256   
 257          if ($cache && !is_object($query_id) && $cache->sql_exists($query_id))
 258          {
 259              return $cache->sql_freeresult($query_id);
 260          }
 261   
 262          return true;
 263      }
 264   
 265      /**
 266      * {@inheritDoc}
 267      */
 268      function sql_escape($msg)
 269      {
 270          return @sqlite_escape_string($msg);
 271      }
 272   
 273      /**
 274      * {@inheritDoc}
 275      *
 276      * For SQLite an underscore is a not-known character... this may change with SQLite3
 277      */
 278      function sql_like_expression($expression)
 279      {
 280          // Unlike LIKE, GLOB is unfortunately case sensitive.
 281          // We only catch * and ? here, not the character map possible on file globbing.
 282          $expression = str_replace(array(chr(0) . '_', chr(0) . '%'), array(chr(0) . '?', chr(0) . '*'), $expression);
 283   
 284          $expression = str_replace(array('?', '*'), array("\?", "\*"), $expression);
 285          $expression = str_replace(array(chr(0) . "\?", chr(0) . "\*"), array('?', '*'), $expression);
 286   
 287          return 'GLOB \'' . $this->sql_escape($expression) . '\'';
 288      }
 289   
 290      /**
 291      * {@inheritDoc}
 292      *
 293      * For SQLite an underscore is a not-known character...
 294      */
 295      function sql_not_like_expression($expression)
 296      {
 297          // Unlike NOT LIKE, NOT GLOB is unfortunately case sensitive.
 298          // We only catch * and ? here, not the character map possible on file globbing.
 299          $expression = str_replace(array(chr(0) . '_', chr(0) . '%'), array(chr(0) . '?', chr(0) . '*'), $expression);
 300   
 301          $expression = str_replace(array('?', '*'), array("\?", "\*"), $expression);
 302          $expression = str_replace(array(chr(0) . "\?", chr(0) . "\*"), array('?', '*'), $expression);
 303   
 304          return 'NOT GLOB \'' . $this->sql_escape($expression) . '\'';
 305      }
 306   
 307      /**
 308      * return sql error array
 309      * @access private
 310      */
 311      function _sql_error()
 312      {
 313          if (function_exists('sqlite_error_string'))
 314          {
 315              $error = array(
 316                  'message'    => @sqlite_error_string(@sqlite_last_error($this->db_connect_id)),
 317                  'code'        => @sqlite_last_error($this->db_connect_id),
 318              );
 319          }
 320          else
 321          {
 322              $error = array(
 323                  'message'    => $this->connect_error,
 324                  'code'        => '',
 325              );
 326          }
 327   
 328          return $error;
 329      }
 330   
 331      /**
 332      * Build db-specific query data
 333      * @access private
 334      */
 335      function _sql_custom_build($stage, $data)
 336      {
 337          return $data;
 338      }
 339   
 340      /**
 341      * Close sql connection
 342      * @access private
 343      */
 344      function _sql_close()
 345      {
 346          return @sqlite_close($this->db_connect_id);
 347      }
 348   
 349      /**
 350      * Build db-specific report
 351      * @access private
 352      */
 353      function _sql_report($mode, $query = '')
 354      {
 355          switch ($mode)
 356          {
 357              case 'start':
 358              break;
 359   
 360              case 'fromcache':
 361                  $endtime = explode(' ', microtime());
 362                  $endtime = $endtime[0] + $endtime[1];
 363   
 364                  $result = @sqlite_query($query, $this->db_connect_id);
 365                  while ($void = @sqlite_fetch_array($result, SQLITE_ASSOC))
 366                  {
 367                      // Take the time spent on parsing rows into account
 368                  }
 369   
 370                  $splittime = explode(' ', microtime());
 371                  $splittime = $splittime[0] + $splittime[1];
 372   
 373                  $this->sql_report('record_fromcache', $query, $endtime, $splittime);
 374   
 375              break;
 376          }
 377      }
 378  }
 379