Was this page helpful?
The Timeuuid
type is represented as value::CqlTimeuuid
.
Also, value::CqlTimeuuid
is a wrapper for uuid::Uuid
with custom ordering logic which follows Scylla/Cassandra semantics.
use futures::TryStreamExt;
use scylla::frame::value::CqlTimeuuid;
// Insert some timeuuid into the table
let to_insert: CqlTimeuuid = CqlTimeuuid::from_str("8e14e760-7fa8-11eb-bc66-000000000001")?;
session
.query_unpaged("INSERT INTO keyspace.table (a) VALUES(?)", (to_insert,))
.await?;
// Read Timeuuid from the table
let mut iter = session.query_iter("SELECT a FROM keyspace.table", &[])
.await?
.rows_stream::<(CqlTimeuuid, )>()?;
while let Some((timeuuid,)) = iter.try_next().await? {
println!("Read a value from row: {}", timeuuid);
}
To create your own Timeuuid
objects from timestamp-based uuid
v1, you need to enable the feature v1
of uuid
crate using:
cargo add uuid -F v1
and now you’re gonna be able to use the uuid::v1
features:
use futures::TryStreamExt;
use scylla::frame::value::CqlTimeuuid;
use uuid::Uuid;
// Tip: you can use random stable numbers or your MAC Address
let node_id = [0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC];
// Build your Timeuuid with the current timestamp
let to_insert = CqlTimeuuid::from(Uuid::now_v1(&node_id));
session
.query_unpaged("INSERT INTO keyspace.table (a) VALUES(?)", (to_insert,))
.await?;
// Read Timeuuid from the table
let mut iter = session.query_iter("SELECT a FROM keyspace.table", &[])
.await?
.rows_stream::<(CqlTimeuuid, )>()?;
while let Some((timeuuid,)) = iter.try_next().await? {
println!("Read a value from row: {}", timeuuid);
}
Learn more about UUID::v1 here.
Was this page helpful?
On this page