root преди 5 години
родител
ревизия
4e2c56d7d7
променени са 1 файла, в които са добавени 0 реда и са изтрити 300 реда
  1. 0
    300
      etc/autodoc.sql

+ 0
- 300
etc/autodoc.sql Целия файл

@@ -1,300 +0,0 @@
ALTER SCHEMA `autodoc` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci ;

DROP TABLE IF EXISTS `documents_tags`;
DROP TABLE IF EXISTS `documents_pages`;
DROP TABLE IF EXISTS `pages_words`;
DROP TABLE IF EXISTS `words`;

DROP TABLE IF EXISTS `dict`;
DROP TABLE IF EXISTS `languages`;
DROP TABLE IF EXISTS `pages`;
DROP TABLE IF EXISTS `tags`;
DROP TABLE IF EXISTS `users`;
DROP TABLE IF EXISTS `documents`;

DROP PROCEDURE IF EXISTS `create_page_word`;
DROP PROCEDURE IF EXISTS `create_tag`;
DROP PROCEDURE IF EXISTS `create_document`;
DROP PROCEDURE IF EXISTS `create_page`;
DROP PROCEDURE IF EXISTS `delete_tag`;
DROP PROCEDURE IF EXISTS `get_document_filter`;
DROP PROCEDURE IF EXISTS `get_primary_page`;
DROP PROCEDURE IF EXISTS `set_primary_page`;
DROP PROCEDURE IF EXISTS `set_page_status`;

DROP FUNCTION IF EXISTS `SPLIT_STR`;

