sql >> データベース >  >> RDS >> Mysql

CodeIgniterActiveRecordのバッチ置換

    マイリポジトリ のクローンを作成する場合 実装しました。 試してみました ソリューションをメインブランチに入れるためですが、narfbgはそれに対して断固として反対しているようです。たぶん、コミュニティからのもう少しの参加がそれを実行することができるでしょう。

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

    上記はGithubとまったく同じコードであるため、ソリューションはstackoverflow.comにインデックス付けできます。しかし、残念ながら、stackoverflowに対する私の返信は30k文字に制限されているため、dbドライバーへの変更も含むコミット全体を貼り付けることはできません。




    1. データベース名を指定せずにPostgreSQLに接続するにはどうすればよいですか?

    2. MySQLコードと同等のMySQLi

    3. Oracleから指定された行を削除する最適な方法

    4. herokuのMIMEタイプを指定するにはどうすればよいですか?