@@ -113,6 +113,17 @@ static constexpr char tbl_perms_0[] =
113113" CREATE INDEX fid_permissions_index ON permissions(folder_id);"
114114" CREATE UNIQUE INDEX folder_username_index ON permissions(folder_id, username);" ;
115115
116+ static constexpr char tbl_perms_24[] =
117+ " CREATE TABLE permissions ("
118+ " member_id INTEGER PRIMARY KEY AUTOINCREMENT,"
119+ " folder_id INTEGER NOT NULL,"
120+ " username TEXT COLLATE NOCASE NOT NULL,"
121+ " permission INTEGER NOT NULL,"
122+ " FOREIGN KEY (folder_id) REFERENCES folders (folder_id) ON DELETE CASCADE ON UPDATE CASCADE);"
123+ " CREATE INDEX fid_permissions_index ON permissions(folder_id);"
124+ " CREATE UNIQUE INDEX folder_username_index ON permissions(folder_id, username);"
125+ " CREATE UNIQUE INDEX folder_username_index2 ON permissions(username, folder_id);" ;
126+
116127static constexpr char tbl_rules_0[] =
117128" CREATE TABLE rules ("
118129" rule_id INTEGER PRIMARY KEY AUTOINCREMENT,"
@@ -372,6 +383,9 @@ tbl_addmsgtimeindex_23[] =
372383" LEFT JOIN message_properties AS rt ON m.message_id=rt.message_id AND rt.proptag=0xe060040 " /* PR_MESSAGE_DELIVERY_TIME */
373384" LEFT JOIN message_properties AS st ON m.message_id=st.message_id AND st.proptag=0x390040 " /* PR_CLIENT_SUBMIT_TIME */
374385" WHERE m.parent_fid IS NOT NULL AND m.is_associated=0 AND m.is_deleted=0" ;
386+ static constexpr char tbl_mboxpermissionindex_24[] =
387+ /* this helps determining mbox perm (bitwise-OR of all folders) */
388+ " CREATE UNIQUE INDEX folder_username_index2 ON permissions(username, folder_id);" ;
375389
376390static constexpr char tbl_pub_folders_0[] =
377391" CREATE TABLE folders ("
@@ -451,7 +465,7 @@ static constexpr tbl_init tbl_pvt_init_top[] = {
451465 {" named_properties" , tbl_namedprops_12},
452466 {" store_properties" , tbl_storeprops_2},
453467 {" folder_properties" , tbl_fldprops_3},
454- {" permissions" , tbl_perms_0 },
468+ {" permissions" , tbl_perms_24 },
455469 {" rules" , tbl_rules_0},
456470 {" message_properties" , tbl_msgprops_4},
457471 {" message_changes" , tbl_msgchgs_0},
@@ -498,7 +512,7 @@ static constexpr tbl_init tbl_pub_init_top[] = {
498512 {" named_properties" , tbl_namedprops_0},
499513 {" store_properties" , tbl_storeprops_2},
500514 {" folder_properties" , tbl_fldprops_3},
501- {" permissions" , tbl_perms_0 },
515+ {" permissions" , tbl_perms_24 },
502516 {" rules" , tbl_rules_0},
503517 {" message_properties" , tbl_msgprops_4},
504518 {" message_changes" , tbl_msgchgs_0},
@@ -640,6 +654,7 @@ static constexpr tblite_upgradefn tbl_pvt_upgrade_list[] = {
640654 {21 , tbl_mtimeindex_21},
641655 {22 , tbl_msgtimeindex_22},
642656 {23 , tbl_addmsgtimeindex_23},
657+ {24 , tbl_mboxpermissionindex_24},
643658 /* advance schema numbers in lockstep with public stores */
644659 TABLE_END,
645660};
@@ -660,6 +675,7 @@ static constexpr tblite_upgradefn tbl_pub_upgrade_list[] = {
660675 {21 , tbl_mtimeindex_21},
661676 {22 , tbl_msgtimeindex_22},
662677 {23 , tbl_addmsgtimeindex_23},
678+ {24 , tbl_mboxpermissionindex_24},
663679 /* advance schema numbers in lockstep with private stores */
664680 TABLE_END,
665681};
0 commit comments