contentstorage/castorage/data/castoragedb_create.sql
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 16 Apr 2010 15:16:09 +0300
changeset 61 8e5041d13c84
child 66 32469d7d46ff
permissions -rw-r--r--
Revision: 201011 Kit: 201015

DROP TABLE IF EXISTS CA_ENTRY;
DROP TABLE IF EXISTS CA_GROUP_ENTRY;
DROP TABLE IF EXISTS CA_ICON;
DROP TABLE IF EXISTS CA_LAUNCH;
DROP TABLE IF EXISTS CA_ATTRIBUTE;
DROP TABLE IF EXISTS CA_LOCALIZATION_TEXT;
DROP TABLE IF EXISTS CA_DB_PROPERTIES;

SELECT "CREATE TABLE CA_ENTRY" AS " ";
SELECT "------------------------------------" AS " ";
CREATE TABLE CA_ENTRY( ENTRY_ID INTEGER PRIMARY KEY,
                                 EN_TEXT TEXT NOT NULL COLLATE NOCASE,
                                 EN_DESCRIPTION TEXT COLLATE NOCASE,
                                 EN_ROLE INTEGER default 1,
                                 EN_TYPE_NAME TEXT NOT NULL,
                                 EN_ICON_ID INTEGER,
                                 EN_CREATION_TIME BIGINT default -1 NOT NULL,
                                 EN_UID INTEGER UNIQUE, 
                                 EN_FLAGS INTEGER default 8, 
                                 FOREIGN KEY(EN_ICON_ID) REFERENCES CA_ICON(ICON_ID) );
CREATE INDEX EntryText_CAIndex ON CA_ENTRY(EN_TEXT);
CREATE INDEX EntryCreationTime_CAIndex ON CA_ENTRY(EN_CREATION_TIME);

SELECT "CREATE TABLE CA_GROUP_ENTRY" AS " ";
SELECT "------------------------------------" AS " ";
CREATE TABLE CA_GROUP_ENTRY( GROUP_ENTRY_ID INTEGER PRIMARY KEY ,
                                  GE_GROUP_ID INTEGER NOT NULL,
                                  GE_ENTRY_ID INTEGER NOT NULL,
                                  GE_POSITION INTEGER,
                                  UNIQUE( GE_GROUP_ID, GE_ENTRY_ID ),
                                  FOREIGN KEY(GE_GROUP_ID) REFERENCES CA_ENTRY(ENTRY_ID),
                                  FOREIGN KEY(GE_ENTRY_ID) REFERENCES CA_ENTRY(ENTRY_ID) );
CREATE INDEX GroupGE_POSITION_CAIndex ON CA_GROUP_ENTRY(GE_POSITION);
CREATE TRIGGER update_position_in_ca_group_entry_after_remove AFTER DELETE ON CA_GROUP_ENTRY
BEGIN
    UPDATE CA_GROUP_ENTRY SET GE_POSITION = GE_POSITION - 1 WHERE GE_POSITION > old.GE_POSITION AND GE_GROUP_ID = old.GE_GROUP_ID;
END; 
CREATE TRIGGER update_position_in_ca_group_entry_before_insert BEFORE INSERT ON CA_GROUP_ENTRY
BEGIN
    UPDATE CA_GROUP_ENTRY SET GE_POSITION = GE_POSITION + 1 WHERE GE_POSITION >= new.GE_POSITION AND GE_GROUP_ID = new.GE_GROUP_ID;
END;

SELECT "CREATE TABLE CA_ICON" AS " ";
SELECT "------------------------------------" AS " ";
CREATE TABLE CA_ICON( ICON_ID INTEGER PRIMARY KEY ,
                                  IC_FILENAME TEXT,
                                  IC_SKIN_ID TEXT,
                                  IC_APP_ID TEXT,                                  
                                  UNIQUE( IC_FILENAME, IC_SKIN_ID, IC_APP_ID ) );

