You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by am...@apache.org on 2014/09/15 13:35:03 UTC

svn commit: r1625000 [2/3] - in /hive/trunk: contrib/src/test/results/clientpositive/ ql/src/test/queries/clientpositive/ ql/src/test/results/clientnegative/ ql/src/test/results/clientpositive/ ql/src/test/results/compiler/plan/ serde/if/test/ serde/sr...

Modified: hive/trunk/ql/src/test/results/compiler/plan/input_testxpath2.q.xml
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/compiler/plan/input_testxpath2.q.xml?rev=1625000&r1=1624999&r2=1625000&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/compiler/plan/input_testxpath2.q.xml (original)
+++ hive/trunk/ql/src/test/results/compiler/plan/input_testxpath2.q.xml Mon Sep 15 11:35:02 2014
@@ -131,7 +131,7 @@
             </void> 
             <void method="put"> 
              <string>totalSize</string> 
-             <string>1606</string> 
+             <string>3070</string> 
             </void> 
             <void method="put"> 
              <string>bucket_count</string> 
@@ -793,7 +793,7 @@
               <string>src_thrift</string> 
              </void> 
              <void property="type"> 
-              <object class="org.apache.hadoop.hive.serde2.typeinfo.ListTypeInfo"> 
+              <object id="ListTypeInfo2" class="org.apache.hadoop.hive.serde2.typeinfo.ListTypeInfo"> 
                <void property="listElementTypeInfo"> 
                 <object idref="PrimitiveTypeInfo1"/> 
                </void> 
@@ -812,6 +812,125 @@
            </void> 
            <void method="add"> 
             <object class="org.apache.hadoop.hive.ql.exec.ColumnInfo"> 
+             <void property="internalName"> 
+              <string>attributes</string> 
+             </void> 
+             <void property="tabAlias"> 
+              <string>src_thrift</string> 
+             </void> 
+             <void property="type"> 
+              <object class="org.apache.hadoop.hive.serde2.typeinfo.MapTypeInfo"> 
+               <void property="mapKeyTypeInfo"> 
+                <object idref="PrimitiveTypeInfo1"/> 
+               </void> 
+               <void property="mapValueTypeInfo"> 
+                <object class="org.apache.hadoop.hive.serde2.typeinfo.MapTypeInfo"> 
+                 <void property="mapKeyTypeInfo"> 
+                  <object idref="PrimitiveTypeInfo1"/> 
+                 </void> 
+                 <void property="mapValueTypeInfo"> 
+                  <object class="org.apache.hadoop.hive.serde2.typeinfo.MapTypeInfo"> 
+                   <void property="mapKeyTypeInfo"> 
+                    <object idref="PrimitiveTypeInfo1"/> 
+                   </void> 
+                   <void property="mapValueTypeInfo"> 
+                    <object id="UnionTypeInfo0" class="org.apache.hadoop.hive.serde2.typeinfo.UnionTypeInfo"> 
+                     <void property="allUnionObjectTypeInfos"> 
+                      <object class="java.util.ArrayList"> 
+                       <void method="add"> 
+                        <object idref="PrimitiveTypeInfo0"/> 
+                       </void> 
+                       <void method="add"> 
+                        <object id="PrimitiveTypeInfo3" class="org.apache.hadoop.hive.serde2.typeinfo.PrimitiveTypeInfo"> 
+                         <void property="typeName"> 
+                          <string>bigint</string> 
+                         </void> 
+                        </object> 
+                       </void> 
+                       <void method="add"> 
+                        <object idref="PrimitiveTypeInfo1"/> 
+                       </void> 
+                       <void method="add"> 
+                        <object class="org.apache.hadoop.hive.serde2.typeinfo.PrimitiveTypeInfo"> 
+                         <void property="typeName"> 
+                          <string>double</string> 
+                         </void> 
+                        </object> 
+                       </void> 
+                       <void method="add"> 
+                        <object idref="PrimitiveTypeInfo2"/> 
+                       </void> 
+                       <void method="add"> 
+                        <object idref="ListTypeInfo2"/> 
+                       </void> 
+                       <void method="add"> 
+                        <object idref="MapTypeInfo0"/> 
+                       </void> 
+                      </object> 
+                     </void> 
+                    </object> 
+                   </void> 
+                  </object> 
+                 </void> 
+                </object> 
+               </void> 
+              </object> 
+             </void> 
+             <void property="typeName"> 
+              <string>map&lt;string,map&lt;string,map&lt;string,uniontype&lt;int,bigint,string,double,boolean,array&lt;string&gt;,map&lt;string,string&gt;&gt;&gt;&gt;&gt;</string> 
+             </void> 
+            </object> 
+           </void> 
+           <void method="add"> 
+            <object class="org.apache.hadoop.hive.ql.exec.ColumnInfo"> 
+             <void property="internalName"> 
+              <string>unionfield1</string> 
+             </void> 
+             <void property="tabAlias"> 
+              <string>src_thrift</string> 
+             </void> 
+             <void property="type"> 
+              <object idref="UnionTypeInfo0"/> 
+             </void> 
+             <void property="typeName"> 
+              <string>uniontype&lt;int,bigint,string,double,boolean,array&lt;string&gt;,map&lt;string,string&gt;&gt;</string> 
+             </void> 
+            </object> 
+           </void> 
+           <void method="add"> 
+            <object class="org.apache.hadoop.hive.ql.exec.ColumnInfo"> 
+             <void property="internalName"> 
+              <string>unionfield2</string> 
+             </void> 
+             <void property="tabAlias"> 
+              <string>src_thrift</string> 
+             </void> 
+             <void property="type"> 
+              <object idref="UnionTypeInfo0"/> 
+             </void> 
+             <void property="typeName"> 
+              <string>uniontype&lt;int,bigint,string,double,boolean,array&lt;string&gt;,map&lt;string,string&gt;&gt;</string> 
+             </void> 
+            </object> 
+           </void> 
+           <void method="add"> 
+            <object class="org.apache.hadoop.hive.ql.exec.ColumnInfo"> 
+             <void property="internalName"> 
+              <string>unionfield3</string> 
+             </void> 
+             <void property="tabAlias"> 
+              <string>src_thrift</string> 
+             </void> 
+             <void property="type"> 
+              <object idref="UnionTypeInfo0"/> 
+             </void> 
+             <void property="typeName"> 
+              <string>uniontype&lt;int,bigint,string,double,boolean,array&lt;string&gt;,map&lt;string,string&gt;&gt;</string> 
+             </void> 
+            </object> 
+           </void> 
+           <void method="add"> 
+            <object class="org.apache.hadoop.hive.ql.exec.ColumnInfo"> 
              <void property="hiddenVirtualCol"> 
               <boolean>true</boolean> 
              </void> 
@@ -822,11 +941,7 @@
               <string>src_thrift</string> 
              </void> 
              <void property="type"> 
-              <object id="PrimitiveTypeInfo3" class="org.apache.hadoop.hive.serde2.typeinfo.PrimitiveTypeInfo"> 
-               <void property="typeName"> 
-                <string>bigint</string> 
-               </void> 
-              </object> 
+              <object idref="PrimitiveTypeInfo3"/> 
              </void> 
              <void property="typeName"> 
               <string>bigint</string> 
@@ -978,7 +1093,7 @@
           </void> 
           <void method="put"> 
            <string>totalSize</string> 
-           <string>1606</string> 
+           <string>3070</string> 
           </void> 
           <void method="put"> 
            <string>bucket_count</string> 

Modified: hive/trunk/serde/if/test/complex.thrift
URL: http://svn.apache.org/viewvc/hive/trunk/serde/if/test/complex.thrift?rev=1625000&r1=1624999&r2=1625000&view=diff
==============================================================================
--- hive/trunk/serde/if/test/complex.thrift (original)
+++ hive/trunk/serde/if/test/complex.thrift Mon Sep 15 11:35:02 2014
@@ -18,6 +18,16 @@
 
 namespace java org.apache.hadoop.hive.serde2.thrift.test
 
