# Correlated subquery cases derived from OpenStack Compute (nova):
#   https://github.com/openstack/nova

exec-ddl
create table flavors
(
	id Integer primary key,
	name String(255) not null,
	memory_mb Integer not null,
	vcpus Integer not null,
	root_gb Integer,
	ephemeral_gb Integer,
	flavorid String(255) not null,
	swap Integer default 0 not null,
	rxtx_factor Float default 1,
	vcpu_weight Integer,
	disabled Boolean default false,
	is_public Boolean default true,
	description Text,
	created_at Timestamp,
	updated_at Timestamp,
	unique (flavorid),
	unique (name)
)
----

exec-ddl
create table flavor_projects
(
    id Integer primary key,
    flavor_id Integer not null,
    project_id String(255) not null,
	created_at Timestamp,
	updated_at Timestamp,
    foreign key (flavor_id) references flavors (id),
    unique (flavor_id, project_id)
)
----

exec-ddl
create table flavor_extra_specs
(
    id Integer primary key,
    key String(255) not null,
    value String(255),
    flavor_id Integer not null,
	created_at Timestamp,
	updated_at Timestamp,
    foreign key (flavor_id) references flavors (id),
    unique index flavor_extra_specs_flavor_id_key_idx (flavor_id, key)
)
----

exec-ddl
create table instance_types
(
    id Integer primary key,
    name String(255),
    memory_mb Integer not null,
    vcpus Integer not null,
    root_gb Integer,
    ephemeral_gb Integer,
    flavorid String(255),
    swap Integer not null default 0,
    rxtx_factor Float default 1,
    vcpu_weight Integer,
    disabled Boolean default False,
    is_public Boolean default True,
    deleted Boolean,
	deleted_at Timestamp,
	created_at Timestamp,
	updated_at Timestamp,
    unique (flavorid, deleted),
    unique (name, deleted)
)
----

exec-ddl
create table instance_type_projects
(
    id Integer primary key,
    instance_type_id Integer not null,
    project_id String(255),
    deleted Boolean,
	deleted_at Timestamp,
	created_at Timestamp,
	updated_at Timestamp,
    foreign key (instance_type_id) references instance_types (id),
    unique (instance_type_id, project_id, deleted)
)
----

exec-ddl
create table instance_type_extra_specs
(
    id Integer primary key,
    key String(255),
    value String(255),
    instance_type_id Integer not null,
    deleted Boolean,
	deleted_at Timestamp,
	created_at Timestamp,
	updated_at Timestamp,
    foreign key (instance_type_id) references instance_types (id),
    index instance_type_extra_specs_instance_type_id_key_idx (instance_type_id, key),
    unique (instance_type_id, key, deleted)
)
----

opt
select anon_1.flavors_created_at as anon_1_flavors_created_at,
       anon_1.flavors_updated_at as anon_1_flavors_updated_at,
       anon_1.flavors_id as anon_1_flavors_id,
       anon_1.flavors_name as anon_1_flavors_name,
       anon_1.flavors_memory_mb as anon_1_flavors_memory_mb,
       anon_1.flavors_vcpus as anon_1_flavors_vcpus,
       anon_1.flavors_root_gb as anon_1_flavors_root_gb,
       anon_1.flavors_ephemeral_gb as anon_1_flavors_ephemeral_gb,
       anon_1.flavors_flavorid as anon_1_flavors_flavorid,
       anon_1.flavors_swap as anon_1_flavors_swap,
       anon_1.flavors_rxtx_factor as anon_1_flavors_rxtx_factor,
       anon_1.flavors_vcpu_weight as anon_1_flavors_vcpu_weight,
       anon_1.flavors_disabled as anon_1_flavors_disabled,
       anon_1.flavors_is_public as anon_1_flavors_is_public,
       flavor_extra_specs_1.created_at as flavor_extra_specs_1_created_at,
       flavor_extra_specs_1.updated_at as flavor_extra_specs_1_updated_at,
       flavor_extra_specs_1.id as flavor_extra_specs_1_id,
       flavor_extra_specs_1."key" as flavor_extra_specs_1_key,
       flavor_extra_specs_1.value as flavor_extra_specs_1_value,
       flavor_extra_specs_1.flavor_id as flavor_extra_specs_1_flavor_id
from (select flavors.created_at as flavors_created_at,
             flavors.updated_at as flavors_updated_at,
             flavors.id as flavors_id,
             flavors.name as flavors_name,
             flavors.memory_mb as flavors_memory_mb,
             flavors.vcpus as flavors_vcpus,
             flavors.root_gb as flavors_root_gb,
             flavors.ephemeral_gb as flavors_ephemeral_gb,
             flavors.flavorid as flavors_flavorid,
             flavors.swap as flavors_swap,
             flavors.rxtx_factor as flavors_rxtx_factor,
             flavors.vcpu_weight as flavors_vcpu_weight,
             flavors.disabled as flavors_disabled,
             flavors.is_public as flavors_is_public
      from flavors
      where (flavors.is_public = true
             or (exists (select 1
                         from flavor_projects
                         where flavor_projects.flavor_id = flavors.id
                               and flavor_projects.project_id = $1)))
            and flavors.flavorid = $2
      order by flavors.id asc
      offset $3 rows
      limit $4)
     as anon_1
     left join flavor_extra_specs as flavor_extra_specs_1
     on flavor_extra_specs_1.flavor_id = anon_1.flavors_id
order by anon_1.flavors_id asc
----
project
 ├── columns: anon_1_flavors_created_at:14 anon_1_flavors_updated_at:15 anon_1_flavors_id:1!null anon_1_flavors_name:2!null anon_1_flavors_memory_mb:3!null anon_1_flavors_vcpus:4!null anon_1_flavors_root_gb:5 anon_1_flavors_ephemeral_gb:6 anon_1_flavors_flavorid:7!null anon_1_flavors_swap:8!null anon_1_flavors_rxtx_factor:9 anon_1_flavors_vcpu_weight:10 anon_1_flavors_disabled:11 anon_1_flavors_is_public:12 flavor_extra_specs_1_created_at:33 flavor_extra_specs_1_updated_at:34 flavor_extra_specs_1_id:29 flavor_extra_specs_1_key:30 flavor_extra_specs_1_value:31 flavor_extra_specs_1_flavor_id:32
 ├── immutable, has-placeholder
 ├── key: (29)
 ├── fd: ()-->(1-12,14,15,32), (29)-->(30,31,33,34), (30)-->(29,31,33,34)
 └── left-join (lookup flavor_extra_specs [as=flavor_extra_specs_1])
      ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20 flavor_extra_specs_1.id:29 key:30 value:31 flavor_extra_specs_1.flavor_id:32 flavor_extra_specs_1.created_at:33 flavor_extra_specs_1.updated_at:34
      ├── key columns: [29] = [29]
      ├── lookup columns are key
      ├── immutable, has-placeholder
      ├── key: (29)
      ├── fd: ()-->(1-12,14,15,19,20,32), (29)-->(30,31,33,34), (30)-->(29,31,33,34)
      ├── left-join (lookup flavor_extra_specs@flavor_extra_specs_flavor_id_key_idx [as=flavor_extra_specs_1])
      │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20 flavor_extra_specs_1.id:29 key:30 flavor_extra_specs_1.flavor_id:32
      │    ├── key columns: [1] = [32]
      │    ├── immutable, has-placeholder
      │    ├── key: (29)
      │    ├── fd: ()-->(1-12,14,15,19,20,32), (29)-->(30), (30)-->(29)
      │    ├── limit
      │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
      │    │    ├── cardinality: [0 - 1]
      │    │    ├── immutable, has-placeholder
      │    │    ├── key: ()
      │    │    ├── fd: ()-->(1-12,14,15,19,20)
      │    │    ├── offset
      │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
      │    │    │    ├── cardinality: [0 - 1]
      │    │    │    ├── has-placeholder
      │    │    │    ├── key: ()
      │    │    │    ├── fd: ()-->(1-12,14,15,19,20)
      │    │    │    ├── select
      │    │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
      │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    ├── has-placeholder
      │    │    │    │    ├── key: ()
      │    │    │    │    ├── fd: ()-->(1-12,14,15,19,20)
      │    │    │    │    ├── left-join (lookup flavor_projects@flavor_projects_flavor_id_project_id_key)
      │    │    │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
      │    │    │    │    │    ├── key columns: [1] = [19]
      │    │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    │    ├── has-placeholder
      │    │    │    │    │    ├── key: ()
      │    │    │    │    │    ├── fd: ()-->(1-12,14,15,19,20)
      │    │    │    │    │    ├── project
      │    │    │    │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15
      │    │    │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    │    │    ├── has-placeholder
      │    │    │    │    │    │    ├── key: ()
      │    │    │    │    │    │    ├── fd: ()-->(1-12,14,15)
      │    │    │    │    │    │    └── inner-join (lookup flavors)
      │    │    │    │    │    │         ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 "$2":37!null
      │    │    │    │    │    │         ├── key columns: [1] = [1]
      │    │    │    │    │    │         ├── lookup columns are key
      │    │    │    │    │    │         ├── cardinality: [0 - 1]
      │    │    │    │    │    │         ├── has-placeholder
      │    │    │    │    │    │         ├── key: ()
      │    │    │    │    │    │         ├── fd: ()-->(1-12,14,15,37), (7)==(37), (37)==(7)
      │    │    │    │    │    │         ├── inner-join (lookup flavors@flavors_flavorid_key)
      │    │    │    │    │    │         │    ├── columns: flavors.id:1!null flavorid:7!null "$2":37!null
      │    │    │    │    │    │         │    ├── flags: disallow merge join
      │    │    │    │    │    │         │    ├── key columns: [37] = [7]
      │    │    │    │    │    │         │    ├── lookup columns are key
      │    │    │    │    │    │         │    ├── cardinality: [0 - 1]
      │    │    │    │    │    │         │    ├── has-placeholder
      │    │    │    │    │    │         │    ├── key: ()
      │    │    │    │    │    │         │    ├── fd: ()-->(1,7,37), (7)==(37), (37)==(7)
      │    │    │    │    │    │         │    ├── values
      │    │    │    │    │    │         │    │    ├── columns: "$2":37
      │    │    │    │    │    │         │    │    ├── cardinality: [1 - 1]
      │    │    │    │    │    │         │    │    ├── has-placeholder
      │    │    │    │    │    │         │    │    ├── key: ()
      │    │    │    │    │    │         │    │    ├── fd: ()-->(37)
      │    │    │    │    │    │         │    │    └── ($2,)
      │    │    │    │    │    │         │    └── filters (true)
      │    │    │    │    │    │         └── filters (true)
      │    │    │    │    │    └── filters
      │    │    │    │    │         └── project_id:20 = $1 [outer=(20), constraints=(/20: (/NULL - ]), fd=()-->(20)]
      │    │    │    │    └── filters
      │    │    │    │         └── is_public:12 OR (flavor_projects.flavor_id:19 IS NOT NULL) [outer=(12,19)]
      │    │    │    └── $3
      │    │    └── $4
      │    └── filters (true)
      └── filters (true)

opt
select anon_1.flavors_created_at as anon_1_flavors_created_at,
       anon_1.flavors_updated_at as anon_1_flavors_updated_at,
       anon_1.flavors_id as anon_1_flavors_id,
       anon_1.flavors_name as anon_1_flavors_name,
       anon_1.flavors_memory_mb as anon_1_flavors_memory_mb,
       anon_1.flavors_vcpus as anon_1_flavors_vcpus,
       anon_1.flavors_root_gb as anon_1_flavors_root_gb,
       anon_1.flavors_ephemeral_gb as anon_1_flavors_ephemeral_gb,
       anon_1.flavors_flavorid as anon_1_flavors_flavorid,
       anon_1.flavors_swap as anon_1_flavors_swap,
       anon_1.flavors_rxtx_factor as anon_1_flavors_rxtx_factor,
       anon_1.flavors_vcpu_weight as anon_1_flavors_vcpu_weight,
       anon_1.flavors_disabled as anon_1_flavors_disabled,
       anon_1.flavors_is_public as anon_1_flavors_is_public,
       flavor_extra_specs_1.created_at as flavor_extra_specs_1_created_at,
       flavor_extra_specs_1.updated_at as flavor_extra_specs_1_updated_at,
       flavor_extra_specs_1.id as flavor_extra_specs_1_id,
       flavor_extra_specs_1."key" as flavor_extra_specs_1_key,
       flavor_extra_specs_1.value as flavor_extra_specs_1_value,
       flavor_extra_specs_1.flavor_id as flavor_extra_specs_1_flavor_id
from (select flavors.created_at as flavors_created_at,
             flavors.updated_at as flavors_updated_at,
             flavors.id as flavors_id,
             flavors.name as flavors_name,
             flavors.memory_mb as flavors_memory_mb,
             flavors.vcpus as flavors_vcpus,
             flavors.root_gb as flavors_root_gb,
             flavors.ephemeral_gb as flavors_ephemeral_gb,
             flavors.flavorid as flavors_flavorid,
             flavors.swap as flavors_swap,
             flavors.rxtx_factor as flavors_rxtx_factor,
             flavors.vcpu_weight as flavors_vcpu_weight,
             flavors.disabled as flavors_disabled,
             flavors.is_public as flavors_is_public
      from flavors
      where (flavors.is_public = true
             or (exists (select 1
                         from flavor_projects
                         where flavor_projects.flavor_id = flavors.id
                               and flavor_projects.project_id = $1)))
            and flavors.disabled = false
            and (flavors.is_public = true
                 or (exists (select 1
                             from flavor_projects
                             where flavor_projects.flavor_id = flavors.id
                                   and flavor_projects.project_id = $2)))
      order by flavors.flavorid asc, flavors.id asc
      offset $3 rows
      limit $4)
     as anon_1
     left join flavor_extra_specs as flavor_extra_specs_1
     on flavor_extra_specs_1.flavor_id = anon_1.flavors_id
order by anon_1.flavors_flavorid asc, anon_1.flavors_id asc
----
sort
 ├── columns: anon_1_flavors_created_at:14 anon_1_flavors_updated_at:15 anon_1_flavors_id:1!null anon_1_flavors_name:2!null anon_1_flavors_memory_mb:3!null anon_1_flavors_vcpus:4!null anon_1_flavors_root_gb:5 anon_1_flavors_ephemeral_gb:6 anon_1_flavors_flavorid:7!null anon_1_flavors_swap:8!null anon_1_flavors_rxtx_factor:9 anon_1_flavors_vcpu_weight:10 anon_1_flavors_disabled:11!null anon_1_flavors_is_public:12 flavor_extra_specs_1_created_at:44 flavor_extra_specs_1_updated_at:45 flavor_extra_specs_1_id:40 flavor_extra_specs_1_key:41 flavor_extra_specs_1_value:42 flavor_extra_specs_1_flavor_id:43
 ├── immutable, has-placeholder
 ├── key: (1,40)
 ├── fd: ()-->(11), (1)-->(2-10,12,14,15), (7)-->(1-6,8-10,12,14,15), (2)-->(1,3-10,12,14,15), (40)-->(41-45), (41,43)-->(40,42,44,45)
 ├── ordering: +7 opt(11) [actual: +7]
 └── project
      ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11!null is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_extra_specs_1.id:40 key:41 value:42 flavor_extra_specs_1.flavor_id:43 flavor_extra_specs_1.created_at:44 flavor_extra_specs_1.updated_at:45
      ├── immutable, has-placeholder
      ├── key: (1,40)
      ├── fd: ()-->(11), (1)-->(2-10,12,14,15), (7)-->(1-6,8-10,12,14,15), (2)-->(1,3-10,12,14,15), (40)-->(41-45), (41,43)-->(40,42,44,45)
      └── right-join (hash)
           ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11!null is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20 flavor_projects.flavor_id:27 project_id:28 flavor_extra_specs_1.id:40 key:41 value:42 flavor_extra_specs_1.flavor_id:43 flavor_extra_specs_1.created_at:44 flavor_extra_specs_1.updated_at:45
           ├── immutable, has-placeholder
           ├── key: (1,40)
           ├── fd: ()-->(11), (1)-->(2-10,12,14,15,19,20,27,28), (7)-->(1-6,8-10,12,14,15), (2)-->(1,3-10,12,14,15), (40)-->(41-45), (41,43)-->(40,42,44,45)
           ├── scan flavor_extra_specs [as=flavor_extra_specs_1]
           │    ├── columns: flavor_extra_specs_1.id:40!null key:41!null value:42 flavor_extra_specs_1.flavor_id:43!null flavor_extra_specs_1.created_at:44 flavor_extra_specs_1.updated_at:45
           │    ├── key: (40)
           │    └── fd: (40)-->(41-45), (41,43)-->(40,42,44,45)
           ├── limit
           │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11!null is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20 flavor_projects.flavor_id:27 project_id:28
           │    ├── internal-ordering: +7 opt(11)
           │    ├── immutable, has-placeholder
           │    ├── key: (1)
           │    ├── fd: ()-->(11), (1)-->(2-10,12,14,15,19,20,27,28), (7)-->(1-6,8-10,12,14,15), (2)-->(1,3-10,12,14,15)
           │    ├── offset
           │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11!null is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20 flavor_projects.flavor_id:27 project_id:28
           │    │    ├── internal-ordering: +7 opt(11)
           │    │    ├── has-placeholder
           │    │    ├── key: (1)
           │    │    ├── fd: ()-->(11), (1)-->(2-10,12,14,15,19,20,27,28), (7)-->(1-6,8-10,12,14,15), (2)-->(1,3-10,12,14,15)
           │    │    ├── ordering: +7 opt(11) [actual: +7]
           │    │    ├── sort
           │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11!null is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20 flavor_projects.flavor_id:27 project_id:28
           │    │    │    ├── has-placeholder
           │    │    │    ├── key: (1)
           │    │    │    ├── fd: ()-->(11), (1)-->(2-10,12,14,15,19,20,27,28), (7)-->(1-6,8-10,12,14,15), (2)-->(1,3-10,12,14,15)
           │    │    │    ├── ordering: +7 opt(11) [actual: +7]
           │    │    │    └── select
           │    │    │         ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11!null is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20 flavor_projects.flavor_id:27 project_id:28
           │    │    │         ├── has-placeholder
           │    │    │         ├── key: (1)
           │    │    │         ├── fd: ()-->(11), (1)-->(2-10,12,14,15,19,20,27,28), (7)-->(1-6,8-10,12,14,15), (2)-->(1,3-10,12,14,15)
           │    │    │         ├── left-join (merge)
           │    │    │         │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11!null is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20 flavor_projects.flavor_id:27 project_id:28
           │    │    │         │    ├── left ordering: +1
           │    │    │         │    ├── right ordering: +27
           │    │    │         │    ├── has-placeholder
           │    │    │         │    ├── key: (1)
           │    │    │         │    ├── fd: ()-->(11), (1)-->(2-10,12,14,15,19,20,27,28), (7)-->(1-6,8-10,12,14,15), (2)-->(1,3-10,12,14,15)
           │    │    │         │    ├── select
           │    │    │         │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11!null is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
           │    │    │         │    │    ├── has-placeholder
           │    │    │         │    │    ├── key: (1)
           │    │    │         │    │    ├── fd: ()-->(11), (1)-->(2-10,12,14,15,19,20), (7)-->(1-6,8-10,12,14,15), (2)-->(1,3-10,12,14,15)
           │    │    │         │    │    ├── ordering: +1 opt(11) [actual: +1]
           │    │    │         │    │    ├── left-join (merge)
           │    │    │         │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11!null is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
           │    │    │         │    │    │    ├── left ordering: +1
           │    │    │         │    │    │    ├── right ordering: +19
           │    │    │         │    │    │    ├── has-placeholder
           │    │    │         │    │    │    ├── key: (1)
           │    │    │         │    │    │    ├── fd: ()-->(11), (1)-->(2-10,12,14,15,19,20), (7)-->(1-6,8-10,12,14,15), (2)-->(1,3-10,12,14,15)
           │    │    │         │    │    │    ├── ordering: +1 opt(11) [actual: +1]
           │    │    │         │    │    │    ├── select
           │    │    │         │    │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11!null is_public:12 flavors.created_at:14 flavors.updated_at:15
           │    │    │         │    │    │    │    ├── key: (1)
           │    │    │         │    │    │    │    ├── fd: ()-->(11), (1)-->(2-10,12,14,15), (7)-->(1-6,8-10,12,14,15), (2)-->(1,3-10,12,14,15)
           │    │    │         │    │    │    │    ├── ordering: +1 opt(11) [actual: +1]
           │    │    │         │    │    │    │    ├── scan flavors
           │    │    │         │    │    │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15
           │    │    │         │    │    │    │    │    ├── key: (1)
           │    │    │         │    │    │    │    │    ├── fd: (1)-->(2-12,14,15), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15)
           │    │    │         │    │    │    │    │    └── ordering: +1
           │    │    │         │    │    │    │    └── filters
           │    │    │         │    │    │    │         └── NOT disabled:11 [outer=(11), constraints=(/11: [/false - /false]; tight), fd=()-->(11)]
           │    │    │         │    │    │    ├── select
           │    │    │         │    │    │    │    ├── columns: flavor_projects.flavor_id:19!null project_id:20!null
           │    │    │         │    │    │    │    ├── has-placeholder
           │    │    │         │    │    │    │    ├── key: (19)
           │    │    │         │    │    │    │    ├── fd: ()-->(20)
           │    │    │         │    │    │    │    ├── ordering: +19 opt(20) [actual: +19]
           │    │    │         │    │    │    │    ├── scan flavor_projects@flavor_projects_flavor_id_project_id_key
           │    │    │         │    │    │    │    │    ├── columns: flavor_projects.flavor_id:19!null project_id:20!null
           │    │    │         │    │    │    │    │    ├── key: (19,20)
           │    │    │         │    │    │    │    │    └── ordering: +19
           │    │    │         │    │    │    │    └── filters
           │    │    │         │    │    │    │         └── project_id:20 = $1 [outer=(20), constraints=(/20: (/NULL - ]), fd=()-->(20)]
           │    │    │         │    │    │    └── filters (true)
           │    │    │         │    │    └── filters
           │    │    │         │    │         └── is_public:12 OR (flavor_projects.flavor_id:19 IS NOT NULL) [outer=(12,19)]
           │    │    │         │    ├── select
           │    │    │         │    │    ├── columns: flavor_projects.flavor_id:27!null project_id:28!null
           │    │    │         │    │    ├── has-placeholder
           │    │    │         │    │    ├── key: (27)
           │    │    │         │    │    ├── fd: ()-->(28)
           │    │    │         │    │    ├── ordering: +27 opt(28) [actual: +27]
           │    │    │         │    │    ├── scan flavor_projects@flavor_projects_flavor_id_project_id_key
           │    │    │         │    │    │    ├── columns: flavor_projects.flavor_id:27!null project_id:28!null
           │    │    │         │    │    │    ├── key: (27,28)
           │    │    │         │    │    │    └── ordering: +27
           │    │    │         │    │    └── filters
           │    │    │         │    │         └── project_id:28 = $2 [outer=(28), constraints=(/28: (/NULL - ]), fd=()-->(28)]
           │    │    │         │    └── filters (true)
           │    │    │         └── filters
           │    │    │              └── is_public:12 OR (flavor_projects.flavor_id:27 IS NOT NULL) [outer=(12,27)]
           │    │    └── $3
           │    └── $4
           └── filters
                └── flavor_extra_specs_1.flavor_id:43 = flavors.id:1 [outer=(1,43), constraints=(/1: (/NULL - ]; /43: (/NULL - ]), fd=(1)==(43), (43)==(1)]

