On Tue, Mar 19, 2002 at 04:41:33PM +0100, Steffen Goeldner wrote:
> Tim Bunce wrote:
> > 
> > On Tue, Mar 19, 2002 at 12:20:43PM +0100, Steffen Goeldner wrote:
> > > Tim Bunce wrote:
> > > >
> > > > On Mon, Mar 18, 2002 at 12:05:28PM +0100, Steffen Goeldner wrote:
> > >
> > > > A more realistic example would be for drivers that return empty
> > > > strings or NULL for the catalog portion.
> > >
> > > Currently, DBD::Oracle's table_info() method returns '' -> NULL ->
> > > undef for the PUBLIC pseudo-schema:
> > >
> > >   , decode( t.OWNER, 'PUBLIC', '', t.OWNER ) TABLE_SCHEM
> > >
> > > Oracle's weird '' -> NULL conversion has one advantage: DBI's
> > > tables() method does the right thing (it omits the schema part).
> > > BTW: Should tables() really return something like '""."DBA_TABLES"'
> > > for empty schemas?
> > 
> > I'm not sure what you mean by empty schema.
> 
> A defined but empty schema name ('') returned by table_info().
> >From the ODBC spec:
> 
>  | If a driver supports schemas for some tables but not for others,
>  | such as when the driver retrieves data from different DBMSs, it
>  | returns an empty string ("") for those tables that do not have
>  | schemas.
> 
> If some 'tables [...] do not have schemas', will the driver accept
> 
>   select * from ""."MyTable"
> 
> ?

No idea. Guess we need some real examples to test it on.

> > > Unfortunately, an empty schema argument (currently) does not match
> > > the PUBLIC schema.
> > > Should I generate another predicate for that case?
> > 
> > What does Oracle's ODBC driver do?
> 
> SQLTables:
>   In: StatementHandle = 0x008A1860
>       CatalogName     = SQL_NULL_HANDLE, NameLength1 = 0
>       SchemaName      = ""             , NameLength2 = 0
>       TableName       = "DBA_TABLES"   , NameLength3 = 10
>       TableType       = SQL_NULL_HANDLE, NameLength4 = 0
>   Return: SQL_SUCCESS=0
> 
> Get Data All:
> "TABLE_CAT" "TABLE_SCHEM" "TABLE_NAME" "TABLE_TYPE"  "REMARKS"
> ----------- ------------- ------------ ------------- ---------
>      <Null> "PUBLIC"      "DBA_TABLES" "SYNONYM"     <Null>
>      <Null> "SYS"         "DBA_TABLES" "SYSTEM VIEW" <Null>
> 
> 2 rows fetched from 5 columns.
> 
> Thus, I'd better change:
> 
>   , decode( t.OWNER, 'PUBLIC', '', t.OWNER ) TABLE_SCHEM
> 
> to 
> 
>  , t.OWNER  TABLE_SCHEM
> 
> ?

Yesp, looks like it.

Tim.

Reply via email to