Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fazibear/defql
Create elixir functions with SQL as a body.
https://github.com/fazibear/defql
database ecto elixir sql
Last synced: 2 months ago
JSON representation
Create elixir functions with SQL as a body.
- Host: GitHub
- URL: https://github.com/fazibear/defql
- Owner: fazibear
- License: mit
- Created: 2017-01-18T14:36:05.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2018-08-11T14:26:53.000Z (over 6 years ago)
- Last Synced: 2024-09-28T17:20:53.167Z (3 months ago)
- Topics: database, ecto, elixir, sql
- Language: Elixir
- Homepage:
- Size: 50.8 KB
- Stars: 103
- Watchers: 5
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- freaking_awesome_elixir - Elixir - Create elixir functions with SQL as a body. (ORM and Datamapping)
- fucking-awesome-elixir - defql - Create elixir functions with SQL as a body. (ORM and Datamapping)
- awesome-elixir - defql - Create elixir functions with SQL as a body. (ORM and Datamapping)
README
# Defql [![Package Version](https://img.shields.io/hexpm/v/defql.svg)](https://hex.pm/packages/defql) [![Code Climate](https://codeclimate.com/github/fazibear/defql/badges/gpa.svg)](https://codeclimate.com/github/fazibear/defql) [![Build Status](https://travis-ci.org/fazibear/defql.svg?branch=master)](https://travis-ci.org/fazibear/defql)
Create elixir functions with SQL as a body.
## Installation
If [available in Hex](https://hex.pm/docs/publish), the package can be installed
by adding `defql` to your list of dependencies in `mix.exs`:```elixir
defp deps do
[
{:defql, "~> 0.1.1"},
{:postgrex, ">= 0.13.0"}, # optional
]
end
```### Configuration
It requires `adapter` key, and adapter specific options.
Use with ecto:
```elixir
config :defql, connection: [
adapter: Defql.Adapter.Ecto.Postgres,
repo: YourApp.Repo
]
```Use standalone connection:
```elixir
config :defql, connection: [
adapter: Defql.Adapter.Postgres,
hostname: "localhost",
username: "username",
password: "password",
database: "my_db",
pool: DBConnection.Poolboy,
pool_size: 1
]
```## Usage
We can define module to have access to our database:
```elixir
defmodule UserQuery do
use Defqldefselect get(conds), table: :users, columns: [:name, :email]
definsert add(params), table: :users
defupdate update(params, conds), table: :users
defdelete delete(conds), table: :usersdefquery get_by_name(name, limit) do
"SELECT * FROM users WHERE name = $name LIMIT $limit"
end
end
```Right now we have easy access to `users` in database:
```elixir
UserQuery.get(id: "3") # => {:ok, [%{...}]}
UserQuery.add(name: "Smbdy") # => {:ok, [%{...}]}
UserQuery.update([name: "Other"],[id: "2"]) # => {:ok, [%{...}]}
UserQuery.delete(id: "2") # => {:ok, [%{...}]}UserQuery.get_by_name("Ela", 4) # => {:ok, [%{...}, %{...}]}
```We can also define common table for the whole module.
```elixir
defmodule UserQuery do
use Defql, table: :usersdefselect get(conds), columns: [:name, :email]
definsert add(params)
defupdate update(params, conds)
defdelete delete(conds)
end
````%{...}` It's a hash with user properties straight from database.
Supported condition statements:
- `user_id: [1,2,3,4]`
- `user_id: {:in, [1,2,3,4,5]}`
- `name: {:like, "%john%"}`
- `name: {:ilike, "%john"}`## TODO
- [ ] MySQL support
- [ ] Cleanup ECTO adapter
- [ ] Support database errors
- [ ] Transactions## Thank you!
[![Become Patreon](https://c5.patreon.com/external/logo/become_a_patron_button.png)](https://www.patreon.com/bePatron?u=6912974)