diff --git a/Gemfile b/Gemfile
index acf8813a5e3aebebbee6a088b8a3d88aa29c1299..9de79a3346ad73ea739aa360cef66858f04487b5 100644
--- a/Gemfile
+++ b/Gemfile
@@ -647,7 +647,7 @@ gem 'valid_email', '~> 0.1' # rubocop:todo Gemfile/MissingFeatureCategory
 
 # JSON
 gem 'jsonb_accessor', '~> 1.3.10' # rubocop:todo Gemfile/MissingFeatureCategory
-gem 'json', '~> 2.6.3' # rubocop:todo Gemfile/MissingFeatureCategory
+gem 'json', '~> 2.7.2', feature_category: :shared
 gem 'json_schemer', '~> 0.2.18' # rubocop:todo Gemfile/MissingFeatureCategory
 gem 'oj', '~> 3.13.21' # rubocop:todo Gemfile/MissingFeatureCategory
 gem 'oj-introspect', '~> 0.7' # rubocop:todo Gemfile/MissingFeatureCategory
diff --git a/Gemfile.checksum b/Gemfile.checksum
index 22627eb5936bf89221f838230753f1fdb7aee011..4fed3d4c703f9ebf8d96a967a627c2bec7a17395 100644
--- a/Gemfile.checksum
+++ b/Gemfile.checksum
@@ -331,8 +331,8 @@
 {"name":"jira-ruby","version":"2.3.0","platform":"ruby","checksum":"abf26e6bff4a8ea40bae06f7df6276a5776905c63fb2070934823ca54f62eb62"},
 {"name":"jmespath","version":"1.6.2","platform":"ruby","checksum":"238d774a58723d6c090494c8879b5e9918c19485f7e840f2c1c7532cf84ebcb1"},
 {"name":"js_regex","version":"3.8.0","platform":"ruby","checksum":"7934bcdd5a0e6d5af4a520288fd4684a02a472ae55831d9178ccaf82356344b5"},
-{"name":"json","version":"2.6.3","platform":"java","checksum":"ea8c47427a2c876121b9a0ab53043ca390013a76374330eabd923bd81914e563"},
-{"name":"json","version":"2.6.3","platform":"ruby","checksum":"86aaea16adf346a2b22743d88f8dcceeb1038843989ab93cda44b5176c845459"},
+{"name":"json","version":"2.7.2","platform":"java","checksum":"138e3038b5361b3d06ee2e8aa2be00bed0d0de4ef5f1553fc5935e5b93aca7ee"},
+{"name":"json","version":"2.7.2","platform":"ruby","checksum":"1898b5cbc81cd36c0fd4d0b7ad2682c39fb07c5ff682fc6265f678f550d4982c"},
 {"name":"json-jwt","version":"1.15.3","platform":"ruby","checksum":"66db4f14e538a774c15502a5b5b26b1f3e7585481bbb96df490aa74b5c2d6110"},
 {"name":"json_schemer","version":"0.2.18","platform":"ruby","checksum":"3362c21efbefdd12ce994e541a1e7fdb86fd267a6541dd8715e8a580fe3b6be6"},
 {"name":"jsonb_accessor","version":"1.3.10","platform":"java","checksum":"6630ac69dac46457b03e1352178ed3e2d7ba2d8edb99f2e9b64a0e60cda9ed26"},
diff --git a/Gemfile.lock b/Gemfile.lock
index 34c885f490027704ab5eadd3c13cf1c0ae180383..67ea8c49e9233bff0ca10bf530437a8e8b07f452 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -10,7 +10,7 @@ PATH
     click_house-client (0.1.0)
       activesupport (< 8)
       addressable (~> 2.8)
-      json (~> 2.6.3)
+      json (~> 2.7.2)
 
 PATH
   remote: gems/csv_builder
@@ -979,7 +979,7 @@ GEM
       character_set (~> 1.4)
       regexp_parser (~> 2.5)
       regexp_property_values (~> 1.0)
