<?php

namespace Planaday\Database\Abstraction\SQLQuery\QueryBuilding;

use Planaday\Database\Abstraction\SQLQuery\QueryBuilding\SQLUseInterfaces\SQLCondition;
use Planaday\Database\Abstraction\SQLQuery\QueryBuilding\SQLUseInterfaces\SQLFromable;
use Planaday\Database\Abstraction\SQLQuery\QueryBuilding\SQLUseInterfaces\SQLSelectable;

interface SQLQuery {
	public function isDistinct(): void;

	public function setLimit(int $limit ): void;

	public function setOffset(int $offset ): void;

	public function setFrom( SQLFromable $from ): void;

	public function getFrom(): SQLFromable;

	public function addSelect(SQLSelectable $select ): void;

	public function setWhere(SQLCondition $where ): void;

	public function setGroupBy(SQLColumn $groupBy ): void;

	public function setOrderBy(SQLColumn $orderBy ): void;

	public function setHaving(SQLCondition $having ): void;

	public function toQuery():string;
}