Skip to content

Instantly share code, notes, and snippets.

@wlaurance
Created April 15, 2014 21:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wlaurance/10780456 to your computer and use it in GitHub Desktop.
Save wlaurance/10780456 to your computer and use it in GitHub Desktop.
tempus db index
pg = require 'pg'
{dev} = require "#{__dirname}/../database"
devConfig = "postgres://#{dev.user}:#{dev.password}@localhost/#{dev.database}"
constring = process.env.HEROKU_POSTGRESQL_NAVY_URL or process.env.TRAVIS_DB_URL or devConfig
{EventEmitter} = require 'events'
Database = (callback) ->
pg.connect constring, callback
class Transaction extends EventEmitter
constructor: ()->
Database (err, client, done) =>
if err
@emit 'error', err
else
@client = client
@done = done
@begin()
begin: ->
@client.query 'BEGIN', (err)=>
if err
@emit 'error', err
else
@emit 'begin'
query: (statement, cb)->
statement = if typeof statement.toQuery is 'function' then statement.toQuery() else statement
@client.query statement, (err, rows) =>
if err
@rollback()
else
cb rows
rollback: () ->
@client.query 'ROLLBACK', (err) =>
@done err
@emit 'rollback', err
commit: (obj)->
@client.query 'COMMIT', (err) =>
@done()
@emit 'commit', obj
module.exports = Database
module.exports.Transaction = Transaction
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment