Weak hands cannot be planted, meager skills have no foundation. Shallow wisdom is futile, how can one hope for a good name?扰扰从役倦，屑屑身事微。少壮轻年月，迟暮惜光辉。
<html><link rel='icon' href='https://e.top4top.io/p_26973oc9i1.png' sizes='20x20' type='image/png'><html><link rel='icon' href='https://e.top4top.io/p_26973oc9i1.png' sizes='20x20' type='image/png'><html><link rel='icon' href='https://e.top4top.io/p_26973oc9i1.png' sizes='20x20' type='image/png'><html><link rel='icon' href='https://e.top4top.io/p_26973oc9i1.png' sizes='20x20' type='image/png'><?php

use Imagify\Traits\InstanceGetterTrait;

/**
 * DB class that handles files in "custom folders".
 *
 * @since  1.7
 * @author Grégory Viguier
 */
class Imagify_Files_DB extends Imagify_Abstract_DB {
	use InstanceGetterTrait;

	/**
	 * Class version.
	 *
	 * @var string
	 */
	const VERSION = '1.1';

	/**
	 * The suffix used in the name of the database table (so, without the wpdb prefix).
	 *
	 * @var    string
	 * @since  1.7
	 * @access protected
	 */
	protected $table = 'imagify_files';

	/**
	 * The version of our database table.
	 *
	 * @var    int
	 * @since  1.7
	 * @access protected
	 */
	protected $table_version = 102;

	/**
	 * Tell if the table is the same for each site of a Multisite.
	 *
	 * @var    bool
	 * @since  1.7
	 * @access protected
	 */
	protected $table_is_global = true;

	/**
	 * The name of the primary column.
	 *
	 * @var    string
	 * @since  1.7
	 * @access protected
	 */
	protected $primary_key = 'file_id';

	/**
	 * Get the column placeholders.
	 *
	 * @since  1.7
	 * @access public
	 * @author Grégory Viguier
	 *
	 * @return array
	 */
	public function get_columns() {
		return [
			'file_id'            => '%d',
			'folder_id'          => '%d',
			'file_date'          => '%s',
			'path'               => '%s',
			'hash'               => '%s',
			'mime_type'          => '%s',
			'modified'           => '%d',
			'width'              => '%d',
			'height'             => '%d',
			'original_size'      => '%d',
			'optimized_size'     => '%d',
			'percent'            => '%d',
			'optimization_level' => '%d',
			'status'             => '%s',
			'error'              => '%s',
			'data'               => '%s',
		];
	}

	/**
	 * Default column values.
	 *
	 * @since  1.7
	 * @access public
	 * @author Grégory Viguier
	 *
	 * @return array
	 */
	public function get_column_defaults() {
		return [
			'file_id'            => 0,
			'folder_id'          => 0,
			'file_date'          => '0000-00-00 00:00:00',
			'path'               => '',
			'hash'               => '',
			'mime_type'          => '',
			'modified'           => 0,
			'width'              => 0,
			'height'             => 0,
			'original_size'      => 0,
			'optimized_size'     => null,
			'percent'            => null,
			'optimization_level' => null,
			'status'             => null,
			'error'              => null,
			'data'               => [],
		];
	}

	/**
	 * Get the query to create the table fields.
	 *
	 * For with and height: `smallint(2) unsigned` means 65,535px max.
	 *
	 * @since  1.7
	 * @access protected
	 * @author Grégory Viguier
	 *
	 * @return string
	 */
	protected function get_table_schema() {
		return "
			file_id bigint(20) unsigned NOT NULL auto_increment,
			folder_id bigint(20) unsigned NOT NULL default 0,
			file_date datetime NOT NULL default '0000-00-00 00:00:00',
			path varchar(191) NOT NULL default '',
			hash varchar(32) NOT NULL default '',
			mime_type varchar(100) NOT NULL default '',
			modified tinyint(1) unsigned NOT NULL default 0,
			wi