MCPcopy Create free account
hub / github.com/tortoise/tortoise-orm / Function

Class Function

tortoise/expressions.py:514–599  ·  view source on GitHub ↗

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

Source from the content-addressed store, hash-verified

512
513
514class 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.

Callers 1

postgres_array_lengthFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…