summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2022-04-14 12:19:57 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2022-04-14 16:00:47 +0200
commit590323f4235e5ec3de2dc6dee28a4f03288ac6d7 (patch)
treedae8680564ac9b5a5577d2d60c8f5fd33785c045
parentdbe92dcfa79e3336411661fc94106deeba9317d6 (diff)
use more string_view in dbaccess
Change-Id: I256ffe22fa060be6a6fc32e73d845879d71a187d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133007 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r--dbaccess/qa/extras/hsql_schema_import.cxx16
-rw-r--r--dbaccess/source/filter/hsqldb/createparser.cxx60
-rw-r--r--dbaccess/source/filter/hsqldb/createparser.hxx4
-rw-r--r--dbaccess/source/filter/hsqldb/utils.cxx12
-rw-r--r--dbaccess/source/filter/hsqldb/utils.hxx2
5 files changed, 48 insertions, 46 deletions
diff --git a/dbaccess/qa/extras/hsql_schema_import.cxx b/dbaccess/qa/extras/hsql_schema_import.cxx
index 6d714ae9a8ae..f5f34d38b69a 100644
--- a/dbaccess/qa/extras/hsql_schema_import.cxx
+++ b/dbaccess/qa/extras/hsql_schema_import.cxx
@@ -62,7 +62,7 @@ public:
void HsqlSchemaImportTest::testIntegerPrimaryKeyNotNull()
{
FbCreateStmtParser aCreateParser;
- aCreateParser.parse("CREATE CACHED TABLE \"myTable\"(\"id\" INTEGER NOT NULL PRIMARY KEY)");
+ aCreateParser.parse(u"CREATE CACHED TABLE \"myTable\"(\"id\" INTEGER NOT NULL PRIMARY KEY)");
CPPUNIT_ASSERT_EQUAL(OUString{ "\"myTable\"" }, aCreateParser.getTableName());
const auto& columns = aCreateParser.getColumnDef();
@@ -79,7 +79,7 @@ void HsqlSchemaImportTest::testVarcharWithParam()
{
FbCreateStmtParser aCreateParser;
aCreateParser.parse(
- "CREATE CACHED TABLE \"myTable\"(\"id\" INTEGER NOT NULL PRIMARY KEY, \"myText\" "
+ u"CREATE CACHED TABLE \"myTable\"(\"id\" INTEGER NOT NULL PRIMARY KEY, \"myText\" "
"VARCHAR(50))");
const auto& columns = aCreateParser.getColumnDef();
@@ -101,7 +101,7 @@ void HsqlSchemaImportTest::testVarcharWithoutParam()
{
FbCreateStmtParser aCreateParser;
aCreateParser.parse(
- "CREATE CACHED TABLE \"myTable\"(\"id\" INTEGER NOT NULL PRIMARY KEY, \"myText\" "
+ u"CREATE CACHED TABLE \"myTable\"(\"id\" INTEGER NOT NULL PRIMARY KEY, \"myText\" "
"VARCHAR)");
const auto& columns = aCreateParser.getColumnDef();
@@ -116,7 +116,7 @@ void HsqlSchemaImportTest::testNumericWithTwoParam()
{
FbCreateStmtParser aCreateParser;
aCreateParser.parse(
- "CREATE CACHED TABLE \"myTable\"(\"id\" INTEGER NOT NULL PRIMARY KEY, \"Betrag\" "
+ u"CREATE CACHED TABLE \"myTable\"(\"id\" INTEGER NOT NULL PRIMARY KEY, \"Betrag\" "
"NUMERIC(8,2))");
const auto& columns = aCreateParser.getColumnDef();
@@ -137,7 +137,7 @@ void HsqlSchemaImportTest::testIntegerAutoincremental()
{
FbCreateStmtParser aCreateParser;
aCreateParser.parse(
- "CREATE CACHED TABLE \"myTable\"(\"id\" INTEGER NOT NULL PRIMARY KEY GENERATED "
+ u"CREATE CACHED TABLE \"myTable\"(\"id\" INTEGER NOT NULL PRIMARY KEY GENERATED "
"BY DEFAULT AS IDENTITY(START WITH 0), \"myText\" VARCHAR(50))");
const auto& columns = aCreateParser.getColumnDef();
@@ -157,7 +157,7 @@ void HsqlSchemaImportTest::testTimestampWithParam()
{
FbCreateStmtParser aCreateParser;
aCreateParser.parse(
- "CREATE CACHED TABLE \"myTable\"(\"id\" INTEGER NOT NULL PRIMARY KEY, \"myText\" "
+ u"CREATE CACHED TABLE \"myTable\"(\"id\" INTEGER NOT NULL PRIMARY KEY, \"myText\" "
"TIMESTAMP(0))");
const auto& columns = aCreateParser.getColumnDef();
@@ -179,7 +179,7 @@ void HsqlSchemaImportTest::testDefaultValueNow()
{
FbCreateStmtParser aCreateParser;
aCreateParser.parse(
- "CREATE CACHED TABLE \"myTable\"(\"id\" INTEGER NOT NULL PRIMARY KEY, \"myDate\" "
+ u"CREATE CACHED TABLE \"myTable\"(\"id\" INTEGER NOT NULL PRIMARY KEY, \"myDate\" "
"TIMESTAMP DEFAULT NOW)");
const auto& columns = aCreateParser.getColumnDef();
@@ -194,7 +194,7 @@ void HsqlSchemaImportTest::testDefaultValueNow()
void HsqlSchemaImportTest::testEvilNullColumnName()
{
FbCreateStmtParser aCreateParser;
- aCreateParser.parse("CREATE CACHED TABLE \"myTable\"(\"id\" INTEGER NOT NULL PRIMARY KEY, "
+ aCreateParser.parse(u"CREATE CACHED TABLE \"myTable\"(\"id\" INTEGER NOT NULL PRIMARY KEY, "
"\"myEvilNOT NULLName\" "
"VARCHAR(20))");
diff --git a/dbaccess/source/filter/hsqldb/createparser.cxx b/dbaccess/source/filter/hsqldb/createparser.cxx
index c62640e8bc3f..03952655dfd8 100644
--- a/dbaccess/source/filter/hsqldb/createparser.cxx
+++ b/dbaccess/source/filter/hsqldb/createparser.cxx
@@ -23,6 +23,7 @@
#include "createparser.hxx"
#include "utils.hxx"
#include <com/sun/star/sdbc/DataType.hpp>
+#include <o3tl/string_view.hxx>
using namespace ::comphelper;
using namespace css::sdbc;
@@ -31,16 +32,17 @@ namespace
{
/// Returns substring of sSql from the first occurrence of '(' until the
/// last occurrence of ')' (excluding the parenthesis)
-OUString lcl_getColumnPart(const OUString& sSql)
+std::u16string_view lcl_getColumnPart(std::u16string_view sSql)
{
- sal_Int32 nBeginIndex = sSql.indexOf("(") + 1;
- if (nBeginIndex < 0)
+ size_t nBeginIndex = sSql.find('(');
+ if (nBeginIndex == std::u16string_view::npos)
{
SAL_WARN("dbaccess", "No column definitions found");
- return OUString();
+ return std::u16string_view();
}
- sal_Int32 nCount = sSql.lastIndexOf(")") - nBeginIndex;
- return sSql.copy(nBeginIndex, nCount);
+ sal_Int32 nCount = sSql.rfind(')') - nBeginIndex - 1;
+ auto sPart = sSql.substr(nBeginIndex + 1, nCount);
+ return sPart;
}
/// Constructs a vector of strings that represents the definitions of each
@@ -80,10 +82,10 @@ sal_Int32 lcl_getAutoIncrementDefault(std::u16string_view sColumnDef)
return -1;
}
-OUString lcl_getDefaultValue(std::u16string_view sColumnDef)
+std::u16string_view lcl_getDefaultValue(std::u16string_view sColumnDef)
{
constexpr std::u16string_view DEFAULT_KW = u"DEFAULT";
- auto nDefPos = sColumnDef.find(DEFAULT_KW);
+ size_t nDefPos = sColumnDef.find(DEFAULT_KW);
if (nDefPos > 0 && nDefPos != std::u16string_view::npos
&& lcl_getAutoIncrementDefault(sColumnDef) < 0)
{
@@ -91,12 +93,12 @@ OUString lcl_getDefaultValue(std::u16string_view sColumnDef)
= o3tl::trim(sColumnDef.substr(nDefPos + DEFAULT_KW.size()));
// next word is the value
- auto nNextSpace = fromDefault.find(' ');
- return OUString((nNextSpace > 0 && nNextSpace != std::u16string_view::npos)
- ? fromDefault.substr(0, nNextSpace)
- : fromDefault);
+ size_t nNextSpace = fromDefault.find(' ');
+ return (nNextSpace > 0 && nNextSpace != std::u16string_view::npos)
+ ? fromDefault.substr(0, nNextSpace)
+ : fromDefault;
}
- return OUString{};
+ return std::u16string_view();
}
bool lcl_isNullable(std::u16string_view sColumnDef)
@@ -175,15 +177,15 @@ struct ColumnTypeParts
* Separates full type descriptions (e.g. NUMERIC(5,4)) to type name (NUMERIC) and
* parameters (5,4)
*/
-ColumnTypeParts lcl_getColumnTypeParts(const OUString& sFullTypeName)
+ColumnTypeParts lcl_getColumnTypeParts(std::u16string_view sFullTypeName)
{
ColumnTypeParts parts;
- auto nParenPos = sFullTypeName.indexOf("(");
- if (nParenPos > 0)
+ auto nParenPos = sFullTypeName.find('(');
+ if (nParenPos > 0 && nParenPos != std::u16string_view::npos)
{
- parts.typeName = o3tl::trim(sFullTypeName.subView(0, nParenPos));
- OUString sParamStr
- = sFullTypeName.copy(nParenPos + 1, sFullTypeName.indexOf(")") - nParenPos - 1);
+ parts.typeName = o3tl::trim(sFullTypeName.substr(0, nParenPos));
+ std::u16string_view sParamStr
+ = sFullTypeName.substr(nParenPos + 1, sFullTypeName.find(')') - nParenPos - 1);
auto sParams = string::split(sParamStr, sal_Unicode(u','));
for (const auto& sParam : sParams)
{
@@ -192,7 +194,7 @@ ColumnTypeParts lcl_getColumnTypeParts(const OUString& sFullTypeName)
}
else
{
- parts.typeName = sFullTypeName.trim();
+ parts.typeName = o3tl::trim(sFullTypeName);
lcl_addDefaultParameters(parts.params, lcl_getDataTypeFromHsql(parts.typeName));
}
return parts;
@@ -204,13 +206,13 @@ namespace dbahsql
{
CreateStmtParser::CreateStmtParser() {}
-void CreateStmtParser::parsePrimaryKeys(const OUString& sPrimaryPart)
+void CreateStmtParser::parsePrimaryKeys(std::u16string_view sPrimaryPart)
{
- sal_Int32 nParenPos = sPrimaryPart.indexOf("(");
- if (nParenPos > 0)
+ size_t nParenPos = sPrimaryPart.find('(');
+ if (nParenPos > 0 && nParenPos != std::u16string_view::npos)
{
- OUString sParamStr
- = sPrimaryPart.copy(nParenPos + 1, sPrimaryPart.lastIndexOf(")") - nParenPos - 1);
+ std::u16string_view sParamStr
+ = sPrimaryPart.substr(nParenPos + 1, sPrimaryPart.rfind(')') - nParenPos - 1);
auto sParams = string::split(sParamStr, sal_Unicode(u','));
for (const auto& sParam : sParams)
{
@@ -271,23 +273,23 @@ void CreateStmtParser::parseColumnPart(std::u16string_view sColumnPart)
std::move(typeParts.params), isPrimaryKey,
lcl_getAutoIncrementDefault(sColumnWithoutName),
lcl_isNullable(sColumnWithoutName), bCaseInsensitive,
- lcl_getDefaultValue(sColumnWithoutName));
+ OUString(lcl_getDefaultValue(sColumnWithoutName)));
m_aColumns.push_back(aColDef);
}
}
-void CreateStmtParser::parse(const OUString& sSql)
+void CreateStmtParser::parse(std::u16string_view sSql)
{
// TODO Foreign keys
- if (!sSql.startsWith("CREATE"))
+ if (!o3tl::starts_with(sSql, u"CREATE"))
{
SAL_WARN("dbaccess", "Not a create statement");
return;
}
m_sTableName = utils::getTableNameFromStmt(sSql);
- OUString sColumnPart = lcl_getColumnPart(sSql);
+ std::u16string_view sColumnPart = lcl_getColumnPart(sSql);
parseColumnPart(sColumnPart);
}
diff --git a/dbaccess/source/filter/hsqldb/createparser.hxx b/dbaccess/source/filter/hsqldb/createparser.hxx
index 85610ebfd3f3..a92f745860d5 100644
--- a/dbaccess/source/filter/hsqldb/createparser.hxx
+++ b/dbaccess/source/filter/hsqldb/createparser.hxx
@@ -24,7 +24,7 @@ private:
protected:
void parseColumnPart(std::u16string_view sColumnPart);
- void parsePrimaryKeys(const OUString& sPrimaryPart);
+ void parsePrimaryKeys(std::u16string_view sPrimaryPart);
public:
CreateStmtParser();
@@ -56,7 +56,7 @@ public:
*
* @param SQL "CREATE" statement
*/
- void parse(const OUString& sSql);
+ void parse(std::u16string_view sSql);
/**
* Recreate the sql statement.
diff --git a/dbaccess/source/filter/hsqldb/utils.cxx b/dbaccess/source/filter/hsqldb/utils.cxx
index 10e07cf3ba30..724ffccfb37f 100644
--- a/dbaccess/source/filter/hsqldb/utils.cxx
+++ b/dbaccess/source/filter/hsqldb/utils.cxx
@@ -87,7 +87,7 @@ OUString utils::convertToUTF8(std::string_view original)
return res;
}
-OUString utils::getTableNameFromStmt(const OUString& sSql)
+OUString utils::getTableNameFromStmt(std::u16string_view sSql)
{
auto stmtComponents = comphelper::string::split(sSql, sal_Unicode(u' '));
assert(stmtComponents.size() > 2);
@@ -103,17 +103,17 @@ OUString utils::getTableNameFromStmt(const OUString& sSql)
// it may contain spaces if it's put into apostrophes.
if (wordIter->indexOf("\"") >= 0)
{
- sal_Int32 nAposBegin = sSql.indexOf("\"");
- sal_Int32 nAposEnd = nAposBegin;
+ size_t nAposBegin = sSql.find('"');
+ size_t nAposEnd = nAposBegin;
bool bProperEndAposFound = false;
while (!bProperEndAposFound)
{
- nAposEnd = sSql.indexOf("\"", nAposEnd + 1);
+ nAposEnd = sSql.find('"', nAposEnd + 1);
if (sSql[nAposEnd - 1] != u'\\')
bProperEndAposFound = true;
}
- OUString result = sSql.copy(nAposBegin, nAposEnd - nAposBegin + 1);
- return result;
+ std::u16string_view result = sSql.substr(nAposBegin, nAposEnd - nAposBegin + 1);
+ return OUString(result);
}
// next word is the table's name
diff --git a/dbaccess/source/filter/hsqldb/utils.hxx b/dbaccess/source/filter/hsqldb/utils.hxx
index b8ed1a222c4c..cc3e2f0df16f 100644
--- a/dbaccess/source/filter/hsqldb/utils.hxx
+++ b/dbaccess/source/filter/hsqldb/utils.hxx
@@ -19,7 +19,7 @@ namespace dbahsql::utils
{
OUString convertToUTF8(std::string_view original);
-OUString getTableNameFromStmt(const OUString& sSql);
+OUString getTableNameFromStmt(std::u16string_view sSql);
void ensureFirebirdTableLength(const OUString& sName);
}