small dblink patch

small dblink patch

Post by Tom La » Wed, 29 May 2002 08:27:59




> OK - this patch is a bit larger -- followed your advise, and moved
> internal declarations from dblink.h to dblink.c while I was at it.
> Please apply if there are no more objections.

Done.

                        regards, tom lane

---------------------------(end of broadcast)---------------------------

 
 
 

small dblink patch

Post by Joe Conw » Wed, 29 May 2002 08:37:03


This is a multi-part message in MIME format.
--------------040308030500000509010603
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Tom Lane wrote:

 > This isn't going to fix the problem --- all the functions are still
 > declared to take type NAME, which will not be long enough for
 > qualified names.  You need to replace the use of NAME with use of
 > TEXT.

 > I don't particularly care for that answer.  Would instead suggest you
 > borrow the coding now being used in sequence.c and other places where
 > text arguments are interpreted as relation names:

OK - this patch is a bit larger -- followed your advise, and moved
internal declarations from dblink.h to dblink.c while I was at it.

Please apply if there are no more objections.

Thanks,

Joe

--------------040308030500000509010603
Content-Type: text/plain; name="dblink.2002.05.27.1.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="dblink.2002.05.27.1.patch"

Index: contrib/dblink//README.dblink
===================================================================
RCS file: /opt/src/cvs/pgsql/contrib/dblink/README.dblink,v
retrieving revision 1.4
diff -c -r1.4 README.dblink
*** contrib/dblink//README.dblink       24 Apr 2002 02:28:28 -0000      1.4
--- contrib/dblink//README.dblink       27 May 2002 18:56:04 -0000
***************
*** 65,81 ****
         - extracts and returns individual field results
       dblink_strtok(text,text,int) RETURNS text
         - extracts and returns individual token from delimited text
!      dblink_get_pkey(name) RETURNS setof text
         - returns the field names of a relation's primary key fields
       dblink_last_oid(int) RETURNS oid
         - returns the last inserted oid
!      dblink_build_sql_insert(name,int2vector,int2,_text,_text) RETURNS text
         - builds an insert statement using a local tuple, replacing the
           selection key field values with alternate supplied values
!      dblink_build_sql_delete(name,int2vector,int2,_text) RETURNS text
         - builds a delete statement using supplied values for selection
           key field values
!      dblink_build_sql_update(name,int2vector,int2,_text,_text) RETURNS text
         - builds an update statement using a local tuple, replacing the
           selection key field values with alternate supplied values
       dblink_current_query() RETURNS text
--- 65,81 ----
         - extracts and returns individual field results
       dblink_strtok(text,text,int) RETURNS text
         - extracts and returns individual token from delimited text
!      dblink_get_pkey(text) RETURNS setof text
         - returns the field names of a relation's primary key fields
       dblink_last_oid(int) RETURNS oid
         - returns the last inserted oid
!      dblink_build_sql_insert(text,int2vector,int2,_text,_text) RETURNS text
         - builds an insert statement using a local tuple, replacing the
           selection key field values with alternate supplied values
!      dblink_build_sql_delete(text,int2vector,int2,_text) RETURNS text
         - builds a delete statement using supplied values for selection
           key field values
!      dblink_build_sql_update(text,int2vector,int2,_text,_text) RETURNS text
         - builds an update statement using a local tuple, replacing the
           selection key field values with alternate supplied values
       dblink_current_query() RETURNS text
***************
*** 206,212 ****

  Synopsis

! dblink_get_pkey(name relname) RETURNS setof text

  Inputs

--- 206,212 ----

  Synopsis

! dblink_get_pkey(text relname) RETURNS setof text

  Inputs

***************
*** 278,293 ****

  Synopsis

! dblink_build_sql_insert(name relname
                           ,int2vector primary_key_attnums
                           ,int2 num_primary_key_atts
                           ,_text src_pk_att_vals_array
                           ,_text tgt_pk_att_vals_array) RETURNS text
