the browser-facing portion of osu!
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 1380 lines 75 kB view raw
1<?php 2 3// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0. 4// See the LICENCE file in the repository root for full licence text. 5use Illuminate\Database\Migrations\Migration; 6use Illuminate\Database\Schema\Blueprint; 7 8class BaseTables extends Migration 9{ 10 /** 11 * Run the migrations. 12 * 13 * @return void 14 */ 15 public function up() 16 { 17 Schema::create('osu_achievements', function (Blueprint $table) { 18 $table->mediumIncrements('achievement_id'); 19 $table->string('name', 40); 20 $table->string('image', 50); 21 $table->string('grouping', 30)->default('-'); 22 $table->unsignedTinyInteger('ordering'); 23 $table->unsignedTinyInteger('progression'); 24 $table->tinyInteger('quest_ordering')->nullable(); 25 $table->text('quest_instructions')->nullable(); 26 27 $table->index(['grouping', 'ordering'], 'display_order'); 28 $table->index('quest_ordering', 'quest_ordering'); 29 }); 30 31 Schema::create('osu_apikeys', function (Blueprint $table) { 32 $table->increments('key'); 33 $table->unsignedInteger('user_id'); 34 $table->string('app_name', 100)->default(''); 35 $table->string('app_url', 100)->default(''); 36 $table->string('api_key', 52)->default(''); 37 $table->boolean('enabled')->default(true); 38 $table->UnsignedBigInteger('hit_count')->default(0); 39 $table->UnsignedInteger('miss_count')->default(0); 40 $table->tinyInteger('revoked')->default(0); 41 42 $table->unique('api_key', 'api_key'); 43 }); 44 45 Schema::create('osu_badges', function (Blueprint $table) { 46 $table->unsignedMediumInteger('user_id'); 47 $table->string('image', 255); 48 $table->string('description', 255); 49 $table->timestamp('awarded')->nullable()->useCurrent(); 50 $table->primary(['user_id', 'image']); 51 }); 52 53 Schema::create('osu_beatmap_difficulty', function (Blueprint $table) { 54 $table->unsignedInteger('beatmap_id'); 55 $table->tinyInteger('mode')->default(0); 56 $table->unsignedInteger('mods'); 57 $table->float('diff_unified', null, null); // creates a double instead of float. 58 $table->timestamp('last_update')->useCurrent(); 59 60 $table->primary(['beatmap_id', 'mode', 'mods'], 'osu_beatmap_difficulty_primary'); 61 $table->index(['mode', 'mods', 'diff_unified'], 'diff_sort'); 62 }); 63 64 Schema::create('osu_beatmap_difficulty_attribs', function (Blueprint $table) { 65 $table->unsignedMediumInteger('beatmap_id'); 66 $table->unsignedTinyInteger('mode'); 67 $table->unsignedInteger('mods'); 68 $table->unsignedTinyInteger('attrib_id')->comment('see osu_difficulty_attribs table'); 69 70 $table->primary(['beatmap_id', 'mode', 'mods', 'attrib_id'], 'attribs_primary'); 71 }); 72 73 DB::statement('ALTER TABLE osu_beatmap_difficulty_attribs ADD value float null'); 74 75 Schema::create('osu_beatmaps', function (Blueprint $table) { 76 $table->mediumIncrements('beatmap_id'); 77 $table->unsignedMediumInteger('beatmapset_id')->nullable(); 78 $table->unsignedMediumInteger('user_id')->default('0'); 79 $table->string('filename', 150)->nullable(); 80 $table->string('checksum', 32)->nullable(); 81 $table->string('version', 80)->default(''); 82 $table->UnsignedMediumInteger('total_length')->default(0); 83 $table->UnsignedMediumInteger('hit_length')->default(0); 84 $table->UnsignedSmallInteger('countTotal')->default(0); 85 $table->UnsignedSmallInteger('countNormal')->default(0); 86 $table->UnsignedSmallInteger('countSlider')->default(0); 87 $table->UnsignedSmallInteger('countSpinner')->default(0); 88 $table->float('diff_drain')->unsigned()->default(0); 89 $table->float('diff_size')->unsigned()->default(0); 90 $table->float('diff_overall')->unsigned()->default(0); 91 $table->float('diff_approach')->unsigned()->default(0); 92 $table->UnsignedTinyInteger('playmode')->default(0); 93 $table->TinyInteger('approved')->default(0); 94 $table->timestamp('last_update')->useCurrent(); 95 $table->float('difficultyrating')->default(0); 96 $table->UnsignedMediumInteger('playcount')->default(0); 97 $table->UnsignedMediumInteger('passcount')->default(0); 98 $table->boolean('orphaned')->default(false); 99 $table->string('youtube_preview', 50)->nullable(); 100 $table->index('beatmapset_id', 'beatmapset_id'); 101 $table->index('filename', 'filename'); 102 $table->index('checksum', 'checksum'); 103 $table->index('user_id', 'user_id'); 104 }); 105 106 107 Schema::create('osu_beatmapsets', function (Blueprint $table) { 108 $table->mediumIncrements('beatmapset_id'); 109 $table->mediumInteger('user_id')->unsigned()->default(0); 110 $table->mediumInteger('thread_id')->unsigned()->default(0); 111 $table->string('artist', 80)->default(''); 112 $table->string('artist_unicode', 80)->nullable(); 113 $table->string('title', 80)->default(''); 114 $table->string('title_unicode', 80)->nullable(); 115 $table->string('creator', 80)->default(''); 116 $table->string('source', 200)->default(''); 117 $table->string('tags', 1000)->default(''); 118 $table->boolean('video')->default(0); 119 $table->boolean('storyboard')->default(0); 120 $table->boolean('epilepsy')->default(0); 121 $table->float('bpm')->default(0); 122 $table->boolean('versions_available')->unsigned()->default(1); 123 $table->boolean('approved')->default(0); 124 $table->mediumInteger('approvedby_id')->unsigned()->nullable(); 125 $table->dateTime('approved_date')->nullable(); 126 $table->dateTime('submit_date')->nullable(); 127 $table->timestamp('last_update')->useCurrent(); 128 $table->string('filename', 120)->nullable()->index('filename'); 129 $table->boolean('active')->default(1); 130 $table->float('rating')->unsigned()->default(0); 131 $table->smallInteger('offset')->default(0); 132 $table->string('displaytitle', 200)->default(''); 133 $table->smallInteger('genre_id')->unsigned()->default(1); 134 $table->smallInteger('language_id')->unsigned()->default(1); 135 $table->smallInteger('star_priority')->default(0); 136 $table->bigInteger('filesize')->default(0); 137 $table->bigInteger('filesize_novideo')->nullable(); 138 // $table->binary('body_hash', 16)->nullable(); 139 // $table->binary('header_hash', 16)->nullable(); 140 // $table->binary('osz2_hash', 16)->nullable(); 141 $table->boolean('download_disabled')->unsigned()->default(0); 142 $table->string('download_disabled_url', 100)->nullable(); 143 $table->dateTime('thread_icon_date')->nullable(); 144 $table->mediumInteger('favourite_count')->unsigned()->default(0); 145 $table->mediumInteger('play_count')->unsigned()->default(0); 146 $table->string('difficulty_names', 1024)->nullable(); 147 $table->index('user_id', 'user_id'); 148 $table->index('thread_id', 'thread_id'); 149 $table->index('genre_id', 'genre_id'); 150 $table->index(['approved', 'star_priority'], 'approved_2'); 151 $table->index(['approved', 'active', 'approved_date'], 'approved'); 152 $table->index('favourite_count', 'favourite_count'); 153 $table->index(['approved', 'active', 'last_update'], 'approved_3'); 154 }); 155 $this->addBinary('osu_beatmapsets', 'body_hash', 16, true, 'filesize_novideo'); 156 $this->addBinary('osu_beatmapsets', 'header_hash', 16, true, 'body_hash'); 157 $this->addBinary('osu_beatmapsets', 'osz2_hash', 16, true, 'header_hash'); 158 159 Schema::create('osu_user_beatmapset_ratings', function (Blueprint $table) { 160 $table->unsignedMediumInteger('user_id'); 161 $table->unsignedMediumInteger('beatmapset_id'); 162 $table->unsignedTinyInteger('rating'); 163 $table->timestamp('date')->useCurrent(); 164 165 $table->primary(['user_id', 'beatmapset_id']); 166 $table->index(['beatmapset_id', 'rating'], 'split_ratings'); 167 }); 168 $this->setRowFormat('osu_user_beatmapset_ratings', 'COMPRESSED'); 169 170 Schema::create('osu_changelog', function (Blueprint $table) { 171 $table->mediumIncrements('changelog_id'); 172 $table->mediumInteger('user_id')->unsigned(); 173 $table->char('prefix', 1)->default('*'); 174 $table->string('category', 50)->default(''); 175 $table->string('message', 8000)->default(''); 176 $table->string('checksum', 40)->default(''); 177 $table->timestamp('date')->useCurrent(); 178 $table->boolean('private')->default(0); 179 $table->boolean('major')->default(0); 180 $table->boolean('tweet')->default(0); 181 $table->string('build', 50)->nullable(); 182 $table->integer('thread_id')->unsigned()->nullable(); 183 $table->string('url', 1024)->nullable(); 184 $table->boolean('stream_id')->unsigned()->nullable()->index('stream_id'); 185 $table->unique('checksum', 'unique_checksum'); 186 $table->index('date', 'time'); 187 $table->index(['build', 'date'], 'major_release'); 188 $table->index(['category', 'changelog_id'], 'category'); 189 }); 190 191 Schema::create('osu_charts', function (Blueprint $table) { 192 $table->unsignedSmallInteger('chart_id', true); 193 $table->string('acronym', 10)->default(''); 194 $table->string('name', 50)->default(''); 195 $table->date('start_date')->nullable(); 196 $table->date('end_date')->nullable(); 197 $table->boolean('mode_specific')->default(0); 198 $table->string('type', 50)->default('monthly'); 199 $table->boolean('active')->default(1); 200 $table->date('chart_month')->nullable(); 201 $table->unique('acronym', 'acronym'); 202 $table->index('end_date', 'enddate'); 203 $table->index(['type', 'chart_month'], 'type'); 204 }); 205 206 Schema::create('osu_builds', function ($table) { 207 $table->mediumIncrements('build_id'); 208 $table->string('version', 40)->nullable(); 209 $table->timestamp('date')->useCurrent(); 210 $table->tinyInteger('allow_ranking')->default(1); 211 $table->tinyInteger('allow_bancho')->default(1); 212 $table->tinyInteger('test_build')->default(0); 213 $table->string('comments', 200)->nullable(); 214 $table->unsignedMediumInteger('users')->default(0); 215 $table->unsignedTinyInteger('stream_id')->nullable(); 216 }); 217 DB::statement('ALTER TABLE osu_builds ADD hash BINARY(16)'); 218 DB::statement('ALTER TABLE osu_builds ADD last_hash BINARY(16)'); 219 220 Schema::create('osu_countries', function (Blueprint $table) { 221 $table->char('acronym', 2)->primary(); 222 $table->string('name', 150); 223 $table->bigInteger('rankedscore'); 224 $table->bigInteger('playcount'); 225 $table->bigInteger('usercount')->default(0); 226 $table->bigInteger('pp')->default(0); 227 $table->boolean('display')->default(1); 228 $table->float('shipping_rate')->default(1); 229 $table->index('rankedscore', 'rankedscore'); 230 $table->index('playcount', 'playcount'); 231 $table->index(['display', 'name'], 'display'); 232 }); 233 234 Schema::create('osu_counts', function (Blueprint $table) { 235 $table->string('name', 200)->primary(); 236 $table->bigInteger('count')->unsigned(); 237 }); 238 239 Schema::create('osu_downloads', function (Blueprint $table) { 240 $table->unsignedMediumInteger('user_id'); 241 $table->integer('timestamp'); 242 $table->mediumInteger('beatmapset_id'); 243 $table->tinyInteger('fulfilled')->default(0); 244 $table->unsignedTinyInteger('mirror_id')->default(0); 245 246 $table->index(['user_id', 'timestamp', 'beatmapset_id'], 'user_id'); 247 }); 248 249 Schema::create('osu_events', function (Blueprint $table) { 250 $table->increments('event_id'); 251 $table->string('text', 1000); 252 $table->string('text_clean', 8000)->nullable(); 253 $table->mediumInteger('beatmap_id')->unsigned()->nullable(); 254 $table->mediumInteger('beatmapset_id')->unsigned()->nullable(); 255 $table->mediumInteger('user_id')->unsigned()->nullable(); 256 $table->timestamp('date')->useCurrent(); 257 $table->boolean('epicfactor')->unsigned()->default(0); 258 $table->boolean('private')->unsigned()->default(0); 259 // $table->primary(['event_id', 'date']); 260 $table->index(['user_id', 'event_id'], 'user_id'); 261 }); 262 DB::statement('ALTER TABLE `osu_events` DROP PRIMARY KEY, ADD PRIMARY KEY (`event_id`, `date`)'); 263 $this->comment('osu_events', 'holds events up to one month in the past'); 264 $this->setRowFormat('osu_events', 'COMPRESSED'); 265 266 Schema::create('osu_favouritemaps', function (Blueprint $table) { 267 $table->mediumInteger('user_id')->unsigned(); 268 $table->mediumInteger('beatmapset_id')->unsigned()->index('beatmapset_id'); 269 $table->timestamp('dateadded')->useCurrent(); 270 $table->primary(['user_id', 'beatmapset_id']); 271 }); 272 273 Schema::create('osu_genres', function (Blueprint $table) { 274 $table->smallIncrements('genre_id'); 275 $table->string('name', 200); 276 }); 277 278 Schema::create('osu_kudos_exchange', function (Blueprint $table) { 279 $table->mediumIncrements('exchange_id'); 280 $table->mediumInteger('giver_id')->unsigned(); 281 $table->mediumInteger('receiver_id')->unsigned(); 282 $table->mediumInteger('post_id')->unsigned(); 283 $table->enum('action', ['give', 'revoke', 'reset']); 284 $table->boolean('amount')->default(1); 285 $table->timestamp('date')->useCurrent(); 286 $table->unique(['receiver_id', 'exchange_id'], 'history_display'); 287 $table->index('giver_id', 'giver_id'); 288 $table->index(['receiver_id', 'date'], 'receiver_id'); 289 }); 290 $this->setRowFormat('osu_kudos_exchange', 'COMPRESSED'); 291 292 Schema::create('osu_languages', function (Blueprint $table) { 293 $table->integer('language_id', true); 294 $table->string('name', 50); 295 $table->boolean('display_order')->default(0)->index('order'); 296 }); 297 298 Schema::create('osu_leaders_fruits', function (Blueprint $table) { 299 $table->mediumInteger('beatmap_id')->unsigned()->primary(); 300 $table->mediumInteger('user_id')->unsigned(); 301 $table->integer('score_id')->nullable(); 302 $table->index(['user_id', 'score_id'], 'user_id'); 303 }); 304 305 Schema::create('osu_leaders_mania', function (Blueprint $table) { 306 $table->mediumInteger('beatmap_id')->unsigned()->primary(); 307 $table->mediumInteger('user_id')->unsigned(); 308 $table->integer('score_id')->nullable(); 309 $table->index(['user_id', 'score_id'], 'user_id'); 310 }); 311 312 Schema::create('osu_leaders', function (Blueprint $table) { 313 $table->mediumInteger('beatmap_id')->unsigned()->primary(); 314 $table->mediumInteger('user_id')->unsigned(); 315 $table->integer('score_id')->nullable(); 316 $table->index(['user_id', 'score_id'], 'user_id'); 317 }); 318 319 Schema::create('osu_leaders_taiko', function (Blueprint $table) { 320 $table->mediumInteger('beatmap_id')->unsigned()->primary(); 321 $table->mediumInteger('user_id')->unsigned(); 322 $table->integer('score_id')->nullable(); 323 $table->index(['user_id', 'score_id'], 'user_id'); 324 }); 325 326 Schema::create('osu_login_attempts', function (Blueprint $table) { 327 $table->string('ip', 128)->primary(); 328 $table->mediumInteger('failed_attempts')->unsigned()->default(1); 329 $table->smallInteger('total_attempts')->unsigned()->default(1); 330 $table->smallInteger('unique_ids')->unsigned()->default(1); 331 $table->text('failed_ids', 65535); 332 $table->timestamp('last_attempt')->nullable()->useCurrent()->index('last_attempt'); 333 $table->timestamp('created_date')->useCurrent(); 334 }); 335 336 Schema::create('osu_scores_fruits', function (Blueprint $table) { 337 $table->unsignedInteger('score_id'); // autoincrement is set! 338 // $table->binary('scorechecksum', 16)->index('scorechecksum'); 339 $table->mediumInteger('beatmap_id')->unsigned()->default(0); 340 $table->mediumInteger('beatmapset_id')->unsigned()->default(0)->index('beatmapset_id'); 341 $table->mediumInteger('user_id')->default(0); 342 $table->integer('score')->default(0); 343 $table->smallInteger('maxcombo')->unsigned()->default(0); 344 $table->enum('rank', ['0', 'A', 'B', 'C', 'D', 'S', 'SH', 'X', 'XH', 'F'])->default('F'); 345 $table->smallInteger('count50')->unsigned()->default(0); 346 $table->smallInteger('count100')->unsigned()->default(0); 347 $table->smallInteger('count300')->unsigned()->default(0); 348 $table->smallInteger('countmiss')->unsigned()->default(0); 349 $table->smallInteger('countgeki')->unsigned()->default(0); 350 $table->smallInteger('countkatu')->unsigned()->default(0); 351 $table->boolean('perfect')->default(0); 352 $table->smallInteger('enabled_mods')->unsigned()->default(0); 353 $table->boolean('pass')->default(0); 354 $table->timestamp('date')->useCurrent(); 355 $table->bigInteger('high_score_id')->unsigned()->nullable(); 356 $table->primary(['score_id', 'date']); 357 // $table->index(['user_id','date'], 'user_id'); 358 }); 359 // can't create sized blob directly in the migration 360 DB::statement('ALTER TABLE `osu_scores_fruits` ADD `scorechecksum` BINARY(16) NOT NULL AFTER `score_id`'); 361 DB::statement('ALTER TABLE `osu_scores_fruits` ADD KEY (`scorechecksum`)'); 362 DB::statement('ALTER TABLE `osu_scores_fruits` ADD KEY `user_id` (`user_id`, `date`)'); 363 DB::statement('ALTER TABLE `osu_scores_fruits` MODIFY COLUMN `score_id` INT UNSIGNED AUTO_INCREMENT'); 364 365 Schema::create('osu_mirrors', function (Blueprint $table) { 366 $table->tinyIncrements('mirror_id'); 367 $table->string('base_url', 255); 368 $table->bigInteger('traffic_used')->default(0); 369 $table->bigInteger('traffic_limit')->default(0); 370 $table->string('secret_key', 50)->default(''); 371 $table->integer('provider_user_id'); 372 $table->tinyInteger('enabled')->default(1); 373 $table->decimal('version', 4, 2)->nullable(); 374 $table->string('pending_purge', 6000)->nullable(true); 375 $table->tinyInteger('pending_updates')->default(1); 376 $table->string('regions', 6000)->nullable(true); 377 $table->bigInteger('disk_space_free')->nullable(); 378 }); 379 380 Schema::create('osu_replays', function (Blueprint $table) { 381 $table->unsignedInteger('score_id')->default(0)->primary(); 382 $table->unsignedInteger('play_count')->default(0); 383 $table->integer('version')->nullable(); 384 }); 385 386 Schema::create('osu_replays_fruits', function (Blueprint $table) { 387 $table->unsignedInteger('score_id')->default(0)->primary(); 388 $table->unsignedInteger('play_count')->default(0); 389 $table->integer('version')->nullable(); 390 }); 391 392 Schema::create('osu_replays_mania', function (Blueprint $table) { 393 $table->unsignedInteger('score_id')->default(0)->primary(); 394 $table->unsignedInteger('play_count')->default(0); 395 $table->integer('version')->nullable(); 396 }); 397 398 Schema::create('osu_replays_taiko', function (Blueprint $table) { 399 $table->unsignedInteger('score_id')->default(0)->primary(); 400 $table->unsignedInteger('play_count')->default(0); 401 $table->integer('version')->nullable(); 402 }); 403 404 Schema::create('osu_scores_fruits_high', function (Blueprint $table) { 405 $table->increments('score_id'); 406 $table->mediumInteger('beatmap_id')->unsigned()->default(0); 407 $table->mediumInteger('beatmapset_id')->unsigned()->default(0); 408 $table->mediumInteger('user_id')->default(0); 409 $table->integer('score')->default(0); 410 $table->smallInteger('maxcombo')->unsigned()->default(0); 411 $table->enum('rank', ['A', 'B', 'C', 'D', 'S', 'SH', 'X', 'XH']); 412 $table->smallInteger('count50')->unsigned()->default(0); 413 $table->smallInteger('count100')->unsigned()->default(0); 414 $table->smallInteger('count300')->unsigned()->default(0); 415 $table->smallInteger('countmiss')->unsigned()->default(0); 416 $table->smallInteger('countgeki')->unsigned()->default(0); 417 $table->smallInteger('countkatu')->unsigned()->default(0); 418 $table->boolean('perfect')->default(0); 419 $table->smallInteger('enabled_mods')->unsigned()->default(0); 420 $table->timestamp('date')->useCurrent(); 421 $table->float('pp')->nullable(); 422 $table->boolean('replay')->unsigned()->default(0); 423 $table->index(['beatmap_id', 'score', 'user_id'], 'beatmap_score_lookup'); 424 $table->index(['user_id', 'beatmap_id', 'rank'], 'user_beatmap_rank'); 425 }); 426 427 Schema::create('osu_scores_high', function (Blueprint $table) { 428 $table->increments('score_id'); 429 $table->mediumInteger('beatmap_id')->unsigned()->default(0); 430 $table->mediumInteger('beatmapset_id')->unsigned()->default(0); 431 $table->mediumInteger('user_id')->default(0); 432 $table->integer('score')->default(0); 433 $table->smallInteger('maxcombo')->unsigned()->default(0); 434 $table->enum('rank', ['A', 'B', 'C', 'D', 'S', 'SH', 'X', 'XH']); 435 $table->smallInteger('count50')->unsigned()->default(0); 436 $table->smallInteger('count100')->unsigned()->default(0); 437 $table->smallInteger('count300')->unsigned()->default(0); 438 $table->smallInteger('countmiss')->unsigned()->default(0); 439 $table->smallInteger('countgeki')->unsigned()->default(0); 440 $table->smallInteger('countkatu')->unsigned()->default(0); 441 $table->boolean('perfect')->default(0); 442 $table->smallInteger('enabled_mods')->unsigned()->default(0); 443 $table->timestamp('date')->useCurrent(); 444 $table->float('pp')->nullable(); 445 $table->boolean('replay')->unsigned()->default(0); 446 $table->index(['beatmap_id', 'score', 'user_id'], 'beatmap_score_lookup'); 447 $table->index(['user_id', 'beatmap_id', 'rank'], 'user_beatmap_rank'); 448 }); 449 450 Schema::create('osu_scores_mania_high', function (Blueprint $table) { 451 $table->increments('score_id'); 452 $table->mediumInteger('beatmap_id')->unsigned()->default(0); 453 $table->mediumInteger('beatmapset_id')->unsigned()->default(0); 454 $table->mediumInteger('user_id')->default(0); 455 $table->integer('score')->default(0); 456 $table->smallInteger('maxcombo')->unsigned()->default(0); 457 $table->enum('rank', ['A', 'B', 'C', 'D', 'S', 'SH', 'X', 'XH']); 458 $table->smallInteger('count50')->unsigned()->default(0); 459 $table->smallInteger('count100')->unsigned()->default(0); 460 $table->smallInteger('count300')->unsigned()->default(0); 461 $table->smallInteger('countmiss')->unsigned()->default(0); 462 $table->smallInteger('countgeki')->unsigned()->default(0); 463 $table->smallInteger('countkatu')->unsigned()->default(0); 464 $table->boolean('perfect')->default(0); 465 $table->integer('enabled_mods')->unsigned()->default(0); 466 $table->timestamp('date')->useCurrent(); 467 $table->float('pp')->nullable(); 468 $table->boolean('replay')->unsigned()->default(0); 469 $table->index(['beatmap_id', 'score', 'user_id'], 'beatmap_score_lookup'); 470 $table->index(['user_id', 'beatmap_id', 'rank'], 'user_beatmap_rank'); 471 }); 472 473 Schema::create('osu_scores_mania', function (Blueprint $table) { 474 $table->integer('score_id', false, true); 475 // $table->binary('scorechecksum', 16)->index('scorechecksum'); 476 $table->mediumInteger('beatmap_id')->unsigned()->default(0); 477 $table->mediumInteger('beatmapset_id')->unsigned()->default(0)->index('beatmapset_id'); 478 $table->mediumInteger('user_id')->default(0); 479 $table->integer('score')->default(0); 480 $table->smallInteger('maxcombo')->unsigned()->default(0); 481 $table->enum('rank', ['0', 'A', 'B', 'C', 'D', 'S', 'SH', 'X', 'XH', 'F'])->default('F'); 482 $table->smallInteger('count50')->unsigned()->default(0); 483 $table->smallInteger('count100')->unsigned()->default(0); 484 $table->smallInteger('count300')->unsigned()->default(0); 485 $table->smallInteger('countmiss')->unsigned()->default(0); 486 $table->smallInteger('countgeki')->unsigned()->default(0); 487 $table->smallInteger('countkatu')->unsigned()->default(0); 488 $table->boolean('perfect')->default(0); 489 $table->integer('enabled_mods')->unsigned()->default(0); 490 $table->boolean('pass')->default(0); 491 $table->timestamp('date')->useCurrent(); 492 $table->bigInteger('high_score_id')->unsigned()->nullable(); 493 $table->primary(['score_id', 'date']); 494 // $table->index(['user_id','date'], 'user_id'); 495 }); 496 DB::statement('ALTER TABLE `osu_scores_mania` ADD `scorechecksum` BINARY(16) NOT NULL AFTER `score_id`'); 497 DB::statement('ALTER TABLE `osu_scores_mania` ADD KEY (`scorechecksum`)'); 498 DB::statement('ALTER TABLE `osu_scores_mania` ADD KEY `user_id` (`user_id`, `date`)'); 499 DB::statement('ALTER TABLE `osu_scores_mania` MODIFY COLUMN `score_id` INT UNSIGNED AUTO_INCREMENT'); 500 501 Schema::create('osu_scores', function (Blueprint $table) { 502 $table->unsignedInteger('score_id'); 503 // $table->binary('scorechecksum', 16)->index('scorechecksum'); 504 $table->mediumInteger('beatmap_id')->unsigned()->default(0); 505 $table->mediumInteger('beatmapset_id')->unsigned()->default(0); 506 $table->mediumInteger('user_id')->default(0); 507 $table->integer('score')->default(0); 508 $table->smallInteger('maxcombo')->unsigned()->default(0); 509 $table->enum('rank', ['0', 'A', 'B', 'C', 'D', 'S', 'SH', 'X', 'XH', 'F'])->default('F'); 510 $table->smallInteger('count50')->unsigned()->default(0); 511 $table->smallInteger('count100')->unsigned()->default(0); 512 $table->smallInteger('count300')->unsigned()->default(0); 513 $table->smallInteger('countmiss')->unsigned()->default(0); 514 $table->smallInteger('countgeki')->unsigned()->default(0); 515 $table->smallInteger('countkatu')->unsigned()->default(0); 516 $table->boolean('perfect')->default(0); 517 $table->smallInteger('enabled_mods')->unsigned()->default(0); 518 $table->boolean('pass')->default(0); 519 $table->timestamp('date')->useCurrent(); 520 $table->bigInteger('high_score_id')->unsigned()->nullable(); 521 $table->primary(['score_id', 'date']); 522 // $table->index(['user_id','date'], 'user_id'); 523 }); 524 DB::statement('ALTER TABLE `osu_scores` ADD `scorechecksum` BINARY(16) NOT NULL AFTER `score_id`'); 525 DB::statement('ALTER TABLE `osu_scores` ADD KEY (`scorechecksum`)'); 526 DB::statement('ALTER TABLE `osu_scores` MODIFY COLUMN `score_id` INT UNSIGNED AUTO_INCREMENT'); 527 DB::statement('ALTER TABLE `osu_scores` ADD KEY `user_id` (`user_id`, `date`)'); 528 DB::statement('ALTER TABLE `osu_scores` ADD KEY (`beatmapset_id`)'); 529 530 Schema::create('osu_scores_taiko_high', function (Blueprint $table) { 531 $table->increments('score_id'); 532 $table->mediumInteger('beatmap_id')->unsigned()->default(0); 533 $table->mediumInteger('beatmapset_id')->unsigned()->default(0); 534 $table->mediumInteger('user_id')->default(0); 535 $table->integer('score')->default(0); 536 $table->smallInteger('maxcombo')->unsigned()->default(0); 537 $table->enum('rank', ['A', 'B', 'C', 'D', 'S', 'SH', 'X', 'XH']); 538 $table->smallInteger('count50')->unsigned()->default(0); 539 $table->smallInteger('count100')->unsigned()->default(0); 540 $table->smallInteger('count300')->unsigned()->default(0); 541 $table->smallInteger('countmiss')->unsigned()->default(0); 542 $table->smallInteger('countgeki')->unsigned()->default(0); 543 $table->smallInteger('countkatu')->unsigned()->default(0); 544 $table->boolean('perfect')->default(0); 545 $table->smallInteger('enabled_mods')->unsigned()->default(0); 546 $table->timestamp('date')->useCurrent(); 547 $table->float('pp')->nullable(); 548 $table->boolean('replay')->unsigned()->default(0); 549 $table->index(['beatmap_id', 'score', 'user_id'], 'beatmap_score_lookup'); 550 $table->index(['user_id', 'beatmap_id', 'rank'], 'user_beatmap_rank'); 551 }); 552 553 Schema::create('osu_scores_taiko', function (Blueprint $table) { 554 $table->integer('score_id', false, true); 555 // $table->binary('scorechecksum', 16)->index('scorechecksum'); 556 $table->mediumInteger('beatmap_id')->unsigned()->default(0); 557 $table->mediumInteger('beatmapset_id')->unsigned()->default(0)->index('beatmapset_id'); 558 $table->mediumInteger('user_id')->default(0); 559 $table->integer('score')->default(0); 560 $table->smallInteger('maxcombo')->unsigned()->default(0); 561 $table->enum('rank', ['0', 'A', 'B', 'C', 'D', 'S', 'SH', 'X', 'XH', 'F'])->default('F'); 562 $table->smallInteger('count50')->unsigned()->default(0); 563 $table->smallInteger('count100')->unsigned()->default(0); 564 $table->smallInteger('count300')->unsigned()->default(0); 565 $table->smallInteger('countmiss')->unsigned()->default(0); 566 $table->smallInteger('countgeki')->unsigned()->default(0); 567 $table->smallInteger('countkatu')->unsigned()->default(0); 568 $table->boolean('perfect')->default(0); 569 $table->smallInteger('enabled_mods')->unsigned()->default(0); 570 $table->boolean('pass')->default(0); 571 $table->timestamp('date')->useCurrent(); 572 $table->bigInteger('high_score_id')->unsigned()->nullable(); 573 $table->primary(['score_id', 'date']); 574 // $table->index(['user_id','date'], 'user_id'); 575 }); 576 DB::statement('ALTER TABLE `osu_scores_taiko` ADD `scorechecksum` BINARY(16) NOT NULL AFTER `score_id`'); 577 DB::statement('ALTER TABLE `osu_scores_taiko` ADD KEY (`scorechecksum`)'); 578 DB::statement('ALTER TABLE `osu_scores_taiko` ADD KEY `user_id` (`user_id`, `date`)'); 579 DB::statement('ALTER TABLE `osu_scores_taiko` MODIFY COLUMN `score_id` INT UNSIGNED AUTO_INCREMENT'); 580 581 Schema::create('osu_user_achievements', function (Blueprint $table) { 582 $table->mediumInteger('user_id'); 583 $table->mediumInteger('achievement_id'); 584 $table->timestamp('date')->useCurrent(); 585 $table->mediumInteger('beatmap_id')->nullable(); 586 $table->primary(['user_id', 'achievement_id']); 587 $table->index(['user_id', 'date'], 'user_id'); 588 }); 589 590 Schema::create('osu_user_banhistory', function (Blueprint $table) { 591 $table->increments('ban_id'); 592 $table->integer('user_id')->unsigned()->nullable(); 593 $table->string('reason', 8000)->nullable()->default('Blanket Cheating Action'); 594 $table->string('supporting_url')->nullable(); 595 $table->boolean('ban_status')->nullable()->default(1); 596 $table->integer('period')->unsigned()->default(0); 597 $table->timestamp('timestamp')->nullable()->useCurrent(); 598 $table->integer('banner_id')->unsigned()->nullable(); 599 $table->index(['user_id', 'timestamp'], 'user_id_2'); 600 }); 601 $this->setRowFormat('osu_user_banhistory', 'COMPRESSED'); 602 603 Schema::create('osu_user_beatmap_playcount', function (Blueprint $table) { 604 $table->mediumInteger('user_id')->unsigned(); 605 $table->mediumInteger('beatmap_id')->unsigned(); 606 $table->smallInteger('playcount')->unsigned(); 607 $table->primary(['user_id', 'beatmap_id']); 608 }); 609 $this->setRowFormat('osu_user_beatmap_playcount', 'COMPRESSED'); 610 611 Schema::create('osu_user_donations', function (Blueprint $table) { 612 $table->mediumInteger('user_id')->unsigned(); 613 $table->string('transaction_id', 250); 614 $table->mediumInteger('target_user_id')->unsigned()->default(0); 615 $table->boolean('length'); 616 $table->smallInteger('amount'); 617 $table->timestamp('timestamp')->useCurrent(); 618 $table->boolean('cancel')->default(0); 619 $table->primary(['user_id', 'transaction_id']); 620 $table->index('timestamp', 'timestamp'); 621 $table->index('transaction_id', 'transaction_id'); 622 }); 623 624 Schema::create('osu_username_change_history', function (Blueprint $table) { 625 $table->increments('change_id'); 626 $table->integer('user_id')->unsigned()->index('user_id'); // medium??? 627 $table->string('username', 30); 628 $table->enum('type', ['support', 'paid', 'admin', 'revert', 'inactive']); 629 $table->timestamp('timestamp')->nullable()->useCurrent(); 630 $table->string('username_last', 30)->nullable()->index('username_last'); 631 }); 632 $this->comment('osu_username_change_history', 'Stores historical changes to user\'\'s usernames over time.'); 633 634 Schema::create('osu_user_month_playcount', function (Blueprint $table) { 635 $table->unsignedMediumInteger('user_id'); 636 $table->char('year_month', 4); 637 $table->unsignedSmallInteger('playcount'); 638 639 $table->primary(['user_id', 'year_month']); 640 }); 641 $this->setRowFormat('osu_user_month_playcount', 'COMPRESSED'); 642 643 Schema::create('osu_user_performance_rank', function (Blueprint $table) { 644 $table->integer('user_id')->unsigned(); 645 $table->boolean('mode'); 646 $table->integer('r0')->default(0); 647 $table->integer('r1')->default(0); 648 $table->integer('r2')->default(0); 649 $table->integer('r3')->default(0); 650 $table->integer('r4')->default(0); 651 $table->integer('r5')->default(0); 652 $table->integer('r6')->default(0); 653 $table->integer('r7')->default(0); 654 $table->integer('r8')->default(0); 655 $table->integer('r9')->default(0); 656 $table->integer('r10')->default(0); 657 $table->integer('r11')->default(0); 658 $table->integer('r12')->default(0); 659 $table->integer('r13')->default(0); 660 $table->integer('r14')->default(0); 661 $table->integer('r15')->default(0); 662 $table->integer('r16')->default(0); 663 $table->integer('r17')->default(0); 664 $table->integer('r18')->default(0); 665 $table->integer('r19')->default(0); 666 $table->integer('r20')->default(0); 667 $table->integer('r21')->default(0); 668 $table->integer('r22')->default(0); 669 $table->integer('r23')->default(0); 670 $table->integer('r24')->default(0); 671 $table->integer('r25')->default(0); 672 $table->integer('r26')->default(0); 673 $table->integer('r27')->default(0); 674 $table->integer('r28')->default(0); 675 $table->integer('r29')->default(0); 676 $table->integer('r30')->default(0); 677 $table->integer('r31')->default(0); 678 $table->integer('r32')->default(0); 679 $table->integer('r33')->default(0); 680 $table->integer('r34')->default(0); 681 $table->integer('r35')->default(0); 682 $table->integer('r36')->default(0); 683 $table->integer('r37')->default(0); 684 $table->integer('r38')->default(0); 685 $table->integer('r39')->default(0); 686 $table->integer('r40')->default(0); 687 $table->integer('r41')->default(0); 688 $table->integer('r42')->default(0); 689 $table->integer('r43')->default(0); 690 $table->integer('r44')->default(0); 691 $table->integer('r45')->default(0); 692 $table->integer('r46')->default(0); 693 $table->integer('r47')->default(0); 694 $table->integer('r48')->default(0); 695 $table->integer('r49')->default(0); 696 $table->integer('r50')->default(0); 697 $table->integer('r51')->default(0); 698 $table->integer('r52')->default(0); 699 $table->integer('r53')->default(0); 700 $table->integer('r54')->default(0); 701 $table->integer('r55')->default(0); 702 $table->integer('r56')->default(0); 703 $table->integer('r57')->default(0); 704 $table->integer('r58')->default(0); 705 $table->integer('r59')->default(0); 706 $table->integer('r60')->default(0); 707 $table->integer('r61')->default(0); 708 $table->integer('r62')->default(0); 709 $table->integer('r63')->default(0); 710 $table->integer('r64')->default(0); 711 $table->integer('r65')->default(0); 712 $table->integer('r66')->default(0); 713 $table->integer('r67')->default(0); 714 $table->integer('r68')->default(0); 715 $table->integer('r69')->default(0); 716 $table->integer('r70')->default(0); 717 $table->integer('r71')->default(0); 718 $table->integer('r72')->default(0); 719 $table->integer('r73')->default(0); 720 $table->integer('r74')->default(0); 721 $table->integer('r75')->default(0); 722 $table->integer('r76')->default(0); 723 $table->integer('r77')->default(0); 724 $table->integer('r78')->default(0); 725 $table->integer('r79')->default(0); 726 $table->integer('r80')->default(0); 727 $table->integer('r81')->default(0); 728 $table->integer('r82')->default(0); 729 $table->integer('r83')->default(0); 730 $table->integer('r84')->default(0); 731 $table->integer('r85')->default(0); 732 $table->integer('r86')->default(0); 733 $table->integer('r87')->default(0); 734 $table->integer('r88')->default(0); 735 $table->integer('r89')->default(0); 736 $table->primary(['user_id', 'mode']); 737 }); 738 $partitions = 'PARTITION p0 VALUES LESS THAN (1),'; 739 $partitions .= 'PARTITION p1 VALUES LESS THAN (2),'; 740 $partitions .= 'PARTITION p2 VALUES LESS THAN (3),'; 741 $partitions .= 'PARTITION p3 VALUES LESS THAN (4)'; 742 DB::statement("ALTER TABLE `osu_user_performance_rank` PARTITION BY RANGE (mode) ({$partitions});"); 743 744 Schema::create('osu_user_reports', function (Blueprint $table) { 745 $table->increments('report_id'); 746 $table->integer('user_id'); 747 $table->unsignedInteger('score_id')->default(0); 748 $table->tinyInteger('mode')->default(0); 749 $table->enum('reason', ['Insults', 'Spam', 'Cheating', 'UnwantedContent', 'Nonsense', 'Other'])->default('Cheating'); 750 $table->integer('reporter_id'); 751 $table->text('comments'); 752 $table->timestamp('timestamp')->useCurrent(); 753 754 $table->unique(['reporter_id', 'user_id', 'mode', 'score_id'], 'unique-new'); 755 $table->index('timestamp', 'timestamp'); 756 $table->index('user_id', 'user_lookup'); 757 }); 758 759 760 Schema::create('osu_user_replayswatched', function (Blueprint $table) { 761 $table->unsignedMediumInteger('user_id'); 762 $table->char('year_month', 4); 763 $table->unsignedMediumInteger('count'); 764 765 $table->primary(['user_id', 'year_month']); 766 }); 767 $this->setRowFormat('osu_user_replayswatched', 'COMPRESSED'); 768 769 Schema::create('osu_user_security', function (Blueprint $table) { 770 $table->unsignedMediumInteger('user_id'); 771 }); 772 $this->addBinary('osu_user_security', 'osu_md5', 16, true); 773 $this->addBinary('osu_user_security', 'unique_md5', 16, true); 774 $this->addBinary('osu_user_security', 'disk_md5', 16, true); 775 $this->addBinary('osu_user_security', 'mac_md5', 16, true); 776 Schema::table('osu_user_security', function (Blueprint $table) { 777 $table->timestamp('timestamp')->useCurrent(); 778 $table->boolean('verified')->default(false); 779 780 $table->primary(['user_id', 'osu_md5', 'unique_md5']); 781 $table->index('disk_md5', 'disk_md5'); 782 $table->index('unique_md5', 'unique_md5'); 783 }); 784 785 Schema::create('osu_user_stats_fruits', function (Blueprint $table) { 786 $table->mediumInteger('user_id')->primary(); 787 $table->integer('count300')->default(0); 788 $table->integer('count100')->default(0); 789 $table->integer('count50')->default(0); 790 $table->integer('countMiss')->default(0); 791 $table->bigInteger('accuracy_total')->unsigned(); 792 $table->bigInteger('accuracy_count')->unsigned(); 793 $table->float('accuracy'); 794 $table->mediumInteger('playcount'); 795 $table->bigInteger('total_seconds_played')->default(0); 796 $table->bigInteger('ranked_score'); 797 $table->bigInteger('total_score'); 798 $table->mediumInteger('x_rank_count'); 799 $table->mediumInteger('s_rank_count'); 800 $table->mediumInteger('a_rank_count'); 801 $table->mediumInteger('rank'); 802 $table->float('level')->unsigned(); 803 $table->mediumInteger('replay_popularity')->unsigned()->default(0); 804 $table->mediumInteger('fail_count')->unsigned()->default(0); 805 $table->mediumInteger('exit_count')->unsigned()->default(0); 806 $table->smallInteger('max_combo')->unsigned()->default(0); 807 $table->char('country_acronym', 2)->default(''); 808 $table->float('rank_score')->unsigned(); 809 $table->integer('rank_score_index')->unsigned(); 810 $table->float('accuracy_new')->unsigned(); 811 // $table->timestamp('last_update')->useCurrent(); 812 $table->timestamp('last_played')->useCurrent(); 813 $table->index('ranked_score', 'ranked_score'); 814 $table->index('playcount', 'playcount'); 815 $table->index('rank_score', 'rank_score'); 816 $table->index(['country_acronym', 'rank_score'], 'country_acronym'); 817 }); 818 DB::statement('ALTER TABLE `osu_user_stats_fruits` ADD COLUMN `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER `accuracy_new`'); 819 820 Schema::create('osu_user_stats_mania', function (Blueprint $table) { 821 $table->mediumInteger('user_id')->primary(); 822 $table->integer('count300')->default(0); 823 $table->integer('count100')->default(0); 824 $table->integer('count50')->default(0); 825 $table->integer('countMiss')->default(0); 826 $table->bigInteger('accuracy_total')->unsigned(); 827 $table->bigInteger('accuracy_count')->unsigned(); 828 $table->float('accuracy'); 829 $table->mediumInteger('playcount'); 830 $table->bigInteger('total_seconds_played')->default(0); 831 $table->bigInteger('ranked_score'); 832 $table->bigInteger('total_score'); 833 $table->mediumInteger('x_rank_count'); 834 $table->mediumInteger('s_rank_count'); 835 $table->mediumInteger('a_rank_count'); 836 $table->mediumInteger('rank'); 837 $table->float('level')->unsigned(); 838 $table->mediumInteger('replay_popularity')->unsigned()->default(0); 839 $table->mediumInteger('fail_count')->unsigned()->default(0); 840 $table->mediumInteger('exit_count')->unsigned()->default(0); 841 $table->smallInteger('max_combo')->unsigned()->default(0); 842 $table->char('country_acronym', 2)->default(''); 843 $table->float('rank_score')->unsigned(); 844 $table->integer('rank_score_index')->unsigned(); 845 $table->float('accuracy_new')->unsigned(); 846 // $table->timestamp('last_update')->useCurrent(); 847 $table->timestamp('last_played')->useCurrent(); 848 $table->index('ranked_score', 'ranked_score'); 849 $table->index('rank_score', 'rank_score'); 850 $table->index(['country_acronym', 'rank_score'], 'country_acronym_2'); 851 $table->index('playcount', 'playcount'); 852 }); 853 DB::statement('ALTER TABLE `osu_user_stats_mania` ADD COLUMN `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER `accuracy_new`'); 854 855 Schema::create('osu_user_stats', function (Blueprint $table) { 856 $table->mediumInteger('user_id')->primary(); 857 $table->integer('count300')->default(0); 858 $table->integer('count100')->default(0); 859 $table->integer('count50')->default(0); 860 $table->integer('countMiss')->default(0); 861 $table->bigInteger('accuracy_total')->unsigned(); 862 $table->bigInteger('accuracy_count')->unsigned(); 863 $table->float('accuracy'); 864 $table->mediumInteger('playcount'); 865 $table->bigInteger('total_seconds_played')->default(0); 866 $table->bigInteger('ranked_score'); 867 $table->bigInteger('total_score'); 868 $table->mediumInteger('x_rank_count'); 869 $table->mediumInteger('s_rank_count'); 870 $table->mediumInteger('a_rank_count'); 871 $table->mediumInteger('rank'); 872 $table->float('level')->unsigned(); 873 $table->mediumInteger('replay_popularity')->unsigned()->default(0); 874 $table->mediumInteger('fail_count')->unsigned()->default(0); 875 $table->mediumInteger('exit_count')->unsigned()->default(0); 876 $table->smallInteger('max_combo')->unsigned()->default(0); 877 $table->char('country_acronym', 2)->default(''); 878 $table->float('rank_score')->unsigned(); 879 $table->integer('rank_score_index')->unsigned(); 880 $table->float('accuracy_new')->unsigned(); 881 // $table->timestamp('last_update')->useCurrent(); 882 $table->timestamp('last_played')->useCurrent(); 883 $table->index('ranked_score', 'ranked_score'); 884 $table->index('rank_score', 'rank_score'); 885 $table->index(['country_acronym', 'rank_score'], 'country_acronym_2'); 886 $table->index('playcount', 'playcount'); 887 }); 888 DB::statement('ALTER TABLE `osu_user_stats` ADD COLUMN `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER `accuracy_new`'); 889 890 Schema::create('osu_user_stats_taiko', function (Blueprint $table) { 891 $table->mediumInteger('user_id')->primary(); 892 $table->integer('count300')->default(0); 893 $table->integer('count100')->default(0); 894 $table->integer('count50')->default(0); 895 $table->integer('countMiss')->default(0); 896 $table->bigInteger('accuracy_total')->unsigned(); 897 $table->bigInteger('accuracy_count')->unsigned(); 898 $table->float('accuracy'); 899 $table->mediumInteger('playcount'); 900 $table->bigInteger('total_seconds_played')->default(0); 901 $table->bigInteger('ranked_score'); 902 $table->bigInteger('total_score'); 903 $table->mediumInteger('x_rank_count'); 904 $table->mediumInteger('s_rank_count'); 905 $table->mediumInteger('a_rank_count'); 906 $table->mediumInteger('rank'); 907 $table->float('level')->unsigned(); 908 $table->mediumInteger('replay_popularity')->unsigned()->default(0); 909 $table->mediumInteger('fail_count')->unsigned()->default(0); 910 $table->mediumInteger('exit_count')->unsigned()->default(0); 911 $table->smallInteger('max_combo')->unsigned()->default(0); 912 $table->char('country_acronym', 2)->default(''); 913 $table->float('rank_score')->unsigned(); 914 $table->integer('rank_score_index')->unsigned(); 915 $table->float('accuracy_new')->unsigned(); 916 // $table->timestamp('last_update')->useCurrent(); 917 $table->timestamp('last_played')->useCurrent(); 918 $table->index('ranked_score', 'ranked_score'); 919 $table->index('playcount', 'playcount'); 920 $table->index('rank_score', 'rank_score'); 921 $table->index(['country_acronym', 'rank_score'], 'country_acronym'); 922 }); 923 DB::statement('ALTER TABLE `osu_user_stats_taiko` ADD COLUMN `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER `accuracy_new`'); 924 925 Schema::create('phpbb_acl_groups', function (Blueprint $table) { 926 $table->mediumInteger('group_id')->unsigned()->default(0)->index('group_id'); 927 $table->mediumInteger('forum_id')->unsigned()->default(0); 928 $table->mediumInteger('auth_option_id')->unsigned()->default(0)->index('auth_opt_id'); 929 $table->mediumInteger('auth_role_id')->unsigned()->default(0)->index('auth_role_id'); 930 $table->boolean('auth_setting')->default(0); 931 }); 932 933 Schema::create('phpbb_acl_options', function (Blueprint $table) { 934 $table->mediumIncrements('auth_option_id', true); 935 936 $table->string('auth_option', 50)->default(''); 937 $table->unsignedTinyInteger('is_global')->default(0); 938 $table->unsignedTinyInteger('is_local')->default(0); 939 $table->unsignedTinyInteger('founder_only')->default(0); 940 941 $table->index('auth_option', 'auth_option'); 942 }); 943 944 Schema::create('phpbb_acl_roles_data', function (Blueprint $table) { 945 $table->unsignedMediumInteger('role_id')->default('0'); 946 $table->unsignedMediumInteger('auth_option_id')->default(0); 947 $table->tinyInteger('auth_setting')->default(0); 948 949 $table->primary(['role_id', 'auth_option_id']); 950 951 $table->index('auth_option_id', 'ath_op_id'); 952 }); 953 954 Schema::create('phpbb_disallow', function (Blueprint $table) { 955 $table->mediumIncrements('disallow_id'); 956 $table->string('disallow_username')->default(''); 957 }); 958 959 Schema::create('phpbb_forums', function (Blueprint $table) { 960 $table->mediumIncrements('forum_id'); 961 $table->mediumInteger('parent_id')->unsigned()->default(0); 962 $table->mediumInteger('left_id')->unsigned()->default(0); 963 $table->mediumInteger('right_id')->unsigned()->default(0); 964 $table->mediumText('forum_parents'); 965 $table->string('forum_name')->default(''); 966 $table->text('forum_desc', 65535); 967 $table->string('forum_desc_bitfield')->default(''); 968 $table->integer('forum_desc_options')->unsigned()->default(7); 969 $table->string('forum_desc_uid', 5)->default(''); 970 $table->string('forum_link')->default(''); 971 $table->string('forum_password', 40)->default(''); 972 $table->smallInteger('forum_style')->unsigned()->default(0); 973 $table->string('forum_image')->default(''); 974 $table->text('forum_rules', 65535); 975 $table->string('forum_rules_link')->default(''); 976 $table->string('forum_rules_bitfield')->default(''); 977 $table->integer('forum_rules_options')->unsigned()->default(7); 978 $table->string('forum_rules_uid', 5)->default(''); 979 $table->boolean('forum_topics_per_page')->default(0); 980 $table->boolean('forum_type')->default(0); 981 $table->boolean('forum_status')->default(0); 982 $table->mediumInteger('forum_posts')->unsigned()->default(0); 983 $table->mediumInteger('forum_topics')->unsigned()->default(0); 984 $table->mediumInteger('forum_topics_real')->unsigned()->default(0); 985 $table->mediumInteger('forum_last_post_id')->unsigned()->default(0)->index('forum_lastpost_id'); 986 $table->mediumInteger('forum_last_poster_id')->unsigned()->default(0); 987 $table->string('forum_last_post_subject', 100)->default(''); 988 $table->integer('forum_last_post_time')->unsigned()->default(0); 989 $table->string('forum_last_poster_name')->default(''); 990 $table->string('forum_last_poster_colour', 6)->default(''); 991 $table->boolean('forum_flags')->default(32); 992 $table->boolean('display_on_index')->unsigned()->default(1); 993 $table->boolean('enable_indexing')->unsigned()->default(1); 994 $table->boolean('enable_icons')->unsigned()->default(1); 995 $table->boolean('enable_prune')->unsigned()->default(0); 996 $table->boolean('enable_sigs')->unsigned()->default(1); 997 $table->integer('prune_next')->unsigned()->default(0); 998 $table->mediumInteger('prune_days')->unsigned()->default(0); 999 $table->mediumInteger('prune_viewed')->unsigned()->default(0); 1000 $table->mediumInteger('prune_freq')->unsigned()->default(0); 1001 $table->index(['left_id', 'right_id'], 'left_right_id'); 1002 }); 1003 1004 Schema::create('phpbb_forums_track', function (Blueprint $table) { 1005 $table->mediumInteger('user_id')->unsigned()->default(0); 1006 $table->mediumInteger('forum_id')->unsigned()->default(0); 1007 $table->integer('mark_time')->unsigned()->default(0); 1008 $table->primary(['user_id', 'forum_id']); 1009 }); 1010 1011 Schema::create('phpbb_posts', function (Blueprint $table) { 1012 $table->mediumIncrements('post_id'); 1013 $table->mediumInteger('topic_id')->unsigned()->default(0); 1014 $table->mediumInteger('forum_id')->unsigned()->default(0); 1015 $table->mediumInteger('poster_id')->unsigned()->default(0); 1016 $table->mediumInteger('icon_id')->unsigned()->default(0); 1017 $table->string('poster_ip', 40)->default(''); 1018 $table->integer('post_time')->unsigned()->default(0); 1019 $table->boolean('post_approved')->unsigned()->default(1); 1020 $table->boolean('post_reported')->unsigned()->default(0); 1021 $table->boolean('enable_bbcode')->unsigned()->default(1); 1022 $table->boolean('enable_smilies')->unsigned()->default(1); 1023 $table->boolean('enable_magic_url')->unsigned()->default(1); 1024 $table->boolean('enable_sig')->unsigned()->default(1); 1025 $table->string('post_username')->default(''); 1026 $table->string('post_subject', 100)->default(''); 1027 $table->mediumText('post_text'); 1028 $table->boolean('post_attachment')->unsigned()->default(0); 1029 $table->string('bbcode_bitfield')->default(''); 1030 $table->string('bbcode_uid', 5)->default(''); 1031 $table->boolean('post_postcount')->unsigned()->default(1); 1032 $table->integer('post_edit_time')->unsigned()->default(0); 1033 $table->string('post_edit_reason')->default(''); 1034 $table->mediumInteger('post_edit_user')->unsigned()->default(0); 1035 $table->smallInteger('post_edit_count')->unsigned()->default(0); 1036 $table->boolean('post_edit_locked')->unsigned()->default(0); 1037 $table->boolean('osu_kudosobtained')->default(0); 1038 $table->index('forum_id', 'forum_id'); 1039 $table->index('topic_id', 'topic_id'); 1040 $table->index('poster_id', 'poster_id'); 1041 $table->index(['topic_id', 'post_time'], 'tid_post_time'); 1042 }); 1043 1044 Schema::create('phpbb_ranks', function (Blueprint $table) { 1045 $table->mediumIncrements('rank_id'); 1046 $table->string('rank_title')->default(''); 1047 $table->mediumInteger('rank_min')->unsigned()->default(0); 1048 $table->boolean('rank_special')->unsigned()->default(0); 1049 $table->string('rank_image')->default(''); 1050 }); 1051 1052 Schema::create('phpbb_smilies', function (Blueprint $table) { 1053 $table->mediumIncrements('smiley_id'); 1054 $table->string('code', 50)->default(''); 1055 $table->string('emotion', 50)->default(''); 1056 $table->string('smiley_url', 50)->default(''); 1057 $table->smallInteger('smiley_width')->unsigned()->default(0); 1058 $table->smallInteger('smiley_height')->unsigned()->default(0); 1059 $table->mediumInteger('smiley_order')->unsigned()->default(0); 1060 $table->boolean('display_on_posting')->unsigned()->default(1)->index('display_on_post'); 1061 }); 1062 1063 Schema::create('phpbb_topics', function (Blueprint $table) { 1064 $table->mediumIncrements('topic_id'); 1065 $table->mediumInteger('forum_id')->unsigned()->default(0); 1066 $table->mediumInteger('icon_id')->unsigned()->default(0); 1067 $table->boolean('topic_attachment')->unsigned()->default(0); 1068 $table->boolean('topic_approved')->unsigned()->default(1); 1069 $table->boolean('topic_reported')->unsigned()->default(0); 1070 $table->string('topic_title', 100)->default(''); 1071 $table->mediumInteger('topic_poster')->unsigned()->default(0); 1072 $table->integer('topic_time')->unsigned()->default(0); 1073 $table->integer('topic_time_limit')->unsigned()->default(0); 1074 $table->mediumInteger('topic_views')->unsigned()->default(0); 1075 $table->mediumInteger('topic_replies')->unsigned()->default(0); 1076 $table->mediumInteger('topic_replies_real')->unsigned()->default(0); 1077 $table->boolean('topic_status')->default(0); 1078 $table->boolean('topic_type')->default(0); 1079 $table->mediumInteger('topic_first_post_id')->unsigned()->default(0); 1080 $table->string('topic_first_poster_name')->default(''); 1081 $table->string('topic_first_poster_colour', 6)->default(''); 1082 $table->mediumInteger('topic_last_post_id')->unsigned()->default(0); 1083 $table->mediumInteger('topic_last_poster_id')->unsigned()->default(0); 1084 $table->string('topic_last_poster_name')->default(''); 1085 $table->string('topic_last_poster_colour', 6)->default(''); 1086 $table->string('topic_last_post_subject', 100)->default(''); 1087 $table->integer('topic_last_post_time')->unsigned()->default(0); 1088 $table->integer('topic_last_view_time')->unsigned()->default(0); 1089 $table->mediumInteger('topic_moved_id')->unsigned()->default(0); 1090 $table->boolean('topic_bumped')->unsigned()->default(0); 1091 $table->mediumInteger('topic_bumper')->unsigned()->default(0); 1092 $table->string('poll_title')->default(''); 1093 $table->integer('poll_start')->unsigned()->default(0); 1094 $table->integer('poll_length')->unsigned()->default(0); 1095 $table->boolean('poll_max_options')->default(1); 1096 $table->integer('poll_last_vote')->unsigned()->default(0); 1097 $table->boolean('poll_vote_change')->unsigned()->default(0); 1098 $table->smallInteger('osu_starpriority')->default(0); 1099 $table->enum('osu_lastreplytype', ['none', 'creator', 'bat'])->default('none'); 1100 $table->index('topic_last_post_time', 'last_post_time'); 1101 $table->index(['forum_id', 'topic_approved', 'topic_last_post_id'], 'forum_appr_last'); 1102 $table->index(['forum_id', 'topic_last_post_time', 'topic_moved_id'], 'fid_time_moved'); 1103 $table->index(['topic_id', 'forum_id', 'icon_id'], 'tid_fid_iconid'); 1104 $table->index(['forum_id', 'topic_type', 'topic_last_post_time'], 'forum_id_type'); 1105 $table->index(['forum_id', 'topic_type', 'osu_starpriority', 'topic_last_post_time'], 'star_sort'); 1106 }); 1107 1108 Schema::create('phpbb_topics_stars', function (Blueprint $table) { 1109 $table->mediumIncrements('star_id'); 1110 $table->unsignedMediumInteger('topic_id'); 1111 $table->unsignedMediumInteger('user_id'); 1112 $table->enum('type', ['user', 'supporter']); 1113 $table->timestamp('date')->useCurrent(); 1114 1115 $table->index(['user_id'], 'user_id'); 1116 $table->index(['topic_id', 'user_id'], 'topic_id'); 1117 }); 1118 1119 Schema::create('phpbb_topics_track', function (Blueprint $table) { 1120 $table->mediumInteger('user_id')->unsigned()->default(0); 1121 $table->mediumInteger('topic_id')->unsigned()->default(0); 1122 $table->mediumInteger('forum_id')->unsigned()->default(0); 1123 $table->integer('mark_time')->unsigned()->default(0); 1124 $table->primary(['user_id', 'topic_id']); 1125 $table->index('forum_id', 'forum_id'); 1126 $table->index('topic_id', 'topic_id'); 1127 }); 1128 1129 Schema::create('phpbb_user_group', function (Blueprint $table) { 1130 $table->mediumInteger('group_id')->unsigned()->default(0); 1131 $table->mediumInteger('user_id')->unsigned()->default(0)->index('user_id'); 1132 $table->boolean('group_leader')->unsigned()->default(0); 1133 $table->boolean('user_pending')->unsigned()->default(1); 1134 $table->primary(['group_id', 'user_id']); 1135 }); 1136 1137 Schema::create('phpbb_users', function (Blueprint $table) { 1138 $table->mediumIncrements('user_id')->from(2); 1139 $table->tinyInteger('user_type')->default(0); 1140 $table->mediumInteger('group_id')->unsigned()->default(2); 1141 $table->mediumText('user_permissions'); 1142 $table->mediumInteger('user_perm_from')->unsigned()->nullable()->default(0); 1143 $table->string('user_ip', 50)->default(''); 1144 $table->integer('user_regdate')->unsigned()->default(0); 1145 $table->string('username')->default(''); 1146 $table->string('username_clean')->default(''); 1147 $table->string('user_password', 64)->default(''); 1148 $table->integer('user_passchg')->unsigned()->default(0); 1149 $table->string('user_email', 100)->nullable()->unique('user_email_unique'); 1150 $table->string('user_birthday', 10)->default(''); 1151 $table->integer('user_lastvisit')->unsigned()->default(0); 1152 $table->integer('user_lastmark')->unsigned()->default(0); 1153 $table->integer('user_lastpost_time')->unsigned()->default(0); 1154 $table->string('user_lastpage', 200)->default(''); 1155 $table->string('user_last_confirm_key', 10)->default(''); 1156 $table->integer('user_last_search')->unsigned()->default(0); 1157 $table->boolean('user_warnings')->default(0); 1158 $table->integer('user_last_warning')->unsigned()->default(0); 1159 $table->boolean('user_login_attempts')->default(0); 1160 $table->boolean('user_inactive_reason')->default(0); 1161 $table->integer('user_inactive_time')->unsigned()->default(0); 1162 $table->mediumInteger('user_posts')->unsigned()->default(0); 1163 $table->string('user_lang', 30)->default(''); 1164 $table->decimal('user_timezone', 5)->default(0.00); 1165 $table->boolean('user_dst')->unsigned()->default(0); 1166 $table->string('user_dateformat', 30)->default('d M Y H:i'); 1167 $table->smallInteger('user_style')->unsigned()->default(0); 1168 $table->mediumInteger('user_rank')->unsigned()->default(0); 1169 $table->string('user_colour', 6)->default(''); 1170 $table->smallInteger('user_new_privmsg')->default(0); 1171 $table->smallInteger('user_unread_privmsg')->default(0); 1172 $table->integer('user_last_privmsg')->unsigned()->default(0); 1173 $table->boolean('user_message_rules')->unsigned()->default(0); 1174 $table->integer('user_full_folder')->default(-3); 1175 $table->integer('user_emailtime')->unsigned()->default(0); 1176 $table->smallInteger('user_topic_show_days')->unsigned()->default(0); 1177 $table->char('user_topic_sortby_type', 1)->default('t'); 1178 $table->char('user_topic_sortby_dir', 1)->default('d'); 1179 $table->smallInteger('user_post_show_days')->unsigned()->default(0); 1180 $table->char('user_post_sortby_type', 1)->default('t'); 1181 $table->char('user_post_sortby_dir', 1)->default('a'); 1182 $table->boolean('user_notify')->unsigned()->default(0); 1183 $table->boolean('user_notify_pm')->unsigned()->default(1); 1184 $table->boolean('user_notify_type')->default(0); 1185 $table->boolean('user_allow_pm')->unsigned()->default(1); 1186 $table->boolean('user_allow_viewonline')->unsigned()->default(1); 1187 $table->boolean('user_allow_viewemail')->unsigned()->default(1); 1188 $table->boolean('user_allow_massemail')->unsigned()->default(1); 1189 $table->integer('user_options')->unsigned()->default(895); 1190 $table->string('user_avatar')->default(''); 1191 $table->boolean('user_avatar_type')->default(0); 1192 $table->smallInteger('user_avatar_width')->unsigned()->default(0); 1193 $table->smallInteger('user_avatar_height')->unsigned()->default(0); 1194 $table->mediumText('user_sig'); 1195 $table->string('user_sig_bbcode_uid', 5)->default(''); 1196 $table->string('user_sig_bbcode_bitfield')->default(''); 1197 $table->string('user_from', 100)->default(''); 1198 $table->string('user_lastfm')->default(''); 1199 $table->string('user_lastfm_session')->default(''); 1200 $table->string('user_twitter')->default(''); 1201 $table->string('user_msnm')->default(''); 1202 $table->string('user_jabber')->default(''); 1203 $table->string('user_website', 200)->default(''); 1204 $table->text('user_occ', 65535); 1205 $table->text('user_interests', 65535); 1206 $table->string('user_actkey', 32)->default(''); 1207 $table->string('user_newpasswd', 32)->default(''); 1208 $table->float('osu_mapperrank')->default(0)->index('osu_mapperrank'); 1209 $table->boolean('osu_testversion')->default(0); 1210 $table->boolean('osu_subscriber')->default(0); 1211 $table->date('osu_subscriptionexpiry')->nullable(); 1212 $table->smallInteger('osu_kudosavailable')->default(0); 1213 $table->smallInteger('osu_kudosdenied')->unsigned()->default(0); 1214 $table->smallInteger('osu_kudostotal')->default(0)->index('osu_kudostotal'); 1215 $table->char('country_acronym', 2)->default('')->index('country_acronym'); 1216 $table->mediumInteger('userpage_post_id')->unsigned()->nullable(); 1217 $table->string('username_previous', 1024)->nullable(); 1218 $table->smallInteger('osu_featurevotes')->unsigned()->default(0); 1219 $table->tinyInteger('osu_playstyle')->unsigned()->default(0); 1220 $table->tinyInteger('osu_playmode')->default(0); 1221 $table->string('remember_token', 100)->nullable(); 1222 $table->unique('username_clean', 'username_clean'); 1223 $table->unique(['username', 'user_id'], 'username_id'); 1224 }); 1225 1226 Schema::create('phpbb_groups', function (Blueprint $table) { 1227 $table->mediumIncrements('group_id'); 1228 $table->tinyInteger('group_type')->default(1); 1229 $table->unsignedTinyInteger('group_founder_manage')->default(0); 1230 1231 $table->string('group_name', 255)->default(''); 1232 $table->text('group_desc'); 1233 $table->string('group_desc_bitfield', 255)->default(''); 1234 $table->unsignedInteger('group_desc_options')->default(7); 1235 $table->string('group_desc_uid', 5)->default(''); 1236 $table->unsignedTinyInteger('group_display')->default(0); 1237 $table->string('group_avatar', 255)->default(''); 1238 $table->tinyInteger('group_avatar_type')->default(0); 1239 $table->unsignedSmallInteger('group_avatar_width')->default(0); 1240 $table->unsignedSmallInteger('group_avatar_height')->default(0); 1241 $table->unsignedMediumInteger('group_rank')->default(0); 1242 $table->string('group_colour', 6)->default(''); 1243 $table->unsignedMediumInteger('group_sig_chars')->default(0); 1244 $table->unsignedTinyInteger('group_receive_pm')->default(0); 1245 $table->unsignedMediumInteger('group_message_limit')->default(0); 1246 $table->unsignedTinyInteger('group_legend')->default(0); 1247 1248 $table->index('group_legend', 'group_legend'); 1249 }); 1250 1251 Schema::create('phpbb_log', function (Blueprint $table) { 1252 $table->mediumIncrements('log_id'); 1253 $table->tinyInteger('log_type')->default(0); 1254 $table->unsignedMediumInteger('user_id')->default(0); 1255 $table->unsignedMediumInteger('forum_id')->default(0); 1256 $table->unsignedMediumInteger('topic_id')->default(0); 1257 $table->unsignedMediumInteger('reportee_id')->default(0); 1258 $table->string('log_ip', 40)->default(''); 1259 $table->unsignedInteger('log_time')->default(0); 1260 $table->text('log_operation'); 1261 $table->mediumText('log_data'); 1262 $table->index('log_type', 'log_type'); 1263 $table->index('forum_id', 'forum_id'); 1264 $table->index('topic_id', 'topic_id'); 1265 $table->index('reportee_id', 'reportee_id'); 1266 $table->index('user_id', 'user_id'); 1267 }); 1268 $this->setRowFormat('phpbb_log', 'COMPRESSED'); 1269 1270 Schema::create('phpbb_topics_watch', function (Blueprint $table) { 1271 $table->unsignedMediumInteger('user_id')->default(0); 1272 $table->unsignedMediumInteger('topic_id')->default(0); 1273 $table->unsignedTinyInteger('notify_status')->default(0); 1274 1275 $table->index('topic_id', 'topic_id'); 1276 $table->index('notify_status', 'notify_stat'); 1277 $table->primary(['user_id', 'topic_id']); 1278 }); 1279 $this->setRowFormat('phpbb_topics_watch', 'COMPRESSED'); 1280 1281 DB::statement(' 1282 CREATE TABLE weak_passwords 1283 (hash binary(16) NOT NULL, PRIMARY KEY (hash)) 1284 '); 1285 } 1286 1287 /** 1288 * Reverse the migrations. 1289 * 1290 * @return void 1291 */ 1292 public function down() 1293 { 1294 Schema::drop('osu_achievements'); 1295 Schema::drop('osu_apikeys'); 1296 Schema::drop('osu_badges'); 1297 Schema::drop('osu_beatmap_difficulty'); 1298 Schema::drop('osu_beatmap_difficulty_attribs'); 1299 Schema::drop('osu_beatmaps'); 1300 Schema::drop('osu_beatmapsets'); 1301 Schema::drop('osu_user_beatmapset_ratings'); 1302 Schema::drop('osu_changelog'); 1303 Schema::drop('osu_builds'); 1304 Schema::drop('osu_countries'); 1305 Schema::drop('osu_counts'); 1306 Schema::drop('osu_downloads'); 1307 Schema::drop('osu_events'); 1308 Schema::drop('osu_favouritemaps'); 1309 Schema::drop('osu_genres'); 1310 Schema::drop('osu_kudos_exchange'); 1311 Schema::drop('osu_languages'); 1312 Schema::drop('osu_leaders_fruits'); 1313 Schema::drop('osu_leaders_mania'); 1314 Schema::drop('osu_leaders'); 1315 Schema::drop('osu_leaders_taiko'); 1316 Schema::drop('osu_login_attempts'); 1317 Schema::drop('osu_mirrors'); 1318 Schema::drop('osu_replays'); 1319 Schema::drop('osu_replays_fruits'); 1320 Schema::drop('osu_replays_mania'); 1321 Schema::drop('osu_replays_taiko'); 1322 Schema::drop('osu_scores_fruits_high'); 1323 Schema::drop('osu_scores_fruits'); 1324 Schema::drop('osu_scores_high'); 1325 Schema::drop('osu_scores_mania_high'); 1326 Schema::drop('osu_scores_mania'); 1327 Schema::drop('osu_scores'); 1328 Schema::drop('osu_scores_taiko_high'); 1329 Schema::drop('osu_scores_taiko'); 1330 Schema::drop('osu_user_achievements'); 1331 Schema::drop('osu_user_banhistory'); 1332 Schema::drop('osu_user_beatmap_playcount'); 1333 Schema::drop('osu_user_donations'); 1334 Schema::drop('osu_username_change_history'); 1335 Schema::drop('osu_user_month_playcount'); 1336 Schema::drop('osu_user_performance_rank'); 1337 Schema::drop('osu_user_replayswatched'); 1338 Schema::drop('osu_user_reports'); 1339 Schema::drop('osu_user_security'); 1340 Schema::drop('osu_user_stats_fruits'); 1341 Schema::drop('osu_user_stats_mania'); 1342 Schema::drop('osu_user_stats'); 1343 Schema::drop('osu_user_stats_taiko'); 1344 Schema::drop('phpbb_acl_groups'); 1345 Schema::drop('phpbb_acl_options'); 1346 Schema::drop('phpbb_acl_roles_data'); 1347 Schema::drop('phpbb_disallow'); 1348 Schema::drop('phpbb_forums'); 1349 Schema::drop('phpbb_posts'); 1350 Schema::drop('phpbb_ranks'); 1351 Schema::drop('phpbb_smilies'); 1352 Schema::drop('phpbb_topics'); 1353 Schema::drop('phpbb_topics_stars'); 1354 Schema::drop('phpbb_topics_track'); 1355 Schema::drop('phpbb_user_group'); 1356 Schema::drop('phpbb_users'); 1357 Schema::drop('phpbb_groups'); 1358 Schema::drop('phpbb_log'); 1359 Schema::drop('phpbb_topics_watch'); 1360 Schema::drop('weak_passwords'); 1361 } 1362 1363 private function setRowFormat($table, $format) 1364 { 1365 DB::statement("ALTER TABLE `{$table}` ROW_FORMAT={$format};"); 1366 } 1367 1368 private function addBinary($table, $columnname, $size, $nullable = false, $after = null) 1369 { 1370 $null = $nullable ? 'NULL' : 'NOT NULL'; 1371 $after = $after ? 'AFTER '.$after : ''; 1372 $statement = "ALTER TABLE `{$table}` ADD `{$columnname}` BINARY({$size}) {$null} {$after};"; 1373 DB::statement($statement); 1374 } 1375 1376 private function comment($table, $comment) 1377 { 1378 DB::statement("ALTER TABLE `{$table}` COMMENT = '{$comment}';"); 1379 } 1380}