Skip to content

GitLab

  • Menu
    • Projects Groups Snippets
      Help
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • A ApiQL
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Metrics
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Container Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • bingo
  • ApiQL
  • Merge requests
  • !16

Merged
Created 3 years ago by Евгений Кремнёв@e.kremnevMaintainer

fix: исправлены спецификации EqualsAll и NotEqualsAll

  • Overview 0
  • Commits 1
  • Pipelines 1
  • Changes 4
  • You're only seeing other activity in the feed. To add a comment, switch to one of the following options.
Please register or sign in to reply
Compare
  • master (base)

and
  • latest version
    97f9de51
    1 commit, 3 years ago

4 files
+ 129
- 47

    Preferences

    File browser
    Compare changes
src/Langu‎age/Specs‎
Equals‎All.php‎ +19 -15
NotEqual‎sAll.php‎ +25 -17
tests‎/Unit‎
ApiQLUni‎tTest.php‎ +84 -14
.phpunit.r‎esult.cache‎ +1 -1
src/Language/Specs/EqualsAll.php
+ 19
- 15
  • View file @ 97f9de51

  • Edit in single-file editor

  • Edit in Web IDE


Show all unchanged lines Show 20 lines
{
use JsonField;
private $parameter;
private $field;
private $value;
/**
* @param string $parameter - query parameter
* @param string $field - query parameter
* @param mixed $value - parameter value
*/
public function __construct(string $parameter, $value)
public function __construct(string $field, $value)
{
$this->parameter = $parameter;
$this->field = $field;
$this->value = $value;
}
Show 20 lines Show all unchanged lines Show 20 lines
public function match(QueryBuilder $queryBuilder): string
{
if (is_array($this->value)) {
$values = $this->value;
$value = sprintf('\'{%s}\'', implode(',', $this->value));
} else {
$values = explode(",", $this->value);
}
$orValues = [];
foreach ($values as $index => $value) {
$queryBuilder->setParameter(sprintf("%s_%s", $this->parameter, $index), $value);
$orValues[] = $queryBuilder->expr()->eq(
sprintf(":%s_%s", $this->parameter, $index),
sprintf("ANY (ARRAY[%s])", $this->parameter)
);
$value = sprintf('\'{%s}\'', $this->value);
}
return $queryBuilder->expr()->andX(...$orValues);
$parameter = sprintf(":%s", $this->field);
$andValues = [
sprintf('%s <@ %s', $this->field, $parameter),
sprintf('%s @> %s', $this->field, $parameter),
];
$queryBuilder->setParameter($parameter, $value);
return $queryBuilder->expr()->eq(
sprintf("(%s)", $queryBuilder->expr()->andX(...$andValues)),
'true'
);
}
}
src/Language/Specs/NotEqualsAll.php
+ 25
- 17
  • View file @ 97f9de51

  • Edit in single-file editor

  • Edit in Web IDE


Show all unchanged lines Show 20 lines
{
use JsonField;
private $parameter;
/**
* @var string
*/
private $field;
/**
* @var mixed
*/
private $value;
/**
* @param string $parameter - query parameter
* @param string $field - query parameter
* @param mixed $value - parameter value
*/
public function __construct(string $parameter, $value)
public function __construct(string $field, $value)
{
$this->parameter = $parameter;
$this->field = $field;
$this->value = $value;
}
Show 20 lines Show all unchanged lines Show 20 lines
public function match(QueryBuilder $queryBuilder): string
{
if (is_array($this->value)) {
$values = $this->value;
$value = sprintf('\'{%s}\'', implode(',', $this->value));
} else {
$values = explode(",", $this->value);
}
$orValues = [];
foreach ($values as $index => $value) {
$queryBuilder->setParameter(sprintf("%s_%s", $this->parameter, $index), $value);
$orValues[] = $queryBuilder->expr()->eq(
sprintf(":%s_%s", $this->parameter, $index),
sprintf("ANY (ARRAY[%s])", $this->parameter)
);
$value = sprintf('\'{%s}\'', $this->value);
}
return $queryBuilder->expr()->eq(
sprintf("(%s)", $queryBuilder->expr()->andX(...$orValues)),
'false'
$parameter = sprintf(":%s", $this->field);
$andValues = [
sprintf('%s <@ %s', $this->field, $parameter),
sprintf('%s @> %s', $this->field, $parameter),
];
$queryBuilder->setParameter($parameter, $value);
return $queryBuilder->expr()->neq(
sprintf("(%s)", $queryBuilder->expr()->andX(...$andValues)),
'true'
);
}
}
tests/Unit/ApiQLUnitTest.php
+ 84
- 14
  • View file @ 97f9de51

  • Edit in single-file editor

  • Edit in Web IDE


Show all unchanged lines Show 20 lines
$qb->select('u.id')
->from('users', 'u');
$query = ["types" => "developer", "spec" => "equals_all"];
$query = ["types" => "1,2,3", "spec" => "equals_all"];
$api = new ApiQL($query, $qb);
$api->execute();
self::assertEquals('SELECT u.id FROM users u WHERE :types_0 = ALL (ARRAY[types])', (string) $qb);
self::assertEquals(
'SELECT u.id FROM users u WHERE ((types <@ :types) AND (types @> :types)) = true',
(string) $qb
);
self::assertCount(1, $qb->getParameters());
self::assertEquals("developer", $qb->getParameters()["types_0"]);
self::assertEquals("'{1,2,3}'", $qb->getParameters()[":types"]);
$qb = new QueryBuilder($this->conn);
$qb->select('u.id')
->from('users', 'u');
$query = ["types" => "1,2,3", "spec" => "EqualsAll"];
$api = new ApiQL($query, $qb);
$api->execute();
self::assertEquals(
'SELECT u.id FROM users u WHERE ((types <@ :types) AND (types @> :types)) = true',
(string) $qb
);
self::assertCount(1, $qb->getParameters());
self::assertEquals("'{1,2,3}'", $qb->getParameters()[":types"]);
$qb = new QueryBuilder($this->conn);
$qb->select('u.id')
->from('users', 'u');
$query = ["types" => "developer", "spec" => "EqualsAll"];
$query = ["equals_all" => ["types" => "1,2,3"]];
$api = new ApiQL($query, $qb);
$api->execute();
self::assertEquals('SELECT u.id FROM users u WHERE :types_0 = ALL (ARRAY[types])', (string) $qb);
self::assertEquals(
'SELECT u.id FROM users u WHERE ((types <@ :types) AND (types @> :types)) = true',
(string) $qb
);
self::assertCount(1, $qb->getParameters());
self::assertEquals("developer", $qb->getParameters()["types_0"]);
self::assertEquals("'{1,2,3}'", $qb->getParameters()[":types"]);
$qb = new QueryBuilder($this->conn);
$qb->select('u.id')
->from('users', 'u');
$query = ["equals_all" => ["types" => "developer"]];
$query = ["equals_all" => ["types" => [1, 2, 3]]];
$api = new ApiQL($query, $qb);
$api->execute();
self::assertEquals('SELECT u.id FROM users u WHERE :types_0 = ALL (ARRAY[types])', (string) $qb);
self::assertEquals(
'SELECT u.id FROM users u WHERE ((types <@ :types) AND (types @> :types)) = true',
(string) $qb
);
self::assertCount(1, $qb->getParameters());
self::assertEquals("developer", $qb->getParameters()["types_0"]);
self::assertEquals("'{1,2,3}'", $qb->getParameters()[":types"]);
}
public function testNotEqualsAllSpec(): void
{
$qb = new QueryBuilder($this->conn);
$qb->select('u.id')
->from('users', 'u');
$query = ["types" => "developer,admin", "spec" => "EqualsAll"];
$query = ["types" => "1,2,3", "spec" => "not_equals_all"];
$api = new ApiQL($query, $qb);
$api->execute();
self::assertEquals(
'SELECT u.id FROM users u WHERE (:types_0 = ALL (ARRAY[types])) OR (:types_1 = ALL (ARRAY[types]))',
'SELECT u.id FROM users u WHERE ((types <@ :types) AND (types @> :types)) <> true',
(string) $qb
);
self::assertCount(2, $qb->getParameters());
self::assertEquals("developer", $qb->getParameters()["types_0"]);
self::assertEquals("admin", $qb->getParameters()["types_1"]);
self::assertCount(1, $qb->getParameters());
self::assertEquals("'{1,2,3}'", $qb->getParameters()[":types"]);
$qb = new QueryBuilder($this->conn);
$qb->select('u.id')
->from('users', 'u');
$query = ["types" => "1,2,3", "spec" => "NotEqualsAll"];
$api = new ApiQL($query, $qb);
$api->execute();
self::assertEquals(
'SELECT u.id FROM users u WHERE ((types <@ :types) AND (types @> :types)) <> true',
(string) $qb
);
self::assertCount(1, $qb->getParameters());
self::assertEquals("'{1,2,3}'", $qb->getParameters()[":types"]);
$qb = new QueryBuilder($this->conn);
$qb->select('u.id')
->from('users', 'u');
$query = ["not_equals_all" => ["types" => "1,2,3"]];
$api = new ApiQL($query, $qb);
$api->execute();
self::assertEquals(
'SELECT u.id FROM users u WHERE ((types <@ :types) AND (types @> :types)) <> true',
(string) $qb
);
self::assertCount(1, $qb->getParameters());
self::assertEquals("'{1,2,3}'", $qb->getParameters()[":types"]);
$qb = new QueryBuilder($this->conn);
$qb->select('u.id')
->from('users', 'u');
$query = ["not_equals_all" => ["types" => [1, 2, 3]]];
$api = new ApiQL($query, $qb);
$api->execute();
self::assertEquals(
'SELECT u.id FROM users u WHERE ((types <@ :types) AND (types @> :types)) <> true',
(string) $qb
);
self::assertCount(1, $qb->getParameters());
self::assertEquals("'{1,2,3}'", $qb->getParameters()[":types"]);
}
public function testTransliterationParameter(): void
Show 20 lines Show all unchanged lines
.phpunit.result.cache
+ 1
- 1
  • View file @ 97f9de51

  • Edit in single-file editor

  • Edit in Web IDE

0 Assignees
None
Assign to
0 Reviewers
None
Request review from
Milestone
No milestone
None
None
Time tracking
No estimate or time spent
0
Labels
None
Assign labels
  • No matching results
  • Manage project labels
Lock merge request
Unlocked
1
1 participant
user avatar
Reference: Bingo/ApiQL!16
Source branch: develop

    0 pending comments

Menu

Projects Groups Snippets
Help