Go to the documentation of this file.00001 #include "createview.h"
00002 #include "ui_createview.h"
00003 #include <QMessageBox>
00004 #include "highlighter.h"
00005 #include <Qsci/qsciscintilla.h>
00006 #include <Qsci/qscilexer.h>
00007 #include <Qsci/qscilexersql.h>
00008 CreateView::CreateView(QWidget *parent) :
00009 QDialog(parent),
00010 ui(new Ui::CreateView)
00011 {
00012 ui->setupUi(this);
00013 isNew = true;
00014 ui->txtGeneratedQuery->setReadOnly(true);
00015 ui->txtGeneratedQuery->setLexer(new QsciLexerSQL);
00016 ui->txtGeneratedQuery->setFolding(QsciScintilla::PlainFoldStyle, 2);
00017 ui->txtGeneratedQuery->setAutoCompletionSource(QsciScintilla::AcsAll);
00018 ui->txtGeneratedQuery->setAutoCompletionFillupsEnabled(true);
00019 ui->txtGeneratedQuery->setBraceMatching(QsciScintilla::StrictBraceMatch);
00020 ui->txtGeneratedQuery->setCallTipsVisible(true);
00021 ui->txtGeneratedQuery->setCallTipsStyle(QsciScintilla::CallTipsNoContext);
00022 ui->txtGeneratedQuery->setCaretLineVisible(true);
00023 ui->txtGeneratedQuery->setMarginWidth(1, 40);
00024 ui->txtGeneratedQuery->setMarginLineNumbers(1, true);
00025 ui->txtViewQuery->setLexer(new QsciLexerSQL);
00026 ui->txtViewQuery->setFolding(QsciScintilla::PlainFoldStyle, 2);
00027 ui->txtViewQuery->setAutoCompletionSource(QsciScintilla::AcsAll);
00028 ui->txtViewQuery->setAutoCompletionFillupsEnabled(true);
00029 ui->txtViewQuery->setBraceMatching(QsciScintilla::StrictBraceMatch);
00030 ui->txtViewQuery->setCallTipsVisible(true);
00031 ui->txtViewQuery->setCallTipsStyle(QsciScintilla::CallTipsNoContext);
00032 ui->txtViewQuery->setCaretLineVisible(true);
00033 ui->txtViewQuery->setMarginWidth(1, 40);
00034 ui->txtViewQuery->setMarginLineNumbers(1, true);
00035 }
00036
00037 CreateView::~CreateView()
00038 {
00039 delete ui;
00040 }
00041
00042 void CreateView::generateQuery() {
00043 QString newViewSnippet = tr("CREATE\n/*[ALGORITHM = {UNDEFINED | MERGE |TEMPTABLE}]\n[DEFINER = { user | CURRENT_USER ]}\n [SQL_SECURITY = {DESIGNER | INVOKER}]*/\nVIEW `%1`.`%2` AS\n(\n%3\n)").arg(dbName, ui->txtViewName->text(), ui->txtViewQuery->text());
00044 if (!isNew) {
00045 newViewSnippet = tr("DROP VIEW IF EXISTS `%1`.`%2`;\n%3")
00046 .arg(dbName, viewToAlter, ui->txtViewQuery->text());
00047 }
00048 ui->txtGeneratedQuery->setText(newViewSnippet);
00049
00050 }
00051
00052 void CreateView::on_txtViewName_textEdited(QString )
00053 {
00054 generateQuery();
00055 }
00056
00057 void CreateView::on_txtViewQuery_textChanged()
00058 {
00059 generateQuery();
00060 }
00061
00062 void CreateView::setDbName() {
00063 ui->txtDbName->setText(dbName);
00064 }
00065
00066 void CreateView::on_cmdCancel_clicked()
00067 {
00068 this->reject();
00069 }
00070
00071 void CreateView::on_cmdExecute_clicked()
00072 {
00073 db.open();
00074 if (db.open()) {
00075 QSqlQuery qu(db);
00076 qu.exec(tr("use `%1`").arg(dbName));
00077 qu.clear();
00078 if (qu.exec(ui->txtGeneratedQuery->text())) {
00079 QMessageBox::information(this, "Success", "View successfully saved.");
00080 this->accept();
00081 } else {
00082 QMessageBox::warning(this, "Error", tr("There was an error when saving the view. \n%1").arg(qu.lastError().text()));
00083 }
00084 }
00085 }
00086
00087 void CreateView::startAlter() {
00088 isNew = false;
00089 ui->txtViewName->setText(viewToAlter);
00090 ui->txtDbName->setText(dbName);
00091 ui->txtViewName->setReadOnly(true);
00092 db.open();
00093 if (db.open()) {
00094 QSqlQuery qu(db);
00095 qu.exec(tr("use `%1`").arg(dbName));
00096 qu.clear();
00097 if (qu.exec(tr("SHOW CREATE VIEW `%1`.`%2`").arg(dbName, viewToAlter))) {
00098 qu.first();
00099 ui->txtViewQuery->setText(qu.value(1).toString());
00100 generateQuery();
00101 } else {
00102 QMessageBox::warning(this, "Error", tr("There was an error when generating the view. \n%1").arg(qu.lastError().text()));
00103 }
00104 }
00105 }