Sha256: c18597881c9cacd68fa0823cb310dcffffc89227e0fb39b71e4300e4c76a96c6

Contents?: true

Size: 1.53 KB

Versions: 9

Compression:

Stored size: 1.53 KB

Contents

# frozen_string_literal: true

require_relative '../../protocol'

def bash(env, cmd)
  code = remove_common_indent(
    %(set -e
      set -o pipefail

      #{cmd}
    )
  )
  # puts code
  env.send :sh, 'bash ' + create_tmp(code)
end

# postgresql protocol using psql, requires HOST, PORT, USER, DB
class Psql
  # Sometimes we want to use the psql command with bash directly
  def sh_cmd(scope)
    c = @conn
    env_vars = "PGOPTIONS='-c search_path=#{scope ? scope + ',' : ''}public' "
    "PGPASSWORD=#{c.password} #{env_vars} psql -h #{c.host} -p #{c.port} -U #{c.user} -d #{c.db} -v ON_ERROR_STOP=1"
  end

  # 1. do not add required argument here, so psql.config will work or we can only use psql(conn: xxx).config
  def initialize(conn: nil, create: 'mview', params: {})
    @create = create
    @params = params
    @conn = conn
  end

  def build(code, _)
    # 2. lazily check the argument only when used
    raise 'argument conn required' if @conn.nil?

    if @create.to_s == 'table'
      'DROP TABLE IF EXISTS :_name_;' \
        'CREATE TABLE :_name_ AS (' + code + ');'
    elsif @create.to_s == 'mview'
      'DROP MATERIALIZED VIEW IF EXISTS :_name_;' \
        'CREATE MATERIALIZED VIEW :_name_ AS (' + code + ');'
    else
      code
    end
  end

  def run_script(env, fname, task)
    param_str = (@params || {}).map { |k, v| "-v #{k}=\"#{v}\"" }.join(' ')

    bash env, %(
    #{sh_cmd(task.scope)} #{param_str} -v _name_=#{task.stem} \
      -f #{fname} | tee #{fname}.log
    mv #{fname}.log #{task.name}
    )
  end
end

creator :psql, Psql

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
raka-0.3.9 lib/raka/lang/psql/impl.rb
raka-0.3.8 lib/raka/lang/psql/impl.rb
raka-0.3.7 lib/raka/lang/psql/impl.rb
raka-0.3.6 lib/raka/lang/psql/impl.rb
raka-0.3.4 lib/raka/lang/psql/impl.rb
raka-0.3.3 lib/lang/psql/impl.rb
raka-0.3.2 lib/lang/psql/impl.rb
raka-0.3.1 lib/lang/psql/impl.rb
raka-0.2.3 lib/lang/psql/impl.rb