opt
select anon_1.instance_types_created_at as anon_1_instance_types_created_at,
       anon_1.instance_types_updated_at as anon_1_instance_types_updated_at,
       anon_1.instance_types_deleted_at as anon_1_instance_types_deleted_at,
       anon_1.instance_types_deleted as anon_1_instance_types_deleted,
       anon_1.instance_types_id as anon_1_instance_types_id,
       anon_1.instance_types_name as anon_1_instance_types_name,
       anon_1.instance_types_memory_mb as anon_1_instance_types_memory_mb,
       anon_1.instance_types_vcpus as anon_1_instance_types_vcpus,
       anon_1.instance_types_root_gb as anon_1_instance_types_root_gb,
       anon_1.instance_types_ephemeral_gb as anon_1_instance_types_ephemeral_gb,
       anon_1.instance_types_flavorid as anon_1_instance_types_flavorid,
       anon_1.instance_types_swap as anon_1_instance_types_swap,
       anon_1.instance_types_rxtx_factor as anon_1_instance_types_rxtx_factor,
       anon_1.instance_types_vcpu_weight as anon_1_instance_types_vcpu_weight,
       anon_1.instance_types_disabled as anon_1_instance_types_disabled,
       anon_1.instance_types_is_public as anon_1_instance_types_is_public,
       instance_type_extra_specs_1.created_at as instance_type_extra_specs_1_created_at,
       instance_type_extra_specs_1.updated_at as instance_type_extra_specs_1_updated_at,
       instance_type_extra_specs_1.deleted_at as instance_type_extra_specs_1_deleted_at,
       instance_type_extra_specs_1.deleted as instance_type_extra_specs_1_deleted,
       instance_type_extra_specs_1.id as instance_type_extra_specs_1_id,
       instance_type_extra_specs_1."key" as instance_type_extra_specs_1_key,
       instance_type_extra_specs_1.value as instance_type_extra_specs_1_value,
       instance_type_extra_specs_1.instance_type_id as instance_type_extra_specs_1_instance_type_id
from (select instance_types.created_at as instance_types_created_at,
             instance_types.updated_at as instance_types_updated_at,
             instance_types.deleted_at as instance_types_deleted_at,
             instance_types.deleted as instance_types_deleted,
             instance_types.id as instance_types_id,
             instance_types.name as instance_types_name,
             instance_types.memory_mb as instance_types_memory_mb,
             instance_types.vcpus as instance_types_vcpus,
             instance_types.root_gb as instance_types_root_gb,
             instance_types.ephemeral_gb as instance_types_ephemeral_gb,
             instance_types.flavorid as instance_types_flavorid,
             instance_types.swap as instance_types_swap,
             instance_types.rxtx_factor as instance_types_rxtx_factor,
             instance_types.vcpu_weight as instance_types_vcpu_weight,
             instance_types.disabled as instance_types_disabled,
             instance_types.is_public as instance_types_is_public
      from instance_types
      where instance_types.deleted = $1
            and (instance_types.is_public = true
                 or (exists (select 1
                             from instance_type_projects
                             where instance_type_projects.instance_type_id = instance_types.id
                                   and instance_type_projects.deleted = $2
                                   and instance_type_projects.deleted = $3
                                   and instance_type_projects.project_id = $4)))
      order by instance_types.flavorid asc, instance_types.id asc
      offset $5 rows
      limit $6)
     as anon_1
     left join instance_type_extra_specs as instance_type_extra_specs_1
     on instance_type_extra_specs_1.instance_type_id = anon_1.instance_types_id
        and instance_type_extra_specs_1.deleted = $7
order by anon_1.instance_types_flavorid asc,
         anon_1.instance_types_id asc
----
sort
 ├── columns: anon_1_instance_types_created_at:15 anon_1_instance_types_updated_at:16 anon_1_instance_types_deleted_at:14 anon_1_instance_types_deleted:13!null anon_1_instance_types_id:1!null anon_1_instance_types_name:2 anon_1_instance_types_memory_mb:3!null anon_1_instance_types_vcpus:4!null anon_1_instance_types_root_gb:5 anon_1_instance_types_ephemeral_gb:6 anon_1_instance_types_flavorid:7 anon_1_instance_types_swap:8!null anon_1_instance_types_rxtx_factor:9 anon_1_instance_types_vcpu_weight:10 anon_1_instance_types_disabled:11 anon_1_instance_types_is_public:12 instance_type_extra_specs_1_created_at:38 instance_type_extra_specs_1_updated_at:39 instance_type_extra_specs_1_deleted_at:37 instance_type_extra_specs_1_deleted:36 instance_type_extra_specs_1_id:32 instance_type_extra_specs_1_key:33 instance_type_extra_specs_1_value:34 instance_type_extra_specs_1_instance_type_id:35
 ├── immutable, has-placeholder
 ├── key: (1,32)
 ├── fd: ()-->(13), (1)-->(2-12,14-16), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16), (32)-->(33-35,37-39), (33,35,36)~~>(32,34,37-39), (1,32)-->(36)
 ├── ordering: +7,+1 opt(13) [actual: +7,+1]
 └── project
      ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_extra_specs_1.id:32 key:33 value:34 instance_type_extra_specs_1.instance_type_id:35 instance_type_extra_specs_1.deleted:36 instance_type_extra_specs_1.deleted_at:37 instance_type_extra_specs_1.created_at:38 instance_type_extra_specs_1.updated_at:39
      ├── immutable, has-placeholder
      ├── key: (1,32)
      ├── fd: ()-->(13), (1)-->(2-12,14-16), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16), (32)-->(33-35,37-39), (33,35,36)~~>(32,34,37-39), (1,32)-->(36)
      └── right-join (hash)
           ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22 instance_type_extra_specs_1.id:32 key:33 value:34 instance_type_extra_specs_1.instance_type_id:35 instance_type_extra_specs_1.deleted:36 instance_type_extra_specs_1.deleted_at:37 instance_type_extra_specs_1.created_at:38 instance_type_extra_specs_1.updated_at:39
           ├── immutable, has-placeholder
           ├── key: (1,32)
           ├── fd: ()-->(13), (1)-->(2-12,14-16,20-22), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16), (32)-->(33-35,37-39), (33,35,36)~~>(32,34,37-39), (1,32)-->(36)
           ├── select
           │    ├── columns: instance_type_extra_specs_1.id:32!null key:33 value:34 instance_type_extra_specs_1.instance_type_id:35!null instance_type_extra_specs_1.deleted:36!null instance_type_extra_specs_1.deleted_at:37 instance_type_extra_specs_1.created_at:38 instance_type_extra_specs_1.updated_at:39
           │    ├── has-placeholder
           │    ├── key: (32)
           │    ├── fd: ()-->(36), (32)-->(33-35,37-39), (33,35,36)~~>(32,34,37-39)
           │    ├── scan instance_type_extra_specs [as=instance_type_extra_specs_1]
           │    │    ├── columns: instance_type_extra_specs_1.id:32!null key:33 value:34 instance_type_extra_specs_1.instance_type_id:35!null instance_type_extra_specs_1.deleted:36 instance_type_extra_specs_1.deleted_at:37 instance_type_extra_specs_1.created_at:38 instance_type_extra_specs_1.updated_at:39
           │    │    ├── key: (32)
           │    │    └── fd: (32)-->(33-39), (33,35,36)~~>(32,34,37-39)
           │    └── filters
           │         └── instance_type_extra_specs_1.deleted:36 = $7 [outer=(36), constraints=(/36: (/NULL - ]), fd=()-->(36)]
           ├── limit
           │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
           │    ├── internal-ordering: +7,+1 opt(13)
           │    ├── immutable, has-placeholder
           │    ├── key: (1)
           │    ├── fd: ()-->(13), (1)-->(2-12,14-16,20-22), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    ├── offset
           │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
           │    │    ├── internal-ordering: +7,+1 opt(13)
           │    │    ├── has-placeholder
           │    │    ├── key: (1)
           │    │    ├── fd: ()-->(13), (1)-->(2-12,14-16,20-22), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    ├── ordering: +7,+1 opt(13) [actual: +7,+1]
           │    │    ├── sort
           │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
           │    │    │    ├── has-placeholder
           │    │    │    ├── key: (1)
           │    │    │    ├── fd: ()-->(13), (1)-->(2-12,14-16,20-22), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    │    ├── ordering: +7,+1 opt(13) [actual: +7,+1]
           │    │    │    └── select
           │    │    │         ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
           │    │    │         ├── has-placeholder
           │    │    │         ├── key: (1)
           │    │    │         ├── fd: ()-->(13), (1)-->(2-12,14-16,20-22), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    │         ├── left-join (merge)
           │    │    │         │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
           │    │    │         │    ├── left ordering: +1
           │    │    │         │    ├── right ordering: +20
           │    │    │         │    ├── has-placeholder
           │    │    │         │    ├── key: (1)
           │    │    │         │    ├── fd: ()-->(13), (1)-->(2-12,14-16,20-22), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    │         │    ├── select
           │    │    │         │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16
           │    │    │         │    │    ├── has-placeholder
           │    │    │         │    │    ├── key: (1)
           │    │    │         │    │    ├── fd: ()-->(13), (1)-->(2-12,14-16), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    │         │    │    ├── ordering: +1 opt(13) [actual: +1]
           │    │    │         │    │    ├── scan instance_types
           │    │    │         │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13 instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16
           │    │    │         │    │    │    ├── key: (1)
           │    │    │         │    │    │    ├── fd: (1)-->(2-16), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    │         │    │    │    └── ordering: +1
           │    │    │         │    │    └── filters
           │    │    │         │    │         └── instance_types.deleted:13 = $1 [outer=(13), constraints=(/13: (/NULL - ]), fd=()-->(13)]
           │    │    │         │    ├── select
           │    │    │         │    │    ├── columns: instance_type_projects.instance_type_id:20!null project_id:21!null instance_type_projects.deleted:22!null
           │    │    │         │    │    ├── has-placeholder
           │    │    │         │    │    ├── key: (20)
           │    │    │         │    │    ├── fd: ()-->(21,22)
           │    │    │         │    │    ├── ordering: +20 opt(21,22) [actual: +20]
           │    │    │         │    │    ├── scan instance_type_projects@instance_type_projects_instance_type_id_project_id_deleted_key
           │    │    │         │    │    │    ├── columns: instance_type_projects.instance_type_id:20!null project_id:21 instance_type_projects.deleted:22
           │    │    │         │    │    │    ├── lax-key: (20-22)
           │    │    │         │    │    │    └── ordering: +20
           │    │    │         │    │    └── filters
           │    │    │         │    │         ├── instance_type_projects.deleted:22 = $2 [outer=(22), constraints=(/22: (/NULL - ]), fd=()-->(22)]
           │    │    │         │    │         ├── instance_type_projects.deleted:22 = $3 [outer=(22), constraints=(/22: (/NULL - ]), fd=()-->(22)]
           │    │    │         │    │         └── project_id:21 = $4 [outer=(21), constraints=(/21: (/NULL - ]), fd=()-->(21)]
           │    │    │         │    └── filters (true)
           │    │    │         └── filters
           │    │    │              └── is_public:12 OR (instance_type_projects.instance_type_id:20 IS NOT NULL) [outer=(12,20)]
           │    │    └── $5
           │    └── $6
           └── filters
                └── instance_type_extra_specs_1.instance_type_id:35 = instance_types.id:1 [outer=(1,35), constraints=(/1: (/NULL - ]; /35: (/NULL - ]), fd=(1)==(35), (35)==(1)]

opt
select instance_types.created_at as instance_types_created_at,
       instance_types.updated_at as instance_types_updated_at,
       instance_types.deleted_at as instance_types_deleted_at,
       instance_types.deleted as instance_types_deleted,
       instance_types.id as instance_types_id,
       instance_types.name as instance_types_name,
       instance_types.memory_mb as instance_types_memory_mb,
       instance_types.vcpus as instance_types_vcpus,
       instance_types.root_gb as instance_types_root_gb,
       instance_types.ephemeral_gb as instance_types_ephemeral_gb,
       instance_types.flavorid as instance_types_flavorid,
       instance_types.swap as instance_types_swap,
       instance_types.rxtx_factor as instance_types_rxtx_factor,
       instance_types.vcpu_weight as instance_types_vcpu_weight,
       instance_types.disabled as instance_types_disabled,
       instance_types.is_public as instance_types_is_public,
       instance_type_extra_specs_1.created_at as instance_type_extra_specs_1_created_at,
       instance_type_extra_specs_1.updated_at as instance_type_extra_specs_1_updated_at,
       instance_type_extra_specs_1.deleted_at as instance_type_extra_specs_1_deleted_at,
       instance_type_extra_specs_1.deleted as instance_type_extra_specs_1_deleted,
       instance_type_extra_specs_1.id as instance_type_extra_specs_1_id,
       instance_type_extra_specs_1."key" as instance_type_extra_specs_1_key,
       instance_type_extra_specs_1.value as instance_type_extra_specs_1_value,
       instance_type_extra_specs_1.instance_type_id as instance_type_extra_specs_1_instance_type_id
from instance_types
     left join instance_type_extra_specs as instance_type_extra_specs_1
     on instance_type_extra_specs_1.instance_type_id = instance_types.id
        and instance_type_extra_specs_1.deleted = $1
where instance_types.deleted = $2
      and (instance_types.is_public = true
           or (exists (select 1
                       from instance_type_projects
                       where instance_type_projects.instance_type_id = instance_types.id
                             and instance_type_projects.deleted = $3
                             and instance_type_projects.project_id = $4)))
order by instance_types.flavorid asc, instance_types.id asc
----
sort
 ├── columns: instance_types_created_at:15 instance_types_updated_at:16 instance_types_deleted_at:14 instance_types_deleted:13!null instance_types_id:1!null instance_types_name:2 instance_types_memory_mb:3!null instance_types_vcpus:4!null instance_types_root_gb:5 instance_types_ephemeral_gb:6 instance_types_flavorid:7 instance_types_swap:8!null instance_types_rxtx_factor:9 instance_types_vcpu_weight:10 instance_types_disabled:11 instance_types_is_public:12 instance_type_extra_specs_1_created_at:25 instance_type_extra_specs_1_updated_at:26 instance_type_extra_specs_1_deleted_at:24 instance_type_extra_specs_1_deleted:23 instance_type_extra_specs_1_id:19 instance_type_extra_specs_1_key:20 instance_type_extra_specs_1_value:21 instance_type_extra_specs_1_instance_type_id:22
 ├── has-placeholder
 ├── key: (1,19)
 ├── fd: ()-->(13), (1)-->(2-12,14-16), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16), (19)-->(20-22,24-26), (20,22,23)~~>(19,21,24-26), (1,19)-->(23)
 ├── ordering: +7,+1 opt(13) [actual: +7,+1]
 └── project
      ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_extra_specs_1.id:19 key:20 value:21 instance_type_extra_specs_1.instance_type_id:22 instance_type_extra_specs_1.deleted:23 instance_type_extra_specs_1.deleted_at:24 instance_type_extra_specs_1.created_at:25 instance_type_extra_specs_1.updated_at:26
      ├── has-placeholder
      ├── key: (1,19)
      ├── fd: ()-->(13), (1)-->(2-12,14-16), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16), (19)-->(20-22,24-26), (20,22,23)~~>(19,21,24-26), (1,19)-->(23)
      └── right-join (hash)
           ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_extra_specs_1.id:19 key:20 value:21 instance_type_extra_specs_1.instance_type_id:22 instance_type_extra_specs_1.deleted:23 instance_type_extra_specs_1.deleted_at:24 instance_type_extra_specs_1.created_at:25 instance_type_extra_specs_1.updated_at:26 instance_type_projects.instance_type_id:30 project_id:31 instance_type_projects.deleted:32
           ├── has-placeholder
           ├── key: (1,19)
           ├── fd: ()-->(13), (1)-->(2-12,14-16,30-32), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16), (19)-->(20-22,24-26), (20,22,23)~~>(19,21,24-26), (1,19)-->(23)
           ├── select
           │    ├── columns: instance_type_extra_specs_1.id:19!null key:20 value:21 instance_type_extra_specs_1.instance_type_id:22!null instance_type_extra_specs_1.deleted:23!null instance_type_extra_specs_1.deleted_at:24 instance_type_extra_specs_1.created_at:25 instance_type_extra_specs_1.updated_at:26
           │    ├── has-placeholder
           │    ├── key: (19)
           │    ├── fd: ()-->(23), (19)-->(20-22,24-26), (20,22,23)~~>(19,21,24-26)
           │    ├── scan instance_type_extra_specs [as=instance_type_extra_specs_1]
           │    │    ├── columns: instance_type_extra_specs_1.id:19!null key:20 value:21 instance_type_extra_specs_1.instance_type_id:22!null instance_type_extra_specs_1.deleted:23 instance_type_extra_specs_1.deleted_at:24 instance_type_extra_specs_1.created_at:25 instance_type_extra_specs_1.updated_at:26
           │    │    ├── key: (19)
           │    │    └── fd: (19)-->(20-26), (20,22,23)~~>(19,21,24-26)
           │    └── filters
           │         └── instance_type_extra_specs_1.deleted:23 = $1 [outer=(23), constraints=(/23: (/NULL - ]), fd=()-->(23)]
           ├── select
           │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:30 project_id:31 instance_type_projects.deleted:32
           │    ├── has-placeholder
           │    ├── key: (1)
           │    ├── fd: ()-->(13), (1)-->(2-12,14-16,30-32), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    ├── left-join (merge)
           │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:30 project_id:31 instance_type_projects.deleted:32
           │    │    ├── left ordering: +1
           │    │    ├── right ordering: +30
           │    │    ├── has-placeholder
           │    │    ├── key: (1)
           │    │    ├── fd: ()-->(13), (1)-->(2-12,14-16,30-32), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    ├── select
           │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16
           │    │    │    ├── has-placeholder
           │    │    │    ├── key: (1)
           │    │    │    ├── fd: ()-->(13), (1)-->(2-12,14-16), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    │    ├── ordering: +1 opt(13) [actual: +1]
           │    │    │    ├── scan instance_types
           │    │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13 instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16
           │    │    │    │    ├── key: (1)
           │    │    │    │    ├── fd: (1)-->(2-16), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    │    │    └── ordering: +1
           │    │    │    └── filters
           │    │    │         └── instance_types.deleted:13 = $2 [outer=(13), constraints=(/13: (/NULL - ]), fd=()-->(13)]
           │    │    ├── select
           │    │    │    ├── columns: instance_type_projects.instance_type_id:30!null project_id:31!null instance_type_projects.deleted:32!null
           │    │    │    ├── has-placeholder
           │    │    │    ├── key: (30)
           │    │    │    ├── fd: ()-->(31,32)
           │    │    │    ├── ordering: +30 opt(31,32) [actual: +30]
           │    │    │    ├── scan instance_type_projects@instance_type_projects_instance_type_id_project_id_deleted_key
           │    │    │    │    ├── columns: instance_type_projects.instance_type_id:30!null project_id:31 instance_type_projects.deleted:32
           │    │    │    │    ├── lax-key: (30-32)
           │    │    │    │    └── ordering: +30
           │    │    │    └── filters
           │    │    │         ├── instance_type_projects.deleted:32 = $3 [outer=(32), constraints=(/32: (/NULL - ]), fd=()-->(32)]
           │    │    │         └── project_id:31 = $4 [outer=(31), constraints=(/31: (/NULL - ]), fd=()-->(31)]
           │    │    └── filters (true)
           │    └── filters
           │         └── is_public:12 OR (instance_type_projects.instance_type_id:30 IS NOT NULL) [outer=(12,30)]
           └── filters
                └── instance_type_extra_specs_1.instance_type_id:22 = instance_types.id:1 [outer=(1,22), constraints=(/1: (/NULL - ]; /22: (/NULL - ]), fd=(1)==(22), (22)==(1)]

opt
select anon_1.instance_types_created_at as anon_1_instance_types_created_at,
       anon_1.instance_types_updated_at as anon_1_instance_types_updated_at,
       anon_1.instance_types_deleted_at as anon_1_instance_types_deleted_at,
       anon_1.instance_types_deleted as anon_1_instance_types_deleted,
       anon_1.instance_types_id as anon_1_instance_types_id,
       anon_1.instance_types_name as anon_1_instance_types_name,
       anon_1.instance_types_memory_mb as anon_1_instance_types_memory_mb,
       anon_1.instance_types_vcpus as anon_1_instance_types_vcpus,
       anon_1.instance_types_root_gb as anon_1_instance_types_root_gb,
       anon_1.instance_types_ephemeral_gb as anon_1_instance_types_ephemeral_gb,
       anon_1.instance_types_flavorid as anon_1_instance_types_flavorid,
       anon_1.instance_types_swap as anon_1_instance_types_swap,
       anon_1.instance_types_rxtx_factor as anon_1_instance_types_rxtx_factor,
       anon_1.instance_types_vcpu_weight as anon_1_instance_types_vcpu_weight,
       anon_1.instance_types_disabled as anon_1_instance_types_disabled,
       anon_1.instance_types_is_public as anon_1_instance_types_is_public,
       instance_type_extra_specs_1.created_at as instance_type_extra_specs_1_created_at,
       instance_type_extra_specs_1.updated_at as instance_type_extra_specs_1_updated_at,
       instance_type_extra_specs_1.deleted_at as instance_type_extra_specs_1_deleted_at,
       instance_type_extra_specs_1.deleted as instance_type_extra_specs_1_deleted,
       instance_type_extra_specs_1.id as instance_type_extra_specs_1_id,
       instance_type_extra_specs_1."key" as instance_type_extra_specs_1_key,
       instance_type_extra_specs_1.value as instance_type_extra_specs_1_value,
       instance_type_extra_specs_1.instance_type_id as instance_type_extra_specs_1_instance_type_id
