Skip to content

Commit

Permalink
Merge pull request #370 from rareddy/TEIID-2988
Browse files Browse the repository at this point in the history
Teiid 2988
  • Loading branch information
rareddy committed Nov 25, 2014
2 parents f77d6ce + 6b4dd37 commit cfdf82b
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 4 deletions.
Expand Up @@ -99,9 +99,25 @@ public void start() throws TranslatorException {
@Override
public List<?> translate(Function function) {
function.setName("$substr"); //$NON-NLS-1$

ArrayList<Expression> params = new ArrayList<Expression>();

params.add(function.getParameters().get(0));

// MongoDB is zero base index; Teiid is 1 based;
params.add(LanguageFactory.INSTANCE.createFunction("-", new Expression[] { function.getParameters().get(1),
LanguageFactory.INSTANCE.createLiteral(1, TypeFacility.RUNTIME_TYPES.INTEGER) },
TypeFacility.RUNTIME_TYPES.INTEGER));

if (function.getParameters().size() == 2) {
function.getParameters().add(new Literal(DataTypeManager.MAX_STRING_LENGTH, TypeFacility.RUNTIME_TYPES.INTEGER));
function.getParameters().add(LanguageFactory.INSTANCE.createLiteral(DataTypeManager.MAX_STRING_LENGTH,
TypeFacility.RUNTIME_TYPES.INTEGER));
}

params.add(function.getParameters().get(2));

function.getParameters().clear();
function.getParameters().addAll(params);
return null;
}
});
Expand Down
Expand Up @@ -1038,10 +1038,15 @@ public void testSubStr() throws Exception {
String query = "SELECT SUBSTRING(CategoryName, 3) FROM Categories";

DBCollection dbCollection = helpExecute(query, new String[]{"Categories"}, 1);


//{ "$subtract" : [ 3 , 1]}
BasicDBList subtract = new BasicDBList();
subtract.add(3);
subtract.add(1);

BasicDBList params = new BasicDBList();
params.add("$CategoryName");
params.add(3);
params.add(new BasicDBObject("$subtract", subtract));
params.add(4000);

//{ "$project" : { "_m0" : { "$substr" : [ "$CategoryName" , 1 , 4000]}}}
Expand All @@ -1052,6 +1057,30 @@ public void testSubStr() throws Exception {
Mockito.verify(dbCollection).aggregate(Mockito.eq(pipeline), Mockito.any(AggregationOptions.class));
}

@Test
public void testSubStr2() throws Exception {
String query = "SELECT SUBSTRING(CategoryName, CategoryID, 4) FROM Categories";

DBCollection dbCollection = helpExecute(query, new String[]{"Categories"}, 1);

BasicDBList subtract = new BasicDBList();
subtract.add("$_id");
subtract.add(1);

BasicDBList params = new BasicDBList();
params.add("$CategoryName");
params.add(new BasicDBObject("$subtract", subtract));
params.add(4);

//{ "$project" : { "_m0" : { "$substr" : [ "$CategoryName" , 1 , 4000]}}}
BasicDBObject result = new BasicDBObject();
result.append( "_m0", new BasicDBObject("$substr", params));

List<DBObject> pipeline = buildArray(new BasicDBObject("$project", result));
Mockito.verify(dbCollection).aggregate(Mockito.eq(pipeline), Mockito.any(AggregationOptions.class));
}


@Test
public void testSelectConstant() throws Exception {
String query = "SELECT 'hit' FROM Categories";
Expand Down Expand Up @@ -1154,5 +1183,27 @@ public void testGeoFunctionInWhere() throws Exception {
public void testGeoFunctionInWhereWithFalse() throws Exception {
String query = "SELECT CategoryName FROM Categories WHERE mongo.geoWithin(CategoryName, 'Polygon', ((cast(1.0 as double), cast(2.0 as double)),(cast(3.0 as double), cast(4.0 as double)))) = false";
helpExecute(query, new String[]{"Categories"}, 2);
}
}

@Test
public void testAdd() throws Exception {
String query = "SELECT SupplierID+1 FROM Suppliers";

DBCollection dbCollection = helpExecute(query, new String[]{"Suppliers"}, 1);
//{ "$project" : { "_m0" : { "$add" : [ "$_id" , 1]}}}
BasicDBObject result = new BasicDBObject();
result.append( "_m0",new BasicDBObject("$add", buildObjectArray("$_id", 1)));

List<DBObject> pipeline = buildArray(
new BasicDBObject("$project", result));
Mockito.verify(dbCollection).aggregate(Mockito.eq(pipeline), Mockito.any(AggregationOptions.class));
}

ArrayList<Object> buildObjectArray(Object ...objs){
ArrayList<Object> list = new ArrayList<Object>();
for (Object obj:objs) {
list.add(obj);
}
return list;
}
}

0 comments on commit cfdf82b

Please sign in to comment.