]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/store/firebird/firebird_store_services.cpp
0056879ed24a45ccbbd37e7ffe55c3b14cba691f
[stg.git] / projects / stargazer / plugins / store / firebird / firebird_store_services.cpp
1 /*
2  *    This program is free software; you can redistribute it and/or modify
3  *    it under the terms of the GNU General Public License as published by
4  *    the Free Software Foundation; either version 2 of the License, or
5  *    (at your option) any later version.
6  *
7  *    This program is distributed in the hope that it will be useful,
8  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
9  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  *    GNU General Public License for more details.
11  *
12  *    You should have received a copy of the GNU General Public License
13  *    along with this program; if not, write to the Free Software
14  *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
15  */
16
17 /*
18  *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
19  */
20
21
22 /*
23  *  Services manipulation methods
24  *
25  *  $Revision: 1.6 $
26  *  $Date: 2009/05/13 13:19:33 $
27  *
28  */
29
30 #include "firebird_store.h"
31
32 #include "stg/ibpp.h"
33 #include "stg/service_conf.h"
34 #include "stg/common.h"
35
36 //-----------------------------------------------------------------------------
37 int FIREBIRD_STORE::GetServicesList(std::vector<std::string> * servicesList) const
38 {
39 STG_LOCKER lock(&mutex);
40
41 IBPP::Transaction tr = IBPP::TransactionFactory(db, IBPP::amRead, til, tlr);
42 IBPP::Statement st = IBPP::StatementFactory(db, tr);
43
44 std::string name;
45
46 try
47     {
48     tr->Start();
49     st->Execute("select name from tb_services");
50     while (st->Fetch())
51         {
52         st->Get(1, name);
53         servicesList->push_back(name);
54         }
55     tr->Commit();
56     }
57
58 catch (IBPP::Exception & ex)
59     {
60     tr->Rollback();
61     strError = "IBPP exception";
62     printfd(__FILE__, ex.what());
63     return -1;
64     }
65
66 return 0;
67 }
68 //-----------------------------------------------------------------------------
69 int FIREBIRD_STORE::SaveService(const STG::ServiceConf & sc) const
70 {
71 STG_LOCKER lock(&mutex);
72
73 IBPP::Transaction tr = IBPP::TransactionFactory(db, IBPP::amWrite, til, tlr);
74 IBPP::Statement st = IBPP::StatementFactory(db, tr);
75
76 try
77     {
78     tr->Start();
79     st->Prepare("update tb_services set \
80             comments = ?, \
81             cost = ?, \
82             pay_day = ? \
83          where name = ?");
84     st->Set(1, sc.comment);
85     st->Set(2, sc.cost);
86     st->Set(3, static_cast<int16_t>(sc.payDay));
87     st->Set(4, sc.name);
88     st->Execute();
89     tr->Commit();
90     }
91
92 catch (IBPP::Exception & ex)
93     {
94     tr->Rollback();
95     strError = "IBPP exception";
96     printfd(__FILE__, ex.what());
97     return -1;
98     }
99
100 return 0;
101 }
102 //-----------------------------------------------------------------------------
103 int FIREBIRD_STORE::RestoreService(STG::ServiceConf * sc,
104                                    const std::string & name) const
105 {
106 STG_LOCKER lock(&mutex);
107
108 IBPP::Transaction tr = IBPP::TransactionFactory(db, IBPP::amRead, til, tlr);
109 IBPP::Statement st = IBPP::StatementFactory(db, tr);
110
111 try
112     {
113     tr->Start();
114     st->Prepare("select * from tb_services where name = ?");
115     st->Set(1, name);
116     st->Execute();
117     if (st->Fetch())
118         {
119         st->Get(3, sc->comment);
120         st->Get(4, sc->cost);
121         int16_t pd;
122         st->Get(5, pd);
123         sc->payDay = static_cast<uint8_t>(pd);
124         }
125     else
126         {
127         strError = "Service \"" + name + "\" not found in database";
128     printfd(__FILE__, "Service '%s' not found in database\n", name.c_str());
129         tr->Rollback();
130         return -1;
131         }
132     tr->Commit();
133     }
134
135 catch (IBPP::Exception & ex)
136     {
137     tr->Rollback();
138     strError = "IBPP exception";
139     printfd(__FILE__, ex.what());
140     return -1;
141     }
142
143 return 0;
144 }
145 //-----------------------------------------------------------------------------
146 int FIREBIRD_STORE::AddService(const std::string & name) const
147 {
148 STG_LOCKER lock(&mutex);
149
150 IBPP::Transaction tr = IBPP::TransactionFactory(db, IBPP::amWrite, til, tlr);
151 IBPP::Statement st = IBPP::StatementFactory(db, tr);
152
153 try
154     {
155     tr->Start();
156     st->Prepare("insert into tb_services (name, comment, cost, pay_day) \
157             values (?, '', 0, 0)");
158     st->Set(1, name);
159     st->Execute();
160     tr->Commit();
161     }
162
163 catch (IBPP::Exception & ex)
164     {
165     tr->Rollback();
166     strError = "IBPP exception";
167     printfd(__FILE__, ex.what());
168     return -1;
169     }
170
171 return 0;
172 }
173 //-----------------------------------------------------------------------------
174 int FIREBIRD_STORE::DelService(const std::string & name) const
175 {
176 STG_LOCKER lock(&mutex);
177
178 IBPP::Transaction tr = IBPP::TransactionFactory(db, IBPP::amWrite, til, tlr);
179 IBPP::Statement st = IBPP::StatementFactory(db, tr);
180
181 try
182     {
183     tr->Start();
184     st->Prepare("execute procedure sp_delete_service(?)");
185     st->Set(1, name);
186     st->Execute();
187     tr->Commit();
188     }
189
190 catch (IBPP::Exception & ex)
191     {
192     tr->Rollback();
193     strError = "IBPP exception";
194     printfd(__FILE__, ex.what());
195     return -1;
196     }
197
198 return 0;
199 }
200 //-----------------------------------------------------------------------------
201