summaryrefslogtreecommitdiff
path: root/sql/modules/Settings.sql
blob: d977550b87f10f00c830a56cccec5f41dbf748dc (plain)
  1. CREATE OR REPLACE FUNCTION setting_set (in_key varchar, in_value varchar)
  2. RETURNS VOID AS
  3. $$
  4. BEGIN
  5. UPDATE defaults SET value = in_value WHERE setting_key = in_key;
  6. RETURN;
  7. END;
  8. CREATE OR REPLACE FUNCTION setting_get (in_key varchar) RETURNS varchar AS
  9. $$
  10. DECLARE
  11. out_value varchar;
  12. BEGIN
  13. SELECT value INTO out_value FROM defaults WHERE setting_key = in_key;
  14. RETURN value;
  15. END;
  16. $$ LANGUAGE plpgsql;
  17. CREATE OR REPLACE FUNCTION setting_get_default_accounts ()
  18. RETURNS SETOF defaults AS
  19. $$
  20. DECLARE
  21. account defaults%ROWTYPE;
  22. BEGIN;
  23. FOR account IN
  24. SELECT * FROM defaults
  25. WHERE setting_key like '%accno_id'
  26. LOOP
  27. RETURN NEXT account;
  28. END LOOP;
  29. END;
  30. $$ LANGUAGE plpgsql;
  31. CREATE OR REPLACE FUNCTION setting_incriment (in_key varchar) returns varchar
  32. AS
  33. $$
  34. DECLARE
  35. base_value VARCHAR;
  36. raw_value VARCHAR;
  37. incriment INTEGER;
  38. inc_length INTEGER;
  39. new_value VARCHAR;
  40. BEGIN
  41. SELECT value INTO raw_value FROM defaults
  42. WHERE setting_key = in_key
  43. FOR UPDATE;
  44. SELECT substring(raw_value from '(\\d*)(\\D*|<\\?lsmb [^<>] \\?>)*$')
  45. INTO base_value;
  46. IF base_value like '0%' THEN
  47. incriment := base_value::integer + 1;
  48. SELECT char_length(incriment::text) INTO inc_length;
  49. SELECT overlay(base_value placing incriment::varchar
  50. from (select char_length(base_value)
  51. - inc_length + 1) for inc_length)
  52. INTO new_value;
  53. ELSE
  54. new_value := base_value::integer + 1;
  55. END IF;
  56. SELECT regexp_replace(raw_value, base_value, new_value) INTO new_value;
  57. UPDATE defaults SET value = new_value WHERE setting_key = in_key;
  58. return new_value;
  59. END;
  60. $$ LANGUAGE PLPGSQL;