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