+union PropValueUnion {
+	1: optional i32 intValue;
+	2: optional i64 longValue;
+	3: optional string stringValue;
+	4: optional double doubleValue;
+	5: optional bool flag;
+	6: list<string> lString;
+	7: map<string, string> unionMStringString;
+}
+
 struct IntString {
   1: i32  myint;
   2: string myString;
@@ -31,6 +41,10 @@ struct Complex {
   4: list<string> lString;
   5: list<IntString> lintString;
   6: map<string, string> mStringString;
+  7: map<string,map<string,map<string,PropValueUnion>>> attributes;
+  8: PropValueUnion unionField1;
+  9: PropValueUnion unionField2;
+  10: PropValueUnion unionField3;
 }
 
 struct SetIntString {

Modified: hive/trunk/serde/src/gen/thrift/gen-cpp/complex_types.cpp
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/gen/thrift/gen-cpp/complex_types.cpp?rev=1625000&r1=1624999&r2=1625000&view=diff
==============================================================================
--- hive/trunk/serde/src/gen/thrift/gen-cpp/complex_types.cpp (original)
+++ hive/trunk/serde/src/gen/thrift/gen-cpp/complex_types.cpp Mon Sep 15 11:35:02 2014
@@ -10,6 +10,195 @@
 
 
 
+const char* PropValueUnion::ascii_fingerprint = "123CD9D82D5B5054B5054EFD63FC8590";
+const uint8_t PropValueUnion::binary_fingerprint[16] = {0x12,0x3C,0xD9,0xD8,0x2D,0x5B,0x50,0x54,0xB5,0x05,0x4E,0xFD,0x63,0xFC,0x85,0x90};
+
+uint32_t PropValueUnion::read(::apache::thrift::protocol::TProtocol* iprot) {
+
+  uint32_t xfer = 0;
+  std::string fname;
+  ::apache::thrift::protocol::TType ftype;
+  int16_t fid;
+
+  xfer += iprot->readStructBegin(fname);
+
+  using ::apache::thrift::protocol::TProtocolException;
+
+
+  while (true)
+  {
+    xfer += iprot->readFieldBegin(fname, ftype, fid);
+    if (ftype == ::apache::thrift::protocol::T_STOP) {
+      break;
+    }
+    switch (fid)
+    {
+      case 1:
+        if (ftype == ::apache::thrift::protocol::T_I32) {
+          xfer += iprot->readI32(this->intValue);
+          this->__isset.intValue = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
+      case 2:
+        if (ftype == ::apache::thrift::protocol::T_I64) {
+          xfer += iprot->readI64(this->longValue);
+          this->__isset.longValue = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
+      case 3:
+        if (ftype == ::apache::thrift::protocol::T_STRING) {
+          xfer += iprot->readString(this->stringValue);
+          this->__isset.stringValue = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
+      case 4:
+        if (ftype == ::apache::thrift::protocol::T_DOUBLE) {
+          xfer += iprot->readDouble(this->doubleValue);
+          this->__isset.doubleValue = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
+      case 5:
+        if (ftype == ::apache::thrift::protocol::T_BOOL) {
+          xfer += iprot->readBool(this->flag);
+          this->__isset.flag = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
+      case 6:
+        if (ftype == ::apache::thrift::protocol::T_LIST) {
+          {
+            this->lString.clear();
+            uint32_t _size0;
+            ::apache::thrift::protocol::TType _etype3;
+            xfer += iprot->readListBegin(_etype3, _size0);
+            this->lString.resize(_size0);
+            uint32_t _i4;
+            for (_i4 = 0; _i4 < _size0; ++_i4)
+            {
+              xfer += iprot->readString(this->lString[_i4]);
+            }
+            xfer += iprot->readListEnd();
+          }
+          this->__isset.lString = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
+      case 7:
+        if (ftype == ::apache::thrift::protocol::T_MAP) {
+          {
+            this->unionMStringString.clear();
+            uint32_t _size5;
+            ::apache::thrift::protocol::TType _ktype6;
+            ::apache::thrift::protocol::TType _vtype7;
+            xfer += iprot->readMapBegin(_ktype6, _vtype7, _size5);
+            uint32_t _i9;
+            for (_i9 = 0; _i9 < _size5; ++_i9)
+            {
+              std::string _key10;
+              xfer += iprot->readString(_key10);
+              std::string& _val11 = this->unionMStringString[_key10];
+              xfer += iprot->readString(_val11);
+            }
+            xfer += iprot->readMapEnd();
+          }
+          this->__isset.unionMStringString = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
+      default:
+        xfer += iprot->skip(ftype);
+        break;
+    }
+    xfer += iprot->readFieldEnd();
+  }
+
+  xfer += iprot->readStructEnd();
+
+  return xfer;
+}
+
+uint32_t PropValueUnion::write(::apache::thrift::protocol::TProtocol* oprot) const {
+  uint32_t xfer = 0;
+  xfer += oprot->writeStructBegin("PropValueUnion");
+
+  if (this->__isset.intValue) {
+    xfer += oprot->writeFieldBegin("intValue", ::apache::thrift::protocol::T_I32, 1);
+    xfer += oprot->writeI32(this->intValue);
+    xfer += oprot->writeFieldEnd();
+  }
+  if (this->__isset.longValue) {
+    xfer += oprot->writeFieldBegin("longValue", ::apache::thrift::protocol::T_I64, 2);
+    xfer += oprot->writeI64(this->longValue);
+    xfer += oprot->writeFieldEnd();
+  }
+  if (this->__isset.stringValue) {
+    xfer += oprot->writeFieldBegin("stringValue", ::apache::thrift::protocol::T_STRING, 3);
+    xfer += oprot->writeString(this->stringValue);
+    xfer += oprot->writeFieldEnd();
+  }
+  if (this->__isset.doubleValue) {
+    xfer += oprot->writeFieldBegin("doubleValue", ::apache::thrift::protocol::T_DOUBLE, 4);
+    xfer += oprot->writeDouble(this->doubleValue);
+    xfer += oprot->writeFieldEnd();
+  }
+  if (this->__isset.flag) {
+    xfer += oprot->writeFieldBegin("flag", ::apache::thrift::protocol::T_BOOL, 5);
+    xfer += oprot->writeBool(this->flag);
+    xfer += oprot->writeFieldEnd();
+  }
+  xfer += oprot->writeFieldBegin("lString", ::apache::thrift::protocol::T_LIST, 6);
+  {
+    xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRING, static_cast<uint32_t>(this->lString.size()));
+    std::vector<std::string> ::const_iterator _iter12;
+    for (_iter12 = this->lString.begin(); _iter12 != this->lString.end(); ++_iter12)
+    {
+      xfer += oprot->writeString((*_iter12));
+    }
+    xfer += oprot->writeListEnd();
+  }
+  xfer += oprot->writeFieldEnd();
+
+  xfer += oprot->writeFieldBegin("unionMStringString", ::apache::thrift::protocol::T_MAP, 7);
+  {
+    xfer += oprot->writeMapBegin(::apache::thrift::protocol::T_STRING, ::apache::thrift::protocol::T_STRING, static_cast<uint32_t>(this->unionMStringString.size()));
+    std::map<std::string, std::string> ::const_iterator _iter13;
+    for (_iter13 = this->unionMStringString.begin(); _iter13 != this->unionMStringString.end(); ++_iter13)
+    {
+      xfer += oprot->writeString(_iter13->first);
+      xfer += oprot->writeString(_iter13->second);
+    }
+    xfer += oprot->writeMapEnd();
+  }
+  xfer += oprot->writeFieldEnd();
+
+  xfer += oprot->writeFieldStop();
+  xfer += oprot->writeStructEnd();
+  return xfer;
+}
+
+void swap(PropValueUnion &a, PropValueUnion &b) {
+  using ::std::swap;
+  swap(a.intValue, b.intValue);
+  swap(a.longValue, b.longValue);
+  swap(a.stringValue, b.stringValue);
+  swap(a.doubleValue, b.doubleValue);
+  swap(a.flag, b.flag);
+  swap(a.lString, b.lString);
+  swap(a.unionMStringString, b.unionMStringString);
+  swap(a.__isset, b.__isset);
+}
+
 const char* IntString::ascii_fingerprint = "52C6DAB6CF51AF617111F6D3964C6503";
 const uint8_t IntString::binary_fingerprint[16] = {0x52,0xC6,0xDA,0xB6,0xCF,0x51,0xAF,0x61,0x71,0x11,0xF6,0xD3,0x96,0x4C,0x65,0x03};
 
@@ -98,8 +287,8 @@ void swap(IntString &a, IntString &b) {
   swap(a.__isset, b.__isset);
 }
 
-const char* Complex::ascii_fingerprint = "B6556501F2F746F0BF83D55B0A9824DE";
-const uint8_t Complex::binary_fingerprint[16] = {0xB6,0x55,0x65,0x01,0xF2,0xF7,0x46,0xF0,0xBF,0x83,0xD5,0x5B,0x0A,0x98,0x24,0xDE};
+const char* Complex::ascii_fingerprint = "FFA84FEA7037F5858F2BFEDA73AD679A";
+const uint8_t Complex::binary_fingerprint[16] = {0xFF,0xA8,0x4F,0xEA,0x70,0x37,0xF5,0x85,0x8F,0x2B,0xFE,0xDA,0x73,0xAD,0x67,0x9A};
 
 uint32_t Complex::read(::apache::thrift::protocol::TProtocol* iprot) {
 
@@ -141,14 +330,14 @@ uint32_t Complex::read(::apache::thrift:
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->lint.clear();
-            uint32_t _size0;
-            ::apache::thrift::protocol::TType _etype3;
-            xfer += iprot->readListBegin(_etype3, _size0);
-            this->lint.resize(_size0);
-            uint32_t _i4;
-            for (_i4 = 0; _i4 < _size0; ++_i4)
+            uint32_t _size14;
+            ::apache::thrift::protocol::TType _etype17;
+            xfer += iprot->readListBegin(_etype17, _size14);
+            this->lint.resize(_size14);
+            uint32_t _i18;
+            for (_i18 = 0; _i18 < _size14; ++_i18)
             {
-              xfer += iprot->readI32(this->lint[_i4]);
+              xfer += iprot->readI32(this->lint[_i18]);
             }
             xfer += iprot->readListEnd();
           }
@@ -161,14 +350,14 @@ uint32_t Complex::read(::apache::thrift:
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->lString.clear();
-            uint32_t _size5;
-            ::apache::thrift::protocol::TType _etype8;
-            xfer += iprot->readListBegin(_etype8, _size5);
-            this->lString.resize(_size5);
-            uint32_t _i9;
-            for (_i9 = 0; _i9 < _size5; ++_i9)
+            uint32_t _size19;
+            ::apache::thrift::protocol::TType _etype22;
+            xfer += iprot->readListBegin(_etype22, _size19);
+            this->lString.resize(_size19);
+            uint32_t _i23;
+            for (_i23 = 0; _i23 < _size19; ++_i23)
             {
-              xfer += iprot->readString(this->lString[_i9]);
+              xfer += iprot->readString(this->lString[_i23]);
             }
             xfer += iprot->readListEnd();
           }
@@ -181,14 +370,14 @@ uint32_t Complex::read(::apache::thrift:
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->lintString.clear();
-            uint32_t _size10;
-            ::apache::thrift::protocol::TType _etype13;
-            xfer += iprot->readListBegin(_etype13, _size10);
-            this->lintString.resize(_size10);
-            uint32_t _i14;
-            for (_i14 = 0; _i14 < _size10; ++_i14)
+            uint32_t _size24;
+            ::apache::thrift::protocol::TType _etype27;
+            xfer += iprot->readListBegin(_etype27, _size24);
+            this->lintString.resize(_size24);
+            uint32_t _i28;
+            for (_i28 = 0; _i28 < _size24; ++_i28)
             {
-              xfer += this->lintString[_i14].read(iprot);
+              xfer += this->lintString[_i28].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -201,17 +390,17 @@ uint32_t Complex::read(::apache::thrift:
         if (ftype == ::apache::thrift::protocol::T_MAP) {
           {
             this->mStringString.clear();
-            uint32_t _size15;
-            ::apache::thrift::protocol::TType _ktype16;
-            ::apache::thrift::protocol::TType _vtype17;
-            xfer += iprot->readMapBegin(_ktype16, _vtype17, _size15);
-            uint32_t _i19;
-            for (_i19 = 0; _i19 < _size15; ++_i19)
+            uint32_t _size29;
+            ::apache::thrift::protocol::TType _ktype30;
+            ::apache::thrift::protocol::TType _vtype31;
+            xfer += iprot->readMapBegin(_ktype30, _vtype31, _size29);
+            uint32_t _i33;
+            for (_i33 = 0; _i33 < _size29; ++_i33)
             {
-              std::string _key20;
-              xfer += iprot->readString(_key20);
-              std::string& _val21 = this->mStringString[_key20];
-              xfer += iprot->readString(_val21);
+              std::string _key34;
+              xfer += iprot->readString(_key34);
+              std::string& _val35 = this->mStringString[_key34];
+              xfer += iprot->readString(_val35);
             }
             xfer += iprot->readMapEnd();
           }
@@ -220,6 +409,83 @@ uint32_t Complex::read(::apache::thrift:
           xfer += iprot->skip(ftype);
         }
         break;
+      case 7:
+        if (ftype == ::apache::thrift::protocol::T_MAP) {
+          {
+            this->attributes.clear();
+            uint32_t _size36;
+            ::apache::thrift::protocol::TType _ktype37;
+            ::apache::thrift::protocol::TType _vtype38;
+            xfer += iprot->readMapBegin(_ktype37, _vtype38, _size36);
+            uint32_t _i40;
+            for (_i40 = 0; _i40 < _size36; ++_i40)
+            {
+              std::string _key41;
+              xfer += iprot->readString(_key41);
+              std::map<std::string, std::map<std::string, PropValueUnion> > & _val42 = this->attributes[_key41];
+              {
+                _val42.clear();
+                uint32_t _size43;
+                ::apache::thrift::protocol::TType _ktype44;
+                ::apache::thrift::protocol::TType _vtype45;
+                xfer += iprot->readMapBegin(_ktype44, _vtype45, _size43);
+                uint32_t _i47;
+                for (_i47 = 0; _i47 < _size43; ++_i47)
+                {
+                  std::string _key48;
+                  xfer += iprot->readString(_key48);
+                  std::map<std::string, PropValueUnion> & _val49 = _val42[_key48];
+                  {
+                    _val49.clear();
+                    uint32_t _size50;
+                    ::apache::thrift::protocol::TType _ktype51;
+                    ::apache::thrift::protocol::TType _vtype52;
+                    xfer += iprot->readMapBegin(_ktype51, _vtype52, _size50);
+                    uint32_t _i54;
+                    for (_i54 = 0; _i54 < _size50; ++_i54)
+                    {
+                      std::string _key55;
+                      xfer += iprot->readString(_key55);
+                      PropValueUnion& _val56 = _val49[_key55];
+                      xfer += _val56.read(iprot);
+                    }
+                    xfer += iprot->readMapEnd();
+                  }
+                }
+                xfer += iprot->readMapEnd();
+              }
+            }
+            xfer += iprot->readMapEnd();
+          }
+          this->__isset.attributes = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
+      case 8:
+        if (ftype == ::apache::thrift::protocol::T_STRUCT) {
+          xfer += this->unionField1.read(iprot);
+          this->__isset.unionField1 = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
+      case 9:
+        if (ftype == ::apache::thrift::protocol::T_STRUCT) {
+          xfer += this->unionField2.read(iprot);
+          this->__isset.unionField2 = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
+      case 10:
+        if (ftype == ::apache::thrift::protocol::T_STRUCT) {
+          xfer += this->unionField3.read(iprot);
+          this->__isset.unionField3 = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       default:
         xfer += iprot->skip(ftype);
         break;
@@ -247,10 +513,10 @@ uint32_t Complex::write(::apache::thrift
   xfer += oprot->writeFieldBegin("lint", ::apache::thrift::protocol::T_LIST, 3);
   {
     xfer += oprot->writeListBegin(::apache::thrift::protocol::T_I32, static_cast<uint32_t>(this->lint.size()));
-    std::vector<int32_t> ::const_iterator _iter22;
-    for (_iter22 = this->lint.begin(); _iter22 != this->lint.end(); ++_iter22)
+    std::vector<int32_t> ::const_iterator _iter57;
+    for (_iter57 = this->lint.begin(); _iter57 != this->lint.end(); ++_iter57)
     {
-      xfer += oprot->writeI32((*_iter22));
+      xfer += oprot->writeI32((*_iter57));
     }
     xfer += oprot->writeListEnd();
   }
@@ -259,10 +525,10 @@ uint32_t Complex::write(::apache::thrift
   xfer += oprot->writeFieldBegin("lString", ::apache::thrift::protocol::T_LIST, 4);
   {
     xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRING, static_cast<uint32_t>(this->lString.size()));
-    std::vector<std::string> ::const_iterator _iter23;
-    for (_iter23 = this->lString.begin(); _iter23 != this->lString.end(); ++_iter23)
+    std::vector<std::string> ::const_iterator _iter58;
+    for (_iter58 = this->lString.begin(); _iter58 != this->lString.end(); ++_iter58)
     {
-      xfer += oprot->writeString((*_iter23));
+      xfer += oprot->writeString((*_iter58));
     }
     xfer += oprot->writeListEnd();
   }
@@ -271,10 +537,10 @@ uint32_t Complex::write(::apache::thrift
   xfer += oprot->writeFieldBegin("lintString", ::apache::thrift::protocol::T_LIST, 5);
   {
     xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->lintString.size()));
-    std::vector<IntString> ::const_iterator _iter24;
-    for (_iter24 = this->lintString.begin(); _iter24 != this->lintString.end(); ++_iter24)
+    std::vector<IntString> ::const_iterator _iter59;
+    for (_iter59 = this->lintString.begin(); _iter59 != this->lintString.end(); ++_iter59)
     {
-      xfer += (*_iter24).write(oprot);
+      xfer += (*_iter59).write(oprot);
     }
     xfer += oprot->writeListEnd();
   }
@@ -283,16 +549,59 @@ uint32_t Complex::write(::apache::thrift
   xfer += oprot->writeFieldBegin("mStringString", ::apache::thrift::protocol::T_MAP, 6);
   {
     xfer += oprot->writeMapBegin(::apache::thrift::protocol::T_STRING, ::apache::thrift::protocol::T_STRING, static_cast<uint32_t>(this->mStringString.size()));
-    std::map<std::string, std::string> ::const_iterator _iter25;
-    for (_iter25 = this->mStringString.begin(); _iter25 != this->mStringString.end(); ++_iter25)
+    std::map<std::string, std::string> ::const_iterator _iter60;
+    for (_iter60 = this->mStringString.begin(); _iter60 != this->mStringString.end(); ++_iter60)
     {
-      xfer += oprot->writeString(_iter25->first);
-      xfer += oprot->writeString(_iter25->second);
+      xfer += oprot->writeString(_iter60->first);
+      xfer += oprot->writeString(_iter60->second);
     }
     xfer += oprot->writeMapEnd();
   }
   xfer += oprot->writeFieldEnd();
 
+  xfer += oprot->writeFieldBegin("attributes", ::apache::thrift::protocol::T_MAP, 7);
+  {
+    xfer += oprot->writeMapBegin(::apache::thrift::protocol::T_STRING, ::apache::thrift::protocol::T_MAP, static_cast<uint32_t>(this->attributes.size()));
+    std::map<std::string, std::map<std::string, std::map<std::string, PropValueUnion> > > ::const_iterator _iter61;
+    for (_iter61 = this->attributes.begin(); _iter61 != this->attributes.end(); ++_iter61)
+    {
+      xfer += oprot->writeString(_iter61->first);
+      {
+        xfer += oprot->writeMapBegin(::apache::thrift::protocol::T_STRING, ::apache::thrift::protocol::T_MAP, static_cast<uint32_t>(_iter61->second.size()));
+        std::map<std::string, std::map<std::string, PropValueUnion> > ::const_iterator _iter62;
+        for (_iter62 = _iter61->second.begin(); _iter62 != _iter61->second.end(); ++_iter62)
+        {
+          xfer += oprot->writeString(_iter62->first);
+          {
+            xfer += oprot->writeMapBegin(::apache::thrift::protocol::T_STRING, ::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(_iter62->second.size()));
+            std::map<std::string, PropValueUnion> ::const_iterator _iter63;
+            for (_iter63 = _iter62->second.begin(); _iter63 != _iter62->second.end(); ++_iter63)
+            {
+              xfer += oprot->writeString(_iter63->first);
+              xfer += _iter63->second.write(oprot);
+            }
+            xfer += oprot->writeMapEnd();
+          }
+        }
+        xfer += oprot->writeMapEnd();
+      }
+    }
+    xfer += oprot->writeMapEnd();
+  }
+  xfer += oprot->writeFieldEnd();
+
+  xfer += oprot->writeFieldBegin("unionField1", ::apache::thrift::protocol::T_STRUCT, 8);
+  xfer += this->unionField1.write(oprot);
+  xfer += oprot->writeFieldEnd();
+
+  xfer += oprot->writeFieldBegin("unionField2", ::apache::thrift::protocol::T_STRUCT, 9);
+  xfer += this->unionField2.write(oprot);
+  xfer += oprot->writeFieldEnd();
+
+  xfer += oprot->writeFieldBegin("unionField3", ::apache::thrift::protocol::T_STRUCT, 10);
+  xfer += this->unionField3.write(oprot);
+  xfer += oprot->writeFieldEnd();
+
   xfer += oprot->writeFieldStop();
   xfer += oprot->writeStructEnd();
   return xfer;
@@ -306,6 +615,10 @@ void swap(Complex &a, Complex &b) {
   swap(a.lString, b.lString);
   swap(a.lintString, b.lintString);
   swap(a.mStringString, b.mStringString);
+  swap(a.attributes, b.attributes);
+  swap(a.unionField1, b.unionField1);
+  swap(a.unionField2, b.unionField2);
+  swap(a.unionField3, b.unionField3);
   swap(a.__isset, b.__isset);
 }
 

Modified: hive/trunk/serde/src/gen/thrift/gen-cpp/complex_types.h
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/gen/thrift/gen-cpp/complex_types.h?rev=1625000&r1=1624999&r2=1625000&view=diff
==============================================================================
--- hive/trunk/serde/src/gen/thrift/gen-cpp/complex_types.h (original)
+++ hive/trunk/serde/src/gen/thrift/gen-cpp/complex_types.h Mon Sep 15 11:35:02 2014
@@ -16,6 +16,112 @@
 
 
 
+typedef struct _PropValueUnion__isset {
+  _PropValueUnion__isset() : intValue(false), longValue(false), stringValue(false), doubleValue(false), flag(false), lString(false), unionMStringString(false) {}
+  bool intValue;
+  bool longValue;
+  bool stringValue;
+  bool doubleValue;
+  bool flag;
+  bool lString;
+  bool unionMStringString;
+} _PropValueUnion__isset;
+
+class PropValueUnion {
+ public:
+
+  static const char* ascii_fingerprint; // = "123CD9D82D5B5054B5054EFD63FC8590";
+  static const uint8_t binary_fingerprint[16]; // = {0x12,0x3C,0xD9,0xD8,0x2D,0x5B,0x50,0x54,0xB5,0x05,0x4E,0xFD,0x63,0xFC,0x85,0x90};
+
+  PropValueUnion() : intValue(0), longValue(0), stringValue(), doubleValue(0), flag(0) {
+  }
+
+  virtual ~PropValueUnion() throw() {}
+
+  int32_t intValue;
+  int64_t longValue;
+  std::string stringValue;
+  double doubleValue;
+  bool flag;
+  std::vector<std::string>  lString;
+  std::map<std::string, std::string>  unionMStringString;
+
+  _PropValueUnion__isset __isset;
+
+  void __set_intValue(const int32_t val) {
+    intValue = val;
+    __isset.intValue = true;
+  }
+
+  void __set_longValue(const int64_t val) {
+    longValue = val;
+    __isset.longValue = true;
+  }
+
+  void __set_stringValue(const std::string& val) {
+    stringValue = val;
+    __isset.stringValue = true;
+  }
+
+  void __set_doubleValue(const double val) {
+    doubleValue = val;
+    __isset.doubleValue = true;
+  }
+
+  void __set_flag(const bool val) {
+    flag = val;
+    __isset.flag = true;
+  }
+
+  void __set_lString(const std::vector<std::string> & val) {
+    lString = val;
+  }
+
+  void __set_unionMStringString(const std::map<std::string, std::string> & val) {
+    unionMStringString = val;
+  }
+
+  bool operator == (const PropValueUnion & rhs) const
+  {
+    if (__isset.intValue != rhs.__isset.intValue)
+      return false;
+    else if (__isset.intValue && !(intValue == rhs.intValue))
+      return false;
+    if (__isset.longValue != rhs.__isset.longValue)
+      return false;
+    else if (__isset.longValue && !(longValue == rhs.longValue))
+      return false;
+    if (__isset.stringValue != rhs.__isset.stringValue)
+      return false;
+    else if (__isset.stringValue && !(stringValue == rhs.stringValue))
+      return false;
+    if (__isset.doubleValue != rhs.__isset.doubleValue)
+      return false;
+    else if (__isset.doubleValue && !(doubleValue == rhs.doubleValue))
+      return false;
+    if (__isset.flag != rhs.__isset.flag)
+      return false;
+    else if (__isset.flag && !(flag == rhs.flag))
+      return false;
+    if (!(lString == rhs.lString))
+      return false;
+    if (!(unionMStringString == rhs.unionMStringString))
+      return false;
+    return true;
+  }
+  bool operator != (const PropValueUnion &rhs) const {
+    return !(*this == rhs);
+  }
+
+  bool operator < (const PropValueUnion & ) const;
+
+  uint32_t read(::apache::thrift::protocol::TProtocol* iprot);
+  uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
+
+};
+
+void swap(PropValueUnion &a, PropValueUnion &b);
+
 typedef struct _IntString__isset {
   _IntString__isset() : myint(false), myString(false), underscore_int(false) {}
   bool myint;
@@ -76,20 +182,24 @@ class IntString {
 void swap(IntString &a, IntString &b);
 
 typedef struct _Complex__isset {
-  _Complex__isset() : aint(false), aString(false), lint(false), lString(false), lintString(false), mStringString(false) {}
+  _Complex__isset() : aint(false), aString(false), lint(false), lString(false), lintString(false), mStringString(false), attributes(false), unionField1(false), unionField2(false), unionField3(false) {}
   bool aint;
   bool aString;
   bool lint;
   bool lString;
   bool lintString;
   bool mStringString;
+  bool attributes;
+  bool unionField1;
+  bool unionField2;
+  bool unionField3;
 } _Complex__isset;
 
 class Complex {
  public:
 
-  static const char* ascii_fingerprint; // = "B6556501F2F746F0BF83D55B0A9824DE";
-  static const uint8_t binary_fingerprint[16]; // = {0xB6,0x55,0x65,0x01,0xF2,0xF7,0x46,0xF0,0xBF,0x83,0xD5,0x5B,0x0A,0x98,0x24,0xDE};
+  static const char* ascii_fingerprint; // = "FFA84FEA7037F5858F2BFEDA73AD679A";
+  static const uint8_t binary_fingerprint[16]; // = {0xFF,0xA8,0x4F,0xEA,0x70,0x37,0xF5,0x85,0x8F,0x2B,0xFE,0xDA,0x73,0xAD,0x67,0x9A};
 
   Complex() : aint(0), aString() {
   }
@@ -102,6 +212,10 @@ class Complex {
   std::vector<std::string>  lString;
   std::vector<IntString>  lintString;
   std::map<std::string, std::string>  mStringString;
+  std::map<std::string, std::map<std::string, std::map<std::string, PropValueUnion> > >  attributes;
+  PropValueUnion unionField1;
+  PropValueUnion unionField2;
+  PropValueUnion unionField3;
 
   _Complex__isset __isset;
 
@@ -129,6 +243,22 @@ class Complex {
     mStringString = val;
   }
 
+  void __set_attributes(const std::map<std::string, std::map<std::string, std::map<std::string, PropValueUnion> > > & val) {
+    attributes = val;
+  }
+
+  void __set_unionField1(const PropValueUnion& val) {
+    unionField1 = val;
+  }
+
+  void __set_unionField2(const PropValueUnion& val) {
+    unionField2 = val;
+  }
+
+  void __set_unionField3(const PropValueUnion& val) {
+    unionField3 = val;
+  }
+
   bool operator == (const Complex & rhs) const
   {
     if (!(aint == rhs.aint))
@@ -143,6 +273,14 @@ class Complex {
       return false;
     if (!(mStringString == rhs.mStringString))
       return false;
+    if (!(attributes == rhs.attributes))
+      return false;
+    if (!(unionField1 == rhs.unionField1))
+      return false;
+    if (!(unionField2 == rhs.unionField2))
+      return false;
+    if (!(unionField3 == rhs.unionField3))
+      return false;
     return true;
   }
   bool operator != (const Complex &rhs) const {

Modified: hive/trunk/serde/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/serde2/thrift/test/Complex.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/serde2/thrift/test/Complex.java?rev=1625000&r1=1624999&r2=1625000&view=diff
==============================================================================
--- hive/trunk/serde/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/serde2/thrift/test/Complex.java (original)
+++ hive/trunk/serde/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/serde2/thrift/test/Complex.java Mon Sep 15 11:35:02 2014
@@ -40,6 +40,10 @@ public class Complex implements org.apac
   private static final org.apache.thrift.protocol.TField L_STRING_FIELD_DESC = new org.apache.thrift.protocol.TField("lString", org.apache.thrift.protocol.TType.LIST, (short)4);
   private static final org.apache.thrift.protocol.TField LINT_STRING_FIELD_DESC = new org.apache.thrift.protocol.TField("lintString", org.apache.thrift.protocol.TType.LIST, (short)5);
   private static final org.apache.thrift.protocol.TField M_STRING_STRING_FIELD_DESC = new org.apache.thrift.protocol.TField("mStringString", org.apache.thrift.protocol.TType.MAP, (short)6);
+  private static final org.apache.thrift.protocol.TField ATTRIBUTES_FIELD_DESC = new org.apache.thrift.protocol.TField("attributes", org.apache.thrift.protocol.TType.MAP, (short)7);
+  private static final org.apache.thrift.protocol.TField UNION_FIELD1_FIELD_DESC = new org.apache.thrift.protocol.TField("unionField1", org.apache.thrift.protocol.TType.STRUCT, (short)8);
+  private static final org.apache.thrift.protocol.TField UNION_FIELD2_FIELD_DESC = new org.apache.thrift.protocol.TField("unionField2", org.apache.thrift.protocol.TType.STRUCT, (short)9);
+  private static final org.apache.thrift.protocol.TField UNION_FIELD3_FIELD_DESC = new org.apache.thrift.protocol.TField("unionField3", org.apache.thrift.protocol.TType.STRUCT, (short)10);
 
   private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
   static {
@@ -53,6 +57,10 @@ public class Complex implements org.apac
   private List<String> lString; // required
   private List<IntString> lintString; // required
   private Map<String,String> mStringString; // required
+  private Map<String,Map<String,Map<String,PropValueUnion>>> attributes; // required
+  private PropValueUnion unionField1; // required
+  private PropValueUnion unionField2; // required
+  private PropValueUnion unionField3; // required
 
   /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
   public enum _Fields implements org.apache.thrift.TFieldIdEnum {
@@ -61,7 +69,11 @@ public class Complex implements org.apac
     LINT((short)3, "lint"),
     L_STRING((short)4, "lString"),
     LINT_STRING((short)5, "lintString"),
-    M_STRING_STRING((short)6, "mStringString");
+    M_STRING_STRING((short)6, "mStringString"),
+    ATTRIBUTES((short)7, "attributes"),
+    UNION_FIELD1((short)8, "unionField1"),
+    UNION_FIELD2((short)9, "unionField2"),
+    UNION_FIELD3((short)10, "unionField3");
 
     private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -88,6 +100,14 @@ public class Complex implements org.apac
           return LINT_STRING;
         case 6: // M_STRING_STRING
           return M_STRING_STRING;
+        case 7: // ATTRIBUTES
+          return ATTRIBUTES;
+        case 8: // UNION_FIELD1
+          return UNION_FIELD1;
+        case 9: // UNION_FIELD2
+          return UNION_FIELD2;
+        case 10: // UNION_FIELD3
+          return UNION_FIELD3;
         default:
           return null;
       }
@@ -150,6 +170,20 @@ public class Complex implements org.apac
         new org.apache.thrift.meta_data.MapMetaData(org.apache.thrift.protocol.TType.MAP, 
             new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING), 
             new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))));
+    tmpMap.put(_Fields.ATTRIBUTES, new org.apache.thrift.meta_data.FieldMetaData("attributes", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new org.apache.thrift.meta_data.MapMetaData(org.apache.thrift.protocol.TType.MAP, 
+            new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING), 
+            new org.apache.thrift.meta_data.MapMetaData(org.apache.thrift.protocol.TType.MAP, 
+                new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING), 
+                new org.apache.thrift.meta_data.MapMetaData(org.apache.thrift.protocol.TType.MAP, 
+                    new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING), 
+                    new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, PropValueUnion.class))))));
+    tmpMap.put(_Fields.UNION_FIELD1, new org.apache.thrift.meta_data.FieldMetaData("unionField1", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, PropValueUnion.class)));
+    tmpMap.put(_Fields.UNION_FIELD2, new org.apache.thrift.meta_data.FieldMetaData("unionField2", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, PropValueUnion.class)));
+    tmpMap.put(_Fields.UNION_FIELD3, new org.apache.thrift.meta_data.FieldMetaData("unionField3", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, PropValueUnion.class)));
     metaDataMap = Collections.unmodifiableMap(tmpMap);
     org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(Complex.class, metaDataMap);
   }
@@ -163,7 +197,11 @@ public class Complex implements org.apac
     List<Integer> lint,
     List<String> lString,
     List<IntString> lintString,
-    Map<String,String> mStringString)
+    Map<String,String> mStringString,
+    Map<String,Map<String,Map<String,PropValueUnion>>> attributes,
+    PropValueUnion unionField1,
+    PropValueUnion unionField2,
+    PropValueUnion unionField3)
   {
     this();
     this.aint = aint;
@@ -173,6 +211,10 @@ public class Complex implements org.apac
     this.lString = lString;
     this.lintString = lintString;
     this.mStringString = mStringString;
+    this.attributes = attributes;
+    this.unionField1 = unionField1;
+    this.unionField2 = unionField2;
+    this.unionField3 = unionField3;
   }
 
   /**
@@ -220,6 +262,52 @@ public class Complex implements org.apac
       }
       this.mStringString = __this__mStringString;
     }
+    if (other.isSetAttributes()) {
+      Map<String,Map<String,Map<String,PropValueUnion>>> __this__attributes = new HashMap<String,Map<String,Map<String,PropValueUnion>>>();
+      for (Map.Entry<String, Map<String,Map<String,PropValueUnion>>> other_element : other.attributes.entrySet()) {
+
+        String other_element_key = other_element.getKey();
+        Map<String,Map<String,PropValueUnion>> other_element_value = other_element.getValue();
+
+        String __this__attributes_copy_key = other_element_key;
+
+        Map<String,Map<String,PropValueUnion>> __this__attributes_copy_value = new HashMap<String,Map<String,PropValueUnion>>();
+        for (Map.Entry<String, Map<String,PropValueUnion>> other_element_value_element : other_element_value.entrySet()) {
+
+          String other_element_value_element_key = other_element_value_element.getKey();
+          Map<String,PropValueUnion> other_element_value_element_value = other_element_value_element.getValue();
+
+          String __this__attributes_copy_value_copy_key = other_element_value_element_key;
+
+          Map<String,PropValueUnion> __this__attributes_copy_value_copy_value = new HashMap<String,PropValueUnion>();
+          for (Map.Entry<String, PropValueUnion> other_element_value_element_value_element : other_element_value_element_value.entrySet()) {
+
+            String other_element_value_element_value_element_key = other_element_value_element_value_element.getKey();
+            PropValueUnion other_element_value_element_value_element_value = other_element_value_element_value_element.getValue();
+
+            String __this__attributes_copy_value_copy_value_copy_key = other_element_value_element_value_element_key;
+
+            PropValueUnion __this__attributes_copy_value_copy_value_copy_value = new PropValueUnion(other_element_value_element_value_element_value);
+
+            __this__attributes_copy_value_copy_value.put(__this__attributes_copy_value_copy_value_copy_key, __this__attributes_copy_value_copy_value_copy_value);
+          }
+
+          __this__attributes_copy_value.put(__this__attributes_copy_value_copy_key, __this__attributes_copy_value_copy_value);
+        }
+
+        __this__attributes.put(__this__attributes_copy_key, __this__attributes_copy_value);
+      }
+      this.attributes = __this__attributes;
+    }
+    if (other.isSetUnionField1()) {
+      this.unionField1 = new PropValueUnion(other.unionField1);
+    }
+    if (other.isSetUnionField2()) {
+      this.unionField2 = new PropValueUnion(other.unionField2);
+    }
+    if (other.isSetUnionField3()) {
+      this.unionField3 = new PropValueUnion(other.unionField3);
+    }
   }
 
   public Complex deepCopy() {
@@ -235,6 +323,10 @@ public class Complex implements org.apac
     this.lString = null;
     this.lintString = null;
     this.mStringString = null;
+    this.attributes = null;
+    this.unionField1 = null;
+    this.unionField2 = null;
+    this.unionField3 = null;
   }
 
   public int getAint() {
@@ -430,6 +522,109 @@ public class Complex implements org.apac
     }
   }
 
+  public int getAttributesSize() {
+    return (this.attributes == null) ? 0 : this.attributes.size();
+  }
+
+  public void putToAttributes(String key, Map<String,Map<String,PropValueUnion>> val) {
+    if (this.attributes == null) {
+      this.attributes = new HashMap<String,Map<String,Map<String,PropValueUnion>>>();
+    }
+    this.attributes.put(key, val);
+  }
+
+  public Map<String,Map<String,Map<String,PropValueUnion>>> getAttributes() {
+    return this.attributes;
+  }
+
+  public void setAttributes(Map<String,Map<String,Map<String,PropValueUnion>>> attributes) {
+    this.attributes = attributes;
+  }
+
+  public void unsetAttributes() {
+    this.attributes = null;
+  }
+
+  /** Returns true if field attributes is set (has been assigned a value) and false otherwise */
+  public boolean isSetAttributes() {
+    return this.attributes != null;
+  }
+
+  public void setAttributesIsSet(boolean value) {
+    if (!value) {
+      this.attributes = null;
+    }
+  }
+
+  public PropValueUnion getUnionField1() {
+    return this.unionField1;
+  }
+
+  public void setUnionField1(PropValueUnion unionField1) {
+    this.unionField1 = unionField1;
+  }
+
+  public void unsetUnionField1() {
+    this.unionField1 = null;
+  }
+
+  /** Returns true if field unionField1 is set (has been assigned a value) and false otherwise */
+  public boolean isSetUnionField1() {
+    return this.unionField1 != null;
+  }
+
+  public void setUnionField1IsSet(boolean value) {
+    if (!value) {
+      this.unionField1 = null;
+    }
+  }
+
+  public PropValueUnion getUnionField2() {
+    return this.unionField2;
+  }
+
+  public void setUnionField2(PropValueUnion unionField2) {
+    this.unionField2 = unionField2;
+  }
+
+  public void unsetUnionField2() {
+    this.unionField2 = null;
+  }
+
+  /** Returns true if field unionField2 is set (has been assigned a value) and false otherwise */
+  public boolean isSetUnionField2() {
+    return this.unionField2 != null;
+  }
+
+  public void setUnionField2IsSet(boolean value) {
+    if (!value) {
+      this.unionField2 = null;
+    }
+  }
+
+  public PropValueUnion getUnionField3() {
+    return this.unionField3;
+  }
+
+  public void setUnionField3(PropValueUnion unionField3) {
+    this.unionField3 = unionField3;
+  }
+
+  public void unsetUnionField3() {
+    this.unionField3 = null;
+  }
+
+  /** Returns true if field unionField3 is set (has been assigned a value) and false otherwise */
+  public boolean isSetUnionField3() {
+    return this.unionField3 != null;
+  }
+
+  public void setUnionField3IsSet(boolean value) {
+    if (!value) {
+      this.unionField3 = null;
+    }
+  }
+
   public void setFieldValue(_Fields field, Object value) {
     switch (field) {
     case AINT:
@@ -480,6 +675,38 @@ public class Complex implements org.apac
       }
       break;
 
+    case ATTRIBUTES:
+      if (value == null) {
+        unsetAttributes();
+      } else {
+        setAttributes((Map<String,Map<String,Map<String,PropValueUnion>>>)value);
+      }
+      break;
+
+    case UNION_FIELD1:
+      if (value == null) {
+        unsetUnionField1();
+      } else {
+        setUnionField1((PropValueUnion)value);
+      }
+      break;
+
+    case UNION_FIELD2:
+      if (value == null) {
+        unsetUnionField2();
+      } else {
+        setUnionField2((PropValueUnion)value);
+      }
+      break;
+
+    case UNION_FIELD3:
+      if (value == null) {
+        unsetUnionField3();
+      } else {
+        setUnionField3((PropValueUnion)value);
+      }
+      break;
+
     }
   }
 
@@ -503,6 +730,18 @@ public class Complex implements org.apac
     case M_STRING_STRING:
       return getMStringString();
 
+    case ATTRIBUTES:
+      return getAttributes();
+
+    case UNION_FIELD1:
+      return getUnionField1();
+
+    case UNION_FIELD2:
+      return getUnionField2();
+
+    case UNION_FIELD3:
+      return getUnionField3();
+
     }
     throw new IllegalStateException();
   }
@@ -526,6 +765,14 @@ public class Complex implements org.apac
       return isSetLintString();
     case M_STRING_STRING:
       return isSetMStringString();
+    case ATTRIBUTES:
+      return isSetAttributes();
+    case UNION_FIELD1:
+      return isSetUnionField1();
+    case UNION_FIELD2:
+      return isSetUnionField2();
+    case UNION_FIELD3:
+      return isSetUnionField3();
     }
     throw new IllegalStateException();
   }
@@ -597,6 +844,42 @@ public class Complex implements org.apac
         return false;
     }
 
+    boolean this_present_attributes = true && this.isSetAttributes();
+    boolean that_present_attributes = true && that.isSetAttributes();
+    if (this_present_attributes || that_present_attributes) {
+      if (!(this_present_attributes && that_present_attributes))
+        return false;
+      if (!this.attributes.equals(that.attributes))
+        return false;
+    }
+
+    boolean this_present_unionField1 = true && this.isSetUnionField1();
+    boolean that_present_unionField1 = true && that.isSetUnionField1();
+    if (this_present_unionField1 || that_present_unionField1) {
+      if (!(this_present_unionField1 && that_present_unionField1))
+        return false;
+      if (!this.unionField1.equals(that.unionField1))
+        return false;
+    }
+
+    boolean this_present_unionField2 = true && this.isSetUnionField2();
+    boolean that_present_unionField2 = true && that.isSetUnionField2();
+    if (this_present_unionField2 || that_present_unionField2) {
+      if (!(this_present_unionField2 && that_present_unionField2))
+        return false;
+      if (!this.unionField2.equals(that.unionField2))
+        return false;
+    }
+
+    boolean this_present_unionField3 = true && this.isSetUnionField3();
+    boolean that_present_unionField3 = true && that.isSetUnionField3();
+    if (this_present_unionField3 || that_present_unionField3) {
+      if (!(this_present_unionField3 && that_present_unionField3))
+        return false;
+      if (!this.unionField3.equals(that.unionField3))
+        return false;
+    }
+
     return true;
   }
 
@@ -634,6 +917,26 @@ public class Complex implements org.apac
     if (present_mStringString)
       builder.append(mStringString);
 
+    boolean present_attributes = true && (isSetAttributes());
+    builder.append(present_attributes);
+    if (present_attributes)
+      builder.append(attributes);
+
+    boolean present_unionField1 = true && (isSetUnionField1());
+    builder.append(present_unionField1);
+    if (present_unionField1)
+      builder.append(unionField1);
+
+    boolean present_unionField2 = true && (isSetUnionField2());
+    builder.append(present_unionField2);
+    if (present_unionField2)
+      builder.append(unionField2);
+
+    boolean present_unionField3 = true && (isSetUnionField3());
+    builder.append(present_unionField3);
+    if (present_unionField3)
+      builder.append(unionField3);
+
     return builder.toHashCode();
   }
 
@@ -705,6 +1008,46 @@ public class Complex implements org.apac
         return lastComparison;
       }
     }
+    lastComparison = Boolean.valueOf(isSetAttributes()).compareTo(typedOther.isSetAttributes());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetAttributes()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.attributes, typedOther.attributes);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetUnionField1()).compareTo(typedOther.isSetUnionField1());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetUnionField1()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.unionField1, typedOther.unionField1);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetUnionField2()).compareTo(typedOther.isSetUnionField2());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetUnionField2()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.unionField2, typedOther.unionField2);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetUnionField3()).compareTo(typedOther.isSetUnionField3());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetUnionField3()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.unionField3, typedOther.unionField3);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
     return 0;
   }
 
