Server IP : 85.214.239.14 / Your IP : 52.15.42.61 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /proc/3/task/3/cwd/srv/modoboa/env/lib64/python3.5/site-packages/django/db/models/functions/ |
Upload File : |
import math from django.db.models.expressions import Func from django.db.models.fields import FloatField, IntegerField from django.db.models.functions import Cast from django.db.models.functions.mixins import ( FixDecimalInputMixin, NumericOutputFieldMixin, ) from django.db.models.lookups import Transform class Abs(Transform): function = 'ABS' lookup_name = 'abs' class ACos(NumericOutputFieldMixin, Transform): function = 'ACOS' lookup_name = 'acos' class ASin(NumericOutputFieldMixin, Transform): function = 'ASIN' lookup_name = 'asin' class ATan(NumericOutputFieldMixin, Transform): function = 'ATAN' lookup_name = 'atan' class ATan2(NumericOutputFieldMixin, Func): function = 'ATAN2' arity = 2 def as_sqlite(self, compiler, connection, **extra_context): if not getattr(connection.ops, 'spatialite', False) or not ( (4, 3, 0) <= connection.ops.spatial_version < (5, 0, 0) ): return self.as_sql(compiler, connection) # This function is usually ATan2(y, x), returning the inverse tangent # of y / x, but it's ATan2(x, y) on SpatiaLite >= 4.3.0, < 5.0.0. # Cast integers to float to avoid inconsistent/buggy behavior if the # arguments are mixed between integer and float or decimal. # https://www.gaia-gis.it/fossil/libspatialite/tktview?name=0f72cca3a2 clone = self.copy() clone.set_source_expressions([ Cast(expression, FloatField()) if isinstance(expression.output_field, IntegerField) else expression for expression in self.get_source_expressions()[::-1] ]) return clone.as_sql(compiler, connection, **extra_context) class Ceil(Transform): function = 'CEILING' lookup_name = 'ceil' def as_oracle(self, compiler, connection, **extra_context): return super().as_sql(compiler, connection, function='CEIL', **extra_context) class Cos(NumericOutputFieldMixin, Transform): function = 'COS' lookup_name = 'cos' class Cot(NumericOutputFieldMixin, Transform): function = 'COT' lookup_name = 'cot' def as_oracle(self, compiler, connection, **extra_context): return super().as_sql(compiler, connection, template='(1 / TAN(%(expressions)s))', **extra_context) class Degrees(NumericOutputFieldMixin, Transform): function = 'DEGREES' lookup_name = 'degrees' def as_oracle(self, compiler, connection, **extra_context): return super().as_sql( compiler, connection, template='((%%(expressions)s) * 180 / %s)' % math.pi, **extra_context ) class Exp(NumericOutputFieldMixin, Transform): function = 'EXP' lookup_name = 'exp' class Floor(Transform): function = 'FLOOR' lookup_name = 'floor' class Ln(NumericOutputFieldMixin, Transform): function = 'LN' lookup_name = 'ln' class Log(FixDecimalInputMixin, NumericOutputFieldMixin, Func): function = 'LOG' arity = 2 def as_sqlite(self, compiler, connection, **extra_context): if not getattr(connection.ops, 'spatialite', False): return self.as_sql(compiler, connection) # This function is usually Log(b, x) returning the logarithm of x to # the base b, but on SpatiaLite it's Log(x, b). clone = self.copy() clone.set_source_expressions(self.get_source_expressions()[::-1]) return clone.as_sql(compiler, connection, **extra_context) class Mod(FixDecimalInputMixin, NumericOutputFieldMixin, Func): function = 'MOD' arity = 2 class Pi(NumericOutputFieldMixin, Func): function = 'PI' arity = 0 def as_oracle(self, compiler, connection, **extra_context): return super().as_sql(compiler, connection, template=str(math.pi), **extra_context) class Power(NumericOutputFieldMixin, Func): function = 'POWER' arity = 2 class Radians(NumericOutputFieldMixin, Transform): function = 'RADIANS' lookup_name = 'radians' def as_oracle(self, compiler, connection, **extra_context): return super().as_sql( compiler, connection, template='((%%(expressions)s) * %s / 180)' % math.pi, **extra_context ) class Round(Transform): function = 'ROUND' lookup_name = 'round' class Sin(NumericOutputFieldMixin, Transform): function = 'SIN' lookup_name = 'sin' class Sqrt(NumericOutputFieldMixin, Transform): function = 'SQRT' lookup_name = 'sqrt' class Tan(NumericOutputFieldMixin, Transform): function = 'TAN' lookup_name = 'tan'