| 
1 | 1 | import enum  | 
2 |  | -from sqlalchemy import Column, inspect, types as sa_types  | 
 | 2 | +from sqlalchemy import Column, func, inspect, types as sa_types  | 
3 | 3 | 
 
  | 
4 | 4 | from clickhouse_sqlalchemy import types, engines, Table  | 
 | 5 | + | 
5 | 6 | from tests.testcase import BaseTestCase  | 
6 | 7 | from tests.util import require_server_version, with_native_and_http_sessions  | 
7 | 8 | 
 
  | 
@@ -166,3 +167,65 @@ def test_datetime(self):  | 
166 | 167 | 
 
  | 
167 | 168 |         self.assertIsInstance(coltype, types.DateTime)  | 
168 | 169 |         self.assertIsNone(coltype.timezone)  | 
 | 170 | + | 
 | 171 | +    def test_aggregate_function(self):  | 
 | 172 | +        coltype = self._type_round_trip(  | 
 | 173 | +            types.AggregateFunction(func.sum(), types.UInt16)  | 
 | 174 | +        )[0]['type']  | 
 | 175 | + | 
 | 176 | +        self.assertIsInstance(coltype, types.AggregateFunction)  | 
 | 177 | +        self.assertEqual(coltype.agg_func, 'sum')  | 
 | 178 | +        self.assertEqual(len(coltype.nested_types), 1)  | 
 | 179 | +        self.assertIsInstance(coltype.nested_types[0], types.UInt16)  | 
 | 180 | + | 
 | 181 | +        coltype = self._type_round_trip(  | 
 | 182 | +            types.AggregateFunction('quantiles(0.5, 0.9)', types.UInt32)  | 
 | 183 | +        )[0]['type']  | 
 | 184 | +        self.assertIsInstance(coltype, types.AggregateFunction)  | 
 | 185 | +        self.assertEqual(coltype.agg_func, 'quantiles(0.5, 0.9)')  | 
 | 186 | +        self.assertEqual(len(coltype.nested_types), 1)  | 
 | 187 | +        self.assertIsInstance(coltype.nested_types[0], types.UInt32)  | 
 | 188 | + | 
 | 189 | +        coltype = self._type_round_trip(  | 
 | 190 | +            types.AggregateFunction(  | 
 | 191 | +                func.argMin(), types.Float32, types.Float32  | 
 | 192 | +            )  | 
 | 193 | +        )[0]['type']  | 
 | 194 | +        self.assertIsInstance(coltype, types.AggregateFunction)  | 
 | 195 | +        self.assertEqual(coltype.agg_func, 'argMin')  | 
 | 196 | +        self.assertEqual(len(coltype.nested_types), 2)  | 
 | 197 | +        self.assertIsInstance(coltype.nested_types[0], types.Float32)  | 
 | 198 | +        self.assertIsInstance(coltype.nested_types[1], types.Float32)  | 
 | 199 | + | 
 | 200 | +        coltype = self._type_round_trip(  | 
 | 201 | +            types.AggregateFunction(  | 
 | 202 | +                'sum', types.Decimal(18, 2)  | 
 | 203 | +            )  | 
 | 204 | +        )[0]['type']  | 
 | 205 | +        self.assertIsInstance(coltype, types.AggregateFunction)  | 
 | 206 | +        self.assertEqual(coltype.agg_func, 'sum')  | 
 | 207 | +        self.assertEqual(len(coltype.nested_types), 1)  | 
 | 208 | +        self.assertIsInstance(coltype.nested_types[0], types.Decimal)  | 
 | 209 | +        self.assertEqual(coltype.nested_types[0].precision, 18)  | 
 | 210 | +        self.assertEqual(coltype.nested_types[0].scale, 2)  | 
 | 211 | + | 
 | 212 | +    @require_server_version(22, 8, 21)  | 
 | 213 | +    def test_simple_aggregate_function(self):  | 
 | 214 | +        coltype = self._type_round_trip(  | 
 | 215 | +            types.SimpleAggregateFunction(func.sum(), types.UInt64)  | 
 | 216 | +        )[0]['type']  | 
 | 217 | + | 
 | 218 | +        self.assertIsInstance(coltype, types.SimpleAggregateFunction)  | 
 | 219 | +        self.assertEqual(coltype.agg_func, 'sum')  | 
 | 220 | +        self.assertEqual(len(coltype.nested_types), 1)  | 
 | 221 | +        self.assertIsInstance(coltype.nested_types[0], types.UInt64)  | 
 | 222 | + | 
 | 223 | +        coltype = self._type_round_trip(  | 
 | 224 | +            types.SimpleAggregateFunction(  | 
 | 225 | +                'sum', types.Float64  | 
 | 226 | +            )  | 
 | 227 | +        )[0]['type']  | 
 | 228 | +        self.assertIsInstance(coltype, types.SimpleAggregateFunction)  | 
 | 229 | +        self.assertEqual(coltype.agg_func, 'sum')  | 
 | 230 | +        self.assertEqual(len(coltype.nested_types), 1)  | 
 | 231 | +        self.assertIsInstance(coltype.nested_types[0], types.Float64)  | 
0 commit comments