# LogicTest: local

statement ok
CREATE TABLE foo (x CHAR PRIMARY KEY)

# Show that the primary key is used under ordinalityNode.
query TTTTT
EXPLAIN (VERBOSE) SELECT * FROM (SELECT * FROM foo WHERE x > 'a') WITH ORDINALITY
----
ordinality  ·      ·            (x, "ordinality")  x!=NULL; key(x); weak-key("ordinality")
 └── scan   ·      ·            (x)                x!=NULL; key(x)
·           table  foo@primary  ·                  ·
·           spans  /"a\x00"-    ·                  ·

# Show that the primary key cannot be used with a PK predicate
# outside of ordinalityNode.
query TTTTT
EXPLAIN (VERBOSE) SELECT * FROM foo WITH ORDINALITY WHERE x > 'a'
----
filter           ·       ·                        (x, "ordinality")  x!=NULL; key(x); weak-key("ordinality")
 │               filter  test.public.foo.x > 'a'  ·                  ·
 └── ordinality  ·       ·                        (x, "ordinality")  x!=NULL; key(x); weak-key("ordinality")
      └── scan   ·       ·                        (x)                x!=NULL; key(x)
·                table   foo@primary              ·                  ·
·                spans   ALL                      ·                  ·

# Regression test for #31911: ensure the ordinality properties are set correctly.
query TTTTT
EXPLAIN (VERBOSE) SELECT * FROM (SELECT * FROM system.role_members WHERE role = 'a' AND member = 'b') WITH ORDINALITY
----
ordinality  ·      ·                     (role, member, "isAdmin", "ordinality")  role=CONST; member=CONST; key(); weak-key("ordinality")
 └── scan   ·      ·                     (role, member, "isAdmin")                role=CONST; member=CONST; key()
·           table  role_members@primary  ·                                        ·
·           spans  /"a"/"b"-/"a"/"b"/#   ·                                        ·
