Module: QDA::Backend::SQLite::Schema
- Defined in:
- lib/weft/backend/sqlite/schema.rb
Constant Summary collapse
- SCHEMA_TABLES =
The tables
"CREATE TABLE category (\n catid INTEGER PRIMARY KEY,\n catname VARCHAR(255) DEFAULT NULL,\n catdesc TEXT,\n parent INTEGER,\n created_date TIMESTAMP,\n modified_date TIMESTAMP );\n\nCREATE TABLE category_structure ( xml TEXT );\n\nINSERT INTO category_structure VALUES ('');\n\nCREATE TABLE code (\n catid INT(11) default NULL,\n docid INT(11) default NULL,\n offset INT(11) default NULL,\n length INT(11) default NULL );\n\nCREATE TABLE docmeta (\n docid INT(11) default NULL,\n metaname VARCHAR(100) default NULL,\n metavalue TEXT );\n\nCREATE TABLE document (\n docid INTEGER PRIMARY KEY,\n doctitle VARCHAR(255) default NULL,\n doctext TEXT,\n docmemo TEXT,\n created_date TIMESTAMP,\n modified_date TIMESTAMP);\n\nCREATE TABLE app_preference ( \n name VARCHAR(255) NOT NULL PRIMARY KEY ON CONFLICT REPLACE,\n value TEXT);\n"
- SCHEMA_TRIGGERS =
Triggers- these currently just ensure that coding is cleaned up when a document or category is deleted. In the future they also trigger entries into the undo/redo table.
"CREATE TRIGGER insert_category\n INSERT ON category\n BEGIN\nEND;\n\nCREATE TRIGGER delete_category\n DELETE ON category\n BEGIN\n DELETE FROM code WHERE catid = old.catid;\nEND;\n\nCREATE TRIGGER insert_doc\n INSERT ON document\n BEGIN\nEND;\n\nCREATE TRIGGER delete_doc DELETE ON document\nBEGIN\n DELETE FROM docmeta WHERE docid = old.docid;\n DELETE FROM code WHERE docid = old.docid;\nEND;\n\n"
- SCHEMA_UNDO =
This is here because it’s written, but it’s not in use yet.
This is an outline of adding undo/redo facility using SQLite triggers, writing stepped actions to a undo action table, and recording SQL to restore the database to its prior state.
"CREATE TABLE undoable ( \n actionid INTEGER PRIMARY KEY,\n step INT(255) DEFAULT 0,\n sql TEXT );\n\nCREATE TRIGGER undo_insert_category INSERT ON category\nBEGIN\n INSERT INTO undoable VALUES(NULL, 0, 'DELETE FROM category ' ||\n 'WHERE docid = ' || \n LAST_INSERT_ROWID() );\nEND;\n\nCREATE TRIGGER undo_delete_category DELETE ON category\n BEGIN\n INSERT INTO undoable VALUES(NULL, 0,\n 'INSERT INTO category\n VALUES (' ||\n old.catid || ', ' ||\n QUOTE(old.catname) || ' ,' ||\n QUOTE(old.catdesc) || ', ' ||\n old.parent || ', ' ||\n QUOTE(old.created_date) || ', ' ||\n QUOTE(old.modified_date) || ')' );\n\nCREATE TRIGGER undo_insert_document INSERTO ON document\nBEGIN\nEND;\n\nCREATE TRIGGER undo_delete_document DELETE ON document\nBEGIN\nEND;\n\nCREATE TRIGGER undo_insert_code INSERT ON code\nBEGIN\nEND;\n\nCREATE TRIGGER undo_delete_code DELETE ON code\nBEGIN\nEND;\n\nCREATE TRIGGER undo_insert_docmeta INSERT ON docmeta\nBEGIN\nEND;\n\nCREATE TRIGGER undo_delete_docmeta DELETE ON docmeta\nBEGIN\nEND;\n\nCREATE TRIGGER undo_update_category_structure \nUPDATE ON category_structure\nBEGIN\nEND;\n"
- SCHEMA_INDEXES =
Indexes - those on the coding table make a big difference to speed of retrieving marked text.
"\nCREATE INDEX document_idx\nON document(doctitle);\n\nCREATE INDEX code_idx \nON code(docid, catid);\n\nCREATE INDEX docmeta_idx\nON docmeta(metaname, docid);\n\n"
- RINDEX_SEARCH_MODEL_QUERY =
model query for doing fast text searches from a reverse index (stored as categories).
"SELECT document.docid AS docid, document.doctitle AS doctitle,\nMAX( 0, code.offset - ?)\nAS start_at,\nSUBSTR(document.doctext, \n MAX( 0, code.offset - ?) + 1,\n MIN( code.length + ( ? * 2 ),\n LENGTH(document.doctext) - MAX(1, code.offset - ?) - 1 ) )\nAS snip\nFROM document, code\nWHERE code.docid = document.docid\nAND code.catid IN (\n SELECT catid\n FROM category\n WHERE parent = ?\n AND LOWER(category.catname) LIKE ?)\nORDER BY code.catid, code.offset\n"