from (select instance_types.created_at as instance_types_created_at,
             instance_types.updated_at as instance_types_updated_at,
             instance_types.deleted_at as instance_types_deleted_at,
             instance_types.deleted as instance_types_deleted,
             instance_types.id as instance_types_id,
             instance_types.name as instance_types_name,
             instance_types.memory_mb as instance_types_memory_mb,
             instance_types.vcpus as instance_types_vcpus,
             instance_types.root_gb as instance_types_root_gb,
             instance_types.ephemeral_gb as instance_types_ephemeral_gb,
             instance_types.flavorid as instance_types_flavorid,
             instance_types.swap as instance_types_swap,
             instance_types.rxtx_factor as instance_types_rxtx_factor,
             instance_types.vcpu_weight as instance_types_vcpu_weight,
             instance_types.disabled as instance_types_disabled,
             instance_types.is_public as instance_types_is_public
      from instance_types
      where instance_types.deleted = $1
            and (instance_types.is_public = true
                 or (exists (select 1
                             from instance_type_projects
                             where instance_type_projects.instance_type_id = instance_types.id
                                   and instance_type_projects.deleted = $2
                                   and instance_type_projects.project_id = $3)))
            and instance_types.name = $4
      offset $5 rows
      limit $6)
     as anon_1
     left join instance_type_extra_specs as instance_type_extra_specs_1
     on instance_type_extra_specs_1.instance_type_id = anon_1.instance_types_id
        and instance_type_extra_specs_1.deleted = $7
----
project
 ├── columns: anon_1_instance_types_created_at:15 anon_1_instance_types_updated_at:16 anon_1_instance_types_deleted_at:14 anon_1_instance_types_deleted:13!null anon_1_instance_types_id:1!null anon_1_instance_types_name:2!null anon_1_instance_types_memory_mb:3!null anon_1_instance_types_vcpus:4!null anon_1_instance_types_root_gb:5 anon_1_instance_types_ephemeral_gb:6 anon_1_instance_types_flavorid:7 anon_1_instance_types_swap:8!null anon_1_instance_types_rxtx_factor:9 anon_1_instance_types_vcpu_weight:10 anon_1_instance_types_disabled:11 anon_1_instance_types_is_public:12 instance_type_extra_specs_1_created_at:38 instance_type_extra_specs_1_updated_at:39 instance_type_extra_specs_1_deleted_at:37 instance_type_extra_specs_1_deleted:36 instance_type_extra_specs_1_id:32 instance_type_extra_specs_1_key:33 instance_type_extra_specs_1_value:34 instance_type_extra_specs_1_instance_type_id:35
 ├── immutable, has-placeholder
 ├── key: (32)
 ├── fd: ()-->(1-16,35), (32)-->(33,34,36-39), (33,35,36)~~>(32,34,37-39)
 └── left-join (lookup instance_type_extra_specs [as=instance_type_extra_specs_1])
      ├── columns: instance_types.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22 instance_type_extra_specs_1.id:32 key:33 value:34 instance_type_extra_specs_1.instance_type_id:35 instance_type_extra_specs_1.deleted:36 instance_type_extra_specs_1.deleted_at:37 instance_type_extra_specs_1.created_at:38 instance_type_extra_specs_1.updated_at:39
      ├── key columns: [32] = [32]
      ├── lookup columns are key
      ├── immutable, has-placeholder
      ├── key: (32)
      ├── fd: ()-->(1-16,20-22,35), (32)-->(33,34,36-39), (33,35,36)~~>(32,34,37-39)
      ├── left-join (lookup instance_type_extra_specs@instance_type_extra_specs_instance_type_id_key_deleted_key [as=instance_type_extra_specs_1])
      │    ├── columns: instance_types.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22 instance_type_extra_specs_1.id:32 key:33 instance_type_extra_specs_1.instance_type_id:35 instance_type_extra_specs_1.deleted:36
      │    ├── key columns: [1] = [35]
      │    ├── immutable, has-placeholder
      │    ├── key: (32)
      │    ├── fd: ()-->(1-16,20-22,35,36), (32)-->(33), (33,35,36)~~>(32)
      │    ├── limit
      │    │    ├── columns: instance_types.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
      │    │    ├── cardinality: [0 - 1]
      │    │    ├── immutable, has-placeholder
      │    │    ├── key: ()
      │    │    ├── fd: ()-->(1-16,20-22)
      │    │    ├── offset
      │    │    │    ├── columns: instance_types.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
      │    │    │    ├── cardinality: [0 - 1]
      │    │    │    ├── has-placeholder
      │    │    │    ├── key: ()
      │    │    │    ├── fd: ()-->(1-16,20-22)
      │    │    │    ├── select
      │    │    │    │    ├── columns: instance_types.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
      │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    ├── has-placeholder
      │    │    │    │    ├── key: ()
      │    │    │    │    ├── fd: ()-->(1-16,20-22)
      │    │    │    │    ├── left-join (lookup instance_type_projects@instance_type_projects_instance_type_id_project_id_deleted_key)
      │    │    │    │    │    ├── columns: instance_types.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
      │    │    │    │    │    ├── key columns: [1] = [20]
      │    │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    │    ├── has-placeholder
      │    │    │    │    │    ├── key: ()
      │    │    │    │    │    ├── fd: ()-->(1-16,20-22)
      │    │    │    │    │    ├── project
      │    │    │    │    │    │    ├── columns: instance_types.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16
      │    │    │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    │    │    ├── has-placeholder
      │    │    │    │    │    │    ├── key: ()
      │    │    │    │    │    │    ├── fd: ()-->(1-16)
      │    │    │    │    │    │    └── inner-join (lookup instance_types)
      │    │    │    │    │    │         ├── columns: instance_types.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 "$1":42!null "$4":43!null
      │    │    │    │    │    │         ├── key columns: [1] = [1]
      │    │    │    │    │    │         ├── lookup columns are key
      │    │    │    │    │    │         ├── cardinality: [0 - 1]
      │    │    │    │    │    │         ├── has-placeholder
      │    │    │    │    │    │         ├── key: ()
      │    │    │    │    │    │         ├── fd: ()-->(1-16,42,43), (13)==(42), (42)==(13), (2)==(43), (43)==(2)
      │    │    │    │    │    │         ├── inner-join (lookup instance_types@instance_types_name_deleted_key)
      │    │    │    │    │    │         │    ├── columns: instance_types.id:1!null name:2!null instance_types.deleted:13!null "$1":42!null "$4":43!null
      │    │    │    │    │    │         │    ├── flags: disallow merge join
      │    │    │    │    │    │         │    ├── key columns: [43 42] = [2 13]
      │    │    │    │    │    │         │    ├── lookup columns are key
      │    │    │    │    │    │         │    ├── cardinality: [0 - 1]
      │    │    │    │    │    │         │    ├── has-placeholder
      │    │    │    │    │    │         │    ├── key: ()
      │    │    │    │    │    │         │    ├── fd: ()-->(1,2,13,42,43), (2)==(43), (43)==(2), (13)==(42), (42)==(13)
      │    │    │    │    │    │         │    ├── values
      │    │    │    │    │    │         │    │    ├── columns: "$1":42 "$4":43
      │    │    │    │    │    │         │    │    ├── cardinality: [1 - 1]
      │    │    │    │    │    │         │    │    ├── has-placeholder
      │    │    │    │    │    │         │    │    ├── key: ()
      │    │    │    │    │    │         │    │    ├── fd: ()-->(42,43)
      │    │    │    │    │    │         │    │    └── ($1, $4)
      │    │    │    │    │    │         │    └── filters (true)
      │    │    │    │    │    │         └── filters (true)
      │    │    │    │    │    └── filters
      │    │    │    │    │         ├── instance_type_projects.deleted:22 = $2 [outer=(22), constraints=(/22: (/NULL - ]), fd=()-->(22)]
      │    │    │    │    │         └── project_id:21 = $3 [outer=(21), constraints=(/21: (/NULL - ]), fd=()-->(21)]
      │    │    │    │    └── filters
      │    │    │    │         └── is_public:12 OR (instance_type_projects.instance_type_id:20 IS NOT NULL) [outer=(12,20)]
      │    │    │    └── $5
      │    │    └── $6
      │    └── filters
      │         └── instance_type_extra_specs_1.deleted:36 = $7 [outer=(36), constraints=(/36: (/NULL - ]), fd=()-->(36)]
      └── filters (true)

opt
select anon_1.instance_types_created_at as anon_1_instance_types_created_at,
       anon_1.instance_types_updated_at as anon_1_instance_types_updated_at,
       anon_1.instance_types_deleted_at as anon_1_instance_types_deleted_at,
       anon_1.instance_types_deleted as anon_1_instance_types_deleted,
       anon_1.instance_types_id as anon_1_instance_types_id,
       anon_1.instance_types_name as anon_1_instance_types_name,
       anon_1.instance_types_memory_mb as anon_1_instance_types_memory_mb,
       anon_1.instance_types_vcpus as anon_1_instance_types_vcpus,
       anon_1.instance_types_root_gb as anon_1_instance_types_root_gb,
       anon_1.instance_types_ephemeral_gb as anon_1_instance_types_ephemeral_gb,
       anon_1.instance_types_flavorid as anon_1_instance_types_flavorid,
       anon_1.instance_types_swap as anon_1_instance_types_swap,
       anon_1.instance_types_rxtx_factor as anon_1_instance_types_rxtx_factor,
       anon_1.instance_types_vcpu_weight as anon_1_instance_types_vcpu_weight,
       anon_1.instance_types_disabled as anon_1_instance_types_disabled,
       anon_1.instance_types_is_public as anon_1_instance_types_is_public,
       instance_type_extra_specs_1.created_at as instance_type_extra_specs_1_created_at,
       instance_type_extra_specs_1.updated_at as instance_type_extra_specs_1_updated_at,
       instance_type_extra_specs_1.deleted_at as instance_type_extra_specs_1_deleted_at,
       instance_type_extra_specs_1.deleted as instance_type_extra_specs_1_deleted,
       instance_type_extra_specs_1.id as instance_type_extra_specs_1_id,
       instance_type_extra_specs_1."key" as instance_type_extra_specs_1_key,
       instance_type_extra_specs_1.value as instance_type_extra_specs_1_value,
       instance_type_extra_specs_1.instance_type_id as instance_type_extra_specs_1_instance_type_id
from (select instance_types.created_at as instance_types_created_at,
             instance_types.updated_at as instance_types_updated_at,
             instance_types.deleted_at as instance_types_deleted_at,
             instance_types.deleted as instance_types_deleted,
             instance_types.id as instance_types_id,
             instance_types.name as instance_types_name,
             instance_types.memory_mb as instance_types_memory_mb,
             instance_types.vcpus as instance_types_vcpus,
             instance_types.root_gb as instance_types_root_gb,
             instance_types.ephemeral_gb as instance_types_ephemeral_gb,
             instance_types.flavorid as instance_types_flavorid,
             instance_types.swap as instance_types_swap,
             instance_types.rxtx_factor as instance_types_rxtx_factor,
             instance_types.vcpu_weight as instance_types_vcpu_weight,
             instance_types.disabled as instance_types_disabled,
             instance_types.is_public as instance_types_is_public
      from instance_types
      where instance_types.deleted = $1
            and (instance_types.is_public = true
                 or (exists (select 1
                             from instance_type_projects
                             where instance_type_projects.instance_type_id = instance_types.id
                                   and instance_type_projects.deleted = $2
                                   and instance_type_projects.project_id = $3)))
            and instance_types.id = $4
      offset $5 rows
      limit $6)
     as anon_1
     left join instance_type_extra_specs as instance_type_extra_specs_1
     on instance_type_extra_specs_1.instance_type_id = anon_1.instance_types_id
        and instance_type_extra_specs_1.deleted = $7
----
project
 ├── columns: anon_1_instance_types_created_at:15 anon_1_instance_types_updated_at:16 anon_1_instance_types_deleted_at:14 anon_1_instance_types_deleted:13!null anon_1_instance_types_id:1!null anon_1_instance_types_name:2 anon_1_instance_types_memory_mb:3!null anon_1_instance_types_vcpus:4!null anon_1_instance_types_root_gb:5 anon_1_instance_types_ephemeral_gb:6 anon_1_instance_types_flavorid:7 anon_1_instance_types_swap:8!null anon_1_instance_types_rxtx_factor:9 anon_1_instance_types_vcpu_weight:10 anon_1_instance_types_disabled:11 anon_1_instance_types_is_public:12 instance_type_extra_specs_1_created_at:38 instance_type_extra_specs_1_updated_at:39 instance_type_extra_specs_1_deleted_at:37 instance_type_extra_specs_1_deleted:36 instance_type_extra_specs_1_id:32 instance_type_extra_specs_1_key:33 instance_type_extra_specs_1_value:34 instance_type_extra_specs_1_instance_type_id:35
 ├── immutable, has-placeholder
 ├── key: (32)
 ├── fd: ()-->(1-16,35), (32)-->(33,34,36-39), (33,35,36)~~>(32,34,37-39)
 └── left-join (lookup instance_type_extra_specs [as=instance_type_extra_specs_1])
      ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22 instance_type_extra_specs_1.id:32 key:33 value:34 instance_type_extra_specs_1.instance_type_id:35 instance_type_extra_specs_1.deleted:36 instance_type_extra_specs_1.deleted_at:37 instance_type_extra_specs_1.created_at:38 instance_type_extra_specs_1.updated_at:39
      ├── key columns: [32] = [32]
      ├── lookup columns are key
      ├── immutable, has-placeholder
      ├── key: (32)
      ├── fd: ()-->(1-16,20-22,35), (32)-->(33,34,36-39), (33,35,36)~~>(32,34,37-39)
      ├── left-join (lookup instance_type_extra_specs@instance_type_extra_specs_instance_type_id_key_deleted_key [as=instance_type_extra_specs_1])
      │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22 instance_type_extra_specs_1.id:32 key:33 instance_type_extra_specs_1.instance_type_id:35 instance_type_extra_specs_1.deleted:36
      │    ├── key columns: [1] = [35]
      │    ├── immutable, has-placeholder
      │    ├── key: (32)
      │    ├── fd: ()-->(1-16,20-22,35,36), (32)-->(33), (33,35,36)~~>(32)
      │    ├── limit
      │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
      │    │    ├── cardinality: [0 - 1]
      │    │    ├── immutable, has-placeholder
      │    │    ├── key: ()
      │    │    ├── fd: ()-->(1-16,20-22)
      │    │    ├── offset
      │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
      │    │    │    ├── cardinality: [0 - 1]
      │    │    │    ├── has-placeholder
      │    │    │    ├── key: ()
      │    │    │    ├── fd: ()-->(1-16,20-22)
      │    │    │    ├── select
      │    │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
      │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    ├── has-placeholder
      │    │    │    │    ├── key: ()
      │    │    │    │    ├── fd: ()-->(1-16,20-22)
      │    │    │    │    ├── left-join (merge)
      │    │    │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
      │    │    │    │    │    ├── left ordering: +1
      │    │    │    │    │    ├── right ordering: +20
      │    │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    │    ├── has-placeholder
      │    │    │    │    │    ├── key: ()
      │    │    │    │    │    ├── fd: ()-->(1-16,20-22)
      │    │    │    │    │    ├── project
      │    │    │    │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16
      │    │    │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    │    │    ├── has-placeholder
      │    │    │    │    │    │    ├── key: ()
      │    │    │    │    │    │    ├── fd: ()-->(1-16)
      │    │    │    │    │    │    └── inner-join (lookup instance_types)
      │    │    │    │    │    │         ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 "$4":42!null "$1":43!null
      │    │    │    │    │    │         ├── flags: disallow merge join
      │    │    │    │    │    │         ├── key columns: [42] = [1]
      │    │    │    │    │    │         ├── lookup columns are key
      │    │    │    │    │    │         ├── cardinality: [0 - 1]
      │    │    │    │    │    │         ├── has-placeholder
      │    │    │    │    │    │         ├── key: ()
      │    │    │    │    │    │         ├── fd: ()-->(1-16,42,43), (1)==(42), (42)==(1), (13)==(43), (43)==(13)
      │    │    │    │    │    │         ├── values
      │    │    │    │    │    │         │    ├── columns: "$4":42 "$1":43
      │    │    │    │    │    │         │    ├── cardinality: [1 - 1]
      │    │    │    │    │    │         │    ├── has-placeholder
      │    │    │    │    │    │         │    ├── key: ()
      │    │    │    │    │    │         │    ├── fd: ()-->(42,43)
      │    │    │    │    │    │         │    └── ($4, $1)
      │    │    │    │    │    │         └── filters
      │    │    │    │    │    │              └── instance_types.deleted:13 = "$1":43 [outer=(13,43), constraints=(/13: (/NULL - ]; /43: (/NULL - ]), fd=(13)==(43), (43)==(13)]
      │    │    │    │    │    ├── project
      │    │    │    │    │    │    ├── columns: instance_type_projects.instance_type_id:20!null project_id:21!null instance_type_projects.deleted:22!null
      │    │    │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    │    │    ├── has-placeholder
      │    │    │    │    │    │    ├── key: ()
      │    │    │    │    │    │    ├── fd: ()-->(20-22)
      │    │    │    │    │    │    └── inner-join (lookup instance_type_projects@instance_type_projects_instance_type_id_project_id_deleted_key)
      │    │    │    │    │    │         ├── columns: instance_type_projects.instance_type_id:20!null project_id:21!null instance_type_projects.deleted:22!null "$2":44!null "$3":45!null "$4":46!null
      │    │    │    │    │    │         ├── flags: disallow merge join
      │    │    │    │    │    │         ├── key columns: [46 45 44] = [20 21 22]
      │    │    │    │    │    │         ├── lookup columns are key
      │    │    │    │    │    │         ├── cardinality: [0 - 1]
      │    │    │    │    │    │         ├── has-placeholder
      │    │    │    │    │    │         ├── key: ()
      │    │    │    │    │    │         ├── fd: ()-->(20-22,44-46), (22)==(44), (44)==(22), (21)==(45), (45)==(21), (20)==(46), (46)==(20)
      │    │    │    │    │    │         ├── values
      │    │    │    │    │    │         │    ├── columns: "$2":44 "$3":45 "$4":46
      │    │    │    │    │    │         │    ├── cardinality: [1 - 1]
      │    │    │    │    │    │         │    ├── has-placeholder
      │    │    │    │    │    │         │    ├── key: ()
      │    │    │    │    │    │         │    ├── fd: ()-->(44-46)
      │    │    │    │    │    │         │    └── ($2, $3, $4)
      │    │    │    │    │    │         └── filters (true)
      │    │    │    │    │    └── filters (true)
      │    │    │    │    └── filters
      │    │    │    │         └── is_public:12 OR (instance_type_projects.instance_type_id:20 IS NOT NULL) [outer=(12,20)]
      │    │    │    └── $5
      │    │    └── $6
      │    └── filters
      │         └── instance_type_extra_specs_1.deleted:36 = $7 [outer=(36), constraints=(/36: (/NULL - ]), fd=()-->(36)]
      └── filters (true)

opt
select anon_1.flavors_created_at as anon_1_flavors_created_at,
       anon_1.flavors_updated_at as anon_1_flavors_updated_at,
       anon_1.flavors_id as anon_1_flavors_id,
       anon_1.flavors_name as anon_1_flavors_name,
       anon_1.flavors_memory_mb as anon_1_flavors_memory_mb,
       anon_1.flavors_vcpus as anon_1_flavors_vcpus,
       anon_1.flavors_root_gb as anon_1_flavors_root_gb,
       anon_1.flavors_ephemeral_gb as anon_1_flavors_ephemeral_gb,
       anon_1.flavors_flavorid as anon_1_flavors_flavorid,
       anon_1.flavors_swap as anon_1_flavors_swap,
       anon_1.flavors_rxtx_factor as anon_1_flavors_rxtx_factor,
       anon_1.flavors_vcpu_weight as anon_1_flavors_vcpu_weight,
       anon_1.flavors_disabled as anon_1_flavors_disabled,
       anon_1.flavors_is_public as anon_1_flavors_is_public,
       flavor_extra_specs_1.created_at as flavor_extra_specs_1_created_at,
       flavor_extra_specs_1.updated_at as flavor_extra_specs_1_updated_at,
       flavor_extra_specs_1.id as flavor_extra_specs_1_id,
       flavor_extra_specs_1."key" as flavor_extra_specs_1_key,
       flavor_extra_specs_1.value as flavor_extra_specs_1_value,
       flavor_extra_specs_1.flavor_id as flavor_extra_specs_1_flavor_id
from (select flavors.created_at as flavors_created_at,
             flavors.updated_at as flavors_updated_at,
             flavors.id as flavors_id,
             flavors.name as flavors_name,
             flavors.memory_mb as flavors_memory_mb,
             flavors.vcpus as flavors_vcpus,
             flavors.root_gb as flavors_root_gb,
             flavors.ephemeral_gb as flavors_ephemeral_gb,
             flavors.flavorid as flavors_flavorid,
             flavors.swap as flavors_swap,
             flavors.rxtx_factor as flavors_rxtx_factor,
             flavors.vcpu_weight as flavors_vcpu_weight,
             flavors.disabled as flavors_disabled,
             flavors.is_public as flavors_is_public
      from flavors
      where (flavors.is_public = true
             or (exists (select 1
                         from flavor_projects
                         where flavor_projects.flavor_id = flavors.id
                               and flavor_projects.project_id = $1)))
            and flavors.name = $2
      offset $3 rows
      limit $4)
     as anon_1
     left join flavor_extra_specs as flavor_extra_specs_1
     on flavor_extra_specs_1.flavor_id = anon_1.flavors_id
