Function/Aggregate base. :param field: Field name :param default_values: Extra parameters to the function. .. attribute:: database_func :annotation: pypika_tortoise.terms.Function The pypika function this represents. .. attribute:: populate_field_object
| 512 | |
| 513 | |
| 514 | class Function(Expression): |
| 515 | """ |
| 516 | Function/Aggregate base. |
| 517 | |
| 518 | :param field: Field name |
| 519 | :param default_values: Extra parameters to the function. |
| 520 | |
| 521 | .. attribute:: database_func |
| 522 | :annotation: pypika_tortoise.terms.Function |
| 523 | |
| 524 | The pypika function this represents. |
| 525 | |
| 526 | .. attribute:: populate_field_object |
| 527 | :annotation: bool = False |
| 528 | |
| 529 | Enable populate_field_object where we want to try and preserve the field type. |
| 530 | """ |
| 531 | |
| 532 | __slots__ = ("field", "field_object", "default_values") |
| 533 | |
| 534 | database_func: type[PypikaFunction] = PypikaFunction |
| 535 | # Enable populate_field_object where we want to try and preserve the field type. |
| 536 | populate_field_object = False |
| 537 | |
| 538 | def __init__( |
| 539 | self, field: str | F | CombinedExpression | Function | Term, *default_values: Any |
| 540 | ) -> None: |
| 541 | self.field = field |
| 542 | self.field_object: Field | None = None |
| 543 | self.default_values = default_values |
| 544 | |
| 545 | def _get_function_field(self, field: Term | str, *default_values) -> PypikaFunction: |
| 546 | return self.database_func(field, *default_values) # type:ignore[arg-type] |
| 547 | |
| 548 | def _resolve_nested_field(self, resolve_context: ResolveContext, field: str) -> ResolveResult: |
| 549 | term, joins, output_field = resolve_nested_field( |
| 550 | resolve_context.model, resolve_context.table, field |
| 551 | ) |
| 552 | if self.populate_field_object: |
| 553 | self.field_object = output_field |
| 554 | return ResolveResult(term=term, joins=joins, output_field=output_field) |
| 555 | |
| 556 | def _resolve_argument( |
| 557 | self, resolve_context: ResolveContext, value: Any, *, treat_str_as_field: bool |
| 558 | ) -> ResolveResult: |
| 559 | if isinstance(value, Expression): |
| 560 | return value.resolve(resolve_context) |
| 561 | if isinstance(value, Term): |
| 562 | return ResolveResult(term=value) |
| 563 | if isinstance(value, str) and treat_str_as_field: |
| 564 | return self._resolve_nested_field(resolve_context, value) |
| 565 | return ResolveResult(term=value) |
| 566 | |
| 567 | def resolve(self, resolve_context: ResolveContext) -> ResolveResult: |
| 568 | """ |
| 569 | Used to resolve the Function statement for SQL generation. |
| 570 | |
| 571 | :param model: Model the function is applied on to. |
no outgoing calls
no test coverage detected
searching dependent graphs…