aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/iso19111/factory.cpp10
-rw-r--r--test/unit/test_factory.cpp10
2 files changed, 15 insertions, 5 deletions
diff --git a/src/iso19111/factory.cpp b/src/iso19111/factory.cpp
index 2a4ad3e8..7e680d31 100644
--- a/src/iso19111/factory.cpp
+++ b/src/iso19111/factory.cpp
@@ -5214,9 +5214,9 @@ AuthorityFactory::createObjectsFromName(
}
std::string sql(
- "SELECT table_name, auth_name, code, name, deprecated FROM ("
- "SELECT table_name, auth_name, code, name, deprecated FROM object_view "
- "WHERE ");
+ "SELECT table_name, auth_name, code, name, deprecated, is_alias FROM ("
+ "SELECT table_name, auth_name, code, name, deprecated, 0 as is_alias "
+ "FROM object_view WHERE ");
if (deprecated) {
sql += "deprecated = 1 AND ";
}
@@ -5348,7 +5348,7 @@ AuthorityFactory::createObjectsFromName(
sql += " UNION SELECT ov.table_name AS table_name, "
"ov.auth_name AS auth_name, "
"ov.code AS code, a.alt_name AS name, "
- "ov.deprecated AS deprecated FROM object_view ov "
+ "ov.deprecated AS deprecated, 1 as is_alias FROM object_view ov "
"JOIN alias_name a ON ov.table_name = a.table_name AND "
"ov.auth_name = a.auth_name AND ov.code = a.code WHERE ";
if (deprecated) {
@@ -5364,7 +5364,7 @@ AuthorityFactory::createObjectsFromName(
}
sql += getTableNameConstraint("ov.table_name");
- sql += ") ORDER BY deprecated, length(name), name";
+ sql += ") ORDER BY deprecated, is_alias, length(name), name";
if (limitResultCount > 0 &&
limitResultCount <
static_cast<size_t>(std::numeric_limits<int>::max()) &&
diff --git a/test/unit/test_factory.cpp b/test/unit/test_factory.cpp
index 33b72efd..d49db5bf 100644
--- a/test/unit/test_factory.cpp
+++ b/test/unit/test_factory.cpp
@@ -2869,6 +2869,16 @@ TEST(factory, createObjectsFromName) {
factory->createObjectsFromName("i_dont_exist", {type}, false, 1);
}
factory->createObjectsFromName("i_dont_exist", types, false, 1);
+
+ {
+ auto res = factoryEPSG->createObjectsFromName(
+ "ETRS89", {AuthorityFactory::ObjectType::GEOGRAPHIC_2D_CRS}, false,
+ 1);
+ EXPECT_EQ(res.size(), 1U);
+ if (!res.empty()) {
+ EXPECT_EQ(res.front()->getEPSGCode(), 4258);
+ }
+ }
}
// ---------------------------------------------------------------------------