----
project
 ├── columns: anon_1_flavors_created_at:14 anon_1_flavors_updated_at:15 anon_1_flavors_id:1!null anon_1_flavors_name:2!null anon_1_flavors_memory_mb:3!null anon_1_flavors_vcpus:4!null anon_1_flavors_root_gb:5 anon_1_flavors_ephemeral_gb:6 anon_1_flavors_flavorid:7!null anon_1_flavors_swap:8!null anon_1_flavors_rxtx_factor:9 anon_1_flavors_vcpu_weight:10 anon_1_flavors_disabled:11 anon_1_flavors_is_public:12 flavor_extra_specs_1_created_at:33 flavor_extra_specs_1_updated_at:34 flavor_extra_specs_1_id:29 flavor_extra_specs_1_key:30 flavor_extra_specs_1_value:31 flavor_extra_specs_1_flavor_id:32
 ├── immutable, has-placeholder
 ├── key: (29)
 ├── fd: ()-->(1-12,14,15,32), (29)-->(30,31,33,34), (30)-->(29,31,33,34)
 └── left-join (lookup flavor_extra_specs [as=flavor_extra_specs_1])
      ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20 flavor_extra_specs_1.id:29 key:30 value:31 flavor_extra_specs_1.flavor_id:32 flavor_extra_specs_1.created_at:33 flavor_extra_specs_1.updated_at:34
      ├── key columns: [29] = [29]
      ├── lookup columns are key
      ├── immutable, has-placeholder
      ├── key: (29)
      ├── fd: ()-->(1-12,14,15,19,20,32), (29)-->(30,31,33,34), (30)-->(29,31,33,34)
      ├── left-join (lookup flavor_extra_specs@flavor_extra_specs_flavor_id_key_idx [as=flavor_extra_specs_1])
      │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20 flavor_extra_specs_1.id:29 key:30 flavor_extra_specs_1.flavor_id:32
      │    ├── key columns: [1] = [32]
      │    ├── immutable, has-placeholder
      │    ├── key: (29)
      │    ├── fd: ()-->(1-12,14,15,19,20,32), (29)-->(30), (30)-->(29)
      │    ├── limit
      │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
      │    │    ├── cardinality: [0 - 1]
      │    │    ├── immutable, has-placeholder
      │    │    ├── key: ()
      │    │    ├── fd: ()-->(1-12,14,15,19,20)
      │    │    ├── offset
      │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
      │    │    │    ├── cardinality: [0 - 1]
      │    │    │    ├── has-placeholder
      │    │    │    ├── key: ()
      │    │    │    ├── fd: ()-->(1-12,14,15,19,20)
      │    │    │    ├── select
      │    │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
      │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    ├── has-placeholder
      │    │    │    │    ├── key: ()
      │    │    │    │    ├── fd: ()-->(1-12,14,15,19,20)
      │    │    │    │    ├── left-join (lookup flavor_projects@flavor_projects_flavor_id_project_id_key)
      │    │    │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
      │    │    │    │    │    ├── key columns: [1] = [19]
      │    │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    │    ├── has-placeholder
      │    │    │    │    │    ├── key: ()
      │    │    │    │    │    ├── fd: ()-->(1-12,14,15,19,20)
      │    │    │    │    │    ├── project
      │    │    │    │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15
      │    │    │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    │    │    ├── has-placeholder
      │    │    │    │    │    │    ├── key: ()
      │    │    │    │    │    │    ├── fd: ()-->(1-12,14,15)
      │    │    │    │    │    │    └── inner-join (lookup flavors)
      │    │    │    │    │    │         ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 "$2":37!null
      │    │    │    │    │    │         ├── key columns: [1] = [1]
      │    │    │    │    │    │         ├── lookup columns are key
      │    │    │    │    │    │         ├── cardinality: [0 - 1]
      │    │    │    │    │    │         ├── has-placeholder
      │    │    │    │    │    │         ├── key: ()
      │    │    │    │    │    │         ├── fd: ()-->(1-12,14,15,37), (2)==(37), (37)==(2)
      │    │    │    │    │    │         ├── inner-join (lookup flavors@flavors_name_key)
      │    │    │    │    │    │         │    ├── columns: flavors.id:1!null name:2!null "$2":37!null
      │    │    │    │    │    │         │    ├── flags: disallow merge join
      │    │    │    │    │    │         │    ├── key columns: [37] = [2]
      │    │    │    │    │    │         │    ├── lookup columns are key
      │    │    │    │    │    │         │    ├── cardinality: [0 - 1]
      │    │    │    │    │    │         │    ├── has-placeholder
      │    │    │    │    │    │         │    ├── key: ()
      │    │    │    │    │    │         │    ├── fd: ()-->(1,2,37), (2)==(37), (37)==(2)
      │    │    │    │    │    │         │    ├── values
      │    │    │    │    │    │         │    │    ├── columns: "$2":37
      │    │    │    │    │    │         │    │    ├── cardinality: [1 - 1]
      │    │    │    │    │    │         │    │    ├── has-placeholder
      │    │    │    │    │    │         │    │    ├── key: ()
      │    │    │    │    │    │         │    │    ├── fd: ()-->(37)
      │    │    │    │    │    │         │    │    └── ($2,)
      │    │    │    │    │    │         │    └── filters (true)
      │    │    │    │    │    │         └── filters (true)
      │    │    │    │    │    └── filters
      │    │    │    │    │         └── project_id:20 = $1 [outer=(20), constraints=(/20: (/NULL - ]), fd=()-->(20)]
      │    │    │    │    └── filters
      │    │    │    │         └── is_public:12 OR (flavor_projects.flavor_id:19 IS NOT NULL) [outer=(12,19)]
      │    │    │    └── $3
      │    │    └── $4
      │    └── filters (true)
      └── filters (true)

opt
select anon_1.flavors_created_at as anon_1_flavors_created_at,
       anon_1.flavors_updated_at as anon_1_flavors_updated_at,
       anon_1.flavors_id as anon_1_flavors_id,
       anon_1.flavors_name as anon_1_flavors_name,
       anon_1.flavors_memory_mb as anon_1_flavors_memory_mb,
       anon_1.flavors_vcpus as anon_1_flavors_vcpus,
       anon_1.flavors_root_gb as anon_1_flavors_root_gb,
       anon_1.flavors_ephemeral_gb as anon_1_flavors_ephemeral_gb,
       anon_1.flavors_flavorid as anon_1_flavors_flavorid,
       anon_1.flavors_swap as anon_1_flavors_swap,
       anon_1.flavors_rxtx_factor as anon_1_flavors_rxtx_factor,
       anon_1.flavors_vcpu_weight as anon_1_flavors_vcpu_weight,
       anon_1.flavors_disabled as anon_1_flavors_disabled,
       anon_1.flavors_is_public as anon_1_flavors_is_public,
       flavor_extra_specs_1.created_at as flavor_extra_specs_1_created_at,
       flavor_extra_specs_1.updated_at as flavor_extra_specs_1_updated_at,
       flavor_extra_specs_1.id as flavor_extra_specs_1_id,
       flavor_extra_specs_1."key" as flavor_extra_specs_1_key,
       flavor_extra_specs_1.value as flavor_extra_specs_1_value,
       flavor_extra_specs_1.flavor_id as flavor_extra_specs_1_flavor_id
from (select flavors.created_at as flavors_created_at,
             flavors.updated_at as flavors_updated_at,
             flavors.id as flavors_id,
             flavors.name as flavors_name,
             flavors.memory_mb as flavors_memory_mb,
             flavors.vcpus as flavors_vcpus,
             flavors.root_gb as flavors_root_gb,
             flavors.ephemeral_gb as flavors_ephemeral_gb,
             flavors.flavorid as flavors_flavorid,
             flavors.swap as flavors_swap,
             flavors.rxtx_factor as flavors_rxtx_factor,
             flavors.vcpu_weight as flavors_vcpu_weight,
             flavors.disabled as flavors_disabled,
             flavors.is_public as flavors_is_public
      from flavors
      where (flavors.is_public = true
             or (exists (select 1
                         from flavor_projects
                         where flavor_projects.flavor_id = flavors.id
                               and flavor_projects.project_id = $1)))
            and flavors.flavorid = $2
      offset $3 rows
      limit $4)
     as anon_1
     left join flavor_extra_specs as flavor_extra_specs_1
     on flavor_extra_specs_1.flavor_id = anon_1.flavors_id
----
project
 ├── columns: anon_1_flavors_created_at:14 anon_1_flavors_updated_at:15 anon_1_flavors_id:1!null anon_1_flavors_name:2!null anon_1_flavors_memory_mb:3!null anon_1_flavors_vcpus:4!null anon_1_flavors_root_gb:5 anon_1_flavors_ephemeral_gb:6 anon_1_flavors_flavorid:7!null anon_1_flavors_swap:8!null anon_1_flavors_rxtx_factor:9 anon_1_flavors_vcpu_weight:10 anon_1_flavors_disabled:11 anon_1_flavors_is_public:12 flavor_extra_specs_1_created_at:33 flavor_extra_specs_1_updated_at:34 flavor_extra_specs_1_id:29 flavor_extra_specs_1_key:30 flavor_extra_specs_1_value:31 flavor_extra_specs_1_flavor_id:32
 ├── immutable, has-placeholder
 ├── key: (29)
 ├── fd: ()-->(1-12,14,15,32), (29)-->(30,31,33,34), (30)-->(29,31,33,34)
 └── left-join (lookup flavor_extra_specs [as=flavor_extra_specs_1])
      ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20 flavor_extra_specs_1.id:29 key:30 value:31 flavor_extra_specs_1.flavor_id:32 flavor_extra_specs_1.created_at:33 flavor_extra_specs_1.updated_at:34
      ├── key columns: [29] = [29]
      ├── lookup columns are key
      ├── immutable, has-placeholder
      ├── key: (29)
      ├── fd: ()-->(1-12,14,15,19,20,32), (29)-->(30,31,33,34), (30)-->(29,31,33,34)
      ├── left-join (lookup flavor_extra_specs@flavor_extra_specs_flavor_id_key_idx [as=flavor_extra_specs_1])
      │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20 flavor_extra_specs_1.id:29 key:30 flavor_extra_specs_1.flavor_id:32
      │    ├── key columns: [1] = [32]
      │    ├── immutable, has-placeholder
      │    ├── key: (29)
      │    ├── fd: ()-->(1-12,14,15,19,20,32), (29)-->(30), (30)-->(29)
      │    ├── limit
      │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
      │    │    ├── cardinality: [0 - 1]
      │    │    ├── immutable, has-placeholder
      │    │    ├── key: ()
      │    │    ├── fd: ()-->(1-12,14,15,19,20)
      │    │    ├── offset
      │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
      │    │    │    ├── cardinality: [0 - 1]
      │    │    │    ├── has-placeholder
      │    │    │    ├── key: ()
      │    │    │    ├── fd: ()-->(1-12,14,15,19,20)
      │    │    │    ├── select
      │    │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
      │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    ├── has-placeholder
      │    │    │    │    ├── key: ()
      │    │    │    │    ├── fd: ()-->(1-12,14,15,19,20)
      │    │    │    │    ├── left-join (lookup flavor_projects@flavor_projects_flavor_id_project_id_key)
      │    │    │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
      │    │    │    │    │    ├── key columns: [1] = [19]
      │    │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    │    ├── has-placeholder
      │    │    │    │    │    ├── key: ()
      │    │    │    │    │    ├── fd: ()-->(1-12,14,15,19,20)
      │    │    │    │    │    ├── project
      │    │    │    │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15
      │    │    │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    │    │    ├── has-placeholder
      │    │    │    │    │    │    ├── key: ()
      │    │    │    │    │    │    ├── fd: ()-->(1-12,14,15)
      │    │    │    │    │    │    └── inner-join (lookup flavors)
      │    │    │    │    │    │         ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 "$2":37!null
      │    │    │    │    │    │         ├── key columns: [1] = [1]
      │    │    │    │    │    │         ├── lookup columns are key
      │    │    │    │    │    │         ├── cardinality: [0 - 1]
      │    │    │    │    │    │         ├── has-placeholder
      │    │    │    │    │    │         ├── key: ()
      │    │    │    │    │    │         ├── fd: ()-->(1-12,14,15,37), (7)==(37), (37)==(7)
      │    │    │    │    │    │         ├── inner-join (lookup flavors@flavors_flavorid_key)
      │    │    │    │    │    │         │    ├── columns: flavors.id:1!null flavorid:7!null "$2":37!null
      │    │    │    │    │    │         │    ├── flags: disallow merge join
      │    │    │    │    │    │         │    ├── key columns: [37] = [7]
      │    │    │    │    │    │         │    ├── lookup columns are key
      │    │    │    │    │    │         │    ├── cardinality: [0 - 1]
      │    │    │    │    │    │         │    ├── has-placeholder
      │    │    │    │    │    │         │    ├── key: ()
      │    │    │    │    │    │         │    ├── fd: ()-->(1,7,37), (7)==(37), (37)==(7)
      │    │    │    │    │    │         │    ├── values
      │    │    │    │    │    │         │    │    ├── columns: "$2":37
      │    │    │    │    │    │         │    │    ├── cardinality: [1 - 1]
      │    │    │    │    │    │         │    │    ├── has-placeholder
      │    │    │    │    │    │         │    │    ├── key: ()
      │    │    │    │    │    │         │    │    ├── fd: ()-->(37)
      │    │    │    │    │    │         │    │    └── ($2,)
      │    │    │    │    │    │         │    └── filters (true)
      │    │    │    │    │    │         └── filters (true)
      │    │    │    │    │    └── filters
      │    │    │    │    │         └── project_id:20 = $1 [outer=(20), constraints=(/20: (/NULL - ]), fd=()-->(20)]
      │    │    │    │    └── filters
      │    │    │    │         └── is_public:12 OR (flavor_projects.flavor_id:19 IS NOT NULL) [outer=(12,19)]
      │    │    │    └── $3
      │    │    └── $4
      │    └── filters (true)
      └── filters (true)

opt
select anon_1.flavors_created_at as anon_1_flavors_created_at,
       anon_1.flavors_updated_at as anon_1_flavors_updated_at,
       anon_1.flavors_id as anon_1_flavors_id,
       anon_1.flavors_name as anon_1_flavors_name,
       anon_1.flavors_memory_mb as anon_1_flavors_memory_mb,
       anon_1.flavors_vcpus as anon_1_flavors_vcpus,
       anon_1.flavors_root_gb as anon_1_flavors_root_gb,
       anon_1.flavors_ephemeral_gb as anon_1_flavors_ephemeral_gb,
       anon_1.flavors_flavorid as anon_1_flavors_flavorid,
       anon_1.flavors_swap as anon_1_flavors_swap,
       anon_1.flavors_rxtx_factor as anon_1_flavors_rxtx_factor,
       anon_1.flavors_vcpu_weight as anon_1_flavors_vcpu_weight,
       anon_1.flavors_disabled as anon_1_flavors_disabled,
       anon_1.flavors_is_public as anon_1_flavors_is_public,
       flavor_extra_specs_1.created_at as flavor_extra_specs_1_created_at,
       flavor_extra_specs_1.updated_at as flavor_extra_specs_1_updated_at,
       flavor_extra_specs_1.id as flavor_extra_specs_1_id,
       flavor_extra_specs_1."key" as flavor_extra_specs_1_key,
       flavor_extra_specs_1.value as flavor_extra_specs_1_value,
       flavor_extra_specs_1.flavor_id as flavor_extra_specs_1_flavor_id
from (select flavors.created_at as flavors_created_at,
             flavors.updated_at as flavors_updated_at,
             flavors.id as flavors_id,
             flavors.name as flavors_name,
             flavors.memory_mb as flavors_memory_mb,
             flavors.vcpus as flavors_vcpus,
             flavors.root_gb as flavors_root_gb,
             flavors.ephemeral_gb as flavors_ephemeral_gb,
             flavors.flavorid as flavors_flavorid,
             flavors.swap as flavors_swap,
             flavors.rxtx_factor as flavors_rxtx_factor,
             flavors.vcpu_weight as flavors_vcpu_weight,
             flavors.disabled as flavors_disabled,
             flavors.is_public as flavors_is_public
      from flavors
      where (flavors.is_public = true
             or (exists (select 1
                         from flavor_projects
                         where flavor_projects.flavor_id = flavors.id
                               and flavor_projects.project_id = $1)))
            and (flavors.flavorid > $2
                 or flavors.flavorid = $3
                    and flavors.id > $4)
      order by flavors.flavorid asc, flavors.id asc
      offset $5 rows
      limit $6)
     as anon_1
     left join flavor_extra_specs as flavor_extra_specs_1
     on flavor_extra_specs_1.flavor_id = anon_1.flavors_id
order by anon_1.flavors_flavorid asc, anon_1.flavors_id asc
----
sort
 ├── columns: anon_1_flavors_created_at:14 anon_1_flavors_updated_at:15 anon_1_flavors_id:1!null anon_1_flavors_name:2!null anon_1_flavors_memory_mb:3!null anon_1_flavors_vcpus:4!null anon_1_flavors_root_gb:5 anon_1_flavors_ephemeral_gb:6 anon_1_flavors_flavorid:7!null anon_1_flavors_swap:8!null anon_1_flavors_rxtx_factor:9 anon_1_flavors_vcpu_weight:10 anon_1_flavors_disabled:11 anon_1_flavors_is_public:12 flavor_extra_specs_1_created_at:33 flavor_extra_specs_1_updated_at:34 flavor_extra_specs_1_id:29 flavor_extra_specs_1_key:30 flavor_extra_specs_1_value:31 flavor_extra_specs_1_flavor_id:32
 ├── immutable, has-placeholder
 ├── key: (1,29)
 ├── fd: (1)-->(2-12,14,15), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15), (29)-->(30-34), (30,32)-->(29,31,33,34)
 ├── ordering: +7
 └── project
      ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_extra_specs_1.id:29 key:30 value:31 flavor_extra_specs_1.flavor_id:32 flavor_extra_specs_1.created_at:33 flavor_extra_specs_1.updated_at:34
      ├── immutable, has-placeholder
      ├── key: (1,29)
      ├── fd: (1)-->(2-12,14,15), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15), (29)-->(30-34), (30,32)-->(29,31,33,34)
      └── right-join (hash)
           ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20 flavor_extra_specs_1.id:29 key:30 value:31 flavor_extra_specs_1.flavor_id:32 flavor_extra_specs_1.created_at:33 flavor_extra_specs_1.updated_at:34
           ├── immutable, has-placeholder
           ├── key: (1,29)
           ├── fd: (1)-->(2-12,14,15,19,20), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15), (29)-->(30-34), (30,32)-->(29,31,33,34)
           ├── scan flavor_extra_specs [as=flavor_extra_specs_1]
           │    ├── columns: flavor_extra_specs_1.id:29!null key:30!null value:31 flavor_extra_specs_1.flavor_id:32!null flavor_extra_specs_1.created_at:33 flavor_extra_specs_1.updated_at:34
           │    ├── key: (29)
           │    └── fd: (29)-->(30-34), (30,32)-->(29,31,33,34)
           ├── limit
           │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
           │    ├── internal-ordering: +7
           │    ├── immutable, has-placeholder
           │    ├── key: (1)
           │    ├── fd: (1)-->(2-12,14,15,19,20), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15)
           │    ├── offset
           │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
           │    │    ├── internal-ordering: +7
           │    │    ├── has-placeholder
           │    │    ├── key: (1)
           │    │    ├── fd: (1)-->(2-12,14,15,19,20), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15)
           │    │    ├── ordering: +7
           │    │    ├── sort
           │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
           │    │    │    ├── has-placeholder
           │    │    │    ├── key: (1)
           │    │    │    ├── fd: (1)-->(2-12,14,15,19,20), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15)
           │    │    │    ├── ordering: +7
           │    │    │    └── select
           │    │    │         ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
           │    │    │         ├── has-placeholder
           │    │    │         ├── key: (1)
           │    │    │         ├── fd: (1)-->(2-12,14,15,19,20), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15)
           │    │    │         ├── left-join (merge)
           │    │    │         │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
           │    │    │         │    ├── left ordering: +1
           │    │    │         │    ├── right ordering: +19
           │    │    │         │    ├── has-placeholder
           │    │    │         │    ├── key: (1)
           │    │    │         │    ├── fd: (1)-->(2-12,14,15,19,20), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15)
           │    │    │         │    ├── select
           │    │    │         │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15
           │    │    │         │    │    ├── has-placeholder
           │    │    │         │    │    ├── key: (1)
           │    │    │         │    │    ├── fd: (1)-->(2-12,14,15), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15)
           │    │    │         │    │    ├── ordering: +1
           │    │    │         │    │    ├── scan flavors
           │    │    │         │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15
           │    │    │         │    │    │    ├── key: (1)
           │    │    │         │    │    │    ├── fd: (1)-->(2-12,14,15), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15)
           │    │    │         │    │    │    └── ordering: +1
           │    │    │         │    │    └── filters
           │    │    │         │    │         └── (flavorid:7 > $2) OR ((flavorid:7 = $3) AND (flavors.id:1 > $4)) [outer=(1,7), constraints=(/7: (/NULL - ])]
           │    │    │         │    ├── select
           │    │    │         │    │    ├── columns: flavor_projects.flavor_id:19!null project_id:20!null
           │    │    │         │    │    ├── has-placeholder
           │    │    │         │    │    ├── key: (19)
           │    │    │         │    │    ├── fd: ()-->(20)
           │    │    │         │    │    ├── ordering: +19 opt(20) [actual: +19]
           │    │    │         │    │    ├── scan flavor_projects@flavor_projects_flavor_id_project_id_key
           │    │    │         │    │    │    ├── columns: flavor_projects.flavor_id:19!null project_id:20!null
           │    │    │         │    │    │    ├── key: (19,20)
           │    │    │         │    │    │    └── ordering: +19
           │    │    │         │    │    └── filters
           │    │    │         │    │         └── project_id:20 = $1 [outer=(20), constraints=(/20: (/NULL - ]), fd=()-->(20)]
           │    │    │         │    └── filters (true)
           │    │    │         └── filters
           │    │    │              └── is_public:12 OR (flavor_projects.flavor_id:19 IS NOT NULL) [outer=(12,19)]
           │    │    └── $5
           │    └── $6
           └── filters
                └── flavor_extra_specs_1.flavor_id:32 = flavors.id:1 [outer=(1,32), constraints=(/1: (/NULL - ]; /32: (/NULL - ]), fd=(1)==(32), (32)==(1)]

