Changeset 1456

Show
Ignore:
Timestamp:
03/14/10 18:42:49 (2 years ago)
Author:
gbastien
Message:

Performance enhancement: better queries and indexes for case-insensitivity. One connection/request to server, content logging can now be turned off if desired.

Location:
trunk/wifidog-auth/wifidog
Files:
7 modified

Legend:

Unmodified
Added
Removed
  • trunk/wifidog-auth/wifidog/classes/AbstractDb.php

    r1428 r1456  
    6464    private $sql_update_total_time; 
    6565    private $sql_executed_queries_array; 
     66    private $_ptrconnection = null; 
    6667 
    6768    private static $object; 
     
    8384    function connect($db_name) 
    8485    { 
     86        if (!is_null($this->_ptrconnection)) 
     87            return $this->_ptrconnection; 
     88             
    8589        // Grab default database name from config file 
    8690        if ($db_name == NULL) 
     
    97101        // Throw an exception if anything went wrong 
    98102        if ($ptr_connexion == FALSE) 
    99         throw new Exception(sprintf(_("Unable to connect to the database at %s"), "host=".CONF_DATABASE_HOST." port=".CONF_DATABASE_PORT." dbname=$db_name user=".CONF_DATABASE_USER." password=*********")); 
    100  
     103            throw new Exception(sprintf(_("Unable to connect to the database at %s"), "host=".CONF_DATABASE_HOST." port=".CONF_DATABASE_PORT." dbname=$db_name user=".CONF_DATABASE_USER." password=*********")); 
     104 
     105        $this->_ptrconnection = $ptr_connexion; 
    101106        return $ptr_connexion; 
    102107    } 
  • trunk/wifidog-auth/wifidog/classes/Authenticators/AuthenticatorLocalUser.php

    r1453 r1456  
    126126            $password = $db->escapeString($password); 
    127127             
    128             $comparison = ($this->getNetwork()->getUsernamesCaseSensitive()? ' = ': ' ILike '); 
    129             $sql = "SELECT user_id FROM users WHERE (username$comparison'$username' OR email$comparison'$username') AND account_origin='".$this->getNetwork()->getId()."' AND pass='$password_hash'"; 
     128            $username = ($this->getNetwork()->getUsernamesCaseSensitive()? $username: strtolower($username)); 
     129            $compareto = ($this->getNetwork()->getUsernamesCaseSensitive()? 'username' : 'lower(username)'); 
     130            $sql = "SELECT user_id FROM users WHERE ($compareto = '$username' OR lower(email) = '$username') AND account_origin='".$this->getNetwork()->getId()."' AND pass='$password_hash'"; 
    130131            $db->execSqlUniqueRes($sql, $user_info, false); 
    131132 
     
    146147                 */ 
    147148                $user_info = null; 
    148                 $db->execSqlUniqueRes("SELECT * FROM users WHERE (username$comparison'$username' OR email$comparison'$username') AND account_origin='".$this->getNetwork()->getId()."'", $user_info, false); 
     149                $db->execSqlUniqueRes("SELECT * FROM users WHERE ($compareto = '$username' OR lower(email) = '$username') AND account_origin='".$this->getNetwork()->getId()."'", $user_info, false); 
    149150 
    150151                if ($user_info == null) { 
  • trunk/wifidog-auth/wifidog/classes/Content.php

    r1435 r1456  
    137137        } 
    138138        // By default content display logging is enabled 
    139         $this->setLoggingStatus(true); 
     139        $this->setLoggingStatus(LOG_CONTENT_DISPLAY); 
    140140        $this->log_as_content = & $this; 
    141141    } 
  • trunk/wifidog-auth/wifidog/classes/User.php

    r1453 r1456  
    159159        $object = null; 
    160160 
    161         $username_str = $db->escapeString($username); 
    162         $comparison = ($account_origin->getUsernamesCaseSensitive()? '=': 'ILike'); 
     161        $username_str = ($account_origin->getUsernamesCaseSensitive()? $db->escapeString($username): strtolower($db->escapeString($username))); 
     162        $compareto = ($account_origin->getUsernamesCaseSensitive()? 'username': 'lower(username)'); 
    163163        $account_origin_str = $db->escapeString($account_origin->getId()); 
    164         $db->execSqlUniqueRes("SELECT user_id FROM users WHERE username {$comparison} '$username_str' AND account_origin = '$account_origin_str'", $user_info, false); 
     164        $db->execSqlUniqueRes("SELECT user_id FROM users WHERE $compareto = '$username_str' AND account_origin = '$account_origin_str'", $user_info, false); 
    165165 
    166166        if ($user_info != null) { 
     
    183183        $object = null; 
    184184 
    185         $username_str = $db->escapeString($usernameOrEmail); 
    186         $comparison = ($account_origin->getUsernamesCaseSensitive()? '=': 'ILike'); 
     185        $username_str = ($account_origin->getUsernamesCaseSensitive()? $db->escapeString($username): strtolower($db->escapeString($username))); 
     186        $compareto = ($account_origin->getUsernamesCaseSensitive()? 'username': 'lower(username)'); 
    187187        $account_origin_str = $db->escapeString($account_origin->getId()); 
    188         $db->execSqlUniqueRes("SELECT user_id FROM users WHERE (username {$comparison} '$username_str' OR email ILike '$username_str') AND account_origin = '$account_origin_str'", $user_info, false); 
     188        $db->execSqlUniqueRes("SELECT user_id FROM users WHERE ($compareto = '$username_str' OR lower(email) = '".strtolower($username_str)."') AND account_origin = '$account_origin_str'", $user_info, false); 
    189189 
    190190        if ($user_info != null) { 
     
    206206        $object = null; 
    207207 
    208         $usernameOrEmail_str = $db->escapeString($usernameOrEmail); 
    209         $db->execSqlUniqueRes("SELECT user_id FROM users WHERE username = '$usernameOrEmail_str' OR email ILike '$usernameOrEmail_str'", $user_info, false); 
     208        $db->execSqlUniqueRes("SELECT user_id FROM users WHERE username = '$usernameOrEmail_str' OR lower(email) = '".strtolower($usernameOrEmail_str)."'", $user_info, false); 
    210209 
    211210        if ($user_info != null) { 
     
    244243        $object = null; 
    245244 
    246         $email_str = $db->escapeString($email); 
     245        $email_str = strtolower($db->escapeString($email)); 
    247246        $account_origin_str = $db->escapeString($account_origin->getId()); 
    248         $db->execSqlUniqueRes("SELECT user_id FROM users WHERE email ILike '$email_str' AND account_origin = '$account_origin_str'", $user_info, false); 
     247        $db->execSqlUniqueRes("SELECT user_id FROM users WHERE lower(email) = '$email_str' AND account_origin = '$account_origin_str'", $user_info, false); 
    249248 
    250249        if ($user_info != null) 
  • trunk/wifidog-auth/wifidog/config.php

    r1421 r1456  
    103103define('LOG_SQL_QUERIES', false); 
    104104 
     105/** 
     106 * Log content display.  If set to true, every piece of content displayed to a user will 
     107 * be logged in a log table. 
     108 */ 
     109 
     110define('LOG_CONTENT_DISPLAY', false); 
     111 
    105112/********************************************************************\ 
    106113 * WEBSERVER CONFIGURATION                                          * 
  • trunk/wifidog-auth/wifidog/include/schema_validate.php

    r1453 r1456  
    4848 * Define current database schema version 
    4949 */ 
    50 define('REQUIRED_SCHEMA_VERSION', 70); 
     50define('REQUIRED_SCHEMA_VERSION', 71); 
    5151/** Used to test a new shecma version before modyfying the database */ 
    5252define('SCHEMA_UPDATE_TEST_MODE', false); 
     
    15411541        $sql .= "\nALTER TABLE nodes ADD COLUMN show_node_on_map boolean NOT NULL DEFAULT true;"; 
    15421542    } 
     1543     
     1544    $new_schema_version = 71; 
     1545    if ($schema_version < $new_schema_version && $new_schema_version <= $targetSchema) { 
     1546        printUpdateVersion($new_schema_version); 
     1547        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n"; 
     1548        $sql .= "\nCREATE INDEX lower_username ON users USING btree (lower(username));"; 
     1549        $sql .= "\nCREATE INDEX lower_email ON users USING btree (lower(email));"; 
     1550    } 
     1551     
    15431552    
    15441553    /* 
  • trunk/wifidog-auth/wifidog/install.php

    r1417 r1456  
    228228'GMAPS_HOTSPOTS_MAP_ENABLED' => array ( 
    229229'title' => 'Google Maps Support', 
     230'depend' => 'return 1;', 
     231'message' => '&nbsp;' 
     232), 
     233'LOG_CONTENT_DISPLAY' => array ( 
     234'title' => 'Log what content is displayed to users', 
    230235'depend' => 'return 1;', 
    231236'message' => '&nbsp;'