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
- #use_cql3? ⇒ Boolean
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 40 |
# File 'lib/cassandra-cql/database.rb', line 25 def initialize(servers, ={}, ={}) = { :keyspace => 'system' }.merge() = { :exception_class_overrides => CassandraCQL::Thrift::InvalidRequestException, :connect_timeout => 5 }.merge() @keyspace = [:keyspace] @cql_version = [: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
61 62 63 64 65 66 67 |
# File 'lib/cassandra-cql/database.rb', line 61 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
47 48 49 50 51 52 53 54 55 |
# File 'lib/cassandra-cql/database.rb', line 47 def connect! @connection = ThriftClient.new(CassandraCQL::Thrift::Client, @servers, ) 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
57 58 59 |
# File 'lib/cassandra-cql/database.rb', line 57 def disconnect! @connection.disconnect! if active? end |
#execute(statement, *bind_vars) ⇒ Object
92 93 94 95 96 97 98 99 100 101 |
# File 'lib/cassandra-cql/database.rb', line 92 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
103 104 105 106 107 108 109 110 111 |
# File 'lib/cassandra-cql/database.rb', line 103 def execute_cql_query(cql, compression=CassandraCQL::Thrift::Compression::NONE) if use_cql3? @connection.execute_cql3_query(cql, compression, CassandraCQL::Thrift::ConsistencyLevel::QUORUM) #TODO consistency level else @connection.execute_cql_query(cql, compression) end rescue CassandraCQL::Thrift::InvalidRequestException raise Error::InvalidRequestException.new($!.why) end |
#keyspaces ⇒ Object
117 118 119 120 |
# File 'lib/cassandra-cql/database.rb', line 117 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
127 128 129 130 131 132 133 134 135 |
# File 'lib/cassandra-cql/database.rb', line 127 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
83 84 85 86 87 88 89 90 |
# File 'lib/cassandra-cql/database.rb', line 83 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!
70 71 72 73 |
# File 'lib/cassandra-cql/database.rb', line 70 def reset! disconnect! connect! end |
#statement_class ⇒ Object
76 77 78 79 80 81 |
# File 'lib/cassandra-cql/database.rb', line 76 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 |
#use_cql3? ⇒ Boolean
42 43 44 45 |
# File 'lib/cassandra-cql/database.rb', line 42 def use_cql3? (@cql_version.nil? || @cql_version.split('.').first.to_i >= 3) && CassandraCQL::Thrift::Client.method_defined?(:execute_cql3_query) end |