mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-05-10 04:24:14 +09:00
Support ON DUPLICATE KEY UPDATE (upsert) queries
This commit is contained in:
parent
7f8312ee1a
commit
6f0ecd26a7
2 changed files with 30 additions and 7 deletions
|
|
@ -21,6 +21,7 @@ class Query extends VariableBase
|
||||||
public $groupby = null;
|
public $groupby = null;
|
||||||
public $navigation = null;
|
public $navigation = null;
|
||||||
public $select_distinct = false;
|
public $select_distinct = false;
|
||||||
|
public $update_duplicate = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attributes for query generation.
|
* Attributes for query generation.
|
||||||
|
|
@ -229,6 +230,17 @@ class Query extends VariableBase
|
||||||
}
|
}
|
||||||
$result .= ' SET ' . implode(', ', $columns);
|
$result .= ' SET ' . implode(', ', $columns);
|
||||||
|
|
||||||
|
// Process the ON DUPLICATE KEY UPDATE (upsert) clause.
|
||||||
|
if ($this->update_duplicate && count($columns))
|
||||||
|
{
|
||||||
|
$result .= ' ON DUPLICATE KEY UPDATE ' . implode(', ', $columns);
|
||||||
|
$duplicate_params = $this->_params;
|
||||||
|
foreach ($duplicate_params as $param)
|
||||||
|
{
|
||||||
|
$this->_params[] = $param;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Return the final query string.
|
// Return the final query string.
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -80,13 +80,6 @@ class DBQueryParser
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load columns.
|
// Load columns.
|
||||||
if ($xml->columns && $select_distinct = trim($xml->columns['distinct']))
|
|
||||||
{
|
|
||||||
if ($select_distinct === 'distinct' || toBool($select_distinct))
|
|
||||||
{
|
|
||||||
$query->select_distinct = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
foreach ($xml->columns->column as $tag)
|
foreach ($xml->columns->column as $tag)
|
||||||
{
|
{
|
||||||
if ($tag->getName() === 'query')
|
if ($tag->getName() === 'query')
|
||||||
|
|
@ -181,6 +174,24 @@ class DBQueryParser
|
||||||
$query->columns[] = $column;
|
$query->columns[] = $column;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check the SELECT DISTINCT flag.
|
||||||
|
if ($xml->columns && $select_distinct = trim($xml->columns['distinct']))
|
||||||
|
{
|
||||||
|
if ($select_distinct === 'distinct' || toBool($select_distinct))
|
||||||
|
{
|
||||||
|
$query->select_distinct = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check the ON DUPLICATE KEY UPDATE (upsert) flag.
|
||||||
|
if ($query->type === 'INSERT' && $update_duplicate = trim($xml['update_duplicate'] ?: $xml['update-duplicate']))
|
||||||
|
{
|
||||||
|
if (toBool($update_duplicate))
|
||||||
|
{
|
||||||
|
$query->update_duplicate = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Return the complete query definition.
|
// Return the complete query definition.
|
||||||
return $query;
|
return $query;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue