You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@carbondata.apache.org by "Wang Hao (JIRA)" <ji...@apache.org> on 2019/05/10 11:07:00 UTC

[jira] [Created] (CARBONDATA-3379) thrift file-format support generate c++ code

Wang Hao created CARBONDATA-3379:
------------------------------------

             Summary: thrift file-format support generate c++ code
                 Key: CARBONDATA-3379
                 URL: https://issues.apache.org/jira/browse/CARBONDATA-3379
             Project: CarbonData
          Issue Type: Improvement
          Components: file-format
         Environment: SUSE Linux Enterprise Server 11 (x86_64)
gcc 5.4
thrift 0.9.3
            Reporter: Wang Hao


Using thrift compiler to generate c++ code for file-format  and complie with g++ .
like this,
{code:sh}
thrift --gen cpp carbondata.thrift

g++ -O0 -g ./gen-cpp/carbondata_constants.cpp -c -I$THRIFT_INSTALL_PATH/include/ -I$BOOST_INSTALL_PATH/include/
{code}

It have 2 problem,

1. In the carbondata.thrift, *DataChunk3 depending on *LocalDictionaryChunk, *LocalDictionaryChunk depending on *LocalDictionaryChunkMeta.
the order of these struct declaration 
{code:java}
struct DataChunk3{
...
}
...
struct LocalDictionaryChunk {
...
}

struct LocalDictionaryChunkMeta{
...
}
{code}

when  generate c++ code and compile, it make a 'has incomplete type' error


{code:sh}
In file included from ./gen-cpp/carbondata_constants.h:10:0,
                 from ./gen-cpp/carbondata_constants.cpp:7:
./gen-cpp/carbondata_types.h:667:24: error: field 'local_dictionary' has incomplete type 'LocalDictionaryChunk'
   LocalDictionaryChunk local_dictionary;
                        ^
In file included from ./gen-cpp/carbondata_constants.h:10:0,
                 from ./gen-cpp/carbondata_constants.cpp:7:
./gen-cpp/carbondata_types.h:84:7: note: forward declaration of 'class LocalDictionaryChunk'
 class LocalDictionaryChunk;
       ^
In file included from ./gen-cpp/carbondata_constants.h:10:0,
                 from ./gen-cpp/carbondata_constants.cpp:7:
./gen-cpp/carbondata_types.h:1245:28: error: field 'dictionary_meta' has incomplete type 'LocalDictionaryChunkMeta'
   LocalDictionaryChunkMeta dictionary_meta;
                            ^
In file included from ./gen-cpp/carbondata_constants.h:10:0,
                 from ./gen-cpp/carbondata_constants.cpp:7:
./gen-cpp/carbondata_types.h:86:7: note: forward declaration of 'class LocalDictionaryChunkMeta'
 class LocalDictionaryChunkMeta;
       ^

{code}

if adjust the order of there these struct declaration like below, the generate c++ code will compiled correctly

{code:java}
struct LocalDictionaryChunkMeta{
...
}

struct LocalDictionaryChunk {
...
}

struct DataChunk3{
...
}
{code}

2. In all thrift file-format, it only define java namespace

{code:sh}
namespace java org.apache.carbondata.format
{code}

It better add a cpp namespace make the generate c++ code have cpp namespace
{code:sh}
namespace java org.apache.carbondata.format
namespace cpp carbondata.format
{code}





--
This message was sent by Atlassian JIRA
(v7.6.3#76005)