Rust querying
Use QueryBuilder to create a query, bind query values and pass query parameters. The query is followed by the execute commands that actually run the command and return the results.
// For Stargate OSS: SELECT the data to read from the table
// Select/query some data from the keyspace.table
let query = Query::builder()
// Set the keyspace for the the query
.keyspace("test")
// Set consistency level
.consistency(Consistency::One)
.query("SELECT firstname, lastname FROM test.users;")
// Build the query
.build();
println!("select executed");
use std::convert::TryInto;
// Send the query and wait for gRPC response
let response = client.execute_query(query).await?;
// Convert the response into a ResultSet
let result_set: ResultSet = response.try_into()?;
It is also possible to use a bind
statement to insert values:
.query("SELECT login, emails FROM users WHERE id = :id")
.bind_value("id", 1000)
Data definition language (DDL) queries are supported in the same manner:
// For Stargate OSS only: create a keyspace
let create_keyspace = Query::builder()
.query("CREATE KEYSPACE IF NOT EXISTS test WITH REPLICATION = {'class':'SimpleStrategy', 'replication_factor':1};")
.build();
client.execute_query(create_keyspace).await?;
println!("created keyspace");
// For Stargate OSS: create a table
let create_table = Query::builder()
.query(
"CREATE TABLE IF NOT EXISTS test.users \
(firstname text, lastname text, PRIMARY KEY (firstname, lastname));",
)
.build();
client.execute_query(create_table).await?;
println!("created table");
In general, users will create a keyspace and table first.
The ExecuteQuery
function can be used to execute a single query.
If you need to group several commands together as a
batch statement,
the client also provides an ExecuteBatch()
function to execute a batch query:
// For Stargate OSS: INSERT two rows/records
// Two queries will be run in a batch statement
let batch = Batch::builder()
.keyspace("test") // set the keyspace the query applies to
.consistency(Consistency::One) // set consistency level
.query("INSERT INTO test.users (firstname, lastname) VALUES ('Jane', 'Doe');")
.query("INSERT INTO test.users (firstname, lastname) VALUES ('Serge', 'Provencio');")
.build();
client.execute_batch(batch).await?;
println!("insert data");
This example inserts two values into the keyspace table test.users
.
Only INSERT
, UPDATE
, and DELETE
operations can be used in a batch query.