sql >> Databasteknik >  >> RDS >> Mysql

batchbyte till för CodeIgniter Active Record

Om du vill klona mitt arkiv Jag har genomfört. Jag försökte för att få in lösningen i huvudgrenen men det verkar som att narfbg är bestämt emot det. Kanske kan lite mer deltagande från samhället få det implementerat.

/**
 * 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);
}

Ovan är exakt samma kod som på Github bara så att lösningen kan indexeras tillbaka till stackoverflow.com. Men tyvärr är mitt svar på stackoverflow begränsat till 30 000 tecken så jag kan inte klistra in hela commit som även inkluderar ändringar av db-drivrutiner.




  1. Vad är det bästa sättet att kopiera en delmängd av en tabells rader från en databas till en annan i Postgres?

  2. platta rekursivt ut en kapslad jsonb i postgres utan okänt djup och okända nyckelfält

  3. Hur man jämför datum med hjälp av en klausul i viloläge

  4. Bästa datatypen för att lagra pengar i MySQL