Skip to content

Commit

Permalink
#116 added datediff and dateadd support
Browse files Browse the repository at this point in the history
  • Loading branch information
timowest committed Mar 13, 2012
1 parent f553694 commit e7f83a9
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 2 deletions.
Expand Up @@ -48,7 +48,10 @@ package object scala {
implicit val bigDecimal = new Numeric[java.math.BigDecimal]
implicit val bigInteger = new Numeric[java.math.BigInteger]
}


/**
* Type class for Number types
*/
class Numeric[Num]

}
@@ -0,0 +1,17 @@
package com.mysema.query.sql.mssql;

public enum DatePart {
year,
quarter,
month,
dayofyear,
day,
week,
hour,
minute,
second,
millisecond,
microsecond,
nanosecond

}
Expand Up @@ -13,8 +13,14 @@
*/
package com.mysema.query.sql.mssql;

import com.mysema.query.types.Constant;
import com.mysema.query.types.ConstantImpl;
import com.mysema.query.types.Template;
import com.mysema.query.types.TemplateFactory;
import com.mysema.query.types.expr.DateExpression;
import com.mysema.query.types.expr.NumberExpression;
import com.mysema.query.types.path.NumberPath;
import com.mysema.query.types.template.DateTemplate;
import com.mysema.query.types.template.NumberTemplate;

/**
Expand All @@ -25,6 +31,10 @@
*/
public final class SQLServerGrammar {

private static final Template DATEDIFF = TemplateFactory.DEFAULT.create("datediff('{0s}',{1},{2})");

private static final Template DATEADD = TemplateFactory.DEFAULT.create("dateadd('{0s}',{1},{2})");

private SQLServerGrammar() {}

public static final NumberExpression<Long> rowNumber = NumberTemplate.create(Long.class, "row_number");
Expand All @@ -34,5 +44,17 @@ private SQLServerGrammar() {}
public static RowNumber rowNumber() {
return new RowNumber();
}


private static final <T> Constant<T> constant(T constant) {
return new ConstantImpl<T>(constant);
}

public static <D> NumberExpression<Integer> datediff(DatePart datePart, D start, D end) {
return NumberTemplate.create(Integer.class, DATEDIFF, constant(datePart.name()), constant(start), constant(end));
}

public static <D extends Comparable<D>> DateExpression<D> dateadd(DatePart datePart, int num, D date) {
return DateTemplate.<D>create((Class<D>)date.getClass(), DATEADD, constant(datePart.name()), constant(num), constant(date));
}

}
@@ -0,0 +1,24 @@
package com.mysema.query._mssql;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

import com.mysema.query.sql.mssql.DatePart;
import com.mysema.query.sql.mssql.SQLServerGrammar;

public class SQLServerGrammarTest {

@Test
public void Datediff() {
assertEquals("datediff('day',start,end)",
SQLServerGrammar.datediff(DatePart.day, "start", "end").toString());
}

@Test
public void Dateadd() {
assertEquals("dateadd('hour',3,start)",
SQLServerGrammar.dateadd(DatePart.hour, 3, "start").toString());
}

}

0 comments on commit e7f83a9

Please sign in to comment.