Skip to content

Commit

Permalink
Refactor database interaction to use exec_query method for improved c…
Browse files Browse the repository at this point in the history
…onnection handling
  • Loading branch information
eliasjpr committed Dec 5, 2024
1 parent e927bc9 commit 03e93b3
Show file tree
Hide file tree
Showing 8 changed files with 40 additions and 32 deletions.
8 changes: 6 additions & 2 deletions spec/adapters/postgres_schema_spec.cr
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,9 @@ describe CQL::Schema do
FROM information_schema.columns
WHERE table_schema = 'public' AND table_name = '#{table}' AND column_name = '#{col}';
SQL
Example.db.query_one(query, as: Int32)
Example.exec_query do |conn|
conn.query_one(query, as: Int32)
end
rescue exception
Log.debug { exception }
0
Expand All @@ -68,7 +70,9 @@ describe CQL::Schema do
query = <<-SQL
SELECT 1 FROM pg_indexes WHERE tablename = '#{table}' AND indexname = '#{index}';
SQL
Example.db.query_one(query, as: Int32)
Example.exec_query do |conn|
conn.query_one(query, as: Int32)
end
rescue exception
0
end
Expand Down
12 changes: 9 additions & 3 deletions spec/adapters/sqlite_schema_spec.cr
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ describe CQL::Schema do
column_exists = ->(col : Symbol, table : Symbol) do
begin
query = "SELECT 1 FROM pragma_table_info('#{table}') WHERE name = '#{col}';\n"
result = Data.db.query_one(query, as: Int32)
result = Data.exec_query do |conn|
conn.query_one(query, as: Int32)
end
result
rescue exception
0
Expand All @@ -16,7 +18,9 @@ describe CQL::Schema do
query = <<-SQL
SELECT 1 FROM SQLite_master WHERE type = 'index' AND tbl_name = '#{table}' AND name = '#{index}';
SQL
result = Data.db.query_one(query, as: Int32)
result = Data.exec_query do |conn|
conn.query_one(query, as: Int32)
end
result
rescue exception
0
Expand All @@ -29,7 +33,9 @@ describe CQL::Schema do

table = Data.customers.table_name.to_s
check_query = "SELECT name FROM sqlite_master WHERE type='table' AND name='#{table}'"
name = Data.db.query_one(check_query, as: String)
name = Data.exec_query do |conn|
conn.query_one(check_query, as: Int32)
end

name.should eq table
end
Expand Down
2 changes: 1 addition & 1 deletion spec/table_spec.cr
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ describe CQL::Table do
check_query = "SELECT name FROM sqlite_master WHERE type='table' AND name='#{table}'"

expect_raises(DB::NoResultsError) do
TableDB.db.query_one(check_query, as: String)
TableDB.exec_query { |conn| conn.query_one(check_query, as: String) }
end
end
end
4 changes: 2 additions & 2 deletions src/delete.cr
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ module CQL
# ```
def commit
query, params = to_sql
@schame.exec_query do |conn|
conn.exec query, args: params
@schema.exec_query do |conn|
conn.exec(query, args: params)
end
end

Expand Down
6 changes: 3 additions & 3 deletions src/insert.cr
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,11 @@ module CQL
# Reset to ensure nothing else but the :id is returned
@back = Array(Expression::Column).new
query, params = back(:id).to_sql
@schame.exec_query do |conn|
@schema.exec_query do |conn|
conn.query_one(query, args: params, as: type)
end
else
commit.last_insert_id
self.commit.last_insert_id
end
end

Expand All @@ -87,7 +87,7 @@ module CQL
# ```
def commit
query, params = to_sql
@schame.exec_query do |conn|
@schema.exec_query do |conn|
conn.exec(query, args: params)
end
rescue ex
Expand Down
12 changes: 5 additions & 7 deletions src/query.cr
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,9 @@ module CQL
# ```
def all(as as_kind)
query, params = to_sql
as_kind.from_rs

@schame.exec_query do |conn|
conn.query(query, args: params)
@schema.exec_query do |conn|
as_kind.from_rs(conn.query(query, args: params))
end
end

Expand Down Expand Up @@ -104,8 +103,7 @@ module CQL
# ```
def first(as as_kind)
query, params = to_sql
Log.debug { "Query: #{query}, Params: #{params}" }
@schame.exec_query do |conn|
@schema.exec_query do |conn|
conn.query_one(query, args: params, as: as_kind)
end
end
Expand Down Expand Up @@ -139,7 +137,7 @@ module CQL
# ```
def get(as as_kind)
query, params = to_sql
@schame.exec_query do |conn|
@schema.exec_query do |conn|
conn.scalar(query, args: params, as: as_kind)
end
end
Expand All @@ -155,7 +153,7 @@ module CQL
# ```
def each(as as_kind, &)
query, params = to_sql
@schame.exec_query do |conn|
@schema.exec_query do |conn|
conn.query_each(query, args: params) do |result|
yield as_kind.from_rs(result)
end
Expand Down
24 changes: 12 additions & 12 deletions src/schema.cr
Original file line number Diff line number Diff line change
Expand Up @@ -110,17 +110,15 @@ module CQL
# schema.exec("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)")
# ```
def exec(sql : String)
db = DB.open(@uri)
db.exec(sql)
ensure
db.close
DB.open(@uri) do |conn|
conn.exec(sql)
end
end

def exec_query(&)
db = DB.open(@uri)
yield db
ensure
db.close
DB.open(@uri) do |conn|
yield conn
end
end

# Creates a new query for the schema.
Expand Down Expand Up @@ -217,10 +215,12 @@ module CQL
sql_statements = alter_table.to_sql(@gen)
Log.debug { sql_statements }

db.transaction do |tx|
cnn = tx.connection
sql_statements.split(";\n").each do |sql|
cnn.exec(sql) unless sql.empty?
exec_query do |conn|
conn.transaction do |tx|
cnn = tx.connection
sql_statements.split(";\n").each do |sql|
cnn.exec(sql) unless sql.empty?
end
end
end
end
Expand Down
4 changes: 2 additions & 2 deletions src/update.cr
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ module CQL
# ```
def commit
query, params = to_sql
@schame.exec_query do |conn|
conn.exec query, args: params
@schema.exec_query do |conn|
conn.exec(query, args: params)
end
end

Expand Down

0 comments on commit 03e93b3

Please sign in to comment.