Example #1
0
 function test_addChild_should_set_children_object_properties()
 {
     $coll = new Collection('foo_collection');
     $coll->addChild(new Collection('bar_child'));
     $child = $coll->getChildren();
     $child = reset($child);
     $this->assertEquals(false, $child->isRequired());
     $this->assertEquals($coll->getName(), $child->getParentName());
 }
 /**
  * Creates a new collection on the server
  *
  * This will add the collection on the server and return its id
  * The id is mainly returned for backwards compatibility, but you should use the collection name for any reference to the collection.   *
  * This will throw if the collection cannot be created
  *
  * @throws Exception
  *
  * @param mixed $collection - collection object to be created on the server or a string with the name
  * @param array $options    - an array of options.
  *                          <p>Options are :<br>
  *                          <li>'type'            - 2 -> normal collection, 3 -> edge-collection</li>
  *                          <li>'waitForSync'     -  if set to true, then all removal operations will instantly be synchronised to disk / If this is not specified, then the collection's default sync behavior will be applied.</li>
  *                          <li>'journalSize'     -  journalSize value.</li>
  *                          <li>'isSystem'        -  false->user collection(default), true->system collection .</li>
  *                          <li>'isVolatile'      -  false->persistent collection(default), true->volatile (in-memory) collection .</li>
  *                          <li>'numberOfShards'  -  number of shards for the collection.</li>
  *                          <li>'shardKeys'       -  list of shard key attributes.</li>
  *                          </p>
  *
  * @return mixed - id of collection created
  */
 public function create($collection, $options = array())
 {
     if (is_string($collection)) {
         $name = $collection;
         $collection = new Collection();
         $collection->setName($name);
         foreach ($options as $key => $value) {
             $collection->{'set' . ucfirst($key)}($value);
         }
     }
     if ($collection->getWaitForSync() === null) {
         $collection->setWaitForSync($this->getConnectionOption(ConnectionOptions::OPTION_WAIT_SYNC));
     }
     if ($collection->getJournalSize() === null) {
         $collection->setJournalSize($this->getConnectionOption(ConnectionOptions::OPTION_JOURNAL_SIZE));
     }
     if ($collection->getIsSystem() === null) {
         $collection->setIsSystem($this->getConnectionOption(ConnectionOptions::OPTION_IS_SYSTEM));
     }
     if ($collection->getIsVolatile() === null) {
         $collection->setIsVolatile($this->getConnectionOption(ConnectionOptions::OPTION_IS_VOLATILE));
     }
     $type = $collection->getType() ? $collection->getType() : Collection::getDefaultType();
     $params = array(Collection::ENTRY_NAME => $collection->getName(), Collection::ENTRY_TYPE => $type, Collection::ENTRY_WAIT_SYNC => $collection->getWaitForSync(), Collection::ENTRY_JOURNAL_SIZE => $collection->getJournalSize(), Collection::ENTRY_IS_SYSTEM => $collection->getIsSystem(), Collection::ENTRY_IS_VOLATILE => $collection->getIsVolatile(), Collection::ENTRY_KEY_OPTIONS => $collection->getKeyOptions());
     // set extra cluster attributes
     if ($collection->getNumberOfShards() !== null) {
         $params[Collection::ENTRY_NUMBER_OF_SHARDS] = $collection->getNumberOfShards();
     }
     if (is_array($collection->getShardKeys())) {
         $params[Collection::ENTRY_SHARD_KEYS] = $collection->getShardKeys();
     }
     $response = $this->getConnection()->post(Urls::URL_COLLECTION, $this->json_encode_wrapper($params));
     //    $location = $response->getLocationHeader();
     //    if (!$location) {
     //      throw new ClientException('Did not find location header in server response');
     //    }
     $jsonResponse = $response->getJson();
     $id = $jsonResponse['id'];
     $collection->setId($id);
     return $id;
 }