Avi Kivity
3179f05e12
db: implement user types (user_type_impl)
...
Like a C struct. Following origin, implemented as a tuple with an additional
vector of field names.
cql3_type integration deferred to the next patch.
2015-04-20 16:15:34 +03:00
Tomasz Grabiec
560c972bb3
Merge tag 'avi/tuples/v3' from seastar-dev.git
...
Resolved trivial conflicts in:
cql3/lists.cc
tests/urchin/cql_query_test.cc
2015-04-15 18:01:37 +02:00
Avi Kivity
7bd1d0b2ad
cql3: support for tuple cql3_type
2015-04-15 15:35:30 +03:00
Avi Kivity
4e43fab7f1
db: add tuple_type_impl
...
cql3_type integration is deferred to the next patch.
2015-04-15 15:35:30 +03:00
Avi Kivity
4abad8f357
db: add collection_type_impl::reserialize()
...
Allows switching between serialization formats.
2015-04-15 15:35:30 +03:00
Nadav Har'El
bae3cbf7a2
db: fix typo in set_type_impl user-visible name
...
Noticed this typo while browsing the code. I have no idea what this typo
broke, if anything, but it couldn't have been intentional...
Signed-off-by: Nadav Har'El <nyh@cloudius-systems.com >
2015-04-13 18:53:03 +03:00
Avi Kivity
77552d3407
db: fix float_type's implementation
...
Was double, should be float.
2015-04-11 00:54:10 +03:00
Avi Kivity
30b40bf7b1
db: make bytes even more distinct from sstring
...
bytes and sstring are distinct types, since their internal buffers are of
different length, but bytes_view is an alias of sstring_view, which makes
it possible of objects of different types to leak across the abstraction
boundary.
Fix this by making bytes a basic_sstring<int8_t, ...> instead of using char.
int8_t is a 'signed char', which is a distinct type from char, so now
bytes_view is a distinct type from sstring_view.
uint8_t would have been an even better choice, but that diverges from Origin
and would have required an audit.
2015-04-07 10:56:19 +03:00
Avi Kivity
b23d23ac9c
db: take into account collection tombstone when converting to value
2015-03-30 14:28:16 +03:00
Avi Kivity
56774f5e38
db: add collection_type_impl::to_bytes(collection_mutation::view) helper
2015-03-30 14:28:16 +03:00
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