/**
  * {@inheritdoc}
  */
 protected function write(array $record)
 {
     $filtered = json_decode($record['formatted'], true);
     $result = $this->flatten($filtered);
     $entity = new Entity();
     $entity->setPartitionKey($result['message'] . '-' . $_SERVER['SERVER_NAME']);
     $entity->setRowKey(strval(PHP_INT_MAX - (int) (microtime(true) * 10000)));
     foreach ($result as $k => $v) {
         $entity->addProperty(strval($k), null, strval($v));
     }
     $this->client->insertOrReplaceEntity($this->table, $entity);
 }
 private static function getNewEntity()
 {
     if (is_null(self::$curPartition) || self::$curPartition == count(self::$Partitions) - 1) {
         self::$curPartition = 0;
         self::$curRowKey = TableServiceFunctionalTestData::getNewKey();
     } else {
         self::$curPartition++;
     }
     $entity = new Entity();
     $entity->setPartitionKey(self::$Partitions[self::$curPartition]);
     $entity->setRowKey(self::$curRowKey);
     return $entity;
 }
예제 #3
0
 public static function setSettings($tenant, $settings)
 {
     $entity = new Entity();
     $entity->setPartitionKey($tenant);
     $entity->setRowKey("settings");
     foreach ($settings as $name => $value) {
         $entity->addProperty($name, null, $value);
     }
     try {
         self::$tableRestProxy->insertOrMergeEntity(self::$table, $entity);
     } catch (ServiceException $e) {
         $code = $e->getCode();
         $error_message = $e->getMessage();
         $app->error("Something went wrong when trying to save your configuration. Please try again later.");
     }
 }
