Skip to content

Commit 3dbfaa1

Browse files
committed
Added monthname, dayname and quarter functions
1 parent 7e27176 commit 3dbfaa1

File tree

5 files changed

+13
-46
lines changed

5 files changed

+13
-46
lines changed

x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/BaseDateTimeFunction.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
import java.util.TimeZone;
1919

20-
abstract class BaseDateTimeFunction extends UnaryScalarFunction {
20+
public abstract class BaseDateTimeFunction extends UnaryScalarFunction {
2121

2222
private final TimeZone timeZone;
2323
private final String name;
@@ -53,6 +53,7 @@ public TimeZone timeZone() {
5353
return timeZone;
5454
}
5555

56+
// add tz along the rest of the params
5657
@Override
5758
public String name() {
5859
return name;

x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/NamedDateTimeFunction.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,7 @@
2424
import static org.elasticsearch.xpack.sql.expression.function.scalar.script.ParamsBuilder.paramsBuilder;
2525
import static org.elasticsearch.xpack.sql.expression.function.scalar.script.ScriptTemplate.formatTemplate;
2626

27-
/*
28-
* Base class for the two "naming" date/time functions: month_name and day_name
29-
*/
30-
abstract class NamedDateTimeFunction extends BaseDateTimeFunction {
27+
public abstract class NamedDateTimeFunction extends BaseDateTimeFunction {
3128

3229
NamedDateTimeFunction(Location location, Expression field, TimeZone timeZone) {
3330
super(location, field, timeZone);
@@ -58,7 +55,6 @@ protected ScriptTemplate asScriptFrom(FieldAttribute field) {
5855
}
5956

6057
private String formatMethodName(String template) {
61-
// the Painless method name will be the enum's lower camelcase name
6258
return template.replace("{method_name}", StringUtils.underscoreToLowerCamelCase(nameExtractor().toString()));
6359
}
6460

x-pack/plugin/sql/src/main/resources/org/elasticsearch/xpack/sql/plugin/sql_whitelist.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
class org.elasticsearch.xpack.sql.expression.function.scalar.whitelist.InternalSqlScriptUtils {
1010

1111
Integer dateTimeChrono(long, String, String)
12-
String dayName(long, String)
13-
String monthName(long, String)
14-
Integer quarter(long, String)
12+
String dayName(long,String)
13+
String monthName(long,String)
14+
Integer quarter(long,String)
1515
Integer ascii(String)
1616
Integer bitLength(String)
1717
String character(Number)

x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/QuarterProcessorTests.java

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class QuarterProcessorTests extends ESTestCase {
1616

1717
private static final TimeZone UTC = TimeZone.getTimeZone("UTC");
1818

19-
public void testQuarterWithUTCTimezone() {
19+
public void testQuarter() {
2020
QuarterProcessor proc = new QuarterProcessor(UTC);
2121

2222
assertEquals(1, proc.process(new DateTime(0L, DateTimeZone.UTC)));
@@ -28,19 +28,4 @@ public void testQuarterWithUTCTimezone() {
2828
assertEquals(3, proc.process("-64164233612338"));
2929
assertEquals(2, proc.process("64164233612338"));
3030
}
31-
32-
public void testValidDayNamesWithNonUTCTimeZone() {
33-
QuarterProcessor proc = new QuarterProcessor(TimeZone.getTimeZone("GMT-10:00"));
34-
assertEquals(4, proc.process(new DateTime(0L, DateTimeZone.UTC)));
35-
assertEquals(4, proc.process(new DateTime(-5400, 1, 1, 5, 0, DateTimeZone.UTC)));
36-
assertEquals(1, proc.process(new DateTime(30, 4, 1, 9, 59, DateTimeZone.UTC)));
37-
38-
proc = new QuarterProcessor(TimeZone.getTimeZone("GMT+10:00"));
39-
assertEquals(4, proc.process(new DateTime(10902, 9, 30, 14, 1, DateTimeZone.UTC)));
40-
assertEquals(3, proc.process(new DateTime(10902, 9, 30, 13, 59, DateTimeZone.UTC)));
41-
42-
assertEquals(1, proc.process("0"));
43-
assertEquals(3, proc.process("-64164233612338"));
44-
assertEquals(2, proc.process("64164233612338"));
45-
}
4631
}

x-pack/qa/sql/src/main/resources/datetime.sql-spec

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,10 @@
1212

1313
dateTimeDay
1414
SELECT DAY(birth_date) d, last_name l FROM "test_emp" WHERE emp_no < 10010 ORDER BY emp_no;
15-
1615
dateTimeDayOfMonth
1716
SELECT DAY_OF_MONTH(birth_date) d, last_name l FROM "test_emp" WHERE emp_no < 10010 ORDER BY emp_no;
18-
1917
dateTimeMonth
2018
SELECT MONTH(birth_date) d, last_name l FROM "test_emp" WHERE emp_no < 10010 ORDER BY emp_no;
21-
2219
dateTimeYear
2320
SELECT YEAR(birth_date) d, last_name l FROM "test_emp" WHERE emp_no < 10010 ORDER BY emp_no;
2421

@@ -34,13 +31,10 @@ SELECT QUARTER(hire_date) q, hire_date FROM test_emp ORDER BY hire_date LIMIT 15
3431
//
3532
// Filter
3633
//
37-
3834
dateTimeFilterDayOfMonth
3935
SELECT DAY_OF_MONTH(birth_date) AS d, last_name l FROM "test_emp" WHERE DAY_OF_MONTH(birth_date) <= 10 ORDER BY emp_no LIMIT 5;
40-
4136
dateTimeFilterMonth
4237
SELECT MONTH(birth_date) AS d, last_name l FROM "test_emp" WHERE MONTH(birth_date) <= 5 ORDER BY emp_no LIMIT 5;
43-
4438
dateTimeFilterYear
4539
SELECT YEAR(birth_date) AS d, last_name l FROM "test_emp" WHERE YEAR(birth_date) <= 1960 ORDER BY emp_no LIMIT 5;
4640

@@ -66,29 +60,20 @@ SELECT QUARTER(hire_date) quarter, hire_date FROM test_emp WHERE QUARTER(hire_da
6660
dateTimeAggByYear
6761
SELECT YEAR(birth_date) AS d, CAST(SUM(emp_no) AS INT) s FROM "test_emp" GROUP BY YEAR(birth_date) ORDER BY YEAR(birth_date) LIMIT 13;
6862

69-
dateTimeAggByMonthWithOrderBy
63+
dateTimeAggByMonth
7064
SELECT MONTH(birth_date) AS d, COUNT(*) AS c, CAST(SUM(emp_no) AS INT) s FROM "test_emp" GROUP BY MONTH(birth_date) ORDER BY MONTH(birth_date) DESC;
7165

72-
dateTimeAggByDayOfMonthWithOrderBy
66+
dateTimeAggByDayOfMonth
7367
SELECT DAY_OF_MONTH(birth_date) AS d, COUNT(*) AS c, CAST(SUM(emp_no) AS INT) s FROM "test_emp" GROUP BY DAY_OF_MONTH(birth_date) ORDER BY DAY_OF_MONTH(birth_date) DESC;
7468

7569
monthNameWithGroupBy
76-
SELECT MONTHNAME("hire_date") AS month, COUNT(*) AS count FROM "test_emp" GROUP BY MONTHNAME("hire_date"), MONTH("hire_date") ORDER BY MONTH("hire_date");
70+
select MONTHNAME("hire_date") AS month, COUNT(*) AS count FROM "test_emp" GROUP BY MONTHNAME("hire_date"), MONTH("hire_date") ORDER BY MONTH("hire_date");
7771

78-
monthNameWithDoubleGroupByAndOrderBy
79-
SELECT MONTHNAME("hire_date") AS month, COUNT(*) AS count FROM "test_emp" GROUP BY MONTHNAME("hire_date"), MONTH("hire_date") ORDER BY MONTHNAME("hire_date") DESC;
72+
monthNameWithGroupByAndOrderBy
73+
select MONTHNAME("hire_date") AS month, COUNT(*) AS count FROM "test_emp" GROUP BY MONTHNAME("hire_date"), MONTH("hire_date") ORDER BY MONTHNAME("hire_date") DESC;
8074

81-
// AwaitsFix https://github.com/elastic/elasticsearch/issues/33519
82-
// monthNameWithGroupByOrderByAndHaving
83-
// SELECT CAST(MAX("salary") AS DOUBLE) max_salary, MONTHNAME("hire_date") month_name FROM "test_emp" GROUP BY MONTHNAME("hire_date") HAVING MAX("salary") > 50000 ORDER BY MONTHNAME(hire_date);
84-
// dayNameWithHaving
85-
// SELECT DAYNAME("hire_date") FROM "test_emp" GROUP BY DAYNAME("hire_date") HAVING MAX("emp_no") > ASCII(DAYNAME("hire_date"));
86-
87-
dayNameWithDoubleGroupByAndOrderBy
75+
dayNameWithGroupByAndOrderBy
8876
SELECT COUNT(*) c, DAYNAME(hire_date) day_name, DAY(hire_date) day FROM test_emp WHERE MONTHNAME(hire_date) = 'August' GROUP BY DAYNAME(hire_date), DAY(hire_date) ORDER BY DAYNAME(hire_date), DAY(hire_date);
8977

90-
dayNameWithGroupByOrderByAndHaving
91-
SELECT CAST(MAX(salary) AS DOUBLE) max_salary, DAYNAME(hire_date) day_name FROM test_emp GROUP BY DAYNAME(hire_date) HAVING MAX(salary) > 50000 ORDER BY DAYNAME("hire_date");
92-
9378
quarterWithGroupByAndOrderBy
9479
SELECT QUARTER(hire_date) quarter, COUNT(*) hires FROM test_emp GROUP BY QUARTER(hire_date) ORDER BY QUARTER(hire_date);

0 commit comments

Comments
 (0)