public function getResultSpecifier() { $resultSpecifier = new ResultSpecifier(); $resultColumn = new ResultColumnSpecifier(); foreach ($this->getColumns() as $alias => $column) { switch (true) { case $column instanceof Column: $resultColumn->setSchemaSourceColumn($column); $resultColumn->setName($column->getColumn()); break; case $column === '*': $resultColumn->setSchemaSourceJoker(); $resultColumn->setIsAllColumnsFromTable(true); break; case $column instanceof Table: $resultColumn->setSchemaSourceTable($column); $resultColumn->setIsAllColumnsFromTable(true); break; case $column instanceof Select: $Specifier = $column->getResultSpecifier(); if (count($Specifier->getColumns()) !== 1) { throw new MalformedSqlException("Wrong column count in sub-select!"); } $resultColumn = reset($Specifier->getColumns()); break; case $column instanceof ValuePart: $resultColumn->setSchemaSourceValue($column); break; } if (is_string($alias)) { $resultColumn->setName($alias); } $resultSpecifier->addColumn(clone $resultColumn); } return $resultSpecifier; }