lib/waxx/pg.rb in waxx-0.1.2 vs lib/waxx/pg.rb in waxx-0.1.3

- old
+ new

@@ -141,18 +141,32 @@ vals << q[:where][1] if q[:where] and q[:where][1] vals << q[:having][1] if q[:having] and q[:having][1] #[sql.join(" "), vals.flatten] Waxx.debug sql Waxx.debug vals.join(", ") - x.db[@db].exec(sql.join(" "), vals.flatten) + begin + x.db[@db].exec(sql.join(" "), vals.flatten) + rescue => e + if e =~ /connection/ + x.db[@db].reset + x.db[@db].exec(sql.join(" "), vals.flatten) + else + raise e + end + end end def get_by_id(x, id, select=nil, view:nil) get(x, id: id, select: select, view: view).first end alias by_id get_by_id + def get_by_ulid(x, ulid, select=nil, view:nil) + get(x, select: select, view: view, where: ["ulid = $1", [ulid]]).first + end + alias by_ulid get_by_ulid + def post(x, data, cols:nil, returning:nil, view:nil, &blk) if view cols = view.columns.select{|n,c| c[:table] == @table} else cols ||= @columns @@ -191,13 +205,11 @@ sql = "UPDATE #{@table} SET " set = [] vals = [] ret = [] i = 1 - Waxx.debug "data: #{data}" cols.each{|n,v| - Waxx.debug "col: #{n}: #{v.inspect}" if data.has_key? n.to_s or data.has_key? n.to_sym set << "#{n} = $#{i}" vals << cast(v, data/n) ret << n.to_s i += 1 @@ -206,14 +218,14 @@ sql << set.join(",") sql << " WHERE #{@pkey} = $#{i} #{where} RETURNING #{returning || ret.join(",")}" vals << id Waxx.debug(sql) Waxx.debug(vals) - x.db[@db].exec(sql, vals).first + x.db[@db].exec(sql, vals).first end alias patch put - + def put_post(x, id, data, cols:nil, returning:nil, view: nil) q = nil q = get_by_id(x, id, @pkey) if id.to_i > 0 return post(x, data, cols: cols, returning: returning, view: view) if q.nil? put(x, id, data, cols: cols, returning: returning, view: view) @@ -228,11 +240,11 @@ else val end end - def delete(x, id) - x.db[@db].exec("DELETE FROM #{@table} WHERE #{@pkey} = $1", [id]) + def delete(x, id, where: nil) + x.db[@db].exec("DELETE FROM #{@table} WHERE #{@pkey} = $1 #{where}", [id]) end def order(req_order, default_order='') return default_order if req_order.nil? return orders[req_order.to_sym] if orders.has_key? req_order.to_sym