@@ -768,6 +1111,38 @@ public class Complex implements org.apac
       sb.append(this.mStringString);
     }
     first = false;
+    if (!first) sb.append(", ");
+    sb.append("attributes:");
+    if (this.attributes == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.attributes);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("unionField1:");
+    if (this.unionField1 == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.unionField1);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("unionField2:");
+    if (this.unionField2 == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.unionField2);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("unionField3:");
+    if (this.unionField3 == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.unionField3);
+    }
+    first = false;
     sb.append(")");
     return sb.toString();
   }
@@ -832,13 +1207,13 @@ public class Complex implements org.apac
           case 3: // LINT
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
-                org.apache.thrift.protocol.TList _list0 = iprot.readListBegin();
-                struct.lint = new ArrayList<Integer>(_list0.size);
-                for (int _i1 = 0; _i1 < _list0.size; ++_i1)
+                org.apache.thrift.protocol.TList _list18 = iprot.readListBegin();
+                struct.lint = new ArrayList<Integer>(_list18.size);
+                for (int _i19 = 0; _i19 < _list18.size; ++_i19)
                 {
-                  int _elem2; // required
-                  _elem2 = iprot.readI32();
-                  struct.lint.add(_elem2);
+                  int _elem20; // required
+                  _elem20 = iprot.readI32();
+                  struct.lint.add(_elem20);
                 }
                 iprot.readListEnd();
               }