SELECT "CREATE TABLE CA_LAUNCH" AS " ";
SELECT "------------------------------------" AS " ";
CREATE TABLE CA_LAUNCH( LAUNCH_ID INTEGER PRIMARY KEY ,
                                  LA_ENTRY_ID INTEGER NOT NULL,
                                  LA_LAUNCH_TIME INTEGER NOT NULL,
                                  FOREIGN KEY(LA_ENTRY_ID) REFERENCES CA_ENTRY(ENTRY_ID) );
CREATE INDEX LaunchLaunchTime_CAIndex ON CA_LAUNCH(LA_LAUNCH_TIME);

SELECT "CREATE TABLE CA_ATTRIBUTE" AS " ";
SELECT "------------------------------------" AS " ";
CREATE TABLE CA_ATTRIBUTE( ATTRIBUTE_ID INTEGER PRIMARY KEY ,
                                  AT_ENTRY_ID INTEGER NOT NULL,
                                  AT_NAME TEXT NOT NULL,
                                  AT_VALUE TEXT NOT NULL,
                                  UNIQUE( AT_ENTRY_ID, AT_NAME ),
                                  FOREIGN KEY(AT_ENTRY_ID) REFERENCES CA_ENTRY(ENTRY_ID) );

SELECT "CREATE TABLE CA_LOCALIZATION_TEXT" AS " ";
SELECT "------------------------------------" AS " ";
CREATE TABLE CA_LOCALIZATION_TEXT( LOC_TEXT_ID INTEGER PRIMARY KEY ,
                                  LT_TABLE_NAME TEXT ,
                                  LT_ATTRIBUTE_NAME TEXT ,
                                  LT_STRING_ID TEXT ,
                                  LT_ROW_ID INTEGER );
                                  
SELECT "CREATE TABLE CA_DB_PROPERTIES" AS " ";
SELECT "------------------------------------" AS " ";
CREATE TABLE CA_DB_PROPERTIES( DB_PROPERTIES_ID INTEGER PRIMARY KEY ,
                                  DB_PROPERTY TEXT UNIQUE,
                                  DB_VALUE TEXT );       
                                   


-- CREATE VIEW COLLECTION
SELECT "------------------------------------" AS " ";
SELECT "CREATE VIEW COLLECTION" AS " ";
DROP VIEW IF EXISTS COLLECTION;
CREATE VIEW COLLECTION 
  AS SELECT 
    "" AS "COLLECTION_NAME", 
    "" AS "COL_LOCNAME", 
    "" AS "ICON";
    
SELECT "  CREATE TRIGGER collection_insert" AS " ";
CREATE TRIGGER collection_insert INSTEAD OF INSERT ON COLLECTION 
BEGIN  
  -- INSERT ICON
  INSERT INTO CA_ICON (IC_FILENAME) 
  VALUES ( new.ICON);
  -- DELETE IF ICON IS NULL OR IF IT IS DUPLICATE
  DELETE FROM CA_ICON WHERE ICON_ID = last_insert_rowid() AND 
      (IC_FILENAME IS NULL OR (SELECT ICON_ID FROM CA_ICON WHERE IC_FILENAME = new.ICON AND ICON_ID <> last_insert_rowid()) IS NOT NULL);   
  -- INSERT ENTRY
	INSERT INTO CA_ENTRY (EN_TEXT, EN_ROLE, EN_TYPE_NAME, EN_FLAGS, EN_ICON_ID ) 
	VALUES ( new.COLLECTION_NAME , 2, "collection",  12, (SELECT ICON_ID FROM CA_ICON WHERE IC_FILENAME = new.ICON ));
	-- LOCALIZATION 
	INSERT INTO CA_LOCALIZATION_TEXT ( LT_TABLE_NAME, LT_ATTRIBUTE_NAME, LT_STRING_ID, LT_ROW_ID ) 
	VALUES ( 'CA_ENTRY', 'EN_TEXT', new.COL_LOCNAME, ( SELECT last_insert_rowid() ) );
	DELETE FROM CA_LOCALIZATION_TEXT WHERE LT_STRING_ID IS NULL AND LOC_TEXT_ID = last_insert_rowid() ;
	-- RELATION TO MAIN COLLECTION (ADD TO GROUP: )
  INSERT INTO CA_GROUP_ENTRY (GE_GROUP_ID, GE_ENTRY_ID, GE_POSITION) 
  VALUES ( (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TYPE_NAME = "menucollections") , 
          (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.COLLECTION_NAME), 
          (SELECT IFNULL(MAX(GE_POSITION)+1, 1) FROM CA_GROUP_ENTRY WHERE GE_GROUP_ID = (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TYPE_NAME = "menucollections")) );
