sqlite-orm

0.2.4 • Public • Published

sqlite-orm

NPM version Build Status Dependency Status Coverage Status

the ORM framework for sqlite

Install

$ npm install --save sqlite-orm

Usage

The coffeescript sample code

Mapper = require 'sqlite-orm'
path = require 'path'
Migration = Mapper.Migration
ModelBase = Mapper.ModelBase
 
Migration.createTable 'ParentModel'(t) ->
  t.addColumn 'name''TEXT'
 
Migration.createTable 'ChildModel'(t) ->
  t.addColumn 'name''TEXT'
  t.addReference 'parentModelId''ParentModel'
 
class ChildModel
  ModelBase.includeInto this
  constructor: (params) -> @initModel params
  @initAssos: ->
    @belongsTo ParentModel
 
class ParentModel
  ModelBase.includeInto this
  constructor: (params) -> @initModel params
  @initAssos: ->
    @hasOne ChildModel
 
mapper = new Mapper path.resolve(__dirname'test.db')
mapper.sync()

The corresponding javascript code.

var Mapper = require('sqlite-orm');
var Migration = Mapper.Migration;
var ModelBase = Mapper.ModelBase;
var path = require('path');
 
Migration.createTable('ParentModel', function(t) {
  t.addColumn('name', 'TEXT');
});
 
Migration.createTable('ChildModel', function(t) {
  t.addColumn('name', 'TEXT');
  t.addReference('parentModelId', 'ParentModel');
});
 
function ParentModel(params) {
  this.initModel(params);
}
ModelBase.includeInto(ParentModel);
 
function ChildModel(params) {
  this.initModel(params);
}
ModelBase.includeInto(ChildModel);
 
ParentModel.initAssos(function() {
  ParentModel.hasOne(ChildModel);
});
ChildModel.initAssos(function() {
  ChildModel.belongsTo(ParentModel);
});
 
mapper = new Mapper(path.resolve(__dirname, 'test.db'));
mapper.sync().then(function() {
});

More sample can refer to below sites:

API

Mapper

  • sync function() synchronize the model definition and the database

    • return: Promise
  • close function() close the database

    • return: Promise
  • beginTransaction: function() begin the transaction.

  • endTransaction: function() end the transaction.

  • scopeTransaction: function(callback) make the callback invoke in the transaction, after this callback complete, endTransaction will invoke automatically.

  • @Migration Migration get the Migration class

  • @ModelBase ModelBase get the ModelBase class

  • @INTEGER String the INTEGER data type

  • @REAL String the REAL data type

  • @TEXT String the TEXT data type

  • @BLOB String the BLOB data type

  • DATETIME String the Date date type. If declare DATETIME, then the type of this attribute will be Date.

  • BOOL String the Bool date type.

Migration

  • @createTable: function(tableName, callback) create the database table

    • tableName: String

    • callback: function(tableInfo) create the columns in this callback

      • tableInfo: TableInfo the class to create the columns and index
  • @clear: function() clear the table definition

TableInfo

  • addColumn: function(name, type, opts) add the table column

    • name: String the column name

    • type: String the column data type, such as INTEGER or TEXT

    • opts: Object the column options

  • createIndex: function(indexName, columns) add index for the specific column

    • indexName: String the index name.
    • columns: Array each item of columns is the column name that need index.
  • addReference: function(name, tableName, opts) add foreign key

    • name: the column name that need index

    • tableName: the name of table that the index will point to

    • opts: Object the index options

ModelBase

  • @initAssos: function() declare the association

    all the subclass must implement this interface to declare the association

  • @hasOne: function(ChildModel, opts) declare this Model has one child Model

    • ChildModel: ModelBase or String the child Model class or class name.

    • opts: Object the options used for hasOne association

      • as: String(optional) the property name to refer to the ChildModel instance, the default value is "#{childModel}". e.g. ChildModel is 'ChildModel', then the as value is childModel
  • @hasMany: function(ChildModel, opts) declare this Model has many children.

    • ChildModel: ModelBase or String the child Model class or class name.

    • opts: Object the options used for hasOne association

      • as: String(optional) the property name to refer to the ChildModel instances, the default value is "#{childModels}". e.g. ChildModel is 'ChildModel', then the as value is childModels
  • @hasManyBelongsTo: function(TargetModel, opts) declare this Model and the target Model is N-N connection. The description of this connection can refer to rails association guide

    • TargetModel: ModelBase or String the target Model class or class name.

    • opts: Object the options used for this association.

      • midTableName: String the reference table name.
      • sourceThrough: String the column foreign key name that refer the Model.
      • targetThrough: String the column foreign key name that refer the TargetModel.
      • as: String just like @hasMany or @hasOne
  • @belongsTo: function(ParentModel, opts) declare this Model is member of ParentModel

    • ParentModel: ModelBase or String the parent Model class or class name.

    • opts: Object the options used for hasOne association

      • through: String(optional) the column name that used for foreign key, the default value is "#{ParentModel}#{primaryKey}". e.g. ParentModel name is 'ParentModel', primaryKey is 'id', then the foreign key is parentModelId.

      • as: String(optional) the property name to refer to the ParentModel instance, the default value is "#{ParentModel}". e.g. ParentModel is 'ParentModel', then the as value is parentModel

  • @new: function(obj) create a new model object, not saved into database

    obj: Object the attributes list

  • @create: function(obj) just like @new, but save into database

  • @drop: function() drop the table

  • @destroy: function() destroy this model object and delete the db row.

  • @find: function(where, opts) find the object that match the where statement

  • @findAll: function(where, opts) find all of object match the condition

Contributing

In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using gulp.

License

Copyright (c) 2015 liuxiong. Licensed under the MIT license.

Readme

Keywords

none

Package Sidebar

Install

npm i sqlite-orm

Weekly Downloads

3

Version

0.2.4

License

MIT

Last publish

Collaborators

  • liuxiong332