?? schema.pm
字號:
], }, # Authentication # -------------- logincookies => { FIELDS => [ cookie => {TYPE => 'varchar(16)', NOTNULL => 1, PRIMARYKEY => 1}, userid => {TYPE => 'INT3', NOTNULL => 1}, ipaddr => {TYPE => 'varchar(40)', NOTNULL => 1}, lastused => {TYPE => 'DATETIME', NOTNULL => 1}, ], INDEXES => [ logincookies_lastused_idx => ['lastused'], ], }, # "tokens" stores the tokens users receive when a password or email # change is requested. Tokens provide an extra measure of security # for these changes. tokens => { FIELDS => [ userid => {TYPE => 'INT3'}, issuedate => {TYPE => 'DATETIME', NOTNULL => 1} , token => {TYPE => 'varchar(16)', NOTNULL => 1, PRIMARYKEY => 1}, tokentype => {TYPE => 'varchar(8)', NOTNULL => 1} , eventdata => {TYPE => 'TINYTEXT'}, ], INDEXES => [ tokens_userid_idx => ['userid'], ], }, # GROUPS # ------ groups => { FIELDS => [ id => {TYPE => 'MEDIUMSERIAL', NOTNULL => 1, PRIMARYKEY => 1}, name => {TYPE => 'varchar(255)', NOTNULL => 1}, description => {TYPE => 'TEXT', NOTNULL => 1}, isbuggroup => {TYPE => 'BOOLEAN', NOTNULL => 1}, userregexp => {TYPE => 'TINYTEXT', NOTNULL => 1, DEFAULT => "''"}, isactive => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'TRUE'}, ], INDEXES => [ groups_name_idx => {FIELDS => ['name'], TYPE => 'UNIQUE'}, ], }, group_control_map => { FIELDS => [ group_id => {TYPE => 'INT3', NOTNULL => 1}, product_id => {TYPE => 'INT3', NOTNULL => 1}, entry => {TYPE => 'BOOLEAN', NOTNULL => 1}, membercontrol => {TYPE => 'BOOLEAN', NOTNULL => 1}, othercontrol => {TYPE => 'BOOLEAN', NOTNULL => 1}, canedit => {TYPE => 'BOOLEAN', NOTNULL => 1}, editcomponents => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'}, editbugs => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'}, canconfirm => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'}, ], INDEXES => [ group_control_map_product_id_idx => {FIELDS => [qw(product_id group_id)], TYPE => 'UNIQUE'}, group_control_map_group_id_idx => ['group_id'], ], }, # "user_group_map" determines the groups that a user belongs to # directly or due to regexp and which groups can be blessed by a user. # # grant_type: # if GRANT_DIRECT - record was explicitly granted # if GRANT_DERIVED - record was derived from expanding a group hierarchy # if GRANT_REGEXP - record was created by evaluating a regexp user_group_map => { FIELDS => [ user_id => {TYPE => 'INT3', NOTNULL => 1}, group_id => {TYPE => 'INT3', NOTNULL => 1}, isbless => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'}, grant_type => {TYPE => 'INT1', NOTNULL => 1, DEFAULT => GRANT_DIRECT}, ], INDEXES => [ user_group_map_user_id_idx => {FIELDS => [qw(user_id group_id grant_type isbless)], TYPE => 'UNIQUE'}, ], }, # This table determines which groups are made a member of another # group, given the ability to bless another group, or given # visibility to another groups existence and membership # grant_type: # if GROUP_MEMBERSHIP - member groups are made members of grantor # if GROUP_BLESS - member groups may grant membership in grantor # if GROUP_VISIBLE - member groups may see grantor group group_group_map => { FIELDS => [ member_id => {TYPE => 'INT3', NOTNULL => 1}, grantor_id => {TYPE => 'INT3', NOTNULL => 1}, grant_type => {TYPE => 'INT1', NOTNULL => 1, DEFAULT => GROUP_MEMBERSHIP}, ], INDEXES => [ group_group_map_member_id_idx => {FIELDS => [qw(member_id grantor_id grant_type)], TYPE => 'UNIQUE'}, ], }, # This table determines which groups a user must be a member of # in order to see a bug. bug_group_map => { FIELDS => [ bug_id => {TYPE => 'INT3', NOTNULL => 1}, group_id => {TYPE => 'INT3', NOTNULL => 1}, ], INDEXES => [ bug_group_map_bug_id_idx => {FIELDS => [qw(bug_id group_id)], TYPE => 'UNIQUE'}, bug_group_map_group_id_idx => ['group_id'], ], }, # This table determines which groups a user must be a member of # in order to see a named query somebody else shares. namedquery_group_map => { FIELDS => [ namedquery_id => {TYPE => 'INT3', NOTNULL => 1}, group_id => {TYPE => 'INT3', NOTNULL => 1}, ], INDEXES => [ namedquery_group_map_namedquery_id_idx => {FIELDS => [qw(namedquery_id)], TYPE => 'UNIQUE'}, namedquery_group_map_group_id_idx => ['group_id'], ], }, category_group_map => { FIELDS => [ category_id => {TYPE => 'INT2', NOTNULL => 1}, group_id => {TYPE => 'INT3', NOTNULL => 1}, ], INDEXES => [ category_group_map_category_id_idx => {FIELDS => [qw(category_id group_id)], TYPE => 'UNIQUE'}, ], }, # PRODUCTS # -------- classifications => { FIELDS => [ id => {TYPE => 'SMALLSERIAL', NOTNULL => 1, PRIMARYKEY => 1}, name => {TYPE => 'varchar(64)', NOTNULL => 1}, description => {TYPE => 'MEDIUMTEXT'}, sortkey => {TYPE => 'INT2', NOTNULL => 1, DEFAULT => '0'}, ], INDEXES => [ classifications_name_idx => {FIELDS => ['name'], TYPE => 'UNIQUE'}, ], }, products => { FIELDS => [ id => {TYPE => 'SMALLSERIAL', NOTNULL => 1, PRIMARYKEY => 1}, name => {TYPE => 'varchar(64)', NOTNULL => 1}, classification_id => {TYPE => 'INT2', NOTNULL => 1, DEFAULT => '1'}, description => {TYPE => 'MEDIUMTEXT'}, milestoneurl => {TYPE => 'TINYTEXT', NOTNULL => 1, DEFAULT => "''"}, disallownew => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 0}, votesperuser => {TYPE => 'INT2', NOTNULL => 1, DEFAULT => 0}, maxvotesperbug => {TYPE => 'INT2', NOTNULL => 1, DEFAULT => '10000'}, votestoconfirm => {TYPE => 'INT2', NOTNULL => 1, DEFAULT => 0}, defaultmilestone => {TYPE => 'varchar(20)', NOTNULL => 1, DEFAULT => "'---'"}, ], INDEXES => [ products_name_idx => {FIELDS => ['name'], TYPE => 'UNIQUE'}, ], }, components => { FIELDS => [ id => {TYPE => 'SMALLSERIAL', NOTNULL => 1, PRIMARYKEY => 1}, name => {TYPE => 'varchar(64)', NOTNULL => 1}, product_id => {TYPE => 'INT2', NOTNULL => 1}, initialowner => {TYPE => 'INT3', NOTNULL => 1}, initialqacontact => {TYPE => 'INT3'}, description => {TYPE => 'MEDIUMTEXT', NOTNULL => 1}, ], INDEXES => [ components_product_id_idx => {FIELDS => [qw(product_id name)], TYPE => 'UNIQUE'}, components_name_idx => ['name'], ], }, # CHARTS # ------ series => { FIELDS => [ series_id => {TYPE => 'MEDIUMSERIAL', NOTNULL => 1, PRIMARYKEY => 1}, creator => {TYPE => 'INT3'}, category => {TYPE => 'INT2', NOTNULL => 1}, subcategory => {TYPE => 'INT2', NOTNULL => 1}, name => {TYPE => 'varchar(64)', NOTNULL => 1}, frequency => {TYPE => 'INT2', NOTNULL => 1}, last_viewed => {TYPE => 'DATETIME'}, query => {TYPE => 'MEDIUMTEXT', NOTNULL => 1}, is_public => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'}, ], INDEXES => [ series_creator_idx => {FIELDS => [qw(creator category subcategory name)], TYPE => 'UNIQUE'}, ], }, series_data => { FIELDS => [ series_id => {TYPE => 'INT3', NOTNULL => 1}, series_date => {TYPE => 'DATETIME', NOTNULL => 1}, series_value => {TYPE => 'INT3', NOTNULL => 1}, ], INDEXES => [ series_data_series_id_idx => {FIELDS => [qw(series_id series_date)], TYPE => 'UNIQUE'}, ], }, series_categories => { FIELDS => [ id => {TYPE => 'SMALLSERIAL', NOTNULL => 1, PRIMARYKEY => 1}, name => {TYPE => 'varchar(64)', NOTNULL => 1}, ], INDEXES => [ series_categories_name_idx => {FIELDS => ['name'], TYPE => 'UNIQUE'}, ], }, # WHINE SYSTEM # ------------ whine_queries => { FIELDS => [ id => {TYPE => 'MEDIUMSERIAL', PRIMARYKEY => 1, NOTNULL => 1}, eventid => {TYPE => 'INT3', NOTNULL => 1}, query_name => {TYPE => 'varchar(64)', NOTNULL => 1, DEFAULT => "''"}, sortkey => {TYPE => 'INT2', NOTNULL => 1, DEFAULT => '0'}, onemailperbug => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'}, title => {TYPE => 'varchar(128)', NOTNULL => 1, DEFAULT => "''"}, ], INDEXES => [ whine_queries_eventid_idx => ['eventid'], ], }, whine_schedules => { FIELDS => [ id => {TYPE => 'MEDIUMSERIAL', PRIMARYKEY => 1, NOTNULL => 1}, eventid => {TYPE => 'INT3', NOTNULL => 1}, run_day => {TYPE => 'varchar(32)'}, run_time => {TYPE => 'varchar(32)'}, run_next => {TYPE => 'DATETIME'}, mailto => {TYPE => 'INT3', NOTNULL => 1}, mailto_type => {TYPE => 'INT2', NOTNULL => 1, DEFAULT => '0'}, ], INDEXES => [ whine_schedules_run_next_idx => ['run_next'], whine_schedules_eventid_idx => ['eventid'], ], }, whine_events => { FIELDS => [ id => {TYPE => 'MEDIUMSERIAL', PRIMARYKEY => 1, NOTNULL => 1}, owner_userid => {TYPE => 'INT3', NOTNULL => 1}, subject => {TYPE => 'varchar(128)'}, body => {TYPE => 'MEDIUMTEXT'}, ], }, # QUIPS # ----- quips => { FIELDS => [ quipid => {TYPE => 'MEDIUMSERIAL', NOTNULL => 1, PRIMARYKEY => 1}, userid => {TYPE => 'INT3'}, quip => {TYPE => 'TEXT', NOTNULL => 1}, approved => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'TRUE'}, ], }, # SETTINGS # -------- # setting - each global setting will have exactly one entry # in this table. # setting_value - stores the list of acceptable values for each # setting, and a sort index that controls the order # in which the values are displayed. # profile_setting - If a user has chosen to use a value other than the # global default for a given setting, it will be # stored in this table. Note: even if a setting is # later changed so is_enabled = false, the stored # value will remain in case it is ever enabled again. # setting => { FIELDS => [ name => {TYPE => 'varchar(32)', NOTNULL => 1, PRIMARYKEY => 1}, default_value => {TYPE => 'varchar(32)', NOTNULL => 1}, is_enabled => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'TRUE'}, subclass => {TYPE => 'varchar(32)'}, ], }, setting_value => { FIELDS => [
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -