Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,13 @@
*******************************************************************************/
package com.intuit.ipp.query.expr;

import com.intuit.ipp.data.AccountTypeEnum;
import com.intuit.ipp.query.Operation;
import com.intuit.ipp.query.Path;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
* Class to generate the query string for enum value
*
Expand All @@ -41,7 +45,7 @@ public EnumPath(String path, String entity) {
* @return Expression
*/
public Expression<Enum<?>> eq(Enum<?> value) {
String valueString = "'" + value + "'";
String valueString = "'" + EnumPath.getValue(value) + "'";
return new Expression<Enum<?>>(this, Operation.eq, valueString);
}

Expand All @@ -52,7 +56,7 @@ public Expression<Enum<?>> eq(Enum<?> value) {
* @return Expression
*/
public Expression<Enum<?>> neq(Enum<?> value) {
String valueString = "'" + value + "'";
String valueString = "'" + EnumPath.getValue(value) + "'";
return new Expression<Enum<?>>(this, Operation.neq, valueString);
}

Expand All @@ -63,7 +67,7 @@ public Expression<Enum<?>> neq(Enum<?> value) {
* @return Expression
*/
public Expression<Enum<?>> lt(Enum<?> value) {
String valueString = "'" + value + "'";
String valueString = "'" + EnumPath.getValue(value) + "'";
return new Expression<Enum<?>>(this, Operation.lt, valueString);
}

Expand All @@ -74,7 +78,7 @@ public Expression<Enum<?>> lt(Enum<?> value) {
* @return Expression
*/
public Expression<Enum<?>> lte(Enum<?> value) {
String valueString = "'" + value + "'";
String valueString = "'" + EnumPath.getValue(value) + "'";
return new Expression<Enum<?>>(this, Operation.lte, valueString);
}

Expand All @@ -85,7 +89,7 @@ public Expression<Enum<?>> lte(Enum<?> value) {
* @return Expression
*/
public Expression<Enum<?>> gt(Enum<?> value) {
String valueString = "'" + value + "'";
String valueString = "'" + EnumPath.getValue(value) + "'";
return new Expression<Enum<?>>(this, Operation.gt, valueString);
}

Expand All @@ -96,7 +100,7 @@ public Expression<Enum<?>> gt(Enum<?> value) {
* @return Expression
*/
public Expression<Enum<?>> gte(Enum<?> value) {
String valueString = "'" + value + "'";
String valueString = "'" + EnumPath.getValue(value) + "'";
return new Expression<Enum<?>>(this, Operation.gte, valueString);
}

Expand All @@ -111,13 +115,30 @@ public Expression<Enum<?>> in(Enum<?>[] value) {
Boolean firstString = true;
for (Enum<?> v : value) {
if (firstString) {
listString = listString.concat("('").concat(v.toString()).concat("'");
listString = listString.concat("('").concat(EnumPath.getValue(v)).concat("'");
firstString = false;
} else {
listString = listString.concat(", '").concat(v.toString()).concat("'");
listString = listString.concat(", '").concat(EnumPath.getValue(v)).concat("'");
}
}
listString = listString.concat(")");
return new Expression<Enum<?>>(this, Operation.in, listString);
}

/**
* Intuit data enumerations have a value property which should be used in queries instead of enum names.
* @param value The enumeration for which to get the query value.
* @return The query value based on the given enumeration.
*/
private static String getValue(Enum<?> value){
try{
Method m = value.getClass().getDeclaredMethod("value");
return (String) m.invoke(value);
} catch (NoSuchMethodException ex){
} catch (IllegalAccessException ex){
} catch (InvocationTargetException ex){
}
return value.toString();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public void testQuery_datatypes() {
$(data.getFloatData()).eq((float) 10), $(data.getDoubleData()).eq((double) 10), $(data.getCalendarData()).eq(calendar),
$(data.isBooleanData()).eq(true), $(data.getDateData()).eq(calendar.getTime()), $(data.getEnumData()).eq(EntityStatusEnum.PENDING))
.generate();
String expectedQuery = "SELECT StringData, IntData, ByteData, ShortData, LongData, FloatData, DoubleData, CalendarData, BooleanData, DateData, EnumData FROM Data WHERE StringData = 'StringValue' AND IntData = '10' AND ByteData = '10' AND ShortData = '10' AND LongData = '10' AND FloatData = '10.0' AND DoubleData = '10.0' AND CalendarData = '" + dateString + "' AND BooleanData = true AND DateData = '" + dateString + "' AND EnumData = 'PENDING'";
String expectedQuery = "SELECT StringData, IntData, ByteData, ShortData, LongData, FloatData, DoubleData, CalendarData, BooleanData, DateData, EnumData FROM Data WHERE StringData = 'StringValue' AND IntData = '10' AND ByteData = '10' AND ShortData = '10' AND LongData = '10' AND FloatData = '10.0' AND DoubleData = '10.0' AND CalendarData = '" + dateString + "' AND BooleanData = true AND DateData = '" + dateString + "' AND EnumData = 'Pending'";
Assert.assertEquals(expectedQuery, query);
}

Expand All @@ -71,7 +71,7 @@ public void testQuery_eq() {
$(data.getFloatData()).eq((float) 10), $(data.getDoubleData()).eq((double) 10), $(data.getCalendarData()).eq(calendar),
$(data.isBooleanData()).eq(true), $(data.getDateData()).eq(calendar.getTime()), $(data.getEnumData()).eq(EntityStatusEnum.PENDING))
.generate();
String expectedQuery = "SELECT * FROM Data WHERE StringData = 'StringValue' AND IntData = '10' AND ByteData = '10' AND ShortData = '10' AND LongData = '10' AND FloatData = '10.0' AND DoubleData = '10.0' AND CalendarData = '" + dateString + "' AND BooleanData = true AND DateData = '" + dateString + "' AND EnumData = 'PENDING'";
String expectedQuery = "SELECT * FROM Data WHERE StringData = 'StringValue' AND IntData = '10' AND ByteData = '10' AND ShortData = '10' AND LongData = '10' AND FloatData = '10.0' AND DoubleData = '10.0' AND CalendarData = '" + dateString + "' AND BooleanData = true AND DateData = '" + dateString + "' AND EnumData = 'Pending'";

Assert.assertEquals(expectedQuery, query);
}
Expand All @@ -84,7 +84,7 @@ public void testQuery_neq() {
$(data.getShortData()).neq((short) 10), $(data.getLongData()).neq((long) 10), $(data.getFloatData()).neq((float) 10),
$(data.getDoubleData()).neq((double) 10), $(data.getCalendarData()).neq(calendar), $(data.isBooleanData()).neq(true),
$(data.getDateData()).neq(calendar.getTime()), $(data.getEnumData()).neq(EntityStatusEnum.PENDING)).generate();
String expectedQuery = "SELECT * FROM Data WHERE StringData != 'StringValue' AND IntData != '10' AND ByteData != '10' AND ShortData != '10' AND LongData != '10' AND FloatData != '10.0' AND DoubleData != '10.0' AND CalendarData != '" + dateString + "' AND BooleanData != true AND DateData != '" + dateString + "' AND EnumData != 'PENDING'";
String expectedQuery = "SELECT * FROM Data WHERE StringData != 'StringValue' AND IntData != '10' AND ByteData != '10' AND ShortData != '10' AND LongData != '10' AND FloatData != '10.0' AND DoubleData != '10.0' AND CalendarData != '" + dateString + "' AND BooleanData != true AND DateData != '" + dateString + "' AND EnumData != 'Pending'";
LOG.debug(query);
Assert.assertEquals(expectedQuery, query);
}
Expand All @@ -96,7 +96,7 @@ public void testQuery_lt() {
$(data.getByteData()).lt((byte) 10), $(data.getShortData()).lt((short) 10), $(data.getLongData()).lt((long) 10),
$(data.getFloatData()).lt((float) 10), $(data.getDoubleData()).lt((double) 10), $(data.getCalendarData()).lt(calendar),
$(data.getDateData()).lt(calendar.getTime()), $(data.getEnumData()).lt(EntityStatusEnum.PENDING)).generate();
String expectedQuery = "SELECT * FROM Data WHERE StringData < 'StringValue' AND IntData < '10' AND ByteData < '10' AND ShortData < '10' AND LongData < '10' AND FloatData < '10.0' AND DoubleData < '10.0' AND CalendarData < '" + dateString + "' AND DateData < '" + dateString + "' AND EnumData < 'PENDING'";
String expectedQuery = "SELECT * FROM Data WHERE StringData < 'StringValue' AND IntData < '10' AND ByteData < '10' AND ShortData < '10' AND LongData < '10' AND FloatData < '10.0' AND DoubleData < '10.0' AND CalendarData < '" + dateString + "' AND DateData < '" + dateString + "' AND EnumData < 'Pending'";
LOG.debug(query);
Assert.assertEquals(expectedQuery, query);
}
Expand All @@ -108,7 +108,7 @@ public void testQuery_lte() {
$(data.getByteData()).lte((byte) 10), $(data.getShortData()).lte((short) 10), $(data.getLongData()).lte((long) 10),
$(data.getFloatData()).lte((float) 10), $(data.getDoubleData()).lte((double) 10), $(data.getCalendarData()).lte(calendar),
$(data.getDateData()).lte(calendar.getTime()), $(data.getEnumData()).lte(EntityStatusEnum.PENDING)).generate();
String expectedQuery = "SELECT * FROM Data WHERE StringData <= 'StringValue' AND IntData <= '10' AND ByteData <= '10' AND ShortData <= '10' AND LongData <= '10' AND FloatData <= '10.0' AND DoubleData <= '10.0' AND CalendarData <= '" + dateString + "' AND DateData <= '" + dateString + "' AND EnumData <= 'PENDING'";
String expectedQuery = "SELECT * FROM Data WHERE StringData <= 'StringValue' AND IntData <= '10' AND ByteData <= '10' AND ShortData <= '10' AND LongData <= '10' AND FloatData <= '10.0' AND DoubleData <= '10.0' AND CalendarData <= '" + dateString + "' AND DateData <= '" + dateString + "' AND EnumData <= 'Pending'";
LOG.debug(query);
Assert.assertEquals(expectedQuery, query);
}
Expand All @@ -120,7 +120,7 @@ public void testQuery_gt() {
$(data.getByteData()).gt((byte) 10), $(data.getShortData()).gt((short) 10), $(data.getLongData()).gt((long) 10),
$(data.getFloatData()).gt((float) 10), $(data.getDoubleData()).gt((double) 10), $(data.getCalendarData()).gt(calendar),
$(data.getDateData()).gt(calendar.getTime()), $(data.getEnumData()).gt(EntityStatusEnum.PENDING)).generate();
String expectedQuery = "SELECT * FROM Data WHERE StringData > 'StringValue' AND IntData > '10' AND ByteData > '10' AND ShortData > '10' AND LongData > '10' AND FloatData > '10.0' AND DoubleData > '10.0' AND CalendarData > '" + dateString + "' AND DateData > '" + dateString + "' AND EnumData > 'PENDING'";
String expectedQuery = "SELECT * FROM Data WHERE StringData > 'StringValue' AND IntData > '10' AND ByteData > '10' AND ShortData > '10' AND LongData > '10' AND FloatData > '10.0' AND DoubleData > '10.0' AND CalendarData > '" + dateString + "' AND DateData > '" + dateString + "' AND EnumData > 'Pending'";
LOG.debug(query);
Assert.assertEquals(expectedQuery, query);
}
Expand All @@ -132,7 +132,7 @@ public void testQuery_gte() {
$(data.getByteData()).gte((byte) 10), $(data.getShortData()).gte((short) 10), $(data.getLongData()).gte((long) 10),
$(data.getFloatData()).gte((float) 10), $(data.getDoubleData()).gte((double) 10), $(data.getCalendarData()).gte(calendar),
$(data.getDateData()).gte(calendar.getTime()), $(data.getEnumData()).gte(EntityStatusEnum.PENDING)).generate();
String expectedQuery = "SELECT * FROM Data WHERE StringData >= 'StringValue' AND IntData >= '10' AND ByteData >= '10' AND ShortData >= '10' AND LongData >= '10' AND FloatData >= '10.0' AND DoubleData >= '10.0' AND CalendarData >= '" + dateString + "' AND DateData >= '" + dateString + "' AND EnumData >= 'PENDING'";
String expectedQuery = "SELECT * FROM Data WHERE StringData >= 'StringValue' AND IntData >= '10' AND ByteData >= '10' AND ShortData >= '10' AND LongData >= '10' AND FloatData >= '10.0' AND DoubleData >= '10.0' AND CalendarData >= '" + dateString + "' AND DateData >= '" + dateString + "' AND EnumData >= 'Pending'";
LOG.debug(query);
Assert.assertEquals(expectedQuery, query);
}
Expand All @@ -147,7 +147,7 @@ public void testQuery_in() {
$(data.isBooleanData()).in(new Boolean[] { true, false }), $(data.getCalendarData()).in(new Calendar[] { calendar, calendar }),
$(data.getDateData()).in(new Date[] { calendar.getTime(), calendar.getTime() }),
$(data.getEnumData()).in(new EntityStatusEnum[] { EntityStatusEnum.PENDING, EntityStatusEnum.DELETED })).generate();
String expectedQuery = "SELECT * FROM Data WHERE StringData IN ('StringValue1', 'StringValue2') AND IntData IN ('10', '20') AND ByteData IN ('10', '20') AND ShortData IN ('10', '20') AND LongData IN ('10', '20') AND FloatData IN ('10.0', '20.0') AND DoubleData IN ('10.0', '20.0') AND BooleanData IN (true, false) AND CalendarData IN ('" + dateString + "', '" + dateString + "') AND DateData IN ('" + dateString + "', '" + dateString + "') AND EnumData IN ('PENDING', 'DELETED')";
String expectedQuery = "SELECT * FROM Data WHERE StringData IN ('StringValue1', 'StringValue2') AND IntData IN ('10', '20') AND ByteData IN ('10', '20') AND ShortData IN ('10', '20') AND LongData IN ('10', '20') AND FloatData IN ('10.0', '20.0') AND DoubleData IN ('10.0', '20.0') AND BooleanData IN (true, false) AND CalendarData IN ('" + dateString + "', '" + dateString + "') AND DateData IN ('" + dateString + "', '" + dateString + "') AND EnumData IN ('Pending', 'Deleted')";
LOG.debug(query);
Assert.assertEquals(expectedQuery, query);
}
Expand Down