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; }