switch (result_type) {
case CASSANDRA_RESULT_TYPE_BATCH: {
struct cassandra_sql_statement *stmt;
- cass_result->batch = cass_batch_new(CASS_BATCH_TYPE_LOGGED);
+ cass_result->batch = cass_batch_new(ctx->ctx.non_atomic ?
+ CASS_BATCH_TYPE_UNLOGGED :
+ CASS_BATCH_TYPE_LOGGED);
array_foreach_elem(&ctx->statements, stmt) {
cass_batch_add_statement(cass_result->batch,
stmt->cass_stmt);
/* commit() must use this query list if head is non-NULL. */
struct sql_transaction_query *head, *tail;
+
+ bool non_atomic;
};
ARRAY_DEFINE_TYPE(sql_drivers, const struct sql_db *);
return db->v.transaction_begin(db);
}
+void sql_transaction_set_non_atomic(struct sql_transaction_context *ctx)
+{
+ ctx->non_atomic = TRUE;
+}
+
#undef sql_transaction_commit
void sql_transaction_commit(struct sql_transaction_context **_ctx,
sql_commit_callback_t *callback, void *context)
/* Begin a new transaction. Currently you're limited to only one open
transaction at a time. */
struct sql_transaction_context *sql_transaction_begin(struct sql_db *db);
+/* Don't require transaction to be atomic. Currently this is implemented only
+ with Cassandra to use UNLOGGED BATCH operations. */
+void sql_transaction_set_non_atomic(struct sql_transaction_context *ctx);
/* Commit transaction. */
void sql_transaction_commit(struct sql_transaction_context **ctx,
sql_commit_callback_t *callback, void *context);