コード例 #1
0
ファイル: blockinserter.php プロジェクト: Satariall/izurit
 public function insert($row)
 {
     if (!is_array($row) || empty($row)) {
         return;
     }
     $this->index++;
     $this->bufferSize++;
     if ($this->autoIncFld !== false) {
         $row[$this->autoIncFld] = $this->index;
         Helper::incrementSequenceForTable($this->tableName);
         // if this is oracle and we insert auto increment key directly, we must provide sequence increment manually
     }
     $sql = Helper::getBatchInsertValues($row, $this->tableName, $this->fldVector, $this->map);
     /*
     MySQL & MsSQL: insert into b_test (F1,F2) values ('one','two'),('one1','two1'),('one2','two2')
     Oracle: insert all into b_test (F1,F2) values ('one','two') into b_test (F1,F2) values ('one1','two1') into b_test (F1,F2) values ('one2','two2')  select * from dual
     */
     $nextBuffer = (empty($this->buffer) ? $this->insertHead : $this->buffer . Helper::getBatchInsertSeparator()) . $sql;
     // here check length
     if (defined(SITE_CHARSET) && SITE_CHARSET == 'UTF-8') {
         $len = mb_strlen($nextBuffer);
     } else {
         $len = strlen($nextBuffer);
     }
     if ($this->mtu - (strlen($nextBuffer) + 100) < self::RED_LINE) {
         $this->flush();
         // flushing the previous buffer (now $this->buffer == '')
         $this->buffer = $this->insertHead . $sql;
     } else {
         $this->buffer = $nextBuffer;
     }
     return $this->index;
 }