Selaa lähdekoodia

Support for MySQL timeouts

Andrew Kane 9 vuotta sitten
vanhempi
commit
3c88c3dd0c
3 muutettua tiedostoa jossa 19 lisäystä ja 4 poistoa
  1. 1 0
      CHANGELOG.md
  2. 18 3
      lib/blazer/data_source.rb
  3. 0 1
      lib/generators/blazer/templates/config.yml

+ 1 - 0
CHANGELOG.md

@@ -3,6 +3,7 @@
 - Added schedule for checks
 - Switched to Chart.js for charts
 - Better output for explain
+- Support for MySQL timeouts
 
 ## 1.2.1
 

+ 18 - 3
lib/blazer/data_source.rb

@@ -79,7 +79,14 @@ module Blazer
 
         in_transaction do
           begin
-            connection_model.connection.execute("SET statement_timeout = #{timeout.to_i * 1000}") if timeout && (postgresql? || redshift?)
+            if timeout
+              if postgresql? || redshift?
+                connection_model.connection.execute("SET statement_timeout = #{timeout.to_i * 1000}")
+              elsif mysql?
+                connection_model.connection.execute("SET max_execution_time = #{timeout.to_i * 1000}")
+              end
+            end
+
             result = connection_model.connection.select_all("#{statement} /*#{comment}*/")
             result.each do |untyped_row|
               row = {}
@@ -119,15 +126,23 @@ module Blazer
     end
 
     def postgresql?
-      connection_model.connection.adapter_name == "PostgreSQL"
+      ["PostgreSQL", "PostGIS"].include?(adapter_name)
     end
 
     def redshift?
-      connection_model.connection.adapter_name == "Redshift"
+      ["Redshift"].include?(adapter_name)
+    end
+
+    def mysql?
+      ["MySQL", "Mysql2", "Mysql2Spatial"].include?(adapter_name)
     end
 
     protected
 
+    def adapter_name
+      connection_model.connection.adapter_name
+    end
+
     def in_transaction
       if use_transaction?
         connection_model.transaction do

+ 0 - 1
lib/generators/blazer/templates/config.yml

@@ -5,7 +5,6 @@ data_sources:
     url: <%%= ENV["BLAZER_DATABASE_URL"] %>
 
     # statement timeout, in seconds
-    # applies to PostgreSQL only
     # none by default
     # timeout: 15