END;

-- CREATE VIEW ITEM_TO_COLLECTION
SELECT "------------------------------------" AS " ";
SELECT "CREATE VIEW ITEM_TO_COLLECTION" AS " ";
DROP VIEW IF EXISTS ITEM_TO_COLLECTION;
CREATE VIEW ITEM_TO_COLLECTION 
  AS SELECT 
    "" AS "ITEM_TYPE",
    "" AS "ITEM_NAME",
    "" AS "ICON",
    "" AS "ITEM_DEST",    
    "" AS "COLLECTION_NAME";

SELECT "  CREATE TRIGGER item_to_collection_insert_app" AS " ";
CREATE TRIGGER item_to_collection_insert_app INSTEAD OF INSERT ON ITEM_TO_COLLECTION WHEN new.ITEM_TYPE="application"
BEGIN
  -- INSERT ENTRY
  INSERT OR IGNORE INTO CA_ENTRY (EN_TEXT, EN_ROLE, EN_TYPE_NAME, EN_UID ) 
  VALUES ( new.ITEM_NAME, 1, "application", new.ITEM_DEST   );
	-- RELATION TO MAIN COLLECTION (ADD TO GROUP: )
  INSERT INTO CA_GROUP_ENTRY (GE_GROUP_ID, GE_ENTRY_ID, GE_POSITION) 
  VALUES ( (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.COLLECTION_NAME) , 
          (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.ITEM_NAME), 
          (SELECT IFNULL(MAX(GE_POSITION)+1, 1) FROM CA_GROUP_ENTRY WHERE GE_GROUP_ID = (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.COLLECTION_NAME)) );
END;

SELECT "  CREATE TRIGGER item_to_collection_insert_url" AS " ";
CREATE TRIGGER item_to_collection_insert_url INSTEAD OF INSERT ON ITEM_TO_COLLECTION WHEN new.ITEM_TYPE="url"
BEGIN
  -- INSERT ICON
  INSERT OR IGNORE INTO CA_ICON (IC_FILENAME) 
  VALUES ( new.ICON);
  DELETE FROM CA_ICON WHERE ICON_ID = last_insert_rowid() AND 
      (IC_FILENAME IS NULL OR (SELECT ICON_ID FROM CA_ICON WHERE IC_FILENAME = new.ICON AND ICON_ID <> last_insert_rowid()) IS NOT NULL);  
  -- INSERT ENTRY
  INSERT OR IGNORE INTO CA_ENTRY (EN_TEXT, EN_ROLE, EN_TYPE_NAME, EN_ICON_ID ) 
  VALUES ( new.ITEM_NAME, 1, "url", (SELECT ICON_ID FROM CA_ICON WHERE IC_FILENAME = new.ICON ));
  INSERT OR IGNORE INTO CA_ATTRIBUTE (AT_ENTRY_ID, AT_NAME, AT_VALUE )  
  VALUES ( ( SELECT last_insert_rowid() ) ,"url",new.ITEM_DEST);
	-- RELATION TO MAIN COLLECTION (ADD TO GROUP: )
  INSERT INTO CA_GROUP_ENTRY (GE_GROUP_ID, GE_ENTRY_ID, GE_POSITION) 
  VALUES ( (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.COLLECTION_NAME) , 
          (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.ITEM_NAME), 
          (SELECT IFNULL(MAX(GE_POSITION)+1, 1) FROM CA_GROUP_ENTRY WHERE GE_GROUP_ID = (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.COLLECTION_NAME)) );
END;


