Example #1
0
 def _task((vers,desc)):
   sql = (
     """
     INSERT INTO `%s` (version, description) VALUES ('%s','%s');
     """
   ) % (table, vers, desc)
   
   task = tempfile(sql) >> db_task(dbcmd)
   return logtask("Reverting database version to %s" % vers, logger, task)
Example #2
0
def undo(logger, dbcmd, schema_dir, table="_version_"):
  def _exec(file):
    return (
      (openfile(file)    >> 
         db_task(dbcmd)) >>
         always(db_revert_for_schema_file(logger,dbcmd,file))
    )

  def _execfiles(files):
    return Task.all([_exec(f) for f in files])
  
  listtask = schema_version_undo_files(logger, dbcmd, schema_dir, table)
  task = listtask >> _execfiles

  return logtask("Undo last migration", logger, task)
Example #3
0
def do(logger, dbcmd, schema_dir, table="_version_" ):
  def _exec(file):
    return (
      (openfile(file)    >> 
         db_task(dbcmd)) >>
         always(db_update_for_schema_file(logger,dbcmd,file))
    )

  def _execfiles(files):
    return Task.all([_exec(f) for f in files])

  inittask  = init(logger, dbcmd, table)
  checktask = check(logger, dbcmd, schema_dir, table)
  task = (inittask >> always(checktask)) >> _execfiles

  return logtask("Running local migrations", logger, task)
Example #4
0
def init(logger, dbcmd, table="_version_" ):
  
  sql = (
    """
    CREATE TABLE IF NOT EXISTS `%s` (
      id INT(11) AUTO_INCREMENT PRIMARY KEY,
      version CHAR(14),
      description TEXT NULL,
      commit CHAR(40),
      revert BIT DEFAULT 0
    );
    """
  ) % (table)

  return logtask("Preparing database", logger, 
                 tempfile(sql) >> db_task(dbcmd)
         )
Example #5
0
def check(logger, dbcmd, schema_dir, table="_version_" ):
  matcher = flip(applyf)(split_schema_files_at_version)
  snd = lambda (_,x): x
  
  task = Task.all([
           db_current_version(logger,dbcmd,table),
           schema_files(logger,schema_dir)
         ]).fmap( matcher )
  
  msgs = lambda (previous,pending): (
           [ "no schema migrations applied" if len(previous) == 0 else (
               "schema migrations applied: %d\nlatest: %s" % (
                 len(previous), previous[-1] )
             ),
             "no pending schema migrations found" if len(pending) == 0 else (
              "pending schema migrations found: %d\n%s" % (
                len(pending), "\n".join([os.path.basename(f) for f in pending])  )
             )
           ]
         )

  return logtask("Checking current state", logger, 
           logresult_info(msgs, logger, task).fmap(snd)
         )