public function assemble()
    {
        $fields  = $this->getPart(Kwf_Db_Table_Select::COLUMNS);
        $primary  = $this->_table->getTableName();
        $schema  = $this->_table->getSchemaName();


        if (count($this->_parts[self::UNION]) == 0) {

            // If no fields are specified we assume all fields from primary table
            if (!count($fields)) {
                $this->from($primary, self::SQL_WILDCARD, $schema);
                $fields = $this->getPart(Kwf_Db_Table_Select::COLUMNS);
            }

            $from = $this->getPart(Kwf_Db_Table_Select::FROM);

            if ($this->_integrityCheck !== false) {
                foreach ($fields as $columnEntry) {
                    list($table, $column) = $columnEntry;

                    // Check each column to ensure it only references the primary table
                    if ($column) {
                        if (!isset($from[$table]) || $from[$table]['tableName'] != $primary) {
                            throw new Kwf_Exception('Select query cannot join with another table');
                        }
                    }
                }
            }
        }

        return parent::assemble();
    }