public static function interpolate(string $query, array $parameters = []): string
    {
        if (empty($parameters)) {
            return $query;
        }

        //Flattening
        $parameters = self::flattenParameters($parameters);

        //Let's prepare values so they looks better
        foreach ($parameters as $index => $parameter) {
            $value = self::resolveValue($parameter);

            if (is_numeric($index)) {
                $query = self::replaceOnce('?', $value, $query);
            } else {
                $query = str_replace($index, $value, $query);
            }
        }


        return $query;
    }