@@ -963,16 +963,36 @@ defmodule Ecto.Adapters.PostgresTest do
963963
964964 test "json_extract_path" do
965965 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|
967967
968968 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|
970970
971971 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|
973973
974974 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)))|
976996 end
977997
978998 test "optimized json_extract_path" do
@@ -985,10 +1005,12 @@ defmodule Ecto.Adapters.PostgresTest do
9851005 query = Schema |> where ( [ s ] , s . meta [ "tags" ] [ 0 ] [ "name" ] == "123" ) |> select ( true ) |> plan ( )
9861006
9871007 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"}'))|
9891009
9901010 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')|
9921014
9931015 query = Schema |> where ( [ s ] , s . meta [ "enabled" ] == true ) |> select ( true ) |> plan ( )
9941016
@@ -998,7 +1020,12 @@ defmodule Ecto.Adapters.PostgresTest do
9981020 query = Schema |> where ( [ s ] , s . meta [ "extra" ] [ 0 ] [ "enabled" ] == false ) |> select ( true ) |> plan ( )
9991021
10001022 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"}'))|
10021029 end
10031030
10041031 test "nested expressions" do
0 commit comments