@@ -850,13 +1225,13 @@ public class Complex implements org.apac
           case 4: // L_STRING
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
-                org.apache.thrift.protocol.TList _list3 = iprot.readListBegin();
-                struct.lString = new ArrayList<String>(_list3.size);
-                for (int _i4 = 0; _i4 < _list3.size; ++_i4)
+                org.apache.thrift.protocol.TList _list21 = iprot.readListBegin();
+                struct.lString = new ArrayList<String>(_list21.size);
+                for (int _i22 = 0; _i22 < _list21.size; ++_i22)
                 {
-                  String _elem5; // required
-                  _elem5 = iprot.readString();
-                  struct.lString.add(_elem5);
+                  String _elem23; // required
+                  _elem23 = iprot.readString();
+                  struct.lString.add(_elem23);
                 }
                 iprot.readListEnd();
               }
@@ -868,14 +1243,14 @@ public class Complex implements org.apac
           case 5: // LINT_STRING
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
-                org.apache.thrift.protocol.TList _list6 = iprot.readListBegin();
-                struct.lintString = new ArrayList<IntString>(_list6.size);
-                for (int _i7 = 0; _i7 < _list6.size; ++_i7)
+                org.apache.thrift.protocol.TList _list24 = iprot.readListBegin();
+                struct.lintString = new ArrayList<IntString>(_list24.size);
+                for (int _i25 = 0; _i25 < _list24.size; ++_i25)
                 {
-                  IntString _elem8; // required
-                  _elem8 = new IntString();
-                  _elem8.read(iprot);
-                  struct.lintString.add(_elem8);
+                  IntString _elem26; // required
+                  _elem26 = new IntString();
+                  _elem26.read(iprot);
+                  struct.lintString.add(_elem26);
                 }
                 iprot.readListEnd();
               }
