protected function compileSelect($select_override = false): string
	{
		// Write the "select" portion of the query
		if ($select_override !== false)
		{
			$sql = $select_override;
		}
		else
		{
			$sql = ( ! $this->QBDistinct) ? 'SELECT ' : 'SELECT DISTINCT ';

			if (empty($this->QBSelect))
			{
				$sql .= '*';
			}
			else
			{
				// Cycle through the "select" portion of the query and prep each column name.
				// The reason we protect identifiers here rather than in the select() function
				// is because until the user calls the from() function we don't know if there are aliases
				foreach ($this->QBSelect as $key => $val)
				{
					$no_escape            = $this->QBNoEscape[$key] ?? null;
					$this->QBSelect[$key] = $this->db->protectIdentifiers($val, false, $no_escape);
				}

				$sql .= implode(', ', $this->QBSelect);
			}
		}

		// Write the "FROM" portion of the query
		if (! empty($this->QBFrom))
		{
			$sql .= "\nFROM " . $this->_fromTables();
		}

		// Write the "JOIN" portion of the query
		if (! empty($this->QBJoin))
		{
			$sql .= "\n" . implode("\n", $this->QBJoin);
		}

		$sql .= $this->compileWhereHaving('QBWhere')
				. $this->compileGroupBy()
				. $this->compileWhereHaving('QBHaving')
				. $this->compileOrderBy(); // ORDER BY
		// LIMIT
		if ($this->QBLimit)
		{
			return $this->_limit($sql . "\n");
		}

		return $sql;
	}
protected function compileSelect($select_override = false): string
	{
		// Write the "select" portion of the query
		if ($select_override !== false)
		{
			$sql = $select_override;
		}
		else
		{
			$sql = ( ! $this->QBDistinct) ? 'SELECT ' : 'SELECT DISTINCT ';

			if (empty($this->QBSelect))
			{
				$sql .= '*';
			}
			else
			{
				// Cycle through the "select" portion of the query and prep each column name.
				// The reason we protect identifiers here rather than in the select() function
				// is because until the user calls the from() function we don't know if there are aliases
				foreach ($this->QBSelect as $key => $val)
				{
					$no_escape            = $this->QBNoEscape[$key] ?? null;
					$this->QBSelect[$key] = $this->db->protectIdentifiers($val, false, $no_escape);
				}

				$sql .= implode(', ', $this->QBSelect);
			}
		}

		// Write the "FROM" portion of the query
		if (! empty($this->QBFrom))
		{
			$sql .= "\nFROM " . $this->_fromTables();
		}

		// Write the "JOIN" portion of the query
		if (! empty($this->QBJoin))
		{
			$sql .= "\n" . implode("\n", $this->QBJoin);
		}

		$sql .= $this->compileWhereHaving('QBWhere')
				. $this->compileGroupBy()
				. $this->compileWhereHaving('QBHaving')
				. $this->compileOrderBy(); // ORDER BY
		// LIMIT
		if ($this->QBLimit)
		{
			return $this->_limit($sql . "\n");
		}

		return $sql;
	}
protected function compileSelect ( $ select_override = false ) : string { // Write the "select" portion of the query if ( $ select_override !== false ) { $ sql = $ select_override ; } else { $ sql = ( ! $ this -> QBDistinct ) ? 'SELECT ' : 'SELECT DISTINCT ' ; if ( empty ( $ this -> QBSelect ) ) { $ sql .= '*' ; } else { // Cycle through the "select" portion of the query and prep each column name. // The reason we protect identifiers here rather than in the select() function // is because until the user calls the from() function we don't know if there are aliases foreach ( $ this -> QBSelect as $ key => $ val ) { $ no_escape = $ this -> QBNoEscape [ $ key ] ?? null ; $ this -> QBSelect [ $ key ] = $ this -> db -> protectIdentifiers ( $ val , false , $ no_escape ) ; } $ sql .= implode ( ', ' , $ this -> QBSelect ) ; } } // Write the "FROM" portion of the query if ( ! empty ( $ this -> QBFrom ) ) { $ sql .= "\nFROM " . $ this -> _fromTables ( ) ; } // Write the "JOIN" portion of the query if ( ! empty ( $ this -> QBJoin ) ) { $ sql .= "\n" . implode ( "\n" , $ this -> QBJoin ) ; } $ sql .= $ this -> compileWhereHaving ( 'QBWhere' ) . $ this -> compileGroupBy ( ) . $ this -> compileWhereHaving ( 'QBHaving' ) . $ this -> compileOrderBy ( ) ; // ORDER BY // LIMIT if ( $ this -> QBLimit ) { return $ this -> _limit ( $ sql . "\n" ) ; } return $ sql ; }
Compile the SELECT statement

Generates a query string based on which functions were used.
Should not be called directly.

@param mixed $select_override

@return string
Compile the SELECT statement