Hirdetés

Keresés

Új hozzászólás Aktív témák

  • lezso6

    HÁZIGAZDA

    LOGOUT blog

    válasz Peter Kiss #36 üzenetére

    Ja, hogy így. Igen, amire a teszt használja arra tényleg az iterator aggregate való. Vagyis nem, még az is sok neki. Erre elég az ArrayObject. Full C, úgyhogy az még gyorsabb lesz. :D

  • lezso6

    HÁZIGAZDA

    LOGOUT blog

    válasz Peter Kiss #33 üzenetére

    Mi volt a sebességteszt kódja? Én nagyon kíváncsi lennék rá, mivel egy IteratorAggregate azért jóval kevesebbet tud, mint egy igazi Iterátor. Én az Iterator interfészt arra szoktam használni, hogy külső forrásból kapott adatokat tudjak hatékonyan tömbként kezelni. Pl adatbázist.

  • modder

    aktív tag

    válasz Peter Kiss #10 üzenetére

    Igazad van, a Kohana adatbázis apija egy undorító katyvasz :D legalábbis nekem eddig ez jött le, plusz dokumentálatlan, és sokszor (amit a típustalanság miatt egyébként is probléma a tákolmány szar php-ban :D) mást adnak vissza a függvények egy esetben, mint másik esetben bizonyos belső állapotoktól függően, például attól függően, hogy egy elemet várunk vagy többet, ugyanaz a függvény vagy egy objektumot ad vissza vagy egy iterátort...

  • Sk8erPeter

    nagyúr

    válasz Peter Kiss #8 üzenetére

    "mi volt a tesztkörnyezet"
    Itt eléggé pontatlan volt, amit írtam, mert nem csak a konfiguráció érdekelt volna, hanem a konkrét kód.

    A Kohanás kódra:
    igazából abbahagytam a bemásolást, és nem raktam be azt, amit még kellett volna: a _load_result() függvényt:

    ..............
    /**
    * Loads a database result, either as a new record for this model, or as
    * an iterator for multiple rows.
    *
    * @chainable
    * @param bool $multiple Return an iterator or load a single row
    * @return ORM|Database_Result
    */
    protected function _load_result($multiple = FALSE)
    {
    $this->_db_builder->from(array($this->_table_name, $this->_object_name));

    if ($multiple === FALSE)
    {
    // Only fetch 1 record
    $this->_db_builder->limit(1);
    }

    // Select all columns by default
    $this->_db_builder->select($this->_object_name.'.*');

    if ( ! isset($this->_db_applied['order_by']) AND ! empty($this->_sorting))
    {
    foreach ($this->_sorting as $column => $direction)
    {
    if (strpos($column, '.') === FALSE)
    {
    // Sorting column for use in JOINs
    $column = $this->_object_name.'.'.$column;
    }

    $this->_db_builder->order_by($column, $direction);
    }
    }

    if ($multiple === TRUE)
    {
    // Return database iterator casting to this object type
    $result = $this->_db_builder->as_object(get_class($this))->execute($this->_db);

    $this->reset();

    return $result;
    }
    else
    {
    // Load the result as an associative array
    $result = $this->_db_builder->as_assoc()->execute($this->_db);

    $this->reset();

    if ($result->count() === 1)
    {
    // Load object values
    $this->_load_values($result->current());
    }
    else
    {
    // Clear the object, nothing was found
    $this->clear();
    }

    return $this;
    }
    }
    .....

  • Sk8erPeter

    nagyúr

    válasz Peter Kiss #6 üzenetére

    Attól még, mert írtál ORM-et (ami önmagában azért nem varázslat, még ha szopó feladat is lehet), egy másik framework miért ne működhetne másképp, mint ahogy Te megírtad?
    modder ismeri a Kohanát, dolgozott vele, arra alapozva mondja.
    Azt mondjuk nem értem, Te mire alapozva cáfoltad, hogy nem úgy működik, ahogy ő írta, ha ezek szerint meg sem nézted. :)

    Én nem ismerem a Kohanát, ezért vettem rá a fáradságot, hogy letöltsem a keretrendszert és megnézzem, mi lehet az igazság, itt van kimazsolázva az érintett kódrészlet:

    class Kohana_ORM extends Model implements serializable {

    //...................................................

    /**
    * Database query builder
    * @var Database_Query_Builder_Where
    */
    protected $_db_builder;

    //...................................................

    /**
    * Initializes the Database Builder to given query type
    *
    * @param integer $type Type of Database query
    * @return ORM
    */
    protected function _build($type)
    {
    // Construct new builder object based on query type
    switch ($type)
    {
    case Database::SELECT:
    $this->_db_builder = DB::select();
    break;
    case Database::UPDATE:
    $this->_db_builder = DB::update(array($this->_table_name, $this->_object_name));
    break;
    case Database::DELETE:
    $this->_db_builder = DB::delete(array($this->_table_name, $this->_object_name));
    }

    // Process pending database method calls
    foreach ($this->_db_pending as $method)
    {
    $name = $method['name'];
    $args = $method['args'];

    $this->_db_applied[$name] = $name;

    call_user_func_array(array($this->_db_builder, $name), $args);
    }

    return $this;
    }


    //...................................................

    /**
    * Finds multiple database rows and returns an iterator of the rows found.
    *
    * @return Database_Result
    */
    public function find_all()
    {
    if ($this->_loaded)
    throw new Kohana_Exception('Method find_all() cannot be called on loaded objects');

    if ( ! empty($this->_load_with))
    {
    foreach ($this->_load_with as $alias)
    {
    // Bind auto relationships
    $this->with($alias);
    }
    }

    $this->_build(Database::SELECT);

    return $this->_load_result(TRUE);
    }

    //...................................................

    } // End ORM

    Na most a többi érintett kódrészletet már nem másolgatom be, mert akkor kicsit hosszú lenne a hozzászólásom, de ami ebből is látható (meg a többi kódrészletből), az alátámasztani látszik azt, amit modder írt.

    ===

    (#5) : Ezek szerint addig nem jelenik meg a buborék, amíg meg nem jelenik az első hsz.? Hmm.
    A példára rátérve igazából arra lettem volna kíváncsi, hogyan tesztelted, ami miatt a sima Iterator interface implementációjával történő tesztelés elszállt futási idő túllépésével. Meglepő, ha ekkora a különbség, ilyen esetben meg azért nem árt tudni, mi volt a tesztkörnyezet, amiben ez teljesült.

Új hozzászólás Aktív témák