public function select(array $infos)
    {
        try {

            $tabela = $infos['table'];
            $campos = $infos['fields'];

            $whereCriteria   = $infos['where'];
            $joins           = $infos['join'];
            $limitCriteria   = $infos['limit'];
            $offsetCriteria  = $infos['offset'];
            $orderByCriteria = $infos['orderby'];

            $campos = gettype($campos) == "array" ? implode(", ", $campos) : $campos;

            $this->sql = "SELECT " . $campos . " FROM $tabela";

            // responsável por montar JOIN
            if (!empty($joins)) {
                for ($i = 0; $i < count($joins); $i++) {
                    $this->sql .= " " . $joins[$i] . " ";
                }
            }

            // responsável por montar o WHERE.
            if (!empty($whereCriteria)) {
                $this->sql .= " WHERE " . $whereCriteria;
            }

            // responsável por montar o order by.
            if (!is_null($orderByCriteria)) {
                $orderBy = gettype($orderByCriteria) == "array" ? implode(", ", $orderByCriteria) : $orderByCriteria;

                $this->sql .= " ORDER BY " . $orderBy;
            }

            // responsável por montar o limit.
            if (!empty($limitCriteria)) {
                $this->sql .= " LIMIT " . $limitCriteria;
            }

            // responsável por montar OFFSET
            if (!empty($offsetCriteria)) {

                $this->sql .= " OFFSET " . $offsetCriteria;
            }

            $this->sql .= ";";
            
            return $this->sql;

        } catch (PhiberException $phiberException) {
            throw new PhiberException(new Internationalization("query_processor_error"));
        }
    }