protected function processColumns () {
        // Get a schema manager and get the list of columns
        $sm = $this->conn->getSchemaManager();
        $columns = $sm->listTableColumns($this->tableName);

        $type_lookup = array();

        /**
         * @var $col Column
         */
        foreach($columns as $col) {
            $type_lookup[$col->getName()] = $col;
        }

        foreach($this->colDefs as $item) {
            $id = $item['id'];
            $category = $item['category'];
            $opts = $item['options'];

            /**
             * @var $target SQLColumn
             */
            $target = null;

            switch($category) {
                case SQLColumn::CATEGORY_VALUE:
                    $target = new ValueColumn($id, $category, $opts);
                    break;
                // case "foreign":
                //     $target = new ForeignColumn($id, $category, $opts);
                //     break;
                case SQLColumn::CATEGORY_PRIMARY:
                    $target = new PrimaryColumn($id, $category, $opts);
                    break;
                case SQLColumn::CATEGORY_EXTERNAL:
                    $target = new ExternalColumn ($id, $category, $opts);
                    break;
                default:
                    //TODO: Throw library-specific exceptions
                    throw new \Exception("Unknown category for column $category");
            }

            $target->doctrineColumnLookup($type_lookup);
            $target->init ();

            $this->columns[$id] = $target;
        }
    }