diff --git a/resources/sql/patches/116.utf8-backup-first-expect-wait.sql b/resources/sql/patches/116.utf8-backup-first-expect-wait.sql new file mode 100644 index 0000000000..9276354b92 --- /dev/null +++ b/resources/sql/patches/116.utf8-backup-first-expect-wait.sql @@ -0,0 +1,1169 @@ +ALTER DATABASE `phabricator_audit` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_audit`.`audit_comment` + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `targetPHID` varchar(64) CHARACTER SET binary, + MODIFY `actorPHID` varchar(64) CHARACTER SET binary, + MODIFY `action` varchar(64) CHARACTER SET binary, + MODIFY `content` longtext CHARACTER SET binary; +ALTER TABLE `phabricator_audit`.`audit_comment` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `targetPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `actorPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `action` varchar(64) COLLATE utf8_general_ci NOT NULL, + MODIFY `content` longtext COLLATE utf8_general_ci NOT NULL; + + + +ALTER DATABASE `phabricator_chatlog` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_chatlog`.`chatlog_event` + MODIFY `channel` varchar(64) CHARACTER SET binary, + MODIFY `author` varchar(64) CHARACTER SET binary, + MODIFY `type` varchar(4) CHARACTER SET binary, + MODIFY `message` longtext CHARACTER SET binary, + MODIFY `loggedByPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_chatlog`.`chatlog_event` + COLLATE utf8_general_ci, + MODIFY `channel` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `author` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `type` varchar(4) COLLATE utf8_general_ci NOT NULL, + MODIFY `message` longtext COLLATE utf8_bin NOT NULL, + MODIFY `loggedByPHID` varchar(64) COLLATE utf8_bin NOT NULL; + + + +ALTER DATABASE `phabricator_conduit` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_conduit`.`conduit_certificatetoken` + MODIFY `userPHID` varchar(64) CHARACTER SET binary, + MODIFY `token` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_conduit`.`conduit_certificatetoken` + COLLATE utf8_general_ci, + MODIFY `userPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `token` varchar(64) COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_conduit`.`conduit_connectionlog` + MODIFY `client` varchar(255) CHARACTER SET binary, + MODIFY `clientVersion` varchar(255) CHARACTER SET binary, + MODIFY `clientDescription` varchar(255) CHARACTER SET binary, + MODIFY `username` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_conduit`.`conduit_connectionlog` + COLLATE utf8_general_ci, + MODIFY `client` varchar(255) COLLATE utf8_general_ci, + MODIFY `clientVersion` varchar(255) COLLATE utf8_general_ci, + MODIFY `clientDescription` varchar(255) COLLATE utf8_general_ci, + MODIFY `username` varchar(255) COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_conduit`.`conduit_methodcalllog` + MODIFY `method` varchar(255) CHARACTER SET binary, + MODIFY `error` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_conduit`.`conduit_methodcalllog` + COLLATE utf8_general_ci, + MODIFY `method` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `error` varchar(255) COLLATE utf8_general_ci NOT NULL; + + + +ALTER DATABASE `phabricator_countdown` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_countdown`.`countdown_timer` + MODIFY `title` varchar(255) CHARACTER SET binary, + MODIFY `authorPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_countdown`.`countdown_timer` + COLLATE utf8_general_ci, + MODIFY `title` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `authorPHID` varchar(64) COLLATE utf8_bin NOT NULL; + + + +ALTER DATABASE `phabricator_daemon` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_daemon`.`daemon_log` + MODIFY `daemon` varchar(255) CHARACTER SET binary, + MODIFY `host` varchar(255) CHARACTER SET binary, + MODIFY `argv` varchar(512) CHARACTER SET binary; +ALTER TABLE `phabricator_daemon`.`daemon_log` + COLLATE utf8_general_ci, + MODIFY `daemon` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `host` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `argv` varchar(512) COLLATE utf8_general_ci NOT NULL; + +ALTER TABLE `phabricator_daemon`.`daemon_logevent` + MODIFY `logType` varchar(4) CHARACTER SET binary, + MODIFY `message` longtext CHARACTER SET binary; +ALTER TABLE `phabricator_daemon`.`daemon_logevent` + COLLATE utf8_general_ci, + MODIFY `logType` varchar(4) COLLATE utf8_general_ci NOT NULL, + MODIFY `message` longtext COLLATE utf8_bin NOT NULL; + + + +ALTER DATABASE `phabricator_differential` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_differential`.`differential_affectedpath` + COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_differential`.`differential_auxiliaryfield` + MODIFY `revisionPHID` varchar(64) CHARACTER SET binary, + MODIFY `name` varchar(32) CHARACTER SET binary, + MODIFY `value` longtext CHARACTER SET binary; +ALTER TABLE `phabricator_differential`.`differential_auxiliaryfield` + COLLATE utf8_general_ci, + MODIFY `revisionPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `name` varchar(32) COLLATE utf8_bin NOT NULL, + MODIFY `value` longtext COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_differential`.`differential_changeset` + MODIFY `oldFile` varchar(255) CHARACTER SET binary, + MODIFY `filename` varchar(255) CHARACTER SET binary, + MODIFY `awayPaths` longtext CHARACTER SET binary, + MODIFY `metadata` longtext CHARACTER SET binary, + MODIFY `oldProperties` longtext CHARACTER SET binary, + MODIFY `newProperties` longtext CHARACTER SET binary; +ALTER TABLE `phabricator_differential`.`differential_changeset` + COLLATE utf8_general_ci, + MODIFY `oldFile` varchar(255) COLLATE utf8_general_ci, + MODIFY `filename` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `awayPaths` longtext COLLATE utf8_bin, + MODIFY `metadata` longtext COLLATE utf8_bin, + MODIFY `oldProperties` longtext COLLATE utf8_bin, + MODIFY `newProperties` longtext COLLATE utf8_bin; + +ALTER TABLE `phabricator_differential`.`differential_changeset_parse_cache` + MODIFY `cache` longtext CHARACTER SET binary; +ALTER TABLE `phabricator_differential`.`differential_changeset_parse_cache` + COLLATE utf8_general_ci, + MODIFY `cache` longtext COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_differential`.`differential_comment` + MODIFY `authorPHID` varchar(64) CHARACTER SET binary, + MODIFY `action` varchar(64) CHARACTER SET binary, + MODIFY `content` longtext CHARACTER SET binary, + MODIFY `cache` longtext CHARACTER SET binary, + MODIFY `metadata` longtext CHARACTER SET binary, + MODIFY `contentSource` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_differential`.`differential_comment` + COLLATE utf8_general_ci, + MODIFY `authorPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `action` varchar(64) COLLATE utf8_general_ci NOT NULL, + MODIFY `content` longtext COLLATE utf8_bin NOT NULL, + MODIFY `cache` longtext COLLATE utf8_bin, + MODIFY `metadata` longtext COLLATE utf8_bin NOT NULL, + MODIFY `contentSource` varchar(255) COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_differential`.`differential_commit` + MODIFY `commitPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_differential`.`differential_commit` + COLLATE utf8_general_ci, + MODIFY `commitPHID` varchar(64) COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_differential`.`differential_diff` + MODIFY `authorPHID` varchar(64) CHARACTER SET binary, + MODIFY `sourceMachine` varchar(255) CHARACTER SET binary, + MODIFY `sourcePath` varchar(255) CHARACTER SET binary, + MODIFY `sourceControlSystem` varchar(64) CHARACTER SET binary, + MODIFY `sourceControlBaseRevision` varchar(255) CHARACTER SET binary, + MODIFY `sourceControlPath` varchar(255) CHARACTER SET binary, + MODIFY `branch` varchar(255) CHARACTER SET binary, + MODIFY `arcanistProjectPHID` varchar(64) CHARACTER SET binary, + MODIFY `creationMethod` varchar(255) CHARACTER SET binary, + MODIFY `description` varchar(255) CHARACTER SET binary, + MODIFY `repositoryUUID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_differential`.`differential_diff` + COLLATE utf8_general_ci, + MODIFY `authorPHID` varchar(64) COLLATE utf8_bin, + MODIFY `sourceMachine` varchar(255) COLLATE utf8_general_ci, + MODIFY `sourcePath` varchar(255) COLLATE utf8_general_ci, + MODIFY `sourceControlSystem` varchar(64) COLLATE utf8_general_ci, + MODIFY `sourceControlBaseRevision` varchar(255) COLLATE utf8_general_ci, + MODIFY `sourceControlPath` varchar(255) COLLATE utf8_general_ci, + MODIFY `branch` varchar(255) COLLATE utf8_general_ci, + MODIFY `arcanistProjectPHID` varchar(64) COLLATE utf8_bin, + MODIFY `creationMethod` varchar(255) COLLATE utf8_general_ci, + MODIFY `description` varchar(255) COLLATE utf8_general_ci, + MODIFY `repositoryUUID` varchar(64) COLLATE utf8_bin; + +ALTER TABLE `phabricator_differential`.`differential_diffproperty` + MODIFY `name` varchar(255) CHARACTER SET binary, + MODIFY `data` longtext CHARACTER SET binary; +ALTER TABLE `phabricator_differential`.`differential_diffproperty` + COLLATE utf8_general_ci, + MODIFY `name` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `data` longtext COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_differential`.`differential_hunk` + MODIFY `changes` longtext CHARACTER SET binary; +ALTER TABLE `phabricator_differential`.`differential_hunk` + COLLATE utf8_general_ci, + MODIFY `changes` longtext COLLATE utf8_bin; + +ALTER TABLE `phabricator_differential`.`differential_inlinecomment` + MODIFY `authorPHID` varchar(64) CHARACTER SET binary, + MODIFY `content` longtext CHARACTER SET binary, + MODIFY `cache` longtext CHARACTER SET binary; +ALTER TABLE `phabricator_differential`.`differential_inlinecomment` + COLLATE utf8_general_ci, + MODIFY `authorPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `content` longtext COLLATE utf8_bin NOT NULL, + MODIFY `cache` longtext COLLATE utf8_bin; + +ALTER TABLE `phabricator_differential`.`differential_relationship` + MODIFY `relation` varchar(4) CHARACTER SET binary, + MODIFY `objectPHID` varchar(64) CHARACTER SET binary, + MODIFY `reasonPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_differential`.`differential_relationship` + COLLATE utf8_general_ci, + MODIFY `relation` varchar(4) COLLATE utf8_bin NOT NULL, + MODIFY `objectPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `reasonPHID` varchar(64) COLLATE utf8_bin; + +ALTER TABLE `phabricator_differential`.`differential_revision` + MODIFY `title` varchar(255) CHARACTER SET binary, + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `status` varchar(32) CHARACTER SET binary, + MODIFY `summary` longtext CHARACTER SET binary, + MODIFY `testPlan` text CHARACTER SET binary, + MODIFY `authorPHID` varchar(64) CHARACTER SET binary, + MODIFY `lastReviewerPHID` varchar(64) CHARACTER SET binary, + MODIFY `attached` longtext CHARACTER SET binary, + MODIFY `unsubscribed` longtext CHARACTER SET binary, + MODIFY `mailKey` varchar(40) CHARACTER SET binary; +ALTER TABLE `phabricator_differential`.`differential_revision` + COLLATE utf8_general_ci, + MODIFY `title` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `status` varchar(32) COLLATE utf8_general_ci NOT NULL, + MODIFY `summary` longtext COLLATE utf8_general_ci NOT NULL, + MODIFY `testPlan` text COLLATE utf8_general_ci NOT NULL, + MODIFY `authorPHID` varchar(64) COLLATE utf8_bin, + MODIFY `lastReviewerPHID` varchar(64) COLLATE utf8_bin, + MODIFY `attached` longtext COLLATE utf8_general_ci NOT NULL, + MODIFY `unsubscribed` longtext COLLATE utf8_bin NOT NULL, + MODIFY `mailKey` varchar(40) COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_differential`.`differential_revisionhash` + MODIFY `type` char(4) CHARACTER SET binary, + MODIFY `hash` varchar(40) CHARACTER SET binary; +ALTER TABLE `phabricator_differential`.`differential_revisionhash` + COLLATE utf8_general_ci, + MODIFY `type` char(4) COLLATE utf8_bin NOT NULL, + MODIFY `hash` varchar(40) COLLATE utf8_bin NOT NULL; + + + +ALTER DATABASE `phabricator_directory` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_directory`.`directory_category` + MODIFY `name` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_directory`.`directory_category` + COLLATE utf8_general_ci, + MODIFY `name` varchar(255) COLLATE utf8_general_ci NOT NULL; + +ALTER TABLE `phabricator_directory`.`directory_item` + MODIFY `name` varchar(255) CHARACTER SET binary, + MODIFY `description` text CHARACTER SET binary, + MODIFY `href` varchar(255) CHARACTER SET binary, + MODIFY `imagePHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_directory`.`directory_item` + COLLATE utf8_general_ci, + MODIFY `name` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `description` text COLLATE utf8_general_ci NOT NULL, + MODIFY `href` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `imagePHID` varchar(64) COLLATE utf8_bin; + + + +ALTER DATABASE `phabricator_draft` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_draft`.`draft` + MODIFY `authorPHID` varchar(64) CHARACTER SET binary, + MODIFY `draftKey` varchar(64) CHARACTER SET binary, + MODIFY `draft` longtext CHARACTER SET binary; +ALTER TABLE `phabricator_draft`.`draft` + COLLATE utf8_general_ci, + MODIFY `authorPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `draftKey` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `draft` longtext COLLATE utf8_bin NOT NULL; + + + +ALTER DATABASE `phabricator_drydock` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_drydock`.`drydock_lease` + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `ownerPHID` varchar(64) CHARACTER SET binary, + MODIFY `attributes` longtext CHARACTER SET binary; +ALTER TABLE `phabricator_drydock`.`drydock_lease` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `ownerPHID` varchar(64) COLLATE utf8_bin, + MODIFY `attributes` longtext COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_drydock`.`drydock_resource` + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `name` varchar(255) CHARACTER SET binary, + MODIFY `ownerPHID` varchar(64) CHARACTER SET binary, + MODIFY `blueprintClass` varchar(255) CHARACTER SET binary, + MODIFY `type` varchar(64) CHARACTER SET binary, + MODIFY `attributes` longtext CHARACTER SET binary, + MODIFY `capabilities` longtext CHARACTER SET binary; +ALTER TABLE `phabricator_drydock`.`drydock_resource` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `name` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `ownerPHID` varchar(64) COLLATE utf8_bin, + MODIFY `blueprintClass` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `type` varchar(64) COLLATE utf8_general_ci NOT NULL, + MODIFY `attributes` longtext COLLATE utf8_bin NOT NULL, + MODIFY `capabilities` longtext COLLATE utf8_bin NOT NULL; + + + +ALTER DATABASE `phabricator_feed` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_feed`.`feed_storydata` + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `storyType` varchar(64) CHARACTER SET binary, + MODIFY `storyData` longtext CHARACTER SET binary, + MODIFY `authorPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_feed`.`feed_storydata` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `storyType` varchar(64) COLLATE utf8_general_ci NOT NULL, + MODIFY `storyData` longtext COLLATE utf8_bin NOT NULL, + MODIFY `authorPHID` varchar(64) COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_feed`.`feed_storyreference` + MODIFY `objectPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_feed`.`feed_storyreference` + COLLATE utf8_general_ci, + MODIFY `objectPHID` varchar(64) COLLATE utf8_bin NOT NULL; + + + +ALTER DATABASE `phabricator_file` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_file`.`file` + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `name` varchar(255) CHARACTER SET binary, + MODIFY `mimeType` varchar(255) CHARACTER SET binary, + MODIFY `storageEngine` varchar(32) CHARACTER SET binary, + MODIFY `storageFormat` varchar(32) CHARACTER SET binary, + MODIFY `storageHandle` varchar(255) CHARACTER SET binary, + MODIFY `authorPHID` varchar(64) CHARACTER SET binary, + MODIFY `secretKey` varchar(20) CHARACTER SET binary; +ALTER TABLE `phabricator_file`.`file` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `name` varchar(255) COLLATE utf8_general_ci, + MODIFY `mimeType` varchar(255) COLLATE utf8_general_ci, + MODIFY `storageEngine` varchar(32) COLLATE utf8_general_ci NOT NULL, + MODIFY `storageFormat` varchar(32) COLLATE utf8_general_ci NOT NULL, + MODIFY `storageHandle` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `authorPHID` varchar(64) COLLATE utf8_bin, + MODIFY `secretKey` varchar(20) COLLATE utf8_bin; + +ALTER TABLE `phabricator_file`.`file_imagemacro` + MODIFY `filePHID` varchar(64) CHARACTER SET binary, + MODIFY `name` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_file`.`file_imagemacro` + COLLATE utf8_general_ci, + MODIFY `filePHID` varchar(64) COLLATE utf8_general_ci NOT NULL, + MODIFY `name` varchar(255) COLLATE utf8_general_ci NOT NULL; + +ALTER TABLE `phabricator_file`.`file_proxyimage` + MODIFY `uri` varchar(255) CHARACTER SET binary, + MODIFY `filePHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_file`.`file_proxyimage` + COLLATE utf8_general_ci, + MODIFY `uri` varchar(255) COLLATE utf8_bin NOT NULL, + MODIFY `filePHID` varchar(64) COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_file`.`file_storageblob` + COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_file`.`file_transformedfile` + MODIFY `originalPHID` varchar(64) CHARACTER SET binary, + MODIFY `transform` varchar(255) CHARACTER SET binary, + MODIFY `transformedPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_file`.`file_transformedfile` + COLLATE utf8_general_ci, + MODIFY `originalPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `transform` varchar(255) COLLATE utf8_bin NOT NULL, + MODIFY `transformedPHID` varchar(64) COLLATE utf8_bin NOT NULL; + + + +ALTER DATABASE `phabricator_herald` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_herald`.`herald_action` + MODIFY `action` varchar(255) CHARACTER SET binary, + MODIFY `target` text CHARACTER SET binary; +ALTER TABLE `phabricator_herald`.`herald_action` + COLLATE utf8_general_ci, + MODIFY `action` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `target` text COLLATE utf8_general_ci NOT NULL; + +ALTER TABLE `phabricator_herald`.`herald_condition` + MODIFY `fieldName` varchar(255) CHARACTER SET binary, + MODIFY `fieldCondition` varchar(255) CHARACTER SET binary, + MODIFY `value` text CHARACTER SET binary; +ALTER TABLE `phabricator_herald`.`herald_condition` + COLLATE utf8_general_ci, + MODIFY `fieldName` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `fieldCondition` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `value` text COLLATE utf8_general_ci NOT NULL; + +ALTER TABLE `phabricator_herald`.`herald_rule` + MODIFY `name` varchar(255) CHARACTER SET binary, + MODIFY `authorPHID` varchar(64) CHARACTER SET binary, + MODIFY `contentType` varchar(255) CHARACTER SET binary, + MODIFY `ruleType` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_herald`.`herald_rule` + COLLATE utf8_general_ci, + MODIFY `name` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `authorPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `contentType` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `ruleType` varchar(255) COLLATE utf8_general_ci NOT NULL DEFAULT 'global'; + +ALTER TABLE `phabricator_herald`.`herald_ruleapplied` + MODIFY `phid` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_herald`.`herald_ruleapplied` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_herald`.`herald_ruleedit` + MODIFY `editorPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_herald`.`herald_ruleedit` + COLLATE utf8_general_ci, + MODIFY `editorPHID` varchar(64) COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_herald`.`herald_savedheader` + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `header` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_herald`.`herald_savedheader` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `header` varchar(255) COLLATE utf8_general_ci NOT NULL; + +ALTER TABLE `phabricator_herald`.`herald_transcript` + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `host` varchar(255) CHARACTER SET binary, + MODIFY `psth` varchar(255) CHARACTER SET binary, + MODIFY `objectPHID` varchar(64) CHARACTER SET binary, + MODIFY `objectTranscript` longtext CHARACTER SET binary, + MODIFY `ruleTranscripts` longtext CHARACTER SET binary, + MODIFY `conditionTranscripts` longtext CHARACTER SET binary, + MODIFY `applyTranscripts` longtext CHARACTER SET binary; +ALTER TABLE `phabricator_herald`.`herald_transcript` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `host` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `psth` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `objectPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `objectTranscript` longtext COLLATE utf8_bin NOT NULL, + MODIFY `ruleTranscripts` longtext COLLATE utf8_bin NOT NULL, + MODIFY `conditionTranscripts` longtext COLLATE utf8_bin NOT NULL, + MODIFY `applyTranscripts` longtext COLLATE utf8_bin NOT NULL; + + + +ALTER DATABASE `phabricator_maniphest` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_maniphest`.`maniphest_task` + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `authorPHID` varchar(64) CHARACTER SET binary, + MODIFY `ownerPHID` varchar(64) CHARACTER SET binary, + MODIFY `ccPHIDs` text CHARACTER SET binary, + MODIFY `attached` longtext CHARACTER SET binary, + MODIFY `title` text CHARACTER SET binary, + MODIFY `description` longtext CHARACTER SET binary, + MODIFY `projectPHIDs` longtext CHARACTER SET binary, + MODIFY `mailKey` varchar(40) CHARACTER SET binary, + MODIFY `ownerOrdering` varchar(64) CHARACTER SET binary, + MODIFY `originalEmailSource` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_maniphest`.`maniphest_task` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `authorPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `ownerPHID` varchar(64) COLLATE utf8_bin, + MODIFY `ccPHIDs` text COLLATE utf8_general_ci, + MODIFY `attached` longtext COLLATE utf8_general_ci NOT NULL, + MODIFY `title` text COLLATE utf8_general_ci NOT NULL, + MODIFY `description` longtext COLLATE utf8_general_ci NOT NULL, + MODIFY `projectPHIDs` longtext COLLATE utf8_bin NOT NULL, + MODIFY `mailKey` varchar(40) COLLATE utf8_bin NOT NULL, + MODIFY `ownerOrdering` varchar(64) COLLATE utf8_general_ci, + MODIFY `originalEmailSource` varchar(255) COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_maniphest`.`maniphest_taskauxiliarystorage` + MODIFY `taskPHID` varchar(64) CHARACTER SET binary, + MODIFY `name` varchar(255) CHARACTER SET binary, + MODIFY `value` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_maniphest`.`maniphest_taskauxiliarystorage` + COLLATE utf8_general_ci, + MODIFY `taskPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `name` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `value` varchar(255) COLLATE utf8_general_ci NOT NULL; + +ALTER TABLE `phabricator_maniphest`.`maniphest_taskproject` + MODIFY `taskPHID` varchar(64) CHARACTER SET binary, + MODIFY `projectPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_maniphest`.`maniphest_taskproject` + COLLATE utf8_general_ci, + MODIFY `taskPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `projectPHID` varchar(64) COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_maniphest`.`maniphest_tasksubscriber` + MODIFY `taskPHID` varchar(64) CHARACTER SET binary, + MODIFY `subscriberPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_maniphest`.`maniphest_tasksubscriber` + COLLATE utf8_general_ci, + MODIFY `taskPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `subscriberPHID` varchar(64) COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_maniphest`.`maniphest_touch` + MODIFY `userPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_maniphest`.`maniphest_touch` + COLLATE utf8_general_ci, + MODIFY `userPHID` varchar(64) COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_maniphest`.`maniphest_transaction` + MODIFY `authorPHID` varchar(64) CHARACTER SET binary, + MODIFY `transactionType` varchar(16) CHARACTER SET binary, + MODIFY `oldValue` longtext CHARACTER SET binary, + MODIFY `newValue` longtext CHARACTER SET binary, + MODIFY `comments` longtext CHARACTER SET binary, + MODIFY `cache` longtext CHARACTER SET binary, + MODIFY `metadata` longtext CHARACTER SET binary, + MODIFY `contentSource` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_maniphest`.`maniphest_transaction` + COLLATE utf8_general_ci, + MODIFY `authorPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `transactionType` varchar(16) COLLATE utf8_general_ci NOT NULL, + MODIFY `oldValue` longtext COLLATE utf8_bin, + MODIFY `newValue` longtext COLLATE utf8_bin, + MODIFY `comments` longtext COLLATE utf8_bin, + MODIFY `cache` longtext COLLATE utf8_bin, + MODIFY `metadata` longtext COLLATE utf8_bin NOT NULL, + MODIFY `contentSource` varchar(255) COLLATE utf8_general_ci; + + + +ALTER DATABASE `phabricator_meta_data` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_meta_data`.`schema_version` + COLLATE utf8_general_ci; + + + +ALTER DATABASE `phabricator_metamta` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_metamta`.`metamta_mail` + MODIFY `parameters` longtext CHARACTER SET binary, + MODIFY `status` varchar(255) CHARACTER SET binary, + MODIFY `message` text CHARACTER SET binary, + MODIFY `relatedPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_metamta`.`metamta_mail` + COLLATE utf8_general_ci, + MODIFY `parameters` longtext COLLATE utf8_bin NOT NULL, + MODIFY `status` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `message` text COLLATE utf8_general_ci, + MODIFY `relatedPHID` varchar(64) COLLATE utf8_bin; + +ALTER TABLE `phabricator_metamta`.`metamta_mailinglist` + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `name` varchar(255) CHARACTER SET binary, + MODIFY `email` varchar(255) CHARACTER SET binary, + MODIFY `uri` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_metamta`.`metamta_mailinglist` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `name` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `email` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `uri` varchar(255) COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_metamta`.`metamta_receivedmail` + MODIFY `headers` longtext CHARACTER SET binary, + MODIFY `bodies` longtext CHARACTER SET binary, + MODIFY `attachments` longtext CHARACTER SET binary, + MODIFY `relatedPHID` varchar(64) CHARACTER SET binary, + MODIFY `authorPHID` varchar(64) CHARACTER SET binary, + MODIFY `message` longtext CHARACTER SET binary; +ALTER TABLE `phabricator_metamta`.`metamta_receivedmail` + COLLATE utf8_general_ci, + MODIFY `headers` longtext COLLATE utf8_bin NOT NULL, + MODIFY `bodies` longtext COLLATE utf8_bin NOT NULL, + MODIFY `attachments` longtext COLLATE utf8_bin NOT NULL, + MODIFY `relatedPHID` varchar(64) COLLATE utf8_bin, + MODIFY `authorPHID` varchar(64) COLLATE utf8_bin, + MODIFY `message` longtext COLLATE utf8_bin; + + + +ALTER DATABASE `phabricator_oauth_server` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_oauth_server`.`oauth_server_oauthclientauthorization` + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `userPHID` varchar(64) CHARACTER SET binary, + MODIFY `clientPHID` varchar(64) CHARACTER SET binary, + MODIFY `scope` text CHARACTER SET binary; +ALTER TABLE `phabricator_oauth_server`.`oauth_server_oauthclientauthorization` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `userPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `clientPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `scope` text COLLATE utf8_general_ci NOT NULL; + +ALTER TABLE `phabricator_oauth_server`.`oauth_server_oauthserveraccesstoken` + MODIFY `token` varchar(32) CHARACTER SET binary, + MODIFY `userPHID` varchar(64) CHARACTER SET binary, + MODIFY `clientPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_oauth_server`.`oauth_server_oauthserveraccesstoken` + COLLATE utf8_general_ci, + MODIFY `token` varchar(32) COLLATE utf8_general_ci NOT NULL, + MODIFY `userPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `clientPHID` varchar(64) COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_oauth_server`.`oauth_server_oauthserverauthorizationcode` + MODIFY `code` varchar(32) CHARACTER SET binary, + MODIFY `clientPHID` varchar(64) CHARACTER SET binary, + MODIFY `clientSecret` varchar(32) CHARACTER SET binary, + MODIFY `userPHID` varchar(64) CHARACTER SET binary, + MODIFY `redirectURI` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_oauth_server`.`oauth_server_oauthserverauthorizationcode` + COLLATE utf8_general_ci, + MODIFY `code` varchar(32) COLLATE utf8_general_ci NOT NULL, + MODIFY `clientPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `clientSecret` varchar(32) COLLATE utf8_general_ci NOT NULL, + MODIFY `userPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `redirectURI` varchar(255) COLLATE utf8_general_ci NOT NULL; + +ALTER TABLE `phabricator_oauth_server`.`oauth_server_oauthserverclient` + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `name` varchar(255) CHARACTER SET binary, + MODIFY `secret` varchar(32) CHARACTER SET binary, + MODIFY `redirectURI` varchar(255) CHARACTER SET binary, + MODIFY `creatorPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_oauth_server`.`oauth_server_oauthserverclient` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `name` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `secret` varchar(32) COLLATE utf8_general_ci NOT NULL, + MODIFY `redirectURI` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `creatorPHID` varchar(64) COLLATE utf8_bin NOT NULL; + + + +ALTER DATABASE `phabricator_owners` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_owners`.`owners_owner` + MODIFY `userPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_owners`.`owners_owner` + COLLATE utf8_general_ci, + MODIFY `userPHID` varchar(64) COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_owners`.`owners_package` + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `name` varchar(255) CHARACTER SET binary, + MODIFY `description` text CHARACTER SET binary, + MODIFY `primaryOwnerPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_owners`.`owners_package` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `name` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `description` text COLLATE utf8_general_ci NOT NULL, + MODIFY `primaryOwnerPHID` varchar(64) COLLATE utf8_bin; + +ALTER TABLE `phabricator_owners`.`owners_path` + MODIFY `repositoryPHID` varchar(64) CHARACTER SET binary, + MODIFY `path` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_owners`.`owners_path` + COLLATE utf8_general_ci, + MODIFY `repositoryPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `path` varchar(255) COLLATE utf8_general_ci NOT NULL; + + + +ALTER DATABASE `phabricator_pastebin` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_pastebin`.`pastebin_paste` + MODIFY `title` varchar(255) CHARACTER SET binary, + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `authorPHID` varchar(64) CHARACTER SET binary, + MODIFY `filePHID` varchar(64) CHARACTER SET binary, + MODIFY `language` varchar(64) CHARACTER SET binary, + MODIFY `parentPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_pastebin`.`pastebin_paste` + COLLATE utf8_general_ci, + MODIFY `title` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `authorPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `filePHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `language` varchar(64) COLLATE utf8_general_ci NOT NULL, + MODIFY `parentPHID` varchar(64) COLLATE utf8_bin; + + + +ALTER DATABASE `phabricator_phid` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_phid`.`phid` + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `phidType` varchar(4) CHARACTER SET binary, + MODIFY `parentPHID` varchar(64) CHARACTER SET binary, + MODIFY `ownerPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_phid`.`phid` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `phidType` varchar(4) COLLATE utf8_bin, + MODIFY `parentPHID` varchar(64) COLLATE utf8_general_ci, + MODIFY `ownerPHID` varchar(64) COLLATE utf8_general_ci; + + + +ALTER DATABASE `phabricator_phriction` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_phriction`.`phriction_content` + MODIFY `authorPHID` varchar(64) CHARACTER SET binary, + MODIFY `title` varchar(512) CHARACTER SET binary, + MODIFY `slug` varchar(512) CHARACTER SET binary, + MODIFY `content` longtext CHARACTER SET binary, + MODIFY `description` varchar(512) CHARACTER SET binary; +ALTER TABLE `phabricator_phriction`.`phriction_content` + COLLATE utf8_general_ci, + MODIFY `authorPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `title` varchar(512) COLLATE utf8_general_ci NOT NULL, + MODIFY `slug` varchar(512) COLLATE utf8_general_ci NOT NULL, + MODIFY `content` longtext COLLATE utf8_bin NOT NULL, + MODIFY `description` varchar(512) COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_phriction`.`phriction_document` + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `slug` varchar(128) CHARACTER SET binary; +ALTER TABLE `phabricator_phriction`.`phriction_document` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `slug` varchar(128) COLLATE utf8_general_ci NOT NULL; + + + +ALTER DATABASE `phabricator_project` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_project`.`project` + MODIFY `name` varchar(255) CHARACTER SET binary, + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `authorPHID` varchar(64) CHARACTER SET binary, + MODIFY `status` varchar(32) CHARACTER SET binary, + MODIFY `subprojectPHIDs` longtext CHARACTER SET binary, + MODIFY `phrictionSlug` varchar(128) CHARACTER SET binary; +ALTER TABLE `phabricator_project`.`project` + COLLATE utf8_general_ci, + MODIFY `name` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `authorPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `status` varchar(32) COLLATE utf8_general_ci NOT NULL, + MODIFY `subprojectPHIDs` longtext COLLATE utf8_bin NOT NULL, + MODIFY `phrictionSlug` varchar(128) COLLATE utf8_bin; + +ALTER TABLE `phabricator_project`.`project_affiliation` + MODIFY `projectPHID` varchar(64) CHARACTER SET binary, + MODIFY `userPHID` varchar(64) CHARACTER SET binary, + MODIFY `role` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_project`.`project_affiliation` + COLLATE utf8_general_ci, + MODIFY `projectPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `userPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `role` varchar(255) COLLATE utf8_general_ci NOT NULL; + +ALTER TABLE `phabricator_project`.`project_profile` + MODIFY `projectPHID` varchar(64) CHARACTER SET binary, + MODIFY `blurb` longtext CHARACTER SET binary, + MODIFY `profileImagePHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_project`.`project_profile` + COLLATE utf8_general_ci, + MODIFY `projectPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `blurb` longtext COLLATE utf8_general_ci NOT NULL, + MODIFY `profileImagePHID` varchar(64) COLLATE utf8_bin; + +ALTER TABLE `phabricator_project`.`project_subproject` + MODIFY `projectPHID` varchar(64) CHARACTER SET binary, + MODIFY `subprojectPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_project`.`project_subproject` + COLLATE utf8_general_ci, + MODIFY `projectPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `subprojectPHID` varchar(64) COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_project`.`project_transaction` + MODIFY `authorPHID` varchar(64) CHARACTER SET binary, + MODIFY `transactionType` varchar(32) CHARACTER SET binary, + MODIFY `oldValue` longtext CHARACTER SET binary, + MODIFY `newValue` longtext CHARACTER SET binary; +ALTER TABLE `phabricator_project`.`project_transaction` + COLLATE utf8_general_ci, + MODIFY `authorPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `transactionType` varchar(32) COLLATE utf8_general_ci NOT NULL, + MODIFY `oldValue` longtext COLLATE utf8_bin NOT NULL, + MODIFY `newValue` longtext COLLATE utf8_bin NOT NULL; + + + +ALTER DATABASE `phabricator_repository` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_repository`.`repository` + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `name` varchar(255) CHARACTER SET binary, + MODIFY `callsign` varchar(32) CHARACTER SET binary, + MODIFY `versionControlSystem` varchar(32) CHARACTER SET binary, + MODIFY `details` longtext CHARACTER SET binary, + MODIFY `uuid` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_repository`.`repository` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `name` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `callsign` varchar(32) COLLATE utf8_general_ci NOT NULL, + MODIFY `versionControlSystem` varchar(32) COLLATE utf8_general_ci NOT NULL, + MODIFY `details` longtext COLLATE utf8_bin NOT NULL, + MODIFY `uuid` varchar(64) COLLATE utf8_bin; + +ALTER TABLE `phabricator_repository`.`repository_arcanistproject` + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `name` varchar(255) CHARACTER SET binary, + MODIFY `symbolIndexLanguages` longtext CHARACTER SET binary, + MODIFY `symbolIndexProjects` longtext CHARACTER SET binary; +ALTER TABLE `phabricator_repository`.`repository_arcanistproject` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `name` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `symbolIndexLanguages` longtext COLLATE utf8_bin NOT NULL, + MODIFY `symbolIndexProjects` longtext COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_repository`.`repository_auditrequest` + MODIFY `auditorPHID` varchar(64) CHARACTER SET binary, + MODIFY `commitPHID` varchar(64) CHARACTER SET binary, + MODIFY `auditStatus` varchar(64) CHARACTER SET binary, + MODIFY `auditReasons` longtext CHARACTER SET binary; +ALTER TABLE `phabricator_repository`.`repository_auditrequest` + COLLATE utf8_general_ci, + MODIFY `auditorPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `commitPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `auditStatus` varchar(64) COLLATE utf8_general_ci NOT NULL, + MODIFY `auditReasons` longtext COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_repository`.`repository_badcommit` + MODIFY `fullCommitName` varchar(255) CHARACTER SET binary, + MODIFY `description` longtext CHARACTER SET binary; +ALTER TABLE `phabricator_repository`.`repository_badcommit` + COLLATE utf8_general_ci, + MODIFY `fullCommitName` varchar(255) COLLATE utf8_bin NOT NULL, + MODIFY `description` longtext COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_repository`.`repository_commit` + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `commitIdentifier` varchar(40) CHARACTER SET binary, + MODIFY `mailKey` varchar(20) CHARACTER SET binary, + MODIFY `authorPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_repository`.`repository_commit` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `commitIdentifier` varchar(40) COLLATE utf8_bin NOT NULL, + MODIFY `mailKey` varchar(20) COLLATE utf8_general_ci NOT NULL, + MODIFY `authorPHID` varchar(64) COLLATE utf8_bin; + +ALTER TABLE `phabricator_repository`.`repository_commitdata` + MODIFY `authorName` varchar(255) CHARACTER SET binary, + MODIFY `commitMessage` longtext CHARACTER SET binary, + MODIFY `commitDetails` longtext CHARACTER SET binary; +ALTER TABLE `phabricator_repository`.`repository_commitdata` + COLLATE utf8_general_ci, + MODIFY `authorName` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `commitMessage` longtext COLLATE utf8_bin NOT NULL, + MODIFY `commitDetails` longtext COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_repository`.`repository_filesystem` + COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_repository`.`repository_path` + MODIFY `path` varchar(512) CHARACTER SET binary, + MODIFY `pathHash` varchar(32) CHARACTER SET binary; +ALTER TABLE `phabricator_repository`.`repository_path` + COLLATE utf8_general_ci, + MODIFY `path` varchar(512) COLLATE utf8_bin NOT NULL, + MODIFY `pathHash` varchar(32) COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_repository`.`repository_pathchange` + COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_repository`.`repository_shortcut` + MODIFY `name` varchar(255) CHARACTER SET binary, + MODIFY `href` varchar(255) CHARACTER SET binary, + MODIFY `description` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_repository`.`repository_shortcut` + COLLATE utf8_general_ci, + MODIFY `name` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `href` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `description` varchar(255) COLLATE utf8_general_ci NOT NULL; + +ALTER TABLE `phabricator_repository`.`repository_summary` + COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_repository`.`repository_symbol` + MODIFY `symbolName` varchar(128) CHARACTER SET binary, + MODIFY `symbolType` varchar(12) CHARACTER SET binary, + MODIFY `symbolLanguage` varchar(32) CHARACTER SET binary; +ALTER TABLE `phabricator_repository`.`repository_symbol` + COLLATE utf8_general_ci, + MODIFY `symbolName` varchar(128) COLLATE utf8_general_ci NOT NULL, + MODIFY `symbolType` varchar(12) COLLATE utf8_bin NOT NULL, + MODIFY `symbolLanguage` varchar(32) COLLATE utf8_bin NOT NULL; + + + +ALTER DATABASE `phabricator_search` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_search`.`search_document` + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `documentType` varchar(4) CHARACTER SET binary, + MODIFY `documentTitle` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_search`.`search_document` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `documentType` varchar(4) COLLATE utf8_bin NOT NULL, + MODIFY `documentTitle` varchar(255) COLLATE utf8_general_ci NOT NULL; + +ALTER TABLE `phabricator_search`.`search_documentfield` + DROP INDEX corpus, + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `phidType` varchar(4) CHARACTER SET binary, + MODIFY `field` varchar(4) CHARACTER SET binary, + MODIFY `auxPHID` varchar(64) CHARACTER SET binary, + MODIFY `corpus` text CHARACTER SET binary; +ALTER TABLE `phabricator_search`.`search_documentfield` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `phidType` varchar(4) COLLATE utf8_bin NOT NULL, + MODIFY `field` varchar(4) COLLATE utf8_bin NOT NULL, + MODIFY `auxPHID` varchar(64) COLLATE utf8_bin, + MODIFY `corpus` text COLLATE utf8_general_ci, + ADD FULLTEXT (corpus); + +ALTER TABLE `phabricator_search`.`search_documentrelationship` + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `relatedPHID` varchar(64) CHARACTER SET binary, + MODIFY `relation` varchar(4) CHARACTER SET binary, + MODIFY `relatedType` varchar(4) CHARACTER SET binary; +ALTER TABLE `phabricator_search`.`search_documentrelationship` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `relatedPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `relation` varchar(4) COLLATE utf8_bin NOT NULL, + MODIFY `relatedType` varchar(4) COLLATE utf8_general_ci NOT NULL; + +ALTER TABLE `phabricator_search`.`search_query` + MODIFY `query` varchar(255) CHARACTER SET binary, + MODIFY `parameters` text CHARACTER SET binary, + MODIFY `queryKey` varchar(12) CHARACTER SET binary; +ALTER TABLE `phabricator_search`.`search_query` + COLLATE utf8_general_ci, + MODIFY `query` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `parameters` text COLLATE utf8_general_ci NOT NULL, + MODIFY `queryKey` varchar(12) COLLATE utf8_general_ci NOT NULL; + + + +ALTER DATABASE `phabricator_slowvote` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_slowvote`.`slowvote_choice` + MODIFY `authorPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_slowvote`.`slowvote_choice` + COLLATE utf8_general_ci, + MODIFY `authorPHID` varchar(64) COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_slowvote`.`slowvote_comment` + MODIFY `authorPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_slowvote`.`slowvote_comment` + COLLATE utf8_general_ci, + MODIFY `authorPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `commentText` longtext COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_slowvote`.`slowvote_option` + MODIFY `name` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_slowvote`.`slowvote_option` + COLLATE utf8_general_ci, + MODIFY `name` varchar(255) COLLATE utf8_general_ci NOT NULL; + +ALTER TABLE `phabricator_slowvote`.`slowvote_poll` + MODIFY `question` varchar(255) CHARACTER SET binary, + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `authorPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_slowvote`.`slowvote_poll` + COLLATE utf8_general_ci, + MODIFY `question` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `authorPHID` varchar(64) COLLATE utf8_bin NOT NULL; + + + +ALTER DATABASE `phabricator_timeline` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_timeline`.`timeline_cursor` + MODIFY `name` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_timeline`.`timeline_cursor` + COLLATE utf8_general_ci, + MODIFY `name` varchar(255) COLLATE utf8_general_ci NOT NULL; + +ALTER TABLE `phabricator_timeline`.`timeline_event` + MODIFY `type` char(4) CHARACTER SET binary; +ALTER TABLE `phabricator_timeline`.`timeline_event` + COLLATE utf8_general_ci, + MODIFY `type` char(4) COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_timeline`.`timeline_eventdata` + COLLATE utf8_general_ci, + MODIFY `eventData` longtext COLLATE utf8_bin NOT NULL; + + + +ALTER DATABASE `phabricator_user` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_user`.`phabricator_session` + MODIFY `userPHID` varchar(64) CHARACTER SET binary, + MODIFY `type` varchar(32) CHARACTER SET binary, + MODIFY `sessionKey` varchar(40) CHARACTER SET binary; +ALTER TABLE `phabricator_user`.`phabricator_session` + COLLATE utf8_general_ci, + MODIFY `userPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `type` varchar(32) COLLATE utf8_bin NOT NULL, + MODIFY `sessionKey` varchar(40) COLLATE utf8_general_ci NOT NULL; + +ALTER TABLE `phabricator_user`.`user` + MODIFY `phid` varchar(64) CHARACTER SET binary, + MODIFY `userName` varchar(64) CHARACTER SET binary, + MODIFY `realName` varchar(128) CHARACTER SET binary, + MODIFY `email` varchar(255) CHARACTER SET binary, + MODIFY `passwordSalt` varchar(32) CHARACTER SET binary, + MODIFY `passwordHash` varchar(32) CHARACTER SET binary, + MODIFY `profileImagePHID` varchar(64) CHARACTER SET binary, + MODIFY `consoleTab` varchar(64) CHARACTER SET binary, + MODIFY `conduitCertificate` varchar(255) CHARACTER SET binary, + MODIFY `timezoneIdentifier` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_user`.`user` + COLLATE utf8_general_ci, + MODIFY `phid` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `userName` varchar(64) COLLATE utf8_general_ci NOT NULL, + MODIFY `realName` varchar(128) COLLATE utf8_general_ci NOT NULL, + MODIFY `email` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `passwordSalt` varchar(32) COLLATE utf8_bin, + MODIFY `passwordHash` varchar(32) COLLATE utf8_bin, + MODIFY `profileImagePHID` varchar(64) COLLATE utf8_bin, + MODIFY `consoleTab` varchar(64) COLLATE utf8_general_ci NOT NULL, + MODIFY `conduitCertificate` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `timezoneIdentifier` varchar(255) COLLATE utf8_general_ci NOT NULL; + +ALTER TABLE `phabricator_user`.`user_log` + MODIFY `actorPHID` varchar(64) CHARACTER SET binary, + MODIFY `userPHID` varchar(64) CHARACTER SET binary, + MODIFY `action` varchar(64) CHARACTER SET binary, + MODIFY `remoteAddr` varchar(16) CHARACTER SET binary, + MODIFY `session` varchar(40) CHARACTER SET binary; +ALTER TABLE `phabricator_user`.`user_log` + COLLATE utf8_general_ci, + MODIFY `actorPHID` varchar(64) COLLATE utf8_bin, + MODIFY `userPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `action` varchar(64) COLLATE utf8_general_ci NOT NULL, + MODIFY `oldValue` longtext COLLATE utf8_bin NOT NULL, + MODIFY `newValue` longtext COLLATE utf8_bin NOT NULL, + MODIFY `details` longtext COLLATE utf8_bin NOT NULL, + MODIFY `remoteAddr` varchar(16) COLLATE utf8_general_ci NOT NULL, + MODIFY `session` varchar(40) COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_user`.`user_nametoken` + MODIFY `token` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_user`.`user_nametoken` + COLLATE utf8_general_ci, + MODIFY `token` varchar(255) COLLATE utf8_general_ci NOT NULL; + +ALTER TABLE `phabricator_user`.`user_oauthinfo` + MODIFY `oauthProvider` varchar(255) CHARACTER SET binary, + MODIFY `oauthUID` varchar(255) CHARACTER SET binary, + MODIFY `accountURI` varchar(255) CHARACTER SET binary, + MODIFY `accountName` varchar(255) CHARACTER SET binary, + MODIFY `token` varchar(255) CHARACTER SET binary, + MODIFY `tokenScope` varchar(255) CHARACTER SET binary, + MODIFY `tokenStatus` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_user`.`user_oauthinfo` + COLLATE utf8_general_ci, + MODIFY `oauthProvider` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `oauthUID` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `accountURI` varchar(255) COLLATE utf8_general_ci, + MODIFY `accountName` varchar(255) COLLATE utf8_general_ci, + MODIFY `token` varchar(255) COLLATE utf8_general_ci, + MODIFY `tokenScope` varchar(255) COLLATE utf8_general_ci, + MODIFY `tokenStatus` varchar(255) COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_user`.`user_preferences` + MODIFY `userPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_user`.`user_preferences` + COLLATE utf8_general_ci, + MODIFY `userPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `preferences` longtext COLLATE utf8_bin NOT NULL; + +ALTER TABLE `phabricator_user`.`user_profile` + MODIFY `userPHID` varchar(64) CHARACTER SET binary, + MODIFY `title` varchar(255) CHARACTER SET binary, + MODIFY `blurb` text CHARACTER SET binary, + MODIFY `profileImagePHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_user`.`user_profile` + COLLATE utf8_general_ci, + MODIFY `userPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `title` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `blurb` text COLLATE utf8_general_ci NOT NULL, + MODIFY `profileImagePHID` varchar(64) COLLATE utf8_bin; + +ALTER TABLE `phabricator_user`.`user_sshkey` + MODIFY `userPHID` varchar(64) CHARACTER SET binary, + MODIFY `name` varchar(255) CHARACTER SET binary, + MODIFY `keyType` varchar(255) CHARACTER SET binary, + MODIFY `keyBody` varchar(32768) CHARACTER SET binary, + MODIFY `keyHash` varchar(32) CHARACTER SET binary, + MODIFY `keyComment` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_user`.`user_sshkey` + COLLATE utf8_general_ci, + MODIFY `userPHID` varchar(64) COLLATE utf8_bin NOT NULL, + MODIFY `name` varchar(255) COLLATE utf8_general_ci, + MODIFY `keyType` varchar(255) COLLATE utf8_general_ci, + MODIFY `keyBody` varchar(32768) COLLATE utf8_bin, + MODIFY `keyHash` varchar(32) COLLATE utf8_bin NOT NULL, + MODIFY `keyComment` varchar(255) COLLATE utf8_general_ci; + + + +ALTER DATABASE `phabricator_worker` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_worker`.`worker_task` + MODIFY `taskClass` varchar(255) CHARACTER SET binary, + MODIFY `leaseOwner` varchar(255) CHARACTER SET binary; +ALTER TABLE `phabricator_worker`.`worker_task` + COLLATE utf8_general_ci, + MODIFY `taskClass` varchar(255) COLLATE utf8_general_ci NOT NULL, + MODIFY `leaseOwner` varchar(255) COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_worker`.`worker_taskdata` + COLLATE utf8_general_ci, + MODIFY `data` longtext COLLATE utf8_bin NOT NULL; + + + +ALTER DATABASE `phabricator_xhpastview` COLLATE utf8_general_ci; + +ALTER TABLE `phabricator_xhpastview`.`xhpastview_parsetree` + MODIFY `authorPHID` varchar(64) CHARACTER SET binary; +ALTER TABLE `phabricator_xhpastview`.`xhpastview_parsetree` + COLLATE utf8_general_ci, + MODIFY `authorPHID` varchar(64) COLLATE utf8_bin, + MODIFY `input` longtext COLLATE utf8_bin NOT NULL, + MODIFY `stdout` longtext COLLATE utf8_bin NOT NULL; + + + diff --git a/scripts/sql/upgrade_schema.php b/scripts/sql/upgrade_schema.php index 7f6c35d0af..8426e8dfc1 100755 --- a/scripts/sql/upgrade_schema.php +++ b/scripts/sql/upgrade_schema.php @@ -1,216 +1,217 @@ #!/usr/bin/env php null, // Upgrade from specific version 'u' => null, // Override MySQL User 'p' => null, // Override MySQL Pass 'm' => null, // Specify max version to upgrade to ); foreach (array('h', 'f', 'd') as $key) { // By default, these keys are set to 'false' to indicate that the flag was // passed. if (array_key_exists($key, $options)) { $options[$key] = true; } } if (!empty($options['h']) || ($options['v'] && !is_numeric($options['v'])) || ($options['m'] && !is_numeric($options['m']))) { usage(); } if (empty($options['f']) && empty($options['d'])) { echo phutil_console_wrap( "Before running this script, you should take down the Phabricator web ". "interface and stop any running Phabricator daemons."); if (!phutil_console_confirm('Are you ready to continue?')) { echo "Cancelled.\n"; exit(1); } } // Use always the version from the commandline if it is defined $next_version = isset($options['v']) ? (int)$options['v'] : null; $max_version = isset($options['m']) ? (int)$options['m'] : null; $conf = DatabaseConfigurationProvider::getConfiguration(); if ($options['u']) { $conn_user = $options['u']; $conn_pass = $options['p']; } else { $conn_user = $conf->getUser(); $conn_pass = $conf->getPassword(); } $conn_host = $conf->getHost(); // Split out port information, since the command-line client requires a // separate flag for the port. $uri = new PhutilURI('mysql://'.$conn_host); if ($uri->getPort()) { $conn_port = $uri->getPort(); $conn_bare_hostname = $uri->getDomain(); } else { $conn_port = null; $conn_bare_hostname = $conn_host; } $conn = new AphrontMySQLDatabaseConnection( array( 'user' => $conn_user, 'pass' => $conn_pass, 'host' => $conn_host, 'database' => null, )); try { $create_sql = << $max_version) { continue; } $short_name = basename($patch['path']); print "Applying patch {$short_name}...\n"; if (!empty($options['d'])) { $patch_applied = true; continue; } if ($conn_port) { $port = '--port='.(int)$conn_port; } else { $port = null; } if (preg_match('/\.php$/', $patch['path'])) { $schema_conn = $conn; require_once $patch['path']; } else { list($stdout, $stderr) = execx( - "mysql --user=%s --password=%s --host=%s {$port} < %s", + "mysql --user=%s --password=%s --host=%s {$port} ". + "--default-character-set=utf8 < %s", $conn_user, $conn_pass, $conn_bare_hostname, $patch['path']); if ($stderr) { print $stderr; exit(-1); } } // Patch was successful, update the db with the latest applied patch version // 'DELETE' and 'INSERT' instead of update, because the table might be empty queryfx( $conn, 'DELETE FROM phabricator_meta_data.%T', SCHEMA_VERSION_TABLE_NAME); queryfx( $conn, 'INSERT INTO phabricator_meta_data.%T VALUES (%d)', SCHEMA_VERSION_TABLE_NAME, $patch['version']); $patch_applied = true; } if (!$patch_applied) { print "Your database is already up-to-date.\n"; } } catch (AphrontQueryAccessDeniedException $ex) { echo "ACCESS DENIED\n". "The user '{$conn_user}' does not have sufficient MySQL privileges to\n". "execute the schema upgrade. Use the -u and -p flags to run as a user\n". "with more privileges (e.g., root).". "\n\n". "EXCEPTION:\n". $ex->getMessage(). "\n\n"; exit(1); } function usage() { echo "usage: upgrade_schema.php [-v version] [-u user -p pass] [-f] [-h]". "\n\n". "Run 'upgrade_schema.php -u root -p hunter2' to override the configured ". "default user.\n". "Run 'upgrade_schema.php -v 12' to apply all patches starting from ". "version 12. It is very unlikely you need to do this.\n". "Run 'upgrade_schema.php -m 110' to apply all patches up to and ". "including version 110 (but nothing past).\n". "Use the -f flag to upgrade noninteractively, without prompting.\n". "Use the -d flag to do a dry run - patches that would be applied ". "will be listed, but not applied.\n". "Use the -h flag to show this help.\n"; exit(1); } diff --git a/src/storage/connection/mysql/AphrontMySQLDatabaseConnection.php b/src/storage/connection/mysql/AphrontMySQLDatabaseConnection.php index b9adc7a7a9..f65998a261 100644 --- a/src/storage/connection/mysql/AphrontMySQLDatabaseConnection.php +++ b/src/storage/connection/mysql/AphrontMySQLDatabaseConnection.php @@ -1,334 +1,335 @@ configuration = $configuration; } public function escapeString($string) { $this->requireConnection(); return mysql_real_escape_string($string, $this->connection); } public function escapeColumnName($name) { return '`'.str_replace('`', '\\`', $name).'`'; } public function escapeMultilineComment($comment) { // These can either terminate a comment, confuse the hell out of the parser, // make MySQL execute the comment as a query, or, in the case of semicolon, // are quasi-dangerous because the semicolon could turn a broken query into // a working query plus an ignored query. static $map = array( '--' => '(DOUBLEDASH)', '*/' => '(STARSLASH)', '//' => '(SLASHSLASH)', '#' => '(HASH)', '!' => '(BANG)', ';' => '(SEMICOLON)', ); $comment = str_replace( array_keys($map), array_values($map), $comment); // For good measure, kill anything else that isn't a nice printable // character. $comment = preg_replace('/[^\x20-\x7F]+/', ' ', $comment); return '/* '.$comment.' */'; } public function escapeStringForLikeClause($value) { $value = $this->escapeString($value); // Ideally the query shouldn't be modified after safely escaping it, // but we need to escape _ and % within LIKE terms. $value = str_replace( // Even though we've already escaped, we need to replace \ with \\ // because MYSQL unescapes twice inside a LIKE clause. See note // at mysql.com. However, if the \ is being used to escape a single // quote ('), then the \ should not be escaped. Thus, after all \ // are replaced with \\, we need to revert instances of \\' back to // \'. array('\\', '\\\\\'', '_', '%'), array('\\\\', '\\\'', '\_', '\%'), $value); return $value; } private function getConfiguration($key, $default = null) { return idx($this->configuration, $key, $default); } private function closeConnection() { if ($this->connection) { $this->connection = null; $key = $this->getConnectionCacheKey(); unset(self::$connectionCache[$key]); } } private function getConnectionCacheKey() { $user = $this->getConfiguration('user'); $host = $this->getConfiguration('host'); $database = $this->getConfiguration('database'); return "{$user}:{$host}:{$database}"; } private function establishConnection() { $this->closeConnection(); $key = $this->getConnectionCacheKey(); if (isset(self::$connectionCache[$key])) { $this->connection = self::$connectionCache[$key]; return; } $start = microtime(true); if (!function_exists('mysql_connect')) { // We have to '@' the actual call since it can spew all sorts of silly // noise, but it will also silence fatals caused by not having MySQL // installed, which has bitten me on three separate occasions. Make sure // such failures are explicit and loud. throw new Exception( "About to call mysql_connect(), but the PHP MySQL extension is not ". "available!"); } $user = $this->getConfiguration('user'); $host = $this->getConfiguration('host'); $database = $this->getConfiguration('database'); $profiler = PhutilServiceProfiler::getInstance(); $call_id = $profiler->beginServiceCall( array( 'type' => 'connect', 'host' => $host, 'database' => $database, )); $retries = max(1, PhabricatorEnv::getEnvConfig('mysql.connection-retries')); while ($retries--) { try { $conn = @mysql_connect( $host, $user, $this->getConfiguration('pass'), $new_link = true, $flags = 0); if (!$conn) { $errno = mysql_errno(); $error = mysql_error(); throw new AphrontQueryConnectionException( "Attempt to connect to {$user}@{$host} failed with error ". "#{$errno}: {$error}.", $errno); } if ($database !== null) { $ret = @mysql_select_db($database, $conn); if (!$ret) { $this->throwQueryException($conn); } + mysql_set_charset('utf8'); } $profiler->endServiceCall($call_id, array()); break; } catch (Exception $ex) { if ($retries && $ex->getCode() == 2003) { $class = get_class($ex); $message = $ex->getMessage(); phlog("Retrying ({$retries}) after {$class}: {$message}"); } else { $profiler->endServiceCall($call_id, array()); throw $ex; } } } self::$connectionCache[$key] = $conn; $this->connection = $conn; } public function getInsertID() { return mysql_insert_id($this->requireConnection()); } public function getAffectedRows() { return mysql_affected_rows($this->requireConnection()); } public function getTransactionKey() { return (int)$this->requireConnection(); } private function requireConnection() { if (!$this->connection) { $this->establishConnection(); } return $this->connection; } public function selectAllResults() { $result = array(); $res = $this->lastResult; if ($res == null) { throw new Exception('No query result to fetch from!'); } while (($row = mysql_fetch_assoc($res)) !== false) { $result[] = $row; } return $result; } public function executeRawQuery($raw_query) { $this->lastResult = null; $retries = max(1, PhabricatorEnv::getEnvConfig('mysql.connection-retries')); while ($retries--) { try { $this->requireConnection(); // TODO: Do we need to include transactional statements here? $is_write = !preg_match('/^(SELECT|SHOW|EXPLAIN)\s/', $raw_query); if ($is_write) { AphrontWriteGuard::willWrite(); } $start = microtime(true); $profiler = PhutilServiceProfiler::getInstance(); $call_id = $profiler->beginServiceCall( array( 'type' => 'query', 'config' => $this->configuration, 'query' => $raw_query, 'write' => $is_write, )); $result = @mysql_query($raw_query, $this->connection); $profiler->endServiceCall($call_id, array()); if ($this->nextError) { $result = null; } if ($result) { $this->lastResult = $result; break; } $this->throwQueryException($this->connection); } catch (AphrontQueryConnectionLostException $ex) { if ($this->isInsideTransaction()) { // Zero out the transaction state to prevent a second exception // ("program exited with open transaction") from being thrown, since // we're about to throw a more relevant/useful one instead. $state = $this->getTransactionState(); while ($state->getDepth()) { $state->decreaseDepth(); } // We can't close the connection before this because // isInsideTransaction() and getTransactionState() depend on the // connection. $this->closeConnection(); throw $ex; } $this->closeConnection(); if (!$retries) { throw $ex; } $class = get_class($ex); $message = $ex->getMessage(); phlog("Retrying ({$retries}) after {$class}: {$message}"); } } } private function throwQueryException($connection) { if ($this->nextError) { $errno = $this->nextError; $error = 'Simulated error.'; $this->nextError = null; } else { $errno = mysql_errno($connection); $error = mysql_error($connection); } $exmsg = "#{$errno}: {$error}"; switch ($errno) { case 2013: // Connection Dropped case 2006: // Gone Away throw new AphrontQueryConnectionLostException($exmsg); case 1213: // Deadlock case 1205: // Lock wait timeout exceeded throw new AphrontQueryRecoverableException($exmsg); case 1062: // Duplicate Key // NOTE: In some versions of MySQL we get a key name back here, but // older versions just give us a key index ("key 2") so it's not // portable to parse the key out of the error and attach it to the // exception. throw new AphrontQueryDuplicateKeyException($exmsg); case 1044: // Access denied to database case 1045: // Access denied (auth) case 1142: // Access denied to table case 1143: // Access denied to column throw new AphrontQueryAccessDeniedException($exmsg); case 1146: // No such table case 1154: // Unknown column "..." in field list throw new AphrontQuerySchemaException($exmsg); default: // TODO: 1064 is syntax error, and quite terrible in production. throw new AphrontQueryException($exmsg); } } /** * Force the next query to fail with a simulated error. This should be used * ONLY for unit tests. */ public function simulateErrorOnNextQuery($error) { $this->nextError = $error; return $this; } }