/**
  * @return array
  */
 public function getConstructorStatementGenerationData()
 {
     $propertyDefinition1 = new PropertyStringDefinition('p1');
     $propertyDefinition1->setQueryName('p1-qn');
     $propertyDefinition2 = new PropertyStringDefinition('p2');
     $propertyDefinition2->setQueryName('p2-qn');
     $typeDefinition1 = new SecondaryTypeDefinition('t1');
     $typeDefinition1->setQueryName('t1-qn');
     $typeDefinition2 = new SecondaryTypeDefinition('t2');
     $typeDefinition2->setQueryName('t2-qn');
     return array('Statement passed through if provided' => array(array('foobar-statement', array(), array(), null, array()), 'foobar-statement'), 'Single property from single type without clause without ordering' => array(array(null, array('p1'), array('t1'), null, array()), 'SELECT p1 FROM t primary'), 'Single property from single type with alias without clause without ordering' => array(array(null, array('p1'), array('t1 alias1'), null, array()), 'SELECT p1 FROM t alias1'), 'Single property from single type with clause without ordering' => array(array(null, array('p1'), array('t1'), '1=1', array()), 'SELECT p1 FROM t primary WHERE 1=1'), 'Single property from single type with clause with ordering' => array(array(null, array('p1'), array('t1'), '1=1', array('p1 ASC')), 'SELECT p1 FROM t primary WHERE 1=1 ORDER BY p1 ASC'), 'Single property from two types without clause without ordering' => array(array(null, array('p1'), array('t1', 't2'), null, array()), 'SELECT p1 FROM t primary JOIN t AS a ON primary.cmis:objectId = a.cmis:objectId'), 'Two properties from single type without clause without ordering' => array(array(null, array('p1', 'p2'), array('t1'), null, array()), 'SELECT p1, p2 FROM t primary'), 'Two properties from two types without clause without ordering' => array(array(null, array('p1', 'p2'), array('t1', 't2'), null, array()), 'SELECT p1, p2 FROM t primary JOIN t AS a ON primary.cmis:objectId = a.cmis:objectId'), 'Two properties from two types with clause without ordering' => array(array(null, array('p1', 'p2'), array('t1', 't2'), '1=1', array()), 'SELECT p1, p2 FROM t primary JOIN t AS a ON primary.cmis:objectId = a.cmis:objectId WHERE 1=1'), 'Two properties from two types with clause with ordering' => array(array(null, array('p1', 'p2'), array('t1', 't2'), '1=1', array('p1 ASC')), 'SELECT p1, p2 FROM t primary JOIN t AS a ON primary.cmis:objectId = a.cmis:objectId WHERE 1=1' . ' ORDER BY p1 ASC'), 'Multiple orderings without clause' => array(array(null, array('p1', 'p2'), array('t1'), null, array('p1 ASC', 'p2 DESC')), 'SELECT p1, p2 FROM t primary ORDER BY p1 ASC, p2 DESC'), 'Multiple orderings with clause' => array(array(null, array('p1', 'p2'), array('t1'), '1=1', array('p1 ASC', 'p2 DESC')), 'SELECT p1, p2 FROM t primary WHERE 1=1 ORDER BY p1 ASC, p2 DESC'), 'Alias of tables provided for single table' => array(array(null, array('p1'), array(array('t1', 'alias')), null, array()), 'SELECT p1 FROM t alias'), 'Alias of tables provided for multiple tables' => array(array(null, array('p1'), array(array('t1', 'alias1'), array('t2', 'alias2')), null, array()), 'SELECT p1 FROM t alias1 JOIN t AS alias2 ON alias1.cmis:objectId = alias2.cmis:objectId'), 'TypeDefinition instance in property list' => array(array(null, array($propertyDefinition1), array('t1'), null, array()), 'SELECT p1-qn FROM t primary'), 'Multiple TypeDefinition instances in property list' => array(array(null, array($propertyDefinition1, $propertyDefinition2), array('t1'), null, array()), 'SELECT p1-qn, p2-qn FROM t primary'), 'TypeDefinition instance in types list' => array(array(null, array('p1'), array($typeDefinition1), null, array()), 'SELECT p1 FROM t primary'), 'TypeDefinition instance with alias in types list' => array(array(null, array('p1'), array(array($typeDefinition1, 'alias1')), null, array()), 'SELECT p1 FROM t alias1'), 'Multiple TypeDefinition instances in types list' => array(array(null, array('p1'), array($typeDefinition1, $typeDefinition2), null, array()), 'SELECT p1 FROM t primary JOIN t AS a ON primary.cmis:objectId = a.cmis:objectId'), 'Multiple TypeDefinition instances with aliases in types list' => array(array(null, array('p1'), array(array($typeDefinition1, 'alias1'), array($typeDefinition2, 'alias2')), null, array()), 'SELECT p1 FROM t alias1 JOIN t AS alias2 ON alias1.cmis:objectId = alias2.cmis:objectId'), 'TypeDefinition instance in orderings list' => array(array(null, array('p1'), array('t1'), null, array($propertyDefinition1)), 'SELECT p1 FROM t primary ORDER BY p1-qn ASC'), 'Multiple TypeDefinition instances in orderings list' => array(array(null, array('p1'), array('t1'), null, array($propertyDefinition1, $propertyDefinition2)), 'SELECT p1 FROM t primary ORDER BY p1-qn ASC, p2-qn ASC'), 'Multiple TypeDefinition instances with direction in orderings list' => array(array(null, array('p1'), array('t1'), null, array(array($propertyDefinition1, 'DESC'), array($propertyDefinition2, 'DESC'))), 'SELECT p1 FROM t primary ORDER BY p1-qn DESC, p2-qn DESC'));
 }