sql = $sql; $this->name = $name; } /** * Build a RunSql step for a database row, using the portable table-prefix * placeholder in place of the live database prefix. * * Pass the unprefixed table name (e.g. 'woocommerce_shipping_zones'). The * placeholder is prepended for you, so exported SQL stays portable across * sites with different table prefixes. On import, ImportRunSql resolves the * placeholder back to the importing site's prefix. * * @param array $row Row data keyed by column name. * @param string $table Unprefixed table name. * @param string $type One of insert, insert ignore, replace into. * @return self */ public static function from_table_row( array $row, string $table, string $type = 'replace into' ): self { return new self( (string) Util::array_to_insert_sql( $row, self::TABLE_PREFIX_PLACEHOLDER . $table, $type ) ); } /** * Returns the name of this step. * * @return string The step name. */ public static function get_step_name(): string { return 'runSql'; } /** * Returns the schema for the JSON representation of this step. * * @param int $version The version of the schema to return. * @return array The schema array. */ public static function get_schema( int $version = 1 ): array { return array( 'type' => 'object', 'properties' => array( 'step' => array( 'type' => 'string', 'enum' => array( static::get_step_name() ), ), 'sql' => array( 'type' => 'object', 'required' => array( 'contents', 'resource', 'name' ), 'properties' => array( 'resource' => array( 'type' => 'string', 'enum' => array( 'literal' ), ), 'name' => array( 'type' => 'string', ), 'contents' => array( 'type' => 'string', ), ), ), ), 'required' => array( 'step', 'sql' ), ); } /** * Prepares an associative array for JSON encoding. * * @return array Array of data to be encoded as JSON. */ public function prepare_json_array(): array { return array( 'step' => static::get_step_name(), 'sql' => array( 'resource' => 'literal', 'name' => $this->name, 'contents' => $this->sql, ), ); } }