jennifer_sqlite3_adapter

SQLite3 adapter for Jennifer ORM sqlite3 adapter
0.3.0 released

Jennifer SQLite3 adapter Build Status Latest Release Docs

SQLite3 adapter for Jennifer.

Installation

  1. Add the dependency to your shard.yml:
dependencies:
  jennifer_sqlite3_adapter:
    github: imdrasil/jennifer_sqlite3_adapter
    version: "~> 0.3.0"
  1. Run shards install

Usage

This shard supports Jennifer 0.9.0 and above. It is tested with SQLite 3.22.0 version.

require "jennifer"
require "jennifer_sqlite3_adapter"

Jennifer::Config.configure do |conf|
  conf.adapter = "sqlite3"
  conf.host = "."
  conf.db = "test.db"
end

user and password configuration is not required as database is SQLite doesn't provide db-user authentication and they are ignored. host options is used to specify path to db-file, db - file name.

As

Supported data types

| Method | SQLite3 | Crystal type | | --- | --- | --- | | #bool | INTEGER | Bool | | #integer | INTEGER | Int32 | | #bigint | INTEGER | Int32 | | #short | INTEGER | Int32 | | #tinyint | INTEGER | Int32 | | #float| REAL | Float64 | | #double | REAL | Float64 | | #real | REAL | Float64 | | #text | TEXT | String | | #string | TEXT | String | | #varchar | TEXT | String | | #time | TEXT | Time | | #timestamp | TEXT | Time |

Altering table

SQLite has no mechanism to alter existing table (except renaming it). Therefore operations, listed below, do multiple steps to achieve altering table: coping table schema to new temp table, coping data to new table, extending new table with required options, dropping old table and renaming temp table to original name:

  • dropping column
  • changing column
  • adding foreign key
  • dropping foreign key

It is necessary to notice that all those operations keep all data and indexes.

Foreign key

At a startup adapter automatically enable foreign keys executing PRAGMA foreign_keys = ON. But be aware using migrations - as described above, some table manipulations will recreate a table. To avoid breaking of any foreign key, adapter will try to disable them until the end of a manipulation, but this is possible only outside of a transaction. Therefore in a such kind of migrations add with_transaction false at the class body to disable automatic transaction around migration methods.

Contributing

  1. Fork it (https://github.com/imdrasil/jennifer_sqlite3_adapter/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

jennifer_sqlite3_adapter:
  github: imdrasil/jennifer_sqlite3_adapter
  version: ~> 0.3.0
License MIT
Crystal 0.34.0

Authors

Dependencies 1

  • sqlite3 0.16.0
    {'github' => 'crystal-lang/crystal-sqlite3', 'version' => '0.16.0'}

Development Dependencies 2

  • jennifer 0.9.0
    {'github' => 'imdrasil/jennifer.cr', 'version' => '0.9.0'}
  • sam
    {'github' => 'imdrasil/sam.cr'}

Dependents 1

Last synced .
search fire star recently