opt
select anon_1.instance_types_created_at as anon_1_instance_types_created_at,
       anon_1.instance_types_updated_at as anon_1_instance_types_updated_at,
       anon_1.instance_types_deleted_at as anon_1_instance_types_deleted_at,
       anon_1.instance_types_deleted as anon_1_instance_types_deleted,
       anon_1.instance_types_id as anon_1_instance_types_id,
       anon_1.instance_types_name as anon_1_instance_types_name,
       anon_1.instance_types_memory_mb as anon_1_instance_types_memory_mb,
       anon_1.instance_types_vcpus as anon_1_instance_types_vcpus,
       anon_1.instance_types_root_gb as anon_1_instance_types_root_gb,
       anon_1.instance_types_ephemeral_gb as anon_1_instance_types_ephemeral_gb,
       anon_1.instance_types_flavorid as anon_1_instance_types_flavorid,
       anon_1.instance_types_swap as anon_1_instance_types_swap,
       anon_1.instance_types_rxtx_factor as anon_1_instance_types_rxtx_factor,
       anon_1.instance_types_vcpu_weight as anon_1_instance_types_vcpu_weight,
       anon_1.instance_types_disabled as anon_1_instance_types_disabled,
       anon_1.instance_types_is_public as anon_1_instance_types_is_public,
       instance_type_extra_specs_1.created_at as instance_type_extra_specs_1_created_at,
       instance_type_extra_specs_1.updated_at as instance_type_extra_specs_1_updated_at,
       instance_type_extra_specs_1.deleted_at as instance_type_extra_specs_1_deleted_at,
       instance_type_extra_specs_1.deleted as instance_type_extra_specs_1_deleted,
       instance_type_extra_specs_1.id as instance_type_extra_specs_1_id,
       instance_type_extra_specs_1."key" as instance_type_extra_specs_1_key,
       instance_type_extra_specs_1.value as instance_type_extra_specs_1_value,
       instance_type_extra_specs_1.instance_type_id as instance_type_extra_specs_1_instance_type_id
from (select instance_types.created_at as instance_types_created_at,
             instance_types.updated_at as instance_types_updated_at,
             instance_types.deleted_at as instance_types_deleted_at,
             instance_types.deleted as instance_types_deleted,
             instance_types.id as instance_types_id,
             instance_types.name as instance_types_name,
             instance_types.memory_mb as instance_types_memory_mb,
             instance_types.vcpus as instance_types_vcpus,
             instance_types.root_gb as instance_types_root_gb,
             instance_types.ephemeral_gb as instance_types_ephemeral_gb,
             instance_types.flavorid as instance_types_flavorid,
             instance_types.swap as instance_types_swap,
             instance_types.rxtx_factor as instance_types_rxtx_factor,
             instance_types.vcpu_weight as instance_types_vcpu_weight,
             instance_types.disabled as instance_types_disabled,
             instance_types.is_public as instance_types_is_public
      from instance_types
      where instance_types.deleted = $1
            and (instance_types.is_public = true
                 or (exists (select 1
                             from instance_type_projects
                             where instance_type_projects.instance_type_id = instance_types.id
                                   and instance_type_projects.deleted = $2
                                   and instance_type_projects.project_id = $3)))
      order by instance_types.flavorid asc, instance_types.id asc
      offset $4 rows
      limit $5)
     as anon_1
     left join instance_type_extra_specs as instance_type_extra_specs_1
     on instance_type_extra_specs_1.instance_type_id = anon_1.instance_types_id
        and instance_type_extra_specs_1.deleted = $6
order by anon_1.instance_types_flavorid asc,
         anon_1.instance_types_id asc
----
sort
 ├── columns: anon_1_instance_types_created_at:15 anon_1_instance_types_updated_at:16 anon_1_instance_types_deleted_at:14 anon_1_instance_types_deleted:13!null anon_1_instance_types_id:1!null anon_1_instance_types_name:2 anon_1_instance_types_memory_mb:3!null anon_1_instance_types_vcpus:4!null anon_1_instance_types_root_gb:5 anon_1_instance_types_ephemeral_gb:6 anon_1_instance_types_flavorid:7 anon_1_instance_types_swap:8!null anon_1_instance_types_rxtx_factor:9 anon_1_instance_types_vcpu_weight:10 anon_1_instance_types_disabled:11 anon_1_instance_types_is_public:12 instance_type_extra_specs_1_created_at:38 instance_type_extra_specs_1_updated_at:39 instance_type_extra_specs_1_deleted_at:37 instance_type_extra_specs_1_deleted:36 instance_type_extra_specs_1_id:32 instance_type_extra_specs_1_key:33 instance_type_extra_specs_1_value:34 instance_type_extra_specs_1_instance_type_id:35
 ├── immutable, has-placeholder
 ├── key: (1,32)
 ├── fd: ()-->(13), (1)-->(2-12,14-16), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16), (32)-->(33-35,37-39), (33,35,36)~~>(32,34,37-39), (1,32)-->(36)
 ├── ordering: +7,+1 opt(13) [actual: +7,+1]
 └── project
      ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_extra_specs_1.id:32 key:33 value:34 instance_type_extra_specs_1.instance_type_id:35 instance_type_extra_specs_1.deleted:36 instance_type_extra_specs_1.deleted_at:37 instance_type_extra_specs_1.created_at:38 instance_type_extra_specs_1.updated_at:39
      ├── immutable, has-placeholder
      ├── key: (1,32)
      ├── fd: ()-->(13), (1)-->(2-12,14-16), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16), (32)-->(33-35,37-39), (33,35,36)~~>(32,34,37-39), (1,32)-->(36)
      └── right-join (hash)
           ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22 instance_type_extra_specs_1.id:32 key:33 value:34 instance_type_extra_specs_1.instance_type_id:35 instance_type_extra_specs_1.deleted:36 instance_type_extra_specs_1.deleted_at:37 instance_type_extra_specs_1.created_at:38 instance_type_extra_specs_1.updated_at:39
           ├── immutable, has-placeholder
           ├── key: (1,32)
           ├── fd: ()-->(13), (1)-->(2-12,14-16,20-22), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16), (32)-->(33-35,37-39), (33,35,36)~~>(32,34,37-39), (1,32)-->(36)
           ├── select
           │    ├── columns: instance_type_extra_specs_1.id:32!null key:33 value:34 instance_type_extra_specs_1.instance_type_id:35!null instance_type_extra_specs_1.deleted:36!null instance_type_extra_specs_1.deleted_at:37 instance_type_extra_specs_1.created_at:38 instance_type_extra_specs_1.updated_at:39
           │    ├── has-placeholder
           │    ├── key: (32)
           │    ├── fd: ()-->(36), (32)-->(33-35,37-39), (33,35,36)~~>(32,34,37-39)
           │    ├── scan instance_type_extra_specs [as=instance_type_extra_specs_1]
           │    │    ├── columns: instance_type_extra_specs_1.id:32!null key:33 value:34 instance_type_extra_specs_1.instance_type_id:35!null instance_type_extra_specs_1.deleted:36 instance_type_extra_specs_1.deleted_at:37 instance_type_extra_specs_1.created_at:38 instance_type_extra_specs_1.updated_at:39
           │    │    ├── key: (32)
           │    │    └── fd: (32)-->(33-39), (33,35,36)~~>(32,34,37-39)
           │    └── filters
           │         └── instance_type_extra_specs_1.deleted:36 = $6 [outer=(36), constraints=(/36: (/NULL - ]), fd=()-->(36)]
           ├── limit
           │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
           │    ├── internal-ordering: +7,+1 opt(13)
           │    ├── immutable, has-placeholder
           │    ├── key: (1)
           │    ├── fd: ()-->(13), (1)-->(2-12,14-16,20-22), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    ├── offset
           │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
           │    │    ├── internal-ordering: +7,+1 opt(13)
           │    │    ├── has-placeholder
           │    │    ├── key: (1)
           │    │    ├── fd: ()-->(13), (1)-->(2-12,14-16,20-22), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    ├── ordering: +7,+1 opt(13) [actual: +7,+1]
           │    │    ├── sort
           │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
           │    │    │    ├── has-placeholder
           │    │    │    ├── key: (1)
           │    │    │    ├── fd: ()-->(13), (1)-->(2-12,14-16,20-22), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    │    ├── ordering: +7,+1 opt(13) [actual: +7,+1]
           │    │    │    └── select
           │    │    │         ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
           │    │    │         ├── has-placeholder
           │    │    │         ├── key: (1)
           │    │    │         ├── fd: ()-->(13), (1)-->(2-12,14-16,20-22), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    │         ├── left-join (merge)
           │    │    │         │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
           │    │    │         │    ├── left ordering: +1
           │    │    │         │    ├── right ordering: +20
           │    │    │         │    ├── has-placeholder
           │    │    │         │    ├── key: (1)
           │    │    │         │    ├── fd: ()-->(13), (1)-->(2-12,14-16,20-22), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    │         │    ├── select
           │    │    │         │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16
           │    │    │         │    │    ├── has-placeholder
           │    │    │         │    │    ├── key: (1)
           │    │    │         │    │    ├── fd: ()-->(13), (1)-->(2-12,14-16), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    │         │    │    ├── ordering: +1 opt(13) [actual: +1]
           │    │    │         │    │    ├── scan instance_types
           │    │    │         │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13 instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16
           │    │    │         │    │    │    ├── key: (1)
           │    │    │         │    │    │    ├── fd: (1)-->(2-16), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    │         │    │    │    └── ordering: +1
           │    │    │         │    │    └── filters
           │    │    │         │    │         └── instance_types.deleted:13 = $1 [outer=(13), constraints=(/13: (/NULL - ]), fd=()-->(13)]
           │    │    │         │    ├── select
           │    │    │         │    │    ├── columns: instance_type_projects.instance_type_id:20!null project_id:21!null instance_type_projects.deleted:22!null
           │    │    │         │    │    ├── has-placeholder
           │    │    │         │    │    ├── key: (20)
           │    │    │         │    │    ├── fd: ()-->(21,22)
           │    │    │         │    │    ├── ordering: +20 opt(21,22) [actual: +20]
           │    │    │         │    │    ├── scan instance_type_projects@instance_type_projects_instance_type_id_project_id_deleted_key
           │    │    │         │    │    │    ├── columns: instance_type_projects.instance_type_id:20!null project_id:21 instance_type_projects.deleted:22
           │    │    │         │    │    │    ├── lax-key: (20-22)
           │    │    │         │    │    │    └── ordering: +20
           │    │    │         │    │    └── filters
           │    │    │         │    │         ├── instance_type_projects.deleted:22 = $2 [outer=(22), constraints=(/22: (/NULL - ]), fd=()-->(22)]
           │    │    │         │    │         └── project_id:21 = $3 [outer=(21), constraints=(/21: (/NULL - ]), fd=()-->(21)]
           │    │    │         │    └── filters (true)
           │    │    │         └── filters
           │    │    │              └── is_public:12 OR (instance_type_projects.instance_type_id:20 IS NOT NULL) [outer=(12,20)]
           │    │    └── $4
           │    └── $5
           └── filters
                └── instance_type_extra_specs_1.instance_type_id:35 = instance_types.id:1 [outer=(1,35), constraints=(/1: (/NULL - ]; /35: (/NULL - ]), fd=(1)==(35), (35)==(1)]

opt
select anon_1.instance_types_created_at as anon_1_instance_types_created_at,
       anon_1.instance_types_updated_at as anon_1_instance_types_updated_at,
       anon_1.instance_types_deleted_at as anon_1_instance_types_deleted_at,
       anon_1.instance_types_deleted as anon_1_instance_types_deleted,
       anon_1.instance_types_id as anon_1_instance_types_id,
       anon_1.instance_types_name as anon_1_instance_types_name,
       anon_1.instance_types_memory_mb as anon_1_instance_types_memory_mb,
       anon_1.instance_types_vcpus as anon_1_instance_types_vcpus,
       anon_1.instance_types_root_gb as anon_1_instance_types_root_gb,
       anon_1.instance_types_ephemeral_gb as anon_1_instance_types_ephemeral_gb,
       anon_1.instance_types_flavorid as anon_1_instance_types_flavorid,
       anon_1.instance_types_swap as anon_1_instance_types_swap,
       anon_1.instance_types_rxtx_factor as anon_1_instance_types_rxtx_factor,
       anon_1.instance_types_vcpu_weight as anon_1_instance_types_vcpu_weight,
       anon_1.instance_types_disabled as anon_1_instance_types_disabled,
       anon_1.instance_types_is_public as anon_1_instance_types_is_public,
       instance_type_extra_specs_1.created_at as instance_type_extra_specs_1_created_at,
       instance_type_extra_specs_1.updated_at as instance_type_extra_specs_1_updated_at,
       instance_type_extra_specs_1.deleted_at as instance_type_extra_specs_1_deleted_at,
       instance_type_extra_specs_1.deleted as instance_type_extra_specs_1_deleted,
       instance_type_extra_specs_1.id as instance_type_extra_specs_1_id,
       instance_type_extra_specs_1."key" as instance_type_extra_specs_1_key,
       instance_type_extra_specs_1.value as instance_type_extra_specs_1_value,
       instance_type_extra_specs_1.instance_type_id as instance_type_extra_specs_1_instance_type_id
from (select instance_types.created_at as instance_types_created_at,
             instance_types.updated_at as instance_types_updated_at,
             instance_types.deleted_at as instance_types_deleted_at,
             instance_types.deleted as instance_types_deleted,
             instance_types.id as instance_types_id,
             instance_types.name as instance_types_name,
             instance_types.memory_mb as instance_types_memory_mb,
             instance_types.vcpus as instance_types_vcpus,
             instance_types.root_gb as instance_types_root_gb,
             instance_types.ephemeral_gb as instance_types_ephemeral_gb,
             instance_types.flavorid as instance_types_flavorid,
             instance_types.swap as instance_types_swap,
             instance_types.rxtx_factor as instance_types_rxtx_factor,
             instance_types.vcpu_weight as instance_types_vcpu_weight,
             instance_types.disabled as instance_types_disabled,
             instance_types.is_public as instance_types_is_public
      from instance_types
      where instance_types.deleted = $1
            and (instance_types.is_public = true
                 or (exists (select 1
                             from instance_type_projects
                             where instance_type_projects.instance_type_id = instance_types.id
                                   and instance_type_projects.deleted = $2
                                   and instance_type_projects.project_id = $3)))
            and instance_types.flavorid = $4
      offset $5 rows
      limit $6)
     as anon_1
     left join instance_type_extra_specs as instance_type_extra_specs_1
     on instance_type_extra_specs_1.instance_type_id = anon_1.instance_types_id
        and instance_type_extra_specs_1.deleted = $7
----
project
 ├── columns: anon_1_instance_types_created_at:15 anon_1_instance_types_updated_at:16 anon_1_instance_types_deleted_at:14 anon_1_instance_types_deleted:13!null anon_1_instance_types_id:1!null anon_1_instance_types_name:2 anon_1_instance_types_memory_mb:3!null anon_1_instance_types_vcpus:4!null anon_1_instance_types_root_gb:5 anon_1_instance_types_ephemeral_gb:6 anon_1_instance_types_flavorid:7!null anon_1_instance_types_swap:8!null anon_1_instance_types_rxtx_factor:9 anon_1_instance_types_vcpu_weight:10 anon_1_instance_types_disabled:11 anon_1_instance_types_is_public:12 instance_type_extra_specs_1_created_at:38 instance_type_extra_specs_1_updated_at:39 instance_type_extra_specs_1_deleted_at:37 instance_type_extra_specs_1_deleted:36 instance_type_extra_specs_1_id:32 instance_type_extra_specs_1_key:33 instance_type_extra_specs_1_value:34 instance_type_extra_specs_1_instance_type_id:35
 ├── immutable, has-placeholder
 ├── key: (32)
 ├── fd: ()-->(1-16,35), (32)-->(33,34,36-39), (33,35,36)~~>(32,34,37-39)
 └── left-join (lookup instance_type_extra_specs [as=instance_type_extra_specs_1])
      ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22 instance_type_extra_specs_1.id:32 key:33 value:34 instance_type_extra_specs_1.instance_type_id:35 instance_type_extra_specs_1.deleted:36 instance_type_extra_specs_1.deleted_at:37 instance_type_extra_specs_1.created_at:38 instance_type_extra_specs_1.updated_at:39
      ├── key columns: [32] = [32]
      ├── lookup columns are key
      ├── immutable, has-placeholder
      ├── key: (32)
      ├── fd: ()-->(1-16,20-22,35), (32)-->(33,34,36-39), (33,35,36)~~>(32,34,37-39)
      ├── left-join (lookup instance_type_extra_specs@instance_type_extra_specs_instance_type_id_key_deleted_key [as=instance_type_extra_specs_1])
      │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22 instance_type_extra_specs_1.id:32 key:33 instance_type_extra_specs_1.instance_type_id:35 instance_type_extra_specs_1.deleted:36
      │    ├── key columns: [1] = [35]
      │    ├── immutable, has-placeholder
      │    ├── key: (32)
      │    ├── fd: ()-->(1-16,20-22,35,36), (32)-->(33), (33,35,36)~~>(32)
      │    ├── limit
      │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
      │    │    ├── cardinality: [0 - 1]
      │    │    ├── immutable, has-placeholder
      │    │    ├── key: ()
      │    │    ├── fd: ()-->(1-16,20-22)
      │    │    ├── offset
      │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
      │    │    │    ├── cardinality: [0 - 1]
      │    │    │    ├── has-placeholder
      │    │    │    ├── key: ()
      │    │    │    ├── fd: ()-->(1-16,20-22)
      │    │    │    ├── select
      │    │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
      │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    ├── has-placeholder
      │    │    │    │    ├── key: ()
      │    │    │    │    ├── fd: ()-->(1-16,20-22)
      │    │    │    │    ├── left-join (lookup instance_type_projects@instance_type_projects_instance_type_id_project_id_deleted_key)
      │    │    │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
      │    │    │    │    │    ├── key columns: [1] = [20]
      │    │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    │    ├── has-placeholder
      │    │    │    │    │    ├── key: ()
      │    │    │    │    │    ├── fd: ()-->(1-16,20-22)
      │    │    │    │    │    ├── project
      │    │    │    │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16
      │    │    │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    │    │    ├── has-placeholder
      │    │    │    │    │    │    ├── key: ()
      │    │    │    │    │    │    ├── fd: ()-->(1-16)
      │    │    │    │    │    │    └── inner-join (lookup instance_types)
      │    │    │    │    │    │         ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 "$1":42!null "$4":43!null
      │    │    │    │    │    │         ├── key columns: [1] = [1]
      │    │    │    │    │    │         ├── lookup columns are key
      │    │    │    │    │    │         ├── cardinality: [0 - 1]
      │    │    │    │    │    │         ├── has-placeholder
      │    │    │    │    │    │         ├── key: ()
      │    │    │    │    │    │         ├── fd: ()-->(1-16,42,43), (13)==(42), (42)==(13), (7)==(43), (43)==(7)
      │    │    │    │    │    │         ├── inner-join (lookup instance_types@instance_types_flavorid_deleted_key)
      │    │    │    │    │    │         │    ├── columns: instance_types.id:1!null flavorid:7!null instance_types.deleted:13!null "$1":42!null "$4":43!null
      │    │    │    │    │    │         │    ├── flags: disallow merge join
      │    │    │    │    │    │         │    ├── key columns: [43 42] = [7 13]
      │    │    │    │    │    │         │    ├── lookup columns are key
      │    │    │    │    │    │         │    ├── cardinality: [0 - 1]
      │    │    │    │    │    │         │    ├── has-placeholder
      │    │    │    │    │    │         │    ├── key: ()
      │    │    │    │    │    │         │    ├── fd: ()-->(1,7,13,42,43), (7)==(43), (43)==(7), (13)==(42), (42)==(13)
      │    │    │    │    │    │         │    ├── values
      │    │    │    │    │    │         │    │    ├── columns: "$1":42 "$4":43
      │    │    │    │    │    │         │    │    ├── cardinality: [1 - 1]
      │    │    │    │    │    │         │    │    ├── has-placeholder
      │    │    │    │    │    │         │    │    ├── key: ()
      │    │    │    │    │    │         │    │    ├── fd: ()-->(42,43)
      │    │    │    │    │    │         │    │    └── ($1, $4)
      │    │    │    │    │    │         │    └── filters (true)
      │    │    │    │    │    │         └── filters (true)
      │    │    │    │    │    └── filters
      │    │    │    │    │         ├── instance_type_projects.deleted:22 = $2 [outer=(22), constraints=(/22: (/NULL - ]), fd=()-->(22)]
      │    │    │    │    │         └── project_id:21 = $3 [outer=(21), constraints=(/21: (/NULL - ]), fd=()-->(21)]
      │    │    │    │    └── filters
      │    │    │    │         └── is_public:12 OR (instance_type_projects.instance_type_id:20 IS NOT NULL) [outer=(12,20)]
      │    │    │    └── $5
      │    │    └── $6
      │    └── filters
      │         └── instance_type_extra_specs_1.deleted:36 = $7 [outer=(36), constraints=(/36: (/NULL - ]), fd=()-->(36)]
      └── filters (true)

opt
select flavors.created_at as flavors_created_at,
       flavors.updated_at as flavors_updated_at,
       flavors.id as flavors_id,
       flavors.name as flavors_name,
       flavors.memory_mb as flavors_memory_mb,
       flavors.vcpus as flavors_vcpus,
       flavors.root_gb as flavors_root_gb,
       flavors.ephemeral_gb as flavors_ephemeral_gb,
       flavors.flavorid as flavors_flavorid,
       flavors.swap as flavors_swap,
       flavors.rxtx_factor as flavors_rxtx_factor,
       flavors.vcpu_weight as flavors_vcpu_weight,
       flavors.disabled as flavors_disabled,
       flavors.is_public as flavors_is_public,
       flavor_extra_specs_1.created_at as flavor_extra_specs_1_created_at,
       flavor_extra_specs_1.updated_at as flavor_extra_specs_1_updated_at,
       flavor_extra_specs_1.id as flavor_extra_specs_1_id,
       flavor_extra_specs_1."key" as flavor_extra_specs_1_key,
       flavor_extra_specs_1.value as flavor_extra_specs_1_value,
       flavor_extra_specs_1.flavor_id as flavor_extra_specs_1_flavor_id
from flavors
     left join flavor_extra_specs as flavor_extra_specs_1
     on flavor_extra_specs_1.flavor_id = flavors.id
where flavors.is_public = true
      or (exists (select 1
                  from flavor_projects
                  where flavor_projects.flavor_id = flavors.id
                        and flavor_projects.project_id = $1))
