summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/sqldrivers/ibase/qsql_ibase.cpp6
-rw-r--r--src/plugins/sqldrivers/ibase/qsql_ibase_p.h2
-rw-r--r--src/sql/kernel/qsqldriver.cpp15
-rw-r--r--src/sql/kernel/qsqldriver.h2
-rw-r--r--src/sql/models/qsqlrelationaltablemodel.cpp3
5 files changed, 25 insertions, 3 deletions
diff --git a/src/plugins/sqldrivers/ibase/qsql_ibase.cpp b/src/plugins/sqldrivers/ibase/qsql_ibase.cpp
index dc4eb036d8..75fc68ca9b 100644
--- a/src/plugins/sqldrivers/ibase/qsql_ibase.cpp
+++ b/src/plugins/sqldrivers/ibase/qsql_ibase.cpp
@@ -1884,4 +1884,10 @@ QString QIBaseDriver::escapeIdentifier(const QString &identifier, IdentifierType
return res;
}
+int QIBaseDriver::maximumIdentifierLength(IdentifierType type) const
+{
+ Q_UNUSED(type);
+ return 31;
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/sqldrivers/ibase/qsql_ibase_p.h b/src/plugins/sqldrivers/ibase/qsql_ibase_p.h
index 82a0ab8e4d..e7c908cf2b 100644
--- a/src/plugins/sqldrivers/ibase/qsql_ibase_p.h
+++ b/src/plugins/sqldrivers/ibase/qsql_ibase_p.h
@@ -106,7 +106,7 @@ public:
bool subscribeToNotification(const QString &name) override;
bool unsubscribeFromNotification(const QString &name) override;
QStringList subscribedToNotifications() const override;
-
+ int maximumIdentifierLength(IdentifierType type) const override;
private Q_SLOTS:
void qHandleEventNotification(void* updatedResultBuffer);
};
diff --git a/src/sql/kernel/qsqldriver.cpp b/src/sql/kernel/qsqldriver.cpp
index 8753352617..02371a209b 100644
--- a/src/sql/kernel/qsqldriver.cpp
+++ b/src/sql/kernel/qsqldriver.cpp
@@ -46,6 +46,8 @@
#include "private/qobject_p.h"
#include "private/qsqldriver_p.h"
+#include <limits.h>
+
QT_BEGIN_NAMESPACE
static QString prepareIdentifier(const QString &identifier,
@@ -829,4 +831,17 @@ bool QSqlDriver::cancelQuery()
return false;
}
+/*!
+ \since 6.0
+
+ Returns the maximum length for the identifier \a type according to the database settings. Returns
+ INT_MAX by default if the is no maximum for the database.
+*/
+
+int QSqlDriver::maximumIdentifierLength(QSqlDriver::IdentifierType type) const
+{
+ Q_UNUSED(type);
+ return INT_MAX;
+}
+
QT_END_NAMESPACE
diff --git a/src/sql/kernel/qsqldriver.h b/src/sql/kernel/qsqldriver.h
index 31de63be15..361a11bec3 100644
--- a/src/sql/kernel/qsqldriver.h
+++ b/src/sql/kernel/qsqldriver.h
@@ -130,7 +130,7 @@ public:
QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const;
DbmsType dbmsType() const;
-
+ virtual int maximumIdentifierLength(IdentifierType type) const;
public Q_SLOTS:
virtual bool cancelQuery();
diff --git a/src/sql/models/qsqlrelationaltablemodel.cpp b/src/sql/models/qsqlrelationaltablemodel.cpp
index bdd82990d9..8c787eab0c 100644
--- a/src/sql/models/qsqlrelationaltablemodel.cpp
+++ b/src/sql/models/qsqlrelationaltablemodel.cpp
@@ -590,8 +590,9 @@ QString QSqlRelationalTableModel::selectStatement() const
QString displayColumn = relation.displayColumn();
if (d->db.driver()->isIdentifierEscaped(displayColumn, QSqlDriver::FieldName))
displayColumn = d->db.driver()->stripDelimiters(displayColumn, QSqlDriver::FieldName);
- const QString alias = QString::fromLatin1("%1_%2_%3")
+ QString alias = QString::fromLatin1("%1_%2_%3")
.arg(relTableName, displayColumn, QString::number(fieldNames.value(fieldList[i])));
+ alias.truncate(d->db.driver()->maximumIdentifierLength(QSqlDriver::FieldName));
displayTableField = Sql::as(displayTableField, alias);
--fieldNames[fieldList[i]];
}