|
4 | 4 |
|
5 | 5 | from sql import AliasManager, Flavor, Table, Window |
6 | 6 | from sql.functions import ( |
7 | | - Abs, AtTimeZone, CurrentTime, Div, Function, FunctionKeyword, |
| 7 | + Abs, AtTimeZone, CurrentTime, Div, Extract, Function, FunctionKeyword, |
8 | 8 | FunctionNotCallable, Overlay, Rank, Trim, WindowFunction) |
9 | 9 |
|
10 | 10 |
|
@@ -139,6 +139,38 @@ def test_current_time(self): |
139 | 139 | self.assertEqual(str(current_time), 'CURRENT_TIME') |
140 | 140 | self.assertEqual(current_time.params, ()) |
141 | 141 |
|
| 142 | + def test_extract(self): |
| 143 | + extract = Extract(Extract.Fields.DAY, self.table.c) |
| 144 | + self.assertEqual(str(extract), 'EXTRACT(DAY FROM "c")') |
| 145 | + self.assertEqual(extract.params, ()) |
| 146 | + |
| 147 | + extract = Extract('day', self.table.c) |
| 148 | + self.assertEqual(str(extract), 'EXTRACT(DAY FROM "c")') |
| 149 | + self.assertEqual(extract.params, ()) |
| 150 | + |
| 151 | + extract = Extract(Extract.Fields.DAY, '2000-01-01') |
| 152 | + self.assertEqual(str(extract), 'EXTRACT(DAY FROM %s)') |
| 153 | + self.assertEqual(extract.params, ('2000-01-01',)) |
| 154 | + |
| 155 | + def test_extract_mapping(self): |
| 156 | + class MyExtract(Function): |
| 157 | + _function = 'MY_EXTRACT' |
| 158 | + |
| 159 | + extract = Extract(Extract.Fields.DAY, '2000-01-01') |
| 160 | + flavor = Flavor(function_mapping={ |
| 161 | + Extract: MyExtract, |
| 162 | + }) |
| 163 | + Flavor.set(flavor) |
| 164 | + try: |
| 165 | + self.assertEqual(str(extract), 'MY_EXTRACT(%s, %s)') |
| 166 | + self.assertEqual(extract.params, ('DAY', '2000-01-01')) |
| 167 | + finally: |
| 168 | + Flavor.set(Flavor()) |
| 169 | + |
| 170 | + def test_extract_invalid_field(self): |
| 171 | + with self.assertRaises(ValueError): |
| 172 | + Extract('foo', self.table.c) |
| 173 | + |
142 | 174 |
|
143 | 175 | class TestWindowFunction(unittest.TestCase): |
144 | 176 |
|
|
0 commit comments