order by flavors.flavorid asc, flavors.id asc
----
sort
 ├── columns: flavors_created_at:14 flavors_updated_at:15 flavors_id:1!null flavors_name:2!null flavors_memory_mb:3!null flavors_vcpus:4!null flavors_root_gb:5 flavors_ephemeral_gb:6 flavors_flavorid:7!null flavors_swap:8!null flavors_rxtx_factor:9 flavors_vcpu_weight:10 flavors_disabled:11 flavors_is_public:12 flavor_extra_specs_1_created_at:22 flavor_extra_specs_1_updated_at:23 flavor_extra_specs_1_id:18 flavor_extra_specs_1_key:19 flavor_extra_specs_1_value:20 flavor_extra_specs_1_flavor_id:21
 ├── has-placeholder
 ├── key: (1,18)
 ├── fd: (1)-->(2-12,14,15), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15), (18)-->(19-23), (19,21)-->(18,20,22,23)
 ├── ordering: +7
 └── project
      ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_extra_specs_1.id:18 key:19 value:20 flavor_extra_specs_1.flavor_id:21 flavor_extra_specs_1.created_at:22 flavor_extra_specs_1.updated_at:23
      ├── has-placeholder
      ├── key: (1,18)
      ├── fd: (1)-->(2-12,14,15), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15), (18)-->(19-23), (19,21)-->(18,20,22,23)
      └── right-join (hash)
           ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_extra_specs_1.id:18 key:19 value:20 flavor_extra_specs_1.flavor_id:21 flavor_extra_specs_1.created_at:22 flavor_extra_specs_1.updated_at:23 flavor_projects.flavor_id:27 project_id:28
           ├── has-placeholder
           ├── key: (1,18)
           ├── fd: (1)-->(2-12,14,15,27,28), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15), (18)-->(19-23), (19,21)-->(18,20,22,23)
           ├── scan flavor_extra_specs [as=flavor_extra_specs_1]
           │    ├── columns: flavor_extra_specs_1.id:18!null key:19!null value:20 flavor_extra_specs_1.flavor_id:21!null flavor_extra_specs_1.created_at:22 flavor_extra_specs_1.updated_at:23
           │    ├── key: (18)
           │    └── fd: (18)-->(19-23), (19,21)-->(18,20,22,23)
           ├── select
           │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:27 project_id:28
           │    ├── has-placeholder
           │    ├── key: (1)
           │    ├── fd: (1)-->(2-12,14,15,27,28), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15)
           │    ├── left-join (merge)
           │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:27 project_id:28
           │    │    ├── left ordering: +1
           │    │    ├── right ordering: +27
           │    │    ├── has-placeholder
           │    │    ├── key: (1)
           │    │    ├── fd: (1)-->(2-12,14,15,27,28), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15)
           │    │    ├── scan flavors
           │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15
           │    │    │    ├── key: (1)
           │    │    │    ├── fd: (1)-->(2-12,14,15), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15)
           │    │    │    └── ordering: +1
           │    │    ├── select
           │    │    │    ├── columns: flavor_projects.flavor_id:27!null project_id:28!null
           │    │    │    ├── has-placeholder
           │    │    │    ├── key: (27)
           │    │    │    ├── fd: ()-->(28)
           │    │    │    ├── ordering: +27 opt(28) [actual: +27]
           │    │    │    ├── scan flavor_projects@flavor_projects_flavor_id_project_id_key
           │    │    │    │    ├── columns: flavor_projects.flavor_id:27!null project_id:28!null
           │    │    │    │    ├── key: (27,28)
           │    │    │    │    └── ordering: +27
           │    │    │    └── filters
           │    │    │         └── project_id:28 = $1 [outer=(28), constraints=(/28: (/NULL - ]), fd=()-->(28)]
           │    │    └── filters (true)
           │    └── filters
           │         └── is_public:12 OR (flavor_projects.flavor_id:27 IS NOT NULL) [outer=(12,27)]
           └── filters
                └── flavor_extra_specs_1.flavor_id:21 = flavors.id:1 [outer=(1,21), constraints=(/1: (/NULL - ]; /21: (/NULL - ]), fd=(1)==(21), (21)==(1)]

opt
select anon_1.instance_types_created_at as anon_1_instance_types_created_at,
       anon_1.instance_types_updated_at as anon_1_instance_types_updated_at,
       anon_1.instance_types_deleted_at as anon_1_instance_types_deleted_at,
       anon_1.instance_types_deleted as anon_1_instance_types_deleted,
       anon_1.instance_types_id as anon_1_instance_types_id,
       anon_1.instance_types_name as anon_1_instance_types_name,
       anon_1.instance_types_memory_mb as anon_1_instance_types_memory_mb,
       anon_1.instance_types_vcpus as anon_1_instance_types_vcpus,
       anon_1.instance_types_root_gb as anon_1_instance_types_root_gb,
       anon_1.instance_types_ephemeral_gb as anon_1_instance_types_ephemeral_gb,
       anon_1.instance_types_flavorid as anon_1_instance_types_flavorid,
       anon_1.instance_types_swap as anon_1_instance_types_swap,
       anon_1.instance_types_rxtx_factor as anon_1_instance_types_rxtx_factor,
       anon_1.instance_types_vcpu_weight as anon_1_instance_types_vcpu_weight,
       anon_1.instance_types_disabled as anon_1_instance_types_disabled,
       anon_1.instance_types_is_public as anon_1_instance_types_is_public,
       instance_type_extra_specs_1.created_at as instance_type_extra_specs_1_created_at,
       instance_type_extra_specs_1.updated_at as instance_type_extra_specs_1_updated_at,
       instance_type_extra_specs_1.deleted_at as instance_type_extra_specs_1_deleted_at,
       instance_type_extra_specs_1.deleted as instance_type_extra_specs_1_deleted,
       instance_type_extra_specs_1.id as instance_type_extra_specs_1_id,
       instance_type_extra_specs_1."key" as instance_type_extra_specs_1_key,
       instance_type_extra_specs_1.value as instance_type_extra_specs_1_value,
       instance_type_extra_specs_1.instance_type_id as instance_type_extra_specs_1_instance_type_id
from (select instance_types.created_at as instance_types_created_at,
             instance_types.updated_at as instance_types_updated_at,
             instance_types.deleted_at as instance_types_deleted_at,
             instance_types.deleted as instance_types_deleted,
             instance_types.id as instance_types_id,
             instance_types.name as instance_types_name,
             instance_types.memory_mb as instance_types_memory_mb,
             instance_types.vcpus as instance_types_vcpus,
             instance_types.root_gb as instance_types_root_gb,
             instance_types.ephemeral_gb as instance_types_ephemeral_gb,
             instance_types.flavorid as instance_types_flavorid,
             instance_types.swap as instance_types_swap,
             instance_types.rxtx_factor as instance_types_rxtx_factor,
             instance_types.vcpu_weight as instance_types_vcpu_weight,
             instance_types.disabled as instance_types_disabled,
             instance_types.is_public as instance_types_is_public
      from instance_types
      where instance_types.deleted = $1
            and (instance_types.is_public = true
                 or (exists (select 1
                             from instance_type_projects
                             where instance_type_projects.instance_type_id = instance_types.id
                                   and instance_type_projects.deleted = $2
                                   and instance_type_projects.project_id = $3)))
            and (instance_types.flavorid > $4
                 or instance_types.flavorid = $5
                    and instance_types.id > $6)
      order by instance_types.flavorid asc, instance_types.id asc
      offset $7 rows
      limit $8)
     as anon_1
     left join instance_type_extra_specs as instance_type_extra_specs_1
     on instance_type_extra_specs_1.instance_type_id = anon_1.instance_types_id
        and instance_type_extra_specs_1.deleted = $9
order by anon_1.instance_types_flavorid asc,
         anon_1.instance_types_id asc
----
sort
 ├── columns: anon_1_instance_types_created_at:15 anon_1_instance_types_updated_at:16 anon_1_instance_types_deleted_at:14 anon_1_instance_types_deleted:13!null anon_1_instance_types_id:1!null anon_1_instance_types_name:2 anon_1_instance_types_memory_mb:3!null anon_1_instance_types_vcpus:4!null anon_1_instance_types_root_gb:5 anon_1_instance_types_ephemeral_gb:6 anon_1_instance_types_flavorid:7!null anon_1_instance_types_swap:8!null anon_1_instance_types_rxtx_factor:9 anon_1_instance_types_vcpu_weight:10 anon_1_instance_types_disabled:11 anon_1_instance_types_is_public:12 instance_type_extra_specs_1_created_at:38 instance_type_extra_specs_1_updated_at:39 instance_type_extra_specs_1_deleted_at:37 instance_type_extra_specs_1_deleted:36 instance_type_extra_specs_1_id:32 instance_type_extra_specs_1_key:33 instance_type_extra_specs_1_value:34 instance_type_extra_specs_1_instance_type_id:35
 ├── immutable, has-placeholder
 ├── key: (1,32)
 ├── fd: ()-->(13), (1)-->(2-12,14-16), (7)-->(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16), (32)-->(33-35,37-39), (33,35,36)~~>(32,34,37-39), (1,32)-->(36)
 ├── ordering: +7 opt(13) [actual: +7]
 └── project
      ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_extra_specs_1.id:32 key:33 value:34 instance_type_extra_specs_1.instance_type_id:35 instance_type_extra_specs_1.deleted:36 instance_type_extra_specs_1.deleted_at:37 instance_type_extra_specs_1.created_at:38 instance_type_extra_specs_1.updated_at:39
      ├── immutable, has-placeholder
      ├── key: (1,32)
      ├── fd: ()-->(13), (1)-->(2-12,14-16), (7)-->(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16), (32)-->(33-35,37-39), (33,35,36)~~>(32,34,37-39), (1,32)-->(36)
      └── right-join (hash)
           ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22 instance_type_extra_specs_1.id:32 key:33 value:34 instance_type_extra_specs_1.instance_type_id:35 instance_type_extra_specs_1.deleted:36 instance_type_extra_specs_1.deleted_at:37 instance_type_extra_specs_1.created_at:38 instance_type_extra_specs_1.updated_at:39
           ├── immutable, has-placeholder
           ├── key: (1,32)
           ├── fd: ()-->(13), (1)-->(2-12,14-16,20-22), (7)-->(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16), (32)-->(33-35,37-39), (33,35,36)~~>(32,34,37-39), (1,32)-->(36)
           ├── select
           │    ├── columns: instance_type_extra_specs_1.id:32!null key:33 value:34 instance_type_extra_specs_1.instance_type_id:35!null instance_type_extra_specs_1.deleted:36!null instance_type_extra_specs_1.deleted_at:37 instance_type_extra_specs_1.created_at:38 instance_type_extra_specs_1.updated_at:39
           │    ├── has-placeholder
           │    ├── key: (32)
           │    ├── fd: ()-->(36), (32)-->(33-35,37-39), (33,35,36)~~>(32,34,37-39)
           │    ├── scan instance_type_extra_specs [as=instance_type_extra_specs_1]
           │    │    ├── columns: instance_type_extra_specs_1.id:32!null key:33 value:34 instance_type_extra_specs_1.instance_type_id:35!null instance_type_extra_specs_1.deleted:36 instance_type_extra_specs_1.deleted_at:37 instance_type_extra_specs_1.created_at:38 instance_type_extra_specs_1.updated_at:39
           │    │    ├── key: (32)
           │    │    └── fd: (32)-->(33-39), (33,35,36)~~>(32,34,37-39)
           │    └── filters
           │         └── instance_type_extra_specs_1.deleted:36 = $9 [outer=(36), constraints=(/36: (/NULL - ]), fd=()-->(36)]
           ├── limit
           │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
           │    ├── internal-ordering: +7 opt(13)
           │    ├── immutable, has-placeholder
           │    ├── key: (1)
           │    ├── fd: ()-->(13), (1)-->(2-12,14-16,20-22), (7)-->(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    ├── offset
           │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
           │    │    ├── internal-ordering: +7 opt(13)
           │    │    ├── has-placeholder
           │    │    ├── key: (1)
           │    │    ├── fd: ()-->(13), (1)-->(2-12,14-16,20-22), (7)-->(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    ├── ordering: +7 opt(13) [actual: +7]
           │    │    ├── sort
           │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
           │    │    │    ├── has-placeholder
           │    │    │    ├── key: (1)
           │    │    │    ├── fd: ()-->(13), (1)-->(2-12,14-16,20-22), (7)-->(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    │    ├── ordering: +7 opt(13) [actual: +7]
           │    │    │    └── select
           │    │    │         ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
           │    │    │         ├── has-placeholder
           │    │    │         ├── key: (1)
           │    │    │         ├── fd: ()-->(13), (1)-->(2-12,14-16,20-22), (7)-->(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    │         ├── left-join (merge)
           │    │    │         │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
           │    │    │         │    ├── left ordering: +1
           │    │    │         │    ├── right ordering: +20
           │    │    │         │    ├── has-placeholder
           │    │    │         │    ├── key: (1)
           │    │    │         │    ├── fd: ()-->(13), (1)-->(2-12,14-16,20-22), (7)-->(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    │         │    ├── select
           │    │    │         │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16
           │    │    │         │    │    ├── has-placeholder
           │    │    │         │    │    ├── key: (1)
           │    │    │         │    │    ├── fd: ()-->(13), (1)-->(2-12,14-16), (7)-->(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    │         │    │    ├── ordering: +1 opt(13) [actual: +1]
           │    │    │         │    │    ├── scan instance_types
           │    │    │         │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13 instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16
           │    │    │         │    │    │    ├── key: (1)
           │    │    │         │    │    │    ├── fd: (1)-->(2-16), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    │         │    │    │    └── ordering: +1
           │    │    │         │    │    └── filters
           │    │    │         │    │         ├── instance_types.deleted:13 = $1 [outer=(13), constraints=(/13: (/NULL - ]), fd=()-->(13)]
           │    │    │         │    │         └── (flavorid:7 > $4) OR ((flavorid:7 = $5) AND (instance_types.id:1 > $6)) [outer=(1,7), constraints=(/7: (/NULL - ])]
           │    │    │         │    ├── select
           │    │    │         │    │    ├── columns: instance_type_projects.instance_type_id:20!null project_id:21!null instance_type_projects.deleted:22!null
           │    │    │         │    │    ├── has-placeholder
           │    │    │         │    │    ├── key: (20)
           │    │    │         │    │    ├── fd: ()-->(21,22)
           │    │    │         │    │    ├── ordering: +20 opt(21,22) [actual: +20]
           │    │    │         │    │    ├── scan instance_type_projects@instance_type_projects_instance_type_id_project_id_deleted_key
           │    │    │         │    │    │    ├── columns: instance_type_projects.instance_type_id:20!null project_id:21 instance_type_projects.deleted:22
           │    │    │         │    │    │    ├── lax-key: (20-22)
           │    │    │         │    │    │    └── ordering: +20
           │    │    │         │    │    └── filters
           │    │    │         │    │         ├── instance_type_projects.deleted:22 = $2 [outer=(22), constraints=(/22: (/NULL - ]), fd=()-->(22)]
           │    │    │         │    │         └── project_id:21 = $3 [outer=(21), constraints=(/21: (/NULL - ]), fd=()-->(21)]
           │    │    │         │    └── filters (true)
           │    │    │         └── filters
           │    │    │              └── is_public:12 OR (instance_type_projects.instance_type_id:20 IS NOT NULL) [outer=(12,20)]
           │    │    └── $7
           │    └── $8
           └── filters
                └── instance_type_extra_specs_1.instance_type_id:35 = instance_types.id:1 [outer=(1,35), constraints=(/1: (/NULL - ]; /35: (/NULL - ]), fd=(1)==(35), (35)==(1)]

opt
select anon_1.flavors_created_at as anon_1_flavors_created_at,
       anon_1.flavors_updated_at as anon_1_flavors_updated_at,
       anon_1.flavors_id as anon_1_flavors_id,
       anon_1.flavors_name as anon_1_flavors_name,
       anon_1.flavors_memory_mb as anon_1_flavors_memory_mb,
       anon_1.flavors_vcpus as anon_1_flavors_vcpus,
       anon_1.flavors_root_gb as anon_1_flavors_root_gb,
       anon_1.flavors_ephemeral_gb as anon_1_flavors_ephemeral_gb,
       anon_1.flavors_flavorid as anon_1_flavors_flavorid,
       anon_1.flavors_swap as anon_1_flavors_swap,
       anon_1.flavors_rxtx_factor as anon_1_flavors_rxtx_factor,
       anon_1.flavors_vcpu_weight as anon_1_flavors_vcpu_weight,
       anon_1.flavors_disabled as anon_1_flavors_disabled,
       anon_1.flavors_is_public as anon_1_flavors_is_public,
       flavor_extra_specs_1.created_at as flavor_extra_specs_1_created_at,
       flavor_extra_specs_1.updated_at as flavor_extra_specs_1_updated_at,
       flavor_extra_specs_1.id as flavor_extra_specs_1_id,
       flavor_extra_specs_1."key" as flavor_extra_specs_1_key,
       flavor_extra_specs_1.value as flavor_extra_specs_1_value,
       flavor_extra_specs_1.flavor_id as flavor_extra_specs_1_flavor_id
from (select flavors.created_at as flavors_created_at,
             flavors.updated_at as flavors_updated_at,
             flavors.id as flavors_id,
             flavors.name as flavors_name,
             flavors.memory_mb as flavors_memory_mb,
             flavors.vcpus as flavors_vcpus,
             flavors.root_gb as flavors_root_gb,
             flavors.ephemeral_gb as flavors_ephemeral_gb,
             flavors.flavorid as flavors_flavorid,
             flavors.swap as flavors_swap,
             flavors.rxtx_factor as flavors_rxtx_factor,
             flavors.vcpu_weight as flavors_vcpu_weight,
             flavors.disabled as flavors_disabled,
             flavors.is_public as flavors_is_public
      from flavors
      where flavors.is_public = true
            or (exists (select 1
                        from flavor_projects
                        where flavor_projects.flavor_id = flavors.id
                              and flavor_projects.project_id = $1))
      order by flavors.flavorid asc, flavors.id asc
      offset $2 rows
      limit $3)
     as anon_1
     left join flavor_extra_specs as flavor_extra_specs_1
     on flavor_extra_specs_1.flavor_id = anon_1.flavors_id
order by anon_1.flavors_flavorid asc, anon_1.flavors_id asc
----
sort
 ├── columns: anon_1_flavors_created_at:14 anon_1_flavors_updated_at:15 anon_1_flavors_id:1!null anon_1_flavors_name:2!null anon_1_flavors_memory_mb:3!null anon_1_flavors_vcpus:4!null anon_1_flavors_root_gb:5 anon_1_flavors_ephemeral_gb:6 anon_1_flavors_flavorid:7!null anon_1_flavors_swap:8!null anon_1_flavors_rxtx_factor:9 anon_1_flavors_vcpu_weight:10 anon_1_flavors_disabled:11 anon_1_flavors_is_public:12 flavor_extra_specs_1_created_at:33 flavor_extra_specs_1_updated_at:34 flavor_extra_specs_1_id:29 flavor_extra_specs_1_key:30 flavor_extra_specs_1_value:31 flavor_extra_specs_1_flavor_id:32
 ├── immutable, has-placeholder
 ├── key: (1,29)
 ├── fd: (1)-->(2-12,14,15), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15), (29)-->(30-34), (30,32)-->(29,31,33,34)
 ├── ordering: +7
 └── project
      ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_extra_specs_1.id:29 key:30 value:31 flavor_extra_specs_1.flavor_id:32 flavor_extra_specs_1.created_at:33 flavor_extra_specs_1.updated_at:34
      ├── immutable, has-placeholder
      ├── key: (1,29)
      ├── fd: (1)-->(2-12,14,15), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15), (29)-->(30-34), (30,32)-->(29,31,33,34)
      └── right-join (hash)
           ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20 flavor_extra_specs_1.id:29 key:30 value:31 flavor_extra_specs_1.flavor_id:32 flavor_extra_specs_1.created_at:33 flavor_extra_specs_1.updated_at:34
           ├── immutable, has-placeholder
           ├── key: (1,29)
           ├── fd: (1)-->(2-12,14,15,19,20), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15), (29)-->(30-34), (30,32)-->(29,31,33,34)
           ├── scan flavor_extra_specs [as=flavor_extra_specs_1]
           │    ├── columns: flavor_extra_specs_1.id:29!null key:30!null value:31 flavor_extra_specs_1.flavor_id:32!null flavor_extra_specs_1.created_at:33 flavor_extra_specs_1.updated_at:34
           │    ├── key: (29)
           │    └── fd: (29)-->(30-34), (30,32)-->(29,31,33,34)
           ├── limit
           │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
           │    ├── internal-ordering: +7
           │    ├── immutable, has-placeholder
           │    ├── key: (1)
           │    ├── fd: (1)-->(2-12,14,15,19,20), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15)
           │    ├── offset
           │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
           │    │    ├── internal-ordering: +7
           │    │    ├── has-placeholder
           │    │    ├── key: (1)
           │    │    ├── fd: (1)-->(2-12,14,15,19,20), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15)
           │    │    ├── ordering: +7
           │    │    ├── sort
           │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
           │    │    │    ├── has-placeholder
           │    │    │    ├── key: (1)
           │    │    │    ├── fd: (1)-->(2-12,14,15,19,20), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15)
           │    │    │    ├── ordering: +7
           │    │    │    └── select
           │    │    │         ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
           │    │    │         ├── has-placeholder
           │    │    │         ├── key: (1)
           │    │    │         ├── fd: (1)-->(2-12,14,15,19,20), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15)
           │    │    │         ├── left-join (merge)
           │    │    │         │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
           │    │    │         │    ├── left ordering: +1
           │    │    │         │    ├── right ordering: +19
           │    │    │         │    ├── has-placeholder
           │    │    │         │    ├── key: (1)
           │    │    │         │    ├── fd: (1)-->(2-12,14,15,19,20), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15)
           │    │    │         │    ├── scan flavors
           │    │    │         │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15
           │    │    │         │    │    ├── key: (1)
           │    │    │         │    │    ├── fd: (1)-->(2-12,14,15), (7)-->(1-6,8-12,14,15), (2)-->(1,3-12,14,15)
           │    │    │         │    │    └── ordering: +1
           │    │    │         │    ├── select
           │    │    │         │    │    ├── columns: flavor_projects.flavor_id:19!null project_id:20!null
           │    │    │         │    │    ├── has-placeholder
           │    │    │         │    │    ├── key: (19)
           │    │    │         │    │    ├── fd: ()-->(20)
           │    │    │         │    │    ├── ordering: +19 opt(20) [actual: +19]
           │    │    │         │    │    ├── scan flavor_projects@flavor_projects_flavor_id_project_id_key
           │    │    │         │    │    │    ├── columns: flavor_projects.flavor_id:19!null project_id:20!null
           │    │    │         │    │    │    ├── key: (19,20)
           │    │    │         │    │    │    └── ordering: +19
           │    │    │         │    │    └── filters
           │    │    │         │    │         └── project_id:20 = $1 [outer=(20), constraints=(/20: (/NULL - ]), fd=()-->(20)]
           │    │    │         │    └── filters (true)
           │    │    │         └── filters
           │    │    │              └── is_public:12 OR (flavor_projects.flavor_id:19 IS NOT NULL) [outer=(12,19)]
           │    │    └── $2
           │    └── $3
           └── filters
                └── flavor_extra_specs_1.flavor_id:32 = flavors.id:1 [outer=(1,32), constraints=(/1: (/NULL - ]; /32: (/NULL - ]), fd=(1)==(32), (32)==(1)]

