private function _initSetup()
    {
        unset($this->columnFieldMap);
        $this->columnFieldMap = array();
        unset($this->keyFieldColumnMap);
        $this->keyFieldColumnMap = array();
        $i = 0;
        // generate column index if the column is one of the basetable (column!="")
        foreach ($this->varValue as $key => $field) {  // $key is fieldname, $field is fieldobj
            ////////////////////////////////////////////////////////////////////
            // TODO: join fields and nonjoin fields may have same column name
            ////////////////////////////////////////////////////////////////////
            if (isset($field->column) && !isset($field->join) ) {  // ignore the joined field column
                $this->columnFieldMap[$field->column] = $key;
            }
            if (isset($field->column) || isset($field->sqlExpression)) {
                $field->index = $i++;
            }
        }
        // create key field column map to support composite key
        if (isset($this->varValue["Id"]) && $this->varValue["Id"]->column) {
            $keycols = explode(",", $this->varValue["Id"]->column);
            foreach ($keycols as $col) {
                $field = $this->getFieldByColumn($col);  // main table
                $this->keyFieldColumnMap[$field] = $col;
            }
        }
    }