Uploaded image for project: 'Derby'
  1. Derby
  2. DERBY-18

Exposed name matching has bugs when the column name is qualified with a schema name.

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • 10.0.2.0
    • 10.1.1.0
    • SQL
    • None

    Description

      Reporting for Kathey Marsden.

      create table t1(c1 int); – goes into app
      select sys.t1.c1 from t1; – should fail
      select sys.b.c1 from t1 b; – should fail
      select * from t1, app.t1; – fails, should succeed
      select t1.c1 from t1, app.t1; – fails, should succeed

      • According to SQL92, the <table
        name> in a <table reference> exposes its name when it is not
        qualified (See 6.3 <table reference>, Syntax Rule 1). Also,
        an unqualified <table name> is equivalent to one qualified
        with the current default schema name (See 5.4 Names and
        identifiers, Syntax Rule 8). So, in the above queries,

      select * from t1, app.t1 – is the same as select * from
      app.t1, app.t1, and this is not SQL92 — you have duplicate
      exposed <table name>s in the same scope (see 6.3 <table
      reference>, Syntax Rule 3). Derby can support it, but it's an
      extension.

      select t1.c1 from t1, app.t1 – is the same as select app.t1.c1
      from app.t1, app.t1, and again supporting this would be an
      extension to SQL92.

      Note that if you say
      select * from t1, t2 t1 – this is also a duplication, as the
      exposed <table name> of the first table is app.t1 and the
      exposed <correlation name> of the second table is t1. these
      are different names, but 6.3 <table reference> Syntax Rule 4
      rules out this case explicitly – a <correlation name>
      cannot be the same as the unqualified part of any exposed
      <table name>.

      One possibility is to go to a 2 pass method of column resolution:
      1st pass looks for an exact match on the qualifier (app.t1
      matches app.t1 but not t1, ...)
      if no match, then do 2nd pass where it looks for a match on
      table id.
      (Look at OrderByColumn.bindOrderByColumn()

      Attachments

        Activity

          People

            shreyas Shreyas
            tulika Tulika Agrawal
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: