doctrine / dbal

Doctrine Database Abstraction Layer
https://www.doctrine-project.org/projects/dbal.html
MIT License
9.45k stars 1.33k forks source link

[Postgresql] Positional parameter at index 0 does not have a bound value. #6117

Closed root-aza closed 1 year ago

root-aza commented 1 year ago

Bug Report

Q A
Version 3.6.3

Summary

Doctrine dbal not supported search in jsonb. Example query:

SELECT true AS "hasApp" FROM applications a WHERE a.id = :id AND a.features::jsonb ?| array['AUTH_SMS']

How to reproduce

code:


$sql = <<<SQL
        SELECT true AS "hasApp" FROM applications a
        WHERE a.id = :id AND a.features::jsonb ?| :items
    SQL;

$sql = str_replace(':items', sprintf('array%s', str_replace('"', "'", json_encode($features))), $sql);
### SELECT true AS "hasApp" FROM applications a   WHERE a.id = :id AND a.features::jsonb ?| array['AUTH_SMS']

$rsm = (new ResultSetMapping())
    ->addScalarResult('hasApp', 'hasApp', 'boolean')
;

$result = $this->_em->createNativeQuery($sql, $rsm)
    ->setParameters([
        'id' => $id,
    ])
    ->getOneOrNullResult()
