1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
# frozen_string_literal: true
module ClickHouse
class Connection
def initialize(database, configuration = ClickHouse::Client.configuration)
@database = database
@configuration = configuration
end
def select(query)
ClickHouse::Client.select(query, database, configuration)
end
def execute(query)
ClickHouse::Client.execute(query, database, configuration)
end
def insert_csv(query, file)
ClickHouse::Client.insert_csv(query, file, database, configuration)
end
def ping
execute('SELECT 1')
end
def database_name
configuration.databases[database]&.database
end
def table_exists?(table_name)
raw_query = <<~SQL.squish
SELECT 1 FROM system.tables
WHERE name = {table_name: String} AND database = {database_name: String}
SQL
placeholders = { table_name: table_name, database_name: database_name }
query = ClickHouse::Client::Query.new(raw_query: raw_query, placeholders: placeholders)
select(query).any?
end
private
attr_reader :database, :configuration
end
end
|