Use HTABs instead of Python dictionary objects to cache procedures
Use HTABs instead of Python dictionary objects to cache procedures

Two separate hash tables are used for regular procedures and for
trigger procedures, since the way trigger procedures work is quite
different from normal stored procedures.  Change the signatures of
PLy_procedure_{get,create} to accept the function OID and a Boolean
flag indicating whether it's a trigger.  This should make implementing
a PL/Python validator easier.

Using HTABs instead of Python dictionaries makes error recovery
easier, and allows for procedures to be cached based on their OIDs,
not their names.  It also allows getting rid of the PyCObject field
that used to hold a pointer to PLyProcedure, since PyCObjects are
deprecated in Python 2.7 and replaced by Capsules in Python 3.

Jan Urbański

greenplum-db/gpdb,snaga/postgres-xl,adam8157/gpdb,postmind-net/postgres-xl,xinzweb/gpdb,kmjungersen/PostgresXL,oberstet/postgres-xl,jmcatamney/gpdb,yazun/postgres-xl,50wu/gpdb,arcivanov/postgres-xl,kmjungersen/PostgresXL,jmcatamney/gpdb,adam8157/gpdb,snaga/postgres-xl,adam8157/gpdb,snaga/postgres-xl,zeroae/postgres-xl,techdragon/Postgres-XL,techdragon/Postgres-XL,kmjungersen/PostgresXL,greenplum-db/gpdb,oberstet/postgres-xl,yazun/postgres-xl,snaga/postgres-xl,postmind-net/postgres-xl,xinzweb/gpdb,oberstet/postgres-xl,adam8157/gpdb,arcivanov/postgres-xl,greenplum-db/gpdb,oberstet/postgres-xl,zeroae/postgres-xl,postmind-net/postgres-xl,kmjungersen/PostgresXL,yazun/postgres-xl,ashwinstar/gpdb,arcivanov/postgres-xl,arcivanov/postgres-xl,greenplum-db/gpdb,adam8157/gpdb,pavanvd/postgres-xl,techdragon/Postgres-XL,techdragon/Postgres-XL,jmcatamney/gpdb,pavanvd/postgres-xl,tpostgres-projects/tPostgres,zeroae/postgres-xl,kmjungersen/PostgresXL,xinzweb/gpdb,xinzweb/gpdb,arcivanov/postgres-xl,postmind-net/postgres-xl,snaga/postgres-xl,50wu/gpdb,pavanvd/postgres-xl,50wu/gpdb,techdragon/Postgres-XL,Postgres-XL/Postgres-XL,adam8157/gpdb,greenplum-db/gpdb,lisakowen/gpdb,ovr/postgres-xl,zeroae/postgres-xl,Postgres-XL/Postgres-XL,50wu/gpdb,ovr/postgres-xl,xinzweb/gpdb,jmcatamney/gpdb,lisakowen/gpdb,ashwinstar/gpdb,greenplum-db/gpdb,tpostgres-projects/tPostgres,zeroae/postgres-xl,adam8157/gpdb,adam8157/gpdb,arcivanov/postgres-xl,ovr/postgres-xl,lisakowen/gpdb,greenplum-db/gpdb,50wu/gpdb,lisakowen/gpdb,tpostgres-projects/tPostgres,xinzweb/gpdb,lisakowen/gpdb,lisakowen/gpdb,pavanvd/postgres-xl,Postgres-XL/Postgres-XL,50wu/gpdb,50wu/gpdb,jmcatamney/gpdb,ashwinstar/gpdb,yazun/postgres-xl,ashwinstar/gpdb,lisakowen/gpdb,ashwinstar/gpdb,xinzweb/gpdb,Postgres-XL/Postgres-XL,jmcatamney/gpdb,jmcatamney/gpdb,ashwinstar/gpdb,pavanvd/postgres-xl,lisakowen/gpdb,xinzweb/gpdb,tpostgres-projects/tPostgres,ovr/postgres-xl,Postgres-XL/Postgres-XL,ashwinstar/gpdb,oberstet/postgres-xl,postmind-net/postgres-xl,ashwinstar/gpdb,yazun/postgres-xl,jmcatamney/gpdb,ovr/postgres-xl,50wu/gpdb,tpostgres-projects/tPostgres,greenplum-db/gpdb