Exemplo n.º 1
0
Arquivo: sql.php Projeto: Sywooch/dump
 protected function loadFlexias(phpMorphy_Dict_Source_Normalized_Ancodes $source, $context, $dictId)
 {
     $fields = array('dict_id', 'flexia_model_id', 'form_no', 'suffix', 'prefix', 'ancode_id');
     $stmt = $this->engine->prepareInsert('flexias', $fields);
     $bulk = $this->engine->getBulkInserter('flexias', $fields);
     $map = $context->getFlexiasMap();
     $ancodes_map = $context->getAncodesMap();
     $total_flexias = 0;
     $total_models = 0;
     $prev_time = microtime(true);
     foreach ($source->getFlexias() as $flexia_model) {
         $form_no = 0;
         $flexia_model_id = 0;
         // this updated latter
         foreach ($flexia_model->getFlexias() as $flexia) {
             if ($total_flexias % self::DUMP_EVERY_FLEXIA == 0) {
                 $time = microtime(true) - $prev_time;
                 $this->log(sprintf("{$total_models}/{$total_flexias} flexias done, %0.2f fps", $total_flexias / $time));
             }
             if ($total_flexias % self::COMMIT_EVERY_FLEXIA == 0) {
                 $this->log("Flush packet of inserts");
                 $bulk->execute();
             }
             $data = array($dictId, $flexia_model_id, $form_no, $this->trim($flexia->getSuffix(), 32), $this->trim($flexia->getPrefix(), 16), $ancodes_map->resolve($flexia->getAncodeId()));
             if (!$form_no) {
                 $stmt->execute($data);
                 $flexia_model_id = (int) $this->engine->getLastInsertId('flexias');
                 // TODO: use separate sequence (emulate in mysql?)
                 $sql = 'UPDATE ' . $this->engine->quoteTableName('flexias') . ' SET flexia_model_id = ' . $flexia_model_id . ' WHERE id = ' . $flexia_model_id;
                 $this->engine->execute($sql, false);
             } else {
                 $bulk->add($data);
             }
             $form_no++;
             $total_flexias++;
         }
         if (!$flexia_model_id) {
             throw new phpMorphy_Dict_Writer_Sql_Exception("New flexia model without id");
         }
         $map->register($flexia_model->getId(), $flexia_model_id);
         $total_models++;
     }
     $bulk->execute();
 }