Class: CassandraCQL::Database
- Inherits:
-
Object
- Object
- CassandraCQL::Database
- Defined in:
- lib/cassandra-cql/database.rb
Instance Attribute Summary collapse
-
#connection ⇒ Object
readonly
Returns the value of attribute connection.
-
#keyspace ⇒ Object
Returns the value of attribute keyspace.
-
#schema ⇒ Object
readonly
Returns the value of attribute schema.
Instance Method Summary collapse
- #active? ⇒ Boolean (also: #ping)
- #connect! ⇒ Object
- #disconnect! ⇒ Object
- #execute(statement, *bind_vars) ⇒ Object
- #execute_cql_query(cql, compression = CassandraCQL::Thrift::Compression::NONE) ⇒ Object
-
#initialize(servers, options = {}, thrift_client_options = {}) ⇒ Database
constructor
A new instance of Database.
- #keyspaces ⇒ Object
- #login!(username, password) ⇒ Object
- #prepare(statement, options = {}, &block) ⇒ Object
- #reset! ⇒ Object (also: #reconnect!)
- #statement_class ⇒ Object
Constructor Details
#initialize(servers, options = {}, thrift_client_options = {}) ⇒ Database
Returns a new instance of Database.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/cassandra-cql/database.rb', line 25 def initialize(servers, ={}, ={}) @options = { :keyspace => 'system' }.merge() @thrift_client_options = { :exception_class_overrides => CassandraCQL::Thrift::InvalidRequestException }.merge() @keyspace = @options[:keyspace] @cql_version = @options[:cql_version] @servers = servers connect! execute("USE #{@keyspace}") end |
Instance Attribute Details
#connection ⇒ Object (readonly)
Returns the value of attribute connection.
23 24 25 |
# File 'lib/cassandra-cql/database.rb', line 23 def connection @connection end |
#keyspace ⇒ Object
Returns the value of attribute keyspace.
23 24 25 |
# File 'lib/cassandra-cql/database.rb', line 23 def keyspace @keyspace end |
#schema ⇒ Object (readonly)
Returns the value of attribute schema.
23 24 25 |
# File 'lib/cassandra-cql/database.rb', line 23 def schema @schema end |
Instance Method Details
#active? ⇒ Boolean Also known as: ping
55 56 57 58 59 60 61 |
# File 'lib/cassandra-cql/database.rb', line 55 def active? # TODO: This should be replaced with a CQL call that doesn't exist yet @connection.describe_version true rescue Exception false end |
#connect! ⇒ Object
41 42 43 44 45 46 47 48 49 |
# File 'lib/cassandra-cql/database.rb', line 41 def connect! @connection = ThriftClient.new(CassandraCQL::Thrift::Client, @servers, @thrift_client_options) obj = self @connection.add_callback(:post_connect) do @connection.set_cql_version(@cql_version) if @cql_version execute("USE #{@keyspace}") @connection.login(@auth_request) if @auth_request end end |
#disconnect! ⇒ Object
51 52 53 |
# File 'lib/cassandra-cql/database.rb', line 51 def disconnect! @connection.disconnect! if active? end |
#execute(statement, *bind_vars) ⇒ Object
86 87 88 89 90 91 92 93 94 95 |
# File 'lib/cassandra-cql/database.rb', line 86 def execute(statement, *bind_vars) result = statement_class.new(self, statement).execute(bind_vars) if block_given? yield result else result end rescue CassandraCQL::Thrift::InvalidRequestException raise Error::InvalidRequestException.new($!.why) end |
#execute_cql_query(cql, compression = CassandraCQL::Thrift::Compression::NONE) ⇒ Object
97 98 99 100 101 |
# File 'lib/cassandra-cql/database.rb', line 97 def execute_cql_query(cql, compression=CassandraCQL::Thrift::Compression::NONE) @connection.execute_cql_query(cql, compression) rescue CassandraCQL::Thrift::InvalidRequestException raise Error::InvalidRequestException.new($!.why) end |
#keyspaces ⇒ Object
107 108 109 110 |
# File 'lib/cassandra-cql/database.rb', line 107 def keyspaces # TODO: This should be replaced with a CQL call that doesn't exist yet @connection.describe_keyspaces.map { |keyspace| Schema.new(keyspace) } end |
#login!(username, password) ⇒ Object
117 118 119 120 121 122 123 124 125 |
# File 'lib/cassandra-cql/database.rb', line 117 def login!(username, password) request = CassandraCQL::Thrift::AuthenticationRequest.new request.credentials = {'username' => username, 'password' => password} ret = @connection.login(request) # To avoid a double login on the initial connect, we set # @auth_request after the first successful login. @auth_request = request ret end |
#prepare(statement, options = {}, &block) ⇒ Object
77 78 79 80 81 82 83 84 |
# File 'lib/cassandra-cql/database.rb', line 77 def prepare(statement, ={}, &block) stmt = statement_class.new(self, statement) if block_given? yield stmt else stmt end end |
#reset! ⇒ Object Also known as: reconnect!
64 65 66 67 |
# File 'lib/cassandra-cql/database.rb', line 64 def reset! disconnect! connect! end |
#statement_class ⇒ Object
70 71 72 73 74 75 |
# File 'lib/cassandra-cql/database.rb', line 70 def statement_class return @statement_class if @statement_class version_module = 'V' + CassandraCQL.CASSANDRA_VERSION.gsub('.', '') return @statement_class = CassandraCQL.const_get(version_module).const_get(:Statement) end |