mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2025-08-07 14:23:53 +00:00
Introduce delete markers for deleted tiddlers
This commit is contained in:
parent
69cc45bf5c
commit
dea739ff07
@ -68,6 +68,7 @@ SqlTiddlerDatabase.prototype.createTables = function() {
|
|||||||
tiddler_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
tiddler_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
bag_id INTEGER NOT NULL,
|
bag_id INTEGER NOT NULL,
|
||||||
title TEXT NOT NULL,
|
title TEXT NOT NULL,
|
||||||
|
is_deleted BOOLEAN NOT NULL,
|
||||||
attachment_blob TEXT, -- null or the name of an attachment blob
|
attachment_blob TEXT, -- null or the name of an attachment blob
|
||||||
FOREIGN KEY (bag_id) REFERENCES bags(bag_id) ON UPDATE CASCADE ON DELETE CASCADE,
|
FOREIGN KEY (bag_id) REFERENCES bags(bag_id) ON UPDATE CASCADE ON DELETE CASCADE,
|
||||||
UNIQUE (bag_id, title)
|
UNIQUE (bag_id, title)
|
||||||
@ -178,10 +179,11 @@ SqlTiddlerDatabase.prototype.saveBagTiddler = function(tiddlerFields,bagname,att
|
|||||||
attachment_blob = attachment_blob || null;
|
attachment_blob = attachment_blob || null;
|
||||||
// Update the tiddlers table
|
// Update the tiddlers table
|
||||||
var info = this.engine.runStatement(`
|
var info = this.engine.runStatement(`
|
||||||
INSERT OR REPLACE INTO tiddlers (bag_id, title, attachment_blob)
|
INSERT OR REPLACE INTO tiddlers (bag_id, title, is_deleted, attachment_blob)
|
||||||
VALUES (
|
VALUES (
|
||||||
(SELECT bag_id FROM bags WHERE bag_name = $bag_name),
|
(SELECT bag_id FROM bags WHERE bag_name = $bag_name),
|
||||||
$title,
|
$title,
|
||||||
|
FALSE,
|
||||||
$attachment_blob
|
$attachment_blob
|
||||||
)
|
)
|
||||||
`,{
|
`,{
|
||||||
@ -251,7 +253,7 @@ SqlTiddlerDatabase.prototype.saveRecipeTiddler = function(tiddlerFields,recipena
|
|||||||
};
|
};
|
||||||
|
|
||||||
SqlTiddlerDatabase.prototype.deleteTiddler = function(title,bagname) {
|
SqlTiddlerDatabase.prototype.deleteTiddler = function(title,bagname) {
|
||||||
// Run the queries
|
// Delete the fields of this tiddler
|
||||||
this.engine.runStatement(`
|
this.engine.runStatement(`
|
||||||
DELETE FROM fields
|
DELETE FROM fields
|
||||||
WHERE tiddler_id IN (
|
WHERE tiddler_id IN (
|
||||||
@ -264,13 +266,15 @@ SqlTiddlerDatabase.prototype.deleteTiddler = function(title,bagname) {
|
|||||||
$title: title,
|
$title: title,
|
||||||
$bag_name: bagname
|
$bag_name: bagname
|
||||||
});
|
});
|
||||||
|
// Mark the tiddler itself as deleted
|
||||||
this.engine.runStatement(`
|
this.engine.runStatement(`
|
||||||
DELETE FROM tiddlers
|
INSERT OR REPLACE INTO tiddlers (bag_id, title, is_deleted, attachment_blob)
|
||||||
WHERE bag_id = (
|
VALUES (
|
||||||
SELECT bag_id
|
(SELECT bag_id FROM bags WHERE bag_name = $bag_name),
|
||||||
FROM bags
|
$title,
|
||||||
WHERE bag_name = $bag_name
|
TRUE,
|
||||||
) AND title = $title
|
NULL
|
||||||
|
)
|
||||||
`,{
|
`,{
|
||||||
$title: title,
|
$title: title,
|
||||||
$bag_name: bagname
|
$bag_name: bagname
|
||||||
@ -285,7 +289,7 @@ SqlTiddlerDatabase.prototype.getBagTiddler = function(title,bagname) {
|
|||||||
SELECT t.tiddler_id, t.attachment_blob
|
SELECT t.tiddler_id, t.attachment_blob
|
||||||
FROM bags AS b
|
FROM bags AS b
|
||||||
INNER JOIN tiddlers AS t ON b.bag_id = t.bag_id
|
INNER JOIN tiddlers AS t ON b.bag_id = t.bag_id
|
||||||
WHERE t.title = $title AND b.bag_name = $bag_name
|
WHERE t.title = $title AND b.bag_name = $bag_name AND t.is_deleted = FALSE
|
||||||
`,{
|
`,{
|
||||||
$title: title,
|
$title: title,
|
||||||
$bag_name: bagname
|
$bag_name: bagname
|
||||||
@ -326,6 +330,7 @@ SqlTiddlerDatabase.prototype.getRecipeTiddler = function(title,recipename) {
|
|||||||
INNER JOIN tiddlers AS t ON b.bag_id = t.bag_id
|
INNER JOIN tiddlers AS t ON b.bag_id = t.bag_id
|
||||||
WHERE r.recipe_name = $recipe_name
|
WHERE r.recipe_name = $recipe_name
|
||||||
AND t.title = $title
|
AND t.title = $title
|
||||||
|
AND t.is_deleted = FALSE
|
||||||
ORDER BY rb.position DESC
|
ORDER BY rb.position DESC
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
`,{
|
`,{
|
||||||
@ -366,6 +371,7 @@ SqlTiddlerDatabase.prototype.getBagTiddlers = function(bagname) {
|
|||||||
FROM bags
|
FROM bags
|
||||||
WHERE bag_name = $bag_name
|
WHERE bag_name = $bag_name
|
||||||
)
|
)
|
||||||
|
AND tiddlers.is_deleted = FALSE
|
||||||
ORDER BY title ASC
|
ORDER BY title ASC
|
||||||
`,{
|
`,{
|
||||||
$bag_name: bagname
|
$bag_name: bagname
|
||||||
@ -394,6 +400,7 @@ SqlTiddlerDatabase.prototype.getRecipeTiddlers = function(recipename) {
|
|||||||
INNER JOIN recipes AS r ON rb.recipe_id = r.recipe_id
|
INNER JOIN recipes AS r ON rb.recipe_id = r.recipe_id
|
||||||
INNER JOIN tiddlers AS t ON b.bag_id = t.bag_id
|
INNER JOIN tiddlers AS t ON b.bag_id = t.bag_id
|
||||||
WHERE r.recipe_name = $recipe_name
|
WHERE r.recipe_name = $recipe_name
|
||||||
|
AND t.is_deleted = FALSE
|
||||||
GROUP BY t.title
|
GROUP BY t.title
|
||||||
ORDER BY t.title
|
ORDER BY t.title
|
||||||
)
|
)
|
||||||
@ -404,16 +411,27 @@ SqlTiddlerDatabase.prototype.getRecipeTiddlers = function(recipename) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
SqlTiddlerDatabase.prototype.deleteAllTiddlersInBag = function(bagname) {
|
SqlTiddlerDatabase.prototype.deleteAllTiddlersInBag = function(bagname) {
|
||||||
|
// Delete the fields
|
||||||
this.engine.runStatement(`
|
this.engine.runStatement(`
|
||||||
DELETE FROM tiddlers
|
DELETE FROM fields
|
||||||
WHERE bag_id IN (
|
WHERE tiddler_id IN (
|
||||||
SELECT bag_id
|
SELECT tiddler_id
|
||||||
FROM bags
|
FROM tiddlers
|
||||||
WHERE bag_name = $bag_name
|
WHERE bag_id = (SELECT bag_id FROM bags WHERE bag_name = $bag_name)
|
||||||
|
AND is_deleted = FALSE
|
||||||
)
|
)
|
||||||
`,{
|
`,{
|
||||||
$bag_name: bagname
|
$bag_name: bagname
|
||||||
});
|
});
|
||||||
|
// Mark the tiddlers as deleted
|
||||||
|
this.engine.runStatement(`
|
||||||
|
UPDATE tiddlers
|
||||||
|
SET is_deleted = TRUE
|
||||||
|
WHERE bag_id = (SELECT bag_id FROM bags WHERE bag_name = $bag_name)
|
||||||
|
AND is_deleted = FALSE
|
||||||
|
`,{
|
||||||
|
$bag_name: bagname
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -102,7 +102,7 @@ function runSqlDatabaseTests(engine) {
|
|||||||
expect(sqlTiddlerDatabase.getRecipeTiddlers("recipe-rho")).toEqual([ { title: 'Hello There', bag_name: 'bag-alpha' } ]);
|
expect(sqlTiddlerDatabase.getRecipeTiddlers("recipe-rho")).toEqual([ { title: 'Hello There', bag_name: 'bag-alpha' } ]);
|
||||||
expect(sqlTiddlerDatabase.getRecipeTiddlers("recipe-sigma")).toEqual([ { title: 'Hello There', bag_name: 'bag-gamma' } ]);
|
expect(sqlTiddlerDatabase.getRecipeTiddlers("recipe-sigma")).toEqual([ { title: 'Hello There', bag_name: 'bag-gamma' } ]);
|
||||||
// Save a recipe tiddler
|
// Save a recipe tiddler
|
||||||
expect(sqlTiddlerDatabase.saveRecipeTiddler({title: "More", text: "None"},"recipe-rho")).toEqual({tiddler_id: 5, bag_name: 'bag-beta'});
|
expect(sqlTiddlerDatabase.saveRecipeTiddler({title: "More", text: "None"},"recipe-rho")).toEqual({tiddler_id: 7, bag_name: 'bag-beta'});
|
||||||
expect(sqlTiddlerDatabase.getRecipeTiddler("More","recipe-rho").tiddler).toEqual({title: "More", text: "None"});
|
expect(sqlTiddlerDatabase.getRecipeTiddler("More","recipe-rho").tiddler).toEqual({title: "More", text: "None"});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user