Hi Theo,

Take a look at https://github.com/datastax/python-driver/blob/master/cassandra/cqltypes.py#L111


On 2/25/14, 23:09, Theo Hultberg wrote:
thanks mikhail.

it bothers me a bit that there is the possibility of arbitrarily deeply
nested types (it's great for usability, but a headache for me as a driver
implementer). it feels like just throwing a couple of regexes at this is
the wrong solution, the string has too much structure and hierarchy for
that and I think that not doing it with a proper parser will cause trouble
in the future. and then trying to use the parsed type structure to properly
encode something that the user wants to store will be very complex. kind of
like having to implement a whole orm. it's going to be a challenge.

I see that you took the parser route in the python driver so I can at least
get some inspiration from there. what do you do when the user passes an
object in a custom type field and that object doesn't look like the type at
all?

T#


On Tue, Feb 25, 2014 at 8:16 PM, Mikhail Stepura <
mikhail.step...@outlook.com> wrote:

I just realized that your driver returns fields' names in the type itself
(which unfortunately is not the case with python driver) so you don't need
step #3.

-M



On 2/25/14, 10:42, Mikhail Stepura wrote:

The driver shall parse that.
I'm not sure if there is a doc for that, but here is what I did for CQLSH

1. UserType is a CompositeType, where 1s subtype is a KS name, and 2nd
is hex-encoded name of the type
2. Remainder of subtypes are types of Usertype's columns. So you can
easily decode *values* for fields
3. Information about field *names* is stored in system.schema_usertypes
table
4. The driver has to combine pieces 1-3 and create a new class/type for
a user. It was easy in Python, I guess it should be easy in Ruby as well

-M


On 2/22/14, 12:29, Theo Hultberg wrote:

Hi,

Is there any documentation on how CQL clients should handle the new user
defined types coming in 2.1? There's nothing in the protocol
specification
on how to handle custom types as far as I can understand.

For example, I tried creating the "address" type from the description of
CASSANDRA-5590, and this is how its metadata looks (the metadata for a
query contains a column with a custom type and this is the description of
it):

org.apache.cassandra.db.marshal.UserType(user_defined_
types,61646472657373,737472656574:org.apache.
cassandra.db.marshal.UTF8Type,63697479:org.apache.cassandra.
db.marshal.UTF8Type,7a69705f636f6465:org.apache.cassandra.db.marshal.
Int32Type,70686f6e6573:org.apache.cassandra.db.marshal.
SetType(org.apache.cassandra.db.marshal.UTF8Type))


Is the client supposed to parse that description, and in that case how? I
could probably figure it out but it would be great if someone could point
me to the right docs.

yours,
Theo (author of cql-rb, the Ruby driver)









Reply via email to