kexi

object.cpp
1/* This file is part of the KDE project
2 Copyright (C) 2003-2005 Jaroslaw Staniek <js@iidea.pl>
3
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this program; see the file COPYING. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18*/
19
20#include <kexidb/object.h>
21#include <kexidb/error.h>
22#include <kexidb/msghandler.h>
23
24#include <tdelocale.h>
25#include <kdebug.h>
26
27using namespace KexiDB;
28
29#define ERRMSG(a) \
30 { if (m_msgHandler) m_msgHandler->showErrorMessage(a); }
31
32Object::Object(MessageHandler* handler)
33: m_previousServerResultNum(0)
34, m_previousServerResultNum2(0)
35, m_msgHandler(handler)
36, d(0) //empty
37{
38 clearError();
39}
40
41Object::~Object()
42{
43}
44
45#define STORE_PREV_ERR \
46 m_previousServerResultNum = m_previousServerResultNum2; \
47 m_previousServerResultName = m_previousServerResultName2; \
48 m_previousServerResultNum2 = serverResult(); \
49 m_previousServerResultName2 = serverResultName(); \
50 KexiDBDbg << "Object ERROR: " << m_previousServerResultNum2 << ": " \
51 << m_previousServerResultName2 <<endl
52
53void Object::setError( int code, const TQString &msg )
54{
55 STORE_PREV_ERR;
56
57 m_errno=code;
58 m_errorSql = m_sql;
59 if (m_errno==ERR_OTHER && msg.isEmpty())
60 m_errMsg = i18n("Unspecified error encountered");
61 else
62 m_errMsg = msg;
63 m_hasError = code!=ERR_NONE;
64
65 if (m_hasError)
66 ERRMSG(this);
67}
68
69void Object::setError( const TQString &msg )
70{
71 setError( ERR_OTHER, msg );
72}
73
74void Object::setError( const TQString& title, const TQString &msg )
75{
76 STORE_PREV_ERR;
77
78 m_errno=ERR_OTHER;
79 TQString origMsgTitle( m_msgTitle ); //store
80
81 m_msgTitle += title;
82 m_errMsg = msg;
83 m_errorSql = m_sql;
84 m_hasError = true;
85 if (m_hasError)
86 ERRMSG(this);
87
88 m_msgTitle = origMsgTitle; //revert
89}
90
91void Object::setError( KexiDB::Object *obj, const TQString& prependMessage )
92{
93 setError( obj, obj ? obj->errorNum() : ERR_OTHER, prependMessage );
94}
95
96void Object::setError( KexiDB::Object *obj, int code, const TQString& prependMessage )
97{
98 if (obj && (obj->errorNum()!=0 || !obj->serverErrorMsg().isEmpty())) {
99 STORE_PREV_ERR;
100
101 m_errno = obj->errorNum();
102 m_hasError = obj->error();
103 if (m_errno==0) {
104 m_errno = code;
105 m_hasError = true;
106 }
107 m_errMsg = (prependMessage.isEmpty() ? TQString() : (prependMessage + " "))
108 + obj->errorMsg();
109 m_sql = obj->m_sql;
110 m_errorSql = obj->m_errorSql;
111 m_serverResult = obj->serverResult();
112 if (m_serverResult==0) //try copied
113 m_serverResult = obj->m_serverResult;
114 m_serverResultName = obj->serverResultName();
115 if (m_serverResultName.isEmpty()) //try copied
116 m_serverResultName = obj->m_serverResultName;
117 m_serverErrorMsg = obj->serverErrorMsg();
118 if (m_serverErrorMsg.isEmpty()) //try copied
119 m_serverErrorMsg = obj->m_serverErrorMsg;
120 //override
121 if (code!=0 && code!=ERR_OTHER)
122 m_errno = code;
123 if (m_hasError)
124 ERRMSG(this);
125 }
126 else {
127 setError( code!=0 ? code : ERR_OTHER, prependMessage );
128 }
129}
130
132{
133 m_errno = 0;
134 m_hasError = false;
135 m_errMsg = TQString();
136 m_sql = TQString();
137 m_errorSql = TQString();
138 m_serverResult = 0;
139 m_serverResultName = TQString();
140 m_serverErrorMsg = TQString();
142}
143
145{
146 return m_serverErrorMsg;
147}
148
150{
151 return m_serverResult;
152}
153
155{
156 return m_serverResultName;
157}
158
160{
161 if (error()) {
162 KexiDBDbg << "KEXIDB ERROR: " << errorMsg() << endl;
163 TQString s = serverErrorMsg(), sn = serverResultName();
164 if (!s.isEmpty())
165 KexiDBDbg << "KEXIDB SERVER ERRMSG: " << s << endl;
166 if (!sn.isEmpty())
167 KexiDBDbg << "KEXIDB SERVER RESULT NAME: " << sn << endl;
168 if (serverResult()!=0)
169 KexiDBDbg << "KEXIDB SERVER RESULT #: " << serverResult() << endl;
170 } else
171 KexiDBDbg << "KEXIDB OK." << endl;
172}
173
174int Object::askQuestion( const TQString& message,
175 KMessageBox::DialogType dlgType, KMessageBox::ButtonCode defaultResult,
176 const KGuiItem &buttonYes,
177 const KGuiItem &buttonNo,
178 const TQString &dontShowAskAgainName,
179 int options,
180 MessageHandler* msgHandler )
181{
182 if (msgHandler)
183 return msgHandler->askQuestion(message, dlgType, defaultResult, buttonYes, buttonNo,
184 dontShowAskAgainName, options);
185
186 if (m_msgHandler)
187 return m_msgHandler->askQuestion(message, dlgType, defaultResult, buttonYes, buttonNo,
188 dontShowAskAgainName, options);
189
190 return defaultResult;
191}
virtual int askQuestion(const TQString &message, KMessageBox::DialogType dlgType, KMessageBox::ButtonCode defaultResult, const KGuiItem &buttonYes=KStdGuiItem::yes(), const KGuiItem &buttonNo=KStdGuiItem::no(), const TQString &dontShowAskAgainName=TQString(), int options=KMessageBox::Notify)
bool error() const
Definition object.h:38
virtual TQString serverResultName()
Definition object.cpp:154
int errorNum() const
Definition object.h:46
virtual int askQuestion(const TQString &message, KMessageBox::DialogType dlgType, KMessageBox::ButtonCode defaultResult, const KGuiItem &buttonYes=KStdGuiItem::yes(), const KGuiItem &buttonNo=KStdGuiItem::no(), const TQString &dontShowAskAgainName=TQString(), int options=KMessageBox::Notify, MessageHandler *msgHandler=0)
Definition object.cpp:174
TQString m_sql
used to store of actually executed SQL statement
Definition object.h:161
virtual void clearError()
Definition object.cpp:131
virtual TQString serverErrorMsg()
Definition object.cpp:144
virtual void setError(int code=ERR_OTHER, const TQString &msg=TQString())
Definition object.cpp:53
virtual int serverResult()
Definition object.cpp:149
void debugError()
Definition object.cpp:159
virtual void drv_clearServerResult()
Definition object.h:158
const TQString & errorMsg() const
Definition object.h:42
High-level database connectivity library with database backend drivers.