Packages
vtc
0.16.4
0.17.5
0.17.4
0.17.3
0.17.2
0.17.1
0.17.0
0.16.9
0.16.8
0.16.7
0.16.6
0.16.5
0.16.4
0.16.2
0.16.1
0.16.0
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.15
0.13.14
0.13.13
0.13.12
0.13.11
0.13.10
0.13.9
0.13.8
0.13.7
0.13.6
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.1
0.11.0
0.10.10
0.10.9
0.10.8
0.10.7
0.10.6
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.2
0.9.1
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.3
0.5.2
0.5.1
0.4.0
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
A SMPTE timecode library for Elixir
Current section
Files
Jump to
Current section
Files
lib/ecto/postgres/pg_fragments.ex
defmodule Vtc.Ecto.Postgres.Fragments do
@moduledoc false
# Calling sub-functions inside of a pl/pgsql function is expensive, and can add up
# to 20% overhead in a call, the compiler does a bad job of optimizing it away.
#
# This module offers some common fragments for logic shared between our postgres
# types that can be inlined into the function definitions.
@typedoc """
String.t() alias that hints we are using a raw SQL string.
"""
@type raw_sql() :: String.t()
@doc """
Inline fragment for simplifying a fraction.
"""
@spec sql_inline_simplify(atom(), atom(), atom()) :: raw_sql()
def sql_inline_simplify(numerator_var, denominator_var, gcd_var) do
"""
#{numerator_var} := #{numerator_var} / #{gcd_var};
#{numerator_var} := #{numerator_var} * SIGN(#{denominator_var});
#{denominator_var} := ABS(#{denominator_var} / #{gcd_var});
"""
end
end