本文整理匯總了Golang中ftnox/com/db.ModelTx類的典型用法代碼示例。如果您正苦於以下問題:Golang ModelTx類的具體用法?Golang ModelTx怎麽用?Golang ModelTx使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。
在下文中一共展示了ModelTx類的11個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: SaveAPIKey
func SaveAPIKey(tx *db.ModelTx, apiKey *APIKey) *APIKey {
_, err := tx.Exec(
`INSERT INTO auth_api_key (`+APIKeyModel.FieldsInsert+`)
VALUES (`+APIKeyModel.Placeholders+`)`,
apiKey,
)
if err != nil {
panic(err)
}
return apiKey
}
示例2: UpdateDepositSetStatus
// NOTE: This should be called in a serializable transaction to ensure that
// the user's balance gets updated in a safe manner.
func UpdateDepositSetStatus(tx *db.ModelTx, depositId int64, status int32) {
updated := time.Now().Unix()
_, err := tx.Exec(
`UPDATE account_deposit
SET status=?, updated=?
WHERE id=?`,
status, updated, depositId,
)
if err != nil {
panic(err)
}
}
示例3: UpdatePriceLog
func UpdatePriceLog(tx *db.ModelTx, plog *PriceLog) {
_, err := tx.Exec(
`UPDATE exchange_price_log
SET low=?, high=?, close=?, ask_volume=?, bid_volume=?
WHERE market=? AND interval=? AND time=?`,
plog.Low, plog.High, plog.Close, plog.AskVolume, plog.BidVolume,
plog.Market, plog.Interval, plog.Time,
)
if err != nil {
panic(err)
}
}
示例4: SavePriceLog
func SavePriceLog(tx *db.ModelTx, plog *PriceLog) *PriceLog {
err := tx.QueryRow(
`INSERT INTO exchange_price_log (`+PriceLogModel.FieldsInsert+`)
VALUES (`+PriceLogModel.Placeholders+`)
RETURNING id`,
plog,
).Scan(&plog.Id)
if err != nil {
panic(err)
}
return plog
}
示例5: UpdateOrder
func UpdateOrder(tx *db.ModelTx, order *Order) {
order.Updated = time.Now().Unix()
_, err := tx.Exec(
`UPDATE exchange_order
SET status=?, filled=?, basis_filled=?, updated=?
WHERE id=?`,
order.Status, order.Filled, order.BasisFilled, order.Updated, order.Id,
)
if err != nil {
panic(err)
}
}
示例6: SaveTrade
func SaveTrade(tx *db.ModelTx, trade *Trade) *Trade {
if trade.Time == 0 {
trade.Time = time.Now().Unix()
}
err := tx.QueryRow(
`INSERT INTO exchange_trade (`+TradeModel.FieldsInsert+`)
VALUES (`+TradeModel.Placeholders+`)
RETURNING id`,
trade,
).Scan(&trade.Id)
if err != nil {
panic(err)
}
return trade
}
示例7: SaveOrder
func SaveOrder(tx *db.ModelTx, order *Order) *Order {
if order.Time == 0 {
order.Time = time.Now().Unix()
}
err := tx.QueryRow(
`INSERT INTO exchange_order (`+OrderModel.FieldsInsert+`)
VALUES (`+OrderModel.Placeholders+`)
RETURNING id`,
order,
).Scan(&order.Id)
if err != nil {
panic(err)
}
return order
}
示例8: SaveOrUpdatePriceLog
func SaveOrUpdatePriceLog(tx *db.ModelTx, plog *PriceLog) {
var exists int
err := tx.QueryRow(
`SELECT 1 FROM exchange_price_log
WHERE market=? AND interval=? AND time=?`,
plog.Market, plog.Interval, plog.Time,
).Scan(&exists)
switch db.GetErrorType(err) {
case sql.ErrNoRows:
SavePriceLog(tx, plog)
case nil:
UpdatePriceLog(tx, plog)
default:
panic(err)
}
}
示例9: UpdateWithdrawals
func UpdateWithdrawals(tx *db.ModelTx, wthIds []interface{}, oldStatus, newStatus int, wtxId int64) {
if len(wthIds) == 0 {
return
}
res, err := tx.Exec(
`UPDATE account_withdrawal
SET status=?, wtx_id=?, updated=?
WHERE status=? AND id IN (`+Placeholders(len(wthIds))+`)`,
append([]interface{}{newStatus, wtxId, time.Now().Unix(), oldStatus}, wthIds...)...,
)
if err != nil {
panic(err)
}
count, err := res.RowsAffected()
if err != nil {
panic(err)
}
if int(count) != len(wthIds) {
panic(NewError("Unexpected affected rows count: %v Expected %v", count, len(wthIds)))
}
}
示例10: UpdatePaymentsSpent
func UpdatePaymentsSpent(tx *db.ModelTx, paymentIds []interface{}, oldStatus, newStatus int, wtxId int64) {
if len(paymentIds) == 0 {
return
}
now := time.Now().Unix()
res, err := tx.Exec(
`UPDATE payment
SET spent=?, wtx_id=?, updated=?
WHERE spent=? AND id IN (`+Placeholders(len(paymentIds))+`)`,
append([]interface{}{newStatus, wtxId, now, oldStatus}, paymentIds...)...,
)
if err != nil {
panic(err)
}
count, err := res.RowsAffected()
if int(count) != len(paymentIds) {
panic(NewError("Unexpected affected rows count: %v Expected %v", count, len(paymentIds)))
}
if err != nil {
panic(err)
}
}
示例11: UpdateBalanceByWallet
// Adds or subtracts an amount to a user's wallet.
// nonnegative: panics with INSUFFICIENT_FUNDS_ERROR if resulting balance is negative.
// Returns the new balance
func UpdateBalanceByWallet(tx *db.ModelTx, userId int64, wallet string, coin string, diff int64, nonnegative bool) *Balance {
var balance Balance
// Get existing balance.
err := tx.QueryRow(
`SELECT `+BalanceModel.FieldsSimple+`
FROM account_balance WHERE
user_id=? AND wallet=? AND coin=?`,
userId, wallet, coin,
).Scan(&balance)
// Ensure nonnegative
if nonnegative && balance.Amount+diff < 0 {
panic(INSUFFICIENT_FUNDS_ERROR)
}
// First time balance?
if err == sql.ErrNoRows {
// Create new balance
balance := Balance{UserId: userId, Wallet: wallet, Coin: coin, Amount: diff}
SaveBalance(tx, &balance)
return &balance
}
// Update balance
balance.Amount += diff
_, err = tx.Exec(
`UPDATE account_balance
SET amount=?
WHERE user_id=? AND wallet=? AND coin=?`,
balance.Amount, userId, wallet, coin,
)
if err != nil {
panic(err)
}
return &balance
}