diff --git a/alerts.go b/alerts.go index 902e076d..bc36461c 100644 --- a/alerts.go +++ b/alerts.go @@ -122,7 +122,7 @@ func buildAlert(asid int, event string, elementType string, actorID int, targetU } func notifyWatchers(asid int64) { - rows, err := get_watchers_stmt.Query(asid) + rows, err := getWatchersStmt.Query(asid) if err != nil && err != ErrNoRows { log.Fatal(err.Error()) return @@ -147,7 +147,7 @@ func notifyWatchers(asid int64) { var actorID, targetUserID, elementID int var event, elementType string - err = get_activity_entry_stmt.QueryRow(asid).Scan(&actorID, &targetUserID, &event, &elementType, &elementID) + err = getActivityEntryStmt.QueryRow(asid).Scan(&actorID, &targetUserID, &event, &elementType, &elementID) if err != nil && err != ErrNoRows { log.Fatal(err.Error()) return diff --git a/auth.go b/auth.go index dd6388e9..5896fb83 100644 --- a/auth.go +++ b/auth.go @@ -162,7 +162,7 @@ func (auth *DefaultAuth) CreateSession(uid int) (session string, err error) { return "", err } - _, err = update_session_stmt.Exec(session, uid) + _, err = updateSessionStmt.Exec(session, uid) if err != nil { return "", err } diff --git a/cache.go b/cache.go index f5a0c397..692b1652 100644 --- a/cache.go +++ b/cache.go @@ -11,7 +11,7 @@ const CACHE_SQL int = 2 // ErrCacheDesync is thrown whenever a piece of data, for instance, a user is out of sync with the database. Currently unused. var ErrCacheDesync = errors.New("The cache is out of sync with the database.") // TODO: A cross-server synchronisation mechanism -// ErrStoreCapacityOverflow is thrown whenever a datastore reaches it's maximum hard capacity. I'm not sure *if* this one is used, at the moment. Probably. +// ErrStoreCapacityOverflow is thrown whenever a datastore reaches it's maximum hard capacity. I'm not sure if this error is actually used. var ErrStoreCapacityOverflow = errors.New("This datastore has reached it's maximum capacity.") // nolint @@ -22,6 +22,7 @@ type DataStore interface { //GetGlobalCount() } +// nolint type DataCache interface { CacheGet(id int) (interface{}, error) CacheGetUnsafe(id int) (interface{}, error) diff --git a/config.go b/config.go index 2493b837..d08afbaf 100644 --- a/config.go +++ b/config.go @@ -29,16 +29,16 @@ func init() { config.TopicCacheCapacity = 200 // The max number of topics held in memory // Email - config.SmtpServer = "" - config.SmtpUsername = "" - config.SmtpPassword = "" - config.SmtpPort = "25" + config.SMTPServer = "" + config.SMTPUsername = "" + config.SMTPPassword = "" + config.SMTPPort = "25" // Misc config.DefaultRoute = routeTopics config.DefaultGroup = 3 // Should be a setting in the database config.ActivationGroup = 5 // Should be a setting in the database - config.StaffCss = "staff_post" + config.StaffCSS = "staff_post" config.UncategorisedForumVisible = true config.MinifyTemplates = false config.MultiServer = false // Experimental: Enable Cross-Server Synchronisation and several other features diff --git a/errors.go b/errors.go index 2a7cdaad..4ca0aa29 100644 --- a/errors.go +++ b/errors.go @@ -11,8 +11,8 @@ import "runtime/debug" var errorBufferMutex sync.RWMutex var errorBuffer []error -//var notfound_count_per_second int -//var noperms_count_per_second int +//var notfoundCountPerSecond int +//var nopermsCountPerSecond int var errorInternal []byte var errorNotfound []byte @@ -83,6 +83,24 @@ func InternalErrorJS(err error, w http.ResponseWriter, r *http.Request) { log.Fatal(err) } +// ? - Where is this used? Is it actually used? Should we use it more? +// LoginRequired is an error shown to the end-user when they try to access an area which requires them to login +func LoginRequired(w http.ResponseWriter, r *http.Request, user User) { + w.WriteHeader(401) + pi := Page{"Local Error", user, hvars, tList, "You need to login to do that."} + if preRenderHooks["pre_render_error"] != nil { + if runPreRenderHook("pre_render_error", w, r, &user, &pi) { + return + } + } + var b bytes.Buffer + err := templates.ExecuteTemplate(&b, "error.html", pi) + if err != nil { + LogError(err) + } + fmt.Fprintln(w, b.String()) +} + func PreError(errmsg string, w http.ResponseWriter, r *http.Request) { w.WriteHeader(500) user := User{ID: 0, Group: 6, Perms: GuestPerms} @@ -100,38 +118,6 @@ func PreError(errmsg string, w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, b.String()) } -func LocalError(errmsg string, w http.ResponseWriter, r *http.Request, user User) { - w.WriteHeader(500) - pi := Page{"Local Error", user, hvars, tList, errmsg} - if preRenderHooks["pre_render_error"] != nil { - if runPreRenderHook("pre_render_error", w, r, &user, &pi) { - return - } - } - var b bytes.Buffer - err := templates.ExecuteTemplate(&b, "error.html", pi) - if err != nil { - LogError(err) - } - fmt.Fprintln(w, b.String()) -} - -func LoginRequired(w http.ResponseWriter, r *http.Request, user User) { - w.WriteHeader(401) - pi := Page{"Local Error", user, hvars, tList, "You need to login to do that."} - if preRenderHooks["pre_render_error"] != nil { - if runPreRenderHook("pre_render_error", w, r, &user, &pi) { - return - } - } - var b bytes.Buffer - err := templates.ExecuteTemplate(&b, "error.html", pi) - if err != nil { - LogError(err) - } - fmt.Fprintln(w, b.String()) -} - func PreErrorJS(errmsg string, w http.ResponseWriter, r *http.Request) { w.WriteHeader(500) _, _ = w.Write([]byte(`{"errmsg":"` + errmsg + `"}`)) @@ -158,6 +144,23 @@ func PreErrorJSQ(errmsg string, w http.ResponseWriter, r *http.Request, isJs boo } } +// LocalError is an error shown to the end-user when something goes wrong and it's not the software's fault +func LocalError(errmsg string, w http.ResponseWriter, r *http.Request, user User) { + w.WriteHeader(500) + pi := Page{"Local Error", user, hvars, tList, errmsg} + if preRenderHooks["pre_render_error"] != nil { + if runPreRenderHook("pre_render_error", w, r, &user, &pi) { + return + } + } + var b bytes.Buffer + err := templates.ExecuteTemplate(&b, "error.html", pi) + if err != nil { + LogError(err) + } + fmt.Fprintln(w, b.String()) +} + func LocalErrorJSQ(errmsg string, w http.ResponseWriter, r *http.Request, user User, isJs bool) { w.WriteHeader(500) if !isJs { @@ -183,6 +186,7 @@ func LocalErrorJS(errmsg string, w http.ResponseWriter, r *http.Request) { _, _ = w.Write([]byte(`{'errmsg': '` + errmsg + `'}`)) } +// NoPermissions is an error shown to the end-user when they try to access an area which they aren't authorised to access func NoPermissions(w http.ResponseWriter, r *http.Request, user User) { w.WriteHeader(403) pi := Page{"Local Error", user, hvars, tList, "You don't have permission to do that."} @@ -220,6 +224,7 @@ func NoPermissionsJSQ(w http.ResponseWriter, r *http.Request, user User, isJs bo } } +// ? - Is this actually used? Should it be used? A ban in Gosora should be more of a permission revocation to stop them posting rather than something which spits up an error page, right? func Banned(w http.ResponseWriter, r *http.Request, user User) { w.WriteHeader(403) pi := Page{"Banned", user, hvars, tList, "You have been banned from this site."} @@ -237,6 +242,7 @@ func Banned(w http.ResponseWriter, r *http.Request, user User) { } // nolint +// BannedJSQ is the version of the banned error page which handles both JavaScript requests and normal page loads func BannedJSQ(w http.ResponseWriter, r *http.Request, user User, isJs bool) { w.WriteHeader(403) if !isJs { diff --git a/extend.go b/extend.go index 4b95da32..a015b2da 100644 --- a/extend.go +++ b/extend.go @@ -79,6 +79,8 @@ var preRenderHooks = map[string][]func(http.ResponseWriter, *http.Request, *User "pre_render_security_error": nil, } +// ? - Should we make this an interface which plugins implement instead? +// Plugin is a struct holding the metadata for a plugin, along with a few of it's primary handlers. type Plugin struct { UName string Name string @@ -100,8 +102,9 @@ type Plugin struct { Hooks map[string]int } +// LoadPlugins polls the database to see which plugins have been activated and which have been installed func LoadPlugins() error { - rows, err := get_plugins_stmt.Query() + rows, err := getPluginsStmt.Query() if err != nil { return err } diff --git a/files.go b/files.go index 425905af..3093320a 100644 --- a/files.go +++ b/files.go @@ -24,7 +24,7 @@ type SFile struct { FormattedModTime string } -type CssData struct { +type CSSData struct { ComingSoon string } diff --git a/forum_store.go b/forum_store.go index 4ee7a15a..47dae81f 100644 --- a/forum_store.go +++ b/forum_store.go @@ -106,7 +106,7 @@ func (mfs *MemoryForumStore) LoadForums() error { addForum(&Forum{0, buildForumURL(nameToSlug("Uncategorised"), 0), "Uncategorised", "", config.UncategorisedForumVisible, "all", 0, "", 0, "", "", 0, "", 0, ""}) - rows, err := get_forums_stmt.Query() + rows, err := getForumsStmt.Query() if err != nil { return err } @@ -290,7 +290,7 @@ func (mfs *MemoryForumStore) IncrementTopicCount(id int) error { if err != nil { return err } - _, err = add_topics_to_forum_stmt.Exec(1, id) + _, err = addTopicsToForumStmt.Exec(1, id) if err != nil { return err } @@ -303,7 +303,7 @@ func (mfs *MemoryForumStore) DecrementTopicCount(id int) error { if err != nil { return err } - _, err = remove_topics_from_forum_stmt.Exec(1, id) + _, err = removeTopicsFromForumStmt.Exec(1, id) if err != nil { return err } @@ -318,7 +318,7 @@ func (mfs *MemoryForumStore) UpdateLastTopic(topicName string, tid int, username return err } - _, err = update_forum_cache_stmt.Exec(topicName, tid, username, uid, fid) + _, err = updateForumCacheStmt.Exec(topicName, tid, username, uid, fid) if err != nil { return err } @@ -334,7 +334,7 @@ func (mfs *MemoryForumStore) UpdateLastTopic(topicName string, tid int, username func (mfs *MemoryForumStore) Create(forumName string, forumDesc string, active bool, preset string) (int, error) { forumCreateMutex.Lock() - res, err := create_forum_stmt.Exec(forumName, forumDesc, active, preset) + res, err := createForumStmt.Exec(forumName, forumDesc, active, preset) if err != nil { return 0, err } diff --git a/gen_mysql.go b/gen_mysql.go index bd89378f..a78691a6 100644 --- a/gen_mysql.go +++ b/gen_mysql.go @@ -8,122 +8,121 @@ import "log" import "database/sql" // nolint -var get_user_stmt *sql.Stmt -var get_reply_stmt *sql.Stmt -var get_user_reply_stmt *sql.Stmt -var get_password_stmt *sql.Stmt -var get_settings_stmt *sql.Stmt -var get_setting_stmt *sql.Stmt -var get_full_setting_stmt *sql.Stmt -var get_full_settings_stmt *sql.Stmt -var get_groups_stmt *sql.Stmt -var get_forums_stmt *sql.Stmt -var get_forums_permissions_stmt *sql.Stmt -var get_plugins_stmt *sql.Stmt -var get_themes_stmt *sql.Stmt -var get_widgets_stmt *sql.Stmt -var is_plugin_active_stmt *sql.Stmt -var get_users_stmt *sql.Stmt -var get_users_offset_stmt *sql.Stmt -var get_word_filters_stmt *sql.Stmt -var is_theme_default_stmt *sql.Stmt -var get_modlogs_stmt *sql.Stmt -var get_modlogs_offset_stmt *sql.Stmt -var get_reply_tid_stmt *sql.Stmt -var get_topic_fid_stmt *sql.Stmt -var get_user_reply_uid_stmt *sql.Stmt -var has_liked_topic_stmt *sql.Stmt -var has_liked_reply_stmt *sql.Stmt -var get_user_name_stmt *sql.Stmt -var get_user_active_stmt *sql.Stmt -var get_emails_by_user_stmt *sql.Stmt -var get_topic_basic_stmt *sql.Stmt -var get_activity_entry_stmt *sql.Stmt -var forum_entry_exists_stmt *sql.Stmt -var group_entry_exists_stmt *sql.Stmt -var get_forum_topics_offset_stmt *sql.Stmt -var get_expired_scheduled_groups_stmt *sql.Stmt -var get_sync_stmt *sql.Stmt -var get_topic_replies_offset_stmt *sql.Stmt -var get_topic_list_stmt *sql.Stmt -var get_topic_user_stmt *sql.Stmt -var get_topic_by_reply_stmt *sql.Stmt -var get_topic_replies_stmt *sql.Stmt -var get_forum_topics_stmt *sql.Stmt -var get_profile_replies_stmt *sql.Stmt -var get_watchers_stmt *sql.Stmt -var create_topic_stmt *sql.Stmt -var create_report_stmt *sql.Stmt -var create_reply_stmt *sql.Stmt -var create_action_reply_stmt *sql.Stmt -var create_like_stmt *sql.Stmt -var add_activity_stmt *sql.Stmt -var notify_one_stmt *sql.Stmt -var add_email_stmt *sql.Stmt -var create_profile_reply_stmt *sql.Stmt -var add_subscription_stmt *sql.Stmt -var create_forum_stmt *sql.Stmt -var add_forum_perms_to_forum_stmt *sql.Stmt -var add_plugin_stmt *sql.Stmt -var add_theme_stmt *sql.Stmt -var create_group_stmt *sql.Stmt -var add_modlog_entry_stmt *sql.Stmt -var add_adminlog_entry_stmt *sql.Stmt -var create_word_filter_stmt *sql.Stmt -var add_forum_perms_to_group_stmt *sql.Stmt -var replace_schedule_group_stmt *sql.Stmt -var add_replies_to_topic_stmt *sql.Stmt -var remove_replies_from_topic_stmt *sql.Stmt -var add_topics_to_forum_stmt *sql.Stmt -var remove_topics_from_forum_stmt *sql.Stmt -var update_forum_cache_stmt *sql.Stmt -var add_likes_to_topic_stmt *sql.Stmt -var add_likes_to_reply_stmt *sql.Stmt -var edit_topic_stmt *sql.Stmt -var edit_reply_stmt *sql.Stmt -var stick_topic_stmt *sql.Stmt -var unstick_topic_stmt *sql.Stmt -var update_last_ip_stmt *sql.Stmt -var update_session_stmt *sql.Stmt -var set_password_stmt *sql.Stmt -var set_avatar_stmt *sql.Stmt -var set_username_stmt *sql.Stmt -var change_group_stmt *sql.Stmt -var activate_user_stmt *sql.Stmt -var update_user_level_stmt *sql.Stmt -var increment_user_score_stmt *sql.Stmt -var increment_user_posts_stmt *sql.Stmt -var increment_user_bigposts_stmt *sql.Stmt -var increment_user_megaposts_stmt *sql.Stmt -var increment_user_topics_stmt *sql.Stmt -var edit_profile_reply_stmt *sql.Stmt -var update_forum_stmt *sql.Stmt -var update_setting_stmt *sql.Stmt -var update_plugin_stmt *sql.Stmt -var update_plugin_install_stmt *sql.Stmt -var update_theme_stmt *sql.Stmt -var update_user_stmt *sql.Stmt -var update_group_perms_stmt *sql.Stmt -var update_group_rank_stmt *sql.Stmt -var update_group_stmt *sql.Stmt -var update_email_stmt *sql.Stmt -var verify_email_stmt *sql.Stmt -var set_temp_group_stmt *sql.Stmt -var update_word_filter_stmt *sql.Stmt -var bump_sync_stmt *sql.Stmt -var delete_reply_stmt *sql.Stmt -var delete_topic_stmt *sql.Stmt -var delete_profile_reply_stmt *sql.Stmt -var delete_forum_perms_by_forum_stmt *sql.Stmt -var delete_activity_stream_match_stmt *sql.Stmt -var delete_word_filter_stmt *sql.Stmt -var report_exists_stmt *sql.Stmt -var group_count_stmt *sql.Stmt -var modlog_count_stmt *sql.Stmt -var add_forum_perms_to_forum_admins_stmt *sql.Stmt -var add_forum_perms_to_forum_staff_stmt *sql.Stmt -var add_forum_perms_to_forum_members_stmt *sql.Stmt -var notify_watchers_stmt *sql.Stmt +var getUserStmt *sql.Stmt +var getReplyStmt *sql.Stmt +var getUserReplyStmt *sql.Stmt +var getPasswordStmt *sql.Stmt +var getSettingsStmt *sql.Stmt +var getSettingStmt *sql.Stmt +var getFullSettingStmt *sql.Stmt +var getFullSettingsStmt *sql.Stmt +var getGroupsStmt *sql.Stmt +var getForumsStmt *sql.Stmt +var getForumsPermissionsStmt *sql.Stmt +var getPluginsStmt *sql.Stmt +var getThemesStmt *sql.Stmt +var getWidgetsStmt *sql.Stmt +var isPluginActiveStmt *sql.Stmt +var getUsersStmt *sql.Stmt +var getUsersOffsetStmt *sql.Stmt +var getWordFiltersStmt *sql.Stmt +var isThemeDefaultStmt *sql.Stmt +var getModlogsStmt *sql.Stmt +var getModlogsOffsetStmt *sql.Stmt +var getReplyTIDStmt *sql.Stmt +var getTopicFIDStmt *sql.Stmt +var getUserReplyUIDStmt *sql.Stmt +var hasLikedTopicStmt *sql.Stmt +var hasLikedReplyStmt *sql.Stmt +var getUserNameStmt *sql.Stmt +var getUserActiveStmt *sql.Stmt +var getEmailsByUserStmt *sql.Stmt +var getTopicBasicStmt *sql.Stmt +var getActivityEntryStmt *sql.Stmt +var forumEntryExistsStmt *sql.Stmt +var groupEntryExistsStmt *sql.Stmt +var getForumTopicsOffsetStmt *sql.Stmt +var getExpiredScheduledGroupsStmt *sql.Stmt +var getSyncStmt *sql.Stmt +var getTopicRepliesOffsetStmt *sql.Stmt +var getTopicListStmt *sql.Stmt +var getTopicUserStmt *sql.Stmt +var getTopicByReplyStmt *sql.Stmt +var getTopicRepliesStmt *sql.Stmt +var getForumTopicsStmt *sql.Stmt +var getProfileRepliesStmt *sql.Stmt +var getWatchersStmt *sql.Stmt +var createTopicStmt *sql.Stmt +var createReportStmt *sql.Stmt +var createReplyStmt *sql.Stmt +var createActionReplyStmt *sql.Stmt +var createLikeStmt *sql.Stmt +var addActivityStmt *sql.Stmt +var notifyOneStmt *sql.Stmt +var addEmailStmt *sql.Stmt +var createProfileReplyStmt *sql.Stmt +var addSubscriptionStmt *sql.Stmt +var createForumStmt *sql.Stmt +var addForumPermsToForumStmt *sql.Stmt +var addPluginStmt *sql.Stmt +var addThemeStmt *sql.Stmt +var createGroupStmt *sql.Stmt +var addModlogEntryStmt *sql.Stmt +var addAdminlogEntryStmt *sql.Stmt +var createWordFilterStmt *sql.Stmt +var addForumPermsToGroupStmt *sql.Stmt +var replaceScheduleGroupStmt *sql.Stmt +var addRepliesToTopicStmt *sql.Stmt +var removeRepliesFromTopicStmt *sql.Stmt +var addTopicsToForumStmt *sql.Stmt +var removeTopicsFromForumStmt *sql.Stmt +var updateForumCacheStmt *sql.Stmt +var addLikesToTopicStmt *sql.Stmt +var addLikesToReplyStmt *sql.Stmt +var editTopicStmt *sql.Stmt +var editReplyStmt *sql.Stmt +var stickTopicStmt *sql.Stmt +var unstickTopicStmt *sql.Stmt +var updateLastIPStmt *sql.Stmt +var updateSessionStmt *sql.Stmt +var setPasswordStmt *sql.Stmt +var setAvatarStmt *sql.Stmt +var setUsernameStmt *sql.Stmt +var changeGroupStmt *sql.Stmt +var activateUserStmt *sql.Stmt +var updateUserLevelStmt *sql.Stmt +var incrementUserScoreStmt *sql.Stmt +var incrementUserPostsStmt *sql.Stmt +var incrementUserBigpostsStmt *sql.Stmt +var incrementUserMegapostsStmt *sql.Stmt +var incrementUserTopicsStmt *sql.Stmt +var editProfileReplyStmt *sql.Stmt +var updateForumStmt *sql.Stmt +var updateSettingStmt *sql.Stmt +var updatePluginStmt *sql.Stmt +var updatePluginInstallStmt *sql.Stmt +var updateThemeStmt *sql.Stmt +var updateUserStmt *sql.Stmt +var updateGroupPermsStmt *sql.Stmt +var updateGroupRankStmt *sql.Stmt +var updateGroupStmt *sql.Stmt +var updateEmailStmt *sql.Stmt +var verifyEmailStmt *sql.Stmt +var setTempGroupStmt *sql.Stmt +var updateWordFilterStmt *sql.Stmt +var bumpSyncStmt *sql.Stmt +var deleteReplyStmt *sql.Stmt +var deleteProfileReplyStmt *sql.Stmt +var deleteForumPermsByForumStmt *sql.Stmt +var deleteActivityStreamMatchStmt *sql.Stmt +var deleteWordFilterStmt *sql.Stmt +var reportExistsStmt *sql.Stmt +var groupCountStmt *sql.Stmt +var modlogCountStmt *sql.Stmt +var addForumPermsToForumAdminsStmt *sql.Stmt +var addForumPermsToForumStaffStmt *sql.Stmt +var addForumPermsToForumMembersStmt *sql.Stmt +var notifyWatchersStmt *sql.Stmt // nolint func _gen_mysql() (err error) { @@ -131,698 +130,692 @@ func _gen_mysql() (err error) { log.Print("Building the generated statements") } - log.Print("Preparing get_user statement.") - get_user_stmt, err = db.Prepare("SELECT `name`,`group`,`is_super_admin`,`avatar`,`message`,`url_prefix`,`url_name`,`level` FROM `users` WHERE `uid` = ?") + log.Print("Preparing getUser statement.") + getUserStmt, err = db.Prepare("SELECT `name`,`group`,`is_super_admin`,`avatar`,`message`,`url_prefix`,`url_name`,`level` FROM `users` WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing get_reply statement.") - get_reply_stmt, err = db.Prepare("SELECT `tid`,`content`,`createdBy`,`createdAt`,`lastEdit`,`lastEditBy`,`ipaddress`,`likeCount` FROM `replies` WHERE `rid` = ?") + log.Print("Preparing getReply statement.") + getReplyStmt, err = db.Prepare("SELECT `tid`,`content`,`createdBy`,`createdAt`,`lastEdit`,`lastEditBy`,`ipaddress`,`likeCount` FROM `replies` WHERE `rid` = ?") if err != nil { return err } - log.Print("Preparing get_user_reply statement.") - get_user_reply_stmt, err = db.Prepare("SELECT `uid`,`content`,`createdBy`,`createdAt`,`lastEdit`,`lastEditBy`,`ipaddress` FROM `users_replies` WHERE `rid` = ?") + log.Print("Preparing getUserReply statement.") + getUserReplyStmt, err = db.Prepare("SELECT `uid`,`content`,`createdBy`,`createdAt`,`lastEdit`,`lastEditBy`,`ipaddress` FROM `users_replies` WHERE `rid` = ?") if err != nil { return err } - log.Print("Preparing get_password statement.") - get_password_stmt, err = db.Prepare("SELECT `password`,`salt` FROM `users` WHERE `uid` = ?") + log.Print("Preparing getPassword statement.") + getPasswordStmt, err = db.Prepare("SELECT `password`,`salt` FROM `users` WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing get_settings statement.") - get_settings_stmt, err = db.Prepare("SELECT `name`,`content`,`type` FROM `settings`") + log.Print("Preparing getSettings statement.") + getSettingsStmt, err = db.Prepare("SELECT `name`,`content`,`type` FROM `settings`") if err != nil { return err } - log.Print("Preparing get_setting statement.") - get_setting_stmt, err = db.Prepare("SELECT `content`,`type` FROM `settings` WHERE `name` = ?") + log.Print("Preparing getSetting statement.") + getSettingStmt, err = db.Prepare("SELECT `content`,`type` FROM `settings` WHERE `name` = ?") if err != nil { return err } - log.Print("Preparing get_full_setting statement.") - get_full_setting_stmt, err = db.Prepare("SELECT `name`,`type`,`constraints` FROM `settings` WHERE `name` = ?") + log.Print("Preparing getFullSetting statement.") + getFullSettingStmt, err = db.Prepare("SELECT `name`,`type`,`constraints` FROM `settings` WHERE `name` = ?") if err != nil { return err } - log.Print("Preparing get_full_settings statement.") - get_full_settings_stmt, err = db.Prepare("SELECT `name`,`content`,`type`,`constraints` FROM `settings`") + log.Print("Preparing getFullSettings statement.") + getFullSettingsStmt, err = db.Prepare("SELECT `name`,`content`,`type`,`constraints` FROM `settings`") if err != nil { return err } - log.Print("Preparing get_groups statement.") - get_groups_stmt, err = db.Prepare("SELECT `gid`,`name`,`permissions`,`plugin_perms`,`is_mod`,`is_admin`,`is_banned`,`tag` FROM `users_groups`") + log.Print("Preparing getGroups statement.") + getGroupsStmt, err = db.Prepare("SELECT `gid`,`name`,`permissions`,`plugin_perms`,`is_mod`,`is_admin`,`is_banned`,`tag` FROM `users_groups`") if err != nil { return err } - log.Print("Preparing get_forums statement.") - get_forums_stmt, err = db.Prepare("SELECT `fid`,`name`,`desc`,`active`,`preset`,`parentID`,`parentType`,`topicCount`,`lastTopic`,`lastTopicID`,`lastReplyer`,`lastReplyerID`,`lastTopicTime` FROM `forums` ORDER BY fid ASC") + log.Print("Preparing getForums statement.") + getForumsStmt, err = db.Prepare("SELECT `fid`,`name`,`desc`,`active`,`preset`,`parentID`,`parentType`,`topicCount`,`lastTopic`,`lastTopicID`,`lastReplyer`,`lastReplyerID`,`lastTopicTime` FROM `forums` ORDER BY fid ASC") if err != nil { return err } - log.Print("Preparing get_forums_permissions statement.") - get_forums_permissions_stmt, err = db.Prepare("SELECT `gid`,`fid`,`permissions` FROM `forums_permissions` ORDER BY gid ASC,fid ASC") + log.Print("Preparing getForumsPermissions statement.") + getForumsPermissionsStmt, err = db.Prepare("SELECT `gid`,`fid`,`permissions` FROM `forums_permissions` ORDER BY gid ASC,fid ASC") if err != nil { return err } - log.Print("Preparing get_plugins statement.") - get_plugins_stmt, err = db.Prepare("SELECT `uname`,`active`,`installed` FROM `plugins`") + log.Print("Preparing getPlugins statement.") + getPluginsStmt, err = db.Prepare("SELECT `uname`,`active`,`installed` FROM `plugins`") if err != nil { return err } - log.Print("Preparing get_themes statement.") - get_themes_stmt, err = db.Prepare("SELECT `uname`,`default` FROM `themes`") + log.Print("Preparing getThemes statement.") + getThemesStmt, err = db.Prepare("SELECT `uname`,`default` FROM `themes`") if err != nil { return err } - log.Print("Preparing get_widgets statement.") - get_widgets_stmt, err = db.Prepare("SELECT `position`,`side`,`type`,`active`,`location`,`data` FROM `widgets` ORDER BY position ASC") + log.Print("Preparing getWidgets statement.") + getWidgetsStmt, err = db.Prepare("SELECT `position`,`side`,`type`,`active`,`location`,`data` FROM `widgets` ORDER BY position ASC") if err != nil { return err } - log.Print("Preparing is_plugin_active statement.") - is_plugin_active_stmt, err = db.Prepare("SELECT `active` FROM `plugins` WHERE `uname` = ?") + log.Print("Preparing isPluginActive statement.") + isPluginActiveStmt, err = db.Prepare("SELECT `active` FROM `plugins` WHERE `uname` = ?") if err != nil { return err } - log.Print("Preparing get_users statement.") - get_users_stmt, err = db.Prepare("SELECT `uid`,`name`,`group`,`active`,`is_super_admin`,`avatar` FROM `users`") + log.Print("Preparing getUsers statement.") + getUsersStmt, err = db.Prepare("SELECT `uid`,`name`,`group`,`active`,`is_super_admin`,`avatar` FROM `users`") if err != nil { return err } - log.Print("Preparing get_users_offset statement.") - get_users_offset_stmt, err = db.Prepare("SELECT `uid`,`name`,`group`,`active`,`is_super_admin`,`avatar` FROM `users` LIMIT ?,?") + log.Print("Preparing getUsersOffset statement.") + getUsersOffsetStmt, err = db.Prepare("SELECT `uid`,`name`,`group`,`active`,`is_super_admin`,`avatar` FROM `users` LIMIT ?,?") if err != nil { return err } - log.Print("Preparing get_word_filters statement.") - get_word_filters_stmt, err = db.Prepare("SELECT `wfid`,`find`,`replacement` FROM `word_filters`") + log.Print("Preparing getWordFilters statement.") + getWordFiltersStmt, err = db.Prepare("SELECT `wfid`,`find`,`replacement` FROM `word_filters`") if err != nil { return err } - log.Print("Preparing is_theme_default statement.") - is_theme_default_stmt, err = db.Prepare("SELECT `default` FROM `themes` WHERE `uname` = ?") + log.Print("Preparing isThemeDefault statement.") + isThemeDefaultStmt, err = db.Prepare("SELECT `default` FROM `themes` WHERE `uname` = ?") if err != nil { return err } - log.Print("Preparing get_modlogs statement.") - get_modlogs_stmt, err = db.Prepare("SELECT `action`,`elementID`,`elementType`,`ipaddress`,`actorID`,`doneAt` FROM `moderation_logs`") + log.Print("Preparing getModlogs statement.") + getModlogsStmt, err = db.Prepare("SELECT `action`,`elementID`,`elementType`,`ipaddress`,`actorID`,`doneAt` FROM `moderation_logs`") if err != nil { return err } - log.Print("Preparing get_modlogs_offset statement.") - get_modlogs_offset_stmt, err = db.Prepare("SELECT `action`,`elementID`,`elementType`,`ipaddress`,`actorID`,`doneAt` FROM `moderation_logs` LIMIT ?,?") + log.Print("Preparing getModlogsOffset statement.") + getModlogsOffsetStmt, err = db.Prepare("SELECT `action`,`elementID`,`elementType`,`ipaddress`,`actorID`,`doneAt` FROM `moderation_logs` LIMIT ?,?") if err != nil { return err } - log.Print("Preparing get_reply_tid statement.") - get_reply_tid_stmt, err = db.Prepare("SELECT `tid` FROM `replies` WHERE `rid` = ?") + log.Print("Preparing getReplyTID statement.") + getReplyTIDStmt, err = db.Prepare("SELECT `tid` FROM `replies` WHERE `rid` = ?") if err != nil { return err } - log.Print("Preparing get_topic_fid statement.") - get_topic_fid_stmt, err = db.Prepare("SELECT `parentID` FROM `topics` WHERE `tid` = ?") + log.Print("Preparing getTopicFID statement.") + getTopicFIDStmt, err = db.Prepare("SELECT `parentID` FROM `topics` WHERE `tid` = ?") if err != nil { return err } - log.Print("Preparing get_user_reply_uid statement.") - get_user_reply_uid_stmt, err = db.Prepare("SELECT `uid` FROM `users_replies` WHERE `rid` = ?") + log.Print("Preparing getUserReplyUID statement.") + getUserReplyUIDStmt, err = db.Prepare("SELECT `uid` FROM `users_replies` WHERE `rid` = ?") if err != nil { return err } - log.Print("Preparing has_liked_topic statement.") - has_liked_topic_stmt, err = db.Prepare("SELECT `targetItem` FROM `likes` WHERE `sentBy` = ? AND `targetItem` = ? AND `targetType` = 'topics'") + log.Print("Preparing hasLikedTopic statement.") + hasLikedTopicStmt, err = db.Prepare("SELECT `targetItem` FROM `likes` WHERE `sentBy` = ? AND `targetItem` = ? AND `targetType` = 'topics'") if err != nil { return err } - log.Print("Preparing has_liked_reply statement.") - has_liked_reply_stmt, err = db.Prepare("SELECT `targetItem` FROM `likes` WHERE `sentBy` = ? AND `targetItem` = ? AND `targetType` = 'replies'") + log.Print("Preparing hasLikedReply statement.") + hasLikedReplyStmt, err = db.Prepare("SELECT `targetItem` FROM `likes` WHERE `sentBy` = ? AND `targetItem` = ? AND `targetType` = 'replies'") if err != nil { return err } - log.Print("Preparing get_user_name statement.") - get_user_name_stmt, err = db.Prepare("SELECT `name` FROM `users` WHERE `uid` = ?") + log.Print("Preparing getUserName statement.") + getUserNameStmt, err = db.Prepare("SELECT `name` FROM `users` WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing get_user_active statement.") - get_user_active_stmt, err = db.Prepare("SELECT `active` FROM `users` WHERE `uid` = ?") + log.Print("Preparing getUserActive statement.") + getUserActiveStmt, err = db.Prepare("SELECT `active` FROM `users` WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing get_emails_by_user statement.") - get_emails_by_user_stmt, err = db.Prepare("SELECT `email`,`validated`,`token` FROM `emails` WHERE `uid` = ?") + log.Print("Preparing getEmailsByUser statement.") + getEmailsByUserStmt, err = db.Prepare("SELECT `email`,`validated`,`token` FROM `emails` WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing get_topic_basic statement.") - get_topic_basic_stmt, err = db.Prepare("SELECT `title`,`content` FROM `topics` WHERE `tid` = ?") + log.Print("Preparing getTopicBasic statement.") + getTopicBasicStmt, err = db.Prepare("SELECT `title`,`content` FROM `topics` WHERE `tid` = ?") if err != nil { return err } - log.Print("Preparing get_activity_entry statement.") - get_activity_entry_stmt, err = db.Prepare("SELECT `actor`,`targetUser`,`event`,`elementType`,`elementID` FROM `activity_stream` WHERE `asid` = ?") + log.Print("Preparing getActivityEntry statement.") + getActivityEntryStmt, err = db.Prepare("SELECT `actor`,`targetUser`,`event`,`elementType`,`elementID` FROM `activity_stream` WHERE `asid` = ?") if err != nil { return err } - log.Print("Preparing forum_entry_exists statement.") - forum_entry_exists_stmt, err = db.Prepare("SELECT `fid` FROM `forums` WHERE `name` = '' ORDER BY fid ASC LIMIT 0,1") + log.Print("Preparing forumEntryExists statement.") + forumEntryExistsStmt, err = db.Prepare("SELECT `fid` FROM `forums` WHERE `name` = '' ORDER BY fid ASC LIMIT 0,1") if err != nil { return err } - log.Print("Preparing group_entry_exists statement.") - group_entry_exists_stmt, err = db.Prepare("SELECT `gid` FROM `users_groups` WHERE `name` = '' ORDER BY gid ASC LIMIT 0,1") + log.Print("Preparing groupEntryExists statement.") + groupEntryExistsStmt, err = db.Prepare("SELECT `gid` FROM `users_groups` WHERE `name` = '' ORDER BY gid ASC LIMIT 0,1") if err != nil { return err } - log.Print("Preparing get_forum_topics_offset statement.") - get_forum_topics_offset_stmt, err = db.Prepare("SELECT `tid`,`title`,`content`,`createdBy`,`is_closed`,`sticky`,`createdAt`,`lastReplyAt`,`lastReplyBy`,`parentID`,`postCount`,`likeCount` FROM `topics` WHERE `parentID` = ? ORDER BY sticky DESC,lastReplyAt DESC,createdBy DESC LIMIT ?,?") + log.Print("Preparing getForumTopicsOffset statement.") + getForumTopicsOffsetStmt, err = db.Prepare("SELECT `tid`,`title`,`content`,`createdBy`,`is_closed`,`sticky`,`createdAt`,`lastReplyAt`,`lastReplyBy`,`parentID`,`postCount`,`likeCount` FROM `topics` WHERE `parentID` = ? ORDER BY sticky DESC,lastReplyAt DESC,createdBy DESC LIMIT ?,?") if err != nil { return err } - log.Print("Preparing get_expired_scheduled_groups statement.") - get_expired_scheduled_groups_stmt, err = db.Prepare("SELECT `uid` FROM `users_groups_scheduler` WHERE UTC_TIMESTAMP() > `revert_at` AND `temporary` = 1") + log.Print("Preparing getExpiredScheduledGroups statement.") + getExpiredScheduledGroupsStmt, err = db.Prepare("SELECT `uid` FROM `users_groups_scheduler` WHERE UTC_TIMESTAMP() > `revert_at` AND `temporary` = 1") if err != nil { return err } - log.Print("Preparing get_sync statement.") - get_sync_stmt, err = db.Prepare("SELECT `last_update` FROM `sync`") + log.Print("Preparing getSync statement.") + getSyncStmt, err = db.Prepare("SELECT `last_update` FROM `sync`") if err != nil { return err } - log.Print("Preparing get_topic_replies_offset statement.") - get_topic_replies_offset_stmt, err = db.Prepare("SELECT `replies`.`rid`,`replies`.`content`,`replies`.`createdBy`,`replies`.`createdAt`,`replies`.`lastEdit`,`replies`.`lastEditBy`,`users`.`avatar`,`users`.`name`,`users`.`group`,`users`.`url_prefix`,`users`.`url_name`,`users`.`level`,`replies`.`ipaddress`,`replies`.`likeCount`,`replies`.`actionType` FROM `replies` LEFT JOIN `users` ON `replies`.`createdBy` = `users`.`uid` WHERE `tid` = ? LIMIT ?,?") + log.Print("Preparing getTopicRepliesOffset statement.") + getTopicRepliesOffsetStmt, err = db.Prepare("SELECT `replies`.`rid`,`replies`.`content`,`replies`.`createdBy`,`replies`.`createdAt`,`replies`.`lastEdit`,`replies`.`lastEditBy`,`users`.`avatar`,`users`.`name`,`users`.`group`,`users`.`url_prefix`,`users`.`url_name`,`users`.`level`,`replies`.`ipaddress`,`replies`.`likeCount`,`replies`.`actionType` FROM `replies` LEFT JOIN `users` ON `replies`.`createdBy` = `users`.`uid` WHERE `tid` = ? LIMIT ?,?") if err != nil { return err } - log.Print("Preparing get_topic_list statement.") - get_topic_list_stmt, err = db.Prepare("SELECT `topics`.`tid`,`topics`.`title`,`topics`.`content`,`topics`.`createdBy`,`topics`.`is_closed`,`topics`.`sticky`,`topics`.`createdAt`,`topics`.`parentID`,`users`.`name`,`users`.`avatar` FROM `topics` LEFT JOIN `users` ON `topics`.`createdBy` = `users`.`uid` ORDER BY topics.sticky DESC,topics.lastReplyAt DESC,topics.createdBy DESC") + log.Print("Preparing getTopicList statement.") + getTopicListStmt, err = db.Prepare("SELECT `topics`.`tid`,`topics`.`title`,`topics`.`content`,`topics`.`createdBy`,`topics`.`is_closed`,`topics`.`sticky`,`topics`.`createdAt`,`topics`.`parentID`,`users`.`name`,`users`.`avatar` FROM `topics` LEFT JOIN `users` ON `topics`.`createdBy` = `users`.`uid` ORDER BY topics.sticky DESC,topics.lastReplyAt DESC,topics.createdBy DESC") if err != nil { return err } - log.Print("Preparing get_topic_user statement.") - get_topic_user_stmt, err = db.Prepare("SELECT `topics`.`title`,`topics`.`content`,`topics`.`createdBy`,`topics`.`createdAt`,`topics`.`is_closed`,`topics`.`sticky`,`topics`.`parentID`,`topics`.`ipaddress`,`topics`.`postCount`,`topics`.`likeCount`,`users`.`name`,`users`.`avatar`,`users`.`group`,`users`.`url_prefix`,`users`.`url_name`,`users`.`level` FROM `topics` LEFT JOIN `users` ON `topics`.`createdBy` = `users`.`uid` WHERE `tid` = ?") + log.Print("Preparing getTopicUser statement.") + getTopicUserStmt, err = db.Prepare("SELECT `topics`.`title`,`topics`.`content`,`topics`.`createdBy`,`topics`.`createdAt`,`topics`.`is_closed`,`topics`.`sticky`,`topics`.`parentID`,`topics`.`ipaddress`,`topics`.`postCount`,`topics`.`likeCount`,`users`.`name`,`users`.`avatar`,`users`.`group`,`users`.`url_prefix`,`users`.`url_name`,`users`.`level` FROM `topics` LEFT JOIN `users` ON `topics`.`createdBy` = `users`.`uid` WHERE `tid` = ?") if err != nil { return err } - log.Print("Preparing get_topic_by_reply statement.") - get_topic_by_reply_stmt, err = db.Prepare("SELECT `topics`.`tid`,`topics`.`title`,`topics`.`content`,`topics`.`createdBy`,`topics`.`createdAt`,`topics`.`is_closed`,`topics`.`sticky`,`topics`.`parentID`,`topics`.`ipaddress`,`topics`.`postCount`,`topics`.`likeCount`,`topics`.`data` FROM `replies` LEFT JOIN `topics` ON `replies`.`tid` = `topics`.`tid` WHERE `rid` = ?") + log.Print("Preparing getTopicByReply statement.") + getTopicByReplyStmt, err = db.Prepare("SELECT `topics`.`tid`,`topics`.`title`,`topics`.`content`,`topics`.`createdBy`,`topics`.`createdAt`,`topics`.`is_closed`,`topics`.`sticky`,`topics`.`parentID`,`topics`.`ipaddress`,`topics`.`postCount`,`topics`.`likeCount`,`topics`.`data` FROM `replies` LEFT JOIN `topics` ON `replies`.`tid` = `topics`.`tid` WHERE `rid` = ?") if err != nil { return err } - log.Print("Preparing get_topic_replies statement.") - get_topic_replies_stmt, err = db.Prepare("SELECT `replies`.`rid`,`replies`.`content`,`replies`.`createdBy`,`replies`.`createdAt`,`replies`.`lastEdit`,`replies`.`lastEditBy`,`users`.`avatar`,`users`.`name`,`users`.`group`,`users`.`url_prefix`,`users`.`url_name`,`users`.`level`,`replies`.`ipaddress` FROM `replies` LEFT JOIN `users` ON `replies`.`createdBy` = `users`.`uid` WHERE `tid` = ?") + log.Print("Preparing getTopicReplies statement.") + getTopicRepliesStmt, err = db.Prepare("SELECT `replies`.`rid`,`replies`.`content`,`replies`.`createdBy`,`replies`.`createdAt`,`replies`.`lastEdit`,`replies`.`lastEditBy`,`users`.`avatar`,`users`.`name`,`users`.`group`,`users`.`url_prefix`,`users`.`url_name`,`users`.`level`,`replies`.`ipaddress` FROM `replies` LEFT JOIN `users` ON `replies`.`createdBy` = `users`.`uid` WHERE `tid` = ?") if err != nil { return err } - log.Print("Preparing get_forum_topics statement.") - get_forum_topics_stmt, err = db.Prepare("SELECT `topics`.`tid`,`topics`.`title`,`topics`.`content`,`topics`.`createdBy`,`topics`.`is_closed`,`topics`.`sticky`,`topics`.`createdAt`,`topics`.`lastReplyAt`,`topics`.`parentID`,`users`.`name`,`users`.`avatar` FROM `topics` LEFT JOIN `users` ON `topics`.`createdBy` = `users`.`uid` WHERE `topics`.`parentID` = ? ORDER BY topics.sticky DESC,topics.lastReplyAt DESC,topics.createdBy DESC") + log.Print("Preparing getForumTopics statement.") + getForumTopicsStmt, err = db.Prepare("SELECT `topics`.`tid`,`topics`.`title`,`topics`.`content`,`topics`.`createdBy`,`topics`.`is_closed`,`topics`.`sticky`,`topics`.`createdAt`,`topics`.`lastReplyAt`,`topics`.`parentID`,`users`.`name`,`users`.`avatar` FROM `topics` LEFT JOIN `users` ON `topics`.`createdBy` = `users`.`uid` WHERE `topics`.`parentID` = ? ORDER BY topics.sticky DESC,topics.lastReplyAt DESC,topics.createdBy DESC") if err != nil { return err } - log.Print("Preparing get_profile_replies statement.") - get_profile_replies_stmt, err = db.Prepare("SELECT `users_replies`.`rid`,`users_replies`.`content`,`users_replies`.`createdBy`,`users_replies`.`createdAt`,`users_replies`.`lastEdit`,`users_replies`.`lastEditBy`,`users`.`avatar`,`users`.`name`,`users`.`group` FROM `users_replies` LEFT JOIN `users` ON `users_replies`.`createdBy` = `users`.`uid` WHERE `users_replies`.`uid` = ?") + log.Print("Preparing getProfileReplies statement.") + getProfileRepliesStmt, err = db.Prepare("SELECT `users_replies`.`rid`,`users_replies`.`content`,`users_replies`.`createdBy`,`users_replies`.`createdAt`,`users_replies`.`lastEdit`,`users_replies`.`lastEditBy`,`users`.`avatar`,`users`.`name`,`users`.`group` FROM `users_replies` LEFT JOIN `users` ON `users_replies`.`createdBy` = `users`.`uid` WHERE `users_replies`.`uid` = ?") if err != nil { return err } - log.Print("Preparing get_watchers statement.") - get_watchers_stmt, err = db.Prepare("SELECT `activity_subscriptions`.`user` FROM `activity_stream` INNER JOIN `activity_subscriptions` ON `activity_subscriptions`.`targetType` = `activity_stream`.`elementType` AND `activity_subscriptions`.`targetID` = `activity_stream`.`elementID` AND `activity_subscriptions`.`user` != `activity_stream`.`actor` WHERE `asid` = ?") + log.Print("Preparing getWatchers statement.") + getWatchersStmt, err = db.Prepare("SELECT `activity_subscriptions`.`user` FROM `activity_stream` INNER JOIN `activity_subscriptions` ON `activity_subscriptions`.`targetType` = `activity_stream`.`elementType` AND `activity_subscriptions`.`targetID` = `activity_stream`.`elementID` AND `activity_subscriptions`.`user` != `activity_stream`.`actor` WHERE `asid` = ?") if err != nil { return err } - log.Print("Preparing create_topic statement.") - create_topic_stmt, err = db.Prepare("INSERT INTO `topics`(`parentID`,`title`,`content`,`parsed_content`,`createdAt`,`lastReplyAt`,`lastReplyBy`,`ipaddress`,`words`,`createdBy`) VALUES (?,?,?,?,UTC_TIMESTAMP(),UTC_TIMESTAMP(),?,?,?,?)") + log.Print("Preparing createTopic statement.") + createTopicStmt, err = db.Prepare("INSERT INTO `topics`(`parentID`,`title`,`content`,`parsed_content`,`createdAt`,`lastReplyAt`,`lastReplyBy`,`ipaddress`,`words`,`createdBy`) VALUES (?,?,?,?,UTC_TIMESTAMP(),UTC_TIMESTAMP(),?,?,?,?)") if err != nil { return err } - log.Print("Preparing create_report statement.") - create_report_stmt, err = db.Prepare("INSERT INTO `topics`(`title`,`content`,`parsed_content`,`createdAt`,`lastReplyAt`,`createdBy`,`data`,`parentID`,`css_class`) VALUES (?,?,?,UTC_TIMESTAMP(),UTC_TIMESTAMP(),?,?,1,'report')") + log.Print("Preparing createReport statement.") + createReportStmt, err = db.Prepare("INSERT INTO `topics`(`title`,`content`,`parsed_content`,`createdAt`,`lastReplyAt`,`createdBy`,`data`,`parentID`,`css_class`) VALUES (?,?,?,UTC_TIMESTAMP(),UTC_TIMESTAMP(),?,?,1,'report')") if err != nil { return err } - log.Print("Preparing create_reply statement.") - create_reply_stmt, err = db.Prepare("INSERT INTO `replies`(`tid`,`content`,`parsed_content`,`createdAt`,`ipaddress`,`words`,`createdBy`) VALUES (?,?,?,UTC_TIMESTAMP(),?,?,?)") + log.Print("Preparing createReply statement.") + createReplyStmt, err = db.Prepare("INSERT INTO `replies`(`tid`,`content`,`parsed_content`,`createdAt`,`ipaddress`,`words`,`createdBy`) VALUES (?,?,?,UTC_TIMESTAMP(),?,?,?)") if err != nil { return err } - log.Print("Preparing create_action_reply statement.") - create_action_reply_stmt, err = db.Prepare("INSERT INTO `replies`(`tid`,`actionType`,`ipaddress`,`createdBy`) VALUES (?,?,?,?)") + log.Print("Preparing createActionReply statement.") + createActionReplyStmt, err = db.Prepare("INSERT INTO `replies`(`tid`,`actionType`,`ipaddress`,`createdBy`) VALUES (?,?,?,?)") if err != nil { return err } - log.Print("Preparing create_like statement.") - create_like_stmt, err = db.Prepare("INSERT INTO `likes`(`weight`,`targetItem`,`targetType`,`sentBy`) VALUES (?,?,?,?)") + log.Print("Preparing createLike statement.") + createLikeStmt, err = db.Prepare("INSERT INTO `likes`(`weight`,`targetItem`,`targetType`,`sentBy`) VALUES (?,?,?,?)") if err != nil { return err } - log.Print("Preparing add_activity statement.") - add_activity_stmt, err = db.Prepare("INSERT INTO `activity_stream`(`actor`,`targetUser`,`event`,`elementType`,`elementID`) VALUES (?,?,?,?,?)") + log.Print("Preparing addActivity statement.") + addActivityStmt, err = db.Prepare("INSERT INTO `activity_stream`(`actor`,`targetUser`,`event`,`elementType`,`elementID`) VALUES (?,?,?,?,?)") if err != nil { return err } - log.Print("Preparing notify_one statement.") - notify_one_stmt, err = db.Prepare("INSERT INTO `activity_stream_matches`(`watcher`,`asid`) VALUES (?,?)") + log.Print("Preparing notifyOne statement.") + notifyOneStmt, err = db.Prepare("INSERT INTO `activity_stream_matches`(`watcher`,`asid`) VALUES (?,?)") if err != nil { return err } - log.Print("Preparing add_email statement.") - add_email_stmt, err = db.Prepare("INSERT INTO `emails`(`email`,`uid`,`validated`,`token`) VALUES (?,?,?,?)") + log.Print("Preparing addEmail statement.") + addEmailStmt, err = db.Prepare("INSERT INTO `emails`(`email`,`uid`,`validated`,`token`) VALUES (?,?,?,?)") if err != nil { return err } - log.Print("Preparing create_profile_reply statement.") - create_profile_reply_stmt, err = db.Prepare("INSERT INTO `users_replies`(`uid`,`content`,`parsed_content`,`createdAt`,`createdBy`,`ipaddress`) VALUES (?,?,?,UTC_TIMESTAMP(),?,?)") + log.Print("Preparing createProfileReply statement.") + createProfileReplyStmt, err = db.Prepare("INSERT INTO `users_replies`(`uid`,`content`,`parsed_content`,`createdAt`,`createdBy`,`ipaddress`) VALUES (?,?,?,UTC_TIMESTAMP(),?,?)") if err != nil { return err } - log.Print("Preparing add_subscription statement.") - add_subscription_stmt, err = db.Prepare("INSERT INTO `activity_subscriptions`(`user`,`targetID`,`targetType`,`level`) VALUES (?,?,?,2)") + log.Print("Preparing addSubscription statement.") + addSubscriptionStmt, err = db.Prepare("INSERT INTO `activity_subscriptions`(`user`,`targetID`,`targetType`,`level`) VALUES (?,?,?,2)") if err != nil { return err } - log.Print("Preparing create_forum statement.") - create_forum_stmt, err = db.Prepare("INSERT INTO `forums`(`name`,`desc`,`active`,`preset`) VALUES (?,?,?,?)") + log.Print("Preparing createForum statement.") + createForumStmt, err = db.Prepare("INSERT INTO `forums`(`name`,`desc`,`active`,`preset`) VALUES (?,?,?,?)") if err != nil { return err } - log.Print("Preparing add_forum_perms_to_forum statement.") - add_forum_perms_to_forum_stmt, err = db.Prepare("INSERT INTO `forums_permissions`(`gid`,`fid`,`preset`,`permissions`) VALUES (?,?,?,?)") + log.Print("Preparing addForumPermsToForum statement.") + addForumPermsToForumStmt, err = db.Prepare("INSERT INTO `forums_permissions`(`gid`,`fid`,`preset`,`permissions`) VALUES (?,?,?,?)") if err != nil { return err } - log.Print("Preparing add_plugin statement.") - add_plugin_stmt, err = db.Prepare("INSERT INTO `plugins`(`uname`,`active`,`installed`) VALUES (?,?,?)") + log.Print("Preparing addPlugin statement.") + addPluginStmt, err = db.Prepare("INSERT INTO `plugins`(`uname`,`active`,`installed`) VALUES (?,?,?)") if err != nil { return err } - log.Print("Preparing add_theme statement.") - add_theme_stmt, err = db.Prepare("INSERT INTO `themes`(`uname`,`default`) VALUES (?,?)") + log.Print("Preparing addTheme statement.") + addThemeStmt, err = db.Prepare("INSERT INTO `themes`(`uname`,`default`) VALUES (?,?)") if err != nil { return err } - log.Print("Preparing create_group statement.") - create_group_stmt, err = db.Prepare("INSERT INTO `users_groups`(`name`,`tag`,`is_admin`,`is_mod`,`is_banned`,`permissions`) VALUES (?,?,?,?,?,?)") + log.Print("Preparing createGroup statement.") + createGroupStmt, err = db.Prepare("INSERT INTO `users_groups`(`name`,`tag`,`is_admin`,`is_mod`,`is_banned`,`permissions`) VALUES (?,?,?,?,?,?)") if err != nil { return err } - log.Print("Preparing add_modlog_entry statement.") - add_modlog_entry_stmt, err = db.Prepare("INSERT INTO `moderation_logs`(`action`,`elementID`,`elementType`,`ipaddress`,`actorID`,`doneAt`) VALUES (?,?,?,?,?,UTC_TIMESTAMP())") + log.Print("Preparing addModlogEntry statement.") + addModlogEntryStmt, err = db.Prepare("INSERT INTO `moderation_logs`(`action`,`elementID`,`elementType`,`ipaddress`,`actorID`,`doneAt`) VALUES (?,?,?,?,?,UTC_TIMESTAMP())") if err != nil { return err } - log.Print("Preparing add_adminlog_entry statement.") - add_adminlog_entry_stmt, err = db.Prepare("INSERT INTO `administration_logs`(`action`,`elementID`,`elementType`,`ipaddress`,`actorID`,`doneAt`) VALUES (?,?,?,?,?,UTC_TIMESTAMP())") + log.Print("Preparing addAdminlogEntry statement.") + addAdminlogEntryStmt, err = db.Prepare("INSERT INTO `administration_logs`(`action`,`elementID`,`elementType`,`ipaddress`,`actorID`,`doneAt`) VALUES (?,?,?,?,?,UTC_TIMESTAMP())") if err != nil { return err } - log.Print("Preparing create_word_filter statement.") - create_word_filter_stmt, err = db.Prepare("INSERT INTO `word_filters`(`find`,`replacement`) VALUES (?,?)") + log.Print("Preparing createWordFilter statement.") + createWordFilterStmt, err = db.Prepare("INSERT INTO `word_filters`(`find`,`replacement`) VALUES (?,?)") if err != nil { return err } - log.Print("Preparing add_forum_perms_to_group statement.") - add_forum_perms_to_group_stmt, err = db.Prepare("REPLACE INTO `forums_permissions`(`gid`,`fid`,`preset`,`permissions`) VALUES (?,?,?,?)") + log.Print("Preparing addForumPermsToGroup statement.") + addForumPermsToGroupStmt, err = db.Prepare("REPLACE INTO `forums_permissions`(`gid`,`fid`,`preset`,`permissions`) VALUES (?,?,?,?)") if err != nil { return err } - log.Print("Preparing replace_schedule_group statement.") - replace_schedule_group_stmt, err = db.Prepare("REPLACE INTO `users_groups_scheduler`(`uid`,`set_group`,`issued_by`,`issued_at`,`revert_at`,`temporary`) VALUES (?,?,?,UTC_TIMESTAMP(),?,?)") + log.Print("Preparing replaceScheduleGroup statement.") + replaceScheduleGroupStmt, err = db.Prepare("REPLACE INTO `users_groups_scheduler`(`uid`,`set_group`,`issued_by`,`issued_at`,`revert_at`,`temporary`) VALUES (?,?,?,UTC_TIMESTAMP(),?,?)") if err != nil { return err } - log.Print("Preparing add_replies_to_topic statement.") - add_replies_to_topic_stmt, err = db.Prepare("UPDATE `topics` SET `postCount` = `postCount` + ?,`lastReplyBy` = ?,`lastReplyAt` = UTC_TIMESTAMP() WHERE `tid` = ?") + log.Print("Preparing addRepliesToTopic statement.") + addRepliesToTopicStmt, err = db.Prepare("UPDATE `topics` SET `postCount` = `postCount` + ?,`lastReplyBy` = ?,`lastReplyAt` = UTC_TIMESTAMP() WHERE `tid` = ?") if err != nil { return err } - log.Print("Preparing remove_replies_from_topic statement.") - remove_replies_from_topic_stmt, err = db.Prepare("UPDATE `topics` SET `postCount` = `postCount` - ? WHERE `tid` = ?") + log.Print("Preparing removeRepliesFromTopic statement.") + removeRepliesFromTopicStmt, err = db.Prepare("UPDATE `topics` SET `postCount` = `postCount` - ? WHERE `tid` = ?") if err != nil { return err } - log.Print("Preparing add_topics_to_forum statement.") - add_topics_to_forum_stmt, err = db.Prepare("UPDATE `forums` SET `topicCount` = `topicCount` + ? WHERE `fid` = ?") + log.Print("Preparing addTopicsToForum statement.") + addTopicsToForumStmt, err = db.Prepare("UPDATE `forums` SET `topicCount` = `topicCount` + ? WHERE `fid` = ?") if err != nil { return err } - log.Print("Preparing remove_topics_from_forum statement.") - remove_topics_from_forum_stmt, err = db.Prepare("UPDATE `forums` SET `topicCount` = `topicCount` - ? WHERE `fid` = ?") + log.Print("Preparing removeTopicsFromForum statement.") + removeTopicsFromForumStmt, err = db.Prepare("UPDATE `forums` SET `topicCount` = `topicCount` - ? WHERE `fid` = ?") if err != nil { return err } - log.Print("Preparing update_forum_cache statement.") - update_forum_cache_stmt, err = db.Prepare("UPDATE `forums` SET `lastTopic` = ?,`lastTopicID` = ?,`lastReplyer` = ?,`lastReplyerID` = ?,`lastTopicTime` = UTC_TIMESTAMP() WHERE `fid` = ?") + log.Print("Preparing updateForumCache statement.") + updateForumCacheStmt, err = db.Prepare("UPDATE `forums` SET `lastTopic` = ?,`lastTopicID` = ?,`lastReplyer` = ?,`lastReplyerID` = ?,`lastTopicTime` = UTC_TIMESTAMP() WHERE `fid` = ?") if err != nil { return err } - log.Print("Preparing add_likes_to_topic statement.") - add_likes_to_topic_stmt, err = db.Prepare("UPDATE `topics` SET `likeCount` = `likeCount` + ? WHERE `tid` = ?") + log.Print("Preparing addLikesToTopic statement.") + addLikesToTopicStmt, err = db.Prepare("UPDATE `topics` SET `likeCount` = `likeCount` + ? WHERE `tid` = ?") if err != nil { return err } - log.Print("Preparing add_likes_to_reply statement.") - add_likes_to_reply_stmt, err = db.Prepare("UPDATE `replies` SET `likeCount` = `likeCount` + ? WHERE `rid` = ?") + log.Print("Preparing addLikesToReply statement.") + addLikesToReplyStmt, err = db.Prepare("UPDATE `replies` SET `likeCount` = `likeCount` + ? WHERE `rid` = ?") if err != nil { return err } - log.Print("Preparing edit_topic statement.") - edit_topic_stmt, err = db.Prepare("UPDATE `topics` SET `title` = ?,`content` = ?,`parsed_content` = ?,`is_closed` = ? WHERE `tid` = ?") + log.Print("Preparing editTopic statement.") + editTopicStmt, err = db.Prepare("UPDATE `topics` SET `title` = ?,`content` = ?,`parsed_content` = ?,`is_closed` = ? WHERE `tid` = ?") if err != nil { return err } - log.Print("Preparing edit_reply statement.") - edit_reply_stmt, err = db.Prepare("UPDATE `replies` SET `content` = ?,`parsed_content` = ? WHERE `rid` = ?") + log.Print("Preparing editReply statement.") + editReplyStmt, err = db.Prepare("UPDATE `replies` SET `content` = ?,`parsed_content` = ? WHERE `rid` = ?") if err != nil { return err } - log.Print("Preparing stick_topic statement.") - stick_topic_stmt, err = db.Prepare("UPDATE `topics` SET `sticky` = 1 WHERE `tid` = ?") + log.Print("Preparing stickTopic statement.") + stickTopicStmt, err = db.Prepare("UPDATE `topics` SET `sticky` = 1 WHERE `tid` = ?") if err != nil { return err } - log.Print("Preparing unstick_topic statement.") - unstick_topic_stmt, err = db.Prepare("UPDATE `topics` SET `sticky` = 0 WHERE `tid` = ?") + log.Print("Preparing unstickTopic statement.") + unstickTopicStmt, err = db.Prepare("UPDATE `topics` SET `sticky` = 0 WHERE `tid` = ?") if err != nil { return err } - log.Print("Preparing update_last_ip statement.") - update_last_ip_stmt, err = db.Prepare("UPDATE `users` SET `last_ip` = ? WHERE `uid` = ?") + log.Print("Preparing updateLastIP statement.") + updateLastIPStmt, err = db.Prepare("UPDATE `users` SET `last_ip` = ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing update_session statement.") - update_session_stmt, err = db.Prepare("UPDATE `users` SET `session` = ? WHERE `uid` = ?") + log.Print("Preparing updateSession statement.") + updateSessionStmt, err = db.Prepare("UPDATE `users` SET `session` = ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing set_password statement.") - set_password_stmt, err = db.Prepare("UPDATE `users` SET `password` = ?,`salt` = ? WHERE `uid` = ?") + log.Print("Preparing setPassword statement.") + setPasswordStmt, err = db.Prepare("UPDATE `users` SET `password` = ?,`salt` = ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing set_avatar statement.") - set_avatar_stmt, err = db.Prepare("UPDATE `users` SET `avatar` = ? WHERE `uid` = ?") + log.Print("Preparing setAvatar statement.") + setAvatarStmt, err = db.Prepare("UPDATE `users` SET `avatar` = ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing set_username statement.") - set_username_stmt, err = db.Prepare("UPDATE `users` SET `name` = ? WHERE `uid` = ?") + log.Print("Preparing setUsername statement.") + setUsernameStmt, err = db.Prepare("UPDATE `users` SET `name` = ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing change_group statement.") - change_group_stmt, err = db.Prepare("UPDATE `users` SET `group` = ? WHERE `uid` = ?") + log.Print("Preparing changeGroup statement.") + changeGroupStmt, err = db.Prepare("UPDATE `users` SET `group` = ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing activate_user statement.") - activate_user_stmt, err = db.Prepare("UPDATE `users` SET `active` = 1 WHERE `uid` = ?") + log.Print("Preparing activateUser statement.") + activateUserStmt, err = db.Prepare("UPDATE `users` SET `active` = 1 WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing update_user_level statement.") - update_user_level_stmt, err = db.Prepare("UPDATE `users` SET `level` = ? WHERE `uid` = ?") + log.Print("Preparing updateUserLevel statement.") + updateUserLevelStmt, err = db.Prepare("UPDATE `users` SET `level` = ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing increment_user_score statement.") - increment_user_score_stmt, err = db.Prepare("UPDATE `users` SET `score` = `score` + ? WHERE `uid` = ?") + log.Print("Preparing incrementUserScore statement.") + incrementUserScoreStmt, err = db.Prepare("UPDATE `users` SET `score` = `score` + ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing increment_user_posts statement.") - increment_user_posts_stmt, err = db.Prepare("UPDATE `users` SET `posts` = `posts` + ? WHERE `uid` = ?") + log.Print("Preparing incrementUserPosts statement.") + incrementUserPostsStmt, err = db.Prepare("UPDATE `users` SET `posts` = `posts` + ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing increment_user_bigposts statement.") - increment_user_bigposts_stmt, err = db.Prepare("UPDATE `users` SET `posts` = `posts` + ?,`bigposts` = `bigposts` + ? WHERE `uid` = ?") + log.Print("Preparing incrementUserBigposts statement.") + incrementUserBigpostsStmt, err = db.Prepare("UPDATE `users` SET `posts` = `posts` + ?,`bigposts` = `bigposts` + ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing increment_user_megaposts statement.") - increment_user_megaposts_stmt, err = db.Prepare("UPDATE `users` SET `posts` = `posts` + ?,`bigposts` = `bigposts` + ?,`megaposts` = `megaposts` + ? WHERE `uid` = ?") + log.Print("Preparing incrementUserMegaposts statement.") + incrementUserMegapostsStmt, err = db.Prepare("UPDATE `users` SET `posts` = `posts` + ?,`bigposts` = `bigposts` + ?,`megaposts` = `megaposts` + ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing increment_user_topics statement.") - increment_user_topics_stmt, err = db.Prepare("UPDATE `users` SET `topics` = `topics` + ? WHERE `uid` = ?") + log.Print("Preparing incrementUserTopics statement.") + incrementUserTopicsStmt, err = db.Prepare("UPDATE `users` SET `topics` = `topics` + ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing edit_profile_reply statement.") - edit_profile_reply_stmt, err = db.Prepare("UPDATE `users_replies` SET `content` = ?,`parsed_content` = ? WHERE `rid` = ?") + log.Print("Preparing editProfileReply statement.") + editProfileReplyStmt, err = db.Prepare("UPDATE `users_replies` SET `content` = ?,`parsed_content` = ? WHERE `rid` = ?") if err != nil { return err } - log.Print("Preparing update_forum statement.") - update_forum_stmt, err = db.Prepare("UPDATE `forums` SET `name` = ?,`desc` = ?,`active` = ?,`preset` = ? WHERE `fid` = ?") + log.Print("Preparing updateForum statement.") + updateForumStmt, err = db.Prepare("UPDATE `forums` SET `name` = ?,`desc` = ?,`active` = ?,`preset` = ? WHERE `fid` = ?") if err != nil { return err } - log.Print("Preparing update_setting statement.") - update_setting_stmt, err = db.Prepare("UPDATE `settings` SET `content` = ? WHERE `name` = ?") + log.Print("Preparing updateSetting statement.") + updateSettingStmt, err = db.Prepare("UPDATE `settings` SET `content` = ? WHERE `name` = ?") if err != nil { return err } - log.Print("Preparing update_plugin statement.") - update_plugin_stmt, err = db.Prepare("UPDATE `plugins` SET `active` = ? WHERE `uname` = ?") + log.Print("Preparing updatePlugin statement.") + updatePluginStmt, err = db.Prepare("UPDATE `plugins` SET `active` = ? WHERE `uname` = ?") if err != nil { return err } - log.Print("Preparing update_plugin_install statement.") - update_plugin_install_stmt, err = db.Prepare("UPDATE `plugins` SET `installed` = ? WHERE `uname` = ?") + log.Print("Preparing updatePluginInstall statement.") + updatePluginInstallStmt, err = db.Prepare("UPDATE `plugins` SET `installed` = ? WHERE `uname` = ?") if err != nil { return err } - log.Print("Preparing update_theme statement.") - update_theme_stmt, err = db.Prepare("UPDATE `themes` SET `default` = ? WHERE `uname` = ?") + log.Print("Preparing updateTheme statement.") + updateThemeStmt, err = db.Prepare("UPDATE `themes` SET `default` = ? WHERE `uname` = ?") if err != nil { return err } - log.Print("Preparing update_user statement.") - update_user_stmt, err = db.Prepare("UPDATE `users` SET `name` = ?,`email` = ?,`group` = ? WHERE `uid` = ?") + log.Print("Preparing updateUser statement.") + updateUserStmt, err = db.Prepare("UPDATE `users` SET `name` = ?,`email` = ?,`group` = ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing update_group_perms statement.") - update_group_perms_stmt, err = db.Prepare("UPDATE `users_groups` SET `permissions` = ? WHERE `gid` = ?") + log.Print("Preparing updateGroupPerms statement.") + updateGroupPermsStmt, err = db.Prepare("UPDATE `users_groups` SET `permissions` = ? WHERE `gid` = ?") if err != nil { return err } - log.Print("Preparing update_group_rank statement.") - update_group_rank_stmt, err = db.Prepare("UPDATE `users_groups` SET `is_admin` = ?,`is_mod` = ?,`is_banned` = ? WHERE `gid` = ?") + log.Print("Preparing updateGroupRank statement.") + updateGroupRankStmt, err = db.Prepare("UPDATE `users_groups` SET `is_admin` = ?,`is_mod` = ?,`is_banned` = ? WHERE `gid` = ?") if err != nil { return err } - log.Print("Preparing update_group statement.") - update_group_stmt, err = db.Prepare("UPDATE `users_groups` SET `name` = ?,`tag` = ? WHERE `gid` = ?") + log.Print("Preparing updateGroup statement.") + updateGroupStmt, err = db.Prepare("UPDATE `users_groups` SET `name` = ?,`tag` = ? WHERE `gid` = ?") if err != nil { return err } - log.Print("Preparing update_email statement.") - update_email_stmt, err = db.Prepare("UPDATE `emails` SET `email` = ?,`uid` = ?,`validated` = ?,`token` = ? WHERE `email` = ?") + log.Print("Preparing updateEmail statement.") + updateEmailStmt, err = db.Prepare("UPDATE `emails` SET `email` = ?,`uid` = ?,`validated` = ?,`token` = ? WHERE `email` = ?") if err != nil { return err } - log.Print("Preparing verify_email statement.") - verify_email_stmt, err = db.Prepare("UPDATE `emails` SET `validated` = 1,`token` = '' WHERE `email` = ?") + log.Print("Preparing verifyEmail statement.") + verifyEmailStmt, err = db.Prepare("UPDATE `emails` SET `validated` = 1,`token` = '' WHERE `email` = ?") if err != nil { return err } - log.Print("Preparing set_temp_group statement.") - set_temp_group_stmt, err = db.Prepare("UPDATE `users` SET `temp_group` = ? WHERE `uid` = ?") + log.Print("Preparing setTempGroup statement.") + setTempGroupStmt, err = db.Prepare("UPDATE `users` SET `temp_group` = ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing update_word_filter statement.") - update_word_filter_stmt, err = db.Prepare("UPDATE `word_filters` SET `find` = ?,`replacement` = ? WHERE `wfid` = ?") + log.Print("Preparing updateWordFilter statement.") + updateWordFilterStmt, err = db.Prepare("UPDATE `word_filters` SET `find` = ?,`replacement` = ? WHERE `wfid` = ?") if err != nil { return err } - log.Print("Preparing bump_sync statement.") - bump_sync_stmt, err = db.Prepare("UPDATE `sync` SET `last_update` = UTC_TIMESTAMP()") + log.Print("Preparing bumpSync statement.") + bumpSyncStmt, err = db.Prepare("UPDATE `sync` SET `last_update` = UTC_TIMESTAMP()") if err != nil { return err } - log.Print("Preparing delete_reply statement.") - delete_reply_stmt, err = db.Prepare("DELETE FROM `replies` WHERE `rid` = ?") + log.Print("Preparing deleteReply statement.") + deleteReplyStmt, err = db.Prepare("DELETE FROM `replies` WHERE `rid` = ?") if err != nil { return err } - log.Print("Preparing delete_topic statement.") - delete_topic_stmt, err = db.Prepare("DELETE FROM `topics` WHERE `tid` = ?") + log.Print("Preparing deleteProfileReply statement.") + deleteProfileReplyStmt, err = db.Prepare("DELETE FROM `users_replies` WHERE `rid` = ?") if err != nil { return err } - log.Print("Preparing delete_profile_reply statement.") - delete_profile_reply_stmt, err = db.Prepare("DELETE FROM `users_replies` WHERE `rid` = ?") + log.Print("Preparing deleteForumPermsByForum statement.") + deleteForumPermsByForumStmt, err = db.Prepare("DELETE FROM `forums_permissions` WHERE `fid` = ?") if err != nil { return err } - log.Print("Preparing delete_forum_perms_by_forum statement.") - delete_forum_perms_by_forum_stmt, err = db.Prepare("DELETE FROM `forums_permissions` WHERE `fid` = ?") + log.Print("Preparing deleteActivityStreamMatch statement.") + deleteActivityStreamMatchStmt, err = db.Prepare("DELETE FROM `activity_stream_matches` WHERE `watcher` = ? AND `asid` = ?") if err != nil { return err } - log.Print("Preparing delete_activity_stream_match statement.") - delete_activity_stream_match_stmt, err = db.Prepare("DELETE FROM `activity_stream_matches` WHERE `watcher` = ? AND `asid` = ?") + log.Print("Preparing deleteWordFilter statement.") + deleteWordFilterStmt, err = db.Prepare("DELETE FROM `word_filters` WHERE `wfid` = ?") if err != nil { return err } - log.Print("Preparing delete_word_filter statement.") - delete_word_filter_stmt, err = db.Prepare("DELETE FROM `word_filters` WHERE `wfid` = ?") + log.Print("Preparing reportExists statement.") + reportExistsStmt, err = db.Prepare("SELECT COUNT(*) AS `count` FROM `topics` WHERE `data` = ? AND `data` != '' AND `parentID` = 1") if err != nil { return err } - log.Print("Preparing report_exists statement.") - report_exists_stmt, err = db.Prepare("SELECT COUNT(*) AS `count` FROM `topics` WHERE `data` = ? AND `data` != '' AND `parentID` = 1") + log.Print("Preparing groupCount statement.") + groupCountStmt, err = db.Prepare("SELECT COUNT(*) AS `count` FROM `users_groups`") if err != nil { return err } - log.Print("Preparing group_count statement.") - group_count_stmt, err = db.Prepare("SELECT COUNT(*) AS `count` FROM `users_groups`") + log.Print("Preparing modlogCount statement.") + modlogCountStmt, err = db.Prepare("SELECT COUNT(*) AS `count` FROM `moderation_logs`") if err != nil { return err } - log.Print("Preparing modlog_count statement.") - modlog_count_stmt, err = db.Prepare("SELECT COUNT(*) AS `count` FROM `moderation_logs`") + log.Print("Preparing addForumPermsToForumAdmins statement.") + addForumPermsToForumAdminsStmt, err = db.Prepare("INSERT INTO `forums_permissions`(`gid`,`fid`,`preset`,`permissions`) SELECT `gid`, ? AS `fid`, ? AS `preset`, ? AS `permissions` FROM `users_groups` WHERE `is_admin` = 1") if err != nil { return err } - log.Print("Preparing add_forum_perms_to_forum_admins statement.") - add_forum_perms_to_forum_admins_stmt, err = db.Prepare("INSERT INTO `forums_permissions`(`gid`,`fid`,`preset`,`permissions`) SELECT `gid`, ? AS `fid`, ? AS `preset`, ? AS `permissions` FROM `users_groups` WHERE `is_admin` = 1") + log.Print("Preparing addForumPermsToForumStaff statement.") + addForumPermsToForumStaffStmt, err = db.Prepare("INSERT INTO `forums_permissions`(`gid`,`fid`,`preset`,`permissions`) SELECT `gid`, ? AS `fid`, ? AS `preset`, ? AS `permissions` FROM `users_groups` WHERE `is_admin` = 0 AND `is_mod` = 1") if err != nil { return err } - log.Print("Preparing add_forum_perms_to_forum_staff statement.") - add_forum_perms_to_forum_staff_stmt, err = db.Prepare("INSERT INTO `forums_permissions`(`gid`,`fid`,`preset`,`permissions`) SELECT `gid`, ? AS `fid`, ? AS `preset`, ? AS `permissions` FROM `users_groups` WHERE `is_admin` = 0 AND `is_mod` = 1") + log.Print("Preparing addForumPermsToForumMembers statement.") + addForumPermsToForumMembersStmt, err = db.Prepare("INSERT INTO `forums_permissions`(`gid`,`fid`,`preset`,`permissions`) SELECT `gid`, ? AS `fid`, ? AS `preset`, ? AS `permissions` FROM `users_groups` WHERE `is_admin` = 0 AND `is_mod` = 0 AND `is_banned` = 0") if err != nil { return err } - log.Print("Preparing add_forum_perms_to_forum_members statement.") - add_forum_perms_to_forum_members_stmt, err = db.Prepare("INSERT INTO `forums_permissions`(`gid`,`fid`,`preset`,`permissions`) SELECT `gid`, ? AS `fid`, ? AS `preset`, ? AS `permissions` FROM `users_groups` WHERE `is_admin` = 0 AND `is_mod` = 0 AND `is_banned` = 0") - if err != nil { - return err - } - - log.Print("Preparing notify_watchers statement.") - notify_watchers_stmt, err = db.Prepare("INSERT INTO `activity_stream_matches`(`watcher`,`asid`) SELECT `activity_subscriptions`.`user`, `activity_stream`.`asid` FROM `activity_stream` INNER JOIN `activity_subscriptions` ON `activity_subscriptions`.`targetType` = `activity_stream`.`elementType` AND `activity_subscriptions`.`targetID` = `activity_stream`.`elementID` AND `activity_subscriptions`.`user` != `activity_stream`.`actor` WHERE `asid` = ?") + log.Print("Preparing notifyWatchers statement.") + notifyWatchersStmt, err = db.Prepare("INSERT INTO `activity_stream_matches`(`watcher`,`asid`) SELECT `activity_subscriptions`.`user`, `activity_stream`.`asid` FROM `activity_stream` INNER JOIN `activity_subscriptions` ON `activity_subscriptions`.`targetType` = `activity_stream`.`elementType` AND `activity_subscriptions`.`targetID` = `activity_stream`.`elementID` AND `activity_subscriptions`.`user` != `activity_stream`.`actor` WHERE `asid` = ?") if err != nil { return err } diff --git a/gen_pgsql.go b/gen_pgsql.go index f88ec30c..bae46de9 100644 --- a/gen_pgsql.go +++ b/gen_pgsql.go @@ -7,45 +7,45 @@ import "log" import "database/sql" // nolint -var add_replies_to_topic_stmt *sql.Stmt -var remove_replies_from_topic_stmt *sql.Stmt -var add_topics_to_forum_stmt *sql.Stmt -var remove_topics_from_forum_stmt *sql.Stmt -var update_forum_cache_stmt *sql.Stmt -var add_likes_to_topic_stmt *sql.Stmt -var add_likes_to_reply_stmt *sql.Stmt -var edit_topic_stmt *sql.Stmt -var edit_reply_stmt *sql.Stmt -var stick_topic_stmt *sql.Stmt -var unstick_topic_stmt *sql.Stmt -var update_last_ip_stmt *sql.Stmt -var update_session_stmt *sql.Stmt -var set_password_stmt *sql.Stmt -var set_avatar_stmt *sql.Stmt -var set_username_stmt *sql.Stmt -var change_group_stmt *sql.Stmt -var activate_user_stmt *sql.Stmt -var update_user_level_stmt *sql.Stmt -var increment_user_score_stmt *sql.Stmt -var increment_user_posts_stmt *sql.Stmt -var increment_user_bigposts_stmt *sql.Stmt -var increment_user_megaposts_stmt *sql.Stmt -var increment_user_topics_stmt *sql.Stmt -var edit_profile_reply_stmt *sql.Stmt -var update_forum_stmt *sql.Stmt -var update_setting_stmt *sql.Stmt -var update_plugin_stmt *sql.Stmt -var update_plugin_install_stmt *sql.Stmt -var update_theme_stmt *sql.Stmt -var update_user_stmt *sql.Stmt -var update_group_perms_stmt *sql.Stmt -var update_group_rank_stmt *sql.Stmt -var update_group_stmt *sql.Stmt -var update_email_stmt *sql.Stmt -var verify_email_stmt *sql.Stmt -var set_temp_group_stmt *sql.Stmt -var update_word_filter_stmt *sql.Stmt -var bump_sync_stmt *sql.Stmt +var addRepliesToTopicStmt *sql.Stmt +var removeRepliesFromTopicStmt *sql.Stmt +var addTopicsToForumStmt *sql.Stmt +var removeTopicsFromForumStmt *sql.Stmt +var updateForumCacheStmt *sql.Stmt +var addLikesToTopicStmt *sql.Stmt +var addLikesToReplyStmt *sql.Stmt +var editTopicStmt *sql.Stmt +var editReplyStmt *sql.Stmt +var stickTopicStmt *sql.Stmt +var unstickTopicStmt *sql.Stmt +var updateLastIPStmt *sql.Stmt +var updateSessionStmt *sql.Stmt +var setPasswordStmt *sql.Stmt +var setAvatarStmt *sql.Stmt +var setUsernameStmt *sql.Stmt +var changeGroupStmt *sql.Stmt +var activateUserStmt *sql.Stmt +var updateUserLevelStmt *sql.Stmt +var incrementUserScoreStmt *sql.Stmt +var incrementUserPostsStmt *sql.Stmt +var incrementUserBigpostsStmt *sql.Stmt +var incrementUserMegapostsStmt *sql.Stmt +var incrementUserTopicsStmt *sql.Stmt +var editProfileReplyStmt *sql.Stmt +var updateForumStmt *sql.Stmt +var updateSettingStmt *sql.Stmt +var updatePluginStmt *sql.Stmt +var updatePluginInstallStmt *sql.Stmt +var updateThemeStmt *sql.Stmt +var updateUserStmt *sql.Stmt +var updateGroupPermsStmt *sql.Stmt +var updateGroupRankStmt *sql.Stmt +var updateGroupStmt *sql.Stmt +var updateEmailStmt *sql.Stmt +var verifyEmailStmt *sql.Stmt +var setTempGroupStmt *sql.Stmt +var updateWordFilterStmt *sql.Stmt +var bumpSyncStmt *sql.Stmt // nolint func _gen_pgsql() (err error) { @@ -53,236 +53,236 @@ func _gen_pgsql() (err error) { log.Print("Building the generated statements") } - log.Print("Preparing add_replies_to_topic statement.") - add_replies_to_topic_stmt, err = db.Prepare("UPDATE `topics` SET `postCount` = `postCount` + ?,`lastReplyBy` = ?,`lastReplyAt` = LOCALTIMESTAMP() WHERE `tid` = ?") + log.Print("Preparing addRepliesToTopic statement.") + addRepliesToTopicStmt, err = db.Prepare("UPDATE `topics` SET `postCount` = `postCount` + ?,`lastReplyBy` = ?,`lastReplyAt` = LOCALTIMESTAMP() WHERE `tid` = ?") if err != nil { return err } - log.Print("Preparing remove_replies_from_topic statement.") - remove_replies_from_topic_stmt, err = db.Prepare("UPDATE `topics` SET `postCount` = `postCount` - ? WHERE `tid` = ?") + log.Print("Preparing removeRepliesFromTopic statement.") + removeRepliesFromTopicStmt, err = db.Prepare("UPDATE `topics` SET `postCount` = `postCount` - ? WHERE `tid` = ?") if err != nil { return err } - log.Print("Preparing add_topics_to_forum statement.") - add_topics_to_forum_stmt, err = db.Prepare("UPDATE `forums` SET `topicCount` = `topicCount` + ? WHERE `fid` = ?") + log.Print("Preparing addTopicsToForum statement.") + addTopicsToForumStmt, err = db.Prepare("UPDATE `forums` SET `topicCount` = `topicCount` + ? WHERE `fid` = ?") if err != nil { return err } - log.Print("Preparing remove_topics_from_forum statement.") - remove_topics_from_forum_stmt, err = db.Prepare("UPDATE `forums` SET `topicCount` = `topicCount` - ? WHERE `fid` = ?") + log.Print("Preparing removeTopicsFromForum statement.") + removeTopicsFromForumStmt, err = db.Prepare("UPDATE `forums` SET `topicCount` = `topicCount` - ? WHERE `fid` = ?") if err != nil { return err } - log.Print("Preparing update_forum_cache statement.") - update_forum_cache_stmt, err = db.Prepare("UPDATE `forums` SET `lastTopic` = ?,`lastTopicID` = ?,`lastReplyer` = ?,`lastReplyerID` = ?,`lastTopicTime` = LOCALTIMESTAMP() WHERE `fid` = ?") + log.Print("Preparing updateForumCache statement.") + updateForumCacheStmt, err = db.Prepare("UPDATE `forums` SET `lastTopic` = ?,`lastTopicID` = ?,`lastReplyer` = ?,`lastReplyerID` = ?,`lastTopicTime` = LOCALTIMESTAMP() WHERE `fid` = ?") if err != nil { return err } - log.Print("Preparing add_likes_to_topic statement.") - add_likes_to_topic_stmt, err = db.Prepare("UPDATE `topics` SET `likeCount` = `likeCount` + ? WHERE `tid` = ?") + log.Print("Preparing addLikesToTopic statement.") + addLikesToTopicStmt, err = db.Prepare("UPDATE `topics` SET `likeCount` = `likeCount` + ? WHERE `tid` = ?") if err != nil { return err } - log.Print("Preparing add_likes_to_reply statement.") - add_likes_to_reply_stmt, err = db.Prepare("UPDATE `replies` SET `likeCount` = `likeCount` + ? WHERE `rid` = ?") + log.Print("Preparing addLikesToReply statement.") + addLikesToReplyStmt, err = db.Prepare("UPDATE `replies` SET `likeCount` = `likeCount` + ? WHERE `rid` = ?") if err != nil { return err } - log.Print("Preparing edit_topic statement.") - edit_topic_stmt, err = db.Prepare("UPDATE `topics` SET `title` = ?,`content` = ?,`parsed_content` = ?,`is_closed` = ? WHERE `tid` = ?") + log.Print("Preparing editTopic statement.") + editTopicStmt, err = db.Prepare("UPDATE `topics` SET `title` = ?,`content` = ?,`parsed_content` = ?,`is_closed` = ? WHERE `tid` = ?") if err != nil { return err } - log.Print("Preparing edit_reply statement.") - edit_reply_stmt, err = db.Prepare("UPDATE `replies` SET `content` = ?,`parsed_content` = ? WHERE `rid` = ?") + log.Print("Preparing editReply statement.") + editReplyStmt, err = db.Prepare("UPDATE `replies` SET `content` = ?,`parsed_content` = ? WHERE `rid` = ?") if err != nil { return err } - log.Print("Preparing stick_topic statement.") - stick_topic_stmt, err = db.Prepare("UPDATE `topics` SET `sticky` = 1 WHERE `tid` = ?") + log.Print("Preparing stickTopic statement.") + stickTopicStmt, err = db.Prepare("UPDATE `topics` SET `sticky` = 1 WHERE `tid` = ?") if err != nil { return err } - log.Print("Preparing unstick_topic statement.") - unstick_topic_stmt, err = db.Prepare("UPDATE `topics` SET `sticky` = 0 WHERE `tid` = ?") + log.Print("Preparing unstickTopic statement.") + unstickTopicStmt, err = db.Prepare("UPDATE `topics` SET `sticky` = 0 WHERE `tid` = ?") if err != nil { return err } - log.Print("Preparing update_last_ip statement.") - update_last_ip_stmt, err = db.Prepare("UPDATE `users` SET `last_ip` = ? WHERE `uid` = ?") + log.Print("Preparing updateLastIP statement.") + updateLastIPStmt, err = db.Prepare("UPDATE `users` SET `last_ip` = ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing update_session statement.") - update_session_stmt, err = db.Prepare("UPDATE `users` SET `session` = ? WHERE `uid` = ?") + log.Print("Preparing updateSession statement.") + updateSessionStmt, err = db.Prepare("UPDATE `users` SET `session` = ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing set_password statement.") - set_password_stmt, err = db.Prepare("UPDATE `users` SET `password` = ?,`salt` = ? WHERE `uid` = ?") + log.Print("Preparing setPassword statement.") + setPasswordStmt, err = db.Prepare("UPDATE `users` SET `password` = ?,`salt` = ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing set_avatar statement.") - set_avatar_stmt, err = db.Prepare("UPDATE `users` SET `avatar` = ? WHERE `uid` = ?") + log.Print("Preparing setAvatar statement.") + setAvatarStmt, err = db.Prepare("UPDATE `users` SET `avatar` = ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing set_username statement.") - set_username_stmt, err = db.Prepare("UPDATE `users` SET `name` = ? WHERE `uid` = ?") + log.Print("Preparing setUsername statement.") + setUsernameStmt, err = db.Prepare("UPDATE `users` SET `name` = ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing change_group statement.") - change_group_stmt, err = db.Prepare("UPDATE `users` SET `group` = ? WHERE `uid` = ?") + log.Print("Preparing changeGroup statement.") + changeGroupStmt, err = db.Prepare("UPDATE `users` SET `group` = ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing activate_user statement.") - activate_user_stmt, err = db.Prepare("UPDATE `users` SET `active` = 1 WHERE `uid` = ?") + log.Print("Preparing activateUser statement.") + activateUserStmt, err = db.Prepare("UPDATE `users` SET `active` = 1 WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing update_user_level statement.") - update_user_level_stmt, err = db.Prepare("UPDATE `users` SET `level` = ? WHERE `uid` = ?") + log.Print("Preparing updateUserLevel statement.") + updateUserLevelStmt, err = db.Prepare("UPDATE `users` SET `level` = ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing increment_user_score statement.") - increment_user_score_stmt, err = db.Prepare("UPDATE `users` SET `score` = `score` + ? WHERE `uid` = ?") + log.Print("Preparing incrementUserScore statement.") + incrementUserScoreStmt, err = db.Prepare("UPDATE `users` SET `score` = `score` + ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing increment_user_posts statement.") - increment_user_posts_stmt, err = db.Prepare("UPDATE `users` SET `posts` = `posts` + ? WHERE `uid` = ?") + log.Print("Preparing incrementUserPosts statement.") + incrementUserPostsStmt, err = db.Prepare("UPDATE `users` SET `posts` = `posts` + ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing increment_user_bigposts statement.") - increment_user_bigposts_stmt, err = db.Prepare("UPDATE `users` SET `posts` = `posts` + ?,`bigposts` = `bigposts` + ? WHERE `uid` = ?") + log.Print("Preparing incrementUserBigposts statement.") + incrementUserBigpostsStmt, err = db.Prepare("UPDATE `users` SET `posts` = `posts` + ?,`bigposts` = `bigposts` + ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing increment_user_megaposts statement.") - increment_user_megaposts_stmt, err = db.Prepare("UPDATE `users` SET `posts` = `posts` + ?,`bigposts` = `bigposts` + ?,`megaposts` = `megaposts` + ? WHERE `uid` = ?") + log.Print("Preparing incrementUserMegaposts statement.") + incrementUserMegapostsStmt, err = db.Prepare("UPDATE `users` SET `posts` = `posts` + ?,`bigposts` = `bigposts` + ?,`megaposts` = `megaposts` + ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing increment_user_topics statement.") - increment_user_topics_stmt, err = db.Prepare("UPDATE `users` SET `topics` = `topics` + ? WHERE `uid` = ?") + log.Print("Preparing incrementUserTopics statement.") + incrementUserTopicsStmt, err = db.Prepare("UPDATE `users` SET `topics` = `topics` + ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing edit_profile_reply statement.") - edit_profile_reply_stmt, err = db.Prepare("UPDATE `users_replies` SET `content` = ?,`parsed_content` = ? WHERE `rid` = ?") + log.Print("Preparing editProfileReply statement.") + editProfileReplyStmt, err = db.Prepare("UPDATE `users_replies` SET `content` = ?,`parsed_content` = ? WHERE `rid` = ?") if err != nil { return err } - log.Print("Preparing update_forum statement.") - update_forum_stmt, err = db.Prepare("UPDATE `forums` SET `name` = ?,`desc` = ?,`active` = ?,`preset` = ? WHERE `fid` = ?") + log.Print("Preparing updateForum statement.") + updateForumStmt, err = db.Prepare("UPDATE `forums` SET `name` = ?,`desc` = ?,`active` = ?,`preset` = ? WHERE `fid` = ?") if err != nil { return err } - log.Print("Preparing update_setting statement.") - update_setting_stmt, err = db.Prepare("UPDATE `settings` SET `content` = ? WHERE `name` = ?") + log.Print("Preparing updateSetting statement.") + updateSettingStmt, err = db.Prepare("UPDATE `settings` SET `content` = ? WHERE `name` = ?") if err != nil { return err } - log.Print("Preparing update_plugin statement.") - update_plugin_stmt, err = db.Prepare("UPDATE `plugins` SET `active` = ? WHERE `uname` = ?") + log.Print("Preparing updatePlugin statement.") + updatePluginStmt, err = db.Prepare("UPDATE `plugins` SET `active` = ? WHERE `uname` = ?") if err != nil { return err } - log.Print("Preparing update_plugin_install statement.") - update_plugin_install_stmt, err = db.Prepare("UPDATE `plugins` SET `installed` = ? WHERE `uname` = ?") + log.Print("Preparing updatePluginInstall statement.") + updatePluginInstallStmt, err = db.Prepare("UPDATE `plugins` SET `installed` = ? WHERE `uname` = ?") if err != nil { return err } - log.Print("Preparing update_theme statement.") - update_theme_stmt, err = db.Prepare("UPDATE `themes` SET `default` = ? WHERE `uname` = ?") + log.Print("Preparing updateTheme statement.") + updateThemeStmt, err = db.Prepare("UPDATE `themes` SET `default` = ? WHERE `uname` = ?") if err != nil { return err } - log.Print("Preparing update_user statement.") - update_user_stmt, err = db.Prepare("UPDATE `users` SET `name` = ?,`email` = ?,`group` = ? WHERE `uid` = ?") + log.Print("Preparing updateUser statement.") + updateUserStmt, err = db.Prepare("UPDATE `users` SET `name` = ?,`email` = ?,`group` = ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing update_group_perms statement.") - update_group_perms_stmt, err = db.Prepare("UPDATE `users_groups` SET `permissions` = ? WHERE `gid` = ?") + log.Print("Preparing updateGroupPerms statement.") + updateGroupPermsStmt, err = db.Prepare("UPDATE `users_groups` SET `permissions` = ? WHERE `gid` = ?") if err != nil { return err } - log.Print("Preparing update_group_rank statement.") - update_group_rank_stmt, err = db.Prepare("UPDATE `users_groups` SET `is_admin` = ?,`is_mod` = ?,`is_banned` = ? WHERE `gid` = ?") + log.Print("Preparing updateGroupRank statement.") + updateGroupRankStmt, err = db.Prepare("UPDATE `users_groups` SET `is_admin` = ?,`is_mod` = ?,`is_banned` = ? WHERE `gid` = ?") if err != nil { return err } - log.Print("Preparing update_group statement.") - update_group_stmt, err = db.Prepare("UPDATE `users_groups` SET `name` = ?,`tag` = ? WHERE `gid` = ?") + log.Print("Preparing updateGroup statement.") + updateGroupStmt, err = db.Prepare("UPDATE `users_groups` SET `name` = ?,`tag` = ? WHERE `gid` = ?") if err != nil { return err } - log.Print("Preparing update_email statement.") - update_email_stmt, err = db.Prepare("UPDATE `emails` SET `email` = ?,`uid` = ?,`validated` = ?,`token` = ? WHERE `email` = ?") + log.Print("Preparing updateEmail statement.") + updateEmailStmt, err = db.Prepare("UPDATE `emails` SET `email` = ?,`uid` = ?,`validated` = ?,`token` = ? WHERE `email` = ?") if err != nil { return err } - log.Print("Preparing verify_email statement.") - verify_email_stmt, err = db.Prepare("UPDATE `emails` SET `validated` = 1,`token` = '' WHERE `email` = ?") + log.Print("Preparing verifyEmail statement.") + verifyEmailStmt, err = db.Prepare("UPDATE `emails` SET `validated` = 1,`token` = '' WHERE `email` = ?") if err != nil { return err } - log.Print("Preparing set_temp_group statement.") - set_temp_group_stmt, err = db.Prepare("UPDATE `users` SET `temp_group` = ? WHERE `uid` = ?") + log.Print("Preparing setTempGroup statement.") + setTempGroupStmt, err = db.Prepare("UPDATE `users` SET `temp_group` = ? WHERE `uid` = ?") if err != nil { return err } - log.Print("Preparing update_word_filter statement.") - update_word_filter_stmt, err = db.Prepare("UPDATE `word_filters` SET `find` = ?,`replacement` = ? WHERE `wfid` = ?") + log.Print("Preparing updateWordFilter statement.") + updateWordFilterStmt, err = db.Prepare("UPDATE `word_filters` SET `find` = ?,`replacement` = ? WHERE `wfid` = ?") if err != nil { return err } - log.Print("Preparing bump_sync statement.") - bump_sync_stmt, err = db.Prepare("UPDATE `sync` SET `last_update` = LOCALTIMESTAMP()") + log.Print("Preparing bumpSync statement.") + bumpSyncStmt, err = db.Prepare("UPDATE `sync` SET `last_update` = LOCALTIMESTAMP()") if err != nil { return err } diff --git a/general_test.go b/general_test.go index 818c7c80..382b1995 100644 --- a/general_test.go +++ b/general_test.go @@ -506,7 +506,7 @@ func BenchmarkQueryPreparedTopicParallel(b *testing.B) { b.RunParallel(func(pb *testing.PB) { var tu TopicUser for pb.Next() { - err := get_topic_user_stmt.QueryRow(1).Scan(&tu.Title, &tu.Content, &tu.CreatedBy, &tu.CreatedAt, &tu.IsClosed, &tu.Sticky, &tu.ParentID, &tu.IPAddress, &tu.PostCount, &tu.LikeCount, &tu.CreatedByName, &tu.Avatar, &tu.Group, &tu.URLPrefix, &tu.URLName, &tu.Level) + err := getTopicUserStmt.QueryRow(1).Scan(&tu.Title, &tu.Content, &tu.CreatedBy, &tu.CreatedAt, &tu.IsClosed, &tu.Sticky, &tu.ParentID, &tu.IPAddress, &tu.PostCount, &tu.LikeCount, &tu.CreatedByName, &tu.Avatar, &tu.Group, &tu.URLPrefix, &tu.URLName, &tu.Level) if err == ErrNoRows { b.Fatal("No rows found!") return diff --git a/group_store.go b/group_store.go index 70d9340d..ac623176 100644 --- a/group_store.go +++ b/group_store.go @@ -35,7 +35,7 @@ func NewMemoryGroupStore() *MemoryGroupStore { func (mgs *MemoryGroupStore) LoadGroups() error { mgs.groups = []*Group{&Group{ID: 0, Name: "Unknown"}} - rows, err := get_groups_stmt.Query() + rows, err := getGroupsStmt.Query() if err != nil { return err } @@ -113,7 +113,7 @@ func (mgs *MemoryGroupStore) Create(groupName string, tag string, isAdmin bool, defer groupCreateMutex.Unlock() var permstr = "{}" - res, err := create_group_stmt.Exec(groupName, tag, isAdmin, isMod, isBanned, permstr) + res, err := createGroupStmt.Exec(groupName, tag, isAdmin, isMod, isBanned, permstr) if err != nil { return 0, err } @@ -163,7 +163,7 @@ func (mgs *MemoryGroupStore) Create(groupName string, tag string, isAdmin bool, return gid, err } perms := string(permstr) - _, err = add_forum_perms_to_group_stmt.Exec(gid, forum.ID, forum.Preset, perms) + _, err = addForumPermsToGroupStmt.Exec(gid, forum.ID, forum.Preset, perms) if err != nil { return gid, err } diff --git a/install/install.go b/install/install.go index 8e06525e..6d072080 100644 --- a/install/install.go +++ b/install/install.go @@ -173,16 +173,16 @@ config.UserCacheCapacity = 120 // The max number of users held in memory config.TopicCacheCapacity = 200 // The max number of topics held in memory // Email -config.SmtpServer = "" -config.SmtpUsername = "" -config.SmtpPassword = "" -config.SmtpPort = "25" +config.SMTPServer = "" +config.SMTPUsername = "" +config.SMTPPassword = "" +config.SMTPPort = "25" // Misc config.DefaultRoute = routeTopics config.DefaultGroup = 3 // Should be a setting in the database config.ActivationGroup = 5 // Should be a setting in the database -config.StaffCss = "staff_post" +config.StaffCSS = "staff_post" config.UncategorisedForumVisible = true config.MinifyTemplates = true config.MultiServer = false // Experimental: Enable Cross-Server Synchronisation and several other features diff --git a/member_routes.go b/member_routes.go index 763985b1..29f4c769 100644 --- a/member_routes.go +++ b/member_routes.go @@ -128,7 +128,7 @@ func routeTopicCreateSubmit(w http.ResponseWriter, r *http.Request, user User) { } wcount := wordCount(content) - res, err := create_topic_stmt.Exec(fid, topicName, content, parseMessage(content), user.ID, ipaddress, wcount, user.ID) + res, err := createTopicStmt.Exec(fid, topicName, content, parseMessage(content), user.ID, ipaddress, wcount, user.ID) if err != nil { InternalError(err, w) return @@ -145,7 +145,7 @@ func routeTopicCreateSubmit(w http.ResponseWriter, r *http.Request, user User) { return } - _, err = add_subscription_stmt.Exec(user.ID, lastID, "topic") + _, err = addSubscriptionStmt.Exec(user.ID, lastID, "topic") if err != nil { InternalError(err, w) return @@ -203,13 +203,13 @@ func routeCreateReply(w http.ResponseWriter, r *http.Request, user User) { } wcount := wordCount(content) - _, err = create_reply_stmt.Exec(tid, content, parseMessage(content), ipaddress, wcount, user.ID) + _, err = createReplyStmt.Exec(tid, content, parseMessage(content), ipaddress, wcount, user.ID) if err != nil { InternalError(err, w) return } - _, err = add_replies_to_topic_stmt.Exec(1, user.ID, tid) + _, err = addRepliesToTopicStmt.Exec(1, user.ID, tid) if err != nil { InternalError(err, w) return @@ -220,7 +220,7 @@ func routeCreateReply(w http.ResponseWriter, r *http.Request, user User) { return } - res, err := add_activity_stmt.Exec(user.ID, topic.CreatedBy, "reply", "topic", tid) + res, err := addActivityStmt.Exec(user.ID, topic.CreatedBy, "reply", "topic", tid) if err != nil { InternalError(err, w) return @@ -231,7 +231,7 @@ func routeCreateReply(w http.ResponseWriter, r *http.Request, user User) { return } - _, err = notify_watchers_stmt.Exec(lastID) + _, err = notifyWatchersStmt.Exec(lastID) if err != nil { InternalError(err, w) return @@ -297,7 +297,7 @@ func routeLikeTopic(w http.ResponseWriter, r *http.Request, user User) { return } - err = has_liked_topic_stmt.QueryRow(user.ID, tid).Scan(&tid) + err = hasLikedTopicStmt.QueryRow(user.ID, tid).Scan(&tid) if err != nil && err != ErrNoRows { InternalError(err, w) return @@ -316,19 +316,19 @@ func routeLikeTopic(w http.ResponseWriter, r *http.Request, user User) { } score := 1 - _, err = create_like_stmt.Exec(score, tid, "topics", user.ID) + _, err = createLikeStmt.Exec(score, tid, "topics", user.ID) if err != nil { InternalError(err, w) return } - _, err = add_likes_to_topic_stmt.Exec(1, tid) + _, err = addLikesToTopicStmt.Exec(1, tid) if err != nil { InternalError(err, w) return } - res, err := add_activity_stmt.Exec(user.ID, topic.CreatedBy, "like", "topic", tid) + res, err := addActivityStmt.Exec(user.ID, topic.CreatedBy, "like", "topic", tid) if err != nil { InternalError(err, w) return @@ -339,7 +339,7 @@ func routeLikeTopic(w http.ResponseWriter, r *http.Request, user User) { return } - _, err = notify_one_stmt.Exec(topic.CreatedBy, lastID) + _, err = notifyOneStmt.Exec(topic.CreatedBy, lastID) if err != nil { InternalError(err, w) return @@ -384,7 +384,7 @@ func routeReplyLikeSubmit(w http.ResponseWriter, r *http.Request, user User) { } var fid int - err = get_topic_fid_stmt.QueryRow(reply.ParentID).Scan(&fid) + err = getTopicFIDStmt.QueryRow(reply.ParentID).Scan(&fid) if err == ErrNoRows { PreError("The parent topic doesn't exist.", w, r) return @@ -408,7 +408,7 @@ func routeReplyLikeSubmit(w http.ResponseWriter, r *http.Request, user User) { return } - err = has_liked_reply_stmt.QueryRow(user.ID, rid).Scan(&rid) + err = hasLikedReplyStmt.QueryRow(user.ID, rid).Scan(&rid) if err != nil && err != ErrNoRows { InternalError(err, w) return @@ -427,19 +427,19 @@ func routeReplyLikeSubmit(w http.ResponseWriter, r *http.Request, user User) { } score := 1 - _, err = create_like_stmt.Exec(score, rid, "replies", user.ID) + _, err = createLikeStmt.Exec(score, rid, "replies", user.ID) if err != nil { InternalError(err, w) return } - _, err = add_likes_to_reply_stmt.Exec(1, rid) + _, err = addLikesToReplyStmt.Exec(1, rid) if err != nil { InternalError(err, w) return } - res, err := add_activity_stmt.Exec(user.ID, reply.CreatedBy, "like", "post", rid) + res, err := addActivityStmt.Exec(user.ID, reply.CreatedBy, "like", "post", rid) if err != nil { InternalError(err, w) return @@ -450,7 +450,7 @@ func routeReplyLikeSubmit(w http.ResponseWriter, r *http.Request, user User) { return } - _, err = notify_one_stmt.Exec(reply.CreatedBy, lastID) + _, err = notifyOneStmt.Exec(reply.CreatedBy, lastID) if err != nil { InternalError(err, w) return @@ -485,14 +485,14 @@ func routeProfileReplyCreate(w http.ResponseWriter, r *http.Request, user User) return } - _, err = create_profile_reply_stmt.Exec(uid, html.EscapeString(preparseMessage(r.PostFormValue("reply-content"))), parseMessage(html.EscapeString(preparseMessage(r.PostFormValue("reply-content")))), user.ID, ipaddress) + _, err = createProfileReplyStmt.Exec(uid, html.EscapeString(preparseMessage(r.PostFormValue("reply-content"))), parseMessage(html.EscapeString(preparseMessage(r.PostFormValue("reply-content")))), user.ID, ipaddress) if err != nil { InternalError(err, w) return } var userName string - err = get_user_name_stmt.QueryRow(uid).Scan(&userName) + err = getUserNameStmt.QueryRow(uid).Scan(&userName) if err == ErrNoRows { LocalError("The profile you're trying to post on doesn't exist.", w, r, user) return @@ -565,7 +565,7 @@ func routeReportSubmit(w http.ResponseWriter, r *http.Request, user User, sitemI return } - err = get_user_name_stmt.QueryRow(userReply.ParentID).Scan(&title) + err = getUserNameStmt.QueryRow(userReply.ParentID).Scan(&title) if err == ErrNoRows { LocalError("We weren't able to find the profile the reported post is supposed to be on", w, r, user) return @@ -576,7 +576,7 @@ func routeReportSubmit(w http.ResponseWriter, r *http.Request, user User, sitemI title = "Profile: " + title content = userReply.Content + "\n\nOriginal Post: @" + strconv.Itoa(userReply.ParentID) } else if itemType == "topic" { - err = get_topic_basic_stmt.QueryRow(itemID).Scan(&title, &content) + err = getTopicBasicStmt.QueryRow(itemID).Scan(&title, &content) if err == ErrNoRows { NotFound(w, r) return @@ -597,7 +597,7 @@ func routeReportSubmit(w http.ResponseWriter, r *http.Request, user User, sitemI } var count int - rows, err := report_exists_stmt.Query(itemType + "_" + strconv.Itoa(itemID)) + rows, err := reportExistsStmt.Query(itemType + "_" + strconv.Itoa(itemID)) if err != nil && err != ErrNoRows { InternalError(err, w) return @@ -615,7 +615,8 @@ func routeReportSubmit(w http.ResponseWriter, r *http.Request, user User, sitemI return } - res, err := create_report_stmt.Exec(title, content, parseMessage(content), user.ID, itemType+"_"+strconv.Itoa(itemID)) + // ? - Can we do this via the TopicStore? + res, err := createReportStmt.Exec(title, content, parseMessage(content), user.ID, itemType+"_"+strconv.Itoa(itemID)) if err != nil { InternalError(err, w) return @@ -627,7 +628,7 @@ func routeReportSubmit(w http.ResponseWriter, r *http.Request, user User, sitemI return } - _, err = add_topics_to_forum_stmt.Exec(1, fid) + _, err = addTopicsToForumStmt.Exec(1, fid) if err != nil { InternalError(err, w) return @@ -681,7 +682,7 @@ func routeAccountOwnEditCriticalSubmit(w http.ResponseWriter, r *http.Request, u newPassword := r.PostFormValue("account-new-password") confirmPassword := r.PostFormValue("account-confirm-password") - err = get_password_stmt.QueryRow(user.ID).Scan(&realPassword, &salt) + err = getPasswordStmt.QueryRow(user.ID).Scan(&realPassword, &salt) if err == ErrNoRows { LocalError("Your account no longer exists.", w, r, user) return @@ -811,7 +812,7 @@ func routeAccountOwnEditAvatarSubmit(w http.ResponseWriter, r *http.Request, use } } - _, err = set_avatar_stmt.Exec("."+ext, strconv.Itoa(user.ID)) + _, err = setAvatarStmt.Exec("."+ext, strconv.Itoa(user.ID)) if err != nil { InternalError(err, w) return @@ -867,7 +868,7 @@ func routeAccountOwnEditUsernameSubmit(w http.ResponseWriter, r *http.Request, u } newUsername := html.EscapeString(r.PostFormValue("account-new-username")) - _, err = set_username_stmt.Exec(newUsername, strconv.Itoa(user.ID)) + _, err = setUsernameStmt.Exec(newUsername, strconv.Itoa(user.ID)) if err != nil { LocalError("Unable to change the username. Does someone else already have this name?", w, r, user) return @@ -903,7 +904,7 @@ func routeAccountOwnEditEmail(w http.ResponseWriter, r *http.Request, user User) email := Email{UserID: user.ID} var emailList []interface{} - rows, err := get_emails_by_user_stmt.Query(user.ID) + rows, err := getEmailsByUserStmt.Query(user.ID) if err != nil { log.Fatal(err) } @@ -960,7 +961,7 @@ func routeAccountOwnEditEmailTokenSubmit(w http.ResponseWriter, r *http.Request, email := Email{UserID: user.ID} targetEmail := Email{UserID: user.ID} var emailList []interface{} - rows, err := get_emails_by_user_stmt.Query(user.ID) + rows, err := getEmailsByUserStmt.Query(user.ID) if err != nil { InternalError(err, w) return @@ -997,7 +998,7 @@ func routeAccountOwnEditEmailTokenSubmit(w http.ResponseWriter, r *http.Request, return } - _, err = verify_email_stmt.Exec(user.Email) + _, err = verifyEmailStmt.Exec(user.Email) if err != nil { InternalError(err, w) return @@ -1005,7 +1006,7 @@ func routeAccountOwnEditEmailTokenSubmit(w http.ResponseWriter, r *http.Request, // If Email Activation is on, then activate the account while we're here if headerVars.Settings["activation_type"] == 2 { - _, err = activate_user_stmt.Exec(user.ID) + _, err = activateUserStmt.Exec(user.ID) if err != nil { InternalError(err, w) return diff --git a/misc_test.go b/misc_test.go index 7bd7b401..66f191dc 100644 --- a/misc_test.go +++ b/misc_test.go @@ -4,6 +4,7 @@ import "strconv" import "testing" // TODO: Generate a test database to work with rather than a live one +// TODO: We might need to refactor TestUserStore soon, as it's getting fairly complex func TestUserStore(t *testing.T) { if !gloinited { err := gloinit() @@ -16,6 +17,7 @@ func TestUserStore(t *testing.T) { } users = NewMemoryUserStore(config.UserCacheCapacity) + users.(UserCache).Flush() userStoreTest(t) users = NewSQLUserStore() userStoreTest(t) @@ -23,6 +25,12 @@ func TestUserStore(t *testing.T) { func userStoreTest(t *testing.T) { var user *User var err error + var length int + + ucache, hasCache := users.(UserCache) + if hasCache && ucache.GetLength() != 0 { + t.Error("Initial ucache length isn't zero") + } _, err = users.Get(-1) if err == nil { @@ -31,6 +39,10 @@ func userStoreTest(t *testing.T) { t.Fatal(err) } + if hasCache && ucache.GetLength() != 0 { + t.Error("There shouldn't be anything in the user cache") + } + _, err = users.Get(0) if err == nil { t.Error("UID #0 shouldn't exist") @@ -38,6 +50,10 @@ func userStoreTest(t *testing.T) { t.Fatal(err) } + if hasCache && ucache.GetLength() != 0 { + t.Error("There shouldn't be anything in the user cache") + } + user, err = users.Get(1) if err == ErrNoRows { t.Error("Couldn't find UID #1") @@ -49,6 +65,30 @@ func userStoreTest(t *testing.T) { t.Error("user.ID does not match the requested UID. Got '" + strconv.Itoa(user.ID) + "' instead.") } + if hasCache { + length = ucache.GetLength() + if length != 1 { + t.Error("User cache length should be 1, not " + strconv.Itoa(length)) + } + + user, err = ucache.CacheGet(1) + if err == ErrNoRows { + t.Error("Couldn't find UID #1 in the cache") + } else if err != nil { + t.Fatal(err) + } + + if user.ID != 1 { + t.Error("user.ID does not match the requested UID. Got '" + strconv.Itoa(user.ID) + "' instead.") + } + + ucache.Flush() + length = ucache.GetLength() + if length != 0 { + t.Error("User cache length should be 0, not " + strconv.Itoa(length)) + } + } + // TODO: Lock onto the specific error type. Is this even possible without sacrificing the detailed information in the error message? var userList map[int]*User userList, _ = users.BulkGetMap([]int{-1}) @@ -56,11 +96,25 @@ func userStoreTest(t *testing.T) { t.Error("There shouldn't be any results for UID #-1") } + if hasCache { + length = ucache.GetLength() + if length != 0 { + t.Error("User cache length should be 0, not " + strconv.Itoa(length)) + } + } + userList, _ = users.BulkGetMap([]int{0}) if len(userList) > 0 { t.Error("There shouldn't be any results for UID #0") } + if hasCache { + length = ucache.GetLength() + if length != 0 { + t.Error("User cache length should be 0, not " + strconv.Itoa(length)) + } + } + userList, _ = users.BulkGetMap([]int{1}) if len(userList) == 0 { t.Error("The returned map is empty for UID #1") @@ -78,6 +132,26 @@ func userStoreTest(t *testing.T) { t.Error("user.ID does not match the requested UID. Got '" + strconv.Itoa(user.ID) + "' instead.") } + if hasCache { + length = ucache.GetLength() + if length != 1 { + t.Error("User cache length should be 1, not " + strconv.Itoa(length)) + } + + user, err = ucache.CacheGet(1) + if err == ErrNoRows { + t.Error("Couldn't find UID #1 in the cache") + } else if err != nil { + t.Fatal(err) + } + + if user.ID != 1 { + t.Error("user.ID does not match the requested UID. Got '" + strconv.Itoa(user.ID) + "' instead.") + } + + ucache.Flush() + } + ok = users.Exists(-1) if ok { t.Error("UID #-1 shouldn't exist") @@ -93,6 +167,13 @@ func userStoreTest(t *testing.T) { t.Error("UID #1 should exist") } + if hasCache { + length = ucache.GetLength() + if length != 0 { + t.Error("User cache length should be 0, not " + strconv.Itoa(length)) + } + } + count := users.GetGlobalCount() if count <= 0 { t.Error("The number of users should be bigger than zero") diff --git a/mod_routes.go b/mod_routes.go index 6f8f8114..57aa9807 100644 --- a/mod_routes.go +++ b/mod_routes.go @@ -53,7 +53,7 @@ func routeEditTopic(w http.ResponseWriter, r *http.Request, user User) { topicContent := html.EscapeString(r.PostFormValue("topic_content")) // TODO: Move this bit to the TopicStore - _, err = edit_topic_stmt.Exec(topicName, preparseMessage(topicContent), parseMessage(html.EscapeString(preparseMessage(topicContent))), isClosed, tid) + _, err = editTopicStmt.Exec(topicName, preparseMessage(topicContent), parseMessage(html.EscapeString(preparseMessage(topicContent))), isClosed, tid) if err != nil { InternalErrorJSQ(err, w, r, isJs) return @@ -78,12 +78,12 @@ func routeEditTopic(w http.ResponseWriter, r *http.Request, user User) { InternalError(err, w) return } - _, err = create_action_reply_stmt.Exec(tid, action, ipaddress, user.ID) + _, err = createActionReplyStmt.Exec(tid, action, ipaddress, user.ID) if err != nil { InternalError(err, w) return } - _, err = add_replies_to_topic_stmt.Exec(1, user.ID, tid) + _, err = addRepliesToTopicStmt.Exec(1, user.ID, tid) if err != nil { InternalError(err, w) return @@ -158,7 +158,7 @@ func routeDeleteTopic(w http.ResponseWriter, r *http.Request, user User) { } // ? - We might need to add soft-delete before we can do an action reply for this - /*_, err = create_action_reply_stmt.Exec(tid,"delete",ipaddress,user.ID) + /*_, err = createActionReplyStmt.Exec(tid,"delete",ipaddress,user.ID) if err != nil { InternalError(err,w) return @@ -194,7 +194,8 @@ func routeStickTopic(w http.ResponseWriter, r *http.Request, user User) { return } - _, err = stick_topic_stmt.Exec(tid) + // TODO: Move this into the TopicStore? + _, err = stickTopicStmt.Exec(tid) if err != nil { InternalError(err, w) return @@ -210,7 +211,7 @@ func routeStickTopic(w http.ResponseWriter, r *http.Request, user User) { InternalError(err, w) return } - _, err = create_action_reply_stmt.Exec(tid, "stick", ipaddress, user.ID) + _, err = createActionReplyStmt.Exec(tid, "stick", ipaddress, user.ID) if err != nil { InternalError(err, w) return @@ -250,7 +251,7 @@ func routeUnstickTopic(w http.ResponseWriter, r *http.Request, user User) { return } - _, err = unstick_topic_stmt.Exec(tid) + _, err = unstickTopicStmt.Exec(tid) if err != nil { InternalError(err, w) return @@ -266,7 +267,7 @@ func routeUnstickTopic(w http.ResponseWriter, r *http.Request, user User) { InternalError(err, w) return } - _, err = create_action_reply_stmt.Exec(tid, "unstick", ipaddress, user.ID) + _, err = createActionReplyStmt.Exec(tid, "unstick", ipaddress, user.ID) if err != nil { InternalError(err, w) return @@ -297,7 +298,7 @@ func routeReplyEditSubmit(w http.ResponseWriter, r *http.Request, user User) { } content := html.EscapeString(preparseMessage(r.PostFormValue("edit_item"))) - _, err = edit_reply_stmt.Exec(content, parseMessage(content), rid) + _, err = editReplyStmt.Exec(content, parseMessage(content), rid) if err != nil { InternalErrorJSQ(err, w, r, isJs) return @@ -305,14 +306,14 @@ func routeReplyEditSubmit(w http.ResponseWriter, r *http.Request, user User) { // Get the Reply ID.. var tid int - err = get_reply_tid_stmt.QueryRow(rid).Scan(&tid) + err = getReplyTIDStmt.QueryRow(rid).Scan(&tid) if err != nil { InternalErrorJSQ(err, w, r, isJs) return } var fid int - err = get_topic_fid_stmt.QueryRow(tid).Scan(&fid) + err = getTopicFIDStmt.QueryRow(tid).Scan(&fid) if err == ErrNoRows { PreErrorJSQ("The parent topic doesn't exist.", w, r, isJs) return @@ -363,7 +364,7 @@ func routeReplyDeleteSubmit(w http.ResponseWriter, r *http.Request, user User) { } var fid int - err = get_topic_fid_stmt.QueryRow(reply.ParentID).Scan(&fid) + err = getTopicFIDStmt.QueryRow(reply.ParentID).Scan(&fid) if err == ErrNoRows { PreErrorJSQ("The parent topic doesn't exist.", w, r, isJs) return @@ -382,7 +383,7 @@ func routeReplyDeleteSubmit(w http.ResponseWriter, r *http.Request, user User) { return } - _, err = delete_reply_stmt.Exec(rid) + _, err = deleteReplyStmt.Exec(rid) if err != nil { InternalErrorJSQ(err, w, r, isJs) return @@ -406,7 +407,7 @@ func routeReplyDeleteSubmit(w http.ResponseWriter, r *http.Request, user User) { InternalErrorJSQ(err, w, r, isJs) return } - _, err = remove_replies_from_topic_stmt.Exec(1, reply.ParentID) + _, err = removeRepliesFromTopicStmt.Exec(1, reply.ParentID) if err != nil { InternalErrorJSQ(err, w, r, isJs) } @@ -445,7 +446,7 @@ func routeProfileReplyEditSubmit(w http.ResponseWriter, r *http.Request, user Us // Get the Reply ID.. var uid int - err = get_user_reply_uid_stmt.QueryRow(rid).Scan(&uid) + err = getUserReplyUIDStmt.QueryRow(rid).Scan(&uid) if err != nil { InternalErrorJSQ(err, w, r, isJs) return @@ -457,7 +458,7 @@ func routeProfileReplyEditSubmit(w http.ResponseWriter, r *http.Request, user Us } content := html.EscapeString(preparseMessage(r.PostFormValue("edit_item"))) - _, err = edit_profile_reply_stmt.Exec(content, parseMessage(content), rid) + _, err = editProfileReplyStmt.Exec(content, parseMessage(content), rid) if err != nil { InternalErrorJSQ(err, w, r, isJs) return @@ -485,7 +486,7 @@ func routeProfileReplyDeleteSubmit(w http.ResponseWriter, r *http.Request, user } var uid int - err = get_user_reply_uid_stmt.QueryRow(rid).Scan(&uid) + err = getUserReplyUIDStmt.QueryRow(rid).Scan(&uid) if err == ErrNoRows { LocalErrorJSQ("The reply you tried to delete doesn't exist.", w, r, user, isJs) return @@ -499,7 +500,7 @@ func routeProfileReplyDeleteSubmit(w http.ResponseWriter, r *http.Request, user return } - _, err = delete_profile_reply_stmt.Exec(rid) + _, err = deleteProfileReplyStmt.Exec(rid) if err != nil { InternalErrorJSQ(err, w, r, isJs) return @@ -527,7 +528,7 @@ func routeIps(w http.ResponseWriter, r *http.Request, user User) { var uid int var reqUserList = make(map[int]bool) - rows, err := find_users_by_ip_users_stmt.Query(ip) + rows, err := findUsersByIPUsersStmt.Query(ip) if err != nil { InternalError(err, w) return @@ -548,7 +549,7 @@ func routeIps(w http.ResponseWriter, r *http.Request, user User) { return } - rows2, err := find_users_by_ip_topics_stmt.Query(ip) + rows2, err := findUsersByIPTopicsStmt.Query(ip) if err != nil { InternalError(err, w) return @@ -569,7 +570,7 @@ func routeIps(w http.ResponseWriter, r *http.Request, user User) { return } - rows3, err := find_users_by_ip_replies_stmt.Query(ip) + rows3, err := findUsersByIPRepliesStmt.Query(ip) if err != nil { InternalError(err, w) return @@ -821,7 +822,7 @@ func routeActivate(w http.ResponseWriter, r *http.Request, user User) { } var active bool - err = get_user_active_stmt.QueryRow(uid).Scan(&active) + err = getUserActiveStmt.QueryRow(uid).Scan(&active) if err == ErrNoRows { LocalError("The account you're trying to activate no longer exists.", w, r, user) return @@ -834,13 +835,13 @@ func routeActivate(w http.ResponseWriter, r *http.Request, user User) { LocalError("The account you're trying to activate has already been activated.", w, r, user) return } - _, err = activate_user_stmt.Exec(uid) + _, err = activateUserStmt.Exec(uid) if err != nil { InternalError(err, w) return } - _, err = change_group_stmt.Exec(config.DefaultGroup, uid) + _, err = changeGroupStmt.Exec(config.DefaultGroup, uid) if err != nil { InternalError(err, w) return diff --git a/mysql.go b/mysql.go index ce7d84c5..948109bf 100644 --- a/mysql.go +++ b/mysql.go @@ -1,6 +1,11 @@ // +build !pgsql !sqlite !mssql -/* Copyright Azareal 2016 - 2018 */ +/* +* +* Gosora MySQL Interface +* Copyright Azareal 2016 - 2018 +* + */ package main import "log" @@ -11,15 +16,15 @@ import _ "github.com/go-sql-driver/mysql" import "./query_gen/lib" var dbCollation = "utf8mb4_general_ci" -var get_activity_feed_by_watcher_stmt *sql.Stmt -var get_activity_count_by_watcher_stmt *sql.Stmt -var todays_post_count_stmt *sql.Stmt -var todays_topic_count_stmt *sql.Stmt -var todays_report_count_stmt *sql.Stmt -var todays_newuser_count_stmt *sql.Stmt -var find_users_by_ip_users_stmt *sql.Stmt -var find_users_by_ip_topics_stmt *sql.Stmt -var find_users_by_ip_replies_stmt *sql.Stmt +var getActivityFeedByWatcherStmt *sql.Stmt +var getActivityCountByWatcherStmt *sql.Stmt +var todaysPostCountStmt *sql.Stmt +var todaysTopicCountStmt *sql.Stmt +var todaysReportCountStmt *sql.Stmt +var todaysNewUserCountStmt *sql.Stmt +var findUsersByIPUsersStmt *sql.Stmt +var findUsersByIPTopicsStmt *sql.Stmt +var findUsersByIPRepliesStmt *sql.Stmt func init() { dbAdapter = "mysql" @@ -68,54 +73,54 @@ func _initDatabase() (err error) { // TODO: Is there a less noisy way of doing this for tests? log.Print("Preparing get_activity_feed_by_watcher statement.") - get_activity_feed_by_watcher_stmt, err = db.Prepare("SELECT activity_stream_matches.asid, activity_stream.actor, activity_stream.targetUser, activity_stream.event, activity_stream.elementType, activity_stream.elementID FROM `activity_stream_matches` INNER JOIN `activity_stream` ON activity_stream_matches.asid = activity_stream.asid AND activity_stream_matches.watcher != activity_stream.actor WHERE `watcher` = ? ORDER BY activity_stream.asid ASC LIMIT 8") + getActivityFeedByWatcherStmt, err = db.Prepare("SELECT activity_stream_matches.asid, activity_stream.actor, activity_stream.targetUser, activity_stream.event, activity_stream.elementType, activity_stream.elementID FROM `activity_stream_matches` INNER JOIN `activity_stream` ON activity_stream_matches.asid = activity_stream.asid AND activity_stream_matches.watcher != activity_stream.actor WHERE `watcher` = ? ORDER BY activity_stream.asid ASC LIMIT 8") if err != nil { return err } log.Print("Preparing get_activity_count_by_watcher statement.") - get_activity_count_by_watcher_stmt, err = db.Prepare("SELECT count(*) FROM `activity_stream_matches` INNER JOIN `activity_stream` ON activity_stream_matches.asid = activity_stream.asid AND activity_stream_matches.watcher != activity_stream.actor WHERE `watcher` = ?") + getActivityCountByWatcherStmt, err = db.Prepare("SELECT count(*) FROM `activity_stream_matches` INNER JOIN `activity_stream` ON activity_stream_matches.asid = activity_stream.asid AND activity_stream_matches.watcher != activity_stream.actor WHERE `watcher` = ?") if err != nil { return err } log.Print("Preparing todays_post_count statement.") - todays_post_count_stmt, err = db.Prepare("select count(*) from replies where createdAt BETWEEN (utc_timestamp() - interval 1 day) and utc_timestamp()") + todaysPostCountStmt, err = db.Prepare("select count(*) from replies where createdAt BETWEEN (utc_timestamp() - interval 1 day) and utc_timestamp()") if err != nil { return err } log.Print("Preparing todays_topic_count statement.") - todays_topic_count_stmt, err = db.Prepare("select count(*) from topics where createdAt BETWEEN (utc_timestamp() - interval 1 day) and utc_timestamp()") + todaysTopicCountStmt, err = db.Prepare("select count(*) from topics where createdAt BETWEEN (utc_timestamp() - interval 1 day) and utc_timestamp()") if err != nil { return err } log.Print("Preparing todays_report_count statement.") - todays_report_count_stmt, err = db.Prepare("select count(*) from topics where createdAt BETWEEN (utc_timestamp() - interval 1 day) and utc_timestamp() and parentID = 1") + todaysReportCountStmt, err = db.Prepare("select count(*) from topics where createdAt BETWEEN (utc_timestamp() - interval 1 day) and utc_timestamp() and parentID = 1") if err != nil { return err } log.Print("Preparing todays_newuser_count statement.") - todays_newuser_count_stmt, err = db.Prepare("select count(*) from users where createdAt BETWEEN (utc_timestamp() - interval 1 day) and utc_timestamp()") + todaysNewUserCountStmt, err = db.Prepare("select count(*) from users where createdAt BETWEEN (utc_timestamp() - interval 1 day) and utc_timestamp()") if err != nil { return err } log.Print("Preparing find_users_by_ip_users statement.") - find_users_by_ip_users_stmt, err = db.Prepare("select uid from users where last_ip = ?") + findUsersByIPUsersStmt, err = db.Prepare("select uid from users where last_ip = ?") if err != nil { return err } log.Print("Preparing find_users_by_ip_topics statement.") - find_users_by_ip_topics_stmt, err = db.Prepare("select uid from users where uid in(select createdBy from topics where ipaddress = ?)") + findUsersByIPTopicsStmt, err = db.Prepare("select uid from users where uid in(select createdBy from topics where ipaddress = ?)") if err != nil { return err } log.Print("Preparing find_users_by_ip_replies statement.") - find_users_by_ip_replies_stmt, err = db.Prepare("select uid from users where uid in(select createdBy from replies where ipaddress = ?)") + findUsersByIPRepliesStmt, err = db.Prepare("select uid from users where uid in(select createdBy from replies where ipaddress = ?)") return err } diff --git a/panel_routes.go b/panel_routes.go index ddaea3bd..aa3fbe10 100644 --- a/panel_routes.go +++ b/panel_routes.go @@ -60,7 +60,7 @@ func routePanel(w http.ResponseWriter, r *http.Request, user User) { } var postCount int - err = todays_post_count_stmt.QueryRow().Scan(&postCount) + err = todaysPostCountStmt.QueryRow().Scan(&postCount) if err != nil && err != ErrNoRows { InternalError(err, w) return @@ -77,7 +77,7 @@ func routePanel(w http.ResponseWriter, r *http.Request, user User) { } var topicCount int - err = todays_topic_count_stmt.QueryRow().Scan(&topicCount) + err = todaysTopicCountStmt.QueryRow().Scan(&topicCount) if err != nil && err != ErrNoRows { InternalError(err, w) return @@ -94,7 +94,7 @@ func routePanel(w http.ResponseWriter, r *http.Request, user User) { } var reportCount int - err = todays_report_count_stmt.QueryRow().Scan(&reportCount) + err = todaysReportCountStmt.QueryRow().Scan(&reportCount) if err != nil && err != ErrNoRows { InternalError(err, w) return @@ -102,7 +102,7 @@ func routePanel(w http.ResponseWriter, r *http.Request, user User) { var reportInterval = "week" var newUserCount int - err = todays_newuser_count_stmt.QueryRow().Scan(&newUserCount) + err = todaysNewUserCountStmt.QueryRow().Scan(&newUserCount) if err != nil && err != ErrNoRows { InternalError(err, w) return @@ -440,7 +440,7 @@ func routePanelForumsEditSubmit(w http.ResponseWriter, r *http.Request, user Use } forumUpdateMutex.Lock() - _, err = update_forum_stmt.Exec(forumName, forumDesc, active, forumPreset, fid) + _, err = updateForumStmt.Exec(forumName, forumDesc, active, forumPreset, fid) if err != nil { InternalErrorJSQ(err, w, r, isJs) return @@ -531,13 +531,13 @@ func routePanelForumsEditPermsSubmit(w http.ResponseWriter, r *http.Request, use return } - _, err = add_forum_perms_to_group_stmt.Exec(gid, fid, permPreset, perms) + _, err = addForumPermsToGroupStmt.Exec(gid, fid, permPreset, perms) if err != nil { InternalErrorJSQ(err, w, r, isJs) return } - _, err = update_forum_stmt.Exec(forum.Name, forum.Desc, forum.Active, "", fid) + _, err = updateForumStmt.Exec(forum.Name, forum.Desc, forum.Active, "", fid) if err != nil { InternalErrorJSQ(err, w, r, isJs) return @@ -564,7 +564,7 @@ func routePanelSettings(w http.ResponseWriter, r *http.Request, user User) { //log.Print("headerVars.Settings",headerVars.Settings) var settingList = make(map[string]interface{}) - rows, err := get_settings_stmt.Query() + rows, err := getSettingsStmt.Query() if err != nil { InternalError(err, w) return @@ -628,7 +628,7 @@ func routePanelSetting(w http.ResponseWriter, r *http.Request, user User, sname } setting := Setting{sname, "", "", ""} - err := get_setting_stmt.QueryRow(setting.Name).Scan(&setting.Content, &setting.Type) + err := getSettingStmt.QueryRow(setting.Name).Scan(&setting.Content, &setting.Type) if err == ErrNoRows { LocalError("The setting you want to edit doesn't exist.", w, r, user) return @@ -691,7 +691,7 @@ func routePanelSettingEdit(w http.ResponseWriter, r *http.Request, user User, sn var stype, sconstraints string scontent := r.PostFormValue("setting-value") - err = get_full_setting_stmt.QueryRow(sname).Scan(&sname, &stype, &sconstraints) + err = getFullSettingStmt.QueryRow(sname).Scan(&sname, &stype, &sconstraints) if err == ErrNoRows { LocalError("The setting you want to edit doesn't exist.", w, r, user) return @@ -708,7 +708,8 @@ func routePanelSettingEdit(w http.ResponseWriter, r *http.Request, user User, sn } } - _, err = update_setting_stmt.Exec(scontent, sname) + // TODO: Make this a method or function? + _, err = updateSettingStmt.Exec(scontent, sname) if err != nil { InternalError(err, w) return @@ -773,7 +774,7 @@ func routePanelWordFiltersCreate(w http.ResponseWriter, r *http.Request, user Us // Unlike with find, it's okay if we leave this blank, as this means that the admin wants to remove the word entirely with no replacement replacement := strings.TrimSpace(r.PostFormValue("replacement")) - res, err := create_word_filter_stmt.Exec(find, replacement) + res, err := createWordFilterStmt.Exec(find, replacement) if err != nil { InternalErrorJSQ(err, w, r, isJs) return @@ -845,7 +846,7 @@ func routePanelWordFiltersEditSubmit(w http.ResponseWriter, r *http.Request, use // Unlike with find, it's okay if we leave this blank, as this means that the admin wants to remove the word entirely with no replacement replacement := strings.TrimSpace(r.PostFormValue("replacement")) - _, err = update_word_filter_stmt.Exec(find, replacement, id) + _, err = updateWordFilterStmt.Exec(find, replacement, id) if err != nil { InternalErrorJSQ(err, w, r, isJs) return @@ -881,7 +882,7 @@ func routePanelWordFiltersDeleteSubmit(w http.ResponseWriter, r *http.Request, u return } - _, err = delete_word_filter_stmt.Exec(id) + _, err = deleteWordFilterStmt.Exec(id) if err != nil { InternalErrorJSQ(err, w, r, isJs) return @@ -950,7 +951,7 @@ func routePanelPluginsActivate(w http.ResponseWriter, r *http.Request, user User } var active bool - err := is_plugin_active_stmt.QueryRow(uname).Scan(&active) + err := isPluginActiveStmt.QueryRow(uname).Scan(&active) if err != nil && err != ErrNoRows { InternalError(err, w) return @@ -972,15 +973,15 @@ func routePanelPluginsActivate(w http.ResponseWriter, r *http.Request, user User LocalError("The plugin is already active", w, r, user) return } - //log.Print("update_plugin") - _, err = update_plugin_stmt.Exec(1, uname) + //log.Print("updatePlugin") + _, err = updatePluginStmt.Exec(1, uname) if err != nil { InternalError(err, w) return } } else { - //log.Print("add_plugin") - _, err := add_plugin_stmt.Exec(uname, 1, 0) + //log.Print("addPlugin") + _, err := addPluginStmt.Exec(uname, 1, 0) if err != nil { InternalError(err, w) return @@ -1021,7 +1022,7 @@ func routePanelPluginsDeactivate(w http.ResponseWriter, r *http.Request, user Us } var active bool - err := is_plugin_active_stmt.QueryRow(uname).Scan(&active) + err := isPluginActiveStmt.QueryRow(uname).Scan(&active) if err == ErrNoRows { LocalError("The plugin you're trying to deactivate isn't active", w, r, user) return @@ -1034,7 +1035,7 @@ func routePanelPluginsDeactivate(w http.ResponseWriter, r *http.Request, user Us LocalError("The plugin you're trying to deactivate isn't active", w, r, user) return } - _, err = update_plugin_stmt.Exec(0, uname) + _, err = updatePluginStmt.Exec(0, uname) if err != nil { InternalError(err, w) return @@ -1078,7 +1079,7 @@ func routePanelPluginsInstall(w http.ResponseWriter, r *http.Request, user User, } var active bool - err := is_plugin_active_stmt.QueryRow(uname).Scan(&active) + err := isPluginActiveStmt.QueryRow(uname).Scan(&active) if err != nil && err != ErrNoRows { InternalError(err, w) return @@ -1102,18 +1103,18 @@ func routePanelPluginsInstall(w http.ResponseWriter, r *http.Request, user User, } if hasPlugin { - _, err = update_plugin_install_stmt.Exec(1, uname) + _, err = updatePluginInstallStmt.Exec(1, uname) if err != nil { InternalError(err, w) return } - _, err = update_plugin_stmt.Exec(1, uname) + _, err = updatePluginStmt.Exec(1, uname) if err != nil { InternalError(err, w) return } } else { - _, err := add_plugin_stmt.Exec(uname, 1, 1) + _, err := addPluginStmt.Exec(uname, 1, 1) if err != nil { InternalError(err, w) return @@ -1144,7 +1145,7 @@ func routePanelUsers(w http.ResponseWriter, r *http.Request, user User) { offset, page, lastPage := pageOffset(stats.Users, page, perPage) var userList []User - rows, err := get_users_offset_stmt.Query(offset, perPage) + rows, err := getUsersOffsetStmt.Query(offset, perPage) if err != nil { InternalError(err, w) return @@ -1335,7 +1336,7 @@ func routePanelUsersEditSubmit(w http.ResponseWriter, r *http.Request, user User return } - _, err = update_user_stmt.Exec(newname, newemail, newgroup, targetUser.ID) + _, err = updateUserStmt.Exec(newname, newemail, newgroup, targetUser.ID) if err != nil { InternalError(err, w) return @@ -1636,7 +1637,7 @@ func routePanelGroupsEditSubmit(w http.ResponseWriter, r *http.Request, user Use return } - _, err = update_group_rank_stmt.Exec(1, 1, 0, gid) + _, err = updateGroupRankStmt.Exec(1, 1, 0, gid) if err != nil { InternalError(err, w) return @@ -1650,7 +1651,7 @@ func routePanelGroupsEditSubmit(w http.ResponseWriter, r *http.Request, user Use return } - _, err = update_group_rank_stmt.Exec(0, 1, 0, gid) + _, err = updateGroupRankStmt.Exec(0, 1, 0, gid) if err != nil { InternalError(err, w) return @@ -1659,7 +1660,7 @@ func routePanelGroupsEditSubmit(w http.ResponseWriter, r *http.Request, user Use group.IsMod = true group.IsBanned = false case "Banned": - _, err = update_group_rank_stmt.Exec(0, 0, 1, gid) + _, err = updateGroupRankStmt.Exec(0, 0, 1, gid) if err != nil { InternalError(err, w) return @@ -1671,7 +1672,7 @@ func routePanelGroupsEditSubmit(w http.ResponseWriter, r *http.Request, user Use LocalError("You can't designate a group as a guest group.", w, r, user) return case "Member": - _, err = update_group_rank_stmt.Exec(0, 0, 0, gid) + _, err = updateGroupRankStmt.Exec(0, 0, 0, gid) if err != nil { InternalError(err, w) return @@ -1685,7 +1686,7 @@ func routePanelGroupsEditSubmit(w http.ResponseWriter, r *http.Request, user Use } } - _, err = update_group_stmt.Exec(gname, gtag, gid) + _, err = updateGroupStmt.Exec(gname, gtag, gid) if err != nil { InternalError(err, w) return @@ -1760,7 +1761,7 @@ func routePanelGroupsEditPermsSubmit(w http.ResponseWriter, r *http.Request, use return } - _, err = update_group_perms_stmt.Exec(pjson, gid) + _, err = updateGroupPermsStmt.Exec(pjson, gid) if err != nil { InternalError(err, w) return @@ -1886,7 +1887,7 @@ func routePanelThemesSetDefault(w http.ResponseWriter, r *http.Request, user Use var isDefault bool log.Print("uname", uname) - err := is_theme_default_stmt.QueryRow(uname).Scan(&isDefault) + err := isThemeDefaultStmt.QueryRow(uname).Scan(&isDefault) if err != nil && err != ErrNoRows { InternalError(err, w) return @@ -1899,13 +1900,13 @@ func routePanelThemesSetDefault(w http.ResponseWriter, r *http.Request, user Use LocalError("The theme is already active", w, r, user) return } - _, err = update_theme_stmt.Exec(1, uname) + _, err = updateThemeStmt.Exec(1, uname) if err != nil { InternalError(err, w) return } } else { - _, err := add_theme_stmt.Exec(uname, 1) + _, err := addThemeStmt.Exec(uname, 1) if err != nil { InternalError(err, w) return @@ -1915,7 +1916,7 @@ func routePanelThemesSetDefault(w http.ResponseWriter, r *http.Request, user Use // TODO: Make this less racey changeDefaultThemeMutex.Lock() defaultTheme := defaultThemeBox.Load().(string) - _, err = update_theme_stmt.Exec(0, defaultTheme) + _, err = updateThemeStmt.Exec(0, defaultTheme) if err != nil { InternalError(err, w) return @@ -1948,7 +1949,7 @@ func routePanelLogsMod(w http.ResponseWriter, r *http.Request, user User) { } var logCount int - err := modlog_count_stmt.QueryRow().Scan(&logCount) + err := modlogCountStmt.QueryRow().Scan(&logCount) if err != nil { InternalError(err, w) return @@ -1958,7 +1959,7 @@ func routePanelLogsMod(w http.ResponseWriter, r *http.Request, user User) { perPage := 10 offset, page, lastPage := pageOffset(logCount, page, perPage) - rows, err := get_modlogs_offset_stmt.Query(offset, perPage) + rows, err := getModlogsOffsetStmt.Query(offset, perPage) if err != nil { InternalError(err, w) return diff --git a/permissions.go b/permissions.go index 094216b4..e7f1b187 100644 --- a/permissions.go +++ b/permissions.go @@ -254,7 +254,7 @@ func permmapToQuery(permmap map[string]ForumPerms, fid int) error { permUpdateMutex.Lock() defer permUpdateMutex.Unlock() - _, err := delete_forum_perms_by_forum_stmt.Exec(fid) + _, err := deleteForumPermsByForumStmt.Exec(fid) if err != nil { return err } @@ -263,7 +263,7 @@ func permmapToQuery(permmap map[string]ForumPerms, fid int) error { if err != nil { return err } - _, err = add_forum_perms_to_forum_admins_stmt.Exec(fid, "", perms) + _, err = addForumPermsToForumAdminsStmt.Exec(fid, "", perms) if err != nil { return err } @@ -272,7 +272,7 @@ func permmapToQuery(permmap map[string]ForumPerms, fid int) error { if err != nil { return err } - _, err = add_forum_perms_to_forum_staff_stmt.Exec(fid, "", perms) + _, err = addForumPermsToForumStaffStmt.Exec(fid, "", perms) if err != nil { return err } @@ -281,7 +281,7 @@ func permmapToQuery(permmap map[string]ForumPerms, fid int) error { if err != nil { return err } - _, err = add_forum_perms_to_forum_members_stmt.Exec(fid, "", perms) + _, err = addForumPermsToForumMembersStmt.Exec(fid, "", perms) if err != nil { return err } @@ -290,7 +290,7 @@ func permmapToQuery(permmap map[string]ForumPerms, fid int) error { if err != nil { return err } - _, err = add_forum_perms_to_group_stmt.Exec(6, fid, "", perms) + _, err = addForumPermsToGroupStmt.Exec(6, fid, "", perms) if err != nil { return err } @@ -380,13 +380,14 @@ func rebuildForumPermissions(fid int) error { return nil } +// ? - We could have buildForumPermissions and rebuildForumPermissions call a third function containing common logic? func buildForumPermissions() error { forums, err := fstore.GetAll() if err != nil { return err } - rows, err := get_forums_permissions_stmt.Query() + rows, err := getForumsPermissionsStmt.Query() if err != nil { return err } diff --git a/query_gen/lib/mysql.go b/query_gen/lib/mysql.go index 216d7ed2..f87bb164 100644 --- a/query_gen/lib/mysql.go +++ b/query_gen/lib/mysql.go @@ -816,10 +816,10 @@ func (adapter *Mysql_Adapter) Write() error { stmt := adapter.Buffer[name] // TODO: Add support for create-table? Table creation might be a little complex for Go to do outside a SQL file :( if stmt.Type != "create-table" { - stmts += "var " + name + "_stmt *sql.Stmt\n" + stmts += "var " + name + "Stmt *sql.Stmt\n" body += ` log.Print("Preparing ` + name + ` statement.") - ` + name + `_stmt, err = db.Prepare("` + stmt.Contents + `") + ` + name + `Stmt, err = db.Prepare("` + stmt.Contents + `") if err != nil { return err } diff --git a/query_gen/lib/pgsql.go b/query_gen/lib/pgsql.go index 8832f5cd..3a2b1acf 100644 --- a/query_gen/lib/pgsql.go +++ b/query_gen/lib/pgsql.go @@ -306,10 +306,10 @@ func (adapter *Pgsql_Adapter) Write() error { stmt := adapter.Buffer[name] // TODO: Add support for create-table? Table creation might be a little complex for Go to do outside a SQL file :( if stmt.Type != "create-table" { - stmts += "var " + name + "_stmt *sql.Stmt\n" + stmts += "var " + name + "Stmt *sql.Stmt\n" body += ` log.Print("Preparing ` + name + ` statement.") - ` + name + `_stmt, err = db.Prepare("` + stmt.Contents + `") + ` + name + `Stmt, err = db.Prepare("` + stmt.Contents + `") if err != nil { return err } diff --git a/query_gen/main.go b/query_gen/main.go index 996bc430..7ba38aac 100644 --- a/query_gen/main.go +++ b/query_gen/main.go @@ -195,286 +195,284 @@ func seed_tables(adapter qgen.DB_Adapter) error { // nolint func write_selects(adapter qgen.DB_Adapter) error { // url_prefix and url_name will be removed from this query in a later commit - adapter.SimpleSelect("get_user", "users", "name, group, is_super_admin, avatar, message, url_prefix, url_name, level", "uid = ?", "", "") + adapter.SimpleSelect("getUser", "users", "name, group, is_super_admin, avatar, message, url_prefix, url_name, level", "uid = ?", "", "") - // Looking for get_topic? Your statement is in another castle + // Looking for getTopic? Your statement is in another castle - adapter.SimpleSelect("get_reply", "replies", "tid, content, createdBy, createdAt, lastEdit, lastEditBy, ipaddress, likeCount", "rid = ?", "", "") + adapter.SimpleSelect("getReply", "replies", "tid, content, createdBy, createdAt, lastEdit, lastEditBy, ipaddress, likeCount", "rid = ?", "", "") - adapter.SimpleSelect("get_user_reply", "users_replies", "uid, content, createdBy, createdAt, lastEdit, lastEditBy, ipaddress", "rid = ?", "", "") + adapter.SimpleSelect("getUserReply", "users_replies", "uid, content, createdBy, createdAt, lastEdit, lastEditBy, ipaddress", "rid = ?", "", "") - adapter.SimpleSelect("get_password", "users", "password,salt", "uid = ?", "", "") + adapter.SimpleSelect("getPassword", "users", "password,salt", "uid = ?", "", "") - adapter.SimpleSelect("get_settings", "settings", "name, content, type", "", "", "") + adapter.SimpleSelect("getSettings", "settings", "name, content, type", "", "", "") - adapter.SimpleSelect("get_setting", "settings", "content, type", "name = ?", "", "") + adapter.SimpleSelect("getSetting", "settings", "content, type", "name = ?", "", "") - adapter.SimpleSelect("get_full_setting", "settings", "name, type, constraints", "name = ?", "", "") + adapter.SimpleSelect("getFullSetting", "settings", "name, type, constraints", "name = ?", "", "") - adapter.SimpleSelect("get_full_settings", "settings", "name, content, type, constraints", "", "", "") + adapter.SimpleSelect("getFullSettings", "settings", "name, content, type, constraints", "", "", "") - adapter.SimpleSelect("get_groups", "users_groups", "gid, name, permissions, plugin_perms, is_mod, is_admin, is_banned, tag", "", "", "") + adapter.SimpleSelect("getGroups", "users_groups", "gid, name, permissions, plugin_perms, is_mod, is_admin, is_banned, tag", "", "", "") - adapter.SimpleSelect("get_forums", "forums", "fid, name, desc, active, preset, parentID, parentType, topicCount, lastTopic, lastTopicID, lastReplyer, lastReplyerID, lastTopicTime", "", "fid ASC", "") + adapter.SimpleSelect("getForums", "forums", "fid, name, desc, active, preset, parentID, parentType, topicCount, lastTopic, lastTopicID, lastReplyer, lastReplyerID, lastTopicTime", "", "fid ASC", "") - adapter.SimpleSelect("get_forums_permissions", "forums_permissions", "gid, fid, permissions", "", "gid ASC, fid ASC", "") + adapter.SimpleSelect("getForumsPermissions", "forums_permissions", "gid, fid, permissions", "", "gid ASC, fid ASC", "") - adapter.SimpleSelect("get_plugins", "plugins", "uname, active, installed", "", "", "") + adapter.SimpleSelect("getPlugins", "plugins", "uname, active, installed", "", "", "") - adapter.SimpleSelect("get_themes", "themes", "uname, default", "", "", "") + adapter.SimpleSelect("getThemes", "themes", "uname, default", "", "", "") - adapter.SimpleSelect("get_widgets", "widgets", "position, side, type, active, location, data", "", "position ASC", "") + adapter.SimpleSelect("getWidgets", "widgets", "position, side, type, active, location, data", "", "position ASC", "") - adapter.SimpleSelect("is_plugin_active", "plugins", "active", "uname = ?", "", "") + adapter.SimpleSelect("isPluginActive", "plugins", "active", "uname = ?", "", "") - //adapter.SimpleSelect("is_plugin_installed","plugins","installed","uname = ?","","") + //adapter.SimpleSelect("isPluginInstalled","plugins","installed","uname = ?","","") - adapter.SimpleSelect("get_users", "users", "uid, name, group, active, is_super_admin, avatar", "", "", "") + adapter.SimpleSelect("getUsers", "users", "uid, name, group, active, is_super_admin, avatar", "", "", "") - adapter.SimpleSelect("get_users_offset", "users", "uid, name, group, active, is_super_admin, avatar", "", "", "?,?") + adapter.SimpleSelect("getUsersOffset", "users", "uid, name, group, active, is_super_admin, avatar", "", "", "?,?") - adapter.SimpleSelect("get_word_filters", "word_filters", "wfid, find, replacement", "", "", "") + adapter.SimpleSelect("getWordFilters", "word_filters", "wfid, find, replacement", "", "", "") - adapter.SimpleSelect("is_theme_default", "themes", "default", "uname = ?", "", "") + adapter.SimpleSelect("isThemeDefault", "themes", "default", "uname = ?", "", "") - adapter.SimpleSelect("get_modlogs", "moderation_logs", "action, elementID, elementType, ipaddress, actorID, doneAt", "", "", "") + adapter.SimpleSelect("getModlogs", "moderation_logs", "action, elementID, elementType, ipaddress, actorID, doneAt", "", "", "") - adapter.SimpleSelect("get_modlogs_offset", "moderation_logs", "action, elementID, elementType, ipaddress, actorID, doneAt", "", "", "?,?") + adapter.SimpleSelect("getModlogsOffset", "moderation_logs", "action, elementID, elementType, ipaddress, actorID, doneAt", "", "", "?,?") - adapter.SimpleSelect("get_reply_tid", "replies", "tid", "rid = ?", "", "") + adapter.SimpleSelect("getReplyTID", "replies", "tid", "rid = ?", "", "") - adapter.SimpleSelect("get_topic_fid", "topics", "parentID", "tid = ?", "", "") + adapter.SimpleSelect("getTopicFID", "topics", "parentID", "tid = ?", "", "") - adapter.SimpleSelect("get_user_reply_uid", "users_replies", "uid", "rid = ?", "", "") + adapter.SimpleSelect("getUserReplyUID", "users_replies", "uid", "rid = ?", "", "") - adapter.SimpleSelect("has_liked_topic", "likes", "targetItem", "sentBy = ? and targetItem = ? and targetType = 'topics'", "", "") + adapter.SimpleSelect("hasLikedTopic", "likes", "targetItem", "sentBy = ? and targetItem = ? and targetType = 'topics'", "", "") - adapter.SimpleSelect("has_liked_reply", "likes", "targetItem", "sentBy = ? and targetItem = ? and targetType = 'replies'", "", "") + adapter.SimpleSelect("hasLikedReply", "likes", "targetItem", "sentBy = ? and targetItem = ? and targetType = 'replies'", "", "") - adapter.SimpleSelect("get_user_name", "users", "name", "uid = ?", "", "") + adapter.SimpleSelect("getUserName", "users", "name", "uid = ?", "", "") - adapter.SimpleSelect("get_user_active", "users", "active", "uid = ?", "", "") + adapter.SimpleSelect("getUserActive", "users", "active", "uid = ?", "", "") - adapter.SimpleSelect("get_emails_by_user", "emails", "email, validated, token", "uid = ?", "", "") + adapter.SimpleSelect("getEmailsByUser", "emails", "email, validated, token", "uid = ?", "", "") - adapter.SimpleSelect("get_topic_basic", "topics", "title, content", "tid = ?", "", "") + adapter.SimpleSelect("getTopicBasic", "topics", "title, content", "tid = ?", "", "") - adapter.SimpleSelect("get_activity_entry", "activity_stream", "actor, targetUser, event, elementType, elementID", "asid = ?", "", "") + adapter.SimpleSelect("getActivityEntry", "activity_stream", "actor, targetUser, event, elementType, elementID", "asid = ?", "", "") - adapter.SimpleSelect("forum_entry_exists", "forums", "fid", "name = ''", "fid ASC", "0,1") + adapter.SimpleSelect("forumEntryExists", "forums", "fid", "name = ''", "fid ASC", "0,1") - adapter.SimpleSelect("group_entry_exists", "users_groups", "gid", "name = ''", "gid ASC", "0,1") + adapter.SimpleSelect("groupEntryExists", "users_groups", "gid", "name = ''", "gid ASC", "0,1") - adapter.SimpleSelect("get_forum_topics_offset", "topics", "tid, title, content, createdBy, is_closed, sticky, createdAt, lastReplyAt, lastReplyBy, parentID, postCount, likeCount", "parentID = ?", "sticky DESC, lastReplyAt DESC, createdBy DESC", "?,?") + adapter.SimpleSelect("getForumTopicsOffset", "topics", "tid, title, content, createdBy, is_closed, sticky, createdAt, lastReplyAt, lastReplyBy, parentID, postCount, likeCount", "parentID = ?", "sticky DESC, lastReplyAt DESC, createdBy DESC", "?,?") - adapter.SimpleSelect("get_expired_scheduled_groups", "users_groups_scheduler", "uid", "UTC_TIMESTAMP() > revert_at AND temporary = 1", "", "") + adapter.SimpleSelect("getExpiredScheduledGroups", "users_groups_scheduler", "uid", "UTC_TIMESTAMP() > revert_at AND temporary = 1", "", "") - adapter.SimpleSelect("get_sync", "sync", "last_update", "", "", "") + adapter.SimpleSelect("getSync", "sync", "last_update", "", "", "") return nil } // nolint func write_left_joins(adapter qgen.DB_Adapter) error { - adapter.SimpleLeftJoin("get_topic_replies_offset", "replies", "users", "replies.rid, replies.content, replies.createdBy, replies.createdAt, replies.lastEdit, replies.lastEditBy, users.avatar, users.name, users.group, users.url_prefix, users.url_name, users.level, replies.ipaddress, replies.likeCount, replies.actionType", "replies.createdBy = users.uid", "tid = ?", "", "?,?") + adapter.SimpleLeftJoin("getTopicRepliesOffset", "replies", "users", "replies.rid, replies.content, replies.createdBy, replies.createdAt, replies.lastEdit, replies.lastEditBy, users.avatar, users.name, users.group, users.url_prefix, users.url_name, users.level, replies.ipaddress, replies.likeCount, replies.actionType", "replies.createdBy = users.uid", "tid = ?", "", "?,?") - adapter.SimpleLeftJoin("get_topic_list", "topics", "users", "topics.tid, topics.title, topics.content, topics.createdBy, topics.is_closed, topics.sticky, topics.createdAt, topics.parentID, users.name, users.avatar", "topics.createdBy = users.uid", "", "topics.sticky DESC, topics.lastReplyAt DESC, topics.createdBy DESC", "") + adapter.SimpleLeftJoin("getTopicList", "topics", "users", "topics.tid, topics.title, topics.content, topics.createdBy, topics.is_closed, topics.sticky, topics.createdAt, topics.parentID, users.name, users.avatar", "topics.createdBy = users.uid", "", "topics.sticky DESC, topics.lastReplyAt DESC, topics.createdBy DESC", "") - adapter.SimpleLeftJoin("get_topic_user", "topics", "users", "topics.title, topics.content, topics.createdBy, topics.createdAt, topics.is_closed, topics.sticky, topics.parentID, topics.ipaddress, topics.postCount, topics.likeCount, users.name, users.avatar, users.group, users.url_prefix, users.url_name, users.level", "topics.createdBy = users.uid", "tid = ?", "", "") + adapter.SimpleLeftJoin("getTopicUser", "topics", "users", "topics.title, topics.content, topics.createdBy, topics.createdAt, topics.is_closed, topics.sticky, topics.parentID, topics.ipaddress, topics.postCount, topics.likeCount, users.name, users.avatar, users.group, users.url_prefix, users.url_name, users.level", "topics.createdBy = users.uid", "tid = ?", "", "") - adapter.SimpleLeftJoin("get_topic_by_reply", "replies", "topics", "topics.tid, topics.title, topics.content, topics.createdBy, topics.createdAt, topics.is_closed, topics.sticky, topics.parentID, topics.ipaddress, topics.postCount, topics.likeCount, topics.data", "replies.tid = topics.tid", "rid = ?", "", "") + adapter.SimpleLeftJoin("getTopicByReply", "replies", "topics", "topics.tid, topics.title, topics.content, topics.createdBy, topics.createdAt, topics.is_closed, topics.sticky, topics.parentID, topics.ipaddress, topics.postCount, topics.likeCount, topics.data", "replies.tid = topics.tid", "rid = ?", "", "") - adapter.SimpleLeftJoin("get_topic_replies", "replies", "users", "replies.rid, replies.content, replies.createdBy, replies.createdAt, replies.lastEdit, replies.lastEditBy, users.avatar, users.name, users.group, users.url_prefix, users.url_name, users.level, replies.ipaddress", "replies.createdBy = users.uid", "tid = ?", "", "") + adapter.SimpleLeftJoin("getTopicReplies", "replies", "users", "replies.rid, replies.content, replies.createdBy, replies.createdAt, replies.lastEdit, replies.lastEditBy, users.avatar, users.name, users.group, users.url_prefix, users.url_name, users.level, replies.ipaddress", "replies.createdBy = users.uid", "tid = ?", "", "") - adapter.SimpleLeftJoin("get_forum_topics", "topics", "users", "topics.tid, topics.title, topics.content, topics.createdBy, topics.is_closed, topics.sticky, topics.createdAt, topics.lastReplyAt, topics.parentID, users.name, users.avatar", "topics.createdBy = users.uid", "topics.parentID = ?", "topics.sticky DESC, topics.lastReplyAt DESC, topics.createdBy desc", "") + adapter.SimpleLeftJoin("getForumTopics", "topics", "users", "topics.tid, topics.title, topics.content, topics.createdBy, topics.is_closed, topics.sticky, topics.createdAt, topics.lastReplyAt, topics.parentID, users.name, users.avatar", "topics.createdBy = users.uid", "topics.parentID = ?", "topics.sticky DESC, topics.lastReplyAt DESC, topics.createdBy desc", "") - adapter.SimpleLeftJoin("get_profile_replies", "users_replies", "users", "users_replies.rid, users_replies.content, users_replies.createdBy, users_replies.createdAt, users_replies.lastEdit, users_replies.lastEditBy, users.avatar, users.name, users.group", "users_replies.createdBy = users.uid", "users_replies.uid = ?", "", "") + adapter.SimpleLeftJoin("getProfileReplies", "users_replies", "users", "users_replies.rid, users_replies.content, users_replies.createdBy, users_replies.createdAt, users_replies.lastEdit, users_replies.lastEditBy, users.avatar, users.name, users.group", "users_replies.createdBy = users.uid", "users_replies.uid = ?", "", "") return nil } // nolint func write_inner_joins(adapter qgen.DB_Adapter) error { - adapter.SimpleInnerJoin("get_watchers", "activity_stream", "activity_subscriptions", "activity_subscriptions.user", "activity_subscriptions.targetType = activity_stream.elementType AND activity_subscriptions.targetID = activity_stream.elementID AND activity_subscriptions.user != activity_stream.actor", "asid = ?", "", "") + adapter.SimpleInnerJoin("getWatchers", "activity_stream", "activity_subscriptions", "activity_subscriptions.user", "activity_subscriptions.targetType = activity_stream.elementType AND activity_subscriptions.targetID = activity_stream.elementID AND activity_subscriptions.user != activity_stream.actor", "asid = ?", "", "") return nil } // nolint func write_inserts(adapter qgen.DB_Adapter) error { - adapter.SimpleInsert("create_topic", "topics", "parentID,title,content,parsed_content,createdAt,lastReplyAt,lastReplyBy,ipaddress,words,createdBy", "?,?,?,?,UTC_TIMESTAMP(),UTC_TIMESTAMP(),?,?,?,?") + adapter.SimpleInsert("createTopic", "topics", "parentID,title,content,parsed_content,createdAt,lastReplyAt,lastReplyBy,ipaddress,words,createdBy", "?,?,?,?,UTC_TIMESTAMP(),UTC_TIMESTAMP(),?,?,?,?") - adapter.SimpleInsert("create_report", "topics", "title,content,parsed_content,createdAt,lastReplyAt,createdBy,data,parentID,css_class", "?,?,?,UTC_TIMESTAMP(),UTC_TIMESTAMP(),?,?,1,'report'") + adapter.SimpleInsert("createReport", "topics", "title,content,parsed_content,createdAt,lastReplyAt,createdBy,data,parentID,css_class", "?,?,?,UTC_TIMESTAMP(),UTC_TIMESTAMP(),?,?,1,'report'") - adapter.SimpleInsert("create_reply", "replies", "tid,content,parsed_content,createdAt,ipaddress,words,createdBy", "?,?,?,UTC_TIMESTAMP(),?,?,?") + adapter.SimpleInsert("createReply", "replies", "tid,content,parsed_content,createdAt,ipaddress,words,createdBy", "?,?,?,UTC_TIMESTAMP(),?,?,?") - adapter.SimpleInsert("create_action_reply", "replies", "tid,actionType,ipaddress,createdBy", "?,?,?,?") + adapter.SimpleInsert("createActionReply", "replies", "tid,actionType,ipaddress,createdBy", "?,?,?,?") - adapter.SimpleInsert("create_like", "likes", "weight, targetItem, targetType, sentBy", "?,?,?,?") + adapter.SimpleInsert("createLike", "likes", "weight, targetItem, targetType, sentBy", "?,?,?,?") - adapter.SimpleInsert("add_activity", "activity_stream", "actor,targetUser,event,elementType,elementID", "?,?,?,?,?") + adapter.SimpleInsert("addActivity", "activity_stream", "actor,targetUser,event,elementType,elementID", "?,?,?,?,?") - adapter.SimpleInsert("notify_one", "activity_stream_matches", "watcher,asid", "?,?") + adapter.SimpleInsert("notifyOne", "activity_stream_matches", "watcher,asid", "?,?") - adapter.SimpleInsert("add_email", "emails", "email, uid, validated, token", "?,?,?,?") + adapter.SimpleInsert("addEmail", "emails", "email, uid, validated, token", "?,?,?,?") - adapter.SimpleInsert("create_profile_reply", "users_replies", "uid, content, parsed_content, createdAt, createdBy, ipaddress", "?,?,?,UTC_TIMESTAMP(),?,?") + adapter.SimpleInsert("createProfileReply", "users_replies", "uid, content, parsed_content, createdAt, createdBy, ipaddress", "?,?,?,UTC_TIMESTAMP(),?,?") - adapter.SimpleInsert("add_subscription", "activity_subscriptions", "user,targetID,targetType,level", "?,?,?,2") + adapter.SimpleInsert("addSubscription", "activity_subscriptions", "user,targetID,targetType,level", "?,?,?,2") - adapter.SimpleInsert("create_forum", "forums", "name, desc, active, preset", "?,?,?,?") + adapter.SimpleInsert("createForum", "forums", "name, desc, active, preset", "?,?,?,?") - adapter.SimpleInsert("add_forum_perms_to_forum", "forums_permissions", "gid,fid,preset,permissions", "?,?,?,?") + adapter.SimpleInsert("addForumPermsToForum", "forums_permissions", "gid,fid,preset,permissions", "?,?,?,?") - adapter.SimpleInsert("add_plugin", "plugins", "uname, active, installed", "?,?,?") + adapter.SimpleInsert("addPlugin", "plugins", "uname, active, installed", "?,?,?") - adapter.SimpleInsert("add_theme", "themes", "uname,default", "?,?") + adapter.SimpleInsert("addTheme", "themes", "uname,default", "?,?") - adapter.SimpleInsert("create_group", "users_groups", "name, tag, is_admin, is_mod, is_banned, permissions", "?,?,?,?,?,?") + adapter.SimpleInsert("createGroup", "users_groups", "name, tag, is_admin, is_mod, is_banned, permissions", "?,?,?,?,?,?") - adapter.SimpleInsert("add_modlog_entry", "moderation_logs", "action, elementID, elementType, ipaddress, actorID, doneAt", "?,?,?,?,?,UTC_TIMESTAMP()") + adapter.SimpleInsert("addModlogEntry", "moderation_logs", "action, elementID, elementType, ipaddress, actorID, doneAt", "?,?,?,?,?,UTC_TIMESTAMP()") - adapter.SimpleInsert("add_adminlog_entry", "administration_logs", "action, elementID, elementType, ipaddress, actorID, doneAt", "?,?,?,?,?,UTC_TIMESTAMP()") + adapter.SimpleInsert("addAdminlogEntry", "administration_logs", "action, elementID, elementType, ipaddress, actorID, doneAt", "?,?,?,?,?,UTC_TIMESTAMP()") - adapter.SimpleInsert("create_word_filter", "word_filters", "find, replacement", "?,?") + adapter.SimpleInsert("createWordFilter", "word_filters", "find, replacement", "?,?") return nil } // nolint func write_replaces(adapter qgen.DB_Adapter) error { - adapter.SimpleReplace("add_forum_perms_to_group", "forums_permissions", "gid,fid,preset,permissions", "?,?,?,?") + adapter.SimpleReplace("addForumPermsToGroup", "forums_permissions", "gid,fid,preset,permissions", "?,?,?,?") - adapter.SimpleReplace("replace_schedule_group", "users_groups_scheduler", "uid, set_group, issued_by, issued_at, revert_at, temporary", "?,?,?,UTC_TIMESTAMP(),?,?") + adapter.SimpleReplace("replaceScheduleGroup", "users_groups_scheduler", "uid, set_group, issued_by, issued_at, revert_at, temporary", "?,?,?,UTC_TIMESTAMP(),?,?") return nil } // nolint func write_updates(adapter qgen.DB_Adapter) error { - adapter.SimpleUpdate("add_replies_to_topic", "topics", "postCount = postCount + ?, lastReplyBy = ?, lastReplyAt = UTC_TIMESTAMP()", "tid = ?") + adapter.SimpleUpdate("addRepliesToTopic", "topics", "postCount = postCount + ?, lastReplyBy = ?, lastReplyAt = UTC_TIMESTAMP()", "tid = ?") - adapter.SimpleUpdate("remove_replies_from_topic", "topics", "postCount = postCount - ?", "tid = ?") + adapter.SimpleUpdate("removeRepliesFromTopic", "topics", "postCount = postCount - ?", "tid = ?") - adapter.SimpleUpdate("add_topics_to_forum", "forums", "topicCount = topicCount + ?", "fid = ?") + adapter.SimpleUpdate("addTopicsToForum", "forums", "topicCount = topicCount + ?", "fid = ?") - adapter.SimpleUpdate("remove_topics_from_forum", "forums", "topicCount = topicCount - ?", "fid = ?") + adapter.SimpleUpdate("removeTopicsFromForum", "forums", "topicCount = topicCount - ?", "fid = ?") - adapter.SimpleUpdate("update_forum_cache", "forums", "lastTopic = ?, lastTopicID = ?, lastReplyer = ?, lastReplyerID = ?, lastTopicTime = UTC_TIMESTAMP()", "fid = ?") + adapter.SimpleUpdate("updateForumCache", "forums", "lastTopic = ?, lastTopicID = ?, lastReplyer = ?, lastReplyerID = ?, lastTopicTime = UTC_TIMESTAMP()", "fid = ?") - adapter.SimpleUpdate("add_likes_to_topic", "topics", "likeCount = likeCount + ?", "tid = ?") + adapter.SimpleUpdate("addLikesToTopic", "topics", "likeCount = likeCount + ?", "tid = ?") - adapter.SimpleUpdate("add_likes_to_reply", "replies", "likeCount = likeCount + ?", "rid = ?") + adapter.SimpleUpdate("addLikesToReply", "replies", "likeCount = likeCount + ?", "rid = ?") - adapter.SimpleUpdate("edit_topic", "topics", "title = ?, content = ?, parsed_content = ?, is_closed = ?", "tid = ?") + adapter.SimpleUpdate("editTopic", "topics", "title = ?, content = ?, parsed_content = ?, is_closed = ?", "tid = ?") - adapter.SimpleUpdate("edit_reply", "replies", "content = ?, parsed_content = ?", "rid = ?") + adapter.SimpleUpdate("editReply", "replies", "content = ?, parsed_content = ?", "rid = ?") - adapter.SimpleUpdate("stick_topic", "topics", "sticky = 1", "tid = ?") + adapter.SimpleUpdate("stickTopic", "topics", "sticky = 1", "tid = ?") - adapter.SimpleUpdate("unstick_topic", "topics", "sticky = 0", "tid = ?") + adapter.SimpleUpdate("unstickTopic", "topics", "sticky = 0", "tid = ?") - adapter.SimpleUpdate("update_last_ip", "users", "last_ip = ?", "uid = ?") + adapter.SimpleUpdate("updateLastIP", "users", "last_ip = ?", "uid = ?") - adapter.SimpleUpdate("update_session", "users", "session = ?", "uid = ?") + adapter.SimpleUpdate("updateSession", "users", "session = ?", "uid = ?") - adapter.SimpleUpdate("set_password", "users", "password = ?, salt = ?", "uid = ?") + adapter.SimpleUpdate("setPassword", "users", "password = ?, salt = ?", "uid = ?") - adapter.SimpleUpdate("set_avatar", "users", "avatar = ?", "uid = ?") + adapter.SimpleUpdate("setAvatar", "users", "avatar = ?", "uid = ?") - adapter.SimpleUpdate("set_username", "users", "name = ?", "uid = ?") + adapter.SimpleUpdate("setUsername", "users", "name = ?", "uid = ?") - adapter.SimpleUpdate("change_group", "users", "group = ?", "uid = ?") + adapter.SimpleUpdate("changeGroup", "users", "group = ?", "uid = ?") - adapter.SimpleUpdate("activate_user", "users", "active = 1", "uid = ?") + adapter.SimpleUpdate("activateUser", "users", "active = 1", "uid = ?") - adapter.SimpleUpdate("update_user_level", "users", "level = ?", "uid = ?") + adapter.SimpleUpdate("updateUserLevel", "users", "level = ?", "uid = ?") - adapter.SimpleUpdate("increment_user_score", "users", "score = score + ?", "uid = ?") + adapter.SimpleUpdate("incrementUserScore", "users", "score = score + ?", "uid = ?") - adapter.SimpleUpdate("increment_user_posts", "users", "posts = posts + ?", "uid = ?") + adapter.SimpleUpdate("incrementUserPosts", "users", "posts = posts + ?", "uid = ?") - adapter.SimpleUpdate("increment_user_bigposts", "users", "posts = posts + ?, bigposts = bigposts + ?", "uid = ?") + adapter.SimpleUpdate("incrementUserBigposts", "users", "posts = posts + ?, bigposts = bigposts + ?", "uid = ?") - adapter.SimpleUpdate("increment_user_megaposts", "users", "posts = posts + ?, bigposts = bigposts + ?, megaposts = megaposts + ?", "uid = ?") + adapter.SimpleUpdate("incrementUserMegaposts", "users", "posts = posts + ?, bigposts = bigposts + ?, megaposts = megaposts + ?", "uid = ?") - adapter.SimpleUpdate("increment_user_topics", "users", "topics = topics + ?", "uid = ?") + adapter.SimpleUpdate("incrementUserTopics", "users", "topics = topics + ?", "uid = ?") - adapter.SimpleUpdate("edit_profile_reply", "users_replies", "content = ?, parsed_content = ?", "rid = ?") + adapter.SimpleUpdate("editProfileReply", "users_replies", "content = ?, parsed_content = ?", "rid = ?") - adapter.SimpleUpdate("update_forum", "forums", "name = ?, desc = ?, active = ?, preset = ?", "fid = ?") + adapter.SimpleUpdate("updateForum", "forums", "name = ?, desc = ?, active = ?, preset = ?", "fid = ?") - adapter.SimpleUpdate("update_setting", "settings", "content = ?", "name = ?") + adapter.SimpleUpdate("updateSetting", "settings", "content = ?", "name = ?") - adapter.SimpleUpdate("update_plugin", "plugins", "active = ?", "uname = ?") + adapter.SimpleUpdate("updatePlugin", "plugins", "active = ?", "uname = ?") - adapter.SimpleUpdate("update_plugin_install", "plugins", "installed = ?", "uname = ?") + adapter.SimpleUpdate("updatePluginInstall", "plugins", "installed = ?", "uname = ?") - adapter.SimpleUpdate("update_theme", "themes", "default = ?", "uname = ?") + adapter.SimpleUpdate("updateTheme", "themes", "default = ?", "uname = ?") - adapter.SimpleUpdate("update_user", "users", "name = ?, email = ?, group = ?", "uid = ?") + adapter.SimpleUpdate("updateUser", "users", "name = ?, email = ?, group = ?", "uid = ?") - adapter.SimpleUpdate("update_group_perms", "users_groups", "permissions = ?", "gid = ?") + adapter.SimpleUpdate("updateGroupPerms", "users_groups", "permissions = ?", "gid = ?") - adapter.SimpleUpdate("update_group_rank", "users_groups", "is_admin = ?, is_mod = ?, is_banned = ?", "gid = ?") + adapter.SimpleUpdate("updateGroupRank", "users_groups", "is_admin = ?, is_mod = ?, is_banned = ?", "gid = ?") - adapter.SimpleUpdate("update_group", "users_groups", "name = ?, tag = ?", "gid = ?") + adapter.SimpleUpdate("updateGroup", "users_groups", "name = ?, tag = ?", "gid = ?") - adapter.SimpleUpdate("update_email", "emails", "email = ?, uid = ?, validated = ?, token = ?", "email = ?") + adapter.SimpleUpdate("updateEmail", "emails", "email = ?, uid = ?, validated = ?, token = ?", "email = ?") - adapter.SimpleUpdate("verify_email", "emails", "validated = 1, token = ''", "email = ?") // Need to fix this: Empty string isn't working, it gets set to 1 instead x.x -- Has this been fixed? + adapter.SimpleUpdate("verifyEmail", "emails", "validated = 1, token = ''", "email = ?") // Need to fix this: Empty string isn't working, it gets set to 1 instead x.x -- Has this been fixed? - adapter.SimpleUpdate("set_temp_group", "users", "temp_group = ?", "uid = ?") + adapter.SimpleUpdate("setTempGroup", "users", "temp_group = ?", "uid = ?") - adapter.SimpleUpdate("update_word_filter", "word_filters", "find = ?, replacement = ?", "wfid = ?") + adapter.SimpleUpdate("updateWordFilter", "word_filters", "find = ?, replacement = ?", "wfid = ?") - adapter.SimpleUpdate("bump_sync", "sync", "last_update = UTC_TIMESTAMP()", "") + adapter.SimpleUpdate("bumpSync", "sync", "last_update = UTC_TIMESTAMP()", "") return nil } // nolint func write_deletes(adapter qgen.DB_Adapter) error { - adapter.SimpleDelete("delete_reply", "replies", "rid = ?") + adapter.SimpleDelete("deleteReply", "replies", "rid = ?") - adapter.SimpleDelete("delete_topic", "topics", "tid = ?") + adapter.SimpleDelete("deleteProfileReply", "users_replies", "rid = ?") - adapter.SimpleDelete("delete_profile_reply", "users_replies", "rid = ?") + adapter.SimpleDelete("deleteForumPermsByForum", "forums_permissions", "fid = ?") - adapter.SimpleDelete("delete_forum_perms_by_forum", "forums_permissions", "fid = ?") - - adapter.SimpleDelete("delete_activity_stream_match", "activity_stream_matches", "watcher = ? AND asid = ?") + adapter.SimpleDelete("deleteActivityStreamMatch", "activity_stream_matches", "watcher = ? AND asid = ?") //adapter.SimpleDelete("delete_activity_stream_matches_by_watcher","activity_stream_matches","watcher = ?") - adapter.SimpleDelete("delete_word_filter", "word_filters", "wfid = ?") + adapter.SimpleDelete("deleteWordFilter", "word_filters", "wfid = ?") return nil } // nolint func write_simple_counts(adapter qgen.DB_Adapter) error { - adapter.SimpleCount("report_exists", "topics", "data = ? AND data != '' AND parentID = 1", "") + adapter.SimpleCount("reportExists", "topics", "data = ? AND data != '' AND parentID = 1", "") - adapter.SimpleCount("group_count", "users_groups", "", "") + adapter.SimpleCount("groupCount", "users_groups", "", "") - adapter.SimpleCount("modlog_count", "moderation_logs", "", "") + adapter.SimpleCount("modlogCount", "moderation_logs", "", "") return nil } // nolint func write_insert_selects(adapter qgen.DB_Adapter) error { - adapter.SimpleInsertSelect("add_forum_perms_to_forum_admins", + adapter.SimpleInsertSelect("addForumPermsToForumAdmins", qgen.DB_Insert{"forums_permissions", "gid,fid,preset,permissions", ""}, qgen.DB_Select{"users_groups", "gid, ? AS fid, ? AS preset, ? AS permissions", "is_admin = 1", "", ""}, ) - adapter.SimpleInsertSelect("add_forum_perms_to_forum_staff", + adapter.SimpleInsertSelect("addForumPermsToForumStaff", qgen.DB_Insert{"forums_permissions", "gid,fid,preset,permissions", ""}, qgen.DB_Select{"users_groups", "gid, ? AS fid, ? AS preset, ? AS permissions", "is_admin = 0 AND is_mod = 1", "", ""}, ) - adapter.SimpleInsertSelect("add_forum_perms_to_forum_members", + adapter.SimpleInsertSelect("addForumPermsToForumMembers", qgen.DB_Insert{"forums_permissions", "gid,fid,preset,permissions", ""}, qgen.DB_Select{"users_groups", "gid, ? AS fid, ? AS preset, ? AS permissions", "is_admin = 0 AND is_mod = 0 AND is_banned = 0", "", ""}, ) @@ -489,7 +487,7 @@ func write_insert_left_joins(adapter qgen.DB_Adapter) error { // nolint func write_insert_inner_joins(adapter qgen.DB_Adapter) error { - adapter.SimpleInsertInnerJoin("notify_watchers", + adapter.SimpleInsertInnerJoin("notifyWatchers", qgen.DB_Insert{"activity_stream_matches", "watcher, asid", ""}, qgen.DB_Join{"activity_stream", "activity_subscriptions", "activity_subscriptions.user, activity_stream.asid", "activity_subscriptions.targetType = activity_stream.elementType AND activity_subscriptions.targetID = activity_stream.elementID AND activity_subscriptions.user != activity_stream.actor", "asid = ?", "", ""}, ) diff --git a/reply.go b/reply.go index ff1adfb6..fcaedf30 100644 --- a/reply.go +++ b/reply.go @@ -53,12 +53,12 @@ type ReplyShort struct { func getReply(id int) (*ReplyShort, error) { reply := ReplyShort{ID: id} - err := get_reply_stmt.QueryRow(id).Scan(&reply.ParentID, &reply.Content, &reply.CreatedBy, &reply.CreatedAt, &reply.LastEdit, &reply.LastEditBy, &reply.IPAddress, &reply.LikeCount) + err := getReplyStmt.QueryRow(id).Scan(&reply.ParentID, &reply.Content, &reply.CreatedBy, &reply.CreatedAt, &reply.LastEdit, &reply.LastEditBy, &reply.IPAddress, &reply.LikeCount) return &reply, err } func getUserReply(id int) (*ReplyShort, error) { reply := ReplyShort{ID: id} - err := get_user_reply_stmt.QueryRow(id).Scan(&reply.ParentID, &reply.Content, &reply.CreatedBy, &reply.CreatedAt, &reply.LastEdit, &reply.LastEditBy, &reply.IPAddress) + err := getUserReplyStmt.QueryRow(id).Scan(&reply.ParentID, &reply.Content, &reply.CreatedBy, &reply.CreatedAt, &reply.LastEdit, &reply.LastEditBy, &reply.IPAddress) return &reply, err } diff --git a/routes.go b/routes.go index e68194b9..ae3dc8e8 100644 --- a/routes.go +++ b/routes.go @@ -33,6 +33,7 @@ func init() { hvars = &HeaderVars{Site: site} } +// HTTPSRedirect is a connection handler which redirects all HTTP requests to HTTPS type HTTPSRedirect struct { } @@ -307,7 +308,7 @@ func routeForum(w http.ResponseWriter, r *http.Request, user User, sfid string) } else { page = 1 } - rows, err := get_forum_topics_offset_stmt.Query(fid, offset, config.ItemsPerPage) + rows, err := getForumTopicsOffsetStmt.Query(fid, offset, config.ItemsPerPage) if err != nil { InternalError(err, w) return @@ -461,6 +462,7 @@ func routeTopicID(w http.ResponseWriter, r *http.Request, user User) { return } topic.ClassName = "" + //log.Printf("topic: %+v\n", topic) headerVars, ok := ForumUserCheck(w, r, &user, topic.ParentID) if !ok { @@ -490,7 +492,7 @@ func routeTopicID(w http.ResponseWriter, r *http.Request, user User) { topic.Tag = postGroup.Tag if postGroup.IsMod || postGroup.IsAdmin { - topic.ClassName = config.StaffCss + topic.ClassName = config.StaffCSS } /*if headerVars.Settings["url_tags"] == false { @@ -509,6 +511,15 @@ func routeTopicID(w http.ResponseWriter, r *http.Request, user User) { topic.CreatedAt = "" } + // TODO: Make a function for this? Build a more sophisticated noavatar handling system? + if topic.Avatar != "" { + if topic.Avatar[0] == '.' { + topic.Avatar = "/uploads/avatar_" + strconv.Itoa(topic.CreatedBy) + topic.Avatar + } + } else { + topic.Avatar = strings.Replace(config.Noavatar, "{id}", strconv.Itoa(topic.CreatedBy), 1) + } + // Calculate the offset lastPage := (topic.PostCount / config.ItemsPerPage) + 1 if page > 1 { @@ -521,7 +532,7 @@ func routeTopicID(w http.ResponseWriter, r *http.Request, user User) { } // Get the replies.. - rows, err := get_topic_replies_offset_stmt.Query(topic.ID, offset, config.ItemsPerPage) + rows, err := getTopicRepliesOffsetStmt.Query(topic.ID, offset, config.ItemsPerPage) if err == ErrNoRows { LocalError("Bad Page. Some of the posts may have been deleted or you got here by directly typing in the page number.", w, r, user) return @@ -551,11 +562,12 @@ func routeTopicID(w http.ResponseWriter, r *http.Request, user User) { } if postGroup.IsMod || postGroup.IsAdmin { - replyItem.ClassName = config.StaffCss + replyItem.ClassName = config.StaffCSS } else { replyItem.ClassName = "" } + // TODO: Make a function for this? Build a more sophisticated noavatar handling system? if replyItem.Avatar != "" { if replyItem.Avatar[0] == '.' { replyItem.Avatar = "/uploads/avatar_" + strconv.Itoa(replyItem.CreatedBy) + replyItem.Avatar @@ -665,7 +677,7 @@ func routeProfile(w http.ResponseWriter, r *http.Request, user User) { } // Get the replies.. - rows, err := get_profile_replies_stmt.Query(puser.ID) + rows, err := getProfileRepliesStmt.Query(puser.ID) if err != nil { InternalError(err, w) return @@ -687,7 +699,7 @@ func routeProfile(w http.ResponseWriter, r *http.Request, user User) { replyLines = strings.Count(replyContent, "\n") if group.IsMod || group.IsAdmin { - replyClassName = config.StaffCss + replyClassName = config.StaffCSS } else { replyClassName = "" } @@ -893,7 +905,7 @@ func routeRegisterSubmit(w http.ResponseWriter, r *http.Request, user User) { InternalError(err, w) return } - _, err = add_email_stmt.Exec(email, uid, 0, token) + _, err = addEmailStmt.Exec(email, uid, 0, token) if err != nil { InternalError(err, w) return @@ -981,7 +993,7 @@ func routeAPI(w http.ResponseWriter, r *http.Request, user User) { return } - _, err = delete_activity_stream_match_stmt.Exec(user.ID, asid) + _, err = deleteActivityStreamMatchStmt.Exec(user.ID, asid) if err != nil { InternalError(err, w) return @@ -996,7 +1008,7 @@ func routeAPI(w http.ResponseWriter, r *http.Request, user User) { var asid, actorID, targetUserID, elementID int var msgCount int - err = get_activity_count_by_watcher_stmt.QueryRow(user.ID).Scan(&msgCount) + err = getActivityCountByWatcherStmt.QueryRow(user.ID).Scan(&msgCount) if err == ErrNoRows { PreErrorJS("Couldn't find the parent topic", w, r) return @@ -1005,7 +1017,7 @@ func routeAPI(w http.ResponseWriter, r *http.Request, user User) { return } - rows, err := get_activity_feed_by_watcher_stmt.Query(user.ID) + rows, err := getActivityFeedByWatcherStmt.Query(user.ID) if err != nil { InternalErrorJS(err, w, r) return diff --git a/routes_common.go b/routes_common.go index 5fdf8c7d..8b097052 100644 --- a/routes_common.go +++ b/routes_common.go @@ -180,7 +180,7 @@ func panelUserCheck(w http.ResponseWriter, r *http.Request, user *User) (headerV } } - err = group_count_stmt.QueryRow().Scan(&stats.Groups) + err = groupCountStmt.QueryRow().Scan(&stats.Groups) if err != nil { InternalError(err, w) return headerVars, stats, false @@ -307,7 +307,7 @@ func preRoute(w http.ResponseWriter, r *http.Request) (User, bool) { return *user, false } if host != user.LastIP { - _, err = update_last_ip_stmt.Exec(host, user.ID) + _, err = updateLastIPStmt.Exec(host, user.ID) if err != nil { InternalError(err, w) return *user, false diff --git a/setting.go b/setting.go index d7406342..57b755e2 100644 --- a/setting.go +++ b/setting.go @@ -27,7 +27,7 @@ func init() { } func LoadSettings() error { - rows, err := get_full_settings_stmt.Query() + rows, err := getFullSettingsStmt.Query() if err != nil { return err } diff --git a/site.go b/site.go index 0f061814..db8504af 100644 --- a/site.go +++ b/site.go @@ -35,15 +35,15 @@ type Config struct { UserCacheCapacity int TopicCacheCapacity int - SmtpServer string - SmtpUsername string - SmtpPassword string - SmtpPort string + SMTPServer string + SMTPUsername string + SMTPPassword string + SMTPPort string DefaultRoute func(http.ResponseWriter, *http.Request, User) DefaultGroup int ActivationGroup int - StaffCss string // ? - Move this into the settings table? Might be better to implement this as Group CSS + StaffCSS string // ? - Move this into the settings table? Might be better to implement this as Group CSS UncategorisedForumVisible bool MinifyTemplates bool MultiServer bool diff --git a/tasks.go b/tasks.go index 5ad4a56b..72ab4b23 100644 --- a/tasks.go +++ b/tasks.go @@ -15,7 +15,7 @@ func init() { } func handleExpiredScheduledGroups() error { - rows, err := get_expired_scheduled_groups_stmt.Query() + rows, err := getExpiredScheduledGroupsStmt.Query() if err != nil { return err } @@ -27,11 +27,11 @@ func handleExpiredScheduledGroups() error { if err != nil { return err } - _, err = replace_schedule_group_stmt.Exec(uid, 0, 0, time.Now(), false) + _, err = replaceScheduleGroupStmt.Exec(uid, 0, 0, time.Now(), false) if err != nil { return err } - _, err = set_temp_group_stmt.Exec(0, uid) + _, err = setTempGroupStmt.Exec(0, uid) if err != nil { return err } @@ -43,13 +43,12 @@ func handleExpiredScheduledGroups() error { func handleServerSync() error { var lastUpdate time.Time var lastUpdateStr string - err := get_sync_stmt.QueryRow().Scan(&lastUpdateStr) + err := getSyncStmt.QueryRow().Scan(&lastUpdateStr) if err != nil { return err } - layout := "2006-01-02 15:04:05" - lastUpdate, err = time.Parse(layout, lastUpdateStr) + lastUpdate, err = time.Parse("2006-01-02 15:04:05", lastUpdateStr) if err != nil { return err } diff --git a/template_list.go b/template_list.go index 0ed3f9c2..d48d5527 100644 --- a/template_list.go +++ b/template_list.go @@ -348,15 +348,15 @@ var topic_alt_40 = []byte(` Report - `) -var topic_alt_43 = []byte(``) -var topic_alt_44 = []byte(``) + `) +var topic_alt_43 = []byte(``) +var topic_alt_44 = []byte(` up`) var topic_alt_45 = []byte(` - `) + `) var topic_alt_46 = []byte(` `) -var topic_alt_47 = []byte(``) -var topic_alt_48 = []byte(` up`) +var topic_alt_47 = []byte(``) +var topic_alt_48 = []byte(``) var topic_alt_49 = []byte(`
@@ -404,15 +404,15 @@ var topic_alt_74 = []byte(` Report - `) -var topic_alt_77 = []byte(``) -var topic_alt_78 = []byte(``) + `) +var topic_alt_77 = []byte(``) +var topic_alt_78 = []byte(` up`) var topic_alt_79 = []byte(` - `) + `) var topic_alt_80 = []byte(` `) -var topic_alt_81 = []byte(``) -var topic_alt_82 = []byte(` up`) +var topic_alt_81 = []byte(``) +var topic_alt_82 = []byte(``) var topic_alt_83 = []byte(` `) diff --git a/template_topic_alt.go b/template_topic_alt.go index ee0e9853..ed48f6da 100644 --- a/template_topic_alt.go +++ b/template_topic_alt.go @@ -166,18 +166,18 @@ w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.ID))) w.Write(topic_alt_41) w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Session)) w.Write(topic_alt_42) -if tmpl_topic_alt_vars.CurrentUser.Perms.ViewIPs { -w.Write(topic_alt_43) -w.Write([]byte(tmpl_topic_alt_vars.Topic.IPAddress)) -w.Write(topic_alt_44) } +if tmpl_topic_alt_vars.Topic.LikeCount > 0 { +w.Write(topic_alt_43) +w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.LikeCount))) +w.Write(topic_alt_44) } w.Write(topic_alt_45) w.Write([]byte(tmpl_topic_alt_vars.Topic.CreatedAt)) w.Write(topic_alt_46) -if tmpl_topic_alt_vars.Topic.LikeCount > 0 { +if tmpl_topic_alt_vars.CurrentUser.Perms.ViewIPs { w.Write(topic_alt_47) -w.Write([]byte(strconv.Itoa(tmpl_topic_alt_vars.Topic.LikeCount))) +w.Write([]byte(tmpl_topic_alt_vars.Topic.IPAddress)) w.Write(topic_alt_48) } w.Write(topic_alt_49) @@ -239,18 +239,18 @@ w.Write([]byte(strconv.Itoa(item.ID))) w.Write(topic_alt_75) w.Write([]byte(tmpl_topic_alt_vars.CurrentUser.Session)) w.Write(topic_alt_76) -if tmpl_topic_alt_vars.CurrentUser.Perms.ViewIPs { -w.Write(topic_alt_77) -w.Write([]byte(item.IPAddress)) -w.Write(topic_alt_78) } +if item.LikeCount > 0 { +w.Write(topic_alt_77) +w.Write([]byte(strconv.Itoa(item.LikeCount))) +w.Write(topic_alt_78) } w.Write(topic_alt_79) w.Write([]byte(item.CreatedAt)) w.Write(topic_alt_80) -if item.LikeCount > 0 { +if tmpl_topic_alt_vars.CurrentUser.Perms.ViewIPs { w.Write(topic_alt_81) -w.Write([]byte(strconv.Itoa(item.LikeCount))) +w.Write([]byte(item.IPAddress)) w.Write(topic_alt_82) } w.Write(topic_alt_83) diff --git a/templates/topic_alt.html b/templates/topic_alt.html index f622c06d..1eedccba 100644 --- a/templates/topic_alt.html +++ b/templates/topic_alt.html @@ -40,10 +40,10 @@ {{if .CurrentUser.Perms.PinTopic}} {{if .Topic.Sticky}}Unpin{{else}}Pin{{end}}{{end}} Report - {{if .CurrentUser.Perms.ViewIPs}}{{.Topic.IPAddress}}{{end}} {{end}} - {{.Topic.CreatedAt}} - {{if .Topic.LikeCount}}{{.Topic.LikeCount}} up{{end}} + {{if .Topic.LikeCount}}{{.Topic.LikeCount}} up{{end}} + {{.Topic.CreatedAt}} + {{if .CurrentUser.Perms.ViewIPs}}{{.Topic.IPAddress}}{{end}}
@@ -66,10 +66,10 @@ {{if $.CurrentUser.Perms.EditReply}}Edit{{end}} {{if $.CurrentUser.Perms.DeleteReply}}Delete{{end}} Report - {{if $.CurrentUser.Perms.ViewIPs}}{{.IPAddress}}{{end}} {{end}} - {{.CreatedAt}} - {{if .LikeCount}}{{.LikeCount}} up{{end}} + {{if .LikeCount}}{{.LikeCount}} up{{end}} + {{.CreatedAt}} + {{if $.CurrentUser.Perms.ViewIPs}}{{.IPAddress}}{{end}} {{end}} diff --git a/themes.go b/themes.go index e95169a0..0ed5d7bb 100644 --- a/themes.go +++ b/themes.go @@ -69,7 +69,7 @@ type ThemeResource struct { func LoadThemes() error { changeDefaultThemeMutex.Lock() - rows, err := get_themes_stmt.Query() + rows, err := getThemesStmt.Query() if err != nil { return err } @@ -189,7 +189,7 @@ func addThemeStaticFiles(theme Theme) error { var pieces = strings.Split(path, "/") var filename = pieces[len(pieces)-1] //log.Print("filename ", filename) - err = theme.ResourceTemplates.ExecuteTemplate(&b, filename, CssData{ComingSoon: "We don't have any data to pass you yet!"}) + err = theme.ResourceTemplates.ExecuteTemplate(&b, filename, CSSData{ComingSoon: "We don't have any data to pass you yet!"}) if err != nil { return err } diff --git a/themes/tempra-conflux/public/main.css b/themes/tempra-conflux/public/main.css index 137ba009..613e8d70 100644 --- a/themes/tempra-conflux/public/main.css +++ b/themes/tempra-conflux/public/main.css @@ -498,17 +498,14 @@ button.username { /* Tempra Conflux */ .user_content { - padding: 5px; + padding: 7px; margin-top: 2px; margin-bottom: 0; background: white; - min-height: 145px; + min-height: 145.30px; padding-bottom: 0; width: 100%; } -.user_content.nobuttons { - min-height: 168px; -} .button_container { border-top: solid 1px #eaeaea; @@ -517,24 +514,27 @@ button.username { padding: 0; margin: 0; margin-top: 3px; - display: block; - height: 20px; + display: flex; + flex-direction: row; } .action_button { display: block; - float: left; border-right: solid 1px #eaeaea; color: #505050; font-size: 13px; padding-top: 2px; - padding-bottom: 2px; - padding-left: 5px; - padding-right: 5px; + padding-bottom: 1.5px; + padding-left: 7px; + padding-right: 7px; } .action_button_right { - float: right; border-left: solid 1px #eaeaea; + border-right: none; +} + +.button_container .report_item { + margin-right: auto; } .like_label:before { content: "😀"; } @@ -645,12 +645,12 @@ button.username { .content_container { background: white; - margin-left: 137px; + margin-left: 138px; min-height: 128px; margin-bottom: 0; margin-right: 3px; /*box-shadow: 0 1px 2px rgba(0,0,0,.1);*/ - border-bottom: 1px inset hsl(0,0%,80%); + border-bottom: 1.5px inset hsl(0,0%,80%); } .action_item .userinfo { display: none; } @@ -681,8 +681,12 @@ button.username { text-decoration: none; color: #505050; } -.prev_button { left: 14px; } -.next_button { right: 14px; } +.prev_button { + left: 14px; +} +.next_button { + right: 14px; +} .head_tag_upshift { float: right; @@ -737,13 +741,13 @@ button.username { /* Firefox specific CSS */ @supports (-moz-appearance: none) { - .footer, .rowmenu, #profile_right_lane .topic_reply_form { + .footer, .rowmenu, #profile_right_lane .topic_reply_form, .content_container { border-bottom: 2px inset hsl(0,0%,40%); } } /* Edge... We can't get the exact shade here, because of how they implemented it x.x */ @supports (-ms-ime-align:auto) { - .footer, .rowmenu, #profile_right_lane .topic_reply_form { + .footer, .rowmenu, #profile_right_lane .topic_reply_form, .content_container { border-bottom: 1.5px inset hsl(0,0%,100%); } } diff --git a/topic.go b/topic.go index 1c0bed3f..e989efc4 100644 --- a/topic.go +++ b/topic.go @@ -118,7 +118,7 @@ func getTopicuser(tid int) (TopicUser, error) { } tu := TopicUser{ID: tid} - err := get_topic_user_stmt.QueryRow(tid).Scan(&tu.Title, &tu.Content, &tu.CreatedBy, &tu.CreatedAt, &tu.IsClosed, &tu.Sticky, &tu.ParentID, &tu.IPAddress, &tu.PostCount, &tu.LikeCount, &tu.CreatedByName, &tu.Avatar, &tu.Group, &tu.URLPrefix, &tu.URLName, &tu.Level) + err := getTopicUserStmt.QueryRow(tid).Scan(&tu.Title, &tu.Content, &tu.CreatedBy, &tu.CreatedAt, &tu.IsClosed, &tu.Sticky, &tu.ParentID, &tu.IPAddress, &tu.PostCount, &tu.LikeCount, &tu.CreatedByName, &tu.Avatar, &tu.Group, &tu.URLPrefix, &tu.URLName, &tu.Level) tu.Link = buildTopicURL(nameToSlug(tu.Title), tu.ID) tu.UserLink = buildProfileURL(nameToSlug(tu.CreatedByName), tu.CreatedBy) tu.Tag = gstore.DirtyGet(tu.Group).Tag @@ -160,7 +160,7 @@ func copyTopicToTopicuser(topic *Topic, user *User) (tu TopicUser) { func getTopicByReply(rid int) (*Topic, error) { topic := Topic{ID: 0} - err := get_topic_by_reply_stmt.QueryRow(rid).Scan(&topic.ID, &topic.Title, &topic.Content, &topic.CreatedBy, &topic.CreatedAt, &topic.IsClosed, &topic.Sticky, &topic.ParentID, &topic.IPAddress, &topic.PostCount, &topic.LikeCount, &topic.Data) + err := getTopicByReplyStmt.QueryRow(rid).Scan(&topic.ID, &topic.Title, &topic.Content, &topic.CreatedBy, &topic.CreatedAt, &topic.IsClosed, &topic.Sticky, &topic.ParentID, &topic.IPAddress, &topic.PostCount, &topic.LikeCount, &topic.Data) topic.Link = buildTopicURL(nameToSlug(topic.Title), topic.ID) return &topic, err } diff --git a/topic_store.go b/topic_store.go index 49c93d74..b6ed950f 100644 --- a/topic_store.go +++ b/topic_store.go @@ -10,6 +10,7 @@ import ( "database/sql" "log" "sync" + "sync/atomic" "./query_gen/lib" ) @@ -17,6 +18,7 @@ import ( // TODO: Add the watchdog goroutine // TODO: Add BulkGetMap // TODO: Add some sort of update method +// ? - Should we add stick, lock, unstick, and unlock methods? These might be better on the Topics not the TopicStore var topics TopicStore type TopicStore interface { @@ -25,18 +27,22 @@ type TopicStore interface { BypassGet(id int) (*Topic, error) Delete(id int) error Exists(id int) bool - AddLastTopic(item *Topic, fid int) error + AddLastTopic(item *Topic, fid int) error // unimplemented + // TODO: Implement these two methods + //GetReplies() ([]*Reply, error) + //GetRepliesRange(lower int, higher int) ([]*Reply, error) GetGlobalCount() int } type TopicCache interface { CacheGet(id int) (*Topic, error) - GetUnsafe(id int) (*Topic, error) + CacheGetUnsafe(id int) (*Topic, error) CacheSet(item *Topic) error CacheAdd(item *Topic) error CacheAddUnsafe(item *Topic) error CacheRemove(id int) error CacheRemoveUnsafe(id int) error + Flush() GetLength() int SetCapacity(capacity int) GetCapacity() int @@ -44,11 +50,12 @@ type TopicCache interface { type MemoryTopicStore struct { items map[int]*Topic - length int + length int64 // sync/atomic only lets us operate on int32s and int64s capacity int get *sql.Stmt exists *sql.Stmt topicCount *sql.Stmt + delete *sql.Stmt sync.RWMutex } @@ -66,72 +73,78 @@ func NewMemoryTopicStore(capacity int) *MemoryTopicStore { if err != nil { log.Fatal(err) } + deleteStmt, err := qgen.Builder.SimpleDelete("topics", "tid = ?") + if err != nil { + log.Fatal(err) + } return &MemoryTopicStore{ items: make(map[int]*Topic), capacity: capacity, get: getStmt, exists: existsStmt, topicCount: topicCountStmt, + delete: deleteStmt, } } -func (sts *MemoryTopicStore) CacheGet(id int) (*Topic, error) { - sts.RLock() - item, ok := sts.items[id] - sts.RUnlock() +func (mts *MemoryTopicStore) CacheGet(id int) (*Topic, error) { + mts.RLock() + item, ok := mts.items[id] + mts.RUnlock() if ok { return item, nil } return item, ErrNoRows } -func (sts *MemoryTopicStore) CacheGetUnsafe(id int) (*Topic, error) { - item, ok := sts.items[id] +func (mts *MemoryTopicStore) CacheGetUnsafe(id int) (*Topic, error) { + item, ok := mts.items[id] if ok { return item, nil } return item, ErrNoRows } -func (sts *MemoryTopicStore) Get(id int) (*Topic, error) { - sts.RLock() - topic, ok := sts.items[id] - sts.RUnlock() +func (mts *MemoryTopicStore) Get(id int) (*Topic, error) { + mts.RLock() + topic, ok := mts.items[id] + mts.RUnlock() if ok { return topic, nil } topic = &Topic{ID: id} - err := sts.get.QueryRow(id).Scan(&topic.Title, &topic.Content, &topic.CreatedBy, &topic.CreatedAt, &topic.IsClosed, &topic.Sticky, &topic.ParentID, &topic.IPAddress, &topic.PostCount, &topic.LikeCount, &topic.Data) + err := mts.get.QueryRow(id).Scan(&topic.Title, &topic.Content, &topic.CreatedBy, &topic.CreatedAt, &topic.IsClosed, &topic.Sticky, &topic.ParentID, &topic.IPAddress, &topic.PostCount, &topic.LikeCount, &topic.Data) if err == nil { topic.Link = buildTopicURL(nameToSlug(topic.Title), id) - _ = sts.CacheAdd(topic) + _ = mts.CacheAdd(topic) } return topic, err } -func (sts *MemoryTopicStore) BypassGet(id int) (*Topic, error) { +// BypassGet will always bypass the cache and pull the topic directly from the database +func (mts *MemoryTopicStore) BypassGet(id int) (*Topic, error) { topic := &Topic{ID: id} - err := sts.get.QueryRow(id).Scan(&topic.Title, &topic.Content, &topic.CreatedBy, &topic.CreatedAt, &topic.IsClosed, &topic.Sticky, &topic.ParentID, &topic.IPAddress, &topic.PostCount, &topic.LikeCount, &topic.Data) + err := mts.get.QueryRow(id).Scan(&topic.Title, &topic.Content, &topic.CreatedBy, &topic.CreatedAt, &topic.IsClosed, &topic.Sticky, &topic.ParentID, &topic.IPAddress, &topic.PostCount, &topic.LikeCount, &topic.Data) topic.Link = buildTopicURL(nameToSlug(topic.Title), id) return topic, err } -func (sts *MemoryTopicStore) Reload(id int) error { +func (mts *MemoryTopicStore) Reload(id int) error { topic := &Topic{ID: id} - err := sts.get.QueryRow(id).Scan(&topic.Title, &topic.Content, &topic.CreatedBy, &topic.CreatedAt, &topic.IsClosed, &topic.Sticky, &topic.ParentID, &topic.IPAddress, &topic.PostCount, &topic.LikeCount, &topic.Data) + err := mts.get.QueryRow(id).Scan(&topic.Title, &topic.Content, &topic.CreatedBy, &topic.CreatedAt, &topic.IsClosed, &topic.Sticky, &topic.ParentID, &topic.IPAddress, &topic.PostCount, &topic.LikeCount, &topic.Data) if err == nil { topic.Link = buildTopicURL(nameToSlug(topic.Title), id) - _ = sts.CacheSet(topic) + _ = mts.CacheSet(topic) } else { - _ = sts.CacheRemove(id) + _ = mts.CacheRemove(id) } return err } // TODO: Use a transaction here -func (sts *MemoryTopicStore) Delete(id int) error { - topic, err := sts.Get(id) +func (mts *MemoryTopicStore) Delete(id int) error { + topic, err := mts.Get(id) if err != nil { return nil // Already gone, maybe we should check for other errors here } @@ -152,96 +165,98 @@ func (sts *MemoryTopicStore) Delete(id int) error { return err } - sts.Lock() - sts.CacheRemoveUnsafe(id) - _, err = delete_topic_stmt.Exec(id) - if err != nil { - sts.Unlock() - return err - } - sts.Unlock() - - return nil + mts.Lock() + mts.CacheRemoveUnsafe(id) + _, err = mts.delete.Exec(id) + mts.Unlock() + return err } -func (sts *MemoryTopicStore) Exists(id int) bool { - return sts.exists.QueryRow(id).Scan(&id) == nil +func (mts *MemoryTopicStore) Exists(id int) bool { + return mts.exists.QueryRow(id).Scan(&id) == nil } -func (sts *MemoryTopicStore) CacheSet(item *Topic) error { - sts.Lock() - _, ok := sts.items[item.ID] +func (mts *MemoryTopicStore) CacheSet(item *Topic) error { + mts.Lock() + _, ok := mts.items[item.ID] if ok { - sts.items[item.ID] = item - } else if sts.length >= sts.capacity { - sts.Unlock() + mts.items[item.ID] = item + } else if int(mts.length) >= mts.capacity { + mts.Unlock() return ErrStoreCapacityOverflow } else { - sts.items[item.ID] = item - sts.length++ + mts.items[item.ID] = item + atomic.AddInt64(&mts.length, 1) } - sts.Unlock() + mts.Unlock() return nil } -func (sts *MemoryTopicStore) CacheAdd(item *Topic) error { - if sts.length >= sts.capacity { +func (mts *MemoryTopicStore) CacheAdd(item *Topic) error { + if int(mts.length) >= mts.capacity { return ErrStoreCapacityOverflow } - sts.Lock() - sts.items[item.ID] = item - sts.Unlock() - sts.length++ + mts.Lock() + mts.items[item.ID] = item + mts.Unlock() + atomic.AddInt64(&mts.length, 1) return nil } // TODO: Make these length increments thread-safe. Ditto for the other DataStores -func (sts *MemoryTopicStore) CacheAddUnsafe(item *Topic) error { - if sts.length >= sts.capacity { +func (mts *MemoryTopicStore) CacheAddUnsafe(item *Topic) error { + if int(mts.length) >= mts.capacity { return ErrStoreCapacityOverflow } - sts.items[item.ID] = item - sts.length++ + mts.items[item.ID] = item + atomic.AddInt64(&mts.length, 1) return nil } // TODO: Make these length decrements thread-safe. Ditto for the other DataStores -func (sts *MemoryTopicStore) CacheRemove(id int) error { - sts.Lock() - delete(sts.items, id) - sts.Unlock() - sts.length-- +func (mts *MemoryTopicStore) CacheRemove(id int) error { + mts.Lock() + delete(mts.items, id) + mts.Unlock() + atomic.AddInt64(&mts.length, -1) return nil } -func (sts *MemoryTopicStore) CacheRemoveUnsafe(id int) error { - delete(sts.items, id) - sts.length-- +func (mts *MemoryTopicStore) CacheRemoveUnsafe(id int) error { + delete(mts.items, id) + atomic.AddInt64(&mts.length, -1) return nil } // ? - What is this? Do we need it? Should it be in the main store interface? -func (sts *MemoryTopicStore) AddLastTopic(item *Topic, fid int) error { +func (mts *MemoryTopicStore) AddLastTopic(item *Topic, fid int) error { // Coming Soon... return nil } -func (sts *MemoryTopicStore) GetLength() int { - return sts.length +func (mts *MemoryTopicStore) Flush() { + mts.Lock() + mts.items = make(map[int]*Topic) + mts.length = 0 + mts.Unlock() } -func (sts *MemoryTopicStore) SetCapacity(capacity int) { - sts.capacity = capacity +func (mts *MemoryTopicStore) GetLength() int { + return int(mts.length) } -func (sts *MemoryTopicStore) GetCapacity() int { - return sts.capacity +func (mts *MemoryTopicStore) SetCapacity(capacity int) { + mts.capacity = capacity +} + +func (mts *MemoryTopicStore) GetCapacity() int { + return mts.capacity } // Return the total number of topics on these forums -func (sts *MemoryTopicStore) GetGlobalCount() int { +func (mts *MemoryTopicStore) GetGlobalCount() int { var tcount int - err := sts.topicCount.QueryRow().Scan(&tcount) + err := mts.topicCount.QueryRow().Scan(&tcount) if err != nil { LogError(err) } @@ -252,6 +267,7 @@ type SQLTopicStore struct { get *sql.Stmt exists *sql.Stmt topicCount *sql.Stmt + delete *sql.Stmt } func NewSQLTopicStore() *SQLTopicStore { @@ -267,10 +283,15 @@ func NewSQLTopicStore() *SQLTopicStore { if err != nil { log.Fatal(err) } + deleteStmt, err := qgen.Builder.SimpleDelete("topics", "tid = ?") + if err != nil { + log.Fatal(err) + } return &SQLTopicStore{ get: getStmt, exists: existsStmt, topicCount: topicCountStmt, + delete: deleteStmt, } } @@ -281,6 +302,7 @@ func (sts *SQLTopicStore) Get(id int) (*Topic, error) { return &topic, err } +// BypassGet is an alias of Get(), as we don't have a cache for SQLTopicStore func (sts *SQLTopicStore) BypassGet(id int) (*Topic, error) { topic := &Topic{ID: id} err := sts.get.QueryRow(id).Scan(&topic.Title, &topic.Content, &topic.CreatedBy, &topic.CreatedAt, &topic.IsClosed, &topic.Sticky, &topic.ParentID, &topic.IPAddress, &topic.PostCount, &topic.LikeCount, &topic.Data) @@ -288,6 +310,7 @@ func (sts *SQLTopicStore) BypassGet(id int) (*Topic, error) { return topic, err } +// Reload uses a similar query to Exists(), as we don't have any entries to reload, and the secondary benefit of calling Reload() is seeing if the item you're trying to reload exists func (sts *SQLTopicStore) Reload(id int) error { return sts.exists.QueryRow(id).Scan(&id) } @@ -319,10 +342,11 @@ func (sts *SQLTopicStore) Delete(id int) error { return err } - _, err = delete_topic_stmt.Exec(id) + _, err = sts.delete.Exec(id) return err } +// ? - What're we going to do about this? func (sts *SQLTopicStore) AddLastTopic(item *Topic, fid int) error { // Coming Soon... return nil diff --git a/user.go b/user.go index f0eca7ed..6f1bbd54 100644 --- a/user.go +++ b/user.go @@ -79,11 +79,11 @@ func (user *User) ScheduleGroupUpdate(gid int, issuedBy int, duration time.Durat } revertAt := time.Now().Add(duration) - _, err := replace_schedule_group_stmt.Exec(user.ID, gid, issuedBy, revertAt, temporary) + _, err := replaceScheduleGroupStmt.Exec(user.ID, gid, issuedBy, revertAt, temporary) if err != nil { return err } - _, err = set_temp_group_stmt.Exec(gid, user.ID) + _, err = setTempGroupStmt.Exec(gid, user.ID) if err != nil { return err } @@ -92,11 +92,11 @@ func (user *User) ScheduleGroupUpdate(gid int, issuedBy int, duration time.Durat // TODO: Use a transaction to avoid race conditions func (user *User) RevertGroupUpdate() error { - _, err := replace_schedule_group_stmt.Exec(user.ID, 0, 0, time.Now(), false) + _, err := replaceScheduleGroupStmt.Exec(user.ID, 0, 0, time.Now(), false) if err != nil { return err } - _, err = set_temp_group_stmt.Exec(0, user.ID) + _, err = setTempGroupStmt.Exec(0, user.ID) if err != nil { return err } @@ -135,7 +135,7 @@ func SetPassword(uid int, password string) error { if err != nil { return err } - _, err = set_password_stmt.Exec(hashedPassword, salt, uid) + _, err = setPasswordStmt.Exec(hashedPassword, salt, uid) return err } @@ -172,7 +172,7 @@ func (user *User) increasePostStats(wcount int, topic bool) error { var mod int baseScore := 1 if topic { - _, err := increment_user_topics_stmt.Exec(1, user.ID) + _, err := incrementUserTopicsStmt.Exec(1, user.ID) if err != nil { return err } @@ -181,31 +181,31 @@ func (user *User) increasePostStats(wcount int, topic bool) error { settings := settingBox.Load().(SettingBox) if wcount >= settings["megapost_min_words"].(int) { - _, err := increment_user_megaposts_stmt.Exec(1, 1, 1, user.ID) + _, err := incrementUserMegapostsStmt.Exec(1, 1, 1, user.ID) if err != nil { return err } mod = 4 } else if wcount >= settings["bigpost_min_words"].(int) { - _, err := increment_user_bigposts_stmt.Exec(1, 1, user.ID) + _, err := incrementUserBigpostsStmt.Exec(1, 1, user.ID) if err != nil { return err } mod = 1 } else { - _, err := increment_user_posts_stmt.Exec(1, user.ID) + _, err := incrementUserPostsStmt.Exec(1, user.ID) if err != nil { return err } } - _, err := increment_user_score_stmt.Exec(baseScore+mod, user.ID) + _, err := incrementUserScoreStmt.Exec(baseScore+mod, user.ID) if err != nil { return err } //log.Print(user.Score + base_score + mod) //log.Print(getLevel(user.Score + base_score + mod)) // TODO: Use a transaction to prevent level desyncs? - _, err = update_user_level_stmt.Exec(getLevel(user.Score+baseScore+mod), user.ID) + _, err = updateUserLevelStmt.Exec(getLevel(user.Score+baseScore+mod), user.ID) return err } @@ -214,7 +214,7 @@ func (user *User) decreasePostStats(wcount int, topic bool) error { var mod int baseScore := -1 if topic { - _, err := increment_user_topics_stmt.Exec(-1, user.ID) + _, err := incrementUserTopicsStmt.Exec(-1, user.ID) if err != nil { return err } @@ -223,29 +223,29 @@ func (user *User) decreasePostStats(wcount int, topic bool) error { settings := settingBox.Load().(SettingBox) if wcount >= settings["megapost_min_words"].(int) { - _, err := increment_user_megaposts_stmt.Exec(-1, -1, -1, user.ID) + _, err := incrementUserMegapostsStmt.Exec(-1, -1, -1, user.ID) if err != nil { return err } mod = 4 } else if wcount >= settings["bigpost_min_words"].(int) { - _, err := increment_user_bigposts_stmt.Exec(-1, -1, user.ID) + _, err := incrementUserBigpostsStmt.Exec(-1, -1, user.ID) if err != nil { return err } mod = 1 } else { - _, err := increment_user_posts_stmt.Exec(-1, user.ID) + _, err := incrementUserPostsStmt.Exec(-1, user.ID) if err != nil { return err } } - _, err := increment_user_score_stmt.Exec(baseScore-mod, user.ID) + _, err := incrementUserScoreStmt.Exec(baseScore-mod, user.ID) if err != nil { return err } // TODO: Use a transaction to prevent level desyncs? - _, err = update_user_level_stmt.Exec(getLevel(user.Score-baseScore-mod), user.ID) + _, err = updateUserLevelStmt.Exec(getLevel(user.Score-baseScore-mod), user.ID) return err } diff --git a/user_store.go b/user_store.go index 4252ad88..4b10c141 100644 --- a/user_store.go +++ b/user_store.go @@ -7,6 +7,7 @@ import ( "strconv" "strings" "sync" + "sync/atomic" "./query_gen/lib" "golang.org/x/crypto/bcrypt" @@ -36,6 +37,7 @@ type UserCache interface { CacheAddUnsafe(item *User) error CacheRemove(id int) error CacheRemoveUnsafe(id int) error + Flush() GetLength() int SetCapacity(capacity int) GetCapacity() int @@ -43,7 +45,7 @@ type UserCache interface { type MemoryUserStore struct { items map[int]*User - length int + length int64 capacity int get *sql.Stmt exists *sql.Stmt @@ -93,34 +95,34 @@ func NewMemoryUserStore(capacity int) *MemoryUserStore { } } -func (sus *MemoryUserStore) CacheGet(id int) (*User, error) { - sus.RLock() - item, ok := sus.items[id] - sus.RUnlock() +func (mus *MemoryUserStore) CacheGet(id int) (*User, error) { + mus.RLock() + item, ok := mus.items[id] + mus.RUnlock() if ok { return item, nil } return item, ErrNoRows } -func (sus *MemoryUserStore) CacheGetUnsafe(id int) (*User, error) { - item, ok := sus.items[id] +func (mus *MemoryUserStore) CacheGetUnsafe(id int) (*User, error) { + item, ok := mus.items[id] if ok { return item, nil } return item, ErrNoRows } -func (sus *MemoryUserStore) Get(id int) (*User, error) { - sus.RLock() - user, ok := sus.items[id] - sus.RUnlock() +func (mus *MemoryUserStore) Get(id int) (*User, error) { + mus.RLock() + user, ok := mus.items[id] + mus.RUnlock() if ok { return user, nil } user = &User{ID: id, Loggedin: true} - err := sus.get.QueryRow(id).Scan(&user.Name, &user.Group, &user.IsSuperAdmin, &user.Session, &user.Email, &user.Avatar, &user.Message, &user.URLPrefix, &user.URLName, &user.Level, &user.Score, &user.LastIP, &user.TempGroup) + err := mus.get.QueryRow(id).Scan(&user.Name, &user.Group, &user.IsSuperAdmin, &user.Session, &user.Email, &user.Avatar, &user.Message, &user.URLPrefix, &user.URLName, &user.Level, &user.Score, &user.LastIP, &user.TempGroup) if user.Avatar != "" { if user.Avatar[0] == '.' { @@ -133,25 +135,25 @@ func (sus *MemoryUserStore) Get(id int) (*User, error) { user.Tag = gstore.DirtyGet(user.Group).Tag initUserPerms(user) if err == nil { - sus.CacheSet(user) + mus.CacheSet(user) } return user, err } // WARNING: We did a little hack to make this as thin and quick as possible to reduce lock contention, use the * Cascade* methods instead for normal use -func (sus *MemoryUserStore) bulkGet(ids []int) (list []*User) { +func (mus *MemoryUserStore) bulkGet(ids []int) (list []*User) { list = make([]*User, len(ids)) - sus.RLock() + mus.RLock() for i, id := range ids { - list[i] = sus.items[id] + list[i] = mus.items[id] } - sus.RUnlock() + mus.RUnlock() return list } // TODO: Optimise the query to avoid preparing it on the spot? Maybe, use knowledge of the most common IN() parameter counts? // TODO: ID of 0 should always error? -func (sus *MemoryUserStore) BulkGetMap(ids []int) (list map[int]*User, err error) { +func (mus *MemoryUserStore) BulkGetMap(ids []int) (list map[int]*User, err error) { var idCount = len(ids) list = make(map[int]*User) if idCount == 0 { @@ -159,7 +161,7 @@ func (sus *MemoryUserStore) BulkGetMap(ids []int) (list map[int]*User, err error } var stillHere []int - sliceList := sus.bulkGet(ids) + sliceList := mus.bulkGet(ids) for i, sliceItem := range sliceList { if sliceItem != nil { list[sliceItem.ID] = sliceItem @@ -212,7 +214,7 @@ func (sus *MemoryUserStore) BulkGetMap(ids []int) (list map[int]*User, err error initUserPerms(user) // Add it to the cache... - _ = sus.CacheSet(user) + _ = mus.CacheSet(user) // Add it to the list to be returned list[user.ID] = user @@ -246,9 +248,9 @@ func (sus *MemoryUserStore) BulkGetMap(ids []int) (list map[int]*User, err error return list, nil } -func (sus *MemoryUserStore) BypassGet(id int) (*User, error) { +func (mus *MemoryUserStore) BypassGet(id int) (*User, error) { user := &User{ID: id, Loggedin: true} - err := sus.get.QueryRow(id).Scan(&user.Name, &user.Group, &user.IsSuperAdmin, &user.Session, &user.Email, &user.Avatar, &user.Message, &user.URLPrefix, &user.URLName, &user.Level, &user.Score, &user.LastIP, &user.TempGroup) + err := mus.get.QueryRow(id).Scan(&user.Name, &user.Group, &user.IsSuperAdmin, &user.Session, &user.Email, &user.Avatar, &user.Message, &user.URLPrefix, &user.URLName, &user.Level, &user.Score, &user.LastIP, &user.TempGroup) if user.Avatar != "" { if user.Avatar[0] == '.' { @@ -263,11 +265,11 @@ func (sus *MemoryUserStore) BypassGet(id int) (*User, error) { return user, err } -func (sus *MemoryUserStore) Reload(id int) error { +func (mus *MemoryUserStore) Reload(id int) error { user := &User{ID: id, Loggedin: true} - err := sus.get.QueryRow(id).Scan(&user.Name, &user.Group, &user.IsSuperAdmin, &user.Session, &user.Email, &user.Avatar, &user.Message, &user.URLPrefix, &user.URLName, &user.Level, &user.Score, &user.LastIP, &user.TempGroup) + err := mus.get.QueryRow(id).Scan(&user.Name, &user.Group, &user.IsSuperAdmin, &user.Session, &user.Email, &user.Avatar, &user.Message, &user.URLPrefix, &user.URLName, &user.Level, &user.Score, &user.LastIP, &user.TempGroup) if err != nil { - sus.CacheRemove(id) + mus.CacheRemove(id) return err } @@ -281,68 +283,68 @@ func (sus *MemoryUserStore) Reload(id int) error { user.Link = buildProfileURL(nameToSlug(user.Name), id) user.Tag = gstore.DirtyGet(user.Group).Tag initUserPerms(user) - _ = sus.CacheSet(user) + _ = mus.CacheSet(user) return nil } -func (sus *MemoryUserStore) Exists(id int) bool { - return sus.exists.QueryRow(id).Scan(&id) == nil +func (mus *MemoryUserStore) Exists(id int) bool { + return mus.exists.QueryRow(id).Scan(&id) == nil } -func (sus *MemoryUserStore) CacheSet(item *User) error { - sus.Lock() - user, ok := sus.items[item.ID] +func (mus *MemoryUserStore) CacheSet(item *User) error { + mus.Lock() + user, ok := mus.items[item.ID] if ok { - sus.Unlock() + mus.Unlock() *user = *item - } else if sus.length >= sus.capacity { - sus.Unlock() + } else if int(mus.length) >= mus.capacity { + mus.Unlock() return ErrStoreCapacityOverflow } else { - sus.items[item.ID] = item - sus.Unlock() - sus.length++ + mus.items[item.ID] = item + mus.Unlock() + atomic.AddInt64(&mus.length, 1) } return nil } -func (sus *MemoryUserStore) CacheAdd(item *User) error { - if sus.length >= sus.capacity { +func (mus *MemoryUserStore) CacheAdd(item *User) error { + if int(mus.length) >= mus.capacity { return ErrStoreCapacityOverflow } - sus.Lock() - sus.items[item.ID] = item - sus.Unlock() - sus.length++ + mus.Lock() + mus.items[item.ID] = item + mus.Unlock() + atomic.AddInt64(&mus.length, 1) return nil } -func (sus *MemoryUserStore) CacheAddUnsafe(item *User) error { - if sus.length >= sus.capacity { +func (mus *MemoryUserStore) CacheAddUnsafe(item *User) error { + if int(mus.length) >= mus.capacity { return ErrStoreCapacityOverflow } - sus.items[item.ID] = item - sus.length++ + mus.items[item.ID] = item + atomic.AddInt64(&mus.length, 1) return nil } -func (sus *MemoryUserStore) CacheRemove(id int) error { - sus.Lock() - delete(sus.items, id) - sus.Unlock() - sus.length-- +func (mus *MemoryUserStore) CacheRemove(id int) error { + mus.Lock() + delete(mus.items, id) + mus.Unlock() + atomic.AddInt64(&mus.length, -1) return nil } -func (sus *MemoryUserStore) CacheRemoveUnsafe(id int) error { - delete(sus.items, id) - sus.length-- +func (mus *MemoryUserStore) CacheRemoveUnsafe(id int) error { + delete(mus.items, id) + atomic.AddInt64(&mus.length, -1) return nil } -func (sus *MemoryUserStore) Create(username string, password string, email string, group int, active int) (int, error) { +func (mus *MemoryUserStore) Create(username string, password string, email string, group int, active int) (int, error) { // Is this username already taken..? - err := sus.usernameExists.QueryRow(username).Scan(&username) + err := mus.usernameExists.QueryRow(username).Scan(&username) if err != ErrNoRows { return 0, errAccountExists } @@ -357,7 +359,7 @@ func (sus *MemoryUserStore) Create(username string, password string, email strin return 0, err } - res, err := sus.register.Exec(username, email, string(hashedPassword), salt, group, active) + res, err := mus.register.Exec(username, email, string(hashedPassword), salt, group, active) if err != nil { return 0, err } @@ -366,22 +368,29 @@ func (sus *MemoryUserStore) Create(username string, password string, email strin return int(lastID), err } -func (sus *MemoryUserStore) GetLength() int { - return sus.length +func (mus *MemoryUserStore) Flush() { + mus.Lock() + mus.items = make(map[int]*User) + mus.length = 0 + mus.Unlock() } -func (sus *MemoryUserStore) SetCapacity(capacity int) { - sus.capacity = capacity +func (mus *MemoryUserStore) GetLength() int { + return int(mus.length) } -func (sus *MemoryUserStore) GetCapacity() int { - return sus.capacity +func (mus *MemoryUserStore) SetCapacity(capacity int) { + mus.capacity = capacity +} + +func (mus *MemoryUserStore) GetCapacity() int { + return mus.capacity } // Return the total number of users registered on the forums -func (sus *MemoryUserStore) GetGlobalCount() int { +func (mus *MemoryUserStore) GetGlobalCount() int { var ucount int - err := sus.userCount.QueryRow().Scan(&ucount) + err := mus.userCount.QueryRow().Scan(&ucount) if err != nil { LogError(err) } @@ -433,9 +442,9 @@ func NewSQLUserStore() *SQLUserStore { } } -func (sus *SQLUserStore) Get(id int) (*User, error) { +func (mus *SQLUserStore) Get(id int) (*User, error) { user := User{ID: id, Loggedin: true} - err := sus.get.QueryRow(id).Scan(&user.Name, &user.Group, &user.IsSuperAdmin, &user.Session, &user.Email, &user.Avatar, &user.Message, &user.URLPrefix, &user.URLName, &user.Level, &user.Score, &user.LastIP, &user.TempGroup) + err := mus.get.QueryRow(id).Scan(&user.Name, &user.Group, &user.IsSuperAdmin, &user.Session, &user.Email, &user.Avatar, &user.Message, &user.URLPrefix, &user.URLName, &user.Level, &user.Score, &user.LastIP, &user.TempGroup) if user.Avatar != "" { if user.Avatar[0] == '.' { @@ -451,7 +460,7 @@ func (sus *SQLUserStore) Get(id int) (*User, error) { } // TODO: Optimise the query to avoid preparing it on the spot? Maybe, use knowledge of the most common IN() parameter counts? -func (sus *SQLUserStore) BulkGetMap(ids []int) (list map[int]*User, err error) { +func (mus *SQLUserStore) BulkGetMap(ids []int) (list map[int]*User, err error) { var qlist string var uidList []interface{} for _, id := range ids { @@ -497,9 +506,9 @@ func (sus *SQLUserStore) BulkGetMap(ids []int) (list map[int]*User, err error) { return list, nil } -func (sus *SQLUserStore) BypassGet(id int) (*User, error) { +func (mus *SQLUserStore) BypassGet(id int) (*User, error) { user := User{ID: id, Loggedin: true} - err := sus.get.QueryRow(id).Scan(&user.Name, &user.Group, &user.IsSuperAdmin, &user.Session, &user.Email, &user.Avatar, &user.Message, &user.URLPrefix, &user.URLName, &user.Level, &user.Score, &user.LastIP, &user.TempGroup) + err := mus.get.QueryRow(id).Scan(&user.Name, &user.Group, &user.IsSuperAdmin, &user.Session, &user.Email, &user.Avatar, &user.Message, &user.URLPrefix, &user.URLName, &user.Level, &user.Score, &user.LastIP, &user.TempGroup) if user.Avatar != "" { if user.Avatar[0] == '.' { @@ -514,17 +523,17 @@ func (sus *SQLUserStore) BypassGet(id int) (*User, error) { return &user, err } -func (sus *SQLUserStore) Reload(id int) error { - return sus.exists.QueryRow(id).Scan(&id) +func (mus *SQLUserStore) Reload(id int) error { + return mus.exists.QueryRow(id).Scan(&id) } -func (sus *SQLUserStore) Exists(id int) bool { - return sus.exists.QueryRow(id).Scan(&id) == nil +func (mus *SQLUserStore) Exists(id int) bool { + return mus.exists.QueryRow(id).Scan(&id) == nil } -func (sus *SQLUserStore) Create(username string, password string, email string, group int, active int) (int, error) { +func (mus *SQLUserStore) Create(username string, password string, email string, group int, active int) (int, error) { // Is this username already taken..? - err := sus.usernameExists.QueryRow(username).Scan(&username) + err := mus.usernameExists.QueryRow(username).Scan(&username) if err != ErrNoRows { return 0, errAccountExists } @@ -539,7 +548,7 @@ func (sus *SQLUserStore) Create(username string, password string, email string, return 0, err } - res, err := sus.register.Exec(username, email, string(hashedPassword), salt, group, active) + res, err := mus.register.Exec(username, email, string(hashedPassword), salt, group, active) if err != nil { return 0, err } @@ -549,9 +558,9 @@ func (sus *SQLUserStore) Create(username string, password string, email string, } // Return the total number of users registered on the forums -func (sus *SQLUserStore) GetGlobalCount() int { +func (mus *SQLUserStore) GetGlobalCount() int { var ucount int - err := sus.userCount.QueryRow().Scan(&ucount) + err := mus.userCount.QueryRow().Scan(&ucount) if err != nil { LogError(err) } diff --git a/utils.go b/utils.go index 4cb61b05..7795c300 100644 --- a/utils.go +++ b/utils.go @@ -189,13 +189,13 @@ func SendEmail(email string, subject string, msg string) (res bool) { } body := "Subject: " + subject + "\n\n" + msg + "\n" - con, err := smtp.Dial(config.SmtpServer + ":" + config.SmtpPort) + con, err := smtp.Dial(config.SMTPServer + ":" + config.SMTPPort) if err != nil { return } - if config.SmtpUsername != "" { - auth := smtp.PlainAuth("", config.SmtpUsername, config.SmtpPassword, config.SmtpServer) + if config.SMTPUsername != "" { + auth := smtp.PlainAuth("", config.SMTPUsername, config.SMTPPassword, config.SMTPServer) err = con.Auth(auth) if err != nil { return @@ -394,11 +394,11 @@ func buildSlug(slug string, id int) string { } func addModLog(action string, elementID int, elementType string, ipaddress string, actorID int) (err error) { - _, err = add_modlog_entry_stmt.Exec(action, elementID, elementType, ipaddress, actorID) + _, err = addModlogEntryStmt.Exec(action, elementID, elementType, ipaddress, actorID) return err } func addAdminLog(action string, elementID string, elementType int, ipaddress string, actorID int) (err error) { - _, err = add_adminlog_entry_stmt.Exec(action, elementID, elementType, ipaddress, actorID) + _, err = addAdminlogEntryStmt.Exec(action, elementID, elementType, ipaddress, actorID) return err } diff --git a/widgets.go b/widgets.go index 70528b9a..26406095 100644 --- a/widgets.go +++ b/widgets.go @@ -41,7 +41,7 @@ type NameTextPair struct { } func initWidgets() error { - rows, err := get_widgets_stmt.Query() + rows, err := getWidgetsStmt.Query() if err != nil { return err } diff --git a/word_filters.go b/word_filters.go index 73551893..53ba7d6c 100644 --- a/word_filters.go +++ b/word_filters.go @@ -16,7 +16,7 @@ func init() { } func LoadWordFilters() error { - rows, err := get_word_filters_stmt.Query() + rows, err := getWordFiltersStmt.Query() if err != nil { return err }