2017-06-15 11:40:35 +00:00
/* Work in progress. Check back later! */
package main
import "log"
import "errors"
import "database/sql"
import "./query_gen/lib"
2017-06-19 08:06:54 +00:00
var forums [ ] Forum // The IDs for a forum tend to be low and sequential for the most part, so we can get more performance out of using a slice instead of a map AND it has better concurrency
var forum_perms map [ int ] map [ int ] ForumPerms // [gid][fid]Perms
var fstore ForumStore // :soon:
var forumCapCount int
2017-06-15 11:40:35 +00:00
var err_noforum = errors . New ( "This forum doesn't exist" )
type ForumStore interface
{
Get ( int ) ( * Forum , error )
CascadeGet ( int ) ( * Forum , error )
BypassGet ( int ) ( * Forum , error )
//Update(Forum) error
//CascadeUpdate(Forum) error
//Delete(int) error
//CascadeDelete(int) error
//QuickCreate(string, string, bool, string) (*Forum, error)
Exists ( int ) bool
}
type StaticForumStore struct
{
get * sql . Stmt
get_all * sql . Stmt
}
func NewStaticForumStore ( ) * StaticForumStore {
get_stmt , err := qgen . Builder . SimpleSelect ( "forums" , "name, desc, active, preset, topicCount, lastTopic, lastTopicID, lastReplyer, lastReplyerID, lastTopicTime" , "fid = ?" , "" , "" )
if err != nil {
log . Fatal ( err )
}
get_all_stmt , err := qgen . Builder . SimpleSelect ( "forums" , "fid, name, desc, active, preset, topicCount, lastTopic, lastTopicID, lastReplyer, lastReplyerID, lastTopicTime" , "" , "fid ASC" , "" )
if err != nil {
log . Fatal ( err )
}
return & StaticForumStore {
get : get_stmt ,
get_all : get_all_stmt ,
}
}
func ( sfs * StaticForumStore ) Get ( id int ) ( * Forum , error ) {
if ! ( ( id <= forumCapCount ) && ( id >= 0 ) && forums [ id ] . Name != "" ) {
return nil , err_noforum
}
return & forums [ id ] , nil
}
func ( sfs * StaticForumStore ) CascadeGet ( id int ) ( * Forum , error ) {
if ! ( ( id <= forumCapCount ) && ( id >= 0 ) && forums [ id ] . Name != "" ) {
return nil , err_noforum
}
return & forums [ id ] , nil
}
func ( sfs * StaticForumStore ) BypassGet ( id int ) ( * Forum , error ) {
var forum Forum = Forum { ID : id }
err := sfs . get . QueryRow ( id ) . Scan ( & forum . Name , & forum . Desc , & forum . Active , & forum . Preset , & forum . TopicCount , & forum . LastTopic , & forum . LastTopicID , & forum . LastReplyer , & forum . LastReplyerID , & forum . LastTopicTime )
if err != nil {
return nil , err
}
return & forum , nil
}
func ( sfs * StaticForumStore ) Exists ( id int ) bool {
return ( id <= forumCapCount ) && ( id >= 0 ) && forums [ id ] . Name != ""
}