diff --git a/common/database/database_lib_settings.cpp b/common/database/database_lib_settings.cpp index 3e7c60285d..252757f66b 100644 --- a/common/database/database_lib_settings.cpp +++ b/common/database/database_lib_settings.cpp @@ -143,6 +143,8 @@ DATABASE_LIB_SETTINGS::DATABASE_LIB_SETTINGS( const std::string& aFilename ) : m_params.emplace_back( new PARAM( "cache.max_age", &m_Cache.max_age, 10 ) ); + m_params.emplace_back( new PARAM( "globally_unique_keys", &m_GloballyUniqueKeys, false ) ); + registerMigration( 0, 1, [&]() -> bool { diff --git a/eeschema/sch_io/database/sch_io_database.cpp b/eeschema/sch_io/database/sch_io_database.cpp index 443199993c..39f4198cd0 100644 --- a/eeschema/sch_io/database/sch_io_database.cpp +++ b/eeschema/sch_io/database/sch_io_database.cpp @@ -137,7 +137,8 @@ LIB_SYMBOL* SCH_IO_DATABASE::LoadSymbol( const wxString& aLibraryPath, for( const DATABASE_LIB_TABLE& tableIter : m_settings->m_Tables ) { - if( tableIter.name == tableName ) + // no table means globally unique keys, try all tables + if( tableName.empty() || tableIter.name == tableName ) tablesToTry.emplace_back( &tableIter ); } @@ -255,7 +256,8 @@ void SCH_IO_DATABASE::cacheLib() std::string rawName = std::any_cast( result[table.key_col] ); UTF8 sanitizedName = LIB_ID::FixIllegalChars( rawName, false ); std::string sanitizedKey = sanitizedName.c_str(); - std::string prefix = table.name.empty() ? "" : fmt::format( "{}/", table.name ); + std::string prefix = + ( m_settings->m_GloballyUniqueKeys || table.name.empty() ) ? "" : fmt::format( "{}/", table.name ); std::string sanitizedDisplayName = fmt::format( "{}{}", prefix, sanitizedKey ); wxString name( sanitizedDisplayName ); diff --git a/include/database/database_lib_settings.h b/include/database/database_lib_settings.h index 3633eae71d..3c8322f039 100644 --- a/include/database/database_lib_settings.h +++ b/include/database/database_lib_settings.h @@ -116,6 +116,8 @@ public: DATABASE_CACHE_SETTINGS m_Cache; + bool m_GloballyUniqueKeys; + protected: wxString getFileExt() const override; };