diff --git a/lib/mini_sql/connection.rb b/lib/mini_sql/connection.rb index 2a61c31..a9032b5 100644 --- a/lib/mini_sql/connection.rb +++ b/lib/mini_sql/connection.rb @@ -57,6 +57,14 @@ def build(sql) Builder.new(self, sql) end + def to_sql(sql, *params) + if params.empty? + sql + else + param_encoder.encode(sql, *params) + end + end + def escape_string(str) raise NotImplementedError, "must be implemented by child connection" end diff --git a/lib/mini_sql/mysql/connection.rb b/lib/mini_sql/mysql/connection.rb index e6b8331..05b6473 100644 --- a/lib/mini_sql/mysql/connection.rb +++ b/lib/mini_sql/mysql/connection.rb @@ -51,18 +51,11 @@ def escape_string(str) raw_connection.escape(str) end - def build(sql) - Builder.new(self, sql) - end - private def run(sql, as, params) - if params && params.length > 0 - sql = param_encoder.encode(sql, *params) - end raw_connection.query( - sql, + to_sql(sql, *params), as: as, database_timezone: :utc, application_timezone: :utc, diff --git a/lib/mini_sql/postgres/connection.rb b/lib/mini_sql/postgres/connection.rb index 121aaba..9f557d0 100644 --- a/lib/mini_sql/postgres/connection.rb +++ b/lib/mini_sql/postgres/connection.rb @@ -192,10 +192,6 @@ def query_hash(sql, *params) result.clear if result end - def build(sql) - Builder.new(self, sql) - end - def escape_string(str) raw_connection.escape_string(str) end @@ -203,10 +199,7 @@ def escape_string(str) private def run(sql, params) - if params && params.length > 0 - sql = param_encoder.encode(sql, *params) - end - raw_connection.async_exec(sql) + raw_connection.async_exec(to_sql(sql, *params)) end end diff --git a/lib/mini_sql/postgres_jdbc/connection.rb b/lib/mini_sql/postgres_jdbc/connection.rb index 0d3781a..eafac75 100644 --- a/lib/mini_sql/postgres_jdbc/connection.rb +++ b/lib/mini_sql/postgres_jdbc/connection.rb @@ -78,10 +78,6 @@ def query_hash(sql, *params) run(sql, params).to_a end - def build(sql) - Builder.new(self, sql) - end - def escape_string(str) raw_connection.escape_string(str) end @@ -89,12 +85,9 @@ def escape_string(str) private def run(sql, params) - if params && params.length > 0 - sql = param_encoder.encode(sql, *params) - end conn = raw_connection conn.typemap = self.class.typemap - conn.execute(sql) + conn.execute(to_sql(sql, *params)) ensure # Force unsetting of typemap since we don't want mixed AR usage to continue to use these extra converters. conn.typemap = nil diff --git a/lib/mini_sql/sqlite/connection.rb b/lib/mini_sql/sqlite/connection.rb index dc66c4f..698f5b2 100644 --- a/lib/mini_sql/sqlite/connection.rb +++ b/lib/mini_sql/sqlite/connection.rb @@ -21,12 +21,12 @@ def prepared(condition = true) def query_single(sql, *params) # a bit lazy can be optimized - run(sql, *params).flatten! + run(sql, params).flatten! end def query_hash(sql, *params) r = [] - run(sql, *params) do |set| + run(sql, params) do |set| set.each_hash do |h| r << h end @@ -35,14 +35,14 @@ def query_hash(sql, *params) end def query_array(sql, *params) - run(sql, *params) + run(sql, params) end def exec(sql, *params) start = raw_connection.total_changes - r = run(sql, *params) + r = run(sql, params) # this is not safe for multithreading, also for DELETE from TABLE will return # incorrect data if r.length > 0 @@ -53,13 +53,13 @@ def exec(sql, *params) end def query(sql, *params) - run(sql, *params) do |set| + run(sql, params) do |set| deserializer_cache.materialize(set) end end def query_decorator(decorator, sql, *params) - run(sql, *params) do |set| + run(sql, params) do |set| deserializer_cache.materialize(set, decorator) end end @@ -70,10 +70,8 @@ def escape_string(str) private - def run(sql, *params) - if params && params.length > 0 - sql = param_encoder.encode(sql, *params) - end + def run(sql, params) + sql = to_sql(sql, *params) if block_given? stmt = SQLite3::Statement.new(raw_connection, sql) result = yield stmt.execute diff --git a/lib/mini_sql/sqlite/prepared_connection.rb b/lib/mini_sql/sqlite/prepared_connection.rb index 45ba8d5..4b0d9c3 100644 --- a/lib/mini_sql/sqlite/prepared_connection.rb +++ b/lib/mini_sql/sqlite/prepared_connection.rb @@ -28,7 +28,7 @@ def deserializer_cache end private def run(sql, params) - prepared_sql, binds, _bind_names = @param_binder.bind(sql, params) + prepared_sql, binds, _bind_names = @param_binder.bind(sql, *params) statement = @prepared_cache.prepare_statement(prepared_sql) statement.bind_params(binds) if block_given?