Sha256: 0a51a7ab9a7ce3a57eab56a8f2bfd33f86ed6a0c8ec002d17701a69edaab43e4

Contents?: true

Size: 1.63 KB

Versions: 52

Compression:

Stored size: 1.63 KB

Contents

module Blazer
  module Adapters
    class CassandraAdapter < BaseAdapter
      def run_statement(statement, comment)
        columns = []
        rows = []
        error = nil

        begin
          response = session.execute("#{statement} /*#{comment}*/")
          rows = response.map { |r| r.values }
          columns = rows.any? ? response.first.keys : []
        rescue => e
          error = e.message
        end

        [columns, rows, error]
      end

      def tables
        session.execute("SELECT table_name FROM system_schema.tables WHERE keyspace_name = '#{keyspace}'").map { |r| r["table_name"] }
      end

      def schema
        result = session.execute("SELECT keyspace_name, table_name, column_name, type, position FROM system_schema.columns WHERE keyspace_name = '#{keyspace}'")
        result.map(&:values).group_by { |r| [r[0], r[1]] }.map { |k, vs| {schema: k[0], table: k[1], columns: vs.sort_by { |v| v[2] }.map { |v| {name: v[2], data_type: v[3]} }} }
      end

      def preview_statement
        "SELECT * FROM {table} LIMIT 10"
      end

      private

      def cluster
        @cluster ||= begin
          require "cassandra"
          options = {hosts: [uri.host]}
          options[:port] = uri.port if uri.port
          options[:username] = uri.user if uri.user
          options[:password] = uri.password if uri.password
          ::Cassandra.cluster(options)
        end
      end

      def session
        @session ||= cluster.connect(keyspace)
      end

      def uri
        @uri ||= URI.parse(data_source.settings["url"])
      end

      def keyspace
        @keyspace ||= uri.path[1..-1]
      end
    end
  end
end

Version data entries

52 entries across 52 versions & 3 rubygems

Version Path
sql-jarvis-2.1.10 lib/blazer/adapters/cassandra_adapter.rb
sql-jarvis-2.1.9 lib/blazer/adapters/cassandra_adapter.rb
sql-jarvis-2.1.8 lib/blazer/adapters/cassandra_adapter.rb
sql-jarvis-2.1.7 lib/blazer/adapters/cassandra_adapter.rb
sql-jarvis-2.1.6 lib/blazer/adapters/cassandra_adapter.rb
blazer-2.5.0 lib/blazer/adapters/cassandra_adapter.rb
blazer-2.4.8 lib/blazer/adapters/cassandra_adapter.rb
blazer-2.4.7 lib/blazer/adapters/cassandra_adapter.rb
blazer-2.4.6 lib/blazer/adapters/cassandra_adapter.rb
blazer-2.4.5 lib/blazer/adapters/cassandra_adapter.rb
blazer-2.4.4 lib/blazer/adapters/cassandra_adapter.rb
blazer-2.4.3 lib/blazer/adapters/cassandra_adapter.rb
blazer-2.4.2 lib/blazer/adapters/cassandra_adapter.rb
blazer-2.4.1 lib/blazer/adapters/cassandra_adapter.rb
blazer-2.4.0 lib/blazer/adapters/cassandra_adapter.rb
blazer-2.3.1 lib/blazer/adapters/cassandra_adapter.rb
blazer-2.3.0 lib/blazer/adapters/cassandra_adapter.rb
blazer-2.2.8 lib/blazer/adapters/cassandra_adapter.rb
blazer-2.2.7 lib/blazer/adapters/cassandra_adapter.rb
blazer-2.2.6 lib/blazer/adapters/cassandra_adapter.rb