_CDB_Conf_Cache SD-based

This commit is contained in:
Juan Ignacio Sánchez Lara
2015-08-18 10:44:10 +02:00
parent 1217b4e4a4
commit a75a337296
3 changed files with 43 additions and 11 deletions

View File

@@ -19,6 +19,7 @@ CREATE OR REPLACE
FUNCTION cartodb.CDB_Conf_RemoveConf(param text)
RETURNS void AS $$
BEGIN
PERFORM cartodb._CDB_Conf_Cache('remove', param);
EXECUTE 'DELETE FROM cartodb.CDB_CONF WHERE PARAM = $1;' USING param;
END
$$ LANGUAGE PLPGSQL VOLATILE;
@@ -29,7 +30,29 @@ FUNCTION cartodb.CDB_Conf_GetConf(param text)
DECLARE
conf TEXT;
BEGIN
EXECUTE 'SELECT CONF FROM cartodb.CDB_CONF WHERE PARAM = $1;' INTO conf USING param;
EXECUTE 'select cartodb._CDB_Conf_Cache(''get'', $1) as conf;' INTO conf USING param;
RETURN conf;
END
$$ LANGUAGE PLPGSQL STABLE;
-- Single cache function allowing SD private dict usage
CREATE OR REPLACE
FUNCTION cartodb._CDB_Conf_Cache(operation text, param text)
RETURNS TEXT AS
$$
if 'conf' not in SD:
SD['conf'] = dict()
if operation == 'remove':
SD['conf'][param] = None
elif operation == 'get':
if param not in SD['conf']:
value = None
response = plpy.execute("SELECT conf FROM cartodb.CDB_CONF WHERE PARAM = '%s'" % param);
if len(response) > 0:
value = response[0]['conf']
SD['conf'][param] = value
return SD['conf'][param]
else:
raise Exception('Unknown operation: %s' % operation)
$$ LANGUAGE 'plpythonu' VOLATILE;