@@ -963,16 +963,36 @@ defmodule Ecto.Adapters.PostgresTest do
963
963
964
964
test "json_extract_path" do
965
965
query = Schema |> select ( [ s ] , json_extract_path ( s . meta , [ 0 , 1 ] ) ) |> plan ( )
966
- assert all ( query ) == ~s| SELECT (s0.\" meta\" #>'{ 0,1}' ) FROM "schema" AS s0|
966
+ assert all ( query ) == ~s| SELECT (s0.\" meta\" #>array[ 0,1]::text[] ) FROM "schema" AS s0|
967
967
968
968
query = Schema |> select ( [ s ] , json_extract_path ( s . meta , [ "a" , "b" ] ) ) |> plan ( )
969
- assert all ( query ) == ~s| SELECT (s0.\" meta\" #>'{"a","b"}' ) FROM "schema" AS s0|
969
+ assert all ( query ) == ~s| SELECT (s0.\" meta\" #>array['a','b']::text[] ) FROM "schema" AS s0|
970
970
971
971
query = Schema |> select ( [ s ] , json_extract_path ( s . meta , [ "'a" ] ) ) |> plan ( )
972
- assert all ( query ) == ~s| SELECT (s0.\" meta\" #>'{" ''a"}' ) FROM "schema" AS s0|
972
+ assert all ( query ) == ~s| SELECT (s0.\" meta\" #>array[' ''a']::text[] ) FROM "schema" AS s0|
973
973
974
974
query = Schema |> select ( [ s ] , json_extract_path ( s . meta , [ "\" a" ] ) ) |> plan ( )
975
- assert all ( query ) == ~s| SELECT (s0.\" meta\" #>'{"\\ "a"}') FROM "schema" AS s0|
975
+ assert all ( query ) == ~s| SELECT (s0.\" meta\" #>array['\" a']::text[]) FROM "schema" AS s0|
976
+
977
+ query = Schema |> select ( [ s ] , json_extract_path ( s . meta , [ s . x ] ) ) |> plan ( )
978
+ assert all ( query ) == ~s| SELECT (s0.\" meta\" #>array[s0.\" x\" ]::text[]) FROM "schema" AS s0|
979
+
980
+ query = Schema |> select ( [ s ] , json_extract_path ( s . meta , [ "a" , s . x , 0 ] ) ) |> plan ( )
981
+
982
+ assert all ( query ) ==
983
+ ~s| SELECT (s0.\" meta\" #>array['a',s0.\" x\" ,0]::text[]) FROM "schema" AS s0|
984
+
985
+ squery =
986
+ Schema
987
+ |> where ( [ s ] , is_nil ( json_extract_path ( s . meta , [ parent_as ( :s ) . x ] ) ) )
988
+ |> select ( [ s ] , s . x )
989
+
990
+ query =
991
+ Schema |> from ( as: :s ) |> where ( [ s ] , s . x in subquery ( squery ) ) |> select ( [ s ] , s . x ) |> plan ( )
992
+
993
+ assert all ( query ) ==
994
+ ~s| SELECT s0.\" x\" FROM "schema" AS s0 WHERE (s0.\" x\" IN | <>
995
+ ~s| (SELECT ss0.\" x\" FROM \" schema\" AS ss0 WHERE ((ss0.\" meta\" #>array[s0.\" x\" ]::text[]) IS NULL)))|
976
996
end
977
997
978
998
test "optimized json_extract_path" do
@@ -985,10 +1005,12 @@ defmodule Ecto.Adapters.PostgresTest do
985
1005
query = Schema |> where ( [ s ] , s . meta [ "tags" ] [ 0 ] [ "name" ] == "123" ) |> select ( true ) |> plan ( )
986
1006
987
1007
assert all ( query ) ==
988
- ~s| SELECT TRUE FROM "schema" AS s0 WHERE (((s0."meta"#>'{" tags",0}' )@>'{"name": "123"}'))|
1008
+ ~s| SELECT TRUE FROM "schema" AS s0 WHERE (((s0."meta"#>array[' tags',0]::text[] )@>'{"name": "123"}'))|
989
1009
990
1010
query = Schema |> where ( [ s ] , s . meta [ 0 ] == "123" ) |> select ( true ) |> plan ( )
991
- assert all ( query ) == ~s| SELECT TRUE FROM "schema" AS s0 WHERE ((s0.\" meta\" #>'{0}') = '123')|
1011
+
1012
+ assert all ( query ) ==
1013
+ ~s| SELECT TRUE FROM "schema" AS s0 WHERE ((s0.\" meta\" #>array[0]::text[]) = '123')|
992
1014
993
1015
query = Schema |> where ( [ s ] , s . meta [ "enabled" ] == true ) |> select ( true ) |> plan ( )
994
1016
@@ -998,7 +1020,12 @@ defmodule Ecto.Adapters.PostgresTest do
998
1020
query = Schema |> where ( [ s ] , s . meta [ "extra" ] [ 0 ] [ "enabled" ] == false ) |> select ( true ) |> plan ( )
999
1021
1000
1022
assert all ( query ) ==
1001
- ~s| SELECT TRUE FROM "schema" AS s0 WHERE (((s0."meta"#>'{"extra",0}')@>'{"enabled": false}'))|
1023
+ ~s| SELECT TRUE FROM "schema" AS s0 WHERE (((s0."meta"#>array['extra',0]::text[])@>'{"enabled": false}'))|
1024
+
1025
+ query = Schema |> where ( [ s ] , s . meta [ s . x ] [ 0 ] [ "name" ] == "123" ) |> select ( true ) |> plan ( )
1026
+
1027
+ assert all ( query ) ==
1028
+ ~s| SELECT TRUE FROM "schema" AS s0 WHERE (((s0."meta"#>array[s0.\" x\" ,0]::text[])@>'{"name": "123"}'))|
1002
1029
end
1003
1030
1004
1031
test "nested expressions" do
0 commit comments