/* * This file is a part of CMSLU -- Content Management System like Unix * and is not publicly distributed * * Copyright (c) 2008, Tomasz Sowa * All rights reserved. * */ #ifndef headerfilecoredb #define headerfilecoredb #include #include #include #include #include #include #include "log.h" #include "item.h" #include "misc.h" #include "error.h" #include "dircontainer.h" #include "user.h" #include "group.h" #include "ugcontainer.h" class Db { public: Db(); ~Db(); void Init(const std::string & database, const std::string & user, const std::string & pass); bool CheckUser(std::string & login, std::string & password, long & user_id); Error AddItem(Item & item); Error EditItemById(Item & item, bool with_subject = true); Error EditItemByUrl(Item & item, bool with_subject = true); void CheckAllUrlSubject(); void GetItems(std::vector & item_table, Item & item_ref); void GetItem(std::vector & item_table, long id); bool GetPriv(Item & item, long id); bool DelItem(const Item & item); void GetDirs(DirContainer & dir_table); void GetUsers(UGContainer & user_table); void GetGroups(UGContainer & group_table); protected: PGconn * pg_conn; std::string db_database, db_user, db_pass; void Connect(); void Close(); void AssertConnection(); std::string Escape(const std::string & s); std::string Escape(const char * s); PGresult * AssertQuery(const std::string & q); void AssertResultStatus(PGresult * r, ExecStatusType t); static int AssertColumn(PGresult * r, const char * column_name); static const char * AssertValue(PGresult * r, int row, int col); void ClearResult(PGresult * r); long AssertCurrval(const char * table); bool AddItemCreateUrlSubject(Item & item); Error AddItemIntoContent(Item & item); Error AddItemIntoItem(Item & item); Error EditItemInItem(Item & item, bool with_subject); Error EditItemInContent(Item & item); Error EditItemGetId(Item & item); Error EditItemGetContentId(Item & item); void CheckAllUrlSubjectModifyItem(Item & item); PGresult * GetItemsQuery(Item & item_ref); bool DelItemDelItem(const Item & item); void DelItemDelContent(const Item & item); Error DelItemCountContents(const Item & item, long & contents); struct ItemColumns { int id, user_id, group_id, privileges, url, type, parent_id, content_id, default_item, subject, content, content_type; void SetColumns(PGresult * r); void SetItem(PGresult * r, long row, Item & item); }; }; // class Db extern Db db; #endif