aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/constraints
diff options
context:
space:
mode:
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/constraints')
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.cpp8
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.cpp2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columngeneratedpanel.cpp227
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columngeneratedpanel.h44
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columngeneratedpanel.ui92
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.cpp23
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/constraintcheckpanel.cpp21
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/constraintpanel.cpp3
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.cpp3
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.ui24
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/tablepkanduniquepanel.cpp47
11 files changed, 406 insertions, 88 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.cpp
index 5759f76..bb70c81 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.cpp
@@ -152,7 +152,7 @@ void ColumnDefaultPanel::storeExpr(SqliteCreateTable::Column::Constraint* constr
return;
}
- Parser parser(db->getDialect());
+ Parser parser;
SqliteExpr* newExpr = parser.parseExpr(text);
newExpr->setParent(constraint.data());
constr->expr = newExpr;
@@ -162,7 +162,7 @@ void ColumnDefaultPanel::storeLiteral(SqliteCreateTable::Column::Constraint* con
{
QString text = ui->exprEdit->toPlainText();
- Parser parser(db->getDialect());
+ Parser parser;
SqliteCreateTablePtr createTable = parser.parse<SqliteCreateTable>("CREATE TABLE tab (col DEFAULT "+text+");");
if (!createTable || createTable->columns.size() == 0 || createTable->columns.first()->constraints.size() == 0)
{
@@ -240,7 +240,7 @@ void ColumnDefaultPanel::readConstraint()
}
else if (!constr->id.isNull())
{
- ui->exprEdit->setPlainText(wrapObjIfNeeded(constr->id, db->getDialect(), true));
+ ui->exprEdit->setPlainText(wrapObjIfNeeded(constr->id, true));
currentMode = Mode::LITERAL;
}
else if (!constr->ctime.isNull())
@@ -265,7 +265,7 @@ void ColumnDefaultPanel::updateVirtualSql()
{
static QString sql = QStringLiteral("CREATE TABLE tab (col DEFAULT %1)");
ui->exprEdit->setDb(db);
- ui->exprEdit->setVirtualSqlExpression(sql.arg(db->getDialect() == Dialect::Sqlite3 ? "(%1)" : "%1"));
+ ui->exprEdit->setVirtualSqlExpression(sql.arg("(%1)"));
}
QString ColumnDefaultPanel::getTempTable()
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.cpp
index af79331..ea5cb7d 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.cpp
@@ -227,7 +227,7 @@ void ColumnForeignKeyPanel::storeConfiguration()
constr->foreignKey->initially = sqliteInitially(ui->initiallyCombo->currentText());
// Name
- constr->name = QString::null;
+ constr->name = QString();
if (ui->namedCheckBox->isChecked())
constr->name = ui->nameEdit->text();
}
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columngeneratedpanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/columngeneratedpanel.cpp
new file mode 100644
index 0000000..308b868
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columngeneratedpanel.cpp
@@ -0,0 +1,227 @@
+#include "columngeneratedpanel.h"
+#include "ui_columngeneratedpanel.h"
+#include "parser/parser.h"
+#include "parser/keywords.h"
+#include "parser/lexer.h"
+#include "uiutils.h"
+#include "schemaresolver.h"
+#include <QDebug>
+
+ColumnGeneratedPanel::ColumnGeneratedPanel(QWidget *parent) :
+ ConstraintPanel(parent),
+ ui(new Ui::ColumnGeneratedPanel)
+{
+ ui->setupUi(this);
+ init();
+}
+
+ColumnGeneratedPanel::~ColumnGeneratedPanel()
+{
+ delete ui;
+}
+
+void ColumnGeneratedPanel::changeEvent(QEvent *e)
+{
+ QWidget::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
+
+
+bool ColumnGeneratedPanel::validate()
+{
+ if (!ui->exprEdit->isSyntaxChecked())
+ {
+ setValidState(ui->exprEdit, false, tr("Enter the column value generating expression."));
+ return false;
+ }
+
+ // First check if we already validated this text.
+ // This method is called twice, by both errors checking and syntax highlighting,
+ // because signal for textChange() is connected with call to updateValidation().
+ QString text = ui->exprEdit->toPlainText();
+ if (!lastValidatedText.isNull() && lastValidatedText == text)
+ return lastValidationResult;
+
+ lastValidatedText = text;
+
+ bool nameOk = true;
+ if (ui->namedCheck->isChecked() && ui->namedEdit->text().isEmpty())
+ nameOk = false;
+
+ bool exprOk = !ui->exprEdit->toPlainText().trimmed().isEmpty() &&
+ !ui->exprEdit->haveErrors();
+
+ QString exprError;
+ if (exprOk)
+ {
+ // Everything looks fine, so lets do the final check - if the value is correct for use as generated column expression in SQLite.
+ static QString tempDdlExprTpl = QStringLiteral("CREATE TEMP TABLE %1 (aaa, %2 GENERATED ALWAYS AS (%3));");
+ static QString dropTempDdl = QStringLiteral("DROP TABLE %1;");
+
+ SqliteCreateTable::Column* columnStmt = dynamic_cast<SqliteCreateTable::Column*>(constraint->parentStatement());
+ SqliteCreateTable* createTableStmt = dynamic_cast<SqliteCreateTable*>(columnStmt->parentStatement());
+
+ QStringList preparedColNames;
+ QString thisColumnName = columnStmt->name;
+ for (SqliteCreateTable::Column* column : createTableStmt->columns)
+ {
+ if (column->name == thisColumnName)
+ continue;
+
+ preparedColNames << wrapObjIfNeeded(column->name);
+ }
+ preparedColNames << wrapObjIfNeeded(thisColumnName);
+
+ QString tableName = getTempTable();
+ QString tempDdl = tempDdlExprTpl.arg(tableName, preparedColNames.join(", "), ui->exprEdit->toPlainText());
+ SqlQueryPtr res = db->exec(tempDdl);
+ if (res->isError())
+ {
+ exprOk = false;
+ exprError = tr("Invalid value generating expression: %1.")
+ .arg(res->getErrorText());
+ }
+
+ db->exec(dropTempDdl.arg(tableName));
+ } else
+ exprError = tr("Invalid value generating expression.");
+
+ setValidState(ui->exprEdit, exprOk, exprError);
+ setValidState(ui->namedEdit, nameOk, tr("Enter a name of the constraint."));
+
+ lastValidationResult = (exprOk && nameOk);
+ return lastValidationResult;
+}
+
+bool ColumnGeneratedPanel::validateOnly()
+{
+ ui->exprEdit->checkSyntaxNow();
+ return validate();
+}
+
+void ColumnGeneratedPanel::constraintAvailable()
+{
+ if (constraint.isNull())
+ return;
+
+ readConstraint();
+ updateVirtualSql();
+ validateOnly();
+}
+
+void ColumnGeneratedPanel::storeConfiguration()
+{
+ if (constraint.isNull())
+ return;
+
+ SqliteCreateTable::Column::Constraint* constr = dynamic_cast<SqliteCreateTable::Column::Constraint*>(constraint.data());
+ constr->type = SqliteCreateTable::Column::Constraint::GENERATED;
+ storeExpr(constr);
+
+ if (ui->typeCheck->isChecked())
+ constr->generatedType = SqliteCreateTable::Column::Constraint::generatedTypeFrom(ui->typeCombo->currentText());
+ else
+ constr->generatedType = SqliteCreateTable::Column::Constraint::GeneratedType::null;
+
+ constr->generatedKw = ui->generatedKwCheck->isChecked();
+
+ if (ui->namedCheck->isChecked())
+ constr->name = ui->namedEdit->text();
+}
+
+void ColumnGeneratedPanel::storeExpr(SqliteCreateTable::Column::Constraint* constr)
+{
+ QString text = ui->exprEdit->toPlainText();
+ clear(constr);
+
+ Parser parser;
+ SqliteExpr* newExpr = parser.parseExpr(text);
+ newExpr->setParent(constraint.data());
+ constr->expr = newExpr;
+}
+
+void ColumnGeneratedPanel::clear(SqliteCreateTable::Column::Constraint* constr)
+{
+ if (constr->expr)
+ {
+ delete constr->expr;
+ constr->expr = nullptr;
+ }
+ constr->generatedKw = false;
+ constr->generatedType = SqliteCreateTable::Column::Constraint::GeneratedType::null;
+}
+
+void ColumnGeneratedPanel::init()
+{
+ setFocusProxy(ui->exprEdit);
+ ui->exprEdit->setShowLineNumbers(false);
+
+ connect(ui->namedCheck, SIGNAL(toggled(bool)), this, SIGNAL(updateValidation()));
+ connect(ui->namedEdit, SIGNAL(textChanged(QString)), this, SIGNAL(updateValidation()));
+ connect(ui->exprEdit, SIGNAL(textChanged()), this, SIGNAL(updateValidation()));
+ connect(ui->exprEdit, SIGNAL(errorsChecked(bool)), this, SIGNAL(updateValidation()));
+
+ connect(ui->namedCheck, SIGNAL(toggled(bool)), this, SLOT(updateState()));
+ connect(ui->typeCheck, SIGNAL(toggled(bool)), this, SLOT(updateState()));
+
+ ui->typeCombo->addItems(getGeneratedColumnTypes());
+
+ updateState();
+}
+
+void ColumnGeneratedPanel::readConstraint()
+{
+ SqliteCreateTable::Column::Constraint* constr = dynamic_cast<SqliteCreateTable::Column::Constraint*>(constraint.data());
+
+ constr->rebuildTokens();
+ if (constr->expr)
+ ui->exprEdit->setPlainText(constr->expr->detokenize());
+
+ QString typeValue = SqliteCreateTable::Column::Constraint::toString(constr->generatedType);
+ switch (constr->generatedType) {
+ case SqliteCreateTable::Column::Constraint::GeneratedType::STORED:
+ ui->typeCheck->setChecked(true);
+ break;
+ case SqliteCreateTable::Column::Constraint::GeneratedType::VIRTUAL:
+ ui->typeCheck->setChecked(true);
+ break;
+ case SqliteCreateTable::Column::Constraint::GeneratedType::null:
+ ui->typeCheck->setChecked(false);
+ typeValue = SqliteCreateTable::Column::Constraint::toString(SqliteCreateTable::Column::Constraint::GeneratedType::VIRTUAL);
+ break;
+ }
+ ui->typeCombo->setCurrentText(typeValue);
+
+ ui->generatedKwCheck->setChecked(constr->generatedKw);
+
+ if (!constr->name.isNull())
+ {
+ ui->namedCheck->setChecked(true);
+ ui->namedEdit->setText(constr->name);
+ }
+}
+
+void ColumnGeneratedPanel::updateVirtualSql()
+{
+ static QString sql = QStringLiteral("CREATE TABLE tab (col GENERATED ALWAYS AS (%1))");
+ ui->exprEdit->setDb(db);
+ ui->exprEdit->setVirtualSqlExpression(sql);
+}
+
+QString ColumnGeneratedPanel::getTempTable()
+{
+ SchemaResolver resolver(db);
+ return resolver.getUniqueName("sqlitestudio_temp_table");
+}
+
+void ColumnGeneratedPanel::updateState()
+{
+ ui->namedEdit->setEnabled(ui->namedCheck->isChecked());
+ ui->typeCombo->setEnabled(ui->typeCheck->isChecked());
+}
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columngeneratedpanel.h b/SQLiteStudio3/guiSQLiteStudio/constraints/columngeneratedpanel.h
new file mode 100644
index 0000000..171dab8
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columngeneratedpanel.h
@@ -0,0 +1,44 @@
+#ifndef COLUMNGENERATEDPANEL_H
+#define COLUMNGENERATEDPANEL_H
+
+#include "constraintpanel.h"
+#include "guiSQLiteStudio_global.h"
+#include <QWidget>
+
+namespace Ui {
+ class ColumnGeneratedPanel;
+}
+
+class GUI_API_EXPORT ColumnGeneratedPanel : public ConstraintPanel
+{
+ Q_OBJECT
+
+ public:
+ explicit ColumnGeneratedPanel(QWidget *parent = 0);
+ ~ColumnGeneratedPanel();
+
+ bool validate();
+ bool validateOnly();
+
+ protected:
+ void changeEvent(QEvent *e);
+ void constraintAvailable();
+ void storeConfiguration();
+
+ private:
+ void init();
+ void readConstraint();
+ void updateVirtualSql();
+ QString getTempTable();
+ void storeExpr(SqliteCreateTable::Column::Constraint* constr);
+ void clear(SqliteCreateTable::Column::Constraint* constr);
+
+ Ui::ColumnGeneratedPanel *ui = nullptr;
+ QString lastValidatedText;
+ bool lastValidationResult = false;
+
+ private slots:
+ void updateState();
+};
+
+#endif // COLUMNGENERATEDPANEL_H
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columngeneratedpanel.ui b/SQLiteStudio3/guiSQLiteStudio/constraints/columngeneratedpanel.ui
new file mode 100644
index 0000000..3d0bcfc
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columngeneratedpanel.ui
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ColumnGeneratedPanel</class>
+ <widget class="QWidget" name="ColumnGeneratedPanel">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>263</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string notr="true">Form</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QGroupBox" name="exprGroup">
+ <property name="title">
+ <string>Generating code:</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="SqlEditor" name="exprEdit"/>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QWidget" name="typeWidget" native="true">
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QCheckBox" name="typeCheck">
+ <property name="text">
+ <string>Explicit type:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QComboBox" name="typeCombo">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QWidget" name="generatedKwWidget" native="true">
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <widget class="QCheckBox" name="generatedKwCheck">
+ <property name="text">
+ <string>Use &quot;GENERATED ALWAYS&quot; keywords</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QWidget" name="namedWidget" native="true">
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QCheckBox" name="namedCheck">
+ <property name="text">
+ <string>Named constraint:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="namedEdit"/>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <customwidgets>
+ <customwidget>
+ <class>SqlEditor</class>
+ <extends>QPlainTextEdit</extends>
+ <header>sqleditor.h</header>
+ </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.cpp
index f8975d8..fa7b7c3 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.cpp
@@ -39,6 +39,9 @@ void ColumnPrimaryKeyPanel::init()
connect(ui->namedCheck, SIGNAL(toggled(bool)), this, SIGNAL(updateValidation()));
connect(ui->namedEdit, SIGNAL(textChanged(QString)), this, SIGNAL(updateValidation()));
+ connect(ui->sortOrderCheck, SIGNAL(toggled(bool)), this, SIGNAL(updateValidation()));
+ connect(ui->sortOrderCombo, SIGNAL(currentTextChanged(QString)), this, SIGNAL(updateValidation()));
+ connect(ui->autoIncrCheck, SIGNAL(toggled(bool)), this, SIGNAL(updateValidation()));
connect(ui->sortOrderCheck, SIGNAL(toggled(bool)), this, SLOT(updateState()));
connect(ui->namedCheck, SIGNAL(toggled(bool)), this, SLOT(updateState()));
connect(ui->conflictCheck, SIGNAL(toggled(bool)), this, SLOT(updateState()));
@@ -48,8 +51,7 @@ void ColumnPrimaryKeyPanel::init()
void ColumnPrimaryKeyPanel::readConstraint()
{
SqliteCreateTable::Column::Constraint* constr = dynamic_cast<SqliteCreateTable::Column::Constraint*>(constraint.data());
- if (constraint->dialect == Dialect::Sqlite3)
- ui->autoIncrCheck->setChecked(constr->autoincrKw);
+ ui->autoIncrCheck->setChecked(constr->autoincrKw);
if (constr->sortOrder != SqliteSortOrder::null)
{
@@ -77,7 +79,6 @@ void ColumnPrimaryKeyPanel::updateState()
ui->conflictCombo->setEnabled(ui->conflictCheck->isChecked());
}
-
bool ColumnPrimaryKeyPanel::validate()
{
bool nameOk = true;
@@ -86,7 +87,16 @@ bool ColumnPrimaryKeyPanel::validate()
setValidState(ui->namedEdit, nameOk, tr("Enter a name of the constraint."));
- return nameOk;
+ bool sortOk = true;
+ if (ui->autoIncrCheck->isChecked() && ui->sortOrderCombo->isEnabled() &&
+ ui->sortOrderCombo->currentText().toUpper() == "DESC")
+ {
+ sortOk = false;
+ }
+
+ setValidState(ui->sortOrderCombo, sortOk, tr("Descending order is not allowed with AUTOINCREMENT."));
+
+ return nameOk && sortOk;
}
void ColumnPrimaryKeyPanel::constraintAvailable()
@@ -94,8 +104,6 @@ void ColumnPrimaryKeyPanel::constraintAvailable()
if (constraint.isNull())
return;
- ui->autoIncrCheck->setVisible(constraint->dialect == Dialect::Sqlite3);
-
readConstraint();
}
@@ -107,8 +115,7 @@ void ColumnPrimaryKeyPanel::storeConfiguration()
SqliteCreateTable::Column::Constraint* constr = dynamic_cast<SqliteCreateTable::Column::Constraint*>(constraint.data());
constr->type = SqliteCreateTable::Column::Constraint::PRIMARY_KEY;
- if (constraint->dialect == Dialect::Sqlite3)
- constr->autoincrKw = ui->autoIncrCheck->isChecked();
+ constr->autoincrKw = ui->autoIncrCheck->isChecked();
if (ui->sortOrderCheck->isChecked() && ui->sortOrderCombo->currentIndex() > -1)
constr->sortOrder = sqliteSortOrder(ui->sortOrderCombo->currentText());
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/constraintcheckpanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/constraintcheckpanel.cpp
index adb5e2b..8a71777 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/constraintcheckpanel.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/constraintcheckpanel.cpp
@@ -54,11 +54,8 @@ void ConstraintCheckPanel::constraintAvailable()
if (constraint.isNull())
return;
- if (constraint->dialect == Dialect::Sqlite3)
- {
- ui->onConflictCheck->setVisible(false);
- ui->onConflictCombo->setVisible(false);
- }
+ ui->onConflictCheck->setVisible(false);
+ ui->onConflictCombo->setVisible(false);
readConstraint();
updateVirtualSql();
@@ -76,14 +73,11 @@ void ConstraintCheckPanel::storeConfiguration()
newExpr->setParent(constraint.data());
storeExpr(newExpr);
- QString name = QString::null;
+ QString name = QString();
if (ui->namedCheck->isChecked())
name = ui->namedEdit->text();
storeName(name);
-
- if (constraint->dialect == Dialect::Sqlite2 && ui->onConflictCheck->isChecked())
- storeConflictAlgo(sqliteConflictAlgo(ui->onConflictCombo->currentText()));
}
void ConstraintCheckPanel::init()
@@ -116,13 +110,6 @@ void ConstraintCheckPanel::readConstraint()
ui->namedCheck->setChecked(true);
ui->namedEdit->setText(name);
}
-
- SqliteConflictAlgo onConflict = readConflictAlgo();
- if (constraint->dialect == Dialect::Sqlite2 && onConflict != SqliteConflictAlgo::null)
- {
- ui->onConflictCheck->setChecked(true);
- ui->onConflictCombo->setCurrentText(sqliteConflictAlgo(onConflict));
- }
}
void ConstraintCheckPanel::updateVirtualSql()
@@ -157,7 +144,7 @@ void ConstraintCheckPanel::updateVirtualSql()
SqliteExprPtr ConstraintCheckPanel::parseExpression(const QString& sql)
{
- Parser parser(db->getDialect());
+ Parser parser;
SqliteExpr *expr = parser.parseExpr(sql);
return SqliteExprPtr(expr);
}
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/constraintpanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/constraintpanel.cpp
index 031fbfe..4f3e350 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/constraintpanel.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/constraintpanel.cpp
@@ -6,6 +6,7 @@
#include "constraints/tablecheckpanel.h"
#include "constraints/columncheckpanel.h"
#include "constraints/columncollatepanel.h"
+#include "constraints/columngeneratedpanel.h"
#include "constraints/columndefaultpanel.h"
#include "constraints/columnforeignkeypanel.h"
#include "constraints/columnnotnullpanel.h"
@@ -81,6 +82,8 @@ ConstraintPanel* ConstraintPanel::produce(SqliteCreateTable::Column::Constraint*
return new ColumnDefaultPanel();
case SqliteCreateTable::Column::Constraint::COLLATE:
return new ColumnCollatePanel();
+ case SqliteCreateTable::Column::Constraint::GENERATED:
+ return new ColumnGeneratedPanel();
case SqliteCreateTable::Column::Constraint::FOREIGN_KEY:
return new ColumnForeignKeyPanel();
case SqliteCreateTable::Column::Constraint::NULL_:
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.cpp
index 8bc7926..cecf5f4 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.cpp
@@ -72,7 +72,6 @@ bool TableForeignKeyPanel::validate()
void TableForeignKeyPanel::setDb(Db* value)
{
ConstraintPanel::setDb(value);
- ui->sqlite2Warn->setVisible(value->getDialect() == Dialect::Sqlite2);
}
void TableForeignKeyPanel::constraintAvailable()
@@ -361,7 +360,7 @@ void TableForeignKeyPanel::storeConfiguration()
constr->foreignKey->initially = sqliteInitially(ui->initiallyCombo->currentText());
// Name
- constr->name = QString::null;
+ constr->name = QString();
if (ui->namedCheckBox->isChecked())
constr->name = ui->nameEdit->text();
}
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.ui b/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.ui
index 7ecbe06..a0e38ec 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.ui
@@ -37,26 +37,6 @@
</widget>
</item>
<item>
- <widget class="QLabel" name="sqlite2Warn">
- <property name="font">
- <font>
- <pointsize>8</pointsize>
- <italic>true</italic>
- </font>
- </property>
- <property name="text">
- <string>SQLite 2 does not support foreign keys officially,
-but it's okay to use them anyway.</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- <property name="margin">
- <number>5</number>
- </property>
- </widget>
- </item>
- <item>
<widget class="QGroupBox" name="columnsGroup">
<property name="title">
<string>Columns</string>
@@ -110,8 +90,8 @@ but it's okay to use them anyway.</string>
<rect>
<x>0</x>
<y>0</y>
- <width>362</width>
- <height>25</height>
+ <width>358</width>
+ <height>30</height>
</rect>
</property>
</widget>
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/tablepkanduniquepanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/tablepkanduniquepanel.cpp
index 7c1c359..65c4a34 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/tablepkanduniquepanel.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/tablepkanduniquepanel.cpp
@@ -78,7 +78,7 @@ void TablePrimaryKeyAndUniquePanel::buildColumn(SqliteCreateTable::Column* colum
connect(check, SIGNAL(toggled(bool)), this, SIGNAL(updateValidation()));
QComboBox* collation = nullptr;
- if (!constraint.isNull() && constraint->dialect == Dialect::Sqlite3)
+ if (!constraint.isNull())
{
collation = new QComboBox();
collation->setMaximumWidth(ui->colHdrCollation->width());
@@ -125,7 +125,7 @@ void TablePrimaryKeyAndUniquePanel::updateColumnState(int colIdx)
item = columnsLayout->itemAtPosition(colIdx, 1)->widget();
qobject_cast<QComboBox*>(item)->setEnabled(enable);
- if (!constraint.isNull() && constraint->dialect == Dialect::Sqlite3)
+ if (!constraint.isNull())
{
item = columnsLayout->itemAtPosition(colIdx, 2)->widget();
qobject_cast<QComboBox*>(item)->setEnabled(enable);
@@ -182,7 +182,7 @@ void TablePrimaryKeyAndUniquePanel::storeConfiguration()
SqliteCreateTable::Constraint* constr = dynamic_cast<SqliteCreateTable::Constraint*>(constraint.data());
// Name
- constr->name = QString::null;
+ constr->name = QString();
if (ui->namedCheckBox->isChecked())
constr->name = ui->namedLineEdit->text();
@@ -210,21 +210,13 @@ void TablePrimaryKeyAndUniquePanel::storeConfiguration()
name = check->property(UI_PROP_COLUMN).toString();
- if (constr->dialect == Dialect::Sqlite3)
- {
- combo = dynamic_cast<QComboBox*>(columnsLayout->itemAtPosition(i, 1)->widget());
- collate = combo->currentText();
- if (collate.isEmpty())
- collate = QString::null;
+ combo = dynamic_cast<QComboBox*>(columnsLayout->itemAtPosition(i, 1)->widget());
+ collate = combo->currentText();
+ if (collate.isEmpty())
+ collate = QString();
- combo = dynamic_cast<QComboBox*>(columnsLayout->itemAtPosition(i, 2)->widget());
- sortOrder = sqliteSortOrder(combo->currentText());
- }
- else
- {
- combo = dynamic_cast<QComboBox*>(columnsLayout->itemAtPosition(i, 1)->widget());
- sortOrder = sqliteSortOrder(combo->currentText());
- }
+ combo = dynamic_cast<QComboBox*>(columnsLayout->itemAtPosition(i, 2)->widget());
+ sortOrder = sqliteSortOrder(combo->currentText());
idxCol = new SqliteIndexedColumn(name, collate, sortOrder);
idxCol->setParent(constr);
@@ -266,24 +258,11 @@ void TablePrimaryKeyAndUniquePanel::readConstraint()
check = dynamic_cast<QCheckBox*>(columnsLayout->itemAtPosition(idx, 0)->widget());
check->setChecked(true);
- if (constr->dialect == Dialect::Sqlite3)
- {
- combo = dynamic_cast<QComboBox*>(columnsLayout->itemAtPosition(idx, 1)->widget());
- combo->setCurrentText(idxCol->collate);
+ combo = dynamic_cast<QComboBox*>(columnsLayout->itemAtPosition(idx, 1)->widget());
+ combo->setCurrentText(idxCol->collate);
- combo = dynamic_cast<QComboBox*>(columnsLayout->itemAtPosition(idx, 2)->widget());
- combo->setCurrentText(sqliteSortOrder(idxCol->sortOrder));
- }
- else
- {
- combo = dynamic_cast<QComboBox*>(columnsLayout->itemAtPosition(idx, 1)->widget());
- combo->setCurrentText(sqliteSortOrder(idxCol->sortOrder));
- }
- }
-
- if (constr->dialect == Dialect::Sqlite2)
- {
- ui->colHdrCollation->setVisible(false);
+ combo = dynamic_cast<QComboBox*>(columnsLayout->itemAtPosition(idx, 2)->widget());
+ combo->setCurrentText(sqliteSortOrder(idxCol->sortOrder));
}
}