// get nearest entry that's lower and steal it's rank
nearestEntry:=&Entry{}
scanErr:=db.QueryRow("SELECT * FROM Entries WHERE score < $1 AND rank!= -1 AND board=$2 ORDER BY score DESC LIMIT 1;",entry.Score,entry.Board).Scan(nearestEntry.Intake()...)
ifscanErr==nil{
entry.Rank=nearestEntry.Rank
entry.Commit()
// update all ranks lower than itself
tx,_:=db.Begin()
stmt,_:=tx.Prepare("UPDATE Entries SET rank=rank+1 WHERE rank >=$1 AND id!=$2 AND board=$3;")
_,err:=stmt.Exec(entry.Rank,entry.ID,entry.Board)
iferr!=nil{
tx.Rollback()
fmt.Println(err)
}else{
tx.Commit()
}
}else{
// nothing to beat
scanErr=db.QueryRow("SELECT * FROM Entries WHERE score >= $1 AND rank!= -1 AND board=$2 ORDER BY score ASC LIMIT 1;",entry.Score,entry.Board).Scan(nearestEntry.Intake()...)
ifscanErr==nil{
entry.Rank=nearestEntry.Rank+1
entry.Commit()
}else{
// no other entries
entry.Rank=1
entry.Commit()
}
}
}
funcupdateMainRank(p*Player){
rows,err:=db.Query("SELECT * FROM Entries WHERE player = $1 AND board > 2 ORDER BY score DESC LIMIT $2;",p.ID,100)
varcountint64=0
varsumint64=0
iferr==nil{
forrows.Next(){
entry:=&Entry{}
scanErr:=rows.Scan(entry.Intake()...)
ifscanErr==nil{
count++
sum+=entry.Score
}else{
fmt.Println(scanErr)
return
}
}
ifcount>0&&sum>0{
mainEntry:=&Entry{
Player:p.ID,
Board:1,
}
average:=sum/count
//fmt.Printf("Average of %d/%d is %d\n", sum, count, average)
dne:=db.QueryRow("SELECT * FROM Entries WHERE board=$1 AND player=$2",1,p.ID).Scan(mainEntry.Intake()...)
ifdne==nil{
tx,_:=db.Begin()
stmt,_:=tx.Prepare("UPDATE Entries SET rank=rank-1 WHERE rank >$1 AND id!=$2 AND board=$3;")