Types only have a field list if they are "struct" types (i.e. are records with several named fields). Scalar types such as boolean, and other structured types such as array and map, do not have field lists.
I don't know how the code got to that point, but the JSON serializer seems to think it is looking at a struct type when it is actually not. If you have a repro test case can you please log a bug? Julian > On Jan 27, 2015, at 1:51 PM, Hartman, Trevor <[email protected]> wrote: > > I've been stepping through the execution trying to determine the cause. > > I changed the query to: "select count(_MAP['id']) as rowcount from > \"foo\".\"bar\"" > > At this line: > https://github.com/apache/incubator-calcite/blob/master/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonHandler.java#L44 > `response` is a ResultSetResponse with java.util.ArrayList rows (size=1): > response.rows[0][0] = 218778. Looks right. > > After this, JsonHandler attempts to encode the response to a JSON String: > MAPPER.writeValue(w, response); > > It's this `writeValue` call that eventually calls > RelDataTypeImpl#getFieldList, and `assert isStruct()` fails. > > Why would fieldList be null here, and what is its purpose during json > encoding? > > Thanks, > Trevor > > > On January 23, 2015 at 3:38:05 PM, Hartman, Trevor > ([email protected]<mailto:[email protected]>) wrote: > > I'm using Avatica's JDBC server to execute remote queries. The test query > from CalciteRemoteDriverTest runs fine "values (1, 'a'), (cast(null as > integer), 'b')", but when I try to query data from my store, I get a > java.lang.AssertionError in RelDataTypeImpl at 138: assert isStruct() > because fieldList is null. > > rows are represented by as java.lang.Object[1]. The single column inside each > row is a java.lang.Long. This particular query returns 218,778 rows. > Query looks like: "select _MAP['id'] from \"foo\".\"bar\"". Does it have > something to do with using _MAP? Partial stack trace: > > java.lang.AssertionError: null > at > org.apache.calcite.rel.type.RelDataTypeImpl.getFieldList(RelDataTypeImpl.java:138) > ~[calcite-core-1.0.0-incubating-SNAPSHOT.jar:1.0.0-incubating-SNAPSHOT] > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_25] > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > ~[na:1.8.0_25] > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > ~[na:1.8.0_25] > at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0_25] > at > com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:466) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:639) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:152) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:505) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:639) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:152) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:100) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:21) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.std.AsArraySerializerBase.serialize(AsArraySerializerBase.java:183) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:505) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:639) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:152) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:100) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:21) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.std.AsArraySerializerBase.serialize(AsArraySerializerBase.java:183) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:491) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:412) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:27) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:505) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:639) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:152) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:505) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:639) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeWithType(BeanSerializerBase.java:525) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.impl.TypeWrappedSerializer.serialize(TypeWrappedSerializer.java:35) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:114) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:2866) > ~[jackson-databind-2.4.2.jar:2.4.2] > at > com.fasterxml.jackson.databind.ObjectMapper.writeValue(ObjectMapper.java:2305) > ~[jackson-databind-2.4.2.jar:2.4.2] > at org.apache.calcite.avatica.remote.JsonHandler.encode(JsonHandler.java:56) > ~[calcite-avatica-1.0.0-incubating-SNAPSHOT.jar:1.0.0-incubating-SNAPSHOT] > > > Thanks, > Trevor