@@ -887,15 +1262,15 @@ public class Complex implements org.apac
           case 6: // M_STRING_STRING
             if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
               {
-                org.apache.thrift.protocol.TMap _map9 = iprot.readMapBegin();
-                struct.mStringString = new HashMap<String,String>(2*_map9.size);
-                for (int _i10 = 0; _i10 < _map9.size; ++_i10)
+                org.apache.thrift.protocol.TMap _map27 = iprot.readMapBegin();
+                struct.mStringString = new HashMap<String,String>(2*_map27.size);
+                for (int _i28 = 0; _i28 < _map27.size; ++_i28)
                 {
-                  String _key11; // required
-                  String _val12; // required
-                  _key11 = iprot.readString();
-                  _val12 = iprot.readString();
-                  struct.mStringString.put(_key11, _val12);
+                  String _key29; // required
+                  String _val30; // optional
+                  _key29 = iprot.readString();
+                  _val30 = iprot.readString();
+                  struct.mStringString.put(_key29, _val30);
                 }
                 iprot.readMapEnd();
               }
@@ -904,6 +1279,78 @@ public class Complex implements org.apac
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
+          case 7: // ATTRIBUTES
+            if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
+              {
+                org.apache.thrift.protocol.TMap _map31 = iprot.readMapBegin();
+                struct.attributes = new HashMap<String,Map<String,Map<String,PropValueUnion>>>(2*_map31.size);
+                for (int _i32 = 0; _i32 < _map31.size; ++_i32)
+                {
+                  String _key33; // required
+                  Map<String,Map<String,PropValueUnion>> _val34; // optional
+                  _key33 = iprot.readString();
+                  {
+                    org.apache.thrift.protocol.TMap _map35 = iprot.readMapBegin();
+                    _val34 = new HashMap<String,Map<String,PropValueUnion>>(2*_map35.size);
+                    for (int _i36 = 0; _i36 < _map35.size; ++_i36)
+                    {
+                      String _key37; // required
+                      Map<String,PropValueUnion> _val38; // optional
+                      _key37 = iprot.readString();
+                      {
+                        org.apache.thrift.protocol.TMap _map39 = iprot.readMapBegin();
+                        _val38 = new HashMap<String,PropValueUnion>(2*_map39.size);
+                        for (int _i40 = 0; _i40 < _map39.size; ++_i40)
+                        {
+                          String _key41; // required
+                          PropValueUnion _val42; // optional
+                          _key41 = iprot.readString();
+                          _val42 = new PropValueUnion();
+                          _val42.read(iprot);
+                          _val38.put(_key41, _val42);
+                        }
+                        iprot.readMapEnd();
+                      }
+                      _val34.put(_key37, _val38);
+                    }
+                    iprot.readMapEnd();
+                  }
+                  struct.attributes.put(_key33, _val34);
+                }
+                iprot.readMapEnd();
+              }
+              struct.setAttributesIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 8: // UNION_FIELD1
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+              struct.unionField1 = new PropValueUnion();
+              struct.unionField1.read(iprot);
+              struct.setUnionField1IsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 9: // UNION_FIELD2
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+              struct.unionField2 = new PropValueUnion();
+              struct.unionField2.read(iprot);
+              struct.setUnionField2IsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 10: // UNION_FIELD3
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+              struct.unionField3 = new PropValueUnion();
+              struct.unionField3.read(iprot);
+              struct.setUnionField3IsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
           default:
             org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
         }
