अगर आप my रिपॉजिटरी को क्लोन करना चाहते हैं मैंने अमल किया है। मैंने कोशिश की समाधान को मुख्य शाखा में लाने के लिए लेकिन ऐसा लगता है कि नारफबग इसके खिलाफ है। हो सकता है कि समुदाय की कुछ और भागीदारी से इसे लागू किया जा सके।
/**
* Replace_Batch
*
* Compiles batch insert strings replacing any existing rows and runs the queries
*
* @param string $table Table to replace insert into
* @param array $set An associative array of insert values
* @param bool $escape Whether to escape values and identifiers
* @return int Number of rows inserted or FALSE on failure
*/
public function replace_batch($table, $set = NULL, $escape = NULL, $batch_size = 100)
{
if ($set === NULL)
{
if (empty($this->qb_set))
{
return ($this->db_debug) ? $this->display_error('db_must_use_set') : FALSE;
}
}
else
{
if (empty($set))
{
return ($this->db_debug) ? $this->display_error('replace_batch() called with no data') : FALSE;
}
$this->set_insert_batch($set, '', $escape);
}
if (strlen($table) === 0)
{
if ( ! isset($this->qb_from[0]))
{
return ($this->db_debug) ? $this->display_error('db_must_set_table') : FALSE;
}
$table = $this->qb_from[0];
}
// Batch this baby
$affected_rows = 0;
for ($i = 0, $total = count($this->qb_set); $i < $total; $i += $batch_size)
{
if ($this->query($this->_replace_batch($this->protect_identifiers($table, TRUE, $escape, FALSE), $this->qb_keys, array_slice($this->qb_set, $i, $batch_size))))
{
$affected_rows += $this->affected_rows();
}
}
$this->_reset_write();
return $affected_rows;
}
// --------------------------------------------------------------------
/**
* Replace batch statement
*
* Generates a platform-specific insert string from the supplied data.
*
* @param string $table Table name
* @param array $keys INSERT keys
* @param array $values INSERT values
* @return string
*/
protected function _replace_batch($table, $keys, $values)
{
return 'REPLACE INTO '.$table.' ('.implode(', ', $keys).') VALUES '.implode(', ', $values);
}
ऊपर ठीक वैसा ही कोड है जैसा कि जीथब पर है, इसलिए समाधान stackoverflow.com पर वापस अनुक्रमित है। लेकिन दुर्भाग्य से स्टैक ओवरफ्लो पर मेरा जवाब 30k वर्णों तक सीमित है, इसलिए मैं पूरी प्रतिबद्धता में पेस्ट नहीं कर सकता जिसमें डीबी ड्राइवरों में परिवर्तन भी शामिल है।