summaryrefslogtreecommitdiff
path: root/sql/modules/Location.sql
blob: fb93cf82d5846b1076dcd7c81f8f031f1e568f35 (plain)
  1. -- VERSION 1.3.0
  2. CREATE OR REPLACE FUNCTION location_save
  3. (in_companyname text, in_address1 text, in_address2 text,
  4. in_city text, in_state text, in_zipcode text, in_country text)
  5. returns integer AS
  6. $$
  7. DECLARE
  8. location_id integer;
  9. location_row RECORD;
  10. BEGIN
  11. SELECT * INTO location_row FROM location
  12. WHERE companyname = in_companyname AND
  13. address1 = in_address1 AND
  14. address2 = in_address2 AND
  15. city = in_city AND
  16. state = in_state AND
  17. zipcode = in_zipcode AND
  18. country = in_country
  19. LIMIT 1;
  20. IF FOUND THEN
  21. return location_row.id;
  22. END IF;
  23. INSERT INTO location
  24. (companyname, address1, address2, city, state, zipcode, country)
  25. VALUES
  26. (in_companyname, in_address1, in_address2, in_city, in_state,
  27. in_zipcode, in_country);
  28. SELECT lastval('location_id_seq') INTO location_id;
  29. return location_id;
  30. END;
  31. $$ LANGUAGE PLPGSQL;
  32. COMMENT ON function location_save
  33. (in_companyname text, in_address1 text, in_address2 text,
  34. in_city text, in_state text, in_zipcode text, in_country text) IS
  35. $$ Note that this does NOT override the data in the database.
  36. Instead we search for locations matching the desired specifications and if none
  37. are found, we insert one. Either way, the return value of the location can be
  38. used for mapping to other things. This is necessary because locations are
  39. only loosly coupled with entities, etc.$$;
  40. CREATE OR REPLACE FUNCTION location_get (in_id integer) returns location AS
  41. $$
  42. DECLARE
  43. out_location location%ROWTYPE;
  44. BEGIN
  45. SELECT * INTO out_location FROM location WHERE id = in_id;
  46. RETURN out_location;
  47. END;
  48. $$ language plpgsql;
  49. CREATE OR REPLACE FUNCTION location_search
  50. (in_companyname varchar, in_address1 varchar, in_address2 varchar,
  51. in_city varchar, in_state varchar, in_zipcode varchar,
  52. in_country varchar)
  53. RETURNS SETOF location
  54. AS
  55. $$
  56. DECLARE
  57. out_location location%ROWTYPE;
  58. BEGIN
  59. FOR out_location IN
  60. SELECT * FROM location
  61. WHERE companyname ilike '%' || in_companyname || '%'
  62. AND address1 ilike '%' || in_address1 || '%'
  63. AND address2 ilike '%' || in_address2 || '%'
  64. AND in_city ilike '%' || in_city || '%'
  65. AND in_state ilike '%' || in_state || '%'
  66. AND in_zipcode ilike '%' || in_zipcode || '%'
  67. AND in_country ilike '%' || in_country || '%'
  68. LOOP
  69. RETURN NEXT out_location;
  70. END LOOP;
  71. END;
  72. $$ LANGUAGE PLPGSQL;
  73. CREATE OR REPLACE FUNCTION location_list_all () RETURNS SETOF location AS
  74. $$
  75. DECLARE
  76. out_location location%ROWTYPE;
  77. BEGIN
  78. FOR out_location IN
  79. SELECT * FROM location
  80. ORDER BY company_name, city, state, country
  81. LOOP
  82. RETURN NEXT out_location;
  83. END LOOP;
  84. END;
  85. $$ LANGUAGE plpgsql;
  86. CREATE OR REPLACE FUNCTION location_delete (in_id integer) RETURNS VOID AS
  87. $$
  88. BEGIN
  89. DELETE FROM location WHERE id = in_id;
  90. END;
  91. $$ language plpgsql;