Sha256: a5ee492cb6e89847c7bfe5dd39f2a8cfc2a007dfcc2ab5017354a68f3a0790ae

Contents?: true

Size: 1.95 KB

Versions: 3

Compression:

Stored size: 1.95 KB

Contents

# frozen_string_literal: true

SQLRunner.execute <<~SQL
  create table if not exists users (
    id serial primary key not null,
    name text not null,
    email text not null
  )
SQL

class Users < SQLRunner::Query
end

module NumericModel
  def self.new(attrs)
    attrs.values.first.to_i
  end
end

class Numbers < SQLRunner::Query
  plugin model: NumericModel
  plugin :many

  query <<-SQL
    SELECT n FROM generate_series(1, 10) n
  SQL
end

class User
  include Virtus.model

  attribute :id, String
  attribute :name, String
  attribute :email, Integer
end

class Customer < User
end

class FindUser < SQLRunner::Query
  plugins :one
  plugin model: User
end

class FindAllUsers < SQLRunner::Query
  plugins :many
  plugin model: User
end

class CreateUser < SQLRunner::Query
  plugin :one
  plugin model: User
end

class DeleteAllUsers < SQLRunner::Query
  plugin :many
  plugin model: User
end

class FindCustomer < SQLRunner::Query
  query_name "find_user"
  plugin :one
  plugin model: Customer
end

result = SQLRunner.execute(
  "select application_name from pg_stat_activity where pid = pg_backend_pid();"
)
p [:application_name, result.to_a]

result = SQLRunner.execute <<~SQL, name: "john", age: 18
  select
    'hello'::text as message,
    :name::text as name,
    :age::integer as age,
    :name::text as name2
SQL
p [:select, result.to_a]

p [:delete_all_users, DeleteAllUsers.call]
p [:create_user, CreateUser.call(name: "Nando Vieira", email: "me@fnando.com")]
p [:create_user, CreateUser.call(name: "John Doe", email: "john@example.com")]
p [:numbers, Numbers.call]
p [:users, Users.call.to_a]
p [:find_user, FindUser.call(email: "me@fnando.com")]
p [:find_user, FindUser.call(email: "' OR 1=1 --me@fnando.com")]
p [:find_user, FindUser.call!(email: "me@fnando.com")]
p [:find_customer, FindCustomer.call!(email: "me@fnando.com")]

begin
  FindUser.call!(email: "invalid@email")
rescue SQLRunner::RecordNotFound => error
  p [:find_user, error]
end

SQLRunner.disconnect

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
sql_runner-0.4.1 examples/base.rb
sql_runner-0.4.0 examples/base.rb
sql_runner-0.3.0 examples/base.rb