You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Jake Farrell (JIRA)" <ji...@apache.org> on 2011/04/12 23:00:06 UTC

[jira] [Updated] (THRIFT-342) PHP: can't have sets of complex types

     [ https://issues.apache.org/jira/browse/THRIFT-342?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jake Farrell updated THRIFT-342:
--------------------------------

    Attachment: thrift-342.patch

Updated patch to take into account scalar types vs objects as described above. Scalars will retain the current functionality where objects will be treated as lists. Tested against java and python servers with php client and all behaved as expected. 

> PHP: can't have sets of complex types
> -------------------------------------
>
>                 Key: THRIFT-342
>                 URL: https://issues.apache.org/jira/browse/THRIFT-342
>             Project: Thrift
>          Issue Type: Bug
>          Components: PHP - Compiler, PHP - Library
>         Environment: SVN trunk r743881
>            Reporter: David Sklar
>         Attachments: thrift-342.patch, thrift-342.patch
>
>
> A setup like this:
> struct alice {
>   1: string bob
> }
> and another like this:
> struct charlie {
>    1: set<alice> david
> }
> causes problems because the generated PHP code looks like:
> ==
>         case 1:
>           if ($ftype == TType::SET) {
>             $this->david = array();
>             $_size0 = 0;
>             $_etype3 = 0;
>             $xfer += $input->readSetBegin($_etype3, $_size0);
>             for ($_i4 = 0; $_i4 < $_size0; ++$_i4)
>             {
>               $elem5 = null;
>               $elem5 = new alice();
>               $xfer += $elem5->read($input);
>               $this->david[$elem5] = true;
>             }
>             $xfer += $input->readSetEnd();
>           } else {
>             $xfer += $input->skip($ftype);
>           }
>           break;
> ===
> Using objects as array keys makes PHP cranky and the values can not be properly set. I think the solution to this is either:
> 1. Document that the PHP bindings do not support sets of complex types. (boooo!)
> 2. Modify the generated code so that the values are stored in array values not keys. (With some additional checks to ensure uniqueness, or perhaps just using spl_object_hash($theObject) as the array key.
> This seems similar to the issues raised in THRIFT-231 and THRIFT-162
>               $this->david[$elem5] = true;

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira