diff --git a/plwn/storages/sqlite.py b/plwn/storages/sqlite.py index 3983068dc6058ad0343ff03e6660e8a4bcb078a6..3439c4629408d3b378ca8184481832c8204add1b 100644 --- a/plwn/storages/sqlite.py +++ b/plwn/storages/sqlite.py @@ -63,202 +63,188 @@ _DB_SCHEMA_SCRIPT = u""" PRAGMA foreign_keys = ON; -- Metadata table. Used for version number, currently -CREATE TABLE plwn_meta ( - name TEXT UNIQUE NOT NULL, - value BLOB +CREATE TABLE "tbl_plwn_meta" ( + "name" VARCHAR(255) NOT NULL , + "value" BLOB NULL ); -- Tables for constant values -CREATE TABLE pos ( - id INTEGER PRIMARY KEY, - value TEXT UNIQUE NOT NULL +CREATE TABLE "tbl_pos" ( + "id" INTEGER NOT NULL , + "value" VARCHAR(255) NOT NULL , + PRIMARY KEY ("id") ); -CREATE TABLE verbaspect ( - id INTEGER PRIMARY KEY, - value TEXT UNIQUE NOT NULL +CREATE TABLE "tbl_verbaspect" ( + "id" INTEGER NOT NULL , + "value" VARCHAR(255) NOT NULL , + PRIMARY KEY ("id") ); -CREATE TABLE emotionmark ( - id INTEGER PRIMARY KEY, - value TEXT UNIQUE NOT NULL +CREATE TABLE "tbl_emotionmark" ( + "id" INTEGER NOT NULL , + "value" VARCHAR(255) NOT NULL , + PRIMARY KEY ("id") ); -CREATE TABLE emotionname ( - id INTEGER PRIMARY KEY, - value TEXT UNIQUE NOT NULL COLLATE locale +CREATE TABLE "tbl_emotionname" ( + "id" INTEGER NOT NULL , + "value" VARCHAR(255) NOT NULL , + PRIMARY KEY ("id") ); -CREATE TABLE emotionvaluation ( - id INTEGER PRIMARY KEY, - value TEXT UNIQUE NOT NULL COLLATE locale +CREATE TABLE "tbl_emotionvaluation" ( + "id" INTEGER NOT NULL , + "value" VARCHAR(255) NOT NULL , + PRIMARY KEY ("id") ); -CREATE TABLE domain ( - id INTEGER PRIMARY KEY, - value TEXT UNIQUE NOT NULL COLLATE locale +CREATE TABLE "tbl_domain" ( + "id" INTEGER NOT NULL , + "value" VARCHAR(255) NOT NULL , + PRIMARY KEY ("id") ); +CREATE UNIQUE INDEX "value" ON "tbl_domain" ("value"); -- Synset only gets one simple table -CREATE TABLE synset ( - id INTEGER PRIMARY KEY, - definition TEXT COLLATE locale, - isartificial INTEGER NOT NULL DEFAULT 0 +CREATE TABLE "tbl_synset" ( + "id" BLOB NOT NULL , + "legacy_id" INTEGER NULL , + "definition" TEXT NULL , + "isartificial" INTEGER NOT NULL DEFAULT '0' , + PRIMARY KEY ("id") ); -- Lexical units have several tables, since they have several list-like -- properties. They also need indexes for lookup. -CREATE TABLE lexicalunit ( - id INTEGER PRIMARY KEY, - lemma TEXT NOT NULL COLLATE locale, - pos INTEGER NOT NULL - REFERENCES pos (id), - variant INTEGER NOT NULL, - synset INTEGER NOT NULL - REFERENCES synset (id), - unitindex INTEGER NOT NULL, - definition TEXT COLLATE locale, - domain INTEGER NOT NULL - REFERENCES domain (id), - verbaspect INTEGER - REFERENCES verbaspect (id), - isemotional INTEGER, - emotionmark INTEGER - REFERENCES emotionmark (id), - emotionexample1 TEXT COLLATE locale, - emotionexample2 TEXT COLLATE locale, - - UNIQUE (lemma, pos, variant), - -- Also, each unit needs its of place in synset - UNIQUE (synset, unitindex) + +CREATE TABLE "tbl_lexicalunit" ( + "id" BLOB NOT NULL , + "legacy_id" INTEGER NULL , + "lemma" VARCHAR(255) NOT NULL , + "pos" INTEGER NOT NULL , + "variant" INTEGER NOT NULL , + "synset" BLOB NOT NULL , + "unitindex" INTEGER NOT NULL , + "definition" TEXT NULL , + "domain" INTEGER NOT NULL , + "verbaspect" INTEGER NULL , + "isemotional" INTEGER NULL , + "emotionmark" INTEGER NULL , + "emotionexample1" TEXT NULL , + "emotionexample2" TEXT NULL , + PRIMARY KEY ("id") ); --- lem-pos-var and synset-unitindex indexes (and partial ones) are --- automatically made because of UNIQUE constraint, but additional indexes --- need to be created. -CREATE INDEX lex_i_lem_var ON lexicalunit (lemma, variant); -CREATE INDEX lex_i_pos ON lexicalunit (pos); --- No index for variant itself - it's not an useful use case +CREATE UNIQUE INDEX "lemma" ON "tbl_lexicalunit" ("lemma", "pos", "variant"); +CREATE INDEX "lex_i_lem_var" ON "tbl_lexicalunit" ("lemma", "variant"); +CREATE INDEX "lex_i_pos" ON "tbl_lexicalunit" ("pos"); +CREATE UNIQUE INDEX "synset" ON "tbl_lexicalunit" ("synset", "unitindex"); -- Tables dependant on lexicalunit -CREATE TABLE senseexample ( - unitid INTEGER NOT NULL - REFERENCES lexicalunit (id), - example TEXT NOT NULL COLLATE locale, - source TEXT NOT NULL COLLATE locale +CREATE TABLE "tbl_senseexample" ( + "unitid" BLOB NOT NULL , + "example" TEXT NOT NULL , + "source" TEXT NOT NULL ); -CREATE INDEX sen_i ON senseexample (unitid); +CREATE INDEX "sen_i" ON "tbl_senseexample" ("unitid"); -CREATE TABLE externallink ( - unitid INTEGER NOT NULL - REFERENCES lexicalunit (id), - link TEXT NOT NULL COLLATE locale +CREATE TABLE "tbl_externallink" ( + "unitid" BLOB NOT NULL , + "link" TEXT NOT NULL ); -CREATE INDEX link_i ON externallink (unitid); +CREATE INDEX "link_i" ON "tbl_externallink" ("unitid"); -CREATE TABLE usagenote ( - unitid INTEGER NOT NULL - REFERENCES lexicalunit (id), - note TEXT NOT NULL COLLATE locale +CREATE TABLE "tbl_usagenote" ( + "unitid" BLOB NOT NULL , + "note" TEXT NOT NULL ); -CREATE INDEX note_i ON usagenote (unitid); - -CREATE TABLE unitemotionname ( - unitid INTEGER NOT NULL - REFERENCES lexicalunit (id), - nameid INTEGER NOT NULL - REFERENCES emotionname (id), +CREATE INDEX "note_i" ON "tbl_usagenote" ("unitid"); - PRIMARY KEY (unitid, nameid) +CREATE TABLE "tbl_unitemotionname" ( + "unitid" BLOB NOT NULL , + "nameid" INTEGER NOT NULL , + PRIMARY KEY ("unitid", "nameid") ); -CREATE TABLE unitemotionvaluation ( - unitid INTEGER NOT NULL - REFERENCES lexicalunit (id), - valuationid INTEGER NOT NULL - REFERENCES emotionvaluation (id), - - PRIMARY KEY (unitid, valuationid) +CREATE TABLE "tbl_unitemotionvaluation" ( + "unitid" BLOB NOT NULL , + "valuationid" INTEGER NOT NULL , + PRIMARY KEY ("unitid", "valuationid") ); -- Relation tables -- -- The for below are used to gather combinations of parent / child relation -- names. -CREATE TABLE synsetrelationparentpart ( - id INTEGER PRIMARY KEY, - name TEXT UNIQUE NOT NULL COLLATE locale +CREATE TABLE "tbl_synsetrelationparentpart" ( + "id" INTEGER NOT NULL , + "name" VARCHAR(255) NOT NULL , + PRIMARY KEY ("id") ); -CREATE TABLE synsetrelationchildpart ( - id INTEGER PRIMARY KEY, - name TEXT UNIQUE NOT NULL COLLATE locale +CREATE TABLE "tbl_synsetrelationchildpart" ( + "id" INTEGER NOT NULL , + "name" VARCHAR(255) NOT NULL , + PRIMARY KEY ("id") ); -CREATE TABLE lexicalrelationparentpart ( - id INTEGER PRIMARY KEY, - name TEXT UNIQUE NOT NULL COLLATE locale +CREATE TABLE "tbl_lexicalrelationparentpart" ( + "id" INTEGER NOT NULL , + "name" VARCHAR(255) NOT NULL , + PRIMARY KEY ("id") ); -CREATE TABLE lexicalrelationchildpart ( - id INTEGER PRIMARY KEY, - name TEXT UNIQUE NOT NULL COLLATE locale +CREATE TABLE "tbl_lexicalrelationchildpart" ( + "id" INTEGER NOT NULL , + "name" VARCHAR(255) NOT NULL , + PRIMARY KEY ("id") ); +CREATE UNIQUE INDEX "name" ON "tbl_lexicalrelationchildpart" ("name"); +CREATE UNIQUE INDEX "parentpart" ON "tbl_lexicalrelationtype" ("parentpart", "childpart"); -- Next, gather these parts into relation types themselves. -- Parent can't be NULL - the no-parent case will be handled by a special empty -- string parent. This is so that UNIQUE works correctly. -CREATE TABLE synsetrelationtype ( - id INTEGER PRIMARY KEY, - parentpart INTEGER NOT NULL - REFERENCES synsetrelationparentpart (id), - childpart INTEGER NOT NULL - REFERENCES synsetrelationchildpart (id), - - UNIQUE (parentpart, childpart) +CREATE TABLE "tbl_synsetrelationtype" ( + "id" BLOB NOT NULL , + "legacy_id" INTEGER NULL , + "parentpart" INTEGER NOT NULL , + "childpart" INTEGER NOT NULL , + PRIMARY KEY ("id") ); -CREATE TABLE lexicalrelationtype ( - id INTEGER PRIMARY KEY, - parentpart INTEGER NOT NULL - REFERENCES lexicalrelationparentpart (id), - childpart INTEGER NOT NULL - REFERENCES lexicalrelationchildpart (id), - - UNIQUE (parentpart, childpart) +CREATE TABLE "tbl_lexicalrelationtype" ( + "id" BLOB NOT NULL , + "legacy_id" INTEGER NULL , + "parentpart" INTEGER NOT NULL , + "childpart" INTEGER NOT NULL , + PRIMARY KEY ("id") ); -- The below tables are simply maps of relation aliases to their main IDs. -- Reverse indexes are needed, too. -CREATE TABLE synsetrelationalias ( - name TEXT PRIMARY KEY NOT NULL COLLATE locale, - relationid INTEGER NOT NULL - REFERENCES synsetrelationtype (id) +CREATE TABLE "tbl_synsetrelationalias" ( + "name" VARCHAR(255) NOT NULL , + "relationid" BLOB NOT NULL , + PRIMARY KEY ("name") ); -CREATE INDEX synsetrelationalias_irev ON synsetrelationalias (relationid); -CREATE TABLE lexicalrelationalias ( - name TEXT PRIMARY KEY NOT NULL COLLATE locale, - relationid INTEGER NOT NULL - REFERENCES lexicalrelationtype (id) +CREATE INDEX "synsetrelationalias_irev" ON "tbl_synsetrelationalias" ("relationid"); +CREATE TABLE "tbl_lexicalrelationalias" ( + "name" VARCHAR(255) NOT NULL , + "relationid" BLOB NOT NULL , + PRIMARY KEY ("name") ); -CREATE INDEX lexicalrelationalias_irev ON lexicalrelationalias (relationid); +CREATE INDEX "lexicalrelationalias_irev" ON "tbl_lexicalrelationalias" ("relationid"); -- Next are finally the relation instances -CREATE TABLE synsetrelation ( - source INTEGER NOT NULL - REFERENCES synset (id), - relationtype INTEGER NOT NULL - REFERENCES synsetrelationtype (id), - target INTEGER NOT NULL - REFERENCES synset (id), - - PRIMARY KEY (source, relationtype, target) +CREATE TABLE "tbl_synsetrelation" ( + "source" BLOB NOT NULL , + "relationtype" BLOB NOT NULL , + "target" BLOB NOT NULL , + PRIMARY KEY ("source", "relationtype", "target") ); -CREATE TABLE lexicalrelation ( - source INTEGER NOT NULL - REFERENCES lexicalunit (id), - relationtype INTEGER NOT NULL - REFERENCES lexicalrelationtype (id), - target INTEGER NOT NULL - REFERENCES lexicalunit (id), - - PRIMARY KEY (source, relationtype, target) +CREATE TABLE "tbl_lexicalrelation" ( + "source" BLOB NOT NULL , + "relationtype" BLOB NOT NULL , + "target" BLOB NOT NULL , + PRIMARY KEY ("source", "relationtype", "target") ); -- Insert the special empty values for the parent part tables @@ -267,24 +253,24 @@ INSERT INTO lexicalrelationparentpart (name) VALUES (''); """ # }}} _RELTYPE_TABLES = { - en.RelationKind.synset: u'synsetrelationtype', - en.RelationKind.lexical: u'lexicalrelationtype', + en.RelationKind.synset: u'tbl_synsetrelationtype', + en.RelationKind.lexical: u'tbl_lexicalrelationtype', } _RELALIAS_TABLES = { - en.RelationKind.synset: u'synsetrelationalias', - en.RelationKind.lexical: u'lexicalrelationalias', + en.RelationKind.synset: u'tbl_synsetrelationalias', + en.RelationKind.lexical: u'tbl_lexicalrelationalias', } _RELPARENTPART_TABLES = { - en.RelationKind.synset: u'synsetrelationparentpart', - en.RelationKind.lexical: u'lexicalrelationparentpart', + en.RelationKind.synset: u'tbl_synsetrelationparentpart', + en.RelationKind.lexical: u'tbl_lexicalrelationparentpart', } _RELCHILDPART_TABLES = { - en.RelationKind.synset: u'synsetrelationchildpart', - en.RelationKind.lexical: u'lexicalrelationchildpart', + en.RelationKind.synset: u'tbl_synsetrelationchildpart', + en.RelationKind.lexical: u'tbl_lexicalrelationchildpart', } _RELINST_TABLES = { - en.RelationKind.synset: u'synsetrelation', - en.RelationKind.lexical: u'lexicalrelation', + en.RelationKind.synset: u'tbl_synsetrelation', + en.RelationKind.lexical: u'tbl_lexicalrelation', }