mirror of
https://github.com/rdkit/rdkit.git
synced 2026-06-04 21:54:27 +08:00
107 lines
5.0 KiB
Python
107 lines
5.0 KiB
Python
import RDConfig
|
|
|
|
|
|
molFuncCreation="""
|
|
DROP FUNCTION rd_libversion();
|
|
CREATE FUNCTION rd_libversion() RETURNS text AS '%(base)s/RDLib' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_canonsmiles(text);
|
|
CREATE FUNCTION rd_canonsmiles(text) RETURNS text AS '%(base)s/RDLib' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_molpickle(text);
|
|
CREATE FUNCTION rd_molpickle(text) RETURNS bytea AS '%(base)s/RDLib' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_hassubstruct(text,text);
|
|
CREATE FUNCTION rd_hassubstruct(text,text) RETURNS bool AS '%(base)s/RDLib','rd_hassubstruct_smi' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_hassubstruct(bytea,bytea);
|
|
CREATE FUNCTION rd_hassubstruct(bytea,bytea) RETURNS bool AS '%(base)s/RDLib','rd_hassubstruct_pkl' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_substructcount(text,text);
|
|
CREATE FUNCTION rd_substructcount(text,text) RETURNS int AS '%(base)s/RDLib', 'rd_substructcount_smi' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_substructcount(bytea,bytea);
|
|
CREATE FUNCTION rd_substructcount(bytea,bytea) RETURNS int AS '%(base)s/RDLib','rd_substructcount_pkl' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_similarityfp(text);
|
|
CREATE FUNCTION rd_similarityfp(text) RETURNS bytea AS '%(base)s/RDLib' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_similarityfp_bits(text);
|
|
CREATE FUNCTION rd_similarityfp_bits(text) RETURNS bit AS '%(base)s/RDLib' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_substructfp(text);
|
|
CREATE FUNCTION rd_substructfp(text) RETURNS bytea AS '%(base)s/RDLib' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_substructfp_bits(text);
|
|
CREATE FUNCTION rd_substructfp_bits(text) RETURNS bit AS '%(base)s/RDLib' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_mollogp(text);
|
|
CREATE FUNCTION rd_mollogp(text) RETURNS double precision AS '%(base)s/RDLib', 'rd_mollogp_smi' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_mollogp(bytea);
|
|
CREATE FUNCTION rd_mollogp(bytea) RETURNS double precision AS '%(base)s/RDLib','rd_mollogp_pkl' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_amw(text);
|
|
CREATE FUNCTION rd_amw(text) RETURNS double precision AS '%(base)s/RDLib', 'rd_amw_smi' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_amw(bytea);
|
|
CREATE FUNCTION rd_amw(bytea) RETURNS double precision AS '%(base)s/RDLib','rd_amw_pkl' LANGUAGE 'c' immutable;
|
|
"""
|
|
|
|
sigFuncCreation="""
|
|
DROP FUNCTION rd_fpsize(bytea);
|
|
CREATE FUNCTION rd_fpsize(bytea) RETURNS int AS '%(base)s/RDLib' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_allprobebitsmatch(bytea,bytea);
|
|
CREATE FUNCTION rd_allprobebitsmatch(bytea,bytea) RETURNS bool AS '%(base)s/RDLib','rd_allprobebitsmatch_pkl' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_allprobebitsmatch(bit,bit);
|
|
CREATE FUNCTION rd_allprobebitsmatch(bit,bit) RETURNS bool AS '%(base)s/RDLib','rd_allprobebitsmatch_bits' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_tanimoto(bytea,bytea);
|
|
CREATE FUNCTION rd_tanimoto(bytea,bytea) RETURNS double precision AS '%(base)s/RDLib','rd_tanimoto_pkl' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_tanimoto(bit,bit);
|
|
CREATE FUNCTION rd_tanimoto(bit,bit) RETURNS double precision AS '%(base)s/RDLib','rd_tanimoto_bits' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_dice(bytea,bytea);
|
|
CREATE FUNCTION rd_dice(bytea,bytea) RETURNS double precision AS '%(base)s/RDLib','rd_dice_pkl' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_dice(bit,bit);
|
|
CREATE FUNCTION rd_dice(bit,bit) RETURNS double precision AS '%(base)s/RDLib','rd_dice_bits' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_cosine(bytea,bytea);
|
|
CREATE FUNCTION rd_cosine(bytea,bytea) RETURNS double precision AS '%(base)s/RDLib','rd_cosine_pkl' LANGUAGE 'c' immutable;
|
|
DROP FUNCTION rd_cosine(bit,bit);
|
|
CREATE FUNCTION rd_cosine(bit,bit) RETURNS double precision AS '%(base)s/RDLib','rd_cosine_bits' LANGUAGE 'c' immutable;
|
|
"""
|
|
|
|
molAddTrigger="""
|
|
CREATE OR REPLACE FUNCTION molAddTrigger()
|
|
RETURNS "trigger" AS
|
|
$BODY$
|
|
if TD['event'] != 'INSERT' or TD['when'] != 'BEFORE' or TD['level'] != 'ROW':
|
|
return 'OK'
|
|
id = TD['new']['id']
|
|
smi = TD['new']['smiles']
|
|
|
|
if not TD['new']['pickle']:
|
|
if SD.has_key('mol_pickle_plan'):
|
|
plan = SD['mol_pickle_plan']
|
|
else:
|
|
plan = plpy.prepare('select rd_molpickle($1) as pickle',('text',))
|
|
SD['mol_pickle_plan']=plan
|
|
pkl = plpy.execute(plan,(smi,))[0]['pickle']
|
|
if not pkl:
|
|
plpy.error('Could not pickle input smiles. operation aborted')
|
|
TD['new']['pickle']=pkl
|
|
|
|
res = 'MODIFY'
|
|
else:
|
|
res = 'OK'
|
|
|
|
if SD.has_key('mol_insert_plan'):
|
|
plan = SD['mol_insert_plan']
|
|
else:
|
|
plan = plpy.prepare('insert into %(fpTable)s ($1,rd_substructfp_bits($2),rd_similarityfp_bits($2))',
|
|
('text','text'))
|
|
SD['mol_insert_plan']=plan
|
|
plpy.execute(plan,(id,smi))
|
|
|
|
return res
|
|
$BODY$
|
|
LANGUAGE 'plpythonu' VOLATILE;
|
|
"""
|
|
|
|
installTrigger="""
|
|
CREATE TRIGGER %(tblName)s_after
|
|
AFTER INSERT OR UPDATE OR DELETE
|
|
ON %(tblName)s
|
|
FOR EACH ROW
|
|
EXECUTE PROCEDURE molAddTrigger();
|
|
"""
|
|
|
|
if __name__=='__main__':
|
|
base = RDConfig.RDBaseDir+'/Code/PgSQL/RDLib'
|
|
print sigFuncCreation%locals()
|
|
print molFuncCreation%locals()
|