opt
select anon_1.instance_types_created_at as anon_1_instance_types_created_at,
       anon_1.instance_types_updated_at as anon_1_instance_types_updated_at,
       anon_1.instance_types_deleted_at as anon_1_instance_types_deleted_at,
       anon_1.instance_types_deleted as anon_1_instance_types_deleted,
       anon_1.instance_types_id as anon_1_instance_types_id,
       anon_1.instance_types_name as anon_1_instance_types_name,
       anon_1.instance_types_memory_mb as anon_1_instance_types_memory_mb,
       anon_1.instance_types_vcpus as anon_1_instance_types_vcpus,
       anon_1.instance_types_root_gb as anon_1_instance_types_root_gb,
       anon_1.instance_types_ephemeral_gb as anon_1_instance_types_ephemeral_gb,
       anon_1.instance_types_flavorid as anon_1_instance_types_flavorid,
       anon_1.instance_types_swap as anon_1_instance_types_swap,
       anon_1.instance_types_rxtx_factor as anon_1_instance_types_rxtx_factor,
       anon_1.instance_types_vcpu_weight as anon_1_instance_types_vcpu_weight,
       anon_1.instance_types_disabled as anon_1_instance_types_disabled,
       anon_1.instance_types_is_public as anon_1_instance_types_is_public,
       instance_type_extra_specs_1.created_at as instance_type_extra_specs_1_created_at,
       instance_type_extra_specs_1.updated_at as instance_type_extra_specs_1_updated_at,
       instance_type_extra_specs_1.deleted_at as instance_type_extra_specs_1_deleted_at,
       instance_type_extra_specs_1.deleted as instance_type_extra_specs_1_deleted,
       instance_type_extra_specs_1.id as instance_type_extra_specs_1_id,
       instance_type_extra_specs_1."key" as instance_type_extra_specs_1_key,
       instance_type_extra_specs_1.value as instance_type_extra_specs_1_value,
       instance_type_extra_specs_1.instance_type_id as instance_type_extra_specs_1_instance_type_id
from (select instance_types.created_at as instance_types_created_at,
             instance_types.updated_at as instance_types_updated_at,
             instance_types.deleted_at as instance_types_deleted_at,
             instance_types.deleted as instance_types_deleted,
             instance_types.id as instance_types_id,
             instance_types.name as instance_types_name,
             instance_types.memory_mb as instance_types_memory_mb,
             instance_types.vcpus as instance_types_vcpus,
             instance_types.root_gb as instance_types_root_gb,
             instance_types.ephemeral_gb as instance_types_ephemeral_gb,
             instance_types.flavorid as instance_types_flavorid,
             instance_types.swap as instance_types_swap,
             instance_types.rxtx_factor as instance_types_rxtx_factor,
             instance_types.vcpu_weight as instance_types_vcpu_weight,
             instance_types.disabled as instance_types_disabled,
             instance_types.is_public as instance_types_is_public
      from instance_types
      where instance_types.deleted = $1
            and (instance_types.is_public = true
                 or (exists (select 1
                             from instance_type_projects
                             where instance_type_projects.instance_type_id = instance_types.id
                                   and instance_type_projects.deleted = $2
                                   and instance_type_projects.project_id = $3)))
            and instance_types.disabled = false
            and (instance_types.is_public = true
                 or (exists (select 1
                             from instance_type_projects
                             where instance_type_projects.instance_type_id = instance_types.id
                                   and instance_type_projects.deleted = $4
                                   and instance_type_projects.deleted = $5
                                   and instance_type_projects.project_id = $6)))
      order by instance_types.flavorid asc, instance_types.id asc
      offset $7 rows
      limit $8)
     as anon_1
     left join instance_type_extra_specs as instance_type_extra_specs_1
     on instance_type_extra_specs_1.instance_type_id = anon_1.instance_types_id
        and instance_type_extra_specs_1.deleted = $9
order by anon_1.instance_types_flavorid asc,
         anon_1.instance_types_id asc
----
sort
 ├── columns: anon_1_instance_types_created_at:15 anon_1_instance_types_updated_at:16 anon_1_instance_types_deleted_at:14 anon_1_instance_types_deleted:13!null anon_1_instance_types_id:1!null anon_1_instance_types_name:2 anon_1_instance_types_memory_mb:3!null anon_1_instance_types_vcpus:4!null anon_1_instance_types_root_gb:5 anon_1_instance_types_ephemeral_gb:6 anon_1_instance_types_flavorid:7 anon_1_instance_types_swap:8!null anon_1_instance_types_rxtx_factor:9 anon_1_instance_types_vcpu_weight:10 anon_1_instance_types_disabled:11!null anon_1_instance_types_is_public:12 instance_type_extra_specs_1_created_at:51 instance_type_extra_specs_1_updated_at:52 instance_type_extra_specs_1_deleted_at:50 instance_type_extra_specs_1_deleted:49 instance_type_extra_specs_1_id:45 instance_type_extra_specs_1_key:46 instance_type_extra_specs_1_value:47 instance_type_extra_specs_1_instance_type_id:48
 ├── immutable, has-placeholder
 ├── key: (1,45)
 ├── fd: ()-->(11,13), (1)-->(2-10,12,14-16), (7,13)~~>(1-6,8-10,12,14-16), (2,13)~~>(1,3-10,12,14-16), (45)-->(46-48,50-52), (46,48,49)~~>(45,47,50-52), (1,45)-->(49)
 ├── ordering: +7,+1 opt(11,13) [actual: +7,+1]
 └── project
      ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11!null is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_extra_specs_1.id:45 key:46 value:47 instance_type_extra_specs_1.instance_type_id:48 instance_type_extra_specs_1.deleted:49 instance_type_extra_specs_1.deleted_at:50 instance_type_extra_specs_1.created_at:51 instance_type_extra_specs_1.updated_at:52
      ├── immutable, has-placeholder
      ├── key: (1,45)
      ├── fd: ()-->(11,13), (1)-->(2-10,12,14-16), (7,13)~~>(1-6,8-10,12,14-16), (2,13)~~>(1,3-10,12,14-16), (45)-->(46-48,50-52), (46,48,49)~~>(45,47,50-52), (1,45)-->(49)
      └── right-join (hash)
           ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11!null is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22 instance_type_projects.instance_type_id:30 project_id:31 instance_type_projects.deleted:32 instance_type_extra_specs_1.id:45 key:46 value:47 instance_type_extra_specs_1.instance_type_id:48 instance_type_extra_specs_1.deleted:49 instance_type_extra_specs_1.deleted_at:50 instance_type_extra_specs_1.created_at:51 instance_type_extra_specs_1.updated_at:52
           ├── immutable, has-placeholder
           ├── key: (1,45)
           ├── fd: ()-->(11,13), (1)-->(2-10,12,14-16,20-22,30-32), (7,13)~~>(1-6,8-10,12,14-16), (2,13)~~>(1,3-10,12,14-16), (45)-->(46-48,50-52), (46,48,49)~~>(45,47,50-52), (1,45)-->(49)
           ├── select
           │    ├── columns: instance_type_extra_specs_1.id:45!null key:46 value:47 instance_type_extra_specs_1.instance_type_id:48!null instance_type_extra_specs_1.deleted:49!null instance_type_extra_specs_1.deleted_at:50 instance_type_extra_specs_1.created_at:51 instance_type_extra_specs_1.updated_at:52
           │    ├── has-placeholder
           │    ├── key: (45)
           │    ├── fd: ()-->(49), (45)-->(46-48,50-52), (46,48,49)~~>(45,47,50-52)
           │    ├── scan instance_type_extra_specs [as=instance_type_extra_specs_1]
           │    │    ├── columns: instance_type_extra_specs_1.id:45!null key:46 value:47 instance_type_extra_specs_1.instance_type_id:48!null instance_type_extra_specs_1.deleted:49 instance_type_extra_specs_1.deleted_at:50 instance_type_extra_specs_1.created_at:51 instance_type_extra_specs_1.updated_at:52
           │    │    ├── key: (45)
           │    │    └── fd: (45)-->(46-52), (46,48,49)~~>(45,47,50-52)
           │    └── filters
           │         └── instance_type_extra_specs_1.deleted:49 = $9 [outer=(49), constraints=(/49: (/NULL - ]), fd=()-->(49)]
           ├── limit
           │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11!null is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22 instance_type_projects.instance_type_id:30 project_id:31 instance_type_projects.deleted:32
           │    ├── internal-ordering: +7,+1 opt(11,13)
           │    ├── immutable, has-placeholder
           │    ├── key: (1)
           │    ├── fd: ()-->(11,13), (1)-->(2-10,12,14-16,20-22,30-32), (7,13)~~>(1-6,8-10,12,14-16), (2,13)~~>(1,3-10,12,14-16)
           │    ├── offset
           │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11!null is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22 instance_type_projects.instance_type_id:30 project_id:31 instance_type_projects.deleted:32
           │    │    ├── internal-ordering: +7,+1 opt(11,13)
           │    │    ├── has-placeholder
           │    │    ├── key: (1)
           │    │    ├── fd: ()-->(11,13), (1)-->(2-10,12,14-16,20-22,30-32), (7,13)~~>(1-6,8-10,12,14-16), (2,13)~~>(1,3-10,12,14-16)
           │    │    ├── ordering: +7,+1 opt(11,13) [actual: +7,+1]
           │    │    ├── sort
           │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11!null is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22 instance_type_projects.instance_type_id:30 project_id:31 instance_type_projects.deleted:32
           │    │    │    ├── has-placeholder
           │    │    │    ├── key: (1)
           │    │    │    ├── fd: ()-->(11,13), (1)-->(2-10,12,14-16,20-22,30-32), (7,13)~~>(1-6,8-10,12,14-16), (2,13)~~>(1,3-10,12,14-16)
           │    │    │    ├── ordering: +7,+1 opt(11,13) [actual: +7,+1]
           │    │    │    └── select
           │    │    │         ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11!null is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22 instance_type_projects.instance_type_id:30 project_id:31 instance_type_projects.deleted:32
           │    │    │         ├── has-placeholder
           │    │    │         ├── key: (1)
           │    │    │         ├── fd: ()-->(11,13), (1)-->(2-10,12,14-16,20-22,30-32), (7,13)~~>(1-6,8-10,12,14-16), (2,13)~~>(1,3-10,12,14-16)
           │    │    │         ├── left-join (merge)
           │    │    │         │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11!null is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22 instance_type_projects.instance_type_id:30 project_id:31 instance_type_projects.deleted:32
           │    │    │         │    ├── left ordering: +1
           │    │    │         │    ├── right ordering: +30
           │    │    │         │    ├── has-placeholder
           │    │    │         │    ├── key: (1)
           │    │    │         │    ├── fd: ()-->(11,13), (1)-->(2-10,12,14-16,20-22,30-32), (7,13)~~>(1-6,8-10,12,14-16), (2,13)~~>(1,3-10,12,14-16)
           │    │    │         │    ├── select
           │    │    │         │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11!null is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
           │    │    │         │    │    ├── has-placeholder
           │    │    │         │    │    ├── key: (1)
           │    │    │         │    │    ├── fd: ()-->(11,13), (1)-->(2-10,12,14-16,20-22), (7,13)~~>(1-6,8-10,12,14-16), (2,13)~~>(1,3-10,12,14-16)
           │    │    │         │    │    ├── ordering: +1 opt(11,13) [actual: +1]
           │    │    │         │    │    ├── left-join (merge)
           │    │    │         │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11!null is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
           │    │    │         │    │    │    ├── left ordering: +1
           │    │    │         │    │    │    ├── right ordering: +20
           │    │    │         │    │    │    ├── has-placeholder
           │    │    │         │    │    │    ├── key: (1)
           │    │    │         │    │    │    ├── fd: ()-->(11,13), (1)-->(2-10,12,14-16,20-22), (7,13)~~>(1-6,8-10,12,14-16), (2,13)~~>(1,3-10,12,14-16)
           │    │    │         │    │    │    ├── ordering: +1 opt(11,13) [actual: +1]
           │    │    │         │    │    │    ├── select
           │    │    │         │    │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11!null is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16
           │    │    │         │    │    │    │    ├── has-placeholder
           │    │    │         │    │    │    │    ├── key: (1)
           │    │    │         │    │    │    │    ├── fd: ()-->(11,13), (1)-->(2-10,12,14-16), (7,13)~~>(1-6,8-10,12,14-16), (2,13)~~>(1,3-10,12,14-16)
           │    │    │         │    │    │    │    ├── ordering: +1 opt(11,13) [actual: +1]
           │    │    │         │    │    │    │    ├── scan instance_types
           │    │    │         │    │    │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7 swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13 instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16
           │    │    │         │    │    │    │    │    ├── key: (1)
           │    │    │         │    │    │    │    │    ├── fd: (1)-->(2-16), (7,13)~~>(1-6,8-12,14-16), (2,13)~~>(1,3-12,14-16)
           │    │    │         │    │    │    │    │    └── ordering: +1
           │    │    │         │    │    │    │    └── filters
           │    │    │         │    │    │    │         ├── instance_types.deleted:13 = $1 [outer=(13), constraints=(/13: (/NULL - ]), fd=()-->(13)]
           │    │    │         │    │    │    │         └── NOT disabled:11 [outer=(11), constraints=(/11: [/false - /false]; tight), fd=()-->(11)]
           │    │    │         │    │    │    ├── select
           │    │    │         │    │    │    │    ├── columns: instance_type_projects.instance_type_id:20!null project_id:21!null instance_type_projects.deleted:22!null
           │    │    │         │    │    │    │    ├── has-placeholder
           │    │    │         │    │    │    │    ├── key: (20)
           │    │    │         │    │    │    │    ├── fd: ()-->(21,22)
           │    │    │         │    │    │    │    ├── ordering: +20 opt(21,22) [actual: +20]
           │    │    │         │    │    │    │    ├── scan instance_type_projects@instance_type_projects_instance_type_id_project_id_deleted_key
           │    │    │         │    │    │    │    │    ├── columns: instance_type_projects.instance_type_id:20!null project_id:21 instance_type_projects.deleted:22
           │    │    │         │    │    │    │    │    ├── lax-key: (20-22)
           │    │    │         │    │    │    │    │    └── ordering: +20
           │    │    │         │    │    │    │    └── filters
           │    │    │         │    │    │    │         ├── instance_type_projects.deleted:22 = $2 [outer=(22), constraints=(/22: (/NULL - ]), fd=()-->(22)]
           │    │    │         │    │    │    │         └── project_id:21 = $3 [outer=(21), constraints=(/21: (/NULL - ]), fd=()-->(21)]
           │    │    │         │    │    │    └── filters (true)
           │    │    │         │    │    └── filters
           │    │    │         │    │         └── is_public:12 OR (instance_type_projects.instance_type_id:20 IS NOT NULL) [outer=(12,20)]
           │    │    │         │    ├── select
           │    │    │         │    │    ├── columns: instance_type_projects.instance_type_id:30!null project_id:31!null instance_type_projects.deleted:32!null
           │    │    │         │    │    ├── has-placeholder
           │    │    │         │    │    ├── key: (30)
           │    │    │         │    │    ├── fd: ()-->(31,32)
           │    │    │         │    │    ├── ordering: +30 opt(31,32) [actual: +30]
           │    │    │         │    │    ├── scan instance_type_projects@instance_type_projects_instance_type_id_project_id_deleted_key
           │    │    │         │    │    │    ├── columns: instance_type_projects.instance_type_id:30!null project_id:31 instance_type_projects.deleted:32
           │    │    │         │    │    │    ├── lax-key: (30-32)
           │    │    │         │    │    │    └── ordering: +30
           │    │    │         │    │    └── filters
           │    │    │         │    │         ├── instance_type_projects.deleted:32 = $4 [outer=(32), constraints=(/32: (/NULL - ]), fd=()-->(32)]
           │    │    │         │    │         ├── instance_type_projects.deleted:32 = $5 [outer=(32), constraints=(/32: (/NULL - ]), fd=()-->(32)]
           │    │    │         │    │         └── project_id:31 = $6 [outer=(31), constraints=(/31: (/NULL - ]), fd=()-->(31)]
           │    │    │         │    └── filters (true)
           │    │    │         └── filters
           │    │    │              └── is_public:12 OR (instance_type_projects.instance_type_id:30 IS NOT NULL) [outer=(12,30)]
           │    │    └── $7
           │    └── $8
           └── filters
                └── instance_type_extra_specs_1.instance_type_id:48 = instance_types.id:1 [outer=(1,48), constraints=(/1: (/NULL - ]; /48: (/NULL - ]), fd=(1)==(48), (48)==(1)]

opt
select anon_1.instance_types_created_at as anon_1_instance_types_created_at,
       anon_1.instance_types_updated_at as anon_1_instance_types_updated_at,
       anon_1.instance_types_deleted_at as anon_1_instance_types_deleted_at,
       anon_1.instance_types_deleted as anon_1_instance_types_deleted,
       anon_1.instance_types_id as anon_1_instance_types_id,
       anon_1.instance_types_name as anon_1_instance_types_name,
       anon_1.instance_types_memory_mb as anon_1_instance_types_memory_mb,
       anon_1.instance_types_vcpus as anon_1_instance_types_vcpus,
       anon_1.instance_types_root_gb as anon_1_instance_types_root_gb,
       anon_1.instance_types_ephemeral_gb as anon_1_instance_types_ephemeral_gb,
       anon_1.instance_types_flavorid as anon_1_instance_types_flavorid,
       anon_1.instance_types_swap as anon_1_instance_types_swap,
       anon_1.instance_types_rxtx_factor as anon_1_instance_types_rxtx_factor,
       anon_1.instance_types_vcpu_weight as anon_1_instance_types_vcpu_weight,
       anon_1.instance_types_disabled as anon_1_instance_types_disabled,
       anon_1.instance_types_is_public as anon_1_instance_types_is_public,
       instance_type_extra_specs_1.created_at as instance_type_extra_specs_1_created_at,
       instance_type_extra_specs_1.updated_at as instance_type_extra_specs_1_updated_at,
       instance_type_extra_specs_1.deleted_at as instance_type_extra_specs_1_deleted_at,
       instance_type_extra_specs_1.deleted as instance_type_extra_specs_1_deleted,
       instance_type_extra_specs_1.id as instance_type_extra_specs_1_id,
       instance_type_extra_specs_1."key" as instance_type_extra_specs_1_key,
       instance_type_extra_specs_1.value as instance_type_extra_specs_1_value,
       instance_type_extra_specs_1.instance_type_id as instance_type_extra_specs_1_instance_type_id
from (select instance_types.created_at as instance_types_created_at,
             instance_types.updated_at as instance_types_updated_at,
             instance_types.deleted_at as instance_types_deleted_at,
             instance_types.deleted as instance_types_deleted,
             instance_types.id as instance_types_id,
             instance_types.name as instance_types_name,
             instance_types.memory_mb as instance_types_memory_mb,
             instance_types.vcpus as instance_types_vcpus,
             instance_types.root_gb as instance_types_root_gb,
             instance_types.ephemeral_gb as instance_types_ephemeral_gb,
             instance_types.flavorid as instance_types_flavorid,
             instance_types.swap as instance_types_swap,
             instance_types.rxtx_factor as instance_types_rxtx_factor,
             instance_types.vcpu_weight as instance_types_vcpu_weight,
             instance_types.disabled as instance_types_disabled,
             instance_types.is_public as instance_types_is_public
      from instance_types
      where instance_types.deleted = $1
            and (instance_types.is_public = true
                 or (exists (select 1
                             from instance_type_projects
                             where instance_type_projects.instance_type_id = instance_types.id
                                   and instance_type_projects.deleted = $2
                                   and instance_type_projects.project_id = $3)))
            and instance_types.flavorid = $4
      order by instance_types.deleted asc, instance_types.id asc
      offset $5 rows
      limit $6)
     as anon_1
     left join instance_type_extra_specs as instance_type_extra_specs_1
     on instance_type_extra_specs_1.instance_type_id = anon_1.instance_types_id
        and instance_type_extra_specs_1.deleted = $7
order by anon_1.instance_types_deleted asc,
         anon_1.instance_types_id asc
