Class: Ilios::Cassandra::Session
- Inherits:
-
Object
- Object
- Ilios::Cassandra::Session
- Defined in:
- ext/ilios/ilios.c
Instance Method Summary collapse
-
#execute(statement) ⇒ Cassandra::Result
Executes a given statement.
-
#execute_async(statement) ⇒ Cassandra::Future
Executes a given statement asynchronously and returns a future result.
-
#prepare(query) ⇒ Cassandra::Statement
Prepares a given query.
-
#prepare_async(query) ⇒ Cassandra::Future
Prepares a given query asynchronously and returns a future prepared statement.
Instance Method Details
#execute(statement) ⇒ Cassandra::Result
Executes a given statement.
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'ext/ilios/session.c', line 116
static VALUE session_execute(VALUE self, VALUE statement)
{
CassandraSession *cassandra_session;
CassandraStatement *cassandra_statement;
CassandraResult *cassandra_result;
CassStatement *executed_statement;
CassFuture *result_future;
VALUE cassandra_result_obj;
GET_SESSION(self, cassandra_session);
GET_STATEMENT(statement, cassandra_statement);
executed_statement = statement_build_for_execution(cassandra_statement);
result_future = nogvl_session_execute(cassandra_session->session, executed_statement);
cassandra_result_obj = CREATE_RESULT(cassandra_result);
cassandra_result->executed_statement = executed_statement;
cassandra_result->future = result_future;
cassandra_result->statement_obj = statement;
result_await(cassandra_result);
return cassandra_result_obj;
}
|
#execute_async(statement) ⇒ Cassandra::Future
Executes a given statement asynchronously and returns a future result.
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'ext/ilios/session.c', line 84
static VALUE session_execute_async(VALUE self, VALUE statement)
{
CassandraSession *cassandra_session;
CassandraStatement *cassandra_statement;
CassandraFuture *cassandra_future;
CassStatement *executed_statement;
CassFuture *result_future;
VALUE future;
GET_SESSION(self, cassandra_session);
GET_STATEMENT(statement, cassandra_statement);
// Execute a dedicated statement so that later re-binds of `statement`
// cannot race with the driver's asynchronous encoding (issue #12).
executed_statement = statement_build_for_execution(cassandra_statement);
result_future = nogvl_session_execute(cassandra_session->session, executed_statement);
future = future_create(result_future, self, statement, execute_async);
GET_FUTURE(future, cassandra_future);
// The future owns the executed statement and frees it on destroy.
cassandra_future->executed_statement = executed_statement;
return future;
}
|
#prepare(query) ⇒ Cassandra::Statement
Prepares a given query.
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'ext/ilios/session.c', line 46
static VALUE session_prepare(VALUE self, VALUE query)
{
CassandraSession *cassandra_session;
CassandraStatement *cassandra_statement;
CassFuture *prepare_future;
VALUE cassandra_statement_obj;
GET_SESSION(self, cassandra_session);
prepare_future = nogvl_session_prepare(cassandra_session->session, query);
nogvl_future_wait(prepare_future);
if (cass_future_error_code(prepare_future) != CASS_OK) {
char error[4096] = { 0 };
strncpy(error, cass_error_desc(cass_future_error_code(prepare_future)), sizeof(error) - 1);
cass_future_free(prepare_future);
rb_raise(eExecutionError, "Unable to prepare query: %s", error);
}
cassandra_statement_obj = CREATE_STATEMENT(cassandra_statement);
cassandra_statement->prepared = cass_future_get_prepared(prepare_future);
cassandra_statement->statement = cass_prepared_bind(cassandra_statement->prepared);
cassandra_statement->session_obj = self;
cass_future_free(prepare_future);
statement_default_config(cassandra_statement);
return cassandra_statement_obj;
}
|
#prepare_async(query) ⇒ Cassandra::Future
Prepares a given query asynchronously and returns a future prepared statement.
27 28 29 30 31 32 33 34 35 36 |
# File 'ext/ilios/session.c', line 27
static VALUE session_prepare_async(VALUE self, VALUE query)
{
CassandraSession *cassandra_session;
CassFuture *prepare_future;
GET_SESSION(self, cassandra_session);
prepare_future = nogvl_session_prepare(cassandra_session->session, query);
return future_create(prepare_future, self, Qnil, prepare_async);
}
|