! dblink_build_sql_delete(name relname
                           ,int2vector primary_key_attnums
                           ,int2 num_primary_key_atts
                           ,_text tgt_pk_att_vals_array) RETURNS text
! dblink_build_sql_update(name relname
                           ,int2vector primary_key_attnums
                           ,int2 num_primary_key_atts
                           ,_text src_pk_att_vals_array
--- 278,293 ----

  Synopsis

! dblink_build_sql_insert(text relname
                           ,int2vector primary_key_attnums
                           ,int2 num_primary_key_atts
                           ,_text src_pk_att_vals_array
                           ,_text tgt_pk_att_vals_array) RETURNS text
! dblink_build_sql_delete(text relname
                           ,int2vector primary_key_attnums
                           ,int2 num_primary_key_atts
                           ,_text tgt_pk_att_vals_array) RETURNS text
! dblink_build_sql_update(text relname
                           ,int2vector primary_key_attnums
                           ,int2 num_primary_key_atts
                           ,_text src_pk_att_vals_array
Index: contrib/dblink//dblink.c
===================================================================
RCS file: /opt/src/cvs/pgsql/contrib/dblink/dblink.c,v
retrieving revision 1.6
diff -c -r1.6 dblink.c
*** contrib/dblink//dblink.c    20 May 2002 23:51:40 -0000      1.6
--- contrib/dblink//dblink.c    27 May 2002 21:19:44 -0000
***************
*** 27,32 ****
--- 27,52 ----

  #include "dblink.h"

+
+ /*
+  * Internal declarations
+  */
+ static dblink_results *init_dblink_results(MemoryContext fn_mcxt);
+ static dblink_array_results *init_dblink_array_results(MemoryContext fn_mcxt);
+ static char **get_pkey_attnames(Oid relid, int16 *numatts);
+ static char *get_strtok(char *fldtext, char *fldsep, int fldnum);
+ static char *get_sql_insert(Oid relid, int16 *pkattnums, int16 pknumatts, char **src_pkattvals, char **tgt_pkattvals);
+ static char *get_sql_delete(Oid relid, int16 *pkattnums, int16 pknumatts, char **tgt_pkattvals);
+ static char *get_sql_update(Oid relid, int16 *pkattnums, int16 pknumatts, char **src_pkattvals, char **tgt_pkattvals);
+ static char *quote_literal_cstr(char *rawstr);
+ static char *quote_ident_cstr(char *rawstr);
+ static int16 get_attnum_pk_pos(int16 *pkattnums, int16 pknumatts, int16 key);
+ static HeapTuple get_tuple_of_interest(Oid relid, int16 *pkattnums, int16 pknumatts, char **src_pkattvals);
+ static Oid get_relid_from_relname(text *relname_text);
+ static dblink_results *get_res_ptr(int32 res_id_index);
+ static void append_res_ptr(dblink_results *results);
+ static void remove_res_ptr(dblink_results *results);
+
  /* Global */
  List  *res_id = NIL;
  int           res_id_index = 0;
***************
*** 281,287 ****
  Datum
  dblink_get_pkey(PG_FUNCTION_ARGS)
  {
!       char                                    *relname;
        Oid                                             relid;
        char                                    **result;
        text                                    *result_text;
--- 301,307 ----
  Datum
  dblink_get_pkey(PG_FUNCTION_ARGS)
  {
!       text                                    *relname_text;
        Oid                                             relid;
        char                                    **result;
        text                                    *result_text;
***************
*** 294,308 ****

        if (fcinfo->flinfo->fn_extra == NULL)
        {
!               relname = NameStr(*PG_GETARG_NAME(0));

                /*
                 * Convert relname to rel OID.
                 */
!               relid = get_relid_from_relname(relname);
                if (!OidIsValid(relid))
!                       elog(ERROR, "dblink_get_pkey: relation \"%s\" does not exist",
!                                relname);

                /*
                 * get an array of attnums.
--- 314,327 ----

        if (fcinfo->flinfo->fn_extra == NULL)
        {
!               relname_text = PG_GETARG_TEXT_P(0);

                /*
                 * Convert relname to rel OID.
                 */
!               relid = get_relid_from_relname(relname_text);
                if (!OidIsValid(relid))
!                       elog(ERROR, "dblink_get_pkey: relation does not exist");

                /*
                 * get an array of attnums.
***************
*** 428,434 ****
  dblink_build_sql_insert(PG_FUNCTION_ARGS)
  {
        Oid                     relid;
!       char            *relname;
        int16           *pkattnums;
        int16           pknumatts;
        char            **src_pkattvals;
--- 447,453 ----
  dblink_build_sql_insert(PG_FUNCTION_ARGS)
  {
        Oid                     relid;
!       text            *relname_text;
        int16           *pkattnums;
        int16           pknumatts;
        char            **src_pkattvals;
***************
*** 446,460 ****
        char            *sql;
        text            *sql_text;

!       relname = NameStr(*PG_GETARG_NAME(0));

        /*
         * Convert relname to rel OID.
         */
!       relid = get_relid_from_relname(relname);
        if (!OidIsValid(relid))
!               elog(ERROR, "dblink_get_pkey: relation \"%s\" does not exist",
!                        relname);

        pkattnums = (int16 *) PG_GETARG_POINTER(1);
        pknumatts = PG_GETARG_INT16(2);
--- 465,478 ----
        char            *sql;
        text            *sql_text;

!       relname_text = PG_GETARG_TEXT_P(0);

        /*
         * Convert relname to rel OID.
         */
!       relid = get_relid_from_relname(relname_text);
        if (!OidIsValid(relid))
!               elog(ERROR, "dblink_build_sql_insert: relation does not exist");

        pkattnums = (int16 *) PG_GETARG_POINTER(1);
        pknumatts = PG_GETARG_INT16(2);
***************
*** 554,560 ****
  dblink_build_sql_delete(PG_FUNCTION_ARGS)
  {
        Oid                     relid;
!       char            *relname;
        int16           *pkattnums;
        int16           pknumatts;
        char            **tgt_pkattvals;
--- 572,578 ----
  dblink_build_sql_delete(PG_FUNCTION_ARGS)
  {
        Oid                     relid;
!       text            *relname_text;
        int16           *pkattnums;
        int16           pknumatts;
        char            **tgt_pkattvals;
***************
*** 567,581 ****
        char            *sql;
        text            *sql_text;

!       relname = NameStr(*PG_GETARG_NAME(0));

        /*
         * Convert relname to rel OID.
         */
!       relid = get_relid_from_relname(relname);
        if (!OidIsValid(relid))
!               elog(ERROR, "dblink_get_pkey: relation \"%s\" does not exist",
!                        relname);

        pkattnums = (int16 *) PG_GETARG_POINTER(1);
        pknumatts = PG_GETARG_INT16(2);
--- 585,598 ----
        char            *sql;
        text            *sql_text;

!       relname_text = PG_GETARG_TEXT_P(0);

        /*
         * Convert relname to rel OID.
         */
!       relid = get_relid_from_relname(relname_text);
        if (!OidIsValid(relid))
!               elog(ERROR,
...

read more »

 
 
 

1. pgsql/contrib/dblink README.dblink dblink.c db ...

CVSROOT:        /cvsroot
Module name:    pgsql

Modified files:
        contrib/dblink : README.dblink dblink.c dblink.h dblink.sql.in

Log message:
        Update dblink to work with qualified relation names.
        From Joe Conway.

---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/users-lounge/docs/faq.html

2. NULL characters in CHAR(n) data type?

3. pgsql/contrib/dblink README.dblink dblink.c

4. MS SQL Server memo-field and Delphi 2

5. pgsql-server/contrib/dblink dblink.c dblink.sql.in

6. Hierarchical data

7. pgsql/contrib/dblink README.dblink dblink.c db ...

8. Performance of statements' execution

9. one more small dblink fix

10. dblink patch

11. pgsql/ ontrib/dblink/dblink.c ontrib/dbsize/db ...

12. pgsql-server/contrib/dblink expected/dblink.ou ...