diff --git a/src/parser/KDbParser_p.h b/src/parser/KDbParser_p.h --- a/src/parser/KDbParser_p.h +++ b/src/parser/KDbParser_p.h @@ -88,6 +88,8 @@ ~KDbParseInfo(); //! @return positions of tables/aliases having the same name @a tableOrAliasName. + //! First tries to use information provided by appendPositionForTableOrAliasName(), + //! then information from the query schema. QList tablesAndAliasesForName(const QString &tableOrAliasName) const; //! @return query schema for this parsing diff --git a/src/parser/KDbParser_p.cpp b/src/parser/KDbParser_p.cpp --- a/src/parser/KDbParser_p.cpp +++ b/src/parser/KDbParser_p.cpp @@ -99,8 +99,23 @@ QList KDbParseInfo::tablesAndAliasesForName(const QString &tableOrAliasName) const { + QList result; const QList *list = d->repeatedTablesAndAliases.value(tableOrAliasName); - return list ? *list : QList(); + if (list) { + result = *list; + } + if (result.isEmpty()) { + int position = d->querySchema->tablePositionForAlias(tableOrAliasName); + if (position == -1) { + position = d->querySchema->tablePosition(tableOrAliasName); + if (position != -1) { + result.append(position); + } + } else { + result.append(position); + } + } + return result; } KDbQuerySchema* KDbParseInfo::querySchema() const