예제 #4
0
function batchInsertEntitiesSample($tableClient)
{
    $batchOp = new BatchOperations();
    for ($i = 2; $i < 10; ++$i) {
        $entity = new Entity();
        $entity->setPartitionKey("pk");
        $entity->setRowKey('' . $i);
        $entity->addProperty("PropertyName", EdmType::STRING, "Sample" . $i);
        $batchOp->addInsertEntity("mytable", $entity);
    }
    try {
        $tableClient->batch($batchOp);
    } catch (ServiceException $e) {
        $code = $e->getCode();
        $error_message = $e->getMessage();
        echo $code . ": " . $error_message . PHP_EOL;
    }
}
 /**
  * @covers MicrosoftAzure\Storage\Table\TableRestProxy::deleteEntity
  * @covers MicrosoftAzure\Storage\Table\TableRestProxy::insertEntity
  */
 public function testDeleteEntityTroublesomeRowKey()
 {
     // The service does not allow the following common characters in keys:
     // 35 '#'
     // 47 '/'
     // 63 '?'
     // 92 '\'
     // In addition, the following values are not allowed, as they make the URL bad:
     // 0-31, 127-159
     // That still leaves several options for making troublesome keys
     // spaces
     // single quotes
     // Unicode
     // These need to be properly encoded when passed on the URL, else there will be trouble
     $table = TableServiceFunctionalTestData::$testTableNames[0];
     $e = new Entity();
     $e->setRowKey('row\'Key\'');
     $e->setPartitionKey('niceKey');
     $this->restProxy->insertEntity($table, $e);
     $this->restProxy->deleteEntity($table, $e->getPartitionKey(), $e->getRowKey());
     $qopts = new QueryEntitiesOptions();
     $qopts->setFilter(Filter::applyEq(Filter::applyPropertyName('RowKey'), Filter::applyConstant($e->getRowKey(), EdmType::STRING)));
     $queryres = $this->restProxy->queryEntities($table, $qopts);
     $this->assertEquals(0, count($queryres->getEntities()), 'entities returned');
     $e = new Entity();
     $e->setRowKey('row Key');
     $e->setPartitionKey('niceKey');
     $this->restProxy->insertEntity($table, $e);
     $this->restProxy->deleteEntity($table, $e->getPartitionKey(), $e->getRowKey());
     $qopts = new QueryEntitiesOptions();
     $qopts->setFilter(Filter::applyEq(Filter::applyPropertyName('RowKey'), Filter::applyConstant($e->getRowKey(), EdmType::STRING)));
     $queryres = $this->restProxy->queryEntities($table, $qopts);
     $this->assertEquals(0, count($queryres->getEntities()), 'entities returned');
     $e = new Entity();
     $e->setRowKey('row ' . TableServiceFunctionalTestData::getUnicodeString());
     $e->setPartitionKey('niceKey');
     $this->restProxy->insertEntity($table, $e);
     $this->restProxy->deleteEntity($table, $e->getPartitionKey(), $e->getRowKey());
     $qopts = new QueryEntitiesOptions();
     $qopts->setFilter(Filter::applyEq(Filter::applyPropertyName('RowKey'), Filter::applyConstant($e->getRowKey(), EdmType::STRING)));
     $queryres = $this->restProxy->queryEntities($table, $qopts);
     $this->assertEquals(0, count($queryres->getEntities()), 'entities returned');
     $this->clearTable($table);
 }
 static function cloneEntity($initialEnt)
 {
     $ret = new Entity();
     $initialProps = $initialEnt->getProperties();
     $retProps = array();
     foreach ($initialProps as $propName => $initialProp) {
         // Don't mess with the timestamp.
         if ($propName == 'Timestamp') {
             continue;
         }
         $retProp = new Property();
         $retProp->setEdmType($initialProp->getEdmType());
         $retProp->setValue($initialProp->getValue());
         $retProps[$propName] = $retProp;
     }
     $ret->setProperties($retProps);
     $ret->setETag($initialEnt->getETag());
     return $ret;
 }
 /**
  * @covers MicrosoftAzure\Storage\Table\TableRestProxy::batch
  * @covers MicrosoftAzure\Storage\Table\TableRestProxy::insertEntity
  * @covers MicrosoftAzure\Storage\Table\TableRestProxy::updateEntity
  */
 public function testBatchNegativeWorks()
 {
     // Arrange
     $table = self::$testTable8;
     $partitionKey = '001';
     // Insert an entity the modify it outside of the batch
     $entity1 = new Entity();
     $entity1->setPartitionKey($partitionKey);
     $entity1->setRowKey('batchNegativeWorks1');
     $entity1->addProperty('test', EdmType::INT32, 1);
     $entity2 = new Entity();
     $entity2->setPartitionKey($partitionKey);
     $entity2->setRowKey('batchNegativeWorks2');
     $entity2->addProperty('test', EdmType::INT32, 2);
     $entity3 = new Entity();
     $entity3->setPartitionKey($partitionKey);
     $entity3->setRowKey('batchNegativeWorks3');
     $entity3->addProperty('test', EdmType::INT32, 3);
     $entity1 = $this->restProxy->insertEntity($table, $entity1)->getEntity();
     $entity2 = $this->restProxy->insertEntity($table, $entity2)->getEntity();
     $entity2->addProperty('test', EdmType::INT32, -2);
     $this->restProxy->updateEntity($table, $entity2);
     // Act
     $batchOperations = new BatchOperations();
     // The $entity1 still has the original etag from the first submit,
     // so this update should fail, because another update was already made.
     $entity1->addProperty('test', EdmType::INT32, 3);
     $batchOperations->addDeleteEntity($table, $entity1->getPartitionKey(), $entity1->getRowKey(), $entity1->getETag());
     $batchOperations->addUpdateEntity($table, $entity2);
     $batchOperations->addInsertEntity($table, $entity3);
     $result = $this->restProxy->batch($batchOperations);
     // Assert
     $this->assertNotNull($result, '$result');
     $entries = $result->getEntries();
     $this->assertEquals(1, count($entries), 'count($result->getEntries())');
     $this->assertNotNull($entries[0], 'First $result should not be null');
     $this->assertTrue($entries[0] instanceof BatchError, 'First $result type');
     $error = $entries[0];
     $this->assertEquals(412, $error->getError()->getCode(), 'First $result status code');
 }
예제 #8
0
 /**
  * @covers MicrosoftAzure\Storage\Table\Models\Entity::isValid
  */
 public function testIsValidWithEmptyPartitionKey()
 {
     // Setup
     $entity = new Entity();
     $entity->addProperty('name', EdmType::STRING, 'string');
     // Assert
     $actual = $entity->isValid();
     // Assert
     $this->assertFalse($actual);
 }
