lib/github/sql.rb in github-ds-0.2.2 vs lib/github/sql.rb in github-ds-0.2.3
- old
+ new
@@ -147,11 +147,11 @@
@binds = binds ? binds.dup : {}
@query = ""
@connection = @binds.delete :connection
@force_tz = @binds.delete :force_timezone
- add query if !query.nil?
+ add query
end
# Public: Add a chunk of SQL to the query. Any ":keyword" tokens in the SQL
# will be replaced with database-safe values from the current binds.
#
@@ -161,24 +161,26 @@
# aren't available to subsequent adds.
#
# Returns self.
# Raises GitHub::SQL::BadBind for unknown keyword tokens.
def add(sql, extras = nil)
- return self if sql.blank?
+ return self if sql.nil? || sql.empty?
query << " " unless query.empty?
- if @force_tz
- zone = ActiveRecord::Base.default_timezone
- ActiveRecord::Base.default_timezone = @force_tz
- end
+ begin
+ if @force_tz
+ zone = ActiveRecord::Base.default_timezone
+ ActiveRecord::Base.default_timezone = @force_tz
+ end
- query << interpolate(sql.strip, extras)
+ query << interpolate(sql.strip, extras)
- self
- ensure
- ActiveRecord::Base.default_timezone = zone if @force_tz
+ self
+ ensure
+ ActiveRecord::Base.default_timezone = zone if @force_tz
+ end
end
# Public: Add a chunk of SQL to the query, unless query generated so far is empty.
#
# Example: use this for conditionally adding UNION when generating sets of SELECTs.
@@ -268,41 +270,43 @@
# Public: Execute, memoize, and return the results of this query.
def results
return @results if defined? @results
return [] if frozen?
- if @force_tz
- zone = ActiveRecord::Base.default_timezone
- ActiveRecord::Base.default_timezone = @force_tz
- end
+ begin
+ if @force_tz
+ zone = ActiveRecord::Base.default_timezone
+ ActiveRecord::Base.default_timezone = @force_tz
+ end
- case query
- when /\ADELETE/i
- @affected_rows = connection.delete(query, "#{self.class.name} Delete")
+ case query
+ when /\ADELETE/i
+ @affected_rows = connection.delete(query, "#{self.class.name} Delete")
- when /\AINSERT/i
- @last_insert_id = connection.insert(query, "#{self.class.name} Insert")
+ when /\AINSERT/i
+ @last_insert_id = connection.insert(query, "#{self.class.name} Insert")
- when /\AUPDATE/i
- @affected_rows = connection.update(query, "#{self.class.name} Update")
+ when /\AUPDATE/i
+ @affected_rows = connection.update(query, "#{self.class.name} Update")
- when /\ASELECT/i
- # Why not execute or select_rows? Because select_all hits the query cache.
- @hash_results = connection.select_all(query, "#{self.class.name} Select")
- @results = @hash_results.map(&:values)
+ when /\ASELECT/i
+ # Why not execute or select_rows? Because select_all hits the query cache.
+ @hash_results = connection.select_all(query, "#{self.class.name} Select")
+ @results = @hash_results.map(&:values)
- else
- @results = connection.execute(query, "#{self.class.name} Execute").to_a
- end
+ else
+ @results = connection.execute(query, "#{self.class.name} Execute").to_a
+ end
- @results ||= []
+ @results ||= []
- retrieve_found_row_count
- freeze
+ retrieve_found_row_count
+ freeze
- @results
- ensure
- ActiveRecord::Base.default_timezone = zone if @force_tz
+ @results
+ ensure
+ ActiveRecord::Base.default_timezone = zone if @force_tz
+ end
end
# Public: If the query is a SELECT, return an array of hashes instead of an array of arrays.
def hash_results
results