Skip to content

Commit

Permalink
Merge pull request joomla#704 from gpongelli/fixQueries
Browse files Browse the repository at this point in the history
Fixed queries for multidb environment.
  • Loading branch information
LouisLandry committed Jan 12, 2012
2 parents 7d8a214 + 865ac7f commit 7342ba1
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 36 deletions.
42 changes: 25 additions & 17 deletions libraries/joomla/application/application.php
Expand Up @@ -1056,7 +1056,10 @@ protected function _createSession($name)
// The modulus introduces a little entropy, making the flushing less accurate
// but fires the query less than half the time.
$query = $db->getQuery(true);
$db->setQuery('DELETE FROM ' . $query->qn('#__session') . ' WHERE ' . $query->qn('time') . ' < ' . (int) ($time - $session->getExpire()));
$query->delete($query->qn('#__session'))
->where($query->qn('time') . ' < ' . $query->q((int) ($time - $session->getExpire())));

$db->setQuery($query);
$db->query();
}

Expand Down Expand Up @@ -1087,32 +1090,37 @@ public function checkSession()
$user = JFactory::getUser();

$query = $db->getQuery(true);
$db->setQuery(
'SELECT ' . $query->qn('session_id') . ' FROM ' . $query->qn('#__session') . ' WHERE ' . $query->qn('session_id') . ' = ' .
$query->q($session->getId()),
0, 1
);
$query->select($query->qn('session_id'))
->from($query->qn('#__session'))
->where($query->qn('session_id') . ' = ' . $query->q($session->getId()));

$db->setQuery($query, 0, 1);
$exists = $db->loadResult();

// If the session record doesn't exist initialise it.
if (!$exists)
{
$query->clear();
if ($session->isNew())
{
$db->setQuery(
'INSERT INTO ' . $query->qn('#__session') . ' (' . $query->qn('session_id') . ', ' . $query->qn('client_id') . ', ' .
$query->qn('time') . ')' . ' VALUES (' . $query->q($session->getId()) . ', ' . (int) $this->getClientId() . ', ' .
(int) time() . ')'
);
$query->insert($query->qn('#__session'))
->columns($query->qn('session_id') . ', ' . $query->qn('client_id') . ', ' . $query->qn('time'))
->values($query->q($session->getId()) . ', ' . (int) $this->getClientId() . ', ' . $query->q((int) time()));
$db->setQuery($query);
}
else
{
$db->setQuery(
'INSERT INTO ' . $query->qn('#__session') . ' (' . $query->qn('session_id') . ', ' . $query->qn('client_id') . ', ' .
$query->qn('guest') . ', ' . $query->qn('time') . ', ' . $query->qn('userid') . ', ' . $query->qn('username') . ')' .
' VALUES (' . $query->q($session->getId()) . ', ' . (int) $this->getClientId() . ', ' . (int) $user->get('guest') . ', ' .
(int) $session->get('session.timer.start') . ', ' . (int) $user->get('id') . ', ' . $query->q($user->get('username')) . ')'
);
$query->insert($query->qn('#__session'))
->columns(
$query->qn('session_id') . ', ' . $query->qn('client_id') . ', ' . $query->qn('guest') . ', ' .
$query->qn('time') . ', ' . $query->qn('userid') . ', ' . $query->qn('username')
)
->values(
$query->q($session->getId()) . ', ' . (int) $this->getClientId() . ', ' . (int) $user->get('guest') . ', ' .
$query->q((int) $session->get('session.timer.start')) . ', ' . (int) $user->get('id') . ', ' . $query->q($user->get('username'))
);

$db->setQuery($query);
}

// If the insert failed, exit the application.
Expand Down
2 changes: 1 addition & 1 deletion libraries/joomla/application/categories.php
Expand Up @@ -290,7 +290,7 @@ protected function _load($id)
// Right join with c for category
$query->select('c.*');
$case_when = ' CASE WHEN ';
$case_when .= $query->charLength('c.alias');
$case_when .= $query->charLength('c.alias') . '!=0';
$case_when .= ' THEN ';
$c_id = $query->castAsChar('c.id');
$case_when .= $query->concatenate(array($c_id, 'c.alias'), ':');
Expand Down
41 changes: 23 additions & 18 deletions libraries/joomla/session/storage/database.php
Expand Up @@ -100,12 +100,14 @@ public function write($id, $data)
return false;
}

$query = $db->getQuery(true);
$query->update($db->quoteName('#__session'))
->set($db->quoteName('data') . ' = ' . $db->quote($data))
->set($db->quoteName('time') . ' = ' . $db->quote((int) time()))
->where($db->quoteName('session_id') . ' = ' . $db->quote($id));

// Try to update the session data in the database table.
$db->setQuery(
'UPDATE ' . $db->quoteName('#__session') .
' SET ' . $db->quoteName('data') . ' = ' . $db->quote($data) . ',' . ' ' . $db->quoteName('time') . ' = ' . (int) time() .
' WHERE ' . $db->quoteName('session_id') . ' = ' . $db->quote($id)
);
$db->setQuery($query);
if (!$db->query())
{
return false;
Expand All @@ -117,12 +119,13 @@ public function write($id, $data)
}
else
{
$query->clear();
$query->insert($db->quoteName('#__session'))
->columns($db->quoteName('session_id') . ', ' . $db->quoteName('data') . ', ' . $db->quoteName('time'))
->values($db->quote($id) . ', ' . $db->quote($data) . ', ' . $db->quote((int) time()));

// If the session does not exist, we need to insert the session.
$db->setQuery(
'INSERT INTO ' . $db->quoteName('#__session') .
' (' . $db->quoteName('session_id') . ', ' . $db->quoteName('data') . ', ' . $db->quoteName('time') . ')' .
' VALUES (' . $db->quote($id) . ', ' . $db->quote($data) . ', ' . (int) time() . ')'
);
$db->setQuery($query);
return (boolean) $db->query();
}
}
Expand All @@ -145,11 +148,12 @@ public function destroy($id)
return false;
}

$query = $db->getQuery(true);
$query->delete($db->quoteName('#__session'))
->where($db->quoteName('session_id') . ' = ' . $db->quote($id));

// Remove a session from the database.
$db->setQuery(
'DELETE FROM ' . $db->quoteName('#__session') .
' WHERE ' . $db->quoteName('session_id') . ' = ' . $db->quote($id)
);
$db->setQuery($query);

return (boolean) $db->query();
}
Expand All @@ -175,11 +179,12 @@ public function gc($lifetime = 1440)
// Determine the timestamp threshold with which to purge old sessions.
$past = time() - $lifetime;

$query = $db->getQuery(true);
$query->delete($db->quoteName('#__session'))
->where($db->quoteName('time') . ' < ' . $db->quote((int) $past));

// Remove expired sessions from the database.
$db->setQuery(
'DELETE FROM ' . $db->quoteName('#__session') .
' WHERE ' . $db->quoteName('time') . ' < ' . (int) $past
);
$db->setQuery($query);

return (boolean) $db->query();
}
Expand Down

0 comments on commit 7342ba1

Please sign in to comment.