@@ -929,9 +1376,9 @@ public class Complex implements org.apac
         oprot.writeFieldBegin(LINT_FIELD_DESC);
         {
           oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.I32, struct.lint.size()));
-          for (int _iter13 : struct.lint)
+          for (int _iter43 : struct.lint)
           {
-            oprot.writeI32(_iter13);
+            oprot.writeI32(_iter43);
           }
           oprot.writeListEnd();
         }
@@ -941,9 +1388,9 @@ public class Complex implements org.apac
         oprot.writeFieldBegin(L_STRING_FIELD_DESC);
         {
           oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.lString.size()));
-          for (String _iter14 : struct.lString)
+          for (String _iter44 : struct.lString)
           {
-            oprot.writeString(_iter14);
+            oprot.writeString(_iter44);
           }
           oprot.writeListEnd();
         }
@@ -953,9 +1400,9 @@ public class Complex implements org.apac
         oprot.writeFieldBegin(LINT_STRING_FIELD_DESC);
         {
           oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.lintString.size()));
-          for (IntString _iter15 : struct.lintString)
+          for (IntString _iter45 : struct.lintString)
           {
-            _iter15.write(oprot);
+            _iter45.write(oprot);
           }
           oprot.writeListEnd();
         }
@@ -965,15 +1412,59 @@ public class Complex implements org.apac
         oprot.writeFieldBegin(M_STRING_STRING_FIELD_DESC);
         {
           oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRING, struct.mStringString.size()));
