35
35
#include "nodes/readfuncs.h"
36
36
37
37
/* Portable-related dependencies */
38
- #include "utils/lsyscache.h"
39
38
#include "catalog/namespace.h"
39
+ #include "utils/builtins.h"
40
+ #include "utils/lsyscache.h"
40
41
#include "utils/syscache.h"
41
42
43
+ #define NSP_OID (nspname ) LookupNamespaceNoError(nspname)
42
44
static Oid read_oid_field (char * * token ,int * length );
43
45
44
46
static bool portable_input = false;
@@ -2775,7 +2777,6 @@ read_oid_field(char **token, int *length)
2775
2777
* token = pg_strtok (length );/* Switch to relname */
2776
2778
relname = nullable_string (* token ,* length );
2777
2779
oid = get_relname_relid (relname ,rel_nsp_oid );
2778
- elog (INFO ,"reloid=%d" ,oid );
2779
2780
break ;
2780
2781
}
2781
2782
case TYPEOID :
@@ -2796,7 +2797,102 @@ read_oid_field(char **token, int *length)
2796
2797
}
2797
2798
else
2798
2799
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 ;
2800
2896
}
2801
2897
break ;
2802
2898