Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sql/parser: unreserve INDEX and NOTHING from the RHS of SET statements #31731

Merged
merged 2 commits into from
Oct 23, 2018

Commits on Oct 23, 2018

  1. sql/parser: re-allow FAMILY, MINVALUE, MAXVALUE, NOTHING and INDEX in…

    … table names
    
    CockroachDB introduced non-standard extensions to its SQL dialect very
    early in its history, before concerns of compatibility with existing
    PostgreSQL clients became a priority. When these features were added,
    new keywords were liberally marked as "reserved", so as to "make the
    grammar work", and without noticing / care for the fact that this
    change would make existing valid SQL queries/clients encounter new
    errors.
    
    An example of this:
    
    1. let's make "column families" a thing
    
    2. the syntax `create table(..., constraint xxx family(a,b,c))` is not
       good enough (although this would not require reserved keywords), we
       really want also `create table (..., family (a,b,c))` to be
       possible.
    
    3. oh, the grammar won't let us because "family" is a possible column
       name? No matter! let's mark "FAMILY" as a reserved name for
       column/function names.
    
       - No concern for the fact that "family" is a  perfectly valid
    	 English name for things that people want to make an attribute of
    	 in inventory / classification tables.
    
       - No concern for the fact that reserved column/function names are
    	 also reserved for table names.
    
    4. (much later) Clients complaining about the fact they can't call
       their columns or tables `family` without quoting.
    
    Ditto "INDEX", "MINVALUE", "MAXVALUE", and perhaps others.
    
    Moral of the story: DO NOT MAKE NEW RESERVED KEYWORDS UNLESS YOU'RE
    VERY VERY VERY SURE THAT THERE IS NO LEGITIMATE USE FOR THEM IN CLIENT
    APPS EVER.
    
    (An example perhaps: the word "NOTHING" was also marked as reserved,
    but it's much more unlikely this word will ever be used for something
    useful.)
    
    This patch restores the use of FAMILY, INDEX, NOTHING, MINVALUE and
    MAXVALUE in table and function names, by introducing an awkward dance
    in the grammar of keyword non-terminals and database object names.
    
    They remain reserved as colum names because of the non-standard
    CockroachDB extensions.
    
    Release note (sql change): It is now again possible to use the
    keywords FAMILY, MINVALUE, MAXVALUE, INDEX or NOTHING as table names,
    for compatibility with PostgreSQL.
    knz committed Oct 23, 2018
    Configuration menu
    Copy the full SHA
    ebad853 View commit details
    Browse the repository at this point in the history
  2. sql/parser: unreserve INDEX and NOTHING from the RHS of SET statements

    The SET statement in the pg dialect is special because it
    auto-converts identifiers on its RHS to symbolic values or strings. In
    particular it is meant to support a diversity of special keywords as
    pseudo-values.
    
    This patch ensures that INDEX and NOTHING are accepted on the RHS.
    
    Release note (sql change): the names "index" and "nothing" are again
    accepted in the right-hand-side of the assignment in SET statements,
    for compatibility with PostgreSQL.
    knz committed Oct 23, 2018
    Configuration menu
    Copy the full SHA
    b18eeb1 View commit details
    Browse the repository at this point in the history