Many thanks John!

Tim.

On Wed, Apr 11, 2001 at 08:32:14PM -0500, John Milton wrote:
> 
> Yes, synonyms are very much like views.
> Attached is a hacky diff to do synonyms (but not links).
> I can't do links here, so I can't test it.
> We have Kerberos here and I couldn't figure out how to
> properly support a user schema like "[EMAIL PROTECTED]"
> 
> Assuming these are merged together, I don't know which
> goes first, the synonym or the view and whether they should
> iterate until they land on a table. They should probably
> follow the Oracle rules, I suppose.
> 
> Tim Bunce wrote:
> > 
> > Sherry, it's your lucky day.
> > 
> > Thanks to John's message I found the patch that Tom Moore sent me
> > (thanks Tom). It only applies to views but it should be fairly obvious
> > how to extend it to synonyms (or you could just setup a view that
> > refers to the synonym).
> > 
> > Volunteers are most welcome to polish up the patch to be more general
> > (eg synonyms) and send me back a diff -c output. Thanks!
> > 
> > Tim.
> > 
> > On Wed, Apr 11, 2001 at 04:31:47PM -0500, John Milton wrote:
> > >
> > > I'm finding little bits and pieces of people having problems
> > > with this, and I would rather use a patch than the risk
> > > associated with implementing the fix myself.
> > >
> > > I found a very obscure reference from you here, second message:
> > >
> > > http://www.webclub.ru/confarchive/6269.html:
> > >
> > > >>> If you are working with a table in another user's schema, you need to
> > > >>> include that other user's name as part of specifying the table name (e.g.,
> > > >>> owner.Good_picture). This can be avoided if a synonym has been
> > > >>> defined for the table name, but that doesn't appear to be the case in your
> > > >>> database.
> > > >> I use public synonyms for tables and sequencies.
> > > >
> > > >Known bug. Patch is in the archives. Nag me if you really can't find it.
> > > >
> > > >Tim Bunce.
> > >
> > > Which archives?
> > > Is this the patch I'm looking for?
> > >
> > >
> > > If not, then is this approach correct:
> > >
> > > In oci8.c, in init_lob_refetch, before the existing
> > > OCIDescribeAny_log_stat, I would first attempt to describe
> > > a synonym by the same name and then construct a fully
> > > qualified tablename and continue.
> 
> John
> -- 
> John Bly Milton IV   (512) w:493-2764, h:873-8567, m:791-8567
> FundsXpress  [EMAIL PROTECTED]  Don't FLAME, inform!  O-
> *** oci8.c    2000/11/14 18:44:24     1.2
> --- oci8.c    2001/04/12 01:28:43
> ***************
> *** 1204,1209 ****
> --- 1204,1210 ----
>       lob_refetch_t *lr = NULL;
>       STRLEN tablename_len;
>       char *tablename;
> +     char new_tablename[100];
>   
>       switch (imp_sth->stmt_type) {
>       case OCI_STMT_UPDATE:
> ***************
> *** 1223,1228 ****
> --- 1224,1248 ----
>               "Unable to parse table name for LOB refetch");
>   
>       OCIHandleAlloc_ok(imp_sth->envhp, &dschp, OCI_HTYPE_DESCRIBE, status);
> +     /* BEGIN NEW */
> +     OCIDescribeAny_log_stat(imp_sth->svchp, errhp, tablename, strlen(tablename),
> +             OCI_OTYPE_NAME, 1, OCI_PTYPE_SYN, dschp, status);
> +     if (status == OCI_SUCCESS) { /* There is a synonym, get the schema */
> +       char *syn_schema=NULL,  *syn_name=NULL;
> +       OCIAttrGet_log_stat(dschp,  OCI_HTYPE_DESCRIBE,
> +                               &parmhp, 0, OCI_ATTR_PARAM, errhp, status);
> +       OCIAttrGet_log_stat(parmhp, OCI_DTYPE_PARAM,
> +                       &syn_schema, 0, OCI_ATTR_SCHEMA_NAME, errhp, status);
> +       OCIAttrGet_log_stat(parmhp, OCI_DTYPE_PARAM,
> +                       &syn_name, 0, OCI_ATTR_OBJ_NAME, errhp, status);
> +       strcpy(new_tablename, syn_schema);
> +       strcat(new_tablename, ".");
> +       strcat(new_tablename, syn_name);
> +       tablename=new_tablename;
> +       if (DBIS->debug >= 3)
> +     fprintf(DBILOGFP, "       lob refetch synonym, schema=%s, name=%s, new 
>tablename=%s\n", syn_schema, syn_name, tablename);
> +     }
> +     /* END NEW */
>       OCIDescribeAny_log_stat(imp_sth->svchp, errhp, tablename, strlen(tablename),
>               OCI_OTYPE_NAME, 1, OCI_PTYPE_TABLE, dschp, status);
>       if (status != OCI_SUCCESS) {



Reply via email to