crystal-mimer v0.1.0

crystal-mimer

Mimer SQL database driver for Crystal, built on the crystal-db interface.

Prerequisites

  • Mimer SQL installed with libmimerapi available on your library path
  • Crystal >= 1.0.0

Installation

Add to your shard.yml:

dependencies:
  mimer:
    github: majorproblem/crystal-mimer
    version: ~> 0.1.0

Then run:

shards install

Usage

require "mimer"

DB.open("mimer://USER:PASSWORD@/DATABASE") do |db|
  # DDL
  db.exec "CREATE TABLE users (id INTEGER, name NVARCHAR(100), active BOOLEAN)"

  # Parameterized insert
  db.exec "INSERT INTO users VALUES (?, ?, ?)", 1, "Alice", true

  # Query
  db.query "SELECT id, name, active FROM users" do |rs|
    rs.each do
      id     = rs.read(Int32)
      name   = rs.read(String)
      active = rs.read(Bool)
      puts "#{id}: #{name} (active=#{active})"
    end
  end

  # Scalar query
  count = db.query_one "SELECT COUNT(*) FROM users", as: Int32

  # Nullable column
  name = db.query_one "SELECT name FROM users WHERE id = ?", 99, as: String?
end

Connection URI

mimer://USER:PASSWORD@/DATABASE          # local database
mimer://USER:PASSWORD@SERVER/DATABASE   # network connection via server alias

Transactions

Transactions use the Mimer C API (MimerBeginTransaction / MimerEndTransaction) rather than SQL statements:

DB.open("mimer://USER:PASSWORD@/DATABASE") do |db|
  db.transaction do |tx|
    tx.connection.exec "INSERT INTO users VALUES (?, ?, ?)", 2, "Bob", false
    # raises → automatic rollback
  end
end

Supported types

Crystal type Mimer SQL type
Int32 INTEGER
Int64 BIGINT
Float64 DOUBLE PRECISION, FLOAT
String NVARCHAR, VARCHAR, CHAR
Bool BOOLEAN
Nil / nilable NULL

Running the tests

Tests require a live Mimer SQL instance and a writable databank:

MIMER_DATABASE=testdb MIMER_USER=SYSADM MIMER_PASSWORD=SYSADM crystal spec

License

MIT — see LICENSE.

Repository

crystal-mimer

Owner
Statistic
  • 0
  • 0
  • 0
  • 0
  • 1
  • about 5 hours ago
  • June 29, 2026
License

MIT License

Links
Synced at

Mon, 29 Jun 2026 14:32:28 GMT

Languages