diff options
Diffstat (limited to 'dbaccess/source/filter/hsqldb/createparser.cxx')
-rw-r--r-- | dbaccess/source/filter/hsqldb/createparser.cxx | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/dbaccess/source/filter/hsqldb/createparser.cxx b/dbaccess/source/filter/hsqldb/createparser.cxx index 66993ace227b..1323d74e5ce7 100644 --- a/dbaccess/source/filter/hsqldb/createparser.cxx +++ b/dbaccess/source/filter/hsqldb/createparser.cxx @@ -154,17 +154,36 @@ namespace dbahsql { CreateStmtParser::CreateStmtParser() {} +void CreateStmtParser::parsePrimaryKeys(const OUString& sPrimaryPart) +{ + sal_Int32 nParenPos = sPrimaryPart.indexOf("("); + if (nParenPos > 0) + { + OUString sParamStr + = sPrimaryPart.copy(nParenPos + 1, sPrimaryPart.lastIndexOf(")") - nParenPos - 1); + auto sParams = string::split(sParamStr, sal_Unicode(u',')); + for (auto& sParam : sParams) + { + m_PrimaryKeys.push_back(sParam); + } + } +} + void CreateStmtParser::parseColumnPart(const OUString& sColumnPart) { auto sColumns = lcl_splitColumnPart(sColumnPart); for (OUString& sColumn : sColumns) { + if (sColumn.startsWithIgnoreAsciiCase("PRIMARY KEY")) + { + parsePrimaryKeys(sColumn); + continue; + } + std::vector<OUString> words = string::split(sColumn, sal_Unicode(u' ')); if (words[0] == "CONSTRAINT") { - // TODO parse foreign key part instead of just saving the string - // part m_aForeignParts.push_back(sColumn); continue; } @@ -192,8 +211,14 @@ void CreateStmtParser::parseColumnPart(const OUString& sColumnPart) } bool bCaseInsensitive = sTypeName.indexOf("IGNORECASE") >= 0; - ColumnDefinition aColDef(words[0], lcl_getDataTypeFromHsql(sTypeName), aParams, - lcl_isPrimaryKey(sColumn), lcl_getAutoIncrementDefault(sColumn), + const OUString& rTableName = words[0]; + bool isPrimaryKey = lcl_isPrimaryKey(sColumn); + + if (isPrimaryKey) + m_PrimaryKeys.push_back(rTableName); + + ColumnDefinition aColDef(rTableName, lcl_getDataTypeFromHsql(sTypeName), aParams, + isPrimaryKey, lcl_getAutoIncrementDefault(sColumn), lcl_isNullable(sColumn), bCaseInsensitive); m_aColumns.push_back(aColDef); |