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.
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);
}
}
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.
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");
<resource_index kee="ntext" position="9" name_size="14" resource_id="4" root_project_id="1" qualifier="CLA"/>
<resource_index kee="text" position="10" name_size="14" resource_id="4" root_project_id="1" qualifier="CLA"/>
<resource_index kee="ext" position="11" name_size="14" resource_id="4" root_project_id="1" qualifier="CLA"/>
- <resource_index kee="xt" position="12" name_size="14" resource_id="4" root_project_id="1" qualifier="CLA"/>
- <resource_index kee="t" position="13" name_size="14" resource_id="4" root_project_id="1" qualifier="CLA"/>
<!-- Struts -->
<resource_index kee="struts" position="0" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
<resource_index kee="truts" position="1" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
<resource_index kee="ruts" position="2" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
<resource_index kee="uts" position="3" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
- <resource_index kee="ts" position="4" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
- <resource_index kee="s" position="5" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
<!-- Struts Core -->
<resource_index kee="struts core" position="0" name_size="11" resource_id="2" root_project_id="1" qualifier="BRC"/>
<resource_index kee=" core" position="6" name_size="11" resource_id="2" root_project_id="1" qualifier="BRC"/>
<resource_index kee="core" position="7" name_size="11" resource_id="2" root_project_id="1" qualifier="BRC"/>
<resource_index kee="ore" position="8" name_size="11" resource_id="2" root_project_id="1" qualifier="BRC"/>
- <resource_index kee="re" position="9" name_size="11" resource_id="2" root_project_id="1" qualifier="BRC"/>
- <resource_index kee="e" position="10" name_size="11" resource_id="2" root_project_id="1" qualifier="BRC"/>
</dataset>
<resource_index kee="ntext" position="9" name_size="14" resource_id="3" root_project_id="1" qualifier="CLA"/>
<resource_index kee="text" position="10" name_size="14" resource_id="3" root_project_id="1" qualifier="CLA"/>
<resource_index kee="ext" position="11" name_size="14" resource_id="3" root_project_id="1" qualifier="CLA"/>
- <resource_index kee="xt" position="12" name_size="14" resource_id="3" root_project_id="1" qualifier="CLA"/>
- <resource_index kee="t" position="13" name_size="14" resource_id="3" root_project_id="1" qualifier="CLA"/>
<!-- Struts -->
<resource_index kee="struts" position="0" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
<resource_index kee="truts" position="1" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
<resource_index kee="ruts" position="2" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
<resource_index kee="uts" position="3" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
- <resource_index kee="ts" position="4" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
- <resource_index kee="s" position="5" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
</dataset>
<resource_index kee="utils" position="3" name_size="8" resource_id="10" root_project_id="8" qualifier="FIL"/>
<resource_index kee="tils" position="4" name_size="8" resource_id="10" root_project_id="8" qualifier="FIL"/>
<resource_index kee="ils" position="5" name_size="8" resource_id="10" root_project_id="8" qualifier="FIL"/>
- <resource_index kee="ls" position="6" name_size="8" resource_id="10" root_project_id="8" qualifier="FIL"/>
- <resource_index kee="s" position="7" name_size="8" resource_id="10" root_project_id="8" qualifier="FIL"/>
</dataset>
\ No newline at end of file
<dataset>
- <resource_index kee="ab" position="0" name_size="2" resource_id="10" root_project_id="3" qualifier="FIL"/>
- <resource_index kee="b" position="1" name_size="2" resource_id="10" root_project_id="3" qualifier="FIL"/>
+ <resource_index kee="ab" position="0" name_size="2" resource_id="10" root_project_id="3" qualifier="TRK"/>
</dataset>
\ No newline at end of file
<resource_index kee="truts" position="1" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
<resource_index kee="ruts" position="2" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
<resource_index kee="uts" position="3" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
- <resource_index kee="ts" position="4" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
- <resource_index kee="s" position="5" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
</dataset>
\ No newline at end of file
<resource_index id="2" kee="truts" position="1" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
<resource_index id="3" kee="ruts" position="2" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
<resource_index id="4" kee="uts" position="3" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
- <resource_index id="5" kee="ts" position="4" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
- <resource_index id="6" kee="s" position="5" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
</dataset>
\ No newline at end of file
--- /dev/null
+<dataset>
+ <resource_index kee="as" position="0" name_size="2" resource_id="1" root_project_id="1" qualifier="TRK"/>
+</dataset>
\ No newline at end of file
--- /dev/null
+<dataset>
+
+ <projects long_name="[null]" id="1" scope="PRJ" qualifier="TRK" kee="org.struts:struts" name="AS"
+ root_id="[null]"
+ description="[null]"
+ enabled="[true]" language="java" copy_resource_id="[null]" person_id="[null]"/>
+
+ <snapshots purge_status="[null]" id="1" islast="[true]" root_project_id="1" project_id="1" scope="PRJ" qualifier="TRK"/>
+
+ <!-- the index is on the old name "ST" but not on "AS" -->
+ <resource_index id="1" kee="struts" position="0" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
+ <resource_index id="2" kee="truts" position="1" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
+ <resource_index id="3" kee="ruts" position="2" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
+ <resource_index id="4" kee="uts" position="3" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
+
+</dataset>
--- /dev/null
+<dataset>
+ <resource_index kee="as" position="0" name_size="2" resource_id="1" root_project_id="1" qualifier="TRK"/>
+</dataset>
\ No newline at end of file
--- /dev/null
+<dataset>
+
+ <projects long_name="[null]" id="1" scope="PRJ" qualifier="TRK" kee="org.struts:struts" name="AS"
+ root_id="[null]"
+ description="[null]"
+ enabled="[true]" language="java" copy_resource_id="[null]" person_id="[null]"/>
+
+ <snapshots purge_status="[null]" id="1" islast="[true]" root_project_id="1" project_id="1" scope="PRJ" qualifier="TRK"/>
+
+ <!-- the index is on the old name "ST" but not on "AS" -->
+ <resource_index id="1" kee="st" position="0" name_size="2" resource_id="1" root_project_id="1" qualifier="TRK"/>
+
+</dataset>
<resource_index kee="truts" position="8" name_size="13" resource_id="1" root_project_id="1" qualifier="TRK"/>
<resource_index kee="ruts" position="9" name_size="13" resource_id="1" root_project_id="1" qualifier="TRK"/>
<resource_index kee="uts" position="10" name_size="13" resource_id="1" root_project_id="1" qualifier="TRK"/>
- <resource_index kee="ts" position="11" name_size="13" resource_id="1" root_project_id="1" qualifier="TRK"/>
- <resource_index kee="s" position="12" name_size="13" resource_id="1" root_project_id="1" qualifier="TRK"/>
</dataset>
<resource_index kee="truts" position="5" name_size="10" resource_id="1" root_project_id="1" qualifier="TRK"/>
<resource_index kee="ruts" position="6" name_size="10" resource_id="1" root_project_id="1" qualifier="TRK"/>
<resource_index kee="uts" position="7" name_size="10" resource_id="1" root_project_id="1" qualifier="TRK"/>
- <resource_index kee="ts" position="8" name_size="10" resource_id="1" root_project_id="1" qualifier="TRK"/>
- <resource_index kee="s" position="9" name_size="10" resource_id="1" root_project_id="1" qualifier="TRK"/>
</dataset>
\ No newline at end of file