Commit ad86eb98 authored by 张振华's avatar 张振华

table

parent ec776a94
......@@ -56,12 +56,13 @@ func (g *Guess) rollbackIndex(log *gty.ReceiptGuessGame) (kvs []*types.KeyValue)
return kvs
}
func (g *Guess) execDelLocal(receiptData *types.ReceiptData) (*types.LocalDBSet, error) {
func (g *Guess) execDelLocal(receipt *types.ReceiptData) (*types.LocalDBSet, error) {
dbSet := &types.LocalDBSet{}
if receiptData.GetTy() != types.ExecOk {
if receipt.GetTy() != types.ExecOk {
return dbSet, nil
}
/*
for _, log := range receiptData.Logs {
switch log.GetTy() {
case gty.TyLogGuessGameStart, gty.TyLogGuessGameBet, gty.TyLogGuessGameStopBet, gty.TyLogGuessGameAbort, gty.TyLogGuessGamePublish, gty.TyLogGuessGameTimeout:
......@@ -72,7 +73,28 @@ func (g *Guess) execDelLocal(receiptData *types.ReceiptData) (*types.LocalDBSet,
kv := g.rollbackIndex(receiptGame)
dbSet.KV = append(dbSet.KV, kv...)
}
}*/
table := gty.NewTable(g.GetLocalDB())
for _, item := range receipt.Logs {
var gameLog gty.ReceiptGuessGame
err := types.Decode(item.Log, &gameLog)
if err != nil {
return nil, err
}
gameLog.Status = gameLog.PreStatus
gameLog.Index = gameLog.PreIndex
err = table.Replace(&gameLog)
if err != nil {
return nil, err
}
kvs, err := table.Save()
if err != nil {
return nil, err
}
dbSet.KV = append(dbSet.KV, kvs...)
}
return dbSet, nil
}
......
......@@ -60,6 +60,8 @@ func (g *Guess) execLocal(receipt *types.ReceiptData) (*types.LocalDBSet, error)
if receipt.GetTy() != types.ExecOk {
return dbSet, nil
}
/*
for i := 0; i < len(receipt.Logs); i++ {
item := receipt.Logs[i]
if item.Ty >= gty.TyLogGuessGameStart && item.Ty <= gty.TyLogGuessGameTimeout {
......@@ -72,6 +74,28 @@ func (g *Guess) execLocal(receipt *types.ReceiptData) (*types.LocalDBSet, error)
dbSet.KV = append(dbSet.KV, kv...)
}
}
*/
table := gty.NewTable(g.GetLocalDB())
for _, item := range receipt.Logs {
if item.Ty >= gty.TyLogGuessGameStart && item.Ty <= gty.TyLogGuessGameTimeout {
var gameLog gty.ReceiptGuessGame
err := types.Decode(item.Log, &gameLog)
if err != nil {
return nil, err
}
err = table.Replace(&gameLog)
if err != nil {
return nil, err
}
kvs, err := table.Save()
if err != nil {
return nil, err
}
dbSet.KV = append(dbSet.KV, kvs...)
}
}
return dbSet, nil
}
......
package types
import (
"fmt"
"github.com/33cn/chain33/common/db"
"github.com/33cn/chain33/common/db/table"
"github.com/33cn/chain33/types"
)
/*
table struct
data: guess
index: addr,status,addr_status,admin,admin_status,category_status
*/
var opt = &table.Option{
Prefix: "LODB",
Name: "guess",
Primary: "gameid",
Index: []string{"addr", "status", "addr_status", "admin", "admin_status", "category_status"},
}
//NewTable 新建表
func NewTable(kvdb db.KV) *table.Table {
rowmeta := NewGuessRow()
table, err := table.NewTable(rowmeta, kvdb, opt)
if err != nil {
panic(err)
}
return table
}
//OracleRow table meta 结构
type GuessRow struct {
*ReceiptGuessGame
}
//NewOracleRow 新建一个meta 结构
func NewGuessRow() *GuessRow {
return &GuessRow{ReceiptGuessGame: &ReceiptGuessGame{}}
}
//CreateRow 新建数据行(注意index 数据一定也要保存到数据中,不能就保存eventid)
func (tx *GuessRow) CreateRow() *table.Row {
return &table.Row{Data: &ReceiptGuessGame{}}
}
//SetPayload 设置数据
func (tx *GuessRow) SetPayload(data types.Message) error {
if txdata, ok := data.(*ReceiptGuessGame); ok {
tx.ReceiptGuessGame = txdata
return nil
}
return types.ErrTypeAsset
}
//Get 按照indexName 查询 indexValue
func (tx *GuessRow) Get(key string) ([]byte, error) {
if key == "gameid" {
return []byte(tx.GameID), nil
} else if key == "status" {
return []byte(fmt.Sprintf("%2d", tx.Status)), nil
} else if key == "addr" {
return []byte(tx.Addr), nil
} else if key == "addr_status" {
return []byte(fmt.Sprintf("%s:%2d", tx.Addr, tx.Status)), nil
} else if key == "admin" {
return []byte(tx.AdminAddr), nil
}else if key == "admin_status" {
return []byte(fmt.Sprintf("%s:%2d", tx.AdminAddr, tx.Status)), nil
} else if key == "category_status" {
return []byte(fmt.Sprintf("%s:%2d", tx.Category, tx.Status)), nil
}
return nil, types.ErrNotFound
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment