lib/mini_sql/builder.rb in mini_sql-0.1.5 vs lib/mini_sql/builder.rb in mini_sql-0.1.6
- old
+ new
@@ -1,18 +1,24 @@
+# frozen_string_literal: true
+
class MiniSql::Builder
def initialize(connection, template)
@args = nil
@sql = template
@sections = {}
@connection = connection
end
[:set, :where2, :where, :order_by, :limit, :left_join, :join, :offset, :select].each do |k|
- define_method k do |data, args = {}|
+ define_method k do |data, *args|
@args ||= {}
- @args.merge!(args)
+ if Hash === args
+ @args.merge!(args)
+ elsif args && args.length > 0
+ data = @connection.param_encoder.encode(data, *args)
+ end
@sections[k] ||= []
@sections[k] << data
self
end
end
@@ -22,45 +28,38 @@
@sections.each do |k, v|
joined = nil
case k
when :select
- joined = "SELECT " << v.join(" , ")
+ joined = (+"SELECT ") << v.join(" , ")
when :where, :where2
- joined = "WHERE " << v.map { |c| "(" << c << ")" }.join(" AND ")
+ joined = (+"WHERE ") << v.map { |c| (+"(") << c << ")" }.join(" AND ")
when :join
- joined = v.map { |item| "JOIN " << item }.join("\n")
+ joined = v.map { |item| (+"JOIN ") << item }.join("\n")
when :left_join
- joined = v.map { |item| "LEFT JOIN " << item }.join("\n")
+ joined = v.map { |item| (+"LEFT JOIN ") << item }.join("\n")
when :limit
- joined = "LIMIT " << v.last.to_s
+ joined = (+"LIMIT ") << v.last.to_i.to_s
when :offset
- joined = "OFFSET " << v.last.to_s
+ joined = (+"OFFSET ") << v.last.to_i.to_s
when :order_by
- joined = "ORDER BY " << v.join(" , ")
+ joined = (+"ORDER BY ") << v.join(" , ")
when :set
- joined = "SET " << v.join(" , ")
+ joined = (+"SET ") << v.join(" , ")
end
sql.sub!("/*#{k}*/", joined)
end
sql
end
- def query(args = nil)
- if args
- @args.merge!(args)
- end
- sql = to_sql
- @connection.query(sql, @args)
- end
-
- def exec(args = nil)
- if args
- @args.merge!(args)
- end
- sql = to_sql
- @connection.exec(sql, @args)
+ [:query, :query_single, :query_hash, :exec].each do |m|
+ class_eval <<~RUBY
+ def #{m}(hash_args = nil)
+ hash_args = @args.merge(hash_args) if hash_args
+ @connection.#{m}(to_sql, hash_args || @args)
+ end
+ RUBY
end
end