Use DatabaseMetaData to decide whether to generate ORDER BY BLD200402081900
authorjsichi@netbeans.org
Sun, 08 Feb 2004 03:25:58 +0000
changeset 1444f5a09bcde8ae
parent 1443 1b6e08dc97a3
child 1445 3a6fabae88c0
Use DatabaseMetaData to decide whether to generate ORDER BY
column not in select list.
mdr/extras/jdbcstorage/src/org/netbeans/mdr/persistence/jdbcimpl/JdbcMultivaluedOrderedIndex.java
mdr/extras/jdbcstorage/src/org/netbeans/mdr/persistence/jdbcimpl/JdbcStorage.java
     1.1 --- a/mdr/extras/jdbcstorage/src/org/netbeans/mdr/persistence/jdbcimpl/JdbcMultivaluedOrderedIndex.java	Sun Feb 08 03:12:20 2004 +0000
     1.2 +++ b/mdr/extras/jdbcstorage/src/org/netbeans/mdr/persistence/jdbcimpl/JdbcMultivaluedOrderedIndex.java	Sun Feb 08 03:25:58 2004 +0000
     1.3 @@ -63,9 +63,23 @@
     1.4  
     1.5          // NOTE:  keyColName is redundant in ORDER BY, but maybe it improves
     1.6          // the chances that even a stupid optimizer will realize it can use the
     1.7 -        // primary key index for ordering
     1.8 +        // primary key index for ordering.  And if DBMS doesn't support
     1.9 +        // ORDER BY non-selected column (which is non-standard), we
    1.10 +        // extend the select list but ignore the extra columns during fetch.
    1.11 +        String selectOrdered = "select " + valColName;
    1.12 +        boolean orderByUnrelated = false;
    1.13 +        try {
    1.14 +            orderByUnrelated =
    1.15 +                storage.getDatabaseMetaData().supportsOrderByUnrelated();
    1.16 +        } catch (SQLException ex) {
    1.17 +            // assume exception means it doesn't
    1.18 +        }
    1.19 +        if (!orderByUnrelated) {
    1.20 +            selectOrdered = selectOrdered
    1.21 +                + ", " + keyColName + ", " + storage.ORDINAL_COL_NAME;
    1.22 +        }
    1.23          sqlFindOrdered = new LazyPreparedStatement(
    1.24 -            "select " + valColName + " from " + tableName
    1.25 +            selectOrdered + " from " + tableName
    1.26              + " where " + keyColName + " = ? order by "
    1.27              + keyColName + ", " + storage.ORDINAL_COL_NAME);
    1.28      }
     2.1 --- a/mdr/extras/jdbcstorage/src/org/netbeans/mdr/persistence/jdbcimpl/JdbcStorage.java	Sun Feb 08 03:12:20 2004 +0000
     2.2 +++ b/mdr/extras/jdbcstorage/src/org/netbeans/mdr/persistence/jdbcimpl/JdbcStorage.java	Sun Feb 08 03:25:58 2004 +0000
     2.3 @@ -204,6 +204,11 @@
     2.4          }
     2.5      }
     2.6  
     2.7 +    DatabaseMetaData getDatabaseMetaData()
     2.8 +    {
     2.9 +        return dbMetaData;
    2.10 +    }
    2.11 +
    2.12      private String getQualifiedTableName(String tableName)
    2.13      {
    2.14          if (realSchema) {