crystal-db v0.5.0

Common db api for crystal

Releases:

  • v0.5.0 - December 29, 2017
  • v0.4.4 - December 29, 2017
  • v0.4.3 - November 8, 2017
  • v0.4.2 - November 8, 2017
  • v0.4.1 - April 10, 2017

Dependencies:

Owner:

Build Status

crystal-db

Common db api for crystal. You will need to have a specific driver to access a database.

Installation

Add this to your application's shard.yml:

dependencies:
  db:
    github: crystal-lang/crystal-db

Documentation

Usage

Since this is an abstract db api, it's usage is through a concrete database driver.

require "db"
require "sqlite3"

DB.open "sqlite3:./file.db" do |db|
  # When using the pg driver, use $1, $2, etc. instead of ?
  db.exec "create table contacts (name text, age integer)"
  db.exec "insert into contacts values (?, ?)", "John Doe", 30

  args = [] of DB::Any
  args << "Sarah"
  args << 33
  db.exec "insert into contacts values (?, ?)", args

  puts "max age:"
  puts db.scalar "select max(age) from contacts" # => 33

  puts "contacts:"
  db.query "select name, age from contacts order by age desc" do |rs|
    puts "#{rs.column_name(0)} (#{rs.column_name(1)})"
    # => name (age)
    rs.each do
      puts "#{rs.read(String)} (#{rs.read(Int32)})"
      # => Sarah (33)
      # => John Doe (30)
    end
  end
end

Roadmap

Issues not yet addressed

  • [x] Support non prepared statements. #25
  • [x] Time data type. (implementation details depends on actual drivers)
  • [x] Data type extensibility. Allow each driver to extend the data types allowed.
  • [x] Transactions & nested transactions. #27
  • [x] Connection pool.
  • [ ] Direct access to IO to avoid memory allocation for blobs.

Contributing

  1. Fork it ( https://github.com/crystal-lang/crystal-db/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

  • bcardiff Brian J. Cardiff - creator, maintainer

v0.5.1 (2017-11-07)

  • Fix QueryMethods#query_one? handling no rows. (#86, thanks @robdavid)
  • Documentation improvements. (#87, #82, #76, thanks @wontruefree, @Heaven31415, @vtambourine)

v0.5.0 (2017-12-29)

  • Fix compatibility issues for crystal 0.24.0. No changes in the api.

v0.4.4 (2017-12-29)

  • Allow query results to be read as named tuples directly (see #56, thanks @Nephos)
  • Fix sqlite samples in documentation (see #71, thanks @hinrik)

v0.4.3 (2017-11-07)

  • Fix connections were not released when building invalid statements. (see #65, thanks @crisward)
  • Fix some exceptions were not deriving from DB::Error. (see #70, thanks @exts)

v0.4.2 (2017-04-21)

  • Fix compatibility issues for crystal 0.22.0

v0.4.1 (2017-04-10)

  • Add spec helper for drivers. #48
  • Add #query_each. #18
  • Fix #read(T.class) to deal better with unhandled types.

v0.4.0 (2017-03-20)

  • Add DB.connect to create non pooled connections
  • Add Database#checkout to allow explicit checkout/release connection (see #38)
  • Fix Mapping.from_rs closes the result_set
  • Fix Mapping works with nilable types (see #40, thanks @RX14)

v0.3.3 (2016-12-24)

  • Fix compatibility issues for crystal 0.20.3

v0.3.2 (2016-12-16)

  • Allow connection pool retry logic in #scalar queries.

v0.3.1 (2016-12-15)

  • Add ConnectionRefused exception to flag issues when opening new connections.

v0.3.0 (2016-12-14)

  • Add support for non prepared statements. #25

  • Add support for transactions & nested transactions. #27

  • Add Bool and Time to DB::Any.

v0.2.2 (2016-12-06)

This release requires crystal 0.20.1

  • Changed default connection pool size limit is now 0 (unlimited).

  • Fixed allow new connections right away if pool can be increased.

~~v0.2.1 (2016-12-06)~~ [YANKED]

v0.2.0 (2016-10-20)

  • Fixed release DB connection if an exception occurs during execution of a query (thanks @ggiraldez)

~~v0.1.1 (2016-09-28)~~ [YANKED]

This release requires crystal 0.19.2

Note: v0.1.1 is yanked since is incompatible with v0.1.0 more.

  • Added connection pool. DB.open works with a underlying connection pool. Use Database#using_connection to ensure the same connection is been used across multiple statements. more

  • Added mappings. JSON/YAML-like mapping macros (thanks @spalladino) more

  • Changed require ResultSet implementors to just implement read, optionally implementing read(T.class).

v0.1.0 (2016-06-24)

  • Initial release
Github statistic:
  • 145
  • 30
  • 21
  • 23
  • about 1 month ago

License:

MIT License

Links: