Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'gems/click_house-client/lib/click_house/client.rb')
-rw-r--r--gems/click_house-client/lib/click_house/client.rb64
1 files changed, 64 insertions, 0 deletions
diff --git a/gems/click_house-client/lib/click_house/client.rb b/gems/click_house-client/lib/click_house/client.rb
new file mode 100644
index 00000000000..22c42d7be6e
--- /dev/null
+++ b/gems/click_house-client/lib/click_house/client.rb
@@ -0,0 +1,64 @@
+# frozen_string_literal: true
+
+require 'addressable'
+require 'json'
+require 'active_support/time'
+require_relative "client/database"
+require_relative "client/configuration"
+require_relative "client/formatter"
+require_relative "client/response"
+
+module ClickHouse
+ module Client
+ class << self
+ def configuration
+ @configuration ||= Configuration.new
+ end
+
+ def configure
+ yield(configuration)
+ configuration.validate!
+ end
+ end
+
+ Error = Class.new(StandardError)
+ ConfigurationError = Class.new(Error)
+ DatabaseError = Class.new(Error)
+
+ # Executes a SELECT database query
+ def self.select(query, database, configuration = self.configuration)
+ db = lookup_database(configuration, database)
+
+ response = configuration.http_post_proc.call(
+ db.uri.to_s,
+ db.headers,
+ "#{query} FORMAT JSON" # always return JSON
+ )
+
+ raise DatabaseError, response.body unless response.success?
+
+ Formatter.format(configuration.json_parser.parse(response.body))
+ end
+
+ # Executes any kinds of database query without returning any data (INSERT, DELETE)
+ def self.execute(query, database, configuration = self.configuration)
+ db = lookup_database(configuration, database)
+
+ response = configuration.http_post_proc.call(
+ db.uri.to_s,
+ db.headers,
+ query
+ )
+
+ raise DatabaseError, response.body unless response.success?
+
+ true
+ end
+
+ private_class_method def self.lookup_database(configuration, database)
+ configuration.databases[database].tap do |db|
+ raise ConfigurationError, "The database '#{database}' is not configured" unless db
+ end
+ end
+ end
+end