Commit Graph

57 Commits

Author SHA1 Message Date
Tomasz Grabiec
e50c5f8305 types: Implement operator<<(ostream&, const bytes_opt&) 2015-03-30 09:07:01 +02:00
Tomasz Grabiec
30c821d585 tombstone: rename ttl to deletion_time
The current name is confusing to say the least.
2015-03-30 09:07:01 +02:00
Tomasz Grabiec
808f70b6c3 collection_type_impl: Introduce is_any_live() 2015-03-30 09:07:00 +02:00
Tomasz Grabiec
300bacb3d9 collection_type_impl: Introduce is_empty() 2015-03-30 09:07:00 +02:00
Tomasz Grabiec
95b71f220c types: collection_type_impl: Introduce serialize_mutation_form_only_live()
For serializing only live elements of the collection. Will be needed
by query path.
2015-03-30 09:07:00 +02:00
Avi Kivity
17b929d739 db: implement as_cql3_type() for collections 2015-03-26 18:14:35 +01:00
Avi Kivity
579a794d14 cql3: de-virtualize cql3_type
cql3_type is a wrapper around data_type, so there's no need for a class
hierarchy -- anything that depends on the actual type can be forwarded
to abstract_type_impl.

We can now use this as a value type (dropping shared_ptr<cql3_type>), but
that is left for later.
2015-03-26 16:04:55 +01:00
Avi Kivity
1c1c4f923a db: fix collection_type_impl::deserialize_mutation_form() types
It accepts a bytes_view instead of the type-safe wrapper.
2015-03-26 14:31:01 +02:00
Avi Kivity
6a8b682c0e db: add collection_type_impl::mutation_view::materialize()
Converts a mutation_view to a mutation, so it can be modified.
2015-03-26 12:14:01 +02:00
Pekka Enberg
ea9dc7062f db: Fix abstract_type and native_cql3_type cyclic dependency
Suggested by Avi.

Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
2015-03-24 11:24:44 +02:00
Avi Kivity
f983ab41a3 db: get rid of object_opt
As Tomasz noticed, boost::any can be empty, so optional<> functionality is
not needed.
2015-03-24 08:23:34 +01:00
Avi Kivity
c77648da6e db: add collection tombstones 2015-03-23 21:54:22 +02:00
Avi Kivity
62ee57b953 db: wrap collection_type_impl::mutation's vector in a struct
This will allow us to introduce a tombstone alongside.
2015-03-23 21:54:22 +02:00
Avi Kivity
c701152d50 db: don't use stringstream for collection mutation serialization 2015-03-23 21:54:22 +02:00
Tomasz Grabiec
90298af614 db: Cleanup atomic_cell naming
atomic_cell -> atomic_cell_type
atomic_cell::one -> atomic_cell
atomic_cell::view -> atomic_cell_view
2015-03-20 18:59:29 +01:00
Avi Kivity
6fee695095 db: replace most uses of protocol_version with serialization_format
Better type safety.
2015-03-16 18:15:16 +02:00
Avi Kivity
923496056a db: add set_type_impl::serialize_partially_deserialized_form() 2015-03-16 16:36:14 +02:00
Avi Kivity
4bbfc3c23b db: export collection_type_impl::pack() 2015-03-16 16:36:14 +02:00
Avi Kivity
f3d75d3169 db: fix listlike_partial_deserializing_iterator taking reference to temporary 2015-03-16 16:36:14 +02:00
Dor Laor
7921ef406a db: serialize via bytes_iterator instead of std::ostream
Instead of using inefficient std::ostream, use our own 'bytes' iterator class.
Compute ahead of time the length of the byte buffer.
Afterwards serialize the objects into it.

Gives ~X5 boost over previus results (that sometimes don't even
finish in reasonable time)

