public function createQueryStatement(
        array $selectPropertyIds,
        array $fromTypes,
        $whereClause = null,
        array $orderByPropertyIds = []
    ) {
        if (empty($selectPropertyIds)) {
            throw new CmisInvalidArgumentException('Select property IDs must not be empty');
        }
        if (empty($fromTypes)) {
            throw new CmisInvalidArgumentException('From types must not be empty');
        }

        return new QueryStatement($this, null, $selectPropertyIds, $fromTypes, $whereClause, $orderByPropertyIds);
    }