[ 
https://issues.apache.org/jira/browse/THRIFT-4079?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15858905#comment-15858905
 ] 

ASF GitHub Bot commented on THRIFT-4079:
----------------------------------------

GitHub user jeking3 opened a pull request:

    https://github.com/apache/thrift/pull/1181

    THRIFT-4079 add missing use clauses for included thrift sources in 
generated perl modules

    Sadly the state of perl unit testing appears to be pretty sad... I don't 
see any tests for perl being run with "make check", nor are they run in the 
perl package maker (for cpan installs).  There are three test files but I'm not 
sure how they get run, if at all.  So there's no test for this.  I tested it on 
the example I submitted and it resolves the issue.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/jeking3/thrift THRIFT-4079

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/thrift/pull/1181.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #1181
    
----
commit 7c8b5baa884cc9fe58ec8f10da528e4f7d0bcc75
Author: James E. King, III <jim.k...@simplivity.com>
Date:   2017-02-09T02:14:11Z

    THRIFT-4079 add missing use clauses for included thrift sources in 
generated perl modules

----


> [Regression] Generated perl code that returns structures from included thrift 
> files is missing a necessary use clause
> ---------------------------------------------------------------------------------------------------------------------
>
>                 Key: THRIFT-4079
>                 URL: https://issues.apache.org/jira/browse/THRIFT-4079
>             Project: Thrift
>          Issue Type: Bug
>          Components: Perl - Compiler
>    Affects Versions: 0.10.0
>         Environment: Ubuntu 14.04 LTS (perl 5.18.2) with thrift 0.10.0
>            Reporter: James E. King, III
>            Assignee: James E. King, III
>         Attachments: THRIFT-4079-example.tgz
>
>
> I made a very simple example which I will attach, however in a nutshell if I 
> define a structure in one thrift file like this:
> {{ForeignInfo.thrift:}}
> {noformat}
> namespace perl org.fiction.rpc
> struct ForeignInfo
> {
>     1: string someData
> }
> {noformat}
> Then I define a service in another namespace like this:
> {{SomeService.thrift:}}
> {noformat}
> namespace perl org.real
> include "ForeignInfo.thrift"
> service Company
> {
>     ForeignInfo.ForeignInfo getForeignInfoList();
> }
> {noformat}
> Then I compile both of them, the resulting generated perl code in 
> {{gen-perl/org/real/Company.pm}} has the following use clauses in it:
> {noformat}
> require 5.6.0;
> use strict;
> use warnings;
> use Thrift;
> use org::real::Types;
> {noformat}
> Later on in the file we have:
> {noformat}
>     SWITCH: for($fid)
>     {
>       /^0$/ && do{      if ($ftype == TType::STRUCT) {
>         $self->{success} = new org::fiction::rpc::ForeignInfo();
>         $xfer += $self->{success}->read($input);
>       } else {
>         $xfer += $input->skip($ftype);
>       }
>       last; };
>         $xfer += $input->skip($ftype);
>     }
> {noformat}
> If you put a simple wrapper around this call, the client gets an exception:
> {noformat}
> Undefined subroutine &org::fiction::rpc::ForeignInfo called at 
> gen-perl/org/real/Company.pm line 98
> {noformat}
> Line 98 is where {{org::fiction::rpc::ForeignInfo}} is mentioned.  Without a 
> use clause for the Types defined by the include it cannot be used.
> If I add this line to the generated code in Company.pm:
> {noformat}
> use org::fiction::rpc::Types;
> {noformat}
> Then everything works.



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

Reply via email to