forked from discourse/mini_sql
/
connection.rb
64 lines (53 loc) · 1.52 KB
/
connection.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# frozen_string_literal: true
module MiniSql
module Mysql
class Connection < MiniSql::Connection
attr_reader :param_encoder, :raw_connection, :deserializer_cache
def initialize(raw_connection, args = nil)
@raw_connection = raw_connection
@param_encoder = (args && args[:param_encoder]) || InlineParamEncoder.new(self)
@deserializer_cache = (args && args[:deserializer_cache]) || DeserializerCache.new
end
def query_single(sql, *params)
run(sql, :array, params).to_a.flatten!
end
def query_hash(sql, *params)
result = run(sql, :hash, params)
result.to_a
end
def query_array(sql, *params)
run(sql, :array, params).to_a
end
def exec(sql, *params)
run(sql, :array, params)
raw_connection.affected_rows
end
def query(sql, *params)
result = run(sql, :array, params)
@deserializer_cache.materialize(result)
end
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,
as: as,
database_timezone: :utc,
application_timezone: :utc,
cast_booleans: true,
cast: true,
cache_rows: true,
symbolize_keys: false
)
end
end
end
end