/**
  * Find data on Relational Map table
  *
  * @param string $what
  * @return ActiveRecord Cursor
  *
  * columns: columnas a utilizar
  * conditions : condiciones de busqueda en WHERE
  * join: inclusion inner join o outer join
  * group : campo para grupo en GROUP BY
  * having : condicion para el grupo
  * order : campo para criterio de ordenamiento ORDER BY
  * distinct: campos para hacer select distinct
  */
 public function find($what = '')
 {
     $what = Util::getParams(func_get_args());
     $select = "SELECT ";
     if (isset($what['columns'])) {
         $select .= $what['columns'] ? ActiveRecord::sql_sanizite($what['columns']) : join(",", $this->fields);
     } elseif (isset($what['distinct'])) {
         $select .= 'DISTINCT ';
         $select .= $what['distinct'] ? ActiveRecord::sql_sanizite($what['distinct']) : join(",", $this->fields);
     } else {
         $select .= join(",", $this->fields);
     }
     if ($this->schema) {
         $select .= " FROM {$this->schema}.{$this->source}";
     } else {
         $select .= " FROM {$this->source}";
     }
     $select .= $this->convert_params_to_sql($what);
     $results = array();
     $all_results = $this->db->in_query($select);
     foreach ($all_results as $result) {
         $results[] = $this->dump_result($result);
     }
     $this->count = count($results, COUNT_NORMAL);
     if (isset($what[0]) && is_numeric($what[0])) {
         if (!isset($results[0])) {
             $this->count = 0;
             return false;
         } else {
             $this->dump_result_self($all_results[0]);
             $this->count = 1;
             return $results[0];
         }
     } else {
         $this->count = count($results, COUNT_NORMAL);
         return $results;
     }
 }