cassandra-client-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Theo Hultberg <t...@iconara.net>
Subject Re: How should clients handle the user defined types in 2.1?
Date Sat, 01 Mar 2014 11:01:25 GMT
Mikhail, thanks, but I meant the reverse of that. Say the user creates a
prepared statement where one of the columns is a custom type, how do you
serialize the arguments to the prepared statement? Do you accept anything
and let C* complain, or do you make a best effort to shoehorn the object
the user passed into something that looks like the custom type?

T#


On Sat, Mar 1, 2014 at 1:12 AM, Mikhail Stepura <mikhail.stepura@outlook.com
> wrote:

> 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.stepura@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)
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message