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, ={}, ={}) @options = { :keyspace => 'system' }.merge() @thrift_client_options = { :exception_class_overrides => CassandraCQL::Thrift::InvalidRequestException, :connect_timeout => 5 }.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
66 67 68 69 70 71 72 |
# File 'lib/cassandra-cql/database.rb', line 66 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 56 57 58 59 60 |
# File 'lib/cassandra-cql/database.rb', line 47 def connect! @connection = ThriftClient.new(CassandraCQL::Thrift::Client, @servers, @thrift_client_options) if @options[:username] and @options[:password] login!(@options[:username], @options[:password]) end obj = self @connection.add_callback(:post_connect) do @connection.set_cql_version(@cql_version) if @cql_version @connection.login(@auth_request) if @auth_request execute("USE #{@keyspace}") end end |
#disconnect! ⇒ Object
62 63 64 |
# File 'lib/cassandra-cql/database.rb', line 62 def disconnect! @connection.disconnect! if active? end |
#execute(statement, *bind_vars) ⇒ Object
97 98 99 100 101 102 103 104 105 106 |
# File 'lib/cassandra-cql/database.rb', line 97 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
108 109 110 111 112 113 114 115 116 |
# File 'lib/cassandra-cql/database.rb', line 108 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
122 123 124 125 |
# File 'lib/cassandra-cql/database.rb', line 122 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
132 133 134 135 136 137 138 139 140 |
# File 'lib/cassandra-cql/database.rb', line 132 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
88 89 90 91 92 93 94 95 |
# File 'lib/cassandra-cql/database.rb', line 88 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!
75 76 77 78 |
# File 'lib/cassandra-cql/database.rb', line 75 def reset! disconnect! connect! end |
#statement_class ⇒ Object
81 82 83 84 85 86 |
# File 'lib/cassandra-cql/database.rb', line 81 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 |