From: Jean-Baptiste Vilain Date: Fri, 9 Aug 2013 11:58:26 +0000 (+0200) Subject: SONAR-4560 Only add twoletters long index entries for two letters long resources X-Git-Tag: 3.7.1-RC1-~145 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=694c48a99d735e8f815f1b1046635d19b9d5761d;p=sonarqube.git SONAR-4560 Only add twoletters long index entries for two letters long resources --- diff --git a/sonar-core/src/main/java/org/sonar/core/resource/ResourceIndexerDao.java b/sonar-core/src/main/java/org/sonar/core/resource/ResourceIndexerDao.java index d516c1948f8..0256c625bc0 100644 --- a/sonar-core/src/main/java/org/sonar/core/resource/ResourceIndexerDao.java +++ b/sonar-core/src/main/java/org/sonar/core/resource/ResourceIndexerDao.java @@ -29,7 +29,8 @@ import org.sonar.core.persistence.MyBatis; public class ResourceIndexerDao { - public static final int MINIMUM_KEY_SIZE = 1; + public static final int MINIMUM_KEY_SIZE = 3; + public static final int SINGLE_INDEX_SIZE = 2; // The scopes and qualifiers that are not in the following constants are not indexed at all. // Directories and packages are explicitly excluded. @@ -117,18 +118,8 @@ public class ResourceIndexerDao { void doIndex(ResourceDto resource, ResourceIndexerMapper mapper) { String key = nameToKey(resource.getName()); - if (key.length() >= MINIMUM_KEY_SIZE) { - ResourceIndexDto dto = new ResourceIndexDto() - .setResourceId(resource.getId()) - .setQualifier(resource.getQualifier()) - .setRootProjectId(resource.getRootId()) - .setNameSize(resource.getName().length()); - - for (int position = 0; position <= key.length() - MINIMUM_KEY_SIZE; position++) { - dto.setPosition(position); - dto.setKey(StringUtils.substring(key, position)); - mapper.insert(dto); - } + if (key.length() >= MINIMUM_KEY_SIZE || key.length() == SINGLE_INDEX_SIZE) { + insertIndexEntries(key, resource.getId(), resource.getQualifier(), resource.getRootId(), resource.getName().length(), mapper); } } @@ -166,27 +157,31 @@ public class ResourceIndexerDao { private boolean indexResource(long id, String name, String qualifier, long rootId, SqlSession session, ResourceIndexerMapper mapper) { boolean indexed = false; String key = nameToKey(name); - if (key.length() >= MINIMUM_KEY_SIZE) { + if (key.length() >= MINIMUM_KEY_SIZE || key.length() == SINGLE_INDEX_SIZE) { indexed = true; boolean toBeIndexed = sanitizeIndex(id, key, mapper); if (toBeIndexed) { - ResourceIndexDto dto = new ResourceIndexDto() - .setResourceId(id) - .setQualifier(qualifier) - .setRootProjectId(rootId) - .setNameSize(name.length()); - - for (int position = 0; position <= key.length() - MINIMUM_KEY_SIZE; position++) { - dto.setPosition(position); - dto.setKey(StringUtils.substring(key, position)); - mapper.insert(dto); - } + insertIndexEntries(key, id, qualifier, rootId, name.length(), mapper); session.commit(); } } return indexed; } + private void insertIndexEntries(String key, long resourceId, String qualifier, long rootId, int nameLength, ResourceIndexerMapper mapper) { + ResourceIndexDto dto = new ResourceIndexDto() + .setResourceId(resourceId) + .setQualifier(qualifier) + .setRootProjectId(rootId) + .setNameSize(nameLength); + + int maxPosition = key.length() == SINGLE_INDEX_SIZE ? 0 : key.length() - MINIMUM_KEY_SIZE; + for (int position = 0; position <= maxPosition; position++) { + dto.setPosition(position); + dto.setKey(StringUtils.substring(key, position)); + mapper.insert(dto); + } + } /** * Return true if the resource must be indexed, false if the resource is already indexed. diff --git a/sonar-core/src/test/java/org/sonar/core/resource/ResourceIndexerDaoTest.java b/sonar-core/src/test/java/org/sonar/core/resource/ResourceIndexerDaoTest.java index 4784e2a26bc..e57b1433a48 100644 --- a/sonar-core/src/test/java/org/sonar/core/resource/ResourceIndexerDaoTest.java +++ b/sonar-core/src/test/java/org/sonar/core/resource/ResourceIndexerDaoTest.java @@ -112,11 +112,29 @@ public class ResourceIndexerDaoTest extends AbstractDaoTestCase { public void shouldIndexTwoLettersLongResources() { setupData("shouldIndexTwoLettersLongResource"); - dao.indexResource(10, "AB", Qualifiers.FILE, 3); + dao.indexResource(10, "AB", Qualifiers.PROJECT, 3); checkTables("shouldIndexTwoLettersLongResource", new String[] {"id"}, "resource_index"); } + @Test + public void shouldReIndexTwoLettersLongResources() { + setupData("shouldReIndexTwoLettersLongResource"); + + dao.indexResource(1, "AS", Qualifiers.PROJECT, 1); + + checkTables("shouldReIndexTwoLettersLongResource", new String[] {"id"}, "resource_index"); + } + + @Test + public void shouldReIndexNewTwoLettersLongResource() { + setupData("shouldReIndexNewTwoLettersLongResource"); + + dao.indexResource(1, "AS", Qualifiers.PROJECT, 1); + + checkTables("shouldReIndexNewTwoLettersLongResource", new String[] {"id"}, "resource_index"); + } + @Test public void shouldReindexResource() { setupData("shouldReindexResource"); diff --git a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldIndexMultiModulesProject-result.xml b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldIndexMultiModulesProject-result.xml index 657d233a00a..7210c845707 100644 --- a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldIndexMultiModulesProject-result.xml +++ b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldIndexMultiModulesProject-result.xml @@ -43,16 +43,12 @@ - - - - @@ -64,8 +60,6 @@ - - diff --git a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldIndexProjects-result.xml b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldIndexProjects-result.xml index e25372f5746..c7484ec4a2a 100644 --- a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldIndexProjects-result.xml +++ b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldIndexProjects-result.xml @@ -36,15 +36,11 @@ - - - - diff --git a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldIndexResource-result.xml b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldIndexResource-result.xml index 22bca4ad0f4..f4cf0805ede 100644 --- a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldIndexResource-result.xml +++ b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldIndexResource-result.xml @@ -5,6 +5,4 @@ - - \ No newline at end of file diff --git a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldIndexTwoLettersLongResource-result.xml b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldIndexTwoLettersLongResource-result.xml index 75e71f72ef4..c9941e492bd 100644 --- a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldIndexTwoLettersLongResource-result.xml +++ b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldIndexTwoLettersLongResource-result.xml @@ -1,4 +1,3 @@ - - + \ No newline at end of file diff --git a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldNotReindexUnchangedResource-result.xml b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldNotReindexUnchangedResource-result.xml index 65f006f11ae..4292af5708d 100644 --- a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldNotReindexUnchangedResource-result.xml +++ b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldNotReindexUnchangedResource-result.xml @@ -3,6 +3,4 @@ - - \ No newline at end of file diff --git a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldNotReindexUnchangedResource.xml b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldNotReindexUnchangedResource.xml index 515ffcc9c08..89a3a8c465d 100644 --- a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldNotReindexUnchangedResource.xml +++ b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldNotReindexUnchangedResource.xml @@ -3,6 +3,4 @@ - - \ No newline at end of file diff --git a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldReIndexNewTwoLettersLongResource-result.xml b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldReIndexNewTwoLettersLongResource-result.xml new file mode 100644 index 00000000000..52db35f3ad4 --- /dev/null +++ b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldReIndexNewTwoLettersLongResource-result.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldReIndexNewTwoLettersLongResource.xml b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldReIndexNewTwoLettersLongResource.xml new file mode 100644 index 00000000000..e89ad401941 --- /dev/null +++ b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldReIndexNewTwoLettersLongResource.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + diff --git a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldReIndexTwoLettersLongResource-result.xml b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldReIndexTwoLettersLongResource-result.xml new file mode 100644 index 00000000000..52db35f3ad4 --- /dev/null +++ b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldReIndexTwoLettersLongResource-result.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldReIndexTwoLettersLongResource.xml b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldReIndexTwoLettersLongResource.xml new file mode 100644 index 00000000000..7ac2a5e82d5 --- /dev/null +++ b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldReIndexTwoLettersLongResource.xml @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldReindexProjectAfterRenaming-result.xml b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldReindexProjectAfterRenaming-result.xml index 40b02449634..4909ab38144 100644 --- a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldReindexProjectAfterRenaming-result.xml +++ b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldReindexProjectAfterRenaming-result.xml @@ -18,7 +18,5 @@ - - diff --git a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldReindexResource-result.xml b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldReindexResource-result.xml index 53b68f1782a..b9f39157aea 100644 --- a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldReindexResource-result.xml +++ b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceIndexerDaoTest/shouldReindexResource-result.xml @@ -7,6 +7,4 @@ - - \ No newline at end of file