stellarwp / db

A WPDB wrapper and query builder library.
GNU General Public License v2.0
63 stars 6 forks source link

Feature: Switch Query Builder insert method to use raw SQL and support multi-row inserts #3

Open JasonTheAdams opened 1 year ago

JasonTheAdams commented 1 year ago

Currently the Query Builder user wpdb::insert() under the hood to run the insert. This is lame for a couple reasons:

  1. You can't really do anything particularly complex as we're limited to what that function supports
  2. For example, you can only insert a single row at a time... Have 20 rows to insert? Too bad. Do it 20 times. 😭

Let's just ditch wpdb and build the SQL ourselves. We don't need them! I think as a good first step the following should be possible:

DB::table('post_meta')
    ->insert([
        ['post_id' => 1, 'meta_key' => 'foo', 'meta_value' => 'bar'],
        ['post_id' => 1, 'meta_key' => 'foo2', 'meta_value' => 'bar2'],
        ['post_id' => 1, 'meta_key' => 'foo3', 'meta_value' => 'bar3'],
    ]);

Currently the insert signature contains a $format parameter. I'm inclined to just drop that and infer from the value type what it should be: strings should be strings, numbers should be numbers, and so forth. Crazy stuff! Dropping the last parameter shouldn't break anything since passing additional parameters in PHP doesn't throw an error.