package com.revolsys.gis.data.query; import java.util.Arrays; import com.revolsys.datatype.DataTypes; import com.revolsys.io.PathName; import com.revolsys.record.ArrayRecord; import com.revolsys.record.Record; import com.revolsys.record.query.Condition; import com.revolsys.record.query.Q; import com.revolsys.record.schema.FieldDefinition; import com.revolsys.record.schema.RecordDefinitionImpl; import junit.framework.Assert; public class QueryValueTest { public static void main(final String[] args) { new QueryValueTest().run(); } private final FieldDefinition descriptionAttribute; private final FieldDefinition idField; private final FieldDefinition nameAttribute; private final Record record; private final RecordDefinitionImpl recordDefinition; public QueryValueTest() { this.recordDefinition = new RecordDefinitionImpl(PathName.newPathName("/Test")); this.idField = this.recordDefinition.addField("ID", DataTypes.INT, true); this.nameAttribute = this.recordDefinition.addField("NAME", DataTypes.STRING, 255, true); this.descriptionAttribute = this.recordDefinition.addField("DESCRIPTION", DataTypes.STRING, 255, false); this.record = new ArrayRecord(this.recordDefinition); this.record.setValue("ID", 10); this.record.setValue("NAME", "foobar"); } public void assertConditionFalse(final Condition trueCondition1, final Record record) { final boolean result1 = trueCondition1.test(record); Assert.assertFalse(result1); } public void assertConditionTrue(final Condition trueCondition1, final Record record) { final boolean result1 = trueCondition1.test(record); Assert.assertTrue(result1); } public void run() { testEqual(); testNotEqual(); testLessThan(); testLessThanEqual(); testGreaterThan(); testGreaterThanEqual(); testLike(); testILike(); testIsNull(); testIsNotNull(); testBetween(); testIn(); testAnd(); testOr(); testNot(); } private void testAnd() { final Condition trueCondition1 = Q.and(Q.equal(this.idField, 10)); assertConditionTrue(trueCondition1, this.record); final Condition trueCondition2 = Q.and(Q.equal(this.idField, 10), Q.equal(this.nameAttribute, "foobar")); assertConditionTrue(trueCondition2, this.record); final Condition falseCondition1 = Q.and(Q.equal(this.idField, 10), Q.equal(this.nameAttribute, "foobar1")); assertConditionFalse(falseCondition1, this.record); } private void testBetween() { final Condition trueCondition1 = Q.between(this.idField, 9, 10); assertConditionTrue(trueCondition1, this.record); final Condition trueCondition2 = Q.between(this.idField, 10, 10); assertConditionTrue(trueCondition2, this.record); final Condition trueCondition3 = Q.between(this.idField, 10, 11); assertConditionTrue(trueCondition3, this.record); final Condition trueCondition4 = Q.between(this.idField, 9, 10); assertConditionTrue(trueCondition4, this.record); final Condition falseCondition1 = Q.between(this.idField, 11, 12); assertConditionFalse(falseCondition1, this.record); } private void testEqual() { final Condition trueCondition1 = Q.equal(this.idField, 10); assertConditionTrue(trueCondition1, this.record); final Condition trueCondition2 = Q.equal(this.idField, "10"); assertConditionTrue(trueCondition2, this.record); final Condition falseCondition1 = Q.equal(this.idField, 11); assertConditionFalse(falseCondition1, this.record); } private void testGreaterThan() { final Condition trueCondition1 = Q.greaterThan(this.idField, 9); assertConditionTrue(trueCondition1, this.record); final Condition trueCondition2 = Q.greaterThan(this.idField, "9"); assertConditionTrue(trueCondition2, this.record); final Condition falseCondition1 = Q.greaterThan(this.idField, 10); assertConditionFalse(falseCondition1, this.record); } private void testGreaterThanEqual() { final Condition trueCondition1 = Q.greaterThanEqual(this.idField, 10); assertConditionTrue(trueCondition1, this.record); final Condition trueCondition2 = Q.greaterThanEqual(this.idField, "10"); assertConditionTrue(trueCondition2, this.record); final Condition falseCondition1 = Q.greaterThanEqual(this.idField, 11); assertConditionFalse(falseCondition1, this.record); } @SuppressWarnings("unchecked") private void testILike() { for (final Object like : Arrays.asList(10, "%10", "10%", "%10%", "%1%", "%0%")) { final Condition trueCondition = Q.iLike(this.idField, like); assertConditionTrue(trueCondition, this.record); } for (final String like : Arrays.asList("%Foobar", "fooBar%", "%foObar%", "%fOo%", "%bAr%", "%o%B%")) { final Condition trueCondition = Q.iLike(this.nameAttribute, like); assertConditionTrue(trueCondition, this.record); } for (final String like : Arrays.asList("%Foobar1", "Foobar1%", "%Foobar1%", "%Foo1%", "%Bar1%", "%a%b%")) { final Condition falseCondition = Q.iLike(this.nameAttribute, like); assertConditionFalse(falseCondition, this.record); } } private void testIn() { final Condition trueCondition1 = Q.in(this.idField, 10, 11); assertConditionTrue(trueCondition1, this.record); final Condition trueCondition2 = Q.in(this.idField, "10"); assertConditionTrue(trueCondition2, this.record); final Condition falseCondition1 = Q.in(this.idField, 11); assertConditionFalse(falseCondition1, this.record); } private void testIsNotNull() { final Condition trueCondition1 = Q.isNotNull(this.idField); assertConditionTrue(trueCondition1, this.record); final Condition falseCondition1 = Q.isNotNull(this.descriptionAttribute); assertConditionFalse(falseCondition1, this.record); } private void testIsNull() { final Condition trueCondition1 = Q.isNull(this.descriptionAttribute); assertConditionTrue(trueCondition1, this.record); final Condition falseCondition1 = Q.isNull(this.idField); assertConditionFalse(falseCondition1, this.record); } private void testLessThan() { final Condition trueCondition1 = Q.lessThan(this.idField, 11); assertConditionTrue(trueCondition1, this.record); final Condition trueCondition2 = Q.lessThan(this.idField, "11"); assertConditionTrue(trueCondition2, this.record); final Condition falseCondition1 = Q.lessThan(this.idField, 10); assertConditionFalse(falseCondition1, this.record); } private void testLessThanEqual() { final Condition trueCondition1 = Q.lessThanEqual(this.idField, 10); assertConditionTrue(trueCondition1, this.record); final Condition trueCondition2 = Q.lessThanEqual(this.idField, "10"); assertConditionTrue(trueCondition2, this.record); final Condition falseCondition1 = Q.lessThanEqual(this.idField, 9); assertConditionFalse(falseCondition1, this.record); } @SuppressWarnings("unchecked") private void testLike() { for (final Object like : Arrays.asList(10, "%10", "10%", "%10%", "%1%", "%0%")) { final Condition trueCondition = Q.like(this.idField, like); assertConditionTrue(trueCondition, this.record); } for (final String like : Arrays.asList("%foobar", "foobar%", "%foobar%", "%foo%", "%bar%", "%o%b%")) { final Condition trueCondition = Q.like(this.nameAttribute, like); assertConditionTrue(trueCondition, this.record); } for (final String like : Arrays.asList("%Foobar", "Foobar%", "%Foobar%", "%Foo%", "%Bar%", "%O%b%")) { final Condition falseCondition = Q.like(this.nameAttribute, like); assertConditionFalse(falseCondition, this.record); } } private void testNot() { final Condition trueCondition1 = Q.not(Q.equal(this.idField, 11)); assertConditionTrue(trueCondition1, this.record); final Condition falseCondition1 = Q.not(Q.equal(this.idField, 10)); assertConditionFalse(falseCondition1, this.record); } private void testNotEqual() { final Condition trueCondition1 = Q.notEqual(this.idField, 11); assertConditionTrue(trueCondition1, this.record); final Condition trueCondition2 = Q.notEqual(this.idField, "11"); assertConditionTrue(trueCondition2, this.record); final Condition falseCondition1 = Q.notEqual(this.idField, 10); assertConditionFalse(falseCondition1, this.record); } private void testOr() { final Condition trueCondition1 = Q.or(Q.equal(this.idField, 10)); assertConditionTrue(trueCondition1, this.record); final Condition trueCondition2 = Q.or(Q.equal(this.idField, 11), Q.equal(this.nameAttribute, "foobar")); assertConditionTrue(trueCondition2, this.record); final Condition falseCondition1 = Q.or(Q.equal(this.idField, 11), Q.equal(this.nameAttribute, "foobar1")); assertConditionFalse(falseCondition1, this.record); } }