You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Jørgen Løland (JIRA)" <ji...@apache.org> on 2007/05/15 16:15:16 UTC

[jira] Commented: (DERBY-2651) Embedded and client behave differently for IJ command "show indexes"

    [ https://issues.apache.org/jira/browse/DERBY-2651?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12495997 ] 

Jørgen Løland commented on DERBY-2651:
--------------------------------------

After some digging, I found what causes the difference in behaviour and a possible solution:

For embedded, the showIndexes method in IJ gets a org.apache.derby.impl.jdbc.EmbedResultSet20 when calling EmbedDatabaseMetaData#getIndexInfo. The data type for the "NON_UNIQUE" column in this result set is boolean.

For client, on the other hand, IJ gets a org.apache.derby.client.net.NetResultSet. This ResultSet does not support boolean, and the columntype is therefore smallint.

If the query metadata.properties#getIndexInfo is modified as shown below, getIndexInfo consistently returns "non_unique"-values of type smallint. Thus, the "show tables" command always produces the client-like result (0/1). 

Q) Is consistently using non_unique values of 0/1 better than (Embed: 0/1, Client:true/false)? This could, of course, be modified to a consistent boolean type once NetResultSet supports boolean. Other suggestions for solutions are also much appreciated.

If there are no objections or suggestions for other solutions, I will make a patch that changes the metadata query tomorrow.


(svn diff):
--------8<-------
 getIndexInfo=\
        SELECT CAST ('' AS VARCHAR(128)) AS TABLE_CAT, S.SCHEMANAME AS TABLE_SCHEM, T.TABLENAME AS TABLE_NAME, \
-                  (CASE WHEN CONGLOMS.DESCRIPTOR.isUnique() THEN FALSE ELSE TRUE END) AS NON_UNIQUE, \
+                  CAST ((CASE WHEN CONGLOMS.DESCRIPTOR.isUnique() THEN 0 ELSE 1 END) AS SMALLINT) AS NON_UNIQUE, \
                   CAST ('' AS VARCHAR(128)) AS INDEX_QUALIFIER, \
-------->8--------


> Embedded and client behave differently for IJ command "show indexes"
> --------------------------------------------------------------------
>
>                 Key: DERBY-2651
>                 URL: https://issues.apache.org/jira/browse/DERBY-2651
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC, Network Client
>    Affects Versions: 10.2.2.0, 10.3.0.0
>            Reporter: Jørgen Løland
>         Assigned To: Jørgen Løland
>            Priority: Minor
>
> The column "NON_UNIQUE" is not the same when IJ command "show indexes" is run in embedded and client mode. In embedded, "NON_UNIQUE" has the values true/false, while client has 1/0.
> Embed:
> ----8<----- 
> ij> connect 'jdbc:derby:testdb;create=true';
> ij> SET SCHEMA APP;
> ij> CREATE TABLE t1 (i int primary key, i2 int);
> ij> CREATE INDEX idx1 ON APP.t1 (i2);
> ij> SHOW INDEXES IN APP;
> TABLE_NAME          |COLUMN_NAME         |NON_U&|TYPE|ASC&|CARDINA&|PAGES
> ----------------------------------------------------------------------------
> T1                  |I                   |false |3   |A   |NULL    |NULL
> T1                  |I2                  |true  |3   |A   |NULL    |NULL
> Client:
> ----8<----- 
> ij> connect 'jdbc:derby://localhost/testdb;create=true';
> ij> SHOW INDEXES IN APP;
> TABLE_NAME          |COLUMN_NAME         |NON_U&|TYPE|ASC&|CARDINA&|PAGES
> ----------------------------------------------------------------------------
> T1                  |I                   |0     |3   |A   |NULL    |NULL
> T1                  |I2                  |1     |3   |A   |NULL    |NULL

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.