CQL is a SQL toolkit for Crystal, inspired by Ruby's Sequel and Java's jOOQ.
NOTE: Currently only supports PostgreSQL, mainly. See ticket #1
Add this to your application's shard.yml
:
dependencies:
cql:
github: aisrael/cql
require "cql"
db = CQL.connect("postgres://postgres:@localhost/database")
Or, if the environment variable DATABASE_URL
is set, just
db = CQL.connect
create_table = CQL::Command::CreateTable.new(db, "users")
create_table.column("id", CQL::SERIAL, null: false, primary_key: true)
create_table.column("name", CQL::VARCHAR, size: 40, null: false, unique: true)
sql = create_table.to_s # => "CREATE TABLE users (id SERIAL NOT NULL PRIMARY KEY, name VARCHAR(40) NOT NULL UNIQUE)"
create_table.exec # => exec(sql)
insert = CQL::Command::Insert.new(db, "users").column("name")
sql = insert.to_s # => "INSERT INTO users (name) VALUES ($1)"
insert.exec("test") # => exec(sql, "test")
delete = CQL::Command::Delete.new(db, "users").where(name: "test")
sql = delete.to_s # => "DELETE FROM users WHERE name = $1"
delete.exec # => exec(sql, "test")
db.create_table("foobar").column("id", CQL::INTEGER).exec
db.insert("foobar").column("id").exec(123)
db.count("users").as_i64
users_table = CQL::Schema.new(CQL.postgres, User, "users",
id: Int32,
name: String
)
users_table.count # => 0
users_table.insert.values("test") # => exec("INSERT INTO users (name) VALUES ($1)",
users_table.count # => 1
users = users_table.all # => query_all("SELECT id, name FROM users")
users.first.id # => 1
users.first.name # => "test"
user_id_1 = users_table.where(id: 1).one
user_id_1.id # => 1
user_id_1.name # => "test"
users_named_test = users_table.where(name: "test").all
users_named_test.first.id # => 1
users_named_test.first.name # => "test"
users_table.where(id: 1).delete # => 1
users_table.count # => 0
TODO: Write development instructions here
- Fork it ( https://github.com/aisrael/cql/fork )
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create a new Pull Request
- aisrael Alistair A. Israel - creator, maintainer