CREATE TABLE `dict` (
`word` varchar(255) NOT NULL,
`lang` char(2) NOT NULL,
PRIMARY KEY (`word`,`lang`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `users` (
`username` varchar(255) NOT NULL,
`passwd` varchar(255) DEFAULT NULL,
`groups` varchar(255) DEFAULT NULL,
PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `documents` (
`id` binary(16) NOT NULL,
`owner` varchar(45) DEFAULT NULL,
`name` varchar(128) CHARACTER SET utf8mb4 DEFAULT NULL,
`created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`status` enum('nodata','inprogress','deleted','ok') NOT NULL DEFAULT 'nodata',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `languages` (
`id` binary(16) NOT NULL,
`short` char(2) DEFAULT NULL,
`name` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `short_UNIQUE` (`short`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `pages` (
`id` binary(16) NOT NULL,
`owner` varchar(45) DEFAULT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`status` enum('nodata','inprogress','deleted','ok') DEFAULT 'nodata',
`isprimary` tinyint(4) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `tags` (
`id` binary(16) NOT NULL,
`tag` varchar(45) DEFAULT NULL,
`color` enum('primary','secondary','success','danger','warning','info','light','dark') DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `tag_UNIQUE` (`tag`,`color`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `words` (
`id` binary(16) NOT NULL,
`word` varchar(255) DEFAULT NULL,
`languageId` binary(16) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `word_UNIQUE` (`word`,`languageId`),
KEY `fk_words_langid_idx` (`languageId`),
CONSTRAINT `fk_words_languageid` FOREIGN KEY (`languageId`) REFERENCES `languages` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `documents_tags` (
`documentId` binary(16) NOT NULL,
`tagId` binary(16) NOT NULL,
PRIMARY KEY (`documentId`,`tagId`),
KEY `fk_tags_id_idx` (`tagId`),
CONSTRAINT `fk_doctags_docid` FOREIGN KEY (`documentId`) REFERENCES `documents` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION,
CONSTRAINT `fk_doctags_tagid` FOREIGN KEY (`tagId`) REFERENCES `tags` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `pages_words` (
`pageId` binary(16) NOT NULL,
`wordId` binary(16) NOT NULL,
`count` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`pageId`,`wordId`),
KEY `fk_pagword_wordid_idx` (`wordId`),
CONSTRAINT `fk_pagword_pageid` FOREIGN KEY (`pageId`) REFERENCES `pages` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION,
CONSTRAINT `fk_pagword_wordid` FOREIGN KEY (`wordId`) REFERENCES `words` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `documents_pages` (
`documentId` binary(16) NOT NULL,
`pageId` binary(16) NOT NULL,
PRIMARY KEY (`documentId`,`pageId`),
KEY `fk_docpage_pageid_idx` (`pageId`),
CONSTRAINT `fk_docpage_docid` FOREIGN KEY (`documentId`) REFERENCES `documents` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION,
CONSTRAINT `fk_docpage_pageid` FOREIGN KEY (`pageId`) REFERENCES `pages` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

DELIMITER ;;
CREATE FUNCTION `SPLIT_STR`(
x VARCHAR(255),
delim VARCHAR(12),
pos INT
) RETURNS varchar(255) CHARSET utf8mb4
RETURN
CASE WHEN CHAR_LENGTH(SUBSTRING_INDEX(x, delim, pos - 1)) = CHAR_LENGTH(x)
THEN x
ELSE (REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), CHAR_LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1), delim, ''))
END ;;
DELIMITER ;

DELIMITER ;;
CREATE PROCEDURE `create_page_word`(
IN IN_pageid BINARY(16),
IN IN_word VARCHAR(255),
IN IN_langid BINARY(16))
BEGIN

DECLARE LOC_wordid BINARY(16) DEFAULT NULL;

INSERT IGNORE INTO words SET id = UUID(), word = IN_word, langId = IN_langid;

SELECT id INTO LOC_wordid FROM words WHERE word = IN_word AND langId = IN_langid;

INSERT INTO pages_words SET pageId = IN_pageid, wordId = LOC_wordid, count = 1
ON DUPLICATE KEY UPDATE count = count + 1;

END ;;
DELIMITER ;

DELIMITER ;;
CREATE PROCEDURE `create_tag`(
IN IN_documentid BINARY(16),
IN IN_tag VARCHAR(45))
BEGIN

DECLARE LOC_tagid BINARY(16) DEFAULT UUID();

INSERT IGNORE INTO tags SET
id = LOC_tagid,
tag = IN_tag;

SELECT id INTO LOC_tagid FROM tags WHERE tag = IN_tag;

INSERT IGNORE INTO documents_tags SET
documentId = IN_documentid,
tagId = LOC_tagid;

END ;;
DELIMITER ;

DELIMITER ;;
CREATE PROCEDURE `create_document`(
IN IN_owner VARCHAR(45))
BEGIN

DECLARE LOC_documentid BINARY(16) DEFAULT UUID();

INSERT INTO documents SET
id = LOC_documentid,
owner = IN_owner,
status = 'nodata';

SELECT LOC_documentid AS documentId;

END ;;
DELIMITER ;

DELIMITER ;;
CREATE PROCEDURE `create_page`(
IN IN_documentId BINARY(16))
BEGIN

DECLARE LOC_pageid BINARY(16) DEFAULT UUID();

INSERT INTO pages SET
id = LOC_pageid,
status = 'nodata';

INSERT INTO documents_pages SET
documentId = IN_documentid,
pageId = LOC_pageid;

SELECT LOC_pageid AS pageId;

END ;;
DELIMITER ;

DELIMITER ;;
CREATE PROCEDURE `delete_tag`(
IN IN_documentid BINARY(16),
IN IN_tag VARCHAR(45))
BEGIN

DECLARE LOC_tagid BINARY(16) DEFAULT UUID();

SELECT id INTO LOC_tagid FROM tags WHERE tag = IN_tag;

DELETE FROM documents_tags
WHERE documentId = IN_documentid
AND tagId = LOC_tagid;

END ;;
DELIMITER ;

DELIMITER ;;
CREATE PROCEDURE `get_document_filter`(
IN IN_words VARCHAR(255),
IN IN_tags VARCHAR(255),
IN IN_lim1 INT,
IN IN_lim2 INT)
BEGIN

DECLARE L_query TEXT default "";
DECLARE L_pos INT UNSIGNED DEFAULT 0;

SELECT BIN_TO_UUID(dp.documentId) AS id, SUM(pw.count) AS wordcount
FROM documents_pages dp
JOIN pages_words pw ON dp.pageId = pw.pageId
JOIN words w ON pw.wordId = w.id
WHERE w.word REGEXP CONCAT("(", IN_words, ")")
GROUP BY dp.documentId
ORDER BY wordcount DESC
LIMIT IN_lim1, IN_lim2;

END ;;
DELIMITER ;

DELIMITER ;;
CREATE PROCEDURE `get_primary_page`(
IN IN_documentid BINARY(16))
BEGIN
DECLARE LOC_pageid BINARY(16) DEFAULT NULL;

SELECT dp.pageId INTO LOC_pageid FROM
documents_pages dp
JOIN pages p ON dp.pageId = p.id
WHERE dp.documentId = IN_documentid
AND p.isprimary = 1;

IF LOC_pageid IS NULL
THEN
SELECT dp.pageId INTO LOC_pageid FROM
documents_pages dp
JOIN pages p ON dp.pageId = p.id
WHERE dp.documentId = IN_documentid
ORDER BY RAND() LIMIT 1;
END IF;

SELECT BIN_TO_UUID(LOC_pageid) AS pageId;

END ;;
DELIMITER ;

DELIMITER ;;
CREATE PROCEDURE `set_primary_page`(
IN IN_pageid BINARY(16))
BEGIN
DECLARE LOC_documentid BINARY(16) DEFAULT NULL;

SELECT documentId INTO LOC_documentid FROM documents_pages WHERE pageId = IN_pageid;

UPDATE
documents_pages dp
JOIN pages p ON dp.pageId = p.id
SET p.isprimary = 0
WHERE dp.documentId = LOC_documentid;

UPDATE
pages
SET isprimary = 1
WHERE id = IN_pageid;

END ;;
DELIMITER ;

DELIMITER ;;
CREATE PROCEDURE `set_page_status`(
IN IN_pageid BINARY(16),
IN IN_status ENUM('nodata', 'inprogress', 'deleted', 'ok')
)
BEGIN

UPDATE pages SET status = IN_status WHERE id = IN_pageid;

END ;;
DELIMITER ;

Loading…
Отказ
Запис