Skip to content

Commit

Permalink
Merge pull request #2 from carlopires/postgresql_v2
Browse files Browse the repository at this point in the history
Fixes for insertid issues with postgresql driver
  • Loading branch information
gpongelli committed Apr 7, 2012
2 parents 6b6d780 + a4aa9f7 commit 8e5b5eb
Show file tree
Hide file tree
Showing 9 changed files with 77 additions and 50 deletions.
2 changes: 1 addition & 1 deletion administrator/components/com_menus/models/items.php
Expand Up @@ -168,7 +168,7 @@ protected function getListQuery()
$app = JFactory::getApplication();

// Select all fields from the table.
$query->select($this->getState('list.select', 'a.id, a.menutype, a.title, a.alias, a.note, a.path, a.link, a.type, a.parent_id, a.level, a.published as apublished, a.component_id, a.ordering, a.checked_out, a.checked_out_time, a.browserNav, a.access, a.img, a.template_style_id, a.params, a.lft, a.rgt, a.home, a.language, a.client_id'));
$query->select($this->getState('list.select', 'a.id, a.menutype, a.title, a.alias, a.note, a.path, a.link, a.type, a.parent_id, a.level, a.published as apublished, a.component_id, a.ordering, a.checked_out, a.checked_out_time, a."browserNav", a.access, a.img, a.template_style_id, a.params, a.lft, a.rgt, a.home, a.language, a.client_id'));
$query->select('CASE a.type' .
' WHEN ' . $db->quote('component') . ' THEN a.published+2*(e.enabled-1) ' .
' WHEN ' . $db->quote('url') . ' THEN a.published+2 ' .
Expand Down
4 changes: 2 additions & 2 deletions installation/sql/postgresql/joomla.sql
Expand Up @@ -1703,7 +1703,7 @@ CREATE TABLE "#__menu" (
"img" character varying(255) DEFAULT '' NOT NULL,
"template_style_id" integer DEFAULT 0 NOT NULL,
-- JSON encoded data for the menu item.
"params" text NOT NULL,
"params" text DEFAULT '' NOT NULL,
-- Nested set lft.
"lft" bigint DEFAULT 0 NOT NULL,
-- Nested set rgt.
Expand Down Expand Up @@ -2385,4 +2385,4 @@ BEGIN

RETURN soundex;
END;
$$;
$$;
14 changes: 9 additions & 5 deletions libraries/joomla/database/database.php
Expand Up @@ -838,7 +838,8 @@ public function insertObject($table, &$object, $key = null)
$values = array();

// Create the base insert statement.
$statement = 'INSERT INTO ' . $this->quoteName($table) . ' (%s) VALUES (%s)';
$query = $this->getQuery(true);
$query->insert($this->quoteName($table));

// Iterate over the object variables to build the query fields and values.
foreach (get_object_vars($object) as $k => $v)
Expand All @@ -857,11 +858,14 @@ public function insertObject($table, &$object, $key = null)

// Prepare and sanitize the fields and values for the database query.
$fields[] = $this->quoteName($k);
$values[] = $this->quote($v);
$values[] = is_numeric($v) ? $v : $this->quote($v);
}

$query->columns($fields);
$query->values(implode(',', $values));

// Set the query and execute the insert.
$this->setQuery(sprintf($statement, implode(',', $fields), implode(',', $values)));
$this->setQuery($query);
if (!$this->query())
{
return false;
Expand Down Expand Up @@ -1618,7 +1622,7 @@ public function updateObject($table, &$object, $key, $nulls = false)
// Set the primary key to the WHERE clause instead of a field to update.
if ($k == $key)
{
$where = $this->quoteName($k) . '=' . $this->quote($v);
$where = $this->quoteName($k) . '=' . (is_numeric($v) ? $v : $this->quote($v));
continue;
}

Expand All @@ -1639,7 +1643,7 @@ public function updateObject($table, &$object, $key, $nulls = false)
// The field is not null so we prep it for update.
else
{
$val = $this->quote($v);
$val = (is_numeric($v) ? $v : $this->quote($v));
}

// Add the field to be updated.
Expand Down
39 changes: 23 additions & 16 deletions libraries/joomla/database/database/postgresql.php
Expand Up @@ -233,7 +233,7 @@ public function getCollation()
*/
public function getNumRows( $cur = null )
{
return pg_num_rows($cur ? $cur : $this->cursor);
return pg_num_rows((int)$cur ? $cur : $this->cursor);
}

/**
Expand Down Expand Up @@ -450,10 +450,6 @@ public function insertObject($table, &$object, $key = null)
$fields = array();
$values = array();

// Create the base insert statement.
$query = $this->getQuery(true);
$query->insert($this->quoteName($table));

// Iterate over the object variables to build the query fields and values.
foreach (get_object_vars($object) as $k => $v)
{
Expand All @@ -474,24 +470,35 @@ public function insertObject($table, &$object, $key = null)
$values[] = is_numeric($v) ? $v : $this->quote($v);
}

$query->columns($fields);
$query->values(implode(',', $values));
// Create the base insert statement.
$query = $this->getQuery(true);

$query->insert($this->quoteName($table))
->columns($fields)
->values(implode(',', $values));

if ($key)
{
$query->returning($key);
}

// Set the query and execute the insert.
$this->setQuery($query);
if (!$this->query())

if ($key)
{
$id = $this->loadResult();
if ($id)
{
$object->$key = $id;
return true;
}
return false;
}

// Update the primary key if it exists.
$id = $this->insertid();
if ($key && $id)
}
else
{
$object->$key = $id;
return $this->query();
}

return true;
}

/**
Expand Down
15 changes: 13 additions & 2 deletions libraries/joomla/database/table/user.php
Expand Up @@ -181,6 +181,12 @@ public function bind($array, $ignore = '')
*/
public function check()
{
// Set user id to null istead of 0, if needed
if ($this->id === 0)
{
$this->id = null;
}

// Validate user information
if (trim($this->name) == '')
{
Expand All @@ -207,11 +213,16 @@ public function check()
}

// Set the registration timestamp
if ($this->registerDate == null || $this->registerDate == $this->_db->getNullDate())
if (empty($this->registerDate) || $this->registerDate == $this->_db->getNullDate())
{
$this->registerDate = JFactory::getDate()->toSql();
}

// Set the lastvisitDate timestamp
if (empty($this->lastvisitDate))
{
$this->lastvisitDate = $this->_db->getNullDate();
}

// check for existing username
$query = $this->_db->getQuery(true);
$query->select($this->_db->quoteName('id'));
Expand Down
10 changes: 5 additions & 5 deletions libraries/joomla/installer/adapters/component.php
Expand Up @@ -541,11 +541,11 @@ public function install()
return false;
}

$eid = $db->insertid();
$eid = $row->extension_id;

// Clobber any possible pending updates
$update = JTable::getInstance('update');
$uid = $update->find(array('element' => $this->get('element'), 'type' => 'component', 'client_id' => '', 'folder' => ''));
$uid = $update->find(array('element' => $this->get('element'), 'type' => 'component', 'client_id' => 1, 'folder' => ''));

if ($uid)
{
Expand Down Expand Up @@ -1021,7 +1021,7 @@ public function update()

// Clobber any possible pending updates
$update = JTable::getInstance('update');
$uid = $update->find(array('element' => $this->get('element'), 'type' => 'component', 'client_id' => '', 'folder' => ''));
$uid = $update->find(array('element' => $this->get('element'), 'type' => 'component', 'client_id' => 1, 'folder' => ''));

if ($uid)
{
Expand Down Expand Up @@ -1323,7 +1323,7 @@ public function uninstall($id)

// Clobber any possible pending updates
$update = JTable::getInstance('update');
$uid = $update->find(array('element' => $row->element, 'type' => 'component', 'client_id' => '', 'folder' => ''));
$uid = $update->find(array('element' => $row->element, 'type' => 'component', 'client_id' => 1, 'folder' => ''));

if ($uid)
{
Expand Down Expand Up @@ -1950,7 +1950,7 @@ public function discover_install()

// Clobber any possible pending updates
$update = JTable::getInstance('update');
$uid = $update->find(array('element' => $this->get('element'), 'type' => 'component', 'client_id' => '', 'folder' => ''));
$uid = $update->find(array('element' => $this->get('element'), 'type' => 'component', 'client_id' => 1, 'folder' => ''));

if ($uid)
{
Expand Down
3 changes: 0 additions & 3 deletions libraries/joomla/installer/adapters/file.php
Expand Up @@ -254,9 +254,6 @@ public function install()
return false;
}

// Set the insert id
$row->set('extension_id', $db->insertid());

// Since we have created a module item, we add it to the installation step stack
// so that if we have to rollback the changes we can undo it.
$this->parent->pushStep(array('type' => 'extension', 'extension_id' => $row->extension_id));
Expand Down
3 changes: 0 additions & 3 deletions libraries/joomla/installer/adapters/module.php
Expand Up @@ -427,9 +427,6 @@ public function install()
return false;
}

// Set the insert id
$row->extension_id = $db->insertid();

// Since we have created a module item, we add it to the installation step stack
// so that if we have to rollback the changes we can undo it.
$this->parent->pushStep(array('type' => 'extension', 'extension_id' => $row->extension_id));
Expand Down
37 changes: 24 additions & 13 deletions libraries/joomla/installer/adapters/template.php
Expand Up @@ -284,17 +284,24 @@ public function install()

if ($this->route == 'install')
{
//insert record in #__template_styles
$query = $db->getQuery(true);
$query->insert('#__template_styles');
$query->set('template=' . $db->Quote($row->element));
$query->set('client_id=' . $db->Quote($clientId));
$query->set('home=0');
$debug = $lang->setDebug(false);
$query->set('title=' . $db->Quote(JText::sprintf('JLIB_INSTALLER_DEFAULT_STYLE', JText::_($this->get('name')))));

$columns = array('template', 'client_id', 'home', 'title', 'params');
$values = array(
$db->Quote($row->element), $clientId, $db->Quote(0),
$db->Quote(JText::sprintf('JLIB_INSTALLER_DEFAULT_STYLE', JText::_($this->get('name')))),
$db->Quote($row->params) );

$lang->setDebug($debug);
$query->set('params=' . $db->Quote($row->params));

//insert record in #__template_styles
$query = $db->getQuery(true);
$query->insert($db->quoteName('#__template_styles'))
->columns($columns)
->values(implode(',', $values));

$db->setQuery($query);

// There is a chance this could fail but we don't care...
$db->query();
}
Expand Down Expand Up @@ -359,7 +366,7 @@ public function uninstall($id)

// Deny remove default template
$db = $this->parent->getDbo();
$query = 'SELECT COUNT(*) FROM #__template_styles' . ' WHERE home = 1 AND template = ' . $db->Quote($name);
$query = "SELECT COUNT(*) FROM #__template_styles WHERE home = '1' AND template = " . $db->Quote($name);
$db->setQuery($query);

if ($db->loadResult() != 0)
Expand Down Expand Up @@ -412,13 +419,17 @@ public function uninstall($id)
}

// Set menu that assigned to the template back to default template
$query = 'UPDATE #__menu INNER JOIN #__template_styles' . ' ON #__template_styles.id = #__menu.template_style_id'
. ' SET #__menu.template_style_id = 0' . ' WHERE #__template_styles.template = ' . $db->Quote(strtolower($name))
. ' AND #__template_styles.client_id = ' . $db->Quote($clientId);

$query = 'UPDATE #__menu'
. ' SET template_style_id = 0'
. ' WHERE template_style_id in ('
. ' SELECT s.id FROM #__template_styles s'
. ' WHERE s.template = '. $db->Quote(strtolower($name)) .' AND s.client_id = '. $clientId .')';

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

$query = 'DELETE FROM #__template_styles' . ' WHERE template = ' . $db->Quote($name) . ' AND client_id = ' . $db->Quote($clientId);
$query = 'DELETE FROM #__template_styles WHERE template = ' . $db->Quote($name) . ' AND client_id = ' . $clientId;
$db->setQuery($query);
$db->Query();

Expand Down

0 comments on commit 8e5b5eb

Please sign in to comment.