Skip to content

Commit

Permalink
Fixed issue #3475, created new test case for SQL+INDEX+COLLATE
Browse files Browse the repository at this point in the history
  • Loading branch information
lvca committed Jan 28, 2015
1 parent 6db63af commit 564faeb
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 14 deletions.
Expand Up @@ -1428,7 +1428,7 @@ public OIndex<?> createIndex(final String name, String type, final OProgressList
}

final OIndexDefinition indexDefinition = OIndexDefinitionFactory.createIndexDefinition(this, Arrays.asList(fields),
extractFieldTypes(fields), null);
extractFieldTypes(fields), null);

return getDatabase().getMetadata().getIndexManager()
.createIndex(name, type, indexDefinition, polymorphicClusterIds, progressListener, metadata, algorithm);
Expand Down Expand Up @@ -2160,7 +2160,7 @@ private void addPolymorphicClusterIds(final OClassImpl iBaseClass) {
}
}

private List<OType> extractFieldTypes(String[] fieldNames) {
public List<OType> extractFieldTypes(String[] fieldNames) {
final List<OType> types = new ArrayList<OType>(fieldNames.length);

for (String fieldName : fieldNames) {
Expand Down
Expand Up @@ -19,16 +19,26 @@
*/
package com.orientechnologies.orient.core.sql;

import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import com.orientechnologies.orient.core.collate.OCollate;
import com.orientechnologies.orient.core.command.OCommandDistributedReplicateRequest;
import com.orientechnologies.orient.core.command.OCommandRequest;
import com.orientechnologies.orient.core.command.OCommandRequestText;
import com.orientechnologies.orient.core.db.document.ODatabaseDocument;
import com.orientechnologies.orient.core.exception.OCommandExecutionException;
import com.orientechnologies.orient.core.index.*;
import com.orientechnologies.orient.core.index.OIndex;
import com.orientechnologies.orient.core.index.OIndexDefinition;
import com.orientechnologies.orient.core.index.OIndexDefinitionFactory;
import com.orientechnologies.orient.core.index.OPropertyMapIndexDefinition;
import com.orientechnologies.orient.core.index.ORuntimeKeyIndexDefinition;
import com.orientechnologies.orient.core.index.OSimpleKeyIndexDefinition;
import com.orientechnologies.orient.core.metadata.schema.OClass;
import com.orientechnologies.orient.core.metadata.schema.OClassImpl;
import com.orientechnologies.orient.core.metadata.schema.OType;
import com.orientechnologies.orient.core.record.impl.ODocument;

Expand Down Expand Up @@ -251,9 +261,11 @@ else if (serializerKeyId != 0) {
if ((keyTypes == null || keyTypes.length == 0) && collates == null) {
idx = oClass.createIndex(indexName, indexType.toString(), null, metadataDoc, engine, fields);
} else {
final List<OType> fieldTypeList = keyTypes != null ? Arrays.asList(keyTypes) : ((OClassImpl) oClass)
.extractFieldTypes(fields);

final OIndexDefinition idxDef = OIndexDefinitionFactory.createIndexDefinition(oClass, Arrays.asList(fields),
Arrays.asList(keyTypes), collatesList);
final OIndexDefinition idxDef = OIndexDefinitionFactory.createIndexDefinition(oClass, Arrays.asList(fields), fieldTypeList,
collatesList);

idx = database.getMetadata().getIndexManager()
.createIndex(indexName, indexType.name(), idxDef, oClass.getPolymorphicClusterIds(), null, metadataDoc, engine);
Expand Down
@@ -1,13 +1,5 @@
package com.orientechnologies.orient.test.database.auto;

import java.util.List;
import java.util.Set;

import org.testng.Assert;
import org.testng.annotations.Optional;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

import com.orientechnologies.orient.core.collate.OCaseInsensitiveCollate;
import com.orientechnologies.orient.core.collate.ODefaultCollate;
import com.orientechnologies.orient.core.db.record.OIdentifiable;
Expand All @@ -19,6 +11,13 @@
import com.orientechnologies.orient.core.record.impl.ODocument;
import com.orientechnologies.orient.core.sql.OCommandSQL;
import com.orientechnologies.orient.core.sql.query.OSQLSynchQuery;
import org.testng.Assert;
import org.testng.annotations.Optional;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

import java.util.List;
import java.util.Set;

@Test
public class CollateTest extends DocumentDBBaseTest {
Expand Down Expand Up @@ -290,4 +289,40 @@ public void testCompositeIndexQueryCollateWasChanged() {
explain = database.command(new OCommandSQL("explain " + query)).execute();
Assert.assertTrue(explain.<Set<String>> field("involvedIndexes").contains("collateCompositeIndexCollateWasChanged"));
}

public void collateThroughSQL() {
final OSchema schema = database.getMetadata().getSchema();
OClass clazz = schema.createClass("collateTestViaSQL");

OProperty csp = clazz.createProperty("csp", OType.STRING);
OProperty cip = clazz.createProperty("cip", OType.STRING);

database.command(new OCommandSQL("create index collateTestViaSQL.index on collateTestViaSQL (cip COLLATE CI) NOTUNIQUE")).execute();

for (int i = 0; i < 10; i++) {
ODocument document = new ODocument("collateTestViaSQL");

if (i % 2 == 0) {
document.field("csp", "VAL");
document.field("cip", "VAL");
} else {
document.field("csp", "val");
document.field("cip", "val");
}

document.save();
}

List<ODocument> result = database.query(new OSQLSynchQuery<ODocument>("select from collateTestViaSQL where csp = 'VAL'"));
Assert.assertEquals(result.size(), 5);

for (ODocument document : result)
Assert.assertEquals(document.field("csp"), "VAL");

result = database.query(new OSQLSynchQuery<ODocument>("select from collateTestViaSQL where cip = 'VaL'"));
Assert.assertEquals(result.size(), 10);

for (ODocument document : result)
Assert.assertEquals((document.<String> field("cip")).toUpperCase(), "VAL");
}
}

0 comments on commit 564faeb

Please sign in to comment.