@@ -90,9 +90,7 @@ if Code.ensure_loaded?(Postgrex) do
90
90
do: [ ]
91
91
92
92
defp strip_quotes ( quoted ) do
93
- size = byte_size ( quoted ) - 2
94
- << _ , unquoted :: binary - size ( size ) , _ >> = quoted
95
- unquoted
93
+ binary_part ( quoted , 1 , byte_size ( quoted ) - 2 )
96
94
end
97
95
98
96
## Query
@@ -1760,104 +1758,85 @@ if Code.ensure_loaded?(Postgrex) do
1760
1758
defp options_expr ( options ) ,
1761
1759
do: [ ?\s , options ]
1762
1760
1763
- defp column_type ( { :array , type } , opts ) do
1764
- [ type , opts ] = column_type ( type , opts )
1765
- [ [ type , "[]" ] , opts ]
1766
- end
1761
+ defp column_type ( type , opts ) do
1762
+ type_name = column_type_name ( type , opts )
1767
1763
1768
- defp column_type ( type , opts ) when type in ~w( time utc_datetime naive_datetime) a do
1769
- generated = Keyword . get ( opts , :generated )
1770
- [ [ ecto_to_db ( type ) , "(0)" ] , generated_expr ( generated ) ]
1771
- end
1764
+ case Keyword . get ( opts , :generated ) do
1765
+ nil when type == :identity ->
1766
+ cleanup = fn v -> is_integer ( v ) and v > 0 end
1772
1767
1773
- defp column_type ( type , opts )
1774
- when type in ~w( time_usec utc_datetime_usec naive_datetime_usec) a do
1775
- precision = Keyword . get ( opts , :precision )
1776
- generated = Keyword . get ( opts , :generated )
1777
- type_name = ecto_to_db ( type )
1768
+ sequence =
1769
+ [ Keyword . get ( opts , :start_value ) ]
1770
+ |> Enum . filter ( cleanup )
1771
+ |> Enum . map ( & "START WITH #{ & 1 } " )
1772
+ |> Kernel . ++ (
1773
+ [ Keyword . get ( opts , :increment ) ]
1774
+ |> Enum . filter ( cleanup )
1775
+ |> Enum . map ( & "INCREMENT BY #{ & 1 } " )
1776
+ )
1777
+
1778
+ case sequence do
1779
+ [ ] -> [ type_name , " GENERATED BY DEFAULT AS IDENTITY" ]
1780
+ _ -> [ type_name , " GENERATED BY DEFAULT AS IDENTITY(" , Enum . join ( sequence , " " ) , ") " ]
1781
+ end
1778
1782
1779
- type =
1780
- if precision do
1781
- [ type_name , ?( , to_string ( precision ) , ?) ]
1782
- else
1783
+ nil ->
1783
1784
type_name
1784
- end
1785
1785
1786
- [ type , generated_expr ( generated ) ]
1786
+ expr when is_binary ( expr ) ->
1787
+ [ type_name , " GENERATED " , expr ]
1788
+
1789
+ other ->
1790
+ raise ArgumentError ,
1791
+ "the `:generated` option only accepts strings, received: #{ inspect ( other ) } "
1792
+ end
1787
1793
end
1788
1794
1789
- defp column_type ( :identity , opts ) do
1790
- start_value = [ Keyword . get ( opts , :start_value ) ]
1791
- increment = [ Keyword . get ( opts , :increment ) ]
1792
- generated = Keyword . get ( opts , :generated )
1793
- type_name = ecto_to_db ( :identity )
1795
+ defp column_type_name ( { :array , type } , opts ) do
1796
+ [ column_type_name ( type , opts ) , "[]" ]
1797
+ end
1794
1798
1795
- if generated do
1796
- [ type_name , generated_expr ( generated ) ]
1797
- else
1798
- cleanup = fn v -> is_integer ( v ) and v > 0 end
1799
-
1800
- sequence =
1801
- start_value
1802
- |> Enum . filter ( cleanup )
1803
- |> Enum . map ( & "START WITH #{ & 1 } " )
1804
- |> Kernel . ++ (
1805
- increment
1806
- |> Enum . filter ( cleanup )
1807
- |> Enum . map ( & "INCREMENT BY #{ & 1 } " )
1808
- )
1799
+ defp column_type_name ( type , _opts ) when type in ~w( time utc_datetime naive_datetime) a do
1800
+ [ ecto_to_db ( type ) , "(0)" ]
1801
+ end
1809
1802
1810
- case sequence do
1811
- [ ] -> [ type_name , " GENERATED BY DEFAULT AS IDENTITY" ]
1812
- _ -> [ type_name , " GENERATED BY DEFAULT AS IDENTITY(" , Enum . join ( sequence , " " ) , ") " ]
1813
- end
1803
+ defp column_type_name ( type , opts )
1804
+ when type in ~w( time_usec utc_datetime_usec naive_datetime_usec) a do
1805
+ precision = Keyword . get ( opts , :precision )
1806
+ type_name = ecto_to_db ( type )
1807
+
1808
+ if precision do
1809
+ [ type_name , ?( , to_string ( precision ) , ?) ]
1810
+ else
1811
+ type_name
1814
1812
end
1815
1813
end
1816
1814
1817
- defp column_type ( :duration , opts ) do
1815
+ defp column_type_name ( :duration , opts ) do
1818
1816
precision = Keyword . get ( opts , :precision )
1819
1817
fields = Keyword . get ( opts , :fields )
1820
- generated = Keyword . get ( opts , :generated )
1821
1818
type_name = ecto_to_db ( :duration )
1822
1819
1823
- type =
1824
- cond do
1825
- fields && precision -> [ type_name , " " , fields , ?( , to_string ( precision ) , ?) ]
1826
- precision -> [ type_name , ?( , to_string ( precision ) , ?) ]
1827
- fields -> [ type_name , " " , fields ]
1828
- true -> [ type_name ]
1829
- end
1830
-
1831
- [ type , generated_expr ( generated ) ]
1820
+ cond do
1821
+ fields && precision -> [ type_name , " " , fields , ?( , to_string ( precision ) , ?) ]
1822
+ precision -> [ type_name , ?( , to_string ( precision ) , ?) ]
1823
+ fields -> [ type_name , " " , fields ]
1824
+ true -> [ type_name ]
1825
+ end
1832
1826
end
1833
1827
1834
- defp column_type ( type , opts ) do
1828
+ defp column_type_name ( type , opts ) do
1835
1829
size = Keyword . get ( opts , :size )
1836
1830
precision = Keyword . get ( opts , :precision )
1837
1831
scale = Keyword . get ( opts , :scale )
1838
- generated = Keyword . get ( opts , :generated )
1839
1832
type_name = ecto_to_db ( type )
1840
1833
1841
- type =
1842
- cond do
1843
- size -> [ type_name , ?( , to_string ( size ) , ?) ]
1844
- precision -> [ type_name , ?( , to_string ( precision ) , ?, , to_string ( scale || 0 ) , ?) ]
1845
- type == :string -> [ type_name , "(255)" ]
1846
- true -> type_name
1847
- end
1848
-
1849
- [ type , generated_expr ( generated ) ]
1850
- end
1851
-
1852
- defp generated_expr ( nil ) , do: [ ]
1853
-
1854
- defp generated_expr ( expr ) when is_binary ( expr ) do
1855
- [ " GENERATED " , expr ]
1856
- end
1857
-
1858
- defp generated_expr ( other ) do
1859
- raise ArgumentError ,
1860
- "the `:generated` option only accepts strings, received: #{ inspect ( other ) } "
1834
+ cond do
1835
+ size -> [ type_name , ?( , to_string ( size ) , ?) ]
1836
+ precision -> [ type_name , ?( , to_string ( precision ) , ?, , to_string ( scale || 0 ) , ?) ]
1837
+ type == :string -> [ type_name , "(255)" ]
1838
+ true -> type_name
1839
+ end
1861
1840
end
1862
1841
1863
1842
defp reference_expr ( % Reference { } = ref , table , name ) do
0 commit comments