Skip to content

Commit

Permalink
FEATURE: add method to_sql and small refactoring (#53)
Browse files Browse the repository at this point in the history
Adds public to_sql API to MiniSQL which can be used for SQL string generation which previously could only be done via builder.
  • Loading branch information
ermolaev committed Apr 20, 2023
1 parent eee1656 commit 426bb43
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 35 deletions.
8 changes: 8 additions & 0 deletions lib/mini_sql/connection.rb
Expand Up @@ -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
Expand Down
9 changes: 1 addition & 8 deletions lib/mini_sql/mysql/connection.rb
Expand Up @@ -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,
Expand Down
9 changes: 1 addition & 8 deletions lib/mini_sql/postgres/connection.rb
Expand Up @@ -192,21 +192,14 @@ 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

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
Expand Down
9 changes: 1 addition & 8 deletions lib/mini_sql/postgres_jdbc/connection.rb
Expand Up @@ -78,23 +78,16 @@ 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

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
Expand Down
18 changes: 8 additions & 10 deletions lib/mini_sql/sqlite/connection.rb
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion lib/mini_sql/sqlite/prepared_connection.rb
Expand Up @@ -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?
Expand Down

0 comments on commit 426bb43

Please sign in to comment.