-          for (Map.Entry<String, String> _iter16 : struct.mStringString.entrySet())
+          for (Map.Entry<String, String> _iter46 : struct.mStringString.entrySet())
           {
-            oprot.writeString(_iter16.getKey());
-            oprot.writeString(_iter16.getValue());
+            oprot.writeString(_iter46.getKey());
+            oprot.writeString(_iter46.getValue());
           }
           oprot.writeMapEnd();
         }
         oprot.writeFieldEnd();
       }
+      if (struct.attributes != null) {
+        oprot.writeFieldBegin(ATTRIBUTES_FIELD_DESC);
+        {
+          oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.MAP, struct.attributes.size()));
+          for (Map.Entry<String, Map<String,Map<String,PropValueUnion>>> _iter47 : struct.attributes.entrySet())
+          {
+            oprot.writeString(_iter47.getKey());
+            {
+              oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.MAP, _iter47.getValue().size()));
+              for (Map.Entry<String, Map<String,PropValueUnion>> _iter48 : _iter47.getValue().entrySet())
+              {
+                oprot.writeString(_iter48.getKey());
+                {
+                  oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRUCT, _iter48.getValue().size()));
+                  for (Map.Entry<String, PropValueUnion> _iter49 : _iter48.getValue().entrySet())
+                  {
+                    oprot.writeString(_iter49.getKey());
+                    _iter49.getValue().write(oprot);
+                  }
+                  oprot.writeMapEnd();
+                }
+              }
+              oprot.writeMapEnd();
+            }
+          }
+          oprot.writeMapEnd();
+        }
+        oprot.writeFieldEnd();
+      }
+      if (struct.unionField1 != null) {
+        oprot.writeFieldBegin(UNION_FIELD1_FIELD_DESC);
+        struct.unionField1.write(oprot);
+        oprot.writeFieldEnd();
+      }
+      if (struct.unionField2 != null) {
+        oprot.writeFieldBegin(UNION_FIELD2_FIELD_DESC);
+        struct.unionField2.write(oprot);
+        oprot.writeFieldEnd();
+      }
+      if (struct.unionField3 != null) {
+        oprot.writeFieldBegin(UNION_FIELD3_FIELD_DESC);
+        struct.unionField3.write(oprot);
+        oprot.writeFieldEnd();
+      }
       oprot.writeFieldStop();
       oprot.writeStructEnd();
     }
