Skip to content

Commit b11f0d2

Browse files
committed
initial setup for test
1 parent c225228 commit b11f0d2

File tree

5 files changed

+157
-0
lines changed

5 files changed

+157
-0
lines changed

src/Profile.php

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?php
2+
3+
namespace Neo4j\QueryAPI;
4+
require __DIR__ . '/../vendor/autoload.php';
5+
6+
7+
use GuzzleHttp\Client;
8+
9+
class Profile
10+
{
11+
private $neo4jUrl;
12+
private $username;
13+
private $password;
14+
private $client;
15+
16+
public function __construct($url, $username, $password)
17+
{
18+
$this->neo4jUrl = $url;
19+
$this->username = $username;
20+
$this->password = $password;
21+
$this->client = new Client();
22+
}
23+
24+
public function executeQuery($query ,$parameters=[])
25+
{
26+
$response = $this->client->post($this->neo4jUrl, [
27+
'auth' => [$this->username, $this->password],
28+
'json' => [
29+
'statement' => $query,
30+
'parameters'=>$parameters
31+
]
32+
]);
33+
34+
return json_decode($response->getBody(), true);
35+
}
36+
37+
public function formatResponse($data): array
38+
{
39+
$output = [
40+
"data" => [
41+
"fields" => [],
42+
"values" => []
43+
],
44+
"profiledQueryPlan" => [],
45+
"bookmarks" => $data['bookmarks'] ?? []
46+
];
47+
48+
if (isset($data['result']['columns']) && isset($data['result']['rows'])) {
49+
$output["data"]["fields"] = $data['result']['columns'];
50+
foreach ($data['result']['rows'] as $row) {
51+
$output["data"]["values"][] = $row;
52+
}
53+
}
54+
55+
if (isset($data['profiledQueryPlan'])) {
56+
$output["profiledQueryPlan"] = $data['profiledQueryPlan'];
57+
}
58+
59+
return $output;
60+
}
61+
}
62+

src/Query_Profile.php

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
require __DIR__ . '/../vendor/autoload.php';
3+
4+
use GuzzleHttp\Client;
5+
6+
$neo4jUrl = 'https://6f72daa1.databases.neo4j.io/db/neo4j/query/v2';
7+
$username = 'neo4j';
8+
$password = '9lWmptqBgxBOz8NVcTJjgs3cHPyYmsy63ui6Spmw1d0';
9+
10+
$client = new Client();
11+
12+
$query = "PROFILE MATCH (n:Person) RETURN n";
13+
14+
$response = $client->post($neo4jUrl, [
15+
'auth' => [$username, $password],
16+
'json' => [
17+
'statement' => $query
18+
]
19+
]);
20+
21+
$body = $response->getBody();
22+
$data = json_decode($body, true);
23+
24+
$output = [
25+
"data" => [
26+
"fields" => [],
27+
"values" => []
28+
],
29+
"profiledQueryPlan" => [],
30+
"bookmarks" => $data['bookmarks'] ?? []
31+
];
32+
33+
if (isset($data['result']['columns']) && isset($data['result']['rows'])) {
34+
$output["data"]["fields"] = $data['result']['columns'];
35+
foreach ($data['result']['rows'] as $row) {
36+
$output["data"]["values"][] = $row;
37+
}
38+
}
39+
40+
if (isset($data['profiledQueryPlan'])) {
41+
$output["profiledQueryPlan"] = $data['profiledQueryPlan'];
42+
}
43+
44+
echo json_encode($output, JSON_PRETTY_PRINT);
45+

src/Query_Profile_run.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
use Neo4j\QueryAPI\Profile;
4+
5+
require __DIR__ . '/../vendor/autoload.php';
6+
7+
$neo4jUrl = 'https://6f72daa1.databases.neo4j.io/db/neo4j/query/v2';
8+
$username = 'neo4j';
9+
$password = '9lWmptqBgxBOz8NVcTJjgs3cHPyYmsy63ui6Spmw1d0';
10+
11+
$client = new Profile($neo4jUrl, $username, $password);
12+
13+
$params = ['name' => 'Alice'];
14+
15+
$query = "PROFILE MATCH (n:Person {name: \$name}) RETURN n.name";
16+
17+
$data = $client->executeQuery($query, $params);
18+
19+
20+
$formattedResponse = $client->formatResponse($data);
21+
22+
echo json_encode($formattedResponse, JSON_PRETTY_PRINT);

src/runtransaction.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
require __DIR__ . '/../vendor/autoload.php';
4+
5+
use Neo4j\QueryAPI\Neo4jQueryAPI;
6+
7+
$neo4jUrl = 'https://6f72daa1.databases.neo4j.io/';
8+
$username = 'neo4j';
9+
$password = '9lWmptqBgxBOz8NVcTJjgs3cHPyYmsy63ui6Spmw1d0';
10+
11+
$api = Neo4jQueryAPI::login($neo4jUrl, $username, $password);
12+
13+
$transaction = $api->beginTransaction();
14+
15+
$query = 'CREATE (n:Person {name: "Bobby"}) RETURN n';
16+
17+
$response = $transaction->run($query, []);
18+
19+
print_r($response);
20+
21+
$transaction->commit();

tests/Integration/Neo4jQueryAPIIntegrationTest.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,13 @@ public function testCounters(): void
4444
$this->assertEquals(1, $result->getQueryCounters()->getNodesCreated());
4545
}
4646

47+
public function testProfileExistence(): void
48+
{
49+
$result = $this->api->run('PROFILE MATCH (x) RETURN x');
50+
51+
$this->assertNotNull($result->getProfiledQueryPlan());
52+
}
53+
4754
public function testTransactionCommit(): void
4855
{
4956
// Begin a new transaction

0 commit comments

Comments
 (0)