----
project
 ├── columns: anon_1_instance_types_created_at:15 anon_1_instance_types_updated_at:16 anon_1_instance_types_deleted_at:14 anon_1_instance_types_deleted:13!null anon_1_instance_types_id:1!null anon_1_instance_types_name:2 anon_1_instance_types_memory_mb:3!null anon_1_instance_types_vcpus:4!null anon_1_instance_types_root_gb:5 anon_1_instance_types_ephemeral_gb:6 anon_1_instance_types_flavorid:7!null anon_1_instance_types_swap:8!null anon_1_instance_types_rxtx_factor:9 anon_1_instance_types_vcpu_weight:10 anon_1_instance_types_disabled:11 anon_1_instance_types_is_public:12 instance_type_extra_specs_1_created_at:38 instance_type_extra_specs_1_updated_at:39 instance_type_extra_specs_1_deleted_at:37 instance_type_extra_specs_1_deleted:36 instance_type_extra_specs_1_id:32 instance_type_extra_specs_1_key:33 instance_type_extra_specs_1_value:34 instance_type_extra_specs_1_instance_type_id:35
 ├── immutable, has-placeholder
 ├── key: (32)
 ├── fd: ()-->(1-16,35), (32)-->(33,34,36-39), (33,35,36)~~>(32,34,37-39)
 └── left-join (lookup instance_type_extra_specs [as=instance_type_extra_specs_1])
      ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22 instance_type_extra_specs_1.id:32 key:33 value:34 instance_type_extra_specs_1.instance_type_id:35 instance_type_extra_specs_1.deleted:36 instance_type_extra_specs_1.deleted_at:37 instance_type_extra_specs_1.created_at:38 instance_type_extra_specs_1.updated_at:39
      ├── key columns: [32] = [32]
      ├── lookup columns are key
      ├── immutable, has-placeholder
      ├── key: (32)
      ├── fd: ()-->(1-16,20-22,35), (32)-->(33,34,36-39), (33,35,36)~~>(32,34,37-39)
      ├── left-join (lookup instance_type_extra_specs@instance_type_extra_specs_instance_type_id_key_deleted_key [as=instance_type_extra_specs_1])
      │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22 instance_type_extra_specs_1.id:32 key:33 instance_type_extra_specs_1.instance_type_id:35 instance_type_extra_specs_1.deleted:36
      │    ├── key columns: [1] = [35]
      │    ├── immutable, has-placeholder
      │    ├── key: (32)
      │    ├── fd: ()-->(1-16,20-22,35,36), (32)-->(33), (33,35,36)~~>(32)
      │    ├── limit
      │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
      │    │    ├── cardinality: [0 - 1]
      │    │    ├── immutable, has-placeholder
      │    │    ├── key: ()
      │    │    ├── fd: ()-->(1-16,20-22)
      │    │    ├── offset
      │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
      │    │    │    ├── cardinality: [0 - 1]
      │    │    │    ├── has-placeholder
      │    │    │    ├── key: ()
      │    │    │    ├── fd: ()-->(1-16,20-22)
      │    │    │    ├── select
      │    │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
      │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    ├── has-placeholder
      │    │    │    │    ├── key: ()
      │    │    │    │    ├── fd: ()-->(1-16,20-22)
      │    │    │    │    ├── left-join (lookup instance_type_projects@instance_type_projects_instance_type_id_project_id_deleted_key)
      │    │    │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 instance_type_projects.instance_type_id:20 project_id:21 instance_type_projects.deleted:22
      │    │    │    │    │    ├── key columns: [1] = [20]
      │    │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    │    ├── has-placeholder
      │    │    │    │    │    ├── key: ()
      │    │    │    │    │    ├── fd: ()-->(1-16,20-22)
      │    │    │    │    │    ├── project
      │    │    │    │    │    │    ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16
      │    │    │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    │    │    ├── has-placeholder
      │    │    │    │    │    │    ├── key: ()
      │    │    │    │    │    │    ├── fd: ()-->(1-16)
      │    │    │    │    │    │    └── inner-join (lookup instance_types)
      │    │    │    │    │    │         ├── columns: instance_types.id:1!null name:2 memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 instance_types.deleted:13!null instance_types.deleted_at:14 instance_types.created_at:15 instance_types.updated_at:16 "$1":42!null "$4":43!null
      │    │    │    │    │    │         ├── key columns: [1] = [1]
      │    │    │    │    │    │         ├── lookup columns are key
      │    │    │    │    │    │         ├── cardinality: [0 - 1]
      │    │    │    │    │    │         ├── has-placeholder
      │    │    │    │    │    │         ├── key: ()
      │    │    │    │    │    │         ├── fd: ()-->(1-16,42,43), (13)==(42), (42)==(13), (7)==(43), (43)==(7)
      │    │    │    │    │    │         ├── inner-join (lookup instance_types@instance_types_flavorid_deleted_key)
      │    │    │    │    │    │         │    ├── columns: instance_types.id:1!null flavorid:7!null instance_types.deleted:13!null "$1":42!null "$4":43!null
      │    │    │    │    │    │         │    ├── flags: disallow merge join
      │    │    │    │    │    │         │    ├── key columns: [43 42] = [7 13]
      │    │    │    │    │    │         │    ├── lookup columns are key
      │    │    │    │    │    │         │    ├── cardinality: [0 - 1]
      │    │    │    │    │    │         │    ├── has-placeholder
      │    │    │    │    │    │         │    ├── key: ()
      │    │    │    │    │    │         │    ├── fd: ()-->(1,7,13,42,43), (7)==(43), (43)==(7), (13)==(42), (42)==(13)
      │    │    │    │    │    │         │    ├── values
      │    │    │    │    │    │         │    │    ├── columns: "$1":42 "$4":43
      │    │    │    │    │    │         │    │    ├── cardinality: [1 - 1]
      │    │    │    │    │    │         │    │    ├── has-placeholder
      │    │    │    │    │    │         │    │    ├── key: ()
      │    │    │    │    │    │         │    │    ├── fd: ()-->(42,43)
      │    │    │    │    │    │         │    │    └── ($1, $4)
      │    │    │    │    │    │         │    └── filters (true)
      │    │    │    │    │    │         └── filters (true)
      │    │    │    │    │    └── filters
      │    │    │    │    │         ├── instance_type_projects.deleted:22 = $2 [outer=(22), constraints=(/22: (/NULL - ]), fd=()-->(22)]
      │    │    │    │    │         └── project_id:21 = $3 [outer=(21), constraints=(/21: (/NULL - ]), fd=()-->(21)]
      │    │    │    │    └── filters
      │    │    │    │         └── is_public:12 OR (instance_type_projects.instance_type_id:20 IS NOT NULL) [outer=(12,20)]
      │    │    │    └── $5
      │    │    └── $6
      │    └── filters
      │         └── instance_type_extra_specs_1.deleted:36 = $7 [outer=(36), constraints=(/36: (/NULL - ]), fd=()-->(36)]
      └── filters (true)

opt
select anon_1.flavors_created_at as anon_1_flavors_created_at,
       anon_1.flavors_updated_at as anon_1_flavors_updated_at,
       anon_1.flavors_id as anon_1_flavors_id,
       anon_1.flavors_name as anon_1_flavors_name,
       anon_1.flavors_memory_mb as anon_1_flavors_memory_mb,
       anon_1.flavors_vcpus as anon_1_flavors_vcpus,
       anon_1.flavors_root_gb as anon_1_flavors_root_gb,
       anon_1.flavors_ephemeral_gb as anon_1_flavors_ephemeral_gb,
       anon_1.flavors_flavorid as anon_1_flavors_flavorid,
       anon_1.flavors_swap as anon_1_flavors_swap,
       anon_1.flavors_rxtx_factor as anon_1_flavors_rxtx_factor,
       anon_1.flavors_vcpu_weight as anon_1_flavors_vcpu_weight,
       anon_1.flavors_disabled as anon_1_flavors_disabled,
       anon_1.flavors_is_public as anon_1_flavors_is_public,
       flavor_extra_specs_1.created_at as flavor_extra_specs_1_created_at,
       flavor_extra_specs_1.updated_at as flavor_extra_specs_1_updated_at,
       flavor_extra_specs_1.id as flavor_extra_specs_1_id,
       flavor_extra_specs_1."key" as flavor_extra_specs_1_key,
       flavor_extra_specs_1.value as flavor_extra_specs_1_value,
       flavor_extra_specs_1.flavor_id as flavor_extra_specs_1_flavor_id
from (select flavors.created_at as flavors_created_at,
             flavors.updated_at as flavors_updated_at,
             flavors.id as flavors_id,
             flavors.name as flavors_name,
             flavors.memory_mb as flavors_memory_mb,
             flavors.vcpus as flavors_vcpus,
             flavors.root_gb as flavors_root_gb,
             flavors.ephemeral_gb as flavors_ephemeral_gb,
             flavors.flavorid as flavors_flavorid,
             flavors.swap as flavors_swap,
             flavors.rxtx_factor as flavors_rxtx_factor,
             flavors.vcpu_weight as flavors_vcpu_weight,
             flavors.disabled as flavors_disabled,
             flavors.is_public as flavors_is_public
      from flavors
      where (flavors.is_public = true
             or (exists (select 1
                         from flavor_projects
                         where flavor_projects.flavor_id = flavors.id
                               and flavor_projects.project_id = $1)))
            and flavors.id = $2
      offset $3 rows
      limit $4)
     as anon_1
     left join flavor_extra_specs as flavor_extra_specs_1
     on flavor_extra_specs_1.flavor_id = anon_1.flavors_id
----
project
 ├── columns: anon_1_flavors_created_at:14 anon_1_flavors_updated_at:15 anon_1_flavors_id:1!null anon_1_flavors_name:2!null anon_1_flavors_memory_mb:3!null anon_1_flavors_vcpus:4!null anon_1_flavors_root_gb:5 anon_1_flavors_ephemeral_gb:6 anon_1_flavors_flavorid:7!null anon_1_flavors_swap:8!null anon_1_flavors_rxtx_factor:9 anon_1_flavors_vcpu_weight:10 anon_1_flavors_disabled:11 anon_1_flavors_is_public:12 flavor_extra_specs_1_created_at:33 flavor_extra_specs_1_updated_at:34 flavor_extra_specs_1_id:29 flavor_extra_specs_1_key:30 flavor_extra_specs_1_value:31 flavor_extra_specs_1_flavor_id:32
 ├── immutable, has-placeholder
 ├── key: (29)
 ├── fd: ()-->(1-12,14,15,32), (29)-->(30,31,33,34), (30)-->(29,31,33,34)
 └── left-join (lookup flavor_extra_specs [as=flavor_extra_specs_1])
      ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20 flavor_extra_specs_1.id:29 key:30 value:31 flavor_extra_specs_1.flavor_id:32 flavor_extra_specs_1.created_at:33 flavor_extra_specs_1.updated_at:34
      ├── key columns: [29] = [29]
      ├── lookup columns are key
      ├── immutable, has-placeholder
      ├── key: (29)
      ├── fd: ()-->(1-12,14,15,19,20,32), (29)-->(30,31,33,34), (30)-->(29,31,33,34)
      ├── left-join (lookup flavor_extra_specs@flavor_extra_specs_flavor_id_key_idx [as=flavor_extra_specs_1])
      │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20 flavor_extra_specs_1.id:29 key:30 flavor_extra_specs_1.flavor_id:32
      │    ├── key columns: [1] = [32]
      │    ├── immutable, has-placeholder
      │    ├── key: (29)
      │    ├── fd: ()-->(1-12,14,15,19,20,32), (29)-->(30), (30)-->(29)
      │    ├── limit
      │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
      │    │    ├── cardinality: [0 - 1]
      │    │    ├── immutable, has-placeholder
      │    │    ├── key: ()
      │    │    ├── fd: ()-->(1-12,14,15,19,20)
      │    │    ├── offset
      │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
      │    │    │    ├── cardinality: [0 - 1]
      │    │    │    ├── has-placeholder
      │    │    │    ├── key: ()
      │    │    │    ├── fd: ()-->(1-12,14,15,19,20)
      │    │    │    ├── select
      │    │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
      │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    ├── has-placeholder
      │    │    │    │    ├── key: ()
      │    │    │    │    ├── fd: ()-->(1-12,14,15,19,20)
      │    │    │    │    ├── left-join (merge)
      │    │    │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
      │    │    │    │    │    ├── left ordering: +1
      │    │    │    │    │    ├── right ordering: +19
      │    │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    │    ├── has-placeholder
      │    │    │    │    │    ├── key: ()
      │    │    │    │    │    ├── fd: ()-->(1-12,14,15,19,20)
      │    │    │    │    │    ├── project
      │    │    │    │    │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15
      │    │    │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    │    │    ├── has-placeholder
      │    │    │    │    │    │    ├── key: ()
      │    │    │    │    │    │    ├── fd: ()-->(1-12,14,15)
      │    │    │    │    │    │    └── inner-join (lookup flavors)
      │    │    │    │    │    │         ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 flavors.created_at:14 flavors.updated_at:15 "$2":37!null
      │    │    │    │    │    │         ├── flags: disallow merge join
      │    │    │    │    │    │         ├── key columns: [37] = [1]
      │    │    │    │    │    │         ├── lookup columns are key
      │    │    │    │    │    │         ├── cardinality: [0 - 1]
      │    │    │    │    │    │         ├── has-placeholder
      │    │    │    │    │    │         ├── key: ()
      │    │    │    │    │    │         ├── fd: ()-->(1-12,14,15,37), (1)==(37), (37)==(1)
      │    │    │    │    │    │         ├── values
      │    │    │    │    │    │         │    ├── columns: "$2":37
      │    │    │    │    │    │         │    ├── cardinality: [1 - 1]
      │    │    │    │    │    │         │    ├── has-placeholder
      │    │    │    │    │    │         │    ├── key: ()
      │    │    │    │    │    │         │    ├── fd: ()-->(37)
      │    │    │    │    │    │         │    └── ($2,)
      │    │    │    │    │    │         └── filters (true)
      │    │    │    │    │    ├── project
      │    │    │    │    │    │    ├── columns: flavor_projects.flavor_id:19!null project_id:20!null
      │    │    │    │    │    │    ├── cardinality: [0 - 1]
      │    │    │    │    │    │    ├── has-placeholder
      │    │    │    │    │    │    ├── key: ()
      │    │    │    │    │    │    ├── fd: ()-->(19,20)
      │    │    │    │    │    │    └── inner-join (lookup flavor_projects@flavor_projects_flavor_id_project_id_key)
      │    │    │    │    │    │         ├── columns: flavor_projects.flavor_id:19!null project_id:20!null "$1":38!null "$2":39!null
      │    │    │    │    │    │         ├── flags: disallow merge join
      │    │    │    │    │    │         ├── key columns: [39 38] = [19 20]
      │    │    │    │    │    │         ├── lookup columns are key
      │    │    │    │    │    │         ├── cardinality: [0 - 1]
      │    │    │    │    │    │         ├── has-placeholder
      │    │    │    │    │    │         ├── key: ()
      │    │    │    │    │    │         ├── fd: ()-->(19,20,38,39), (20)==(38), (38)==(20), (19)==(39), (39)==(19)
      │    │    │    │    │    │         ├── values
      │    │    │    │    │    │         │    ├── columns: "$1":38 "$2":39
      │    │    │    │    │    │         │    ├── cardinality: [1 - 1]
      │    │    │    │    │    │         │    ├── has-placeholder
      │    │    │    │    │    │         │    ├── key: ()
      │    │    │    │    │    │         │    ├── fd: ()-->(38,39)
      │    │    │    │    │    │         │    └── ($1, $2)
      │    │    │    │    │    │         └── filters (true)
      │    │    │    │    │    └── filters (true)
      │    │    │    │    └── filters
      │    │    │    │         └── is_public:12 OR (flavor_projects.flavor_id:19 IS NOT NULL) [outer=(12,19)]
      │    │    │    └── $3
      │    │    └── $4
      │    └── filters (true)
      └── filters (true)

opt
select anon_1.flavors_created_at as anon_1_flavors_created_at,
       anon_1.flavors_updated_at as anon_1_flavors_updated_at,
       anon_1.flavors_id as anon_1_flavors_id,
       anon_1.flavors_name as anon_1_flavors_name,
       anon_1.flavors_memory_mb as anon_1_flavors_memory_mb,
       anon_1.flavors_vcpus as anon_1_flavors_vcpus,
       anon_1.flavors_root_gb as anon_1_flavors_root_gb,
       anon_1.flavors_ephemeral_gb as anon_1_flavors_ephemeral_gb,
       anon_1.flavors_flavorid as anon_1_flavors_flavorid,
       anon_1.flavors_swap as anon_1_flavors_swap,
       anon_1.flavors_rxtx_factor as anon_1_flavors_rxtx_factor,
       anon_1.flavors_vcpu_weight as anon_1_flavors_vcpu_weight,
       anon_1.flavors_disabled as anon_1_flavors_disabled,
       anon_1.flavors_is_public as anon_1_flavors_is_public,
       anon_1.flavors_description as anon_1_flavors_description,
       flavor_extra_specs_1.created_at as flavor_extra_specs_1_created_at,
       flavor_extra_specs_1.updated_at as flavor_extra_specs_1_updated_at,
       flavor_extra_specs_1.id as flavor_extra_specs_1_id,
       flavor_extra_specs_1."key" as flavor_extra_specs_1_key,
       flavor_extra_specs_1.value as flavor_extra_specs_1_value,
       flavor_extra_specs_1.flavor_id as flavor_extra_specs_1_flavor_id
from (select flavors.created_at as flavors_created_at,
             flavors.updated_at as flavors_updated_at,
             flavors.id as flavors_id,
             flavors.name as flavors_name,
             flavors.memory_mb as flavors_memory_mb,
             flavors.vcpus as flavors_vcpus,
             flavors.root_gb as flavors_root_gb,
             flavors.ephemeral_gb as flavors_ephemeral_gb,
             flavors.flavorid as flavors_flavorid,
             flavors.swap as flavors_swap,
             flavors.rxtx_factor as flavors_rxtx_factor,
             flavors.vcpu_weight as flavors_vcpu_weight,
             flavors.disabled as flavors_disabled,
             flavors.is_public as flavors_is_public,
             flavors.description as flavors_description
      from flavors
      where flavors.is_public = true
            or (exists (select 1
                        from flavor_projects
                        where flavor_projects.flavor_id = flavors.id
                              and flavor_projects.project_id = $1))
      order by flavors.flavorid asc, flavors.id asc
      limit $2)
     as anon_1
     left join flavor_extra_specs as flavor_extra_specs_1
     on flavor_extra_specs_1.flavor_id = anon_1.flavors_id
order by anon_1.flavors_flavorid asc, anon_1.flavors_id asc
----
sort
 ├── columns: anon_1_flavors_created_at:14 anon_1_flavors_updated_at:15 anon_1_flavors_id:1!null anon_1_flavors_name:2!null anon_1_flavors_memory_mb:3!null anon_1_flavors_vcpus:4!null anon_1_flavors_root_gb:5 anon_1_flavors_ephemeral_gb:6 anon_1_flavors_flavorid:7!null anon_1_flavors_swap:8!null anon_1_flavors_rxtx_factor:9 anon_1_flavors_vcpu_weight:10 anon_1_flavors_disabled:11 anon_1_flavors_is_public:12 anon_1_flavors_description:13 flavor_extra_specs_1_created_at:33 flavor_extra_specs_1_updated_at:34 flavor_extra_specs_1_id:29 flavor_extra_specs_1_key:30 flavor_extra_specs_1_value:31 flavor_extra_specs_1_flavor_id:32
 ├── immutable, has-placeholder
 ├── key: (1,29)
 ├── fd: (1)-->(2-15), (7)-->(1-6,8-15), (2)-->(1,3-15), (29)-->(30-34), (30,32)-->(29,31,33,34)
 ├── ordering: +7
 └── project
      ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 description:13 flavors.created_at:14 flavors.updated_at:15 flavor_extra_specs_1.id:29 key:30 value:31 flavor_extra_specs_1.flavor_id:32 flavor_extra_specs_1.created_at:33 flavor_extra_specs_1.updated_at:34
      ├── immutable, has-placeholder
      ├── key: (1,29)
      ├── fd: (1)-->(2-15), (7)-->(1-6,8-15), (2)-->(1,3-15), (29)-->(30-34), (30,32)-->(29,31,33,34)
      └── right-join (hash)
           ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 description:13 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20 flavor_extra_specs_1.id:29 key:30 value:31 flavor_extra_specs_1.flavor_id:32 flavor_extra_specs_1.created_at:33 flavor_extra_specs_1.updated_at:34
           ├── immutable, has-placeholder
           ├── key: (1,29)
           ├── fd: (1)-->(2-15,19,20), (7)-->(1-6,8-15), (2)-->(1,3-15), (29)-->(30-34), (30,32)-->(29,31,33,34)
           ├── scan flavor_extra_specs [as=flavor_extra_specs_1]
           │    ├── columns: flavor_extra_specs_1.id:29!null key:30!null value:31 flavor_extra_specs_1.flavor_id:32!null flavor_extra_specs_1.created_at:33 flavor_extra_specs_1.updated_at:34
           │    ├── key: (29)
           │    └── fd: (29)-->(30-34), (30,32)-->(29,31,33,34)
           ├── limit
           │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 description:13 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
           │    ├── internal-ordering: +7
           │    ├── immutable, has-placeholder
           │    ├── key: (1)
           │    ├── fd: (1)-->(2-15,19,20), (7)-->(1-6,8-15), (2)-->(1,3-15)
           │    ├── sort
           │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 description:13 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
           │    │    ├── has-placeholder
           │    │    ├── key: (1)
           │    │    ├── fd: (1)-->(2-15,19,20), (7)-->(1-6,8-15), (2)-->(1,3-15)
           │    │    ├── ordering: +7
           │    │    └── select
           │    │         ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 description:13 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
           │    │         ├── has-placeholder
           │    │         ├── key: (1)
           │    │         ├── fd: (1)-->(2-15,19,20), (7)-->(1-6,8-15), (2)-->(1,3-15)
           │    │         ├── left-join (merge)
           │    │         │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 description:13 flavors.created_at:14 flavors.updated_at:15 flavor_projects.flavor_id:19 project_id:20
           │    │         │    ├── left ordering: +1
           │    │         │    ├── right ordering: +19
           │    │         │    ├── has-placeholder
           │    │         │    ├── key: (1)
           │    │         │    ├── fd: (1)-->(2-15,19,20), (7)-->(1-6,8-15), (2)-->(1,3-15)
           │    │         │    ├── scan flavors
           │    │         │    │    ├── columns: flavors.id:1!null name:2!null memory_mb:3!null vcpus:4!null root_gb:5 ephemeral_gb:6 flavorid:7!null swap:8!null rxtx_factor:9 vcpu_weight:10 disabled:11 is_public:12 description:13 flavors.created_at:14 flavors.updated_at:15
           │    │         │    │    ├── key: (1)
           │    │         │    │    ├── fd: (1)-->(2-15), (7)-->(1-6,8-15), (2)-->(1,3-15)
           │    │         │    │    └── ordering: +1
           │    │         │    ├── select
           │    │         │    │    ├── columns: flavor_projects.flavor_id:19!null project_id:20!null
           │    │         │    │    ├── has-placeholder
           │    │         │    │    ├── key: (19)
           │    │         │    │    ├── fd: ()-->(20)
           │    │         │    │    ├── ordering: +19 opt(20) [actual: +19]
           │    │         │    │    ├── scan flavor_projects@flavor_projects_flavor_id_project_id_key
           │    │         │    │    │    ├── columns: flavor_projects.flavor_id:19!null project_id:20!null
           │    │         │    │    │    ├── key: (19,20)
           │    │         │    │    │    └── ordering: +19
           │    │         │    │    └── filters
           │    │         │    │         └── project_id:20 = $1 [outer=(20), constraints=(/20: (/NULL - ]), fd=()-->(20)]
           │    │         │    └── filters (true)
           │    │         └── filters
           │    │              └── is_public:12 OR (flavor_projects.flavor_id:19 IS NOT NULL) [outer=(12,19)]
           │    └── $2
           └── filters
                └── flavor_extra_specs_1.flavor_id:32 = flavors.id:1 [outer=(1,32), constraints=(/1: (/NULL - ]; /32: (/NULL - ]), fd=(1)==(32), (32)==(1)]