예제 #9
0
 /**
  * Parses an entity entry from given SimpleXML object.
  * 
  * @param \SimpleXML $result The SimpleXML object representing the entity.
  * 
  * @return \MicrosoftAzure\Storage\Table\Models\Entity
  */
 private function _parseOneEntity($result)
 {
     $prefix = $this->_dataServicesMetadataPrefix;
     $prop = $result->content->xpath(".//{$prefix}:properties");
     $prop = $prop[0]->children($this->_dataServicesNamespaceName);
     $entity = new Entity();
     // Set ETag
     $etag = $result->attributes($this->_dataServicesMetadataNamespaceName);
     $etag = $etag[Resources::ETAG];
     $entity->setETag((string) $etag);
     foreach ($prop as $key => $value) {
         $attributes = $value->attributes($this->_dataServicesMetadataNamespaceName);
         $type = $attributes['type'];
         $isnull = $attributes['null'];
         $value = EdmType::unserializeQueryValue((string) $type, $value);
         $entity->addProperty((string) $key, is_null($type) ? EdmType::STRING : (string) $type, $isnull ? null : $value);
     }
     return $entity;
 }
예제 #10
0
 /**
  * Inserts new entity to the table.
  * 
  * @param string                     $entries The entries values.
  * @param Models\TableServiceOptions $options The optional parameters.
  * 
  * @return none
  * 
  * @see http://msdn.microsoft.com/en-us/library/windowsazure/dd179433.aspx
  */
 public function insertTypelessEntity($entries, $options = null)
 {
     $entity = new Entity();
     $entity->setPartitionKey($this->_defaultParitionKey);
     $entity->setRowKey(uniqid());
     foreach ($entries as $columnName => $value) {
         $entity->addProperty($columnName, null, $value);
     }
     $this->_proxy->insertEntity($this->_name, $entity, $options);
 }
예제 #11
0
 public static function getExpectedTestEntity($partitionKey, $rowKey)
 {
     $entity = new Entity();
     $entity->addProperty('PartitionKey', EdmType::STRING, $partitionKey);
     $entity->addProperty('RowKey', EdmType::STRING, $rowKey);
     $entity->addProperty('CustomerId', EdmType::INT32, 890);
     $entity->addProperty('CustomerName', EdmType::STRING, 'John');
     $entity->addProperty('IsNew', EdmType::BOOLEAN, true);
     $entity->addProperty('JoinDate', EdmType::DATETIME, Utilities::convertToDateTime('2012-01-26T18:26:19.0000473Z'));
     return $entity;
 }
 /**
  * @covers MicrosoftAzure\Storage\Table\TableRestProxy::insertEntity
  * @covers MicrosoftAzure\Storage\Table\TableRestProxy::queryEntities
  */
 public function testInsertEntityString()
 {
     foreach (TableServiceFunctionalTestData::getInterestingGoodStrings() as $o) {
         $ent = new Entity();
         $ent->setPartitionKey(TableServiceFunctionalTestData::getNewKey());
         $ent->setRowKey(TableServiceFunctionalTestData::getNewKey());
         $ent->addProperty('STRING', EdmType::STRING, $o);
         $this->insertEntityWorker($ent, true, null, $o);
     }
 }
 static function getSimpleEntities($count)
 {
     $ret = array();
     $e = new Entity();
     $e->setPartitionKey('singlePartition');
     $e->setRowKey(self::getNewKey());
     $e->addProperty('INT32', EdmType::INT32, 23);
     array_push($ret, $e);
     $booleans = self::getInterestingGoodBooleans();
     $dates = self::getInterestingGoodDates();
     $doubles = self::getInterestingGoodDoubles();
     $guids = self::getInterestingGoodGuids();
     $ints = self::getInterestingGoodInts();
     $longs = self::getInterestingGoodLongs();
     $binaries = self::getInterestingGoodBinaries();
     $strings = self::getInterestingGoodStrings();
     // The random here is not to generate random values, but to
     // get a good mix of values in the table entities.
     mt_srand(123);
     for ($i = 0; $i < $count - 1; $i++) {
         $e = new Entity();
         $e->setPartitionKey('singlePartition');
         $e->setRowKey(self::getNewKey());
         self::addProperty($e, 'BINARY', EdmType::BINARY, $binaries);
         self::addProperty($e, 'BOOLEAN', EdmType::BOOLEAN, $booleans);
         self::addProperty($e, 'DATETIME', EdmType::DATETIME, $dates);
         self::addProperty($e, 'DOUBLE', EdmType::DOUBLE, $doubles);
         self::addProperty($e, 'GUID', EdmType::GUID, $guids);
         self::addProperty($e, 'INT32', EdmType::INT32, $ints);
         self::addProperty($e, 'INT64', EdmType::INT64, $longs);
         self::addProperty($e, 'STRING', EdmType::STRING, $strings);
         array_push($ret, $e);
     }
     return $ret;
 }