-    json (2.6.3)
+    json (2.7.2)
     json-jwt (1.15.3)
       activesupport (>= 4.2)
       aes_key_wrap
@@ -2073,7 +2073,7 @@ DEPENDENCIES
   ipynbdiff!
   jira-ruby (~> 2.3.0)
   js_regex (~> 3.8)
-  json (~> 2.6.3)
+  json (~> 2.7.2)
   json_schemer (~> 0.2.18)
   jsonb_accessor (~> 1.3.10)
   jwt (~> 2.5)
diff --git a/gems/click_house-client/Gemfile.lock b/gems/click_house-client/Gemfile.lock
index a8e2b7ec0c6378e77d94aa6d1f494e001142b60c..d9d672240d2ce4e6f49a3af85d18bb490db8f447 100644
--- a/gems/click_house-client/Gemfile.lock
+++ b/gems/click_house-client/Gemfile.lock
@@ -4,7 +4,7 @@ PATH
     click_house-client (0.1.0)
       activesupport (< 8)
       addressable (~> 2.8)
-      json (~> 2.6.3)
+      json (~> 2.7.2)
 
 GEM
   remote: https://rubygems.org/
@@ -19,23 +19,25 @@ GEM
     ast (2.4.2)
     concurrent-ruby (1.2.2)
     diff-lcs (1.5.0)
-    gitlab-styles (10.1.0)
-      rubocop (~> 1.50.2)
-      rubocop-graphql (~> 0.18)
-      rubocop-performance (~> 1.15)
-      rubocop-rails (~> 2.17)
-      rubocop-rspec (~> 2.22)
+    gitlab-styles (12.0.1)
+      rubocop (~> 1.62.1)
+      rubocop-factory_bot (~> 2.25.1)
+      rubocop-graphql (~> 1.5.0)
+      rubocop-performance (~> 1.20.2)
+      rubocop-rails (~> 2.24.0)
+      rubocop-rspec (~> 2.27.1)
     i18n (1.14.1)
       concurrent-ruby (~> 1.0)
-    json (2.6.3)
+    json (2.7.2)
+    language_server-protocol (3.17.0.3)
     minitest (5.18.1)
     parallel (1.23.0)
-    parser (3.2.2.3)
+    parser (3.3.3.0)
       ast (~> 2.4.1)
       racc
     public_suffix (5.0.3)
     racc (1.7.1)
-    rack (3.0.8)
+    rack (3.1.6)
     rainbow (3.1.1)
     rake (13.0.6)
     regexp_parser (2.8.1)
@@ -53,33 +55,35 @@ GEM
       diff-lcs (>= 1.2.0, < 2.0)
       rspec-support (~> 3.12.0)
     rspec-support (3.12.1)
-    rubocop (1.50.2)
+    rubocop (1.62.1)
       json (~> 2.3)
+      language_server-protocol (>= 3.17.0)
       parallel (~> 1.10)
-      parser (>= 3.2.0.0)
+      parser (>= 3.3.0.2)
       rainbow (>= 2.2.2, < 4.0)
       regexp_parser (>= 1.8, < 3.0)
       rexml (>= 3.2.5, < 4.0)
-      rubocop-ast (>= 1.28.0, < 2.0)
+      rubocop-ast (>= 1.31.1, < 2.0)
       ruby-progressbar (~> 1.7)
       unicode-display_width (>= 2.4.0, < 3.0)
-    rubocop-ast (1.29.0)
-      parser (>= 3.2.1.0)
+    rubocop-ast (1.31.3)
+      parser (>= 3.3.1.0)
     rubocop-capybara (2.18.0)
       rubocop (~> 1.41)
-    rubocop-factory_bot (2.23.1)
-      rubocop (~> 1.33)
-    rubocop-graphql (0.19.0)
-      rubocop (>= 0.87, < 2)
-    rubocop-performance (1.18.0)
-      rubocop (>= 1.7.0, < 2.0)
-      rubocop-ast (>= 0.4.0)
-    rubocop-rails (2.20.2)
+    rubocop-factory_bot (2.25.1)
+      rubocop (~> 1.41)
+    rubocop-graphql (1.5.2)
+      rubocop (>= 0.90, < 2)
+    rubocop-performance (1.20.2)
+      rubocop (>= 1.48.1, < 2.0)
+      rubocop-ast (>= 1.30.0, < 2.0)
+    rubocop-rails (2.24.1)
       activesupport (>= 4.2.0)
       rack (>= 1.1)
       rubocop (>= 1.33.0, < 2.0)
-    rubocop-rspec (2.22.0)
-      rubocop (~> 1.33)
+      rubocop-ast (>= 1.31.1, < 2.0)
+    rubocop-rspec (2.27.1)
+      rubocop (~> 1.40)
       rubocop-capybara (~> 2.17)
       rubocop-factory_bot (~> 2.22)
     ruby-progressbar (1.13.0)
@@ -92,7 +96,7 @@ PLATFORMS
 
 DEPENDENCIES
   click_house-client!
-  gitlab-styles (~> 10.1.0)
+  gitlab-styles (~> 12.0.1)
   rake (~> 13.0)
   rspec (~> 3.0)
   rubocop
diff --git a/gems/click_house-client/click_house-client.gemspec b/gems/click_house-client/click_house-client.gemspec
index 5544065ef17077d0151360ad05cdc0df237509a5..55f30cbc10f93a751e80766a4704d8047a9d2e12 100644
--- a/gems/click_house-client/click_house-client.gemspec
+++ b/gems/click_house-client/click_house-client.gemspec
@@ -14,9 +14,9 @@ Gem::Specification.new do |spec|
 
   spec.add_runtime_dependency "activesupport", "< 8"
   spec.add_runtime_dependency "addressable", "~> 2.8"
-  spec.add_runtime_dependency 'json', '~> 2.6.3'
+  spec.add_runtime_dependency 'json', '~> 2.7.2'
 
-  spec.add_development_dependency 'gitlab-styles', '~> 10.1.0'
+  spec.add_development_dependency 'gitlab-styles', '~> 12.0.1'
   spec.add_development_dependency "rake", "~> 13.0"
   spec.add_development_dependency "rspec", "~> 3.0"
   spec.add_development_dependency 'rubocop'
diff --git a/gems/click_house-client/lib/click_house/client/query.rb b/gems/click_house-client/lib/click_house/client/query.rb
index 65582031a4cd84d40ec87889710cbd4f01857f7a..608feabe324ee31655bbb5fda4d0a871f91123c2 100644
--- a/gems/click_house-client/lib/click_house/client/query.rb
+++ b/gems/click_house-client/lib/click_house/client/query.rb
@@ -7,6 +7,12 @@ class Query < QueryLike
       PLACEHOLDER_REGEX = /{\w+:\w+}/ # example: {var:UInt8}
       PLACEHOLDER_NAME_REGEX = /{(\w+):/ # example: {var:UInt8} => var
 
+      def self.build(query)
+        return query if query.is_a?(ClickHouse::Client::QueryLike)
+
+        new(raw_query: query)
+      end
+
       def initialize(raw_query:, placeholders: {})
         raise QueryError, 'Empty query string given' if raw_query.blank?
 
@@ -18,7 +24,7 @@ def initialize(raw_query:, placeholders: {})
       # If there are subqueries, merge their placeholders as well.
       def placeholders
         all_placeholders = @placeholders.select { |_, v| !v.is_a?(QueryLike) }
-        @placeholders.each do |_name, value|
+        @placeholders.each_value do |value|
           next unless value.is_a?(QueryLike)
 
           all_placeholders.merge!(value.placeholders) do |key, a, b|
@@ -55,12 +61,6 @@ def to_redacted_sql(bind_index_manager = BindIndexManager.new)
         end
       end
 
-      def self.build(query)
-        return query if query.is_a?(ClickHouse::Client::QueryLike)
-
-        new(raw_query: query)
-      end
-
       private
 
       attr_reader :raw_query