kexi
kexiqueryview.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <kexiproject.h>
00022 #include <kexidb/connection.h>
00023 #include <kexidb/parser/parser.h>
00024 #include <kexidb/cursor.h>
00025 #include <keximainwindow.h>
00026 #include <kexiutils/utils.h>
00027
00028 #include "kexiqueryview.h"
00029 #include "kexiquerydesignersql.h"
00030 #include "kexiquerydesignerguieditor.h"
00031 #include "kexiquerypart.h"
00032 #include <widget/tableview/kexitableview.h>
00033 #include <widget/kexiqueryparameters.h>
00034
00036 class KexiQueryView::Private
00037 {
00038 public:
00039 Private()
00040 : cursor(0)
00041
00042 {}
00043 ~Private() {}
00044 KexiDB::Cursor *cursor;
00048
00049 };
00050
00051
00052
00053 KexiQueryView::KexiQueryView(KexiMainWindow *win, QWidget *parent, const char *name)
00054 : KexiDataTable(win, parent, name)
00055 , d( new Private() )
00056 {
00057 tableView()->setInsertingEnabled(false);
00058 }
00059
00060 KexiQueryView::~KexiQueryView()
00061 {
00062 if (d->cursor)
00063 d->cursor->connection()->deleteCursor(d->cursor);
00064 delete d;
00065 }
00066
00067 tristate KexiQueryView::executeQuery(KexiDB::QuerySchema *query)
00068 {
00069 if (!query)
00070 return false;
00071 KexiUtils::WaitCursor wait;
00072 KexiDB::Cursor *oldCursor = d->cursor;
00073 KexiDB::debug( query->parameters() );
00074 bool ok;
00075 QValueList<QVariant> params;
00076 {
00077 KexiUtils::WaitCursorRemover remover;
00078 params = KexiQueryParameters::getParameters(this,
00079 *mainWin()->project()->dbConnection()->driver(), *query, ok);
00080 }
00081 if (!ok) {
00082 return cancelled;
00083 }
00084 d->cursor = mainWin()->project()->dbConnection()->executeQuery(*query, params);
00085 if (!d->cursor) {
00086 parentDialog()->setStatus(parentDialog()->mainWin()->project()->dbConnection(),
00087 i18n("Query executing failed."));
00088
00089 return false;
00090 }
00091 setData(d->cursor);
00092
00094 d->cursor->close();
00095
00096 if (oldCursor)
00097 oldCursor->connection()->deleteCursor(oldCursor);
00098
00100 tableView()->setReadOnly( true );
00102
00103 tableView()->data()->setReadOnly( true );
00104 tableView()->setInsertingEnabled( false );
00105 return true;
00106 }
00107
00108 tristate KexiQueryView::afterSwitchFrom(int mode)
00109 {
00110 if (mode==Kexi::NoViewMode) {
00111 KexiDB::QuerySchema *querySchema = static_cast<KexiDB::QuerySchema *>(parentDialog()->schemaData());
00112 const tristate result = executeQuery(querySchema);
00113 if (true != result)
00114 return result;
00115 }
00116 else if (mode==Kexi::DesignViewMode || Kexi::TextViewMode) {
00117 KexiQueryPart::TempData * temp = static_cast<KexiQueryPart::TempData*>(parentDialog()->tempData());
00118
00119
00120
00121
00122
00123
00124
00125 const tristate result = executeQuery(temp->query());
00126 if (true != result)
00127 return result;
00128 }
00129 return true;
00130 }
00131
00132 KexiDB::SchemaData* KexiQueryView::storeNewData(const KexiDB::SchemaData& sdata, bool &cancel)
00133 {
00134 KexiViewBase * view = parentDialog()->viewThatRecentlySetDirtyFlag();
00135 if (dynamic_cast<KexiQueryDesignerGuiEditor*>(view))
00136 return dynamic_cast<KexiQueryDesignerGuiEditor*>(view)->storeNewData(sdata, cancel);
00137 if (dynamic_cast<KexiQueryDesignerSQLView*>(view))
00138 return dynamic_cast<KexiQueryDesignerSQLView*>(view)->storeNewData(sdata, cancel);
00139 return 0;
00140 }
00141
00142 tristate KexiQueryView::storeData(bool dontAsk)
00143 {
00144 KexiViewBase * view = parentDialog()->viewThatRecentlySetDirtyFlag();
00145 if (dynamic_cast<KexiQueryDesignerGuiEditor*>(view))
00146 return dynamic_cast<KexiQueryDesignerGuiEditor*>(view)->storeData(dontAsk);
00147 if (dynamic_cast<KexiQueryDesignerSQLView*>(view))
00148 return dynamic_cast<KexiQueryDesignerSQLView*>(view)->storeData(dontAsk);
00149 return false;
00150 }
00151
00152
00153 #include "kexiqueryview.moc"
00154
|