@@ -1010,7 +1501,19 @@ public class Complex implements org.apac
       if (struct.isSetMStringString()) {
         optionals.set(5);
       }
-      oprot.writeBitSet(optionals, 6);
+      if (struct.isSetAttributes()) {
+        optionals.set(6);
+      }
+      if (struct.isSetUnionField1()) {
+        optionals.set(7);
+      }
+      if (struct.isSetUnionField2()) {
+        optionals.set(8);
+      }
+      if (struct.isSetUnionField3()) {
+        optionals.set(9);
+      }
+      oprot.writeBitSet(optionals, 10);
       if (struct.isSetAint()) {
         oprot.writeI32(struct.aint);
       }
@@ -1020,46 +1523,79 @@ public class Complex implements org.apac
       if (struct.isSetLint()) {
         {
           oprot.writeI32(struct.lint.size());
-          for (int _iter17 : struct.lint)
+          for (int _iter50 : struct.lint)
           {
-            oprot.writeI32(_iter17);
+            oprot.writeI32(_iter50);
           }
         }
       }
       if (struct.isSetLString()) {
         {
           oprot.writeI32(struct.lString.size());
-          for (String _iter18 : struct.lString)
+          for (String _iter51 : struct.lString)
           {
-            oprot.writeString(_iter18);
+            oprot.writeString(_iter51);
           }
         }
       }
       if (struct.isSetLintString()) {
         {
           oprot.writeI32(struct.lintString.size());
-          for (IntString _iter19 : struct.lintString)
+          for (IntString _iter52 : struct.lintString)
           {
-            _iter19.write(oprot);
+            _iter52.write(oprot);
           }
         }
       }
       if (struct.isSetMStringString()) {
         {
           oprot.writeI32(struct.mStringString.size());
-          for (Map.Entry<String, String> _iter20 : struct.mStringString.entrySet())
+          for (Map.Entry<String, String> _iter53 : struct.mStringString.entrySet())
           {
-            oprot.writeString(_iter20.getKey());
-            oprot.writeString(_iter20.getValue());
+            oprot.writeString(_iter53.getKey());
+            oprot.writeString(_iter53.getValue());
+          }
+        }
+      }
+      if (struct.isSetAttributes()) {
+        {
+          oprot.writeI32(struct.attributes.size());
+          for (Map.Entry<String, Map<String,Map<String,PropValueUnion>>> _iter54 : struct.attributes.entrySet())
+          {
+            oprot.writeString(_iter54.getKey());
+            {
+              oprot.writeI32(_iter54.getValue().size());
+              for (Map.Entry<String, Map<String,PropValueUnion>> _iter55 : _iter54.getValue().entrySet())
+              {
+                oprot.writeString(_iter55.getKey());
+                {
+                  oprot.writeI32(_iter55.getValue().size());
+                  for (Map.Entry<String, PropValueUnion> _iter56 : _iter55.getValue().entrySet())
+                  {
+                    oprot.writeString(_iter56.getKey());
+                    _iter56.getValue().write(oprot);
+                  }
+                }
+              }
+            }
           }
         }
       }
+      if (struct.isSetUnionField1()) {
+        struct.unionField1.write(oprot);
+      }
+      if (struct.isSetUnionField2()) {
+        struct.unionField2.write(oprot);
+      }
+      if (struct.isSetUnionField3()) {
+        struct.unionField3.write(oprot);
+      }
     }
 
     @Override
     public void read(org.apache.thrift.protocol.TProtocol prot, Complex struct) throws org.apache.thrift.TException {
       TTupleProtocol iprot = (TTupleProtocol) prot;
-      BitSet incoming = iprot.readBitSet(6);
+      BitSet incoming = iprot.readBitSet(10);
       if (incoming.get(0)) {
         struct.aint = iprot.readI32();
         struct.setAintIsSet(true);
@@ -1070,59 +1606,112 @@ public class Complex implements org.apac
       }
       if (incoming.get(2)) {
         {
-          org.apache.thrift.protocol.TList _list21 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.I32, iprot.readI32());
-          struct.lint = new ArrayList<Integer>(_list21.size);
-          for (int _i22 = 0; _i22 < _list21.size; ++_i22)
+          org.apache.thrift.protocol.TList _list57 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.I32, iprot.readI32());
+          struct.lint = new ArrayList<Integer>(_list57.size);
+          for (int _i58 = 0; _i58 < _list57.size; ++_i58)
           {
-            int _elem23; // required
-            _elem23 = iprot.readI32();
-            struct.lint.add(_elem23);
+            int _elem59; // required
+            _elem59 = iprot.readI32();
+            struct.lint.add(_elem59);
           }
         }
         struct.setLintIsSet(true);
       }
       if (incoming.get(3)) {
         {
-          org.apache.thrift.protocol.TList _list24 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
-          struct.lString = new ArrayList<String>(_list24.size);
-          for (int _i25 = 0; _i25 < _list24.size; ++_i25)
+          org.apache.thrift.protocol.TList _list60 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
+          struct.lString = new ArrayList<String>(_list60.size);
+          for (int _i61 = 0; _i61 < _list60.size; ++_i61)
           {
-            String _elem26; // required
-            _elem26 = iprot.readString();
-            struct.lString.add(_elem26);
+            String _elem62; // required
+            _elem62 = iprot.readString();
+            struct.lString.add(_elem62);
           }
         }
         struct.setLStringIsSet(true);
       }
       if (incoming.get(4)) {
         {
-          org.apache.thrift.protocol.TList _list27 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-          struct.lintString = new ArrayList<IntString>(_list27.size);
-          for (int _i28 = 0; _i28 < _list27.size; ++_i28)
+          org.apache.thrift.protocol.TList _list63 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.lintString = new ArrayList<IntString>(_list63.size);
+          for (int _i64 = 0; _i64 < _list63.size; ++_i64)
           {
-            IntString _elem29; // required
-            _elem29 = new IntString();
-            _elem29.read(iprot);
-            struct.lintString.add(_elem29);
+            IntString _elem65; // required
+            _elem65 = new IntString();
+            _elem65.read(iprot);
+            struct.lintString.add(_elem65);
           }
         }
         struct.setLintStringIsSet(true);
       }
       if (incoming.get(5)) {
         {
-          org.apache.thrift.protocol.TMap _map30 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRING, iprot.readI32());
-          struct.mStringString = new HashMap<String,String>(2*_map30.size);
-          for (int _i31 = 0; _i31 < _map30.size; ++_i31)
+          org.apache.thrift.protocol.TMap _map66 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRING, iprot.readI32());
+          struct.mStringString = new HashMap<String,String>(2*_map66.size);
+          for (int _i67 = 0; _i67 < _map66.size; ++_i67)
           {
-            String _key32; // required
-            String _val33; // required
-            _key32 = iprot.readString();
-            _val33 = iprot.readString();
-            struct.mStringString.put(_key32, _val33);
+            String _key68; // required
+            String _val69; // optional
+            _key68 = iprot.readString();
+            _val69 = iprot.readString();
+            struct.mStringString.put(_key68, _val69);
           }
         }
         struct.setMStringStringIsSet(true);
       }
+      if (incoming.get(6)) {
+        {
+          org.apache.thrift.protocol.TMap _map70 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.MAP, iprot.readI32());
+          struct.attributes = new HashMap<String,Map<String,Map<String,PropValueUnion>>>(2*_map70.size);
+          for (int _i71 = 0; _i71 < _map70.size; ++_i71)
+          {
+            String _key72; // required
+            Map<String,Map<String,PropValueUnion>> _val73; // optional
+            _key72 = iprot.readString();
+            {
+              org.apache.thrift.protocol.TMap _map74 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.MAP, iprot.readI32());
+              _val73 = new HashMap<String,Map<String,PropValueUnion>>(2*_map74.size);
+              for (int _i75 = 0; _i75 < _map74.size; ++_i75)
+              {
+                String _key76; // required
+                Map<String,PropValueUnion> _val77; // optional
+                _key76 = iprot.readString();
+                {
+                  org.apache.thrift.protocol.TMap _map78 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+                  _val77 = new HashMap<String,PropValueUnion>(2*_map78.size);
+                  for (int _i79 = 0; _i79 < _map78.size; ++_i79)
+                  {
+                    String _key80; // required
+                    PropValueUnion _val81; // optional
+                    _key80 = iprot.readString();
+                    _val81 = new PropValueUnion();
+                    _val81.read(iprot);
+                    _val77.put(_key80, _val81);
+                  }
+                }
+                _val73.put(_key76, _val77);
+              }
+            }
+            struct.attributes.put(_key72, _val73);
+          }
+        }
+        struct.setAttributesIsSet(true);
+      }
+      if (incoming.get(7)) {
+        struct.unionField1 = new PropValueUnion();
+        struct.unionField1.read(iprot);
+        struct.setUnionField1IsSet(true);
+      }
+      if (incoming.get(8)) {
+        struct.unionField2 = new PropValueUnion();
+        struct.unionField2.read(iprot);
+        struct.setUnionField2IsSet(true);
+      }
+      if (incoming.get(9)) {
+        struct.unionField3 = new PropValueUnion();
+        struct.unionField3.read(iprot);
+        struct.setUnionField3IsSet(true);
+      }
     }
   }