Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Tren Logo

Build Status

Tren lets you use your SQL as a first class method in your Crystal code.

Installation

Add this to your application's shard.yml:

dependencies:
  tren:
    github: sdogruyol/tren

Usage

Create a simple SQL file. The first line must be -- name: your_method_name(args).

-- name: get_users(name : String, surname : String)

SELECT * FROM users WHERE name = '{{ name }}' AND surname = '{{ surname }}'

Require Tren and load your SQL file. It's going to create a first class method to your SQL.

require "tren"

Tren.load("/path/to/your/file.sql")

# Or you can load multiple files at once:
Tren.load("./db/**/*.sql")

Overloading

-- name: get_users(name : String, surname : String)

SELECT * FROM users WHERE name = '{{ name }}' AND surname = '{{ surname }}'
-- name: get_users(name : String, age : Int32)

SELECT * FROM users WHERE name = '{{ name }}' AND age = {{ age }}

Meaningful Compiler Errors

Since Tren is creating native Crystal methods, you can see meaningful errors on compile process.

in ./your/file: no overload matches 'get_users' with types String, Bool
Overloads are:
 - get_users(name : String, surname : String)
 - get_users(name : String, age : Int32)

    get_users("john", true)

Prevent SQL Injections

SQL statements are escaped by default. But you are able to make injectable (raw) parameters by writing ! to the parameter.

-- name: get_users(name : String, surname : String)

SELECT * FROM users WHERE name = '{{! name }}' AND surname = '{{! surname }}'

Composing SQLs

You can compose Tren methods easily to be DRY.

-- name: filter_user(name : String, surname : String)

WHERE name = '{{ name }}' AND surname = '{{ surname }}'

Let's reuse this now:

-- name: get_users(name : String, surname : String)

SELECT * FROM users {{! filter_user(name, surname) }}

Escape Character

For example PostgreSQL uses '' for escaping string. To set your escape character for postgresql.

Tren.escape_character = "\\'"

Contributing

  1. Fork it ( https://github.com/sdogruyol/tren/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

  • f Fatih Kadir Akın - creator, maintainer
  • sdogruyol Serdar Doğruyol - creator, maintainer

Built on a TREN from Ankara to Istanbul.

You can’t perform that action at this time.