From e53b85bd8679e0bec2a74a9328b264972de4e749 Mon Sep 17 00:00:00 2001 From: eelke Date: Sun, 1 Dec 2019 07:09:18 +0100 Subject: [PATCH] Improved formatting of generated table sql - Removed empty line before first column - The follow up lines of fkey's are indented - The closing parentheses is now on a new line --- pglablib/SqlFormattingUtils.cpp | 14 +++++++------- pglablib/SqlFormattingUtils.h | 4 ++-- pglablib/catalog/PgClass.cpp | 5 ++--- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/pglablib/SqlFormattingUtils.cpp b/pglablib/SqlFormattingUtils.cpp index 5df940c..0b1c0a5 100644 --- a/pglablib/SqlFormattingUtils.cpp +++ b/pglablib/SqlFormattingUtils.cpp @@ -298,7 +298,7 @@ QString getColumnNameList(const PgDatabaseCatalog &catalog, Oid relid, const Sma return result.str(); } -QString getForeignKeyConstraintDefinition(const PgDatabaseCatalog &catalog, const PgConstraint &constraint) +QString getForeignKeyConstraintDefinition(const PgDatabaseCatalog &catalog, const PgConstraint &constraint, const QString &indent) { //PgClass cls = catalog.classes()->getByKey(constraint.relid); const PgClass *fcls = catalog.classes()->getByKey(constraint.frelid); @@ -310,10 +310,10 @@ QString getForeignKeyConstraintDefinition(const PgDatabaseCatalog &catalog, cons deferrable = QLatin1String(" DEFERRABLE INITIALLY ") % (constraint.deferred ? "DEFERRED" : "IMMEDIATE"); } - return "\n FOREIGN KEY (" - % getColumnNameList(catalog, constraint.relid, constraint.key) % ")\n REFERENCES " + return "\n" + indent + "FOREIGN KEY (" + % getColumnNameList(catalog, constraint.relid, constraint.key) % ")\n" + indent + "REFERENCES " % fcls->fullyQualifiedQuotedObjectName() % " (" - % getColumnNameList(catalog, constraint.frelid, constraint.fkey) % ")\n MATCH " + % getColumnNameList(catalog, constraint.frelid, constraint.fkey) % ")\n" + indent + "MATCH " % ForeignKeyMatchToString(constraint.fmatchtype) % " ON UPDATE " % ForeignKeyActionToString(constraint.fupdtype) % " ON DELETE " % ForeignKeyActionToString(constraint.fdeltype) @@ -385,16 +385,16 @@ QString getAlterTableConstraintDefinition(const PgDatabaseCatalog &catalog, cons { const PgClass *cls = catalog.classes()->getByKey(constraint.relid); QString result = genAlterTable(catalog, *cls) % "\n ADD "; - result += getConstraintDefinition(catalog, constraint) % ";"; + result += getConstraintDefinition(catalog, constraint, " ") % ";"; return result; } -QString getConstraintDefinition(const PgDatabaseCatalog &catalog, const PgConstraint &constraint) +QString getConstraintDefinition(const PgDatabaseCatalog &catalog, const PgConstraint &constraint, const QString &indent) { QString result = "CONSTRAINT " % quoteIdent(constraint.objectName()); switch (constraint.type) { case ConstraintType::ForeignKey: - result += getForeignKeyConstraintDefinition(catalog, constraint); + result += getForeignKeyConstraintDefinition(catalog, constraint, indent); break; case ConstraintType::PrimaryKey: result += getPrimaryKeyConstraintDefinition(catalog, constraint); diff --git a/pglablib/SqlFormattingUtils.h b/pglablib/SqlFormattingUtils.h index 0b1624c..4fdca5d 100644 --- a/pglablib/SqlFormattingUtils.h +++ b/pglablib/SqlFormattingUtils.h @@ -21,9 +21,9 @@ QString dollarQuoteString(const QString &value); //QString genFQTableName(const PgDatabaseCatalog &catalog, const PgClass &cls); QString getDropConstraintDefinition(const PgDatabaseCatalog &catalog, const PgConstraint &constraint); QString getAlterTableConstraintDefinition(const PgDatabaseCatalog &catalog, const PgConstraint &constraint); -QString getConstraintDefinition(const PgDatabaseCatalog &catalog, const PgConstraint &constraint); +QString getConstraintDefinition(const PgDatabaseCatalog &catalog, const PgConstraint &constraint, const QString &indent); /// Returns the foreignKey specific part of the constraint definition -QString getForeignKeyConstraintDefinition(const PgDatabaseCatalog &catalog, const PgConstraint &constraint); +QString getForeignKeyConstraintDefinition(const PgDatabaseCatalog &catalog, const PgConstraint &constraint, const QString &indent); /// Returns the REFERENCES construct as used directly after a column in the create table statement QString getForeignKeyConstraintReferences(const PgDatabaseCatalog &catalog, const PgConstraint &constraint); /// Same as above but shortened as much as possible by leaving out defaults diff --git a/pglablib/catalog/PgClass.cpp b/pglablib/catalog/PgClass.cpp index aecb769..557453e 100644 --- a/pglablib/catalog/PgClass.cpp +++ b/pglablib/catalog/PgClass.cpp @@ -118,7 +118,6 @@ QString PgClass::createTableSql() const for (auto && col : cols) { if (col.num > 0 && !col.isdropped) { if (first) { - sql += "\n "; first = false; } else sql += ",\n "; @@ -136,10 +135,10 @@ QString PgClass::createTableSql() const first = false; } else sql += ",\n "; - sql += getConstraintDefinition(catalog(), constraint); + sql += getConstraintDefinition(catalog(), constraint, " "); } - sql += ")"; + sql += "\n)"; { // [ INHERITS ( parent_table [, ... ] ) ] auto parents = catalog().inherits()->getParentsOf(oid());