sqlite primary key

This commit is contained in:
Hamed Masafi 2019-01-28 11:23:34 +03:30
parent 2fbd877f77
commit 81f23a1874
4 changed files with 45 additions and 19 deletions

View File

@ -220,10 +220,11 @@ QString SqlGeneratorBase::diff(TableModel *oldTable, TableModel *newTable)
.arg(newTable->name())
.arg(columnSql.join(",\n"));
} else {
if (!newTable->primaryKey().isNull())
columnSql << QString("CONSTRAINT pk_%1 PRIMARY KEY (%2)")
.arg(newTable->name())
.arg(newTable->primaryKey());
if (!newTable->primaryKey().isNull()) {
QString pkCon = primaryKeyConstraint(newTable);
if (!pkCon.isEmpty())
columnSql << pkCon;
}
sql = QString("CREATE TABLE %1 \n(%2)")
.arg(newTable->name())
@ -945,6 +946,13 @@ void SqlGeneratorBase::appendSkipTake(QString &sql, int skip, int take)
Q_UNUSED(take);
}
QString SqlGeneratorBase::primaryKeyConstraint(const TableModel *table) const
{
return QString("CONSTRAINT pk_%1 PRIMARY KEY (%2)")
.arg(table->name())
.arg(table->primaryKey());
}
QString SqlGeneratorBase::createConditionalPhrase(const PhraseData *d) const
{
if (!d)

View File

@ -128,6 +128,8 @@ public:
virtual QString phrase(const PhraseData *d) const;
virtual QString operatorString(const PhraseData::Condition &cond) const;
virtual void appendSkipTake(QString &sql, int skip = -1, int take = -1);
virtual QString primaryKeyConstraint(const TableModel *table) const;
protected:
QString createConditionalPhrase(const PhraseData *d) const;
QString createFieldPhrase(const PhraseList &ph);

View File

@ -33,10 +33,12 @@ QString SqliteGenerator::fieldType(FieldModel *field)
{
QString ret = field->name + " ";
QString dbType;
QString primaryKeyPerfix;
if (field->isPrimaryKey)
primaryKeyPerfix = " PRIMARY KEY";
if (field->isPrimaryKey) {
QString primaryKeyPerfix = " PRIMARY KEY";
if (field->isAutoIncrement)
primaryKeyPerfix += " AUTOINCREMENT";
return "INTEGER" + primaryKeyPerfix;
}
switch (field->type) {
case QMetaType::Bool: return "BOOLEAN";
case QMetaType::QByteArray: return "BLOB";
@ -47,16 +49,16 @@ QString SqliteGenerator::fieldType(FieldModel *field)
case QMetaType::Float: return "FLOAT";
case QMetaType::SChar:
case QMetaType::Char: return "TINYINT" + primaryKeyPerfix;
case QMetaType::UChar: return "TINYINT UNSIGNED" + primaryKeyPerfix;
case QMetaType::Short: return "SMALLINT" + primaryKeyPerfix;
case QMetaType::UShort: return "SMALLINT UNSIGNED" + primaryKeyPerfix;
case QMetaType::Int: return "INT" + primaryKeyPerfix;
case QMetaType::UInt: return "INT UNSIGNED" + primaryKeyPerfix;
case QMetaType::Long: return "MEDIUMINT" + primaryKeyPerfix;
case QMetaType::ULong: return "MEDIUMINT UNSIGNED" + primaryKeyPerfix;
case QMetaType::LongLong: return "BIGINT" + primaryKeyPerfix;
case QMetaType::ULongLong: return "BIGINT UNSIGNED" + primaryKeyPerfix;
case QMetaType::Char: return "TINYINT";
case QMetaType::UChar: return "TINYINT UNSIGNED";
case QMetaType::Short: return "SMALLINT";
case QMetaType::UShort: return "SMALLINT UNSIGNED";
case QMetaType::Int: return "INT";
case QMetaType::UInt: return "INT UNSIGNED";
case QMetaType::Long: return "MEDIUMINT";
case QMetaType::ULong: return "MEDIUMINT UNSIGNED";
case QMetaType::LongLong: return "BIGINT";
case QMetaType::ULongLong: return "BIGINT UNSIGNED";
case QMetaType::QChar: return "NCHAR(1)";
@ -87,7 +89,19 @@ void SqliteGenerator::appendSkipTake(QString &sql, int skip, int take)
if (take != -1 && skip != -1)
sql.append(QString(" LIMIT %1 OFFSET %2")
.arg(take)
.arg(skip));
.arg(skip));
}
QString SqliteGenerator::primaryKeyConstraint(const TableModel *table) const
{
Q_UNUSED(table);
return QString();
// QString sql = QString("CONSTRAINT pk_%1 PRIMARY KEY (%2)")
// .arg(table->name())
// .arg(table->primaryKey());
// if (table->field(table->primaryKey())->isAutoIncrement)
// sql += " AUTOINCREMENT";
// return sql;
}
NUT_END_NAMESPACE

View File

@ -34,6 +34,8 @@ public:
QString fieldType(FieldModel *field);
void appendSkipTake(QString &sql, int skip, int take);
QString primaryKeyConstraint(const TableModel *table) const;
};
NUT_END_NAMESPACE