public function set($col, $value = ClauseInterface::NO_VALUE)
    {
        if (is_array($col)) {
            return $this->setWithArrayData($col);
        }

        // update column name
        if (!isset($this->clause_set[$col])) {
            $this->clause_set[$col] = true;
        }

        // store data by row
        if (ClauseInterface::NO_VALUE !== $value) {
            $this->clause_data[$this->clause_rownum][$col] = $value;
        }

        return $this;
    }