3535#include "nodes/readfuncs.h"
3636
3737/* Portable-related dependencies */
38- #include "utils/lsyscache.h"
3938#include "catalog/namespace.h"
39+ #include "utils/builtins.h"
40+ #include "utils/lsyscache.h"
4041#include "utils/syscache.h"
4142
43+ #define NSP_OID (nspname ) LookupNamespaceNoError(nspname)
4244static Oid read_oid_field (char * * token , int * length );
4345
4446static bool portable_input = false;
@@ -2775,7 +2777,6 @@ read_oid_field(char **token, int *length)
27752777 * token = pg_strtok (length ); /* Switch to relname */
27762778 relname = nullable_string (* token , * length );
27772779 oid = get_relname_relid (relname , rel_nsp_oid );
2778- elog (INFO , "reloid=%d" , oid );
27792780 break ;
27802781 }
27812782 case TYPEOID :
@@ -2796,7 +2797,102 @@ read_oid_field(char **token, int *length)
27962797 }
27972798 else
27982799 oid = InvalidOid ;
2799- elog (INFO , "typeoid=%d" , oid );
2800+ }
2801+ break ;
2802+
2803+ case PROCOID :
2804+ {
2805+ char * nspname ; /* namespace name */
2806+ char * funcname ; /* function name */
2807+ int nargs ; /* number of arguments */
2808+ Oid * argtypes ; /* argument types */
2809+
2810+ * token = pg_strtok (length ); /* get nspname */
2811+ nspname = nullable_string (* token , * length );
2812+ * token = pg_strtok (length ); /* get funcname */
2813+ funcname = nullable_string (* token , * length );
2814+ * token = pg_strtok (length ); /* get nargs */
2815+ nargs = atoi (* token );
2816+
2817+ if (funcname )
2818+ {
2819+ int i ;
2820+ argtypes = palloc (nargs * sizeof (Oid ));
2821+ for (i = 0 ; i < nargs ; i ++ )
2822+ {
2823+ char * typnspname ; /* argument type namespace */
2824+ char * typname ; /* argument type name */
2825+
2826+ * token = pg_strtok (length ); /* get type nspname */
2827+ typnspname = nullable_string (* token , * length );
2828+ * token = pg_strtok (length ); /* get type name */
2829+ typname = nullable_string (* token , * length );
2830+ argtypes [i ] = get_typname_typid (typname ,
2831+ NSP_OID (typnspname ));
2832+ }
2833+ oid = get_funcid (funcname , buildoidvector (argtypes , nargs ), NSP_OID (nspname ));
2834+ }
2835+ else
2836+ oid = InvalidOid ;
2837+ }
2838+ break ;
2839+
2840+ case COLLOID :
2841+ {
2842+ char * nspname ; /* namespace name */
2843+ char * collname ; /* collation name */
2844+ int collencoding ; /* collation encoding */
2845+
2846+ * token = pg_strtok (length ); /* get nspname */
2847+ nspname = nullable_string (* token , * length );
2848+ * token = pg_strtok (length ); /* get collname */
2849+ collname = nullable_string (* token , * length );
2850+ * token = pg_strtok (length ); /* get collencoding */
2851+ collencoding = atoi (* token );
2852+ if (collname )
2853+ oid = get_collid (collname , collencoding , NSP_OID (nspname ));
2854+ else
2855+ oid = InvalidOid ;
2856+ }
2857+ break ;
2858+
2859+ case OPEROID :
2860+ {
2861+ char * nspname ; /* namespace name */
2862+ char * oprname ; /* operator name */
2863+ char * leftnspname ; /* left type namespace */
2864+ char * leftname ; /* left type name */
2865+ Oid oprleft ; /* left type */
2866+ char * rightnspname ; /* right type namespace */
2867+ char * rightname ; /* right type name */
2868+ Oid oprright ; /* right type */
2869+
2870+ * token = pg_strtok (length ); /* get nspname */
2871+ nspname = nullable_string (* token , * length );
2872+ * token = pg_strtok (length ); /* get operator name */
2873+ oprname = nullable_string (* token , * length );
2874+ * token = pg_strtok (length ); /* left type namespace */
2875+ leftnspname = nullable_string (* token , * length );
2876+ * token = pg_strtok (length ); /* left type name */
2877+ leftname = nullable_string (* token , * length );
2878+ * token = pg_strtok (length ); /* right type namespace */
2879+ rightnspname = nullable_string (* token , * length );
2880+ * token = pg_strtok (length ); /* right type name */
2881+ rightname = nullable_string (* token , * length );
2882+ if (oprname )
2883+ {
2884+ if (leftname )
2885+ oprleft = get_typname_typid (leftname , NSP_OID (leftnspname ));
2886+ else
2887+ oprleft = InvalidOid ;
2888+ if (rightname )
2889+ oprright = get_typname_typid (rightname , NSP_OID (rightnspname ));
2890+ else
2891+ oprright = InvalidOid ;
2892+ oid = get_operid (oprname , oprleft , oprright , NSP_OID (nspname ));
2893+ }
2894+ else
2895+ oid = InvalidOid ;
28002896 }
28012897 break ;
28022898
0 commit comments