### Preparing queries _TODO: provide more details_ During preparing a query a server parses the query, saves parsing result into cache and returns back to a client an ID that could be further used for executing prepared statement with different parameters (such as values, consistency etc.). When a server executes prepared query it doesn't need to parse it so parsing step will be skipped. CDRS `Session` implements `cdrs::query::PrepareExecutor` trait that provides few option for preparing query: ```rust let prepared_query = session.prepare("INSERT INTO my.store (my_int, my_bigint) VALUES (?, ?)").unwrap(); // or with tracing and warnings let with_tracing = true; let with_warnings = true; let prepred_query = session.prepare_tw("INSERT INTO my.store (my_int, my_bigint) VALUES (?, ?)", with_tracing, with_warnings).unwrap(); ``` ### Executing prepared queries When query is prepared on the server client gets prepared query id of type `cdrs::query::PreparedQuery`. Having such id it's possible to execute prepared query using session methods from `cdrs::query::ExecExecutor`: ```rust // execute prepared query without specifying any extra parameters or values session.exec(&preparedQuery).unwrap(); // execute prepared query with tracing and warning information let with_tracing = true; let with_warnings = true; session.exec_tw(&preparedQuery, with_tracing, with_warnings).unwrap(); // execute prepared query with values let values_with_names = query_values!{"my_bigint" => bigint, "my_int" => int}; session.exec_with_values(&preparedQuery, values_with_names).unwrap(); // execute prepared query with values with warnings and tracing information let with_tracing = true; let with_warnings = true; let values_with_names = query_values!{"my_bigint" => 1 as i64, "my_int" => 2 as i32}; session.exec_with_values_tw(&preparedQuery, values_with_names, with_tracing, with_warnings).unwrap(); // execute prepared query with parameters use cdrs::query::QueryParamsBuilder; use cdrs::consistency::Consistency; let mut params = QueryParamsBuilder::new(); params = params.consistency(Consistency::Any); session.exec_with_parameters(&preparedQuery, params.finalize()).unwrap(); // execute prepared query with parameters, tracing and warning information use cdrs::query::QueryParamsBuilder; use cdrs::consistency::Consistency; let with_tracing = true; let with_warnings = true; let mut params = QueryParamsBuilder::new(); params = params.consistency(Consistency::Any); session.exec_with_parameters_tw(&preparedQuery, params.finalize(), with_tracing, with_warnings).unwrap(); ```