[0] | 1 | <?php |
---|
[3731] | 2 | /** |
---|
| 3 | * @brief Dotclear database schema |
---|
| 4 | * |
---|
| 5 | * @package Dotclear |
---|
| 6 | * @subpackage Core |
---|
| 7 | * |
---|
| 8 | * @copyright Olivier Meunier & Association Dotclear |
---|
| 9 | * @copyright GPL-2.0-only |
---|
| 10 | */ |
---|
| 11 | |
---|
[3730] | 12 | if (!defined('DC_RC_PATH')) {return;} |
---|
[0] | 13 | |
---|
| 14 | if (!($_s instanceof dbStruct)) { |
---|
[3730] | 15 | throw new Exception('No valid schema object'); |
---|
[0] | 16 | } |
---|
| 17 | |
---|
| 18 | /* Tables |
---|
| 19 | -------------------------------------------------------- */ |
---|
| 20 | $_s->blog |
---|
[3730] | 21 | ->blog_id('varchar', 32, false) |
---|
| 22 | ->blog_uid('varchar', 32, false) |
---|
| 23 | ->blog_creadt('timestamp', 0, false, 'now()') |
---|
| 24 | ->blog_upddt('timestamp', 0, false, 'now()') |
---|
| 25 | ->blog_url('varchar', 255, false) |
---|
| 26 | ->blog_name('varchar', 255, false) |
---|
| 27 | ->blog_desc('text', 0, true) |
---|
| 28 | ->blog_status('smallint', 0, false, 1) |
---|
[2566] | 29 | |
---|
[3730] | 30 | ->primary('pk_blog', 'blog_id') |
---|
| 31 | ; |
---|
[0] | 32 | |
---|
| 33 | $_s->category |
---|
[3730] | 34 | ->cat_id('bigint', 0, false) |
---|
| 35 | ->blog_id('varchar', 32, false) |
---|
| 36 | ->cat_title('varchar', 255, false) |
---|
| 37 | ->cat_url('varchar', 255, false) |
---|
| 38 | ->cat_desc('text', 0, true) |
---|
| 39 | ->cat_position('integer', 0, true, 0) |
---|
| 40 | ->cat_lft('integer', 0, true) |
---|
| 41 | ->cat_rgt('integer', 0, true) |
---|
[2566] | 42 | |
---|
[3730] | 43 | ->primary('pk_category', 'cat_id') |
---|
[2566] | 44 | |
---|
[3730] | 45 | ->unique('uk_cat_url', 'cat_url', 'blog_id') |
---|
| 46 | ; |
---|
[0] | 47 | |
---|
| 48 | $_s->session |
---|
[3730] | 49 | ->ses_id('varchar', 40, false) |
---|
| 50 | ->ses_time('integer', 0, false, 0) |
---|
| 51 | ->ses_start('integer', 0, false, 0) |
---|
| 52 | ->ses_value('text', 0, false) |
---|
[2566] | 53 | |
---|
[3730] | 54 | ->primary('pk_session', 'ses_id') |
---|
| 55 | ; |
---|
[0] | 56 | |
---|
| 57 | $_s->setting |
---|
[3730] | 58 | ->setting_id('varchar', 255, false) |
---|
| 59 | ->blog_id('varchar', 32, true) |
---|
| 60 | ->setting_ns('varchar', 32, false, "'system'") |
---|
| 61 | ->setting_value('text', 0, true, null) |
---|
| 62 | ->setting_type('varchar', 8, false, "'string'") |
---|
| 63 | ->setting_label('text', 0, true) |
---|
[2566] | 64 | |
---|
[3730] | 65 | ->unique('uk_setting', 'setting_ns', 'setting_id', 'blog_id') |
---|
| 66 | ; |
---|
[0] | 67 | |
---|
| 68 | $_s->user |
---|
[3730] | 69 | ->user_id('varchar', 32, false) |
---|
| 70 | ->user_super('smallint', 0, true) |
---|
| 71 | ->user_status('smallint', 0, false, 1) |
---|
| 72 | ->user_pwd('varchar', 255, false) |
---|
| 73 | ->user_change_pwd('smallint', 0, false, 0) |
---|
| 74 | ->user_recover_key('varchar', 32, true, null) |
---|
| 75 | ->user_name('varchar', 255, true, null) |
---|
| 76 | ->user_firstname('varchar', 255, true, null) |
---|
| 77 | ->user_displayname('varchar', 255, true, null) |
---|
| 78 | ->user_email('varchar', 255, true, null) |
---|
| 79 | ->user_url('varchar', 255, true, null) |
---|
| 80 | ->user_desc('text', 0, true) |
---|
| 81 | ->user_default_blog('varchar', 32, true, null) |
---|
| 82 | ->user_options('text', 0, true) |
---|
| 83 | ->user_lang('varchar', 5, true, null) |
---|
| 84 | ->user_tz('varchar', 128, false, "'UTC'") |
---|
| 85 | ->user_post_status('smallint', 0, false, -2) |
---|
| 86 | ->user_creadt('timestamp', 0, false, 'now()') |
---|
| 87 | ->user_upddt('timestamp', 0, false, 'now()') |
---|
[2566] | 88 | |
---|
[3730] | 89 | ->primary('pk_user', 'user_id') |
---|
| 90 | ; |
---|
[0] | 91 | |
---|
| 92 | $_s->permissions |
---|
[3730] | 93 | ->user_id('varchar', 32, false) |
---|
| 94 | ->blog_id('varchar', 32, false) |
---|
| 95 | ->permissions('text', 0, true) |
---|
[2566] | 96 | |
---|
[3730] | 97 | ->primary('pk_permissions', 'user_id', 'blog_id') |
---|
| 98 | ; |
---|
[0] | 99 | |
---|
| 100 | $_s->post |
---|
[3730] | 101 | ->post_id('bigint', 0, false) |
---|
| 102 | ->blog_id('varchar', 32, false) |
---|
| 103 | ->user_id('varchar', 32, false) |
---|
| 104 | ->cat_id('bigint', 0, true) |
---|
| 105 | ->post_dt('timestamp', 0, false, 'now()') |
---|
| 106 | ->post_tz('varchar', 128, false, "'UTC'") |
---|
| 107 | ->post_creadt('timestamp', 0, false, 'now()') |
---|
| 108 | ->post_upddt('timestamp', 0, false, 'now()') |
---|
| 109 | ->post_password('varchar', 32, true, null) |
---|
| 110 | ->post_type('varchar', 32, false, "'post'") |
---|
| 111 | ->post_format('varchar', 32, false, "'xhtml'") |
---|
| 112 | ->post_url('varchar', 255, false) |
---|
| 113 | ->post_lang('varchar', 5, true, null) |
---|
| 114 | ->post_title('varchar', 255, true, null) |
---|
| 115 | ->post_excerpt('text', 0, true, null) |
---|
| 116 | ->post_excerpt_xhtml('text', 0, true, null) |
---|
| 117 | ->post_content('text', 0, true, null) |
---|
| 118 | ->post_content_xhtml('text', 0, false) |
---|
| 119 | ->post_notes('text', 0, true, null) |
---|
| 120 | ->post_meta('text', 0, true, null) |
---|
| 121 | ->post_words('text', 0, true, null) |
---|
| 122 | ->post_status('smallint', 0, false, 0) |
---|
| 123 | ->post_firstpub('smallint', 0, false, 0) |
---|
| 124 | ->post_selected('smallint', 0, false, 0) |
---|
| 125 | ->post_position('integer', 0, false, 0) |
---|
| 126 | ->post_open_comment('smallint', 0, false, 0) |
---|
| 127 | ->post_open_tb('smallint', 0, false, 0) |
---|
| 128 | ->nb_comment('integer', 0, false, 0) |
---|
| 129 | ->nb_trackback('integer', 0, false, 0) |
---|
[2566] | 130 | |
---|
[3730] | 131 | ->primary('pk_post', 'post_id') |
---|
[2566] | 132 | |
---|
[3730] | 133 | ->unique('uk_post_url', 'post_url', 'post_type', 'blog_id') |
---|
| 134 | ; |
---|
[0] | 135 | |
---|
| 136 | $_s->media |
---|
[3730] | 137 | ->media_id('bigint', 0, false) |
---|
| 138 | ->user_id('varchar', 32, false) |
---|
| 139 | ->media_path('varchar', 255, false) |
---|
| 140 | ->media_title('varchar', 255, false) |
---|
| 141 | ->media_file('varchar', 255, false) |
---|
| 142 | ->media_dir('varchar', 255, false, "'.'") |
---|
| 143 | ->media_meta('text', 0, true, null) |
---|
| 144 | ->media_dt('timestamp', 0, false, 'now()') |
---|
| 145 | ->media_creadt('timestamp', 0, false, 'now()') |
---|
| 146 | ->media_upddt('timestamp', 0, false, 'now()') |
---|
| 147 | ->media_private('smallint', 0, false, 0) |
---|
[2566] | 148 | |
---|
[3730] | 149 | ->primary('pk_media', 'media_id') |
---|
| 150 | ; |
---|
[0] | 151 | |
---|
| 152 | $_s->post_media |
---|
[3730] | 153 | ->media_id('bigint', 0, false) |
---|
| 154 | ->post_id('bigint', 0, false) |
---|
| 155 | ->link_type('varchar', 32, false, "'attachment'") |
---|
[2566] | 156 | |
---|
[3730] | 157 | ->primary('pk_post_media', 'media_id', 'post_id', 'link_type') |
---|
| 158 | ; |
---|
[0] | 159 | |
---|
| 160 | $_s->log |
---|
[3730] | 161 | ->log_id('bigint', 0, false) |
---|
| 162 | ->user_id('varchar', 32, true) |
---|
| 163 | ->blog_id('varchar', 32, true) |
---|
| 164 | ->log_table('varchar', 255, false) |
---|
| 165 | ->log_dt('timestamp', 0, false, 'now()') |
---|
| 166 | ->log_ip('varchar', 39, false) |
---|
| 167 | ->log_msg('text', 0, true, null) |
---|
[2566] | 168 | |
---|
[3730] | 169 | ->primary('pk_log', 'log_id') |
---|
| 170 | ; |
---|
[0] | 171 | |
---|
| 172 | $_s->version |
---|
[3730] | 173 | ->module('varchar', 64, false) |
---|
| 174 | ->version('varchar', 32, false) |
---|
[2566] | 175 | |
---|
[3730] | 176 | ->primary('pk_version', 'module') |
---|
| 177 | ; |
---|
[0] | 178 | |
---|
| 179 | $_s->ping |
---|
[3730] | 180 | ->post_id('bigint', 0, false) |
---|
| 181 | ->ping_url('varchar', 255, false) |
---|
| 182 | ->ping_dt('timestamp', 0, false, 'now()') |
---|
[2566] | 183 | |
---|
[3730] | 184 | ->primary('pk_ping', 'post_id', 'ping_url') |
---|
| 185 | ; |
---|
[0] | 186 | |
---|
| 187 | $_s->comment |
---|
[3730] | 188 | ->comment_id('bigint', 0, false) |
---|
| 189 | ->post_id('bigint', 0, false) |
---|
| 190 | ->comment_dt('timestamp', 0, false, 'now()') |
---|
| 191 | ->comment_tz('varchar', 128, false, "'UTC'") |
---|
| 192 | ->comment_upddt('timestamp', 0, false, 'now()') |
---|
| 193 | ->comment_author('varchar', 255, true, null) |
---|
| 194 | ->comment_email('varchar', 255, true, null) |
---|
| 195 | ->comment_site('varchar', 255, true, null) |
---|
| 196 | ->comment_content('text', 0, true) |
---|
| 197 | ->comment_words('text', 0, true, null) |
---|
| 198 | ->comment_ip('varchar', 39, true, null) |
---|
| 199 | ->comment_status('smallint', 0, true, 0) |
---|
| 200 | ->comment_spam_status('varchar', 128, true, 0) |
---|
| 201 | ->comment_spam_filter('varchar', 32, true, null) |
---|
| 202 | ->comment_trackback('smallint', 0, false, 0) |
---|
[2566] | 203 | |
---|
[3730] | 204 | ->primary('pk_comment', 'comment_id') |
---|
| 205 | ; |
---|
[0] | 206 | |
---|
| 207 | $_s->meta |
---|
[3730] | 208 | ->meta_id('varchar', 255, false) |
---|
| 209 | ->meta_type('varchar', 64, false) |
---|
| 210 | ->post_id('bigint', 0, false) |
---|
[2566] | 211 | |
---|
[3730] | 212 | ->primary('pk_meta', 'meta_id', 'meta_type', 'post_id') |
---|
| 213 | ; |
---|
[0] | 214 | |
---|
[3] | 215 | $_s->pref |
---|
[3730] | 216 | ->pref_id('varchar', 255, false) |
---|
| 217 | ->user_id('varchar', 32, true) |
---|
| 218 | ->pref_ws('varchar', 32, false, "'system'") |
---|
| 219 | ->pref_value('text', 0, true, null) |
---|
| 220 | ->pref_type('varchar', 8, false, "'string'") |
---|
| 221 | ->pref_label('text', 0, true) |
---|
[2566] | 222 | |
---|
[3730] | 223 | ->unique('uk_pref', 'pref_ws', 'pref_id', 'user_id') |
---|
| 224 | ; |
---|
[3] | 225 | |
---|
[0] | 226 | /* References indexes |
---|
| 227 | -------------------------------------------------------- */ |
---|
[3730] | 228 | $_s->category->index('idx_category_blog_id', 'btree', 'blog_id'); |
---|
| 229 | $_s->category->index('idx_category_cat_lft_blog_id', 'btree', 'blog_id', 'cat_lft'); |
---|
| 230 | $_s->category->index('idx_category_cat_rgt_blog_id', 'btree', 'blog_id', 'cat_rgt'); |
---|
| 231 | $_s->setting->index('idx_setting_blog_id', 'btree', 'blog_id'); |
---|
| 232 | $_s->user->index('idx_user_user_default_blog', 'btree', 'user_default_blog'); |
---|
| 233 | $_s->permissions->index('idx_permissions_blog_id', 'btree', 'blog_id'); |
---|
| 234 | $_s->post->index('idx_post_cat_id', 'btree', 'cat_id'); |
---|
| 235 | $_s->post->index('idx_post_user_id', 'btree', 'user_id'); |
---|
| 236 | $_s->post->index('idx_post_blog_id', 'btree', 'blog_id'); |
---|
| 237 | $_s->media->index('idx_media_user_id', 'btree', 'user_id'); |
---|
| 238 | $_s->post_media->index('idx_post_media_post_id', 'btree', 'post_id'); |
---|
| 239 | $_s->post_media->index('idx_post_media_media_id', 'btree', 'media_id'); |
---|
| 240 | $_s->log->index('idx_log_user_id', 'btree', 'user_id'); |
---|
| 241 | $_s->comment->index('idx_comment_post_id', 'btree', 'post_id'); |
---|
| 242 | $_s->meta->index('idx_meta_post_id', 'btree', 'post_id'); |
---|
| 243 | $_s->meta->index('idx_meta_meta_type', 'btree', 'meta_type'); |
---|
| 244 | $_s->pref->index('idx_pref_user_id', 'btree', 'user_id'); |
---|
[0] | 245 | |
---|
| 246 | /* Performance indexes |
---|
| 247 | -------------------------------------------------------- */ |
---|
[3730] | 248 | $_s->comment->index('idx_comment_post_id_dt_status', 'btree', 'post_id', 'comment_dt', 'comment_status'); |
---|
| 249 | $_s->post->index('idx_post_post_dt', 'btree', 'post_dt'); |
---|
| 250 | $_s->post->index('idx_post_post_dt_post_id', 'btree', 'post_dt', 'post_id'); |
---|
| 251 | $_s->post->index('idx_blog_post_post_dt_post_id', 'btree', 'blog_id', 'post_dt', 'post_id'); |
---|
| 252 | $_s->post->index('idx_blog_post_post_status', 'btree', 'blog_id', 'post_status'); |
---|
| 253 | $_s->blog->index('idx_blog_blog_upddt', 'btree', 'blog_upddt'); |
---|
| 254 | $_s->user->index('idx_user_user_super', 'btree', 'user_super'); |
---|
[0] | 255 | |
---|
| 256 | /* Foreign keys |
---|
| 257 | -------------------------------------------------------- */ |
---|
[3730] | 258 | $_s->category->reference('fk_category_blog', 'blog_id', 'blog', 'blog_id', 'cascade', 'cascade'); |
---|
| 259 | $_s->setting->reference('fk_setting_blog', 'blog_id', 'blog', 'blog_id', 'cascade', 'cascade'); |
---|
| 260 | $_s->user->reference('fk_user_default_blog', 'user_default_blog', 'blog', 'blog_id', 'cascade', 'set null'); |
---|
| 261 | $_s->permissions->reference('fk_permissions_blog', 'blog_id', 'blog', 'blog_id', 'cascade', 'cascade'); |
---|
| 262 | $_s->permissions->reference('fk_permissions_user', 'user_id', 'user', 'user_id', 'cascade', 'cascade'); |
---|
| 263 | $_s->post->reference('fk_post_category', 'cat_id', 'category', 'cat_id', 'cascade', 'set null'); |
---|
| 264 | $_s->post->reference('fk_post_user', 'user_id', 'user', 'user_id', 'cascade', 'cascade'); |
---|
| 265 | $_s->post->reference('fk_post_blog', 'blog_id', 'blog', 'blog_id', 'cascade', 'cascade'); |
---|
| 266 | $_s->media->reference('fk_media_user', 'user_id', 'user', 'user_id', 'cascade', 'cascade'); |
---|
| 267 | $_s->post_media->reference('fk_media', 'media_id', 'media', 'media_id', 'cascade', 'cascade'); |
---|
| 268 | $_s->post_media->reference('fk_media_post', 'post_id', 'post', 'post_id', 'cascade', 'cascade'); |
---|
| 269 | $_s->ping->reference('fk_ping_post', 'post_id', 'post', 'post_id', 'cascade', 'cascade'); |
---|
| 270 | $_s->comment->reference('fk_comment_post', 'post_id', 'post', 'post_id', 'cascade', 'cascade'); |
---|
| 271 | $_s->log->reference('fk_log_blog', 'blog_id', 'blog', 'blog_id', 'cascade', 'set null'); |
---|
| 272 | $_s->meta->reference('fk_meta_post', 'post_id', 'post', 'post_id', 'cascade', 'cascade'); |
---|
| 273 | $_s->pref->reference('fk_pref_user', 'user_id', 'user', 'user_id', 'cascade', 'cascade'); |
---|
[0] | 274 | |
---|
| 275 | /* PostgreSQL specific indexes |
---|
| 276 | -------------------------------------------------------- */ |
---|
[3730] | 277 | if ($_s->driver() == 'pgsql') { |
---|
| 278 | $_s->setting->index('idx_setting_blog_id_null', 'btree', '(blog_id IS NULL)'); |
---|
| 279 | $_s->media->index('idx_media_media_path', 'btree', 'media_path', 'media_dir'); |
---|
| 280 | $_s->pref->index('idx_pref_user_id_null', 'btree', '(user_id IS NULL)'); |
---|
[0] | 281 | } |
---|