From bd2a65e9471bb910e1d799be12303e49028d32bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 28 Feb 2011 14:54:03 +0000 Subject: [PATCH] --- querydsl-scala/TODO.txt | 6 +--- .../com/mysema/query/scala/Expressions.scala | 29 +++++++++++++++++++ .../mysema/query/scala/ExpressionTest.scala | 9 ++++++ 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/querydsl-scala/TODO.txt b/querydsl-scala/TODO.txt index da6938c65..0427ec09b 100644 --- a/querydsl-scala/TODO.txt +++ b/querydsl-scala/TODO.txt @@ -6,8 +6,4 @@ not expansion for contains containsKey containsValue - like - matches - startsWith - endsWith - contains \ No newline at end of file + \ No newline at end of file diff --git a/querydsl-scala/src/main/scala/com/mysema/query/scala/Expressions.scala b/querydsl-scala/src/main/scala/com/mysema/query/scala/Expressions.scala index 50afa1318..3cc548e8d 100644 --- a/querydsl-scala/src/main/scala/com/mysema/query/scala/Expressions.scala +++ b/querydsl-scala/src/main/scala/com/mysema/query/scala/Expressions.scala @@ -417,9 +417,38 @@ trait StringExpression extends ComparableExpression[String] { override def as(right: Path[String]) = string(ALIAS.asInstanceOf[Operator[String]], this, right); override def as(alias: String): StringExpression = as(new PathImpl[String](getType, alias)); + + def not() = new StringNegations(this) } +// NOTE : experimental +class StringNegations (val str: StringExpression) { + + def like(right: String): BooleanExpression = str.like(right).not; + + def like(right: Expression[String]) = str.like(right).not; + + def matches(right: String) = str.matches(right).not; + + def matches(right: Expression[String]) = str.matches(right).not; + + def contains(right: String) = str.contains(right).not; + + def contains(right: Expression[String]) = str.contains(right).not; + + def startsWith(right: String) = str.startsWith(right).not; + + def startsWith(right: Expression[String]) = str.startsWith(right).not; + + def endsWith(right: String) = str.endsWith(right).not; + + def endsWith(right: Expression[String]) = str.endsWith(right).not; + + def empty = str.isNotEmpty; + +} + trait TemporalExpression[T <: Comparable[_]] extends ComparableExpression[T] { def after(right: T) = gt(right); diff --git a/querydsl-scala/src/test/scala/com/mysema/query/scala/ExpressionTest.scala b/querydsl-scala/src/test/scala/com/mysema/query/scala/ExpressionTest.scala index 8e41326ba..f52a30284 100644 --- a/querydsl-scala/src/test/scala/com/mysema/query/scala/ExpressionTest.scala +++ b/querydsl-scala/src/test/scala/com/mysema/query/scala/ExpressionTest.scala @@ -295,6 +295,15 @@ class ExpressionTest { assertEquals("endsWith(person.firstName,amin)", person.firstName endsWith "amin"); } + @Test + def String_Negations { + assertEquals("!person.firstName like XXX", person.firstName not() like "XXX"); // FIXME + assertEquals("!matches(person.firstName,XXX)", person.firstName not() matches "XXX"); // FIXME + assertEquals("!startsWith(person.firstName,XXX)", person.firstName not() startsWith"XXX"); // FIXME + assertEquals("!endsWith(person.firstName,XXX)", person.firstName not() endsWith "XXX"); // FIXME + assertEquals("!empty(person.firstName)", person.firstName not() empty); // FIXME + } + // @Test // def Prefix(){ // assertEquals("count(person)", count(person));