[
https://issues.apache.org/jira/browse/CARBONDATA-3379?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Wang Hao updated CARBONDATA-3379:
---------------------------------
Description:
Using thrift compiler to generate c++ code for file-format and complie with g++
.
like this,
{code:java}
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:java}
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:java}
namespace java org.apache.carbondata.format
{code}
It better add a cpp namespace make the generate c++ code have cpp namespace
{code:java}
namespace java org.apache.carbondata.format
namespace cpp carbondata.format
{code}
was:
Using thrift compiler to generate c++ code for file-format and complie with g++
.
like this,
{code}
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}
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}
namespace java org.apache.carbondata.format
{code}
It better add a cpp namespace make the generate c++ code have cpp namespace
{code}
namespace java org.apache.carbondata.format
namespace cpp carbondata.format
{code}
> 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
> Priority: Major
>
> Using thrift compiler to generate c++ code for file-format and complie with
> g++ .
> like this,
> {code:java}
> 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:java}
> 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:java}
> namespace java org.apache.carbondata.format
> {code}
> It better add a cpp namespace make the generate c++ code have cpp namespace
> {code:java}
> namespace java org.apache.carbondata.format
> namespace cpp carbondata.format
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)