77 lines
3.6 KiB
Diff
77 lines
3.6 KiB
Diff
Description: QPSQL: Add support for PostgreSQL 12
|
|
Origin: upstream, https://code.qt.io/cgit/qt/qtbase.git/commit/?id=14b61d48e8bad622
|
|
Last-Update: 2019-10-20
|
|
|
|
--- a/src/plugins/sqldrivers/psql/qsql_psql.cpp
|
|
+++ b/src/plugins/sqldrivers/psql/qsql_psql.cpp
|
|
@@ -1062,8 +1062,10 @@ static QPSQLDriver::Protocol qMakePSQLVe
|
|
return QPSQLDriver::Version10;
|
|
case 11:
|
|
return QPSQLDriver::Version11;
|
|
+ case 12:
|
|
+ return QPSQLDriver::Version12;
|
|
default:
|
|
- if (vMaj > 11)
|
|
+ if (vMaj > 12)
|
|
return QPSQLDriver::UnknownLaterVersion;
|
|
break;
|
|
}
|
|
@@ -1438,26 +1440,29 @@ QSqlRecord QPSQLDriver::record(const QSt
|
|
else
|
|
schema = std::move(schema).toLower();
|
|
|
|
- QString stmt = QLatin1String("select pg_attribute.attname, pg_attribute.atttypid::int, "
|
|
- "pg_attribute.attnotnull, pg_attribute.attlen, pg_attribute.atttypmod, "
|
|
- "pg_attrdef.adsrc "
|
|
- "from pg_class, pg_attribute "
|
|
- "left join pg_attrdef on (pg_attrdef.adrelid = "
|
|
- "pg_attribute.attrelid and pg_attrdef.adnum = pg_attribute.attnum) "
|
|
- "where %1 "
|
|
- "and pg_class.relname = '%2' "
|
|
- "and pg_attribute.attnum > 0 "
|
|
- "and pg_attribute.attrelid = pg_class.oid "
|
|
- "and pg_attribute.attisdropped = false "
|
|
- "order by pg_attribute.attnum");
|
|
- if (schema.isEmpty())
|
|
- stmt = stmt.arg(QLatin1String("pg_table_is_visible(pg_class.oid)"));
|
|
- else
|
|
- stmt = stmt.arg(QString::fromLatin1("pg_class.relnamespace = (select oid from "
|
|
- "pg_namespace where pg_namespace.nspname = '%1')").arg(schema));
|
|
+ const QString adsrc = protocol() < Version8
|
|
+ ? QStringLiteral("pg_attrdef.adsrc")
|
|
+ : QStringLiteral("pg_get_expr(pg_attrdef.adbin, pg_attrdef.adrelid)");
|
|
+ const QString nspname = schema.isEmpty()
|
|
+ ? QStringLiteral("pg_table_is_visible(pg_class.oid)")
|
|
+ : QStringLiteral("pg_class.relnamespace = (SELECT oid FROM "
|
|
+ "pg_namespace WHERE pg_namespace.nspname = '%1')").arg(schema);
|
|
+ const QString stmt =
|
|
+ QStringLiteral("SELECT pg_attribute.attname, pg_attribute.atttypid::int, "
|
|
+ "pg_attribute.attnotnull, pg_attribute.attlen, pg_attribute.atttypmod, "
|
|
+ "%1 "
|
|
+ "FROM pg_class, pg_attribute "
|
|
+ "LEFT JOIN pg_attrdef ON (pg_attrdef.adrelid = "
|
|
+ "pg_attribute.attrelid AND pg_attrdef.adnum = pg_attribute.attnum) "
|
|
+ "WHERE %2 "
|
|
+ "AND pg_class.relname = '%3' "
|
|
+ "AND pg_attribute.attnum > 0 "
|
|
+ "AND pg_attribute.attrelid = pg_class.oid "
|
|
+ "AND pg_attribute.attisdropped = false "
|
|
+ "ORDER BY pg_attribute.attnum").arg(adsrc, nspname, tbl);
|
|
|
|
QSqlQuery query(createResult());
|
|
- query.exec(stmt.arg(tbl));
|
|
+ query.exec(stmt);
|
|
while (query.next()) {
|
|
int len = query.value(3).toInt();
|
|
int precision = query.value(4).toInt();
|
|
--- a/src/plugins/sqldrivers/psql/qsql_psql_p.h
|
|
+++ b/src/plugins/sqldrivers/psql/qsql_psql_p.h
|
|
@@ -93,6 +93,7 @@ public:
|
|
Version9_6 = 22,
|
|
Version10 = 23,
|
|
Version11 = 24,
|
|
+ Version12 = 25,
|
|
UnknownLaterVersion = 100000
|
|
};
|
|
|