node package manager

bass-migrations

bass-migrations

Migration library for Conga.js + Bass.js , built on top of DB-MIGRATE

Installation

Add the bass-migration dependency in package.json.

"dependencies":{

	"bass-migrations":"*"
}

Make sure all the dependencies are installed:

$ npm install

Configuration

The following configuration options are available to you in, bass.migrations.connection and bass.migrations.directory. Put this in app/config/config.yml

# configuration for Bass.js
bass:

    # connections
    connections:
        mysql.default:
            ...
            ...

    # configuration for bass-migrations
    migrations:
    
        # the connection name to use, under bass.connections
        connection: mysql.default
        
        # the path to generate and read migrations
        directory: %kernel.project_path%/_resources/migrations

Commands

To generate a migration:

$ conga bass:migrations:generate <name-of-migration>

To run all available migrations:

$ conga bass:migrations:migrate

To execute a specific migration:

$ conga bass:migrations:execute <name-of-migration> --up
$ conga bass:migrations:execute <name-of-migration> --down

Examples

Here are some usage examples for implementing migrations:

Simple

var Migration = require('bass-migrations').Migration;
module.exports = Migration;

Migration.singleton()

	.verbose(true)

	.up('alter table my_table modify column name varchar(100) null')

	.down('alter table my_table modify column name varchar(100) not null');

Simple with Parameters

var Migration = require('bass-migrations').Migration;
module.exports = Migration;

Migration.singleton()

	.up('insert into my_table (name) values (?)', ["my name"])

	.down('delete from my_table where name = ?', ["my name"]);

Custom Finish Methods

var Migration = require('bass-migrations').Migration;
module.exports = Migration;

Migration.singleton()

	.up('alter table my_table modify column name varchar(100) null')
	.up('alter table other_table add column status int(32) not null')

	.finishUp(function(db, callback)
	{
		console.log('The UP queries have finished!');

		callback();
	})

	.down('alter table my_table modify column name varchar(100) not null')
	.down('alter table other_table drop column status')

	.finishDown(function(db, callback)
	{
		console.log('The DOWN queries have finished!');

		callback();
	});

Callback for individual query

var Migration = require('bass-migrations').Migration;
module.exports = Migration;

Migration.singleton()

	.up('alter table my_table modify column name varchar(100) null', null, function(callback)
	{
		console.log('The first UP query has finished');
		callback();
	})

	.up('alter table other_table add column status int(32) not null')

	.down('alter table my_table modify column name varchar(100) not null')
	.down('alter table other_table drop column status');

CongaJS Container Migrations

Container migrations will boot the CongaJS kernel and expose the app's service container in your migration. See below for an example:

var Migration = require('bass-migrations').ContainerMigration;
module.exports = Migration;

Migration.singleton()
	
	.up('alter table my_table add column foo varchar(100) null')
	
	.finishUp(function(db, cb) {
		
		var container = Migration.singleton().getContainer();
		
		var param = container.get('some.param');
		
		// etc...
	});