schema_mig_to_2.sql 5.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. --
  2. -- Copyright (c) 2014-2015, Marcus Rohrmoser mobile Software, http://mro.name/me
  3. -- All rights reserved.
  4. --
  5. -- Redistribution and use in source and binary forms, with or without modification, are permitted
  6. -- provided that the following conditions are met:
  7. --
  8. -- 1. Redistributions of source code must retain the above copyright notice, this list of conditions
  9. -- and the following disclaimer.
  10. --
  11. -- 2. The software must not be used for military or intelligence or related purposes nor
  12. -- anything that's in conflict with human rights as declared in http://www.un.org/en/documents/udhr/ .
  13. --
  14. -- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
  15. -- IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  16. -- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
  17. -- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  18. -- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  19. -- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
  20. -- IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
  21. -- THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  22. --
  23. CREATE VIEW triples AS
  24. SELECT
  25. -- all *_id (hashes):
  26. triple_relations.id AS id
  27. ,s_uri_id
  28. ,s_blank_id
  29. ,p_uri_id
  30. ,o_uri_id
  31. ,o_blank_id
  32. ,o_lit_id
  33. ,o_literals.datatype_id AS o_datatype_id
  34. ,c_uri_id
  35. -- all joined values:
  36. ,s_uris.uri AS s_uri
  37. ,s_blanks.blank AS s_blank
  38. ,p_uris.uri AS p_uri
  39. ,o_uris.uri AS o_uri
  40. ,o_blanks.blank AS o_blank
  41. ,o_literals.text AS o_text
  42. ,o_literals.language AS o_language
  43. ,o_lit_uris.uri AS o_datatype
  44. ,c_uris.uri AS c_uri
  45. FROM triple_relations
  46. LEFT OUTER JOIN so_uris AS s_uris ON triple_relations.s_uri_id = s_uris.id
  47. LEFT OUTER JOIN so_blanks AS s_blanks ON triple_relations.s_blank_id = s_blanks.id
  48. INNER JOIN p_uris AS p_uris ON triple_relations.p_uri_id = p_uris.id
  49. LEFT OUTER JOIN so_uris AS o_uris ON triple_relations.o_uri_id = o_uris.id
  50. LEFT OUTER JOIN so_blanks AS o_blanks ON triple_relations.o_blank_id = o_blanks.id
  51. LEFT OUTER JOIN o_literals AS o_literals ON triple_relations.o_lit_id = o_literals.id
  52. LEFT OUTER JOIN t_uris AS o_lit_uris ON o_literals.datatype_id = o_lit_uris.id
  53. LEFT OUTER JOIN c_uris AS c_uris ON triple_relations.c_uri_id = c_uris.id
  54. ;
  55. CREATE TRIGGER triples_insert INSTEAD OF INSERT ON triples
  56. FOR EACH ROW BEGIN
  57. -- subject uri/blank
  58. INSERT OR IGNORE INTO so_uris (id,uri) VALUES (NEW.s_uri_id, NEW.s_uri);
  59. INSERT OR IGNORE INTO so_blanks (id,blank) VALUES (NEW.s_blank_id, NEW.s_blank);
  60. -- predicate uri
  61. INSERT OR IGNORE INTO p_uris (id,uri) VALUES (NEW.p_uri_id, NEW.p_uri);
  62. -- object uri/blank
  63. INSERT OR IGNORE INTO so_uris (id,uri) VALUES (NEW.o_uri_id, NEW.o_uri);
  64. INSERT OR IGNORE INTO so_blanks (id,blank) VALUES (NEW.o_blank_id, NEW.o_blank);
  65. -- object literal
  66. INSERT OR IGNORE INTO t_uris (id,uri) VALUES (NEW.o_datatype_id, NEW.o_datatype);
  67. INSERT OR IGNORE INTO o_literals(id,datatype_id,language,text) VALUES (NEW.o_lit_id, NEW.o_datatype_id, NEW.o_language, NEW.o_text);
  68. -- context uri
  69. INSERT OR IGNORE INTO c_uris (id,uri) VALUES (NEW.c_uri_id, NEW.c_uri);
  70. -- triple
  71. INSERT INTO triple_relations(id, s_uri_id, s_blank_id, p_uri_id, o_uri_id, o_blank_id, o_lit_id, c_uri_id)
  72. VALUES (NEW.id, NEW.s_uri_id, NEW.s_blank_id, NEW.p_uri_id, NEW.o_uri_id, NEW.o_blank_id, NEW.o_lit_id, NEW.c_uri_id);
  73. END;
  74. CREATE TRIGGER triples_delete INSTEAD OF DELETE ON triples
  75. FOR EACH ROW BEGIN
  76. -- triple
  77. DELETE FROM triple_relations WHERE id = OLD.id;
  78. -- subject uri/blank
  79. DELETE FROM so_uris WHERE (OLD.s_uri_id IS NOT NULL) AND (0 == (SELECT COUNT(id) FROM triple_relations WHERE s_uri_id = OLD.s_uri_id)) AND (id = OLD.s_uri_id);
  80. DELETE FROM so_blanks WHERE (OLD.s_blank_id IS NOT NULL) AND (0 == (SELECT COUNT(id) FROM triple_relations WHERE s_blank_id = OLD.s_blank_id)) AND (id = OLD.s_blank_id);
  81. -- predicate uri
  82. DELETE FROM p_uris WHERE (OLD.p_uri_id IS NOT NULL) AND (0 == (SELECT COUNT(id) FROM triple_relations WHERE p_uri_id = OLD.p_uri_id)) AND (id = OLD.p_uri_id);
  83. -- object uri/blank
  84. DELETE FROM so_uris WHERE (OLD.o_uri_id IS NOT NULL) AND (0 == (SELECT COUNT(id) FROM triple_relations WHERE o_uri_id = OLD.o_uri_id)) AND (id = OLD.o_uri_id);
  85. DELETE FROM so_blanks WHERE (OLD.o_blank_id IS NOT NULL) AND (0 == (SELECT COUNT(id) FROM triple_relations WHERE o_blank_id = OLD.o_blank_id)) AND (id = OLD.o_blank_id);
  86. -- object literal
  87. DELETE FROM o_literals WHERE (OLD.o_lit_id IS NOT NULL) AND (0 == (SELECT COUNT(id) FROM triple_relations WHERE o_lit_id = OLD.o_lit_id)) AND (id = OLD.o_lit_id);
  88. DELETE FROM t_uris WHERE (OLD.o_datatype_id IS NOT NULL) AND (0 == (SELECT COUNT(id) FROM o_literals WHERE datatype_id = OLD.o_datatype_id)) AND (id = OLD.o_datatype_id);
  89. -- context uri
  90. DELETE FROM c_uris WHERE (OLD.c_uri_id IS NOT NULL) AND (0 == (SELECT COUNT(id) FROM triple_relations WHERE c_uri_id = OLD.c_uri_id)) AND (id = OLD.c_uri_id);
  91. END;
  92. PRAGMA user_version=2;