[avi: add missing include]
2015-03-16 07:07:25 +02:00
Avi Kivity
ca308698df collection_type_impl: add to_value(mutation_view)
Allows collapsing a mutation into a literal.
2015-03-12 10:10:42 +02:00
Avi Kivity
7c5d865aac db: add map_type::serialize_partially_deserialized_from
Add a way to convert a vector of pairs of serialized key/values to
the fully serializied form; useful for map literals.
2015-03-12 10:10:42 +02:00
Avi Kivity
fc9a8d6efd db: add collection_type_impl::pack
A helper function for other operations, as all collections share
the basic serialized format.
2015-03-12 10:10:42 +02:00
Avi Kivity
3c63f77824 db: split collection_type_impl::mutation into an owning and view types
The view type is more efficient, but less safe.
2015-03-12 10:10:42 +02:00
Avi Kivity
362dbd5c94 types: add bytes_view variant of write_collection_value() 2015-03-12 09:56:53 +02:00
Avi Kivity
f226f93120 fix collection_type_impl::merge 2015-03-12 09:56:53 +02:00
Avi Kivity
fb876cb6f2 db: implement list_type 2015-03-12 09:56:53 +02:00
Avi Kivity
488ac10369 db: add set type implementation 2015-03-12 09:56:53 +02:00
Avi Kivity
0535c56735 db: add helper iterator for deserializing list-like types 2015-03-12 09:56:53 +02:00
Avi Kivity
a4e6fcc30c db: change read_collection_value() to return a bytes_view
Faster, and useful with further transforms that return a view.
2015-03-12 09:56:53 +02:00
Avi Kivity
06bd67c221 db: move map_type:impl::mutation and associated helpers to collection_type_impl
Turns out the sets and lists also use the same data type, with sets using
a fake value type, and lists using a fake key type.
2015-03-11 14:42:42 +02:00
Avi Kivity
5f309f4d33 db: add empty_type
Used in sets for the value type.
2015-03-11 14:42:42 +02:00
Avi Kivity
da902a4c17 db: add helper for interning types; use in map_type
Avoid code repetition for other collections.
2015-03-11 14:42:42 +02:00
Avi Kivity
5bff24c292 db: constify standard data_types
Lest someone accidentally move them away or assign into them.
2015-03-05 22:20:04 +02:00
Avi Kivity
98f2a51df9 db: implement collection mutation merging
Only for maps, as they are the only collection implemented at present.
2015-03-05 18:11:37 +02:00
Avi Kivity
b5571e4c18 db: implement map_type (partial) 2015-03-05 15:31:50 +02:00
Avi Kivity
56d5c24a6a db: implement CollectionType (partial) 2015-03-05 14:04:19 +02:00
Nadav Har'El
6f2a2529a2 add "double" and "float" types
Implement "double" and "float" cql types.

This implementation doesn't touch serialization.hh (which should be
eventually removed) and rather follows the other examples in types.cc.
It is relatively ugly, because of all the cleverness of our "general"
byte swapping implementation actually works only for integer types, and
we need to get it to work for float/double as well.

Signed-off-by: Nadav Har'El <nyh@cloudius-systems.com>
2015-03-04 10:54:19 +01:00
Pekka Enberg
99a09020e8 types: Fix bytes_type_impl string conversion
Tomek points out that:

  Origin calls org.apache.cassandra.utils.Hex#hexToBytes here, which is
  not what to_bytes() does. BytesType.getSerializer().toString() calls
  ByteBufferUtil.bytesToHex(value), so you should call to_hex() here.

Fix that up.

Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
2015-03-02 10:38:27 +01:00
Tomasz Grabiec
00984609cb types: Add abstract_tyep::is_value_compatible_with() method 2015-02-27 10:48:56 +01:00
Nadav Har'El
8701273006 Add inet type
In v2: rebase, and add a more descriptive exception if trying to deserialize
an ipv6 address.

Add to list of types the Internet address type, known as INET in CQL
or as InetAddressType in the Cassandra code.

I based this code on stuff I found in InetAddressType and
InetAddressSerializer in the Cassandra code.

Signed-off-by: Nadav Har'El <nyh@cloudius-systems.com>
2015-02-25 15:57:05 +01:00
Pekka Enberg
fd0a6e0596 types: Fix bytes_type_impl unimplemented methods
Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
2015-02-25 13:39:10 +02:00
Pekka Enberg
9f49033279 types: Use integer_type_impl for long_type_impl
Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
2015-02-25 13:17:36 +02:00
Pekka Enberg
e98584713e types: Introduce generic integer_type_impl
Introduce a generic integer_type_impl that's based on int32_type_impl.

Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
2015-02-25 13:17:36 +02:00
Pekka Enberg
bd9547ba77 types: Use sizeof(int32_t) instead of hard-coded 4
Switch to sizeof in preparation for converting int32_type_impl into a
generic integer_type_impl.

Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
2015-02-25 13:08:16 +02:00
Avi Kivity
a2519926a6 db: add some iostream output operators
Helps debugging
2015-02-19 15:56:26 +02:00
Tomasz Grabiec
245f4dfe00 types: Avoid allocation in simple_type_impl::less() 2015-02-17 12:43:15 +02:00
Tomasz Grabiec
700799e965 types: Make deserialize() work on bytes_view 2015-02-17 12:43:15 +02:00
Tomasz Grabiec
6cde02cbc7 types: Make equal/hash/less work on bytes_view
The serialized value is not always a standalone "bytes" object, it can
be embedded in a larger chunk. It's much faster to work on the data
in-place.
2015-02-17 12:43:15 +02:00
Tomasz Grabiec
63d152ece8 types: Introduce abstract_type::as_cql3_type()
Origin also has it.
2015-02-12 19:40:58 +01:00