houdini/lib/psql.rb
2020-06-15 10:26:57 -05:00

41 lines
1.4 KiB
Ruby

# frozen_string_literal: true
# License: AGPL-3.0-or-later WITH WTO-AP-3.0-or-later
# Full license explanation at https://github.com/houdiniproject/houdini/blob/master/LICENSE
# Some convenience wrappers around the postgresql gem, allowing us to avoid activerecord dependency
# combine usage of this library with Qexpr
require 'colorize'
require 'qx'
# Initialize the database connection
module Psql
# Execute a sql statement (string)
def self.execute(statement)
puts statement if ENV['RAILS_ENV'] != 'production' && ENV['RAILS_LOG_LEVEL'] == 'debug' # log to STDOUT on dev/staging
Qx.execute_raw(raw_expr_str(statement))
end
# A variation of execute that returns a vector of vectors rather than a vector of hashes
# Useful and faster for creating CSV's
def self.execute_vectors(statement)
puts statement if ENV['RAILS_ENV'] != 'production' && ENV['RAILS_LOG_LEVEL'] == 'debug' # log to STDOUT on dev/staging
raw_str = statement.to_s.uncolorize.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
Qx.execute_raw(raw_expr_str(statement), format: 'csv')
end
def self.transaction(&block)
Qx.transaction do
yield block
end
end
private
# Raw expression string
def self.raw_expr_str(statement)
statement.to_s.uncolorize.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
end
end