fromConfig() public static method

Override the ConfigurableTrait fromConfig method to handle custom classes for records
public static fromConfig ( array $options = [] ) : mixed
$options array
return mixed
 public function testCreateLoad()
 {
     if ($this->client->getTransport()->getProtocolVersion() < 26) {
         //            $this->markTestSkipped( 'Record Create/Update Unpredictable Behaviour' );
     }
     $rec1 = ['oData' => ['alloggio' => 'baita', 'lavoro' => 'no', 'vacanza' => 'lago']];
     $rec = Record::fromConfig($rec1);
     $result = $this->client->execute('recordCreate', ['cluster_id' => 9, 'record' => $rec]);
     $this->assertInstanceOf('\\PhpOrient\\Protocols\\Binary\\Data\\Record', $result);
     $this->assertEquals('#9:0', (string) $result->getRid());
     //        var_export( $result . "\n" );
     $rec2 = ['oData' => ['alloggio' => 'albergo', 'lavoro' => 'ufficio', 'vacanza' => 'montagna']];
     $rec = Record::fromConfig($rec2);
     $result = $this->client->execute('recordCreate', ['cluster_id' => 9, 'record' => $rec]);
     $this->assertInstanceOf('\\PhpOrient\\Protocols\\Binary\\Data\\Record', $result);
     $this->assertEquals('#9:1', (string) $result->getRid());
     //        var_export( $result . "\n" );
     $rec3 = ['alloggio' => 'case', 'lavoro' => 'mercato', 'vacanza' => 'mare'];
     $rec = new Record();
     $rec->setOData($rec3);
     $rec->setOClass('V');
     $result = $this->client->execute('recordCreate', ['cluster_id' => 9, 'record' => $rec]);
     $this->assertInstanceOf('\\PhpOrient\\Protocols\\Binary\\Data\\Record', $result);
     $this->assertEquals('#9:2', (string) $result->getRid());
     //        var_export( $result . "\n" );
     $load = $this->client->execute('recordLoad', ['rid' => $result->getRid()]);
     $this->assertInstanceOf('\\PhpOrient\\Protocols\\Binary\\Data\\Record', $load[0]);
     $this->assertEquals('#9:2', (string) $load[0]->getRid());
     $this->assertEquals((string) $rec, (string) $load[0]);
     //        var_export( $load[0] . "\n" );
 }
Esempio n. 2
0
 public function setUp()
 {
     parent::setUp();
     $rec2 = ['oClass' => 'V', 'oData' => ['alloggio' => 'albergo']];
     $rec = Record::fromConfig($rec2);
     $this->first_rec = $this->client->execute('recordCreate', ['cluster_id' => 9, 'record' => $rec]);
     $rec3 = ['oClass' => 'V', 'oData' => ['alloggio' => 'house']];
     $rec = Record::fromConfig($rec3);
     $this->sec_rec = $this->client->execute('recordCreate', ['cluster_id' => 9, 'record' => $rec]);
 }
Esempio n. 3
0
 public function testDeserializeEmbeddedRecord()
 {
     $result = CSV::unserialize('Test@attr1:"test",attr2:(TestInfo@subAttr1:"sub test",subAttr2:123)');
     $payload = [];
     if (isset($result['oClass'])) {
         $payload['oClass'] = $result['oClass'];
         unset($result['oClass']);
     }
     $payload['oData'] = $result;
     $result = Record::fromConfig($payload);
     $testRecord = Record::fromConfig(['oClass' => 'Test', 'oData' => array('attr1' => 'test', 'attr2' => Record::fromConfig(['oClass' => 'TestInfo', 'version' => 0, 'oData' => array('subAttr1' => 'sub test', 'subAttr2' => '123')]))]);
     $this->assertEquals($testRecord, $result);
 }
Esempio n. 4
0
 /**
  * Read sync command payloads
  *
  * @return array|null
  * @throws PhpOrientBadMethodCallException
  * @throws PhpOrientException
  * @throws SocketException
  */
 public function _read_sync()
 {
     # type of response
     # decode body char with flag continue ( Header already read )
     $response_type = $this->_readChar();
     $res = [];
     switch ($response_type) {
         case 'n':
             # get end Line \x00
             $this->_readChar();
             $res = array(null);
             break;
         case $response_type == 'r' || $response_type == 'w':
             $res = [Record::fromConfig($this->_readRecord())];
             # get end Line \x00
             $this->_readChar();
             break;
         case 'a':
             $res = [$this->_readString()];
             # get end Line \x00
             $this->_readChar();
             break;
         case 'l':
             $list_len = $this->_readInt();
             for ($n = 0; $n < $list_len; $n++) {
                 $res[] = Record::fromConfig($this->_readRecord());
             }
             # async-result-type can be:
             # 0: no records remain to be fetched
             # 1: a record is returned as a result set
             # 2: a record is returned as pre-fetched to be loaded in client's
             #       cache only. It's not part of the result set but the client
             #       knows that it's available for later access
             $cached_results = $this->_read_prefetch_record();
             $res = array_merge($res, $cached_results);
             # cache = cached_results['cached']
             break;
         default:
             # debug errors
             if (!Constants::$LOGGING) {
                 throw new PhpOrientException('Unknown payload type ' . $response_type);
             }
             $msg = '';
             $m = $this->_transport->getSocket()->read(1);
             while ($m != '') {
                 $msg .= $m;
                 $this->_transport->hexDump($msg);
                 $m = $this->_transport->getSocket()->read(1);
             }
             break;
     }
     return $res;
 }
