thrift-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "David Reiman (JIRA)" <j...@apache.org>
Subject [jira] [Created] (THRIFT-4070) Generated PHP for Thrift sets are incompatible with PHP
Date Tue, 07 Feb 2017 01:19:41 GMT
David Reiman created THRIFT-4070:
------------------------------------

             Summary: Generated PHP for Thrift sets are incompatible with PHP
                 Key: THRIFT-4070
                 URL: https://issues.apache.org/jira/browse/THRIFT-4070
             Project: Thrift
          Issue Type: Bug
            Reporter: David Reiman
            Priority: Blocker


In the `TBase` class that all Thrift generated code inherits from, there is a `_writeList`
method that takes a boolean of whether or not the "list" in question is a set. The assumption
here is that since PHP has no built-in Set data type, we can duplicate the uniqueness constraint
of Sets by looking at the keys of a PHP associative array. Here's the associated code in `_writeList`:

```
foreach ($var as $key => $val) {
      $elem = $set ? $key : $val;
      if (isset($ewrite)) {
        $xfer += $output->$ewrite($elem);
      } else {
        switch ($etype) {
        case TType::STRUCT:
          $xfer += $elem->write($output);
          break;
```

I want to point out again that if we're using a `TType::SET`, the `$set` variable will be
`true`, and `$elem` will be the `$key`, not the `$value`. Here's the problem, from PHP array
documentation (http://php.net/manual/en/language.types.array.php):

"The key can either be an integer or a string. The value can be of any type...Arrays and objects
can not be used as keys. Doing so will result in a warning: Illegal offset type."

In other words, it is impossible to implement a Thrift set of anything other than strings
or integers given the current implementation of PHP generated code.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Mime
View raw message