瀏覽代碼

Added timeout

Andrew Kane 9 年之前
父節點
當前提交
f86bb74972
共有 3 個文件被更改,包括 14 次插入1 次删除
  1. 6 0
      README.md
  2. 6 1
      app/controllers/blazer/queries_controller.rb
  3. 2 0
      lib/blazer.rb

+ 6 - 0
README.md

@@ -107,6 +107,12 @@ Change time zone
 Blazer.time_zone = "Pacific Time (US & Canada)"
 ```
 
+Change timeout *PostgreSQL only* [master]
+
+```ruby
+Blazer.timeout = 10 # defaults to 15
+```
+
 Turn off audits
 
 ```ruby

+ 6 - 1
app/controllers/blazer/queries_controller.rb

@@ -155,6 +155,7 @@ module Blazer
       error = nil
       begin
         Blazer::Connection.transaction do
+          Blazer::Connection.connection.execute("SET statement_timeout = #{Blazer.timeout}") if postgresql?
           result = Blazer::Connection.connection.select_all(statement)
           result.each do |untyped_row|
             row = {}
@@ -208,12 +209,16 @@ module Blazer
     end
 
     def tables
-      default_schema = Blazer::Connection.connection.adapter_name == "PostgreSQL" ? "public" : Blazer::Connection.connection_config[:database]
+      default_schema = postgresql? ? "public" : Blazer::Connection.connection_config[:database]
       schema = Blazer::Connection.connection_config[:schema] || default_schema
       rows, error = run_statement(Blazer::Connection.send(:sanitize_sql_array, ["SELECT table_name, column_name, ordinal_position, data_type FROM information_schema.columns WHERE table_schema = ?", schema]))
       Hash[ rows.group_by{|r| r["table_name"] }.map{|t, f| [t, f.sort_by{|f| f["ordinal_position"] }.map{|f| f.slice("column_name", "data_type") }] }.sort_by{|t, f| t } ]
     end
     helper_method :tables
 
+    def postgresql?
+      Blazer::Connection.connection.adapter_name == "PostgreSQL"
+    end
+
   end
 end

+ 2 - 0
lib/blazer.rb

@@ -8,9 +8,11 @@ module Blazer
     attr_accessor :audit
     attr_reader :time_zone
     attr_accessor :user_name
+    attr_accessor :timeout
   end
   self.audit = true
   self.user_name = :name
+  self.timeout = 15
 
   def self.time_zone=(time_zone)
     @time_zone = time_zone.is_a?(ActiveSupport::TimeZone) ? time_zone : ActiveSupport::TimeZone[time_zone.to_s]