Esempio n. 5
0
 /**
  *
  */
 public function testLinkSetCreation()
 {
     $config = static::getConfig('connect');
     $client = new PhpOrient('localhost', 2424);
     $client->configure(array('username' => $config['username'], 'password' => $config['password']));
     $client->connect();
     try {
         $client->dbDrop('temp', Constants::STORAGE_TYPE_MEMORY);
     } catch (\Exception $e) {
         //            echo $e->getMessage();
         $client->getTransport()->debug($e->getMessage());
     }
     $client->dbCreate('temp', Constants::STORAGE_TYPE_MEMORY, Constants::DATABASE_TYPE_DOCUMENT);
     $client->dbOpen('temp');
     $client->sqlBatch('
         create class Test1;
         create property Test1.aString string;
         insert into Test1 (aString) VALUES ("b"),("c"),("d");
         create class Test2;
         create property Test2.aString string;
         create property Test2.anEmbeddedSetOfString embeddedset string;
         create property Test2.aLinkedSetOfTest1 linkset Test1;');
     $clusterTest1 = $client->query("select classes[name='Test1'].defaultClusterId from 0:1", -1)[0]['classes'];
     $clusterTest2 = $client->query("select classes[name='Test2'].defaultClusterId from 0:1", -1)[0]['classes'];
     $this->assertEquals('9', $clusterTest1);
     $this->assertEquals('10', $clusterTest2);
     $newRecord = ['oClass' => 'Test2', 'oData' => ['aString' => 'Test record', 'anEmbeddedSetOfString' => ['something 1', 'something 2', 'more other'], 'aLinkedSetOfTest1' => [new ID($clusterTest1, 1), new ID($clusterTest1, 2)]]];
     $newRecordObject = Record::fromConfig($newRecord);
     $newRecordObject->setRid(new ID($clusterTest2));
     $tmp = $client->recordCreate($newRecordObject);
     $this->assertInstanceOf('\\PhpOrient\\Protocols\\Binary\\Data\\Record', $tmp);
     /**
      * @var \PhpOrient\Protocols\Binary\Data\Record $record
      */
     $record = $client->recordLoad($tmp->getRid())[0];
     $this->assertEquals('Test record', $record->aString);
     $this->assertArrayHasKey(0, $record->anEmbeddedSetOfString);
     $this->assertArrayHasKey(1, $record->anEmbeddedSetOfString);
     $this->assertArrayHasKey(2, $record->anEmbeddedSetOfString);
     $this->assertEquals('something 1', $record->anEmbeddedSetOfString[0]);
     $this->assertEquals('something 2', $record->anEmbeddedSetOfString[1]);
     $this->assertEquals('more other', $record->anEmbeddedSetOfString[2]);
     $this->assertArrayHasKey(0, $record->aLinkedSetOfTest1);
     $this->assertArrayHasKey(1, $record->aLinkedSetOfTest1);
     $this->assertInstanceOf('\\PhpOrient\\Protocols\\Binary\\Data\\ID', $record->aLinkedSetOfTest1[0]);
     $this->assertInstanceOf('\\PhpOrient\\Protocols\\Binary\\Data\\ID', $record->aLinkedSetOfTest1[1]);
     $aLinkedSetOfTest1 = $record->aLinkedSetOfTest1;
     /**
      * @var \PhpOrient\Protocols\Binary\Data\ID[] $aLinkedSetOfTest1
      */
     $this->assertEquals('#9:1', $aLinkedSetOfTest1[0]->jsonSerialize());
     $this->assertEquals('#9:2', $aLinkedSetOfTest1[1]->__toString());
 }
Esempio n. 6
0
 /**
  * Consume an embedded record.
  *
  * @param string $input The input to unserialize.
  *
  * @return array The collected record and any remaining content.
  */
 protected static function eatRecord($input)
 {
     $record = [];
     $input = ltrim($input, ' ');
     if ($input[0] === ')') {
         // this is an empty record.
         return [$record, substr($input, 1)];
     }
     $chunk = self::eatFirstKey($input);
     if ($chunk[2]) {
         // this is actually a class name.
         $record['oClass'] = $chunk[0];
         $input = ltrim($chunk[1], ' ');
         if ($input[0] === ')') {
             return [$record, substr($input, 1)];
         }
         $chunk = self::eatKey($input);
         $key = $chunk[0];
         $input = $chunk[1];
     } else {
         $key = $chunk[0];
         $input = $chunk[1];
     }
     $chunk = self::eatValue($input);
     $value = $chunk[0];
     $input = ltrim($chunk[1], ' ');
     $record[$key] = $value;
     while (strlen($input) > 0) {
         if ($input[0] === ',') {
             $input = ltrim(substr($input, 1), ' ');
         } elseif ($input[0] === ')') {
             $input = ltrim(substr($input, 1), ' ');
             break;
         }
         $chunk = self::eatKey($input);
         $key = $chunk[0];
         $input = ltrim($chunk[1], ' ');
         if (strlen($input) > 0) {
             $chunk = self::eatValue($input);
             $value = $chunk[0];
             $input = $chunk[1];
             $record[$key] = $value;
         } else {
             $record[$key] = null;
         }
     }
     $payload = [];
     if (isset($record['oClass'])) {
         $payload['oClass'] = $record['oClass'];
         unset($record['oClass']);
     }
     if (isset($record['@type'])) {
         $payload['type'] = $record['@type'];
         unset($record['@type']);
     }
     $payload['oData'] = $record;
     $record = \PhpOrient\Protocols\Binary\Data\Record::fromConfig($payload);
     return [$record, $input];
 }
Esempio n. 7
0
 public function testNullValueHandling()
 {
     try {
         $client = new PhpOrient('localhost', 2424);
         $client->username = '******';
         $client->password = '******';
         $client->connect();
         $this->skipTestByOrientDBVersion(['2.1.3', '2.0.13', '1.7.10']);
         try {
             $client->dbDrop('temp', Constants::STORAGE_TYPE_MEMORY, Constants::DATABASE_TYPE_DOCUMENT);
         } catch (\Exception $e) {
             //            echo $e->getMessage();
             $client->getTransport()->debug($e->getMessage());
         }
         $client->dbCreate('temp', Constants::STORAGE_TYPE_MEMORY, Constants::DATABASE_TYPE_GRAPH);
         $client->dbOpen('temp');
         $client->sqlBatch('create class Prova1;' . 'create property Prova1.aString string;' . 'insert into Prova1 (aString) VALUES ("b"),("c"),("d");' . 'create class Prova2;' . 'create property Prova2.aString string;' . 'create property Prova2.anEmbeddedSetOfString embeddedset string;' . 'create property Prova2.prova1 link Prova1;');
         $clusterProva1 = $client->query("select classes[name='Prova1'].defaultClusterId from 0:1", -1)[0]['classes'];
         $clusterProva2 = $client->query("select classes[name='Prova2'].defaultClusterId from 0:1", -1)[0]['classes'];
         //            echo "Default cluster for Prova1: $clusterProva1\n";
         //            echo "Default cluster for Prova2: $clusterProva2\n\n";
         $newRecord = ['oClass' => 'Prova2', 'oData' => ['aString' => 'record di prova', 'anEmbeddedSetOfString' => ['qualcosa 1', 'qualcosa 2', 'ancora altro'], 'prova1' => null]];
         $newRecordObject = Record::fromConfig($newRecord);
         $newRecordObject->setRid(new ID($clusterProva2));
         $tmp = $client->recordCreate($newRecordObject);
         $record = $client->recordLoad($tmp->getRid())[0];
         $this->assertEquals('record di prova', $record->getOData()['aString']);
         $this->assertEquals(null, $record->getOData()['prova1']);
         //            print_r($record->getOData());
     } catch (\Exception $e) {
         //            echo $e . "\n";
     }
 }
Esempio n. 8
0
 /**
  * Read the response from the socket.
  *
  * @return int The session id.
  */
 protected function _read()
 {
     $payloads = [];
     $status = $this->_readByte();
     if ($status != 0) {
         $payload = [];
         // a normal record
         if ($this->_transport->getProtocolVersion() > 27) {
             $type = $this->_readChar();
             $version = $this->_readInt();
             if ($type == 'b') {
                 $data[] = $this->_readString();
             } else {
                 $data = CSV::unserialize($this->_readString());
             }
         } else {
             $string = $this->_readString();
             $data = CSV::unserialize($string);
             $version = $this->_readInt();
             $type = $this->_readChar();
             if ($type == 'b') {
                 $data = $string;
             }
         }
         $payload['rid'] = new ID($this->cluster_id, $this->cluster_position);
         $payload['type'] = $type;
         $payload['version'] = $version;
         if (isset($data['oClass'])) {
             $payload['oClass'] = $data['oClass'];
             unset($data['oClass']);
         }
         $payload['oData'] = $data;
         $record = Record::fromConfig($payload);
         $payloads[] = $record;
         $prefetched = $this->_read_prefetch_record();
         # read cache and prefetch with callback
         $payloads = array_merge($payloads, $prefetched);
     }
     return $payloads;
 }