def test_cast_float(self): frag = "CAST(EXTRACT(WEEKDAY FROM CAST('2017-05-10 09:01:01' AS TIMESTAMP)) AS FLOAT)" expr = QueryParser().parse_expression(frag) assert(frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert(isinstance(v, float)) assert(v == 2.0)
def test_extract_null(self): frag = "EXTRACT(DAY FROM '09:15:07')" expr = QueryParser().parse_expression(frag) assert(frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert(v is None)
def test_cast_int(self): frag = "CAST(SUBSTRING('S3' FROM 2) AS INTEGER)" expr = QueryParser().parse_expression(frag) assert(frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert(v == 3)
def test_cast_time(self): frag = "CAST('09:05:05' AS TIME)" expr = QueryParser().parse_expression(frag) assert(frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert(isinstance(v, datetime.time))
def test_cast_varchar(self): frag = "CAST(1.0 / 2.0 AS VARCHAR)" expr = QueryParser().parse_expression(frag) assert(frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert(v == '0.5')
def test_position_null(self): frag = "POSITION('q' IN COALESCE(NULL, NULL))" expr = QueryParser().parse_expression(frag) assert (frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert (v == None)
def test_trim_NULL(self): frag = "TRIM(COALESCE(NULL, NULL))" expr = QueryParser().parse_expression(frag) assert (frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert (v is None)
def test_concat_null(self): frag = "CONCAT('q', NULL, 'abc')" expr = QueryParser().parse_expression(frag) assert (frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert (v is None)
def test_extract_micro_time_no_micro(self): frag = "EXTRACT(MICROSECOND FROM '09:12:32')" expr = QueryParser().parse_expression(frag) assert(frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert(v == 0)
def test_extract_micro_date(self): frag = "EXTRACT(MICROSECOND FROM '2017-05-20')" expr = QueryParser().parse_expression(frag) assert(frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert(v == 0)
def test_extract_weekday(self): frag = "EXTRACT(WEEKDAY FROM '2017-05-20')" expr = QueryParser().parse_expression(frag) assert(frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert(v == 5)
def test_extract_hours(self): frag = "EXTRACT(HOUR FROM '09:15:07')" expr = QueryParser().parse_expression(frag) assert(frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert(v == 9)
def test_cur_date(self): frag = "CURRENT_DATE" expr = QueryParser().parse_expression(frag) assert(frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert(isinstance(v, datetime.date))
def test_extract_year(self): frag = "EXTRACT(YEAR FROM CURRENT_DATE)" expr = QueryParser().parse_expression(frag) assert(frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert(v > 2020)
def test_extract_second(self): frag = "EXTRACT(SECOND FROM '2017-05-20 09:15:07')" expr = QueryParser().parse_expression(frag) assert(frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert(v == 7)
def test_upper_lower(self): frag = "UPPER(COALESCE(NULL, LOWER('xYz'), NULL, 'abz'))" expr = QueryParser().parse_expression(frag) assert (frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert (v == 'XYZ')
def test_trim(self): frag = "TRIM(' xYz ')" expr = QueryParser().parse_expression(frag) assert (frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert (v == 'xYz')
def test_extract_micro(self): frag = "EXTRACT(MICROSECOND FROM CURRENT_TIMESTAMP)" expr = QueryParser().parse_expression(frag) assert(frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert(v > 0)
def test_trim_empty(self): frag = "TRIM(COALESCE('\t', ' xYz ', ' '))" expr = QueryParser().parse_expression(frag) assert (frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert (v == '')
def test_truncate_parse(self): frag = 'TRUNCATE(15 * 5, -1)' expr = QueryParser().parse_expression(frag) assert(frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert(v == 70)
def test_char_length(self): frag = "CHAR_LENGTH(TRIM(' xYz '))" expr = QueryParser().parse_expression(frag) assert (frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert (v == 3)
def test_position_neg(self): frag = "SUBSTRING('Hello world!' FROM -4 FOR 2)" expr = QueryParser().parse_expression(frag) assert (frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert (v == 'rl')
def test_position(self): frag = "POSITION('z' IN TRIM(' xYz '))" expr = QueryParser().parse_expression(frag) assert (frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert (v == 3)
def test_concat_1(self): frag = "CONCAT(15 * 3)" expr = QueryParser().parse_expression(frag) assert (frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert (v == '45')
def test_concat_3(self): frag = "CONCAT(CONCAT('a', 'b'), 15 * 3, 'z')" expr = QueryParser().parse_expression(frag) assert (frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert (v == 'ab45z')
def test_coalesce(self): frag = "COALESCE(NULL, UPPER('xyz'), NULL, 'abz')" expr = QueryParser().parse_expression(frag) assert (frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert (v == 'XYZ')
def test_cast_date(self): frag = "CAST('2017-05-10' AS DATE)" expr = QueryParser().parse_expression(frag) assert(frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert(isinstance(v, datetime.date))
def test_coalesce_null(self): frag = "COALESCE(NULL, NULL)" expr = QueryParser().parse_expression(frag) assert (frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert (v == None)
def test_cast_char(self): frag = "CAST(4.0 / 3.0 AS CHAR(3))" expr = QueryParser().parse_expression(frag) assert(frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert(v == '1.3')
def test_day_name(self): frag = "DAYNAME('2017-05-20 09:15:07')" expr = QueryParser().parse_expression(frag) assert(frag.replace(' ', '') == str(expr).replace(' ', '')) v = expr.evaluate({}) assert(v == calendar.day_name[5])