;
StackTrace ```json { "type": "https://tools.ietf.org/html/rfc2616#section-10", "title": "An error occurred", "status": 500, "detail": "Positional parameter at index 0 does not have a bound value.", "class": "Doctrine\\DBAL\\ArrayParameters\\Exception\\MissingPositionalParameter", "trace": [ { "namespace": "", "short_class": "", "class": "", "type": "", "function": "", "file": "/app/vendor/doctrine/dbal/src/ArrayParameters/Exception/MissingPositionalParameter.php", "line": 19, "args": [] }, { "namespace": "Doctrine\\DBAL\\ArrayParameters\\Exception", "short_class": "MissingPositionalParameter", "class": "Doctrine\\DBAL\\ArrayParameters\\Exception\\MissingPositionalParameter", "type": "::", "function": "new", "file": "/app/vendor/doctrine/dbal/src/ExpandArrayParameters.php", "line": 50, "args": [ [ "integer", 0 ] ] }, { "namespace": "Doctrine\\DBAL", "short_class": "ExpandArrayParameters", "class": "Doctrine\\DBAL\\ExpandArrayParameters", "type": "->", "function": "acceptPositionalParameter", "file": "/app/vendor/doctrine/dbal/src/SQL/Parser.php", "line": 88, "args": [ [ "string", "?" ] ] }, { "namespace": "Doctrine\\DBAL\\SQL", "short_class": "Parser", "class": "Doctrine\\DBAL\\SQL\\Parser", "type": "::", "function": "Doctrine\\DBAL\\SQL\\{closure}", "file": "/app/vendor/doctrine/dbal/src/SQL/Parser.php", "line": 102, "args": [ [ "string", "?" ] ] }, { "namespace": "Doctrine\\DBAL\\SQL", "short_class": "Parser", "class": "Doctrine\\DBAL\\SQL\\Parser", "type": "->", "function": "parse", "file": "/app/vendor/doctrine/dbal/src/Connection.php", "line": 1898, "args": [ [ "string", " SELECT true AS \"hasApp\" FROM applications a\n WHERE a.id = :id AND a.features::jsonb ?| array['AUTH_SMS']" ], [ "object", "Doctrine\\DBAL\\ExpandArrayParameters" ] ] }, { "namespace": "Doctrine\\DBAL", "short_class": "Connection", "class": "Doctrine\\DBAL\\Connection", "type": "->", "function": "expandArrayParameters", "file": "/app/vendor/doctrine/dbal/src/Connection.php", "line": 1089, "args": [ [ "string", " SELECT true AS \"hasApp\" FROM applications a\n WHERE a.id = :id AND a.features::jsonb ?| array['AUTH_SMS']" ], [ "array", { "id": [ "object", "Symfony\\Component\\Uid\\UuidV6" ] } ], [ "array", { "id": [ "integer", 2 ] } ] ] }, { "namespace": "Doctrine\\DBAL", "short_class": "Connection", "class": "Doctrine\\DBAL\\Connection", "type": "->", "function": "executeQuery", "file": "/app/vendor/doctrine/orm/lib/Doctrine/ORM/NativeQuery.php", "line": 69, "args": [ [ "string", " SELECT true AS \"hasApp\" FROM applications a\n WHERE a.id = :id AND a.features::jsonb ?| array['AUTH_SMS']" ], [ "array", { "id": [ "object", "Symfony\\Component\\Uid\\UuidV6" ] } ], [ "array", { "id": [ "integer", 2 ] } ], [ "null", null ] ] }, { "namespace": "Doctrine\\ORM", "short_class": "NativeQuery", "class": "Doctrine\\ORM\\NativeQuery", "type": "->", "function": "_doExecute", "file": "/app/vendor/doctrine/orm/lib/Doctrine/ORM/AbstractQuery.php", "line": 1212, "args": [] }, { "namespace": "Doctrine\\ORM", "short_class": "AbstractQuery", "class": "Doctrine\\ORM\\AbstractQuery", "type": "->", "function": "executeIgnoreQueryCache", "file": "/app/vendor/doctrine/orm/lib/Doctrine/ORM/AbstractQuery.php", "line": 1166, "args": [ [ "null", null ], [ "null", null ] ] }, { "namespace": "Doctrine\\ORM", "short_class": "AbstractQuery", "class": "Doctrine\\ORM\\AbstractQuery", "type": "->", "function": "execute", "file": "/app/vendor/doctrine/orm/lib/Doctrine/ORM/AbstractQuery.php", "line": 953, "args": [ [ "null", null ], [ "null", null ] ] }, { "namespace": "Doctrine\\ORM", "short_class": "AbstractQuery", "class": "Doctrine\\ORM\\AbstractQuery", "type": "->", "function": "getOneOrNullResult", "file": "/app/src/Application/Doctrine/Repository/ApplicationRepository.php", "line": 46, "args": [] }, { "namespace": "App\\Application\\Doctrine\\Repository", "short_class": "ApplicationRepository", "class": "App\\Application\\Doctrine\\Repository\\ApplicationRepository", "type": "->", "function": "hasApplication", "file": "/app/src/Application/Shared/Middleware/ApplicationMiddleware.php", "line": 40, "args": [ [ "object", "Symfony\\Component\\Uid\\UuidV6" ], [ "array", [ [ "object", "App\\Application\\Entity\\Feature" ] ] ] ] }, { "namespace": "App\\Application\\Shared\\Middleware", "short_class": "ApplicationMiddleware", "class": "App\\Application\\Shared\\Middleware\\ApplicationMiddleware", "type": "->", "function": "process", "file": "/app/vendor/kafkiansky/symfony-middleware/src/Middleware/MiddlewareRunner.php", "line": 44, "args": [ [ "object", "Nyholm\\Psr7\\ServerRequest" ], [ "object", "Kafkiansky\\SymfonyMiddleware\\Middleware\\StackMiddleware" ] ] }, { "namespace": "Kafkiansky\\SymfonyMiddleware\\Middleware", "short_class": "MiddlewareRunner", "class": "Kafkiansky\\SymfonyMiddleware\\Middleware\\MiddlewareRunner", "type": "->", "function": "Kafkiansky\\SymfonyMiddleware\\Middleware\\{closure}", "file": "/app/vendor/kafkiansky/symfony-middleware/src/Middleware/MiddlewareRunner.php", "line": 50, "args": [ [ "object", "Nyholm\\Psr7\\ServerRequest" ] ] }, { "namespace": "Kafkiansky\\SymfonyMiddleware\\Middleware", "short_class": "MiddlewareRunner", "class": "Kafkiansky\\SymfonyMiddleware\\Middleware\\MiddlewareRunner", "type": "->", "function": "run", "file": "/app/vendor/kafkiansky/symfony-middleware/src/Middleware/MiddlewareAction.php", "line": 20, "args": [ [ "object", "Nyholm\\Psr7\\ServerRequest" ] ] }, { "namespace": "Kafkiansky\\SymfonyMiddleware\\Middleware", "short_class": "MiddlewareAction", "class": "Kafkiansky\\SymfonyMiddleware\\Middleware\\MiddlewareAction", "type": "->", "function": "__invoke", "file": "/app/vendor/symfony/http-kernel/HttpKernel.php", "line": 163, "args": [ [ "object", "App\\Auth\\Sms\\Request\\SendSms" ], [ "object", "Symfony\\Component\\Uid\\UuidV6" ], [ "object", "App\\Auth\\Sms\\Handler\\SendSmsHandler" ] ] }, { "namespace": "Symfony\\Component\\HttpKernel", "short_class": "HttpKernel", "class": "Symfony\\Component\\HttpKernel\\HttpKernel", "type": "->", "function": "handleRaw", "file": "/app/vendor/symfony/http-kernel/HttpKernel.php", "line": 74, "args": [ [ "object", "Symfony\\Component\\HttpFoundation\\Request" ], [ "integer", 1 ] ] }, { "namespace": "Symfony\\Component\\HttpKernel", "short_class": "HttpKernel", "class": "Symfony\\Component\\HttpKernel\\HttpKernel", "type": "->", "function": "handle", "file": "/app/vendor/symfony/http-kernel/Kernel.php", "line": 184, "args": [ [ "object", "Symfony\\Component\\HttpFoundation\\Request" ], [ "integer", 1 ], [ "boolean", true ] ] }, { "namespace": "Symfony\\Component\\HttpKernel", "short_class": "Kernel", "class": "Symfony\\Component\\HttpKernel\\Kernel", "type": "->", "function": "handle", "file": "/app/vendor/baldinof/roadrunner-bundle/src/Http/KernelHandler.php", "line": 44, "args": [ [ "object", "Symfony\\Component\\HttpFoundation\\Request" ] ] }, { "namespace": "Baldinof\\RoadRunnerBundle\\Http", "short_class": "KernelHandler", "class": "Baldinof\\RoadRunnerBundle\\Http\\KernelHandler", "type": "->", "function": "handle", "file": null, "line": null, "args": [ [ "object", "Symfony\\Component\\HttpFoundation\\Request" ] ] }, { "namespace": "", "short_class": "Generator", "class": "Generator", "type": "->", "function": "current", "file": "/app/vendor/baldinof/roadrunner-bundle/src/Http/MiddlewareStack.php", "line": 97, "args": [] }, { "namespace": "Baldinof\\RoadRunnerBundle\\Http", "short_class": "Runner", "class": "Baldinof\\RoadRunnerBundle\\Http\\Runner", "type": "->", "function": "getResponse", "file": "/app/vendor/baldinof/roadrunner-bundle/src/Http/MiddlewareStack.php", "line": 75, "args": [ [ "object", "Generator" ], [ "string", "Baldinof\\RoadRunnerBundle\\Http\\KernelHandler::handle()" ] ] }, { "namespace": "Baldinof\\RoadRunnerBundle\\Http", "short_class": "Runner", "class": "Baldinof\\RoadRunnerBundle\\Http\\Runner", "type": "->", "function": "handle", "file": "/app/vendor/baldinof/roadrunner-bundle/src/Integration/Doctrine/DoctrineORMMiddleware.php", "line": 61, "args": [ [ "object", "Symfony\\Component\\HttpFoundation\\Request" ] ] }, { "namespace": "Baldinof\\RoadRunnerBundle\\Integration\\Doctrine", "short_class": "DoctrineORMMiddleware", "class": "Baldinof\\RoadRunnerBundle\\Integration\\Doctrine\\DoctrineORMMiddleware", "type": "->", "function": "process", "file": null, "line": null, "args": [ [ "object", "Symfony\\Component\\HttpFoundation\\Request" ], [ "object", "Baldinof\\RoadRunnerBundle\\Http\\Runner" ] ] }, { "namespace": "", "short_class": "Generator", "class": "Generator", "type": "->", "function": "current", "file": "/app/vendor/baldinof/roadrunner-bundle/src/Http/MiddlewareStack.php", "line": 97, "args": [] }, { "namespace": "Baldinof\\RoadRunnerBundle\\Http", "short_class": "Runner", "class": "Baldinof\\RoadRunnerBundle\\Http\\Runner", "type": "->", "function": "getResponse", "file": "/app/vendor/baldinof/roadrunner-bundle/src/Http/MiddlewareStack.php", "line": 83, "args": [ [ "object", "Generator" ], [ "string", "Baldinof\\RoadRunnerBundle\\Integration\\Doctrine\\DoctrineORMMiddleware::process()" ] ] }, { "namespace": "Baldinof\\RoadRunnerBundle\\Http", "short_class": "Runner", "class": "Baldinof\\RoadRunnerBundle\\Http\\Runner", "type": "->", "function": "handle", "file": "/app/vendor/baldinof/roadrunner-bundle/src/Http/MiddlewareStack.php", "line": 37, "args": [ [ "object", "Symfony\\Component\\HttpFoundation\\Request" ] ] }, { "namespace": "Baldinof\\RoadRunnerBundle\\Http", "short_class": "MiddlewareStack", "class": "Baldinof\\RoadRunnerBundle\\Http\\MiddlewareStack", "type": "->", "function": "handle", "file": null, "line": null, "args": [ [ "object", "Symfony\\Component\\HttpFoundation\\Request" ] ] }, { "namespace": "", "short_class": "Generator", "class": "Generator", "type": "->", "function": "current", "file": "/app/vendor/baldinof/roadrunner-bundle/src/Worker/HttpWorker.php", "line": 111, "args": [] }, { "namespace": "Baldinof\\RoadRunnerBundle\\Worker", "short_class": "HttpWorker", "class": "Baldinof\\RoadRunnerBundle\\Worker\\HttpWorker", "type": "->", "function": "start", "file": "/app/vendor/baldinof/roadrunner-bundle/src/Runtime/Runner.php", "line": 36, "args": [] }, { "namespace": "Baldinof\\RoadRunnerBundle\\Runtime", "short_class": "Runner", "class": "Baldinof\\RoadRunnerBundle\\Runtime\\Runner", "type": "->", "function": "run", "file": "/app/vendor/autoload_runtime.php", "line": 29, "args": [] }, { "namespace": "", "short_class": "", "class": "", "type": "", "function": "require_once", "file": "/app/public/index.php", "line": 7, "args": [ [ "string", "/app/vendor/autoload_runtime.php" ] ] } ] } ```
derrabus commented 1 year ago

Duplicate of #6081

github-actions[bot] commented 1 year ago

This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.