-- CREATE VIEW WIDGET	_TO_COLLECTION
SELECT "------------------------------------" AS " ";
SELECT "CREATE VIEW WIDGET_TO_COLLECTION" AS " ";
DROP VIEW IF EXISTS WIDGET_TO_COLLECTION;
CREATE VIEW WIDGET_TO_COLLECTION 
  AS SELECT 
    "" AS "ITEM_TYPE",
    "" AS "ITEM_NAME",
    "" AS "ICON",
    "" AS "PACKAGE_UID",
    "" AS "LIBRARY",
    "" AS "LONG_NAME",
    "" AS "URI",
    "" AS "COLLECTION_NAME"	;

SELECT "  CREATE TRIGGER insert_widget_to_collection" AS " ";
CREATE TRIGGER item_to_collection_insert_widget INSTEAD OF INSERT ON WIDGET_TO_COLLECTION WHEN new.ITEM_TYPE="widget"
BEGIN
  -- INSERT ICON
  INSERT OR IGNORE INTO CA_ICON (IC_FILENAME) 
  VALUES ( new.ICON);
  DELETE FROM CA_ICON WHERE ICON_ID = last_insert_rowid() AND 
      (IC_FILENAME IS NULL OR (SELECT ICON_ID FROM CA_ICON WHERE IC_FILENAME = new.ICON AND ICON_ID <> last_insert_rowid()) IS NOT NULL);  
  -- INSERT ENTRY
  INSERT OR IGNORE INTO CA_ENTRY (EN_TEXT, EN_ROLE, EN_TYPE_NAME, EN_ICON_ID ) 
  VALUES ( new.ITEM_NAME, 1, "widget", (SELECT ICON_ID FROM CA_ICON WHERE IC_FILENAME = new.ICON ));
  -- INSERT ATTRIBUTES
  INSERT OR IGNORE INTO CA_ATTRIBUTE (AT_ENTRY_ID, AT_NAME, AT_VALUE )  
  VALUES ( ( SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.ITEM_NAME ) ,"packageuid",new.PACKAGE_UID);
  INSERT OR IGNORE INTO CA_ATTRIBUTE (AT_ENTRY_ID, AT_NAME, AT_VALUE )  
  VALUES ( ( SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.ITEM_NAME ) ,"widget:library",new.LIBRARY);
  INSERT OR IGNORE INTO CA_ATTRIBUTE (AT_ENTRY_ID, AT_NAME, AT_VALUE )  
  VALUES ( ( SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.ITEM_NAME ) ,"long_name",new.LONG_NAME);
  INSERT OR IGNORE INTO CA_ATTRIBUTE (AT_ENTRY_ID, AT_NAME, AT_VALUE )  
  VALUES ( ( SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.ITEM_NAME ) ,"widget:uri",new.URI);
	-- RELATION TO MAIN COLLECTION (ADD TO GROUP: )
  INSERT INTO CA_GROUP_ENTRY (GE_GROUP_ID, GE_ENTRY_ID, GE_POSITION) 
  VALUES ( (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.COLLECTION_NAME) , 
          (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.ITEM_NAME), 
          (SELECT IFNULL(MAX(GE_POSITION)+1, 1) FROM CA_GROUP_ENTRY WHERE GE_GROUP_ID = (SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.COLLECTION_NAME)) );
END;	
	
	


SELECT "INSERT INITIAL DATA TO CA_DB_PROPERTIES" AS " ";

SELECT "------------------------------------" AS " ";
INSERT INTO CA_DB_PROPERTIES ( DB_PROPERTY, DB_VALUE ) 
VALUES ( 'Version', '00001' );
INSERT INTO CA_DB_PROPERTIES ( DB_PROPERTY, DB_VALUE ) 
VALUES ( 'Language', '' );
INSERT INTO CA_DB_PROPERTIES ( DB_PROPERTY, DB_VALUE ) 
VALUES ( 'QMfile', 'db_textmap_' );

	
	
	
SELECT "------------------------------------" AS " ";
SELECT "castoragedb_create - END" AS " ";
SELECT "------------------------------------" AS " ";