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);
    }
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);
    }
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 ) ; }
Creates a query statement for a query of one primary type joined by zero or more secondary types.

Generates something like this:
`SELECT d.cmis:name,s.SecondaryStringProp FROM cmis:document AS d JOIN MySecondaryType AS s ON
d.cmis:objectId=s.cmis:objectId WHERE d.cmis:name LIKE ? ORDER BY d.cmis:name,s.SecondaryIntegerProp`

@param string[] $selectPropertyIds the property IDs in the SELECT statement,
if <code>null</code> all properties are selected
@param string[] $fromTypes a Map of type aliases (keys) and type IDs (values), the Map must contain
exactly one primary type and zero or more secondary types
@param string|null $whereClause an optional WHERE clause with placeholders ('?'), see QueryStatement for details
@param string[] $orderByPropertyIds an optional list of properties IDs for the ORDER BY clause
@return QueryStatementInterface a new query statement object
@throws CmisInvalidArgumentException
Creates a query statement for a query of one primary type joined by zero or more secondary types .