*/
private static $definition = [];
+ /**
+ * Set a database version to trigger update functions
+ *
+ * @param string $version
+ * @return void
+ */
+ public static function setDatabaseVersion(string $version)
+ {
+ if (!is_numeric($version)) {
+ throw new \Asika\SimpleConsole\CommandArgsException('The version number must be numeric');
+ }
+
+ DI::config()->set('system', 'build', $version);
+ echo DI::l10n()->t('The database version had been set to %s.', $version);
+ }
+
/**
* Converts all tables from MyISAM/InnoDB Antelope to InnoDB Barracuda
*/
return $definition;
}
+ /**
+ * Get field data for the given table
+ *
+ * @param string $table
+ * @param array $data data fields
+ * @return array fields for the given
+ */
+ public static function getFieldsForTable(string $table, array $data = [])
+ {
+ $definition = DBStructure::definition('', false);
+ if (empty($definition[$table])) {
+ return [];
+ }
+
+ $fieldnames = array_keys($definition[$table]['fields']);
+
+ $fields = [];
+
+ // Assign all field that are present in the table
+ foreach ($fieldnames as $field) {
+ if (isset($data[$field])) {
+ $fields[$field] = $data[$field];
+ }
+ }
+
+ return $fields;
+ }
+
private static function createTable($name, $structure, $verbose, $action)
{
$r = true;
$errors = '';
- Logger::log('updating structure', Logger::DEBUG);
+ Logger::info('updating structure');
// Get the current structure
$database = [];
foreach ($tables AS $table) {
$table = current($table);
- Logger::log(sprintf('updating structure for table %s ...', $table), Logger::DEBUG);
+ Logger::info('updating structure', ['table' => $table]);
$database[$table] = self::tableStructure($table);
}
}
}
}
- foreach ($existing_foreign_keys as $constraint => $param) {
- $sql2 = self::dropForeignKey($constraint);
+ foreach ($existing_foreign_keys as $param) {
+ $sql2 = self::dropForeignKey($param['CONSTRAINT_NAME']);
if ($sql3 == "") {
$sql3 = "ALTER" . $ignore . " TABLE `" . $temp_name . "` " . $sql2;
if (DBA::isResult($foreign_keys)) {
foreach ($foreign_keys as $foreign_key) {
- $constraint = $foreign_key['CONSTRAINT_NAME'];
- unset($foreign_key['CONSTRAINT_NAME']);
+ $parameters = ['foreign' => [$foreign_key['REFERENCED_TABLE_NAME'] => $foreign_key['REFERENCED_COLUMN_NAME']]];
+ $constraint = self::getConstraintName($table, $foreign_key['COLUMN_NAME'], $parameters);
$foreigndata[$constraint] = $foreign_key;
}
}
$fielddata[$field['COLUMN_NAME']]['not null'] = true;
}
- if (isset($field['COLUMN_DEFAULT'])) {
- $fielddata[$field['COLUMN_NAME']]['default'] = $field['COLUMN_DEFAULT'];
+ if (isset($field['COLUMN_DEFAULT']) && ($field['COLUMN_DEFAULT'] != 'NULL')) {
+ $fielddata[$field['COLUMN_NAME']]['default'] = trim($field['COLUMN_DEFAULT'], "'");
}
if (!empty($field['EXTRA'])) {
$foreign_table = array_keys($parameters['foreign'])[0];
$foreign_field = array_values($parameters['foreign'])[0];
- $constraint = self::getConstraintName($tablename, $fieldname, $parameters);
-
- $sql = "CONSTRAINT `" . $constraint . "` FOREIGN KEY (`" . $fieldname . "`)" .
- " REFERENCES `" . $foreign_table . "` (`" . $foreign_field . "`)";
+ $sql = "FOREIGN KEY (`" . $fieldname . "`) REFERENCES `" . $foreign_table . "` (`" . $foreign_field . "`)";
if (!empty($parameters['foreign']['on update'])) {
$sql .= " ON UPDATE " . strtoupper($parameters['foreign']['on update']);
/**
* Check if initial database values do exist - or create them
*/
- public static function checkInitialValues()
+ public static function checkInitialValues(bool $verbose = false)
{
+ if (self::existsTable('verb')) {
+ if (!DBA::exists('verb', ['id' => 1])) {
+ foreach (Item::ACTIVITIES as $index => $activity) {
+ DBA::insert('verb', ['id' => $index + 1, 'name' => $activity], Database::INSERT_IGNORE);
+ }
+ if ($verbose) {
+ echo "verb: activities added\n";
+ }
+ } elseif ($verbose) {
+ echo "verb: activities already added\n";
+ }
+
+ if (!DBA::exists('verb', ['id' => 0])) {
+ DBA::insert('verb', ['name' => '']);
+ $lastid = DBA::lastInsertId();
+ if ($lastid != 0) {
+ DBA::update('verb', ['id' => 0], ['id' => $lastid]);
+ if ($verbose) {
+ echo "Zero verb added\n";
+ }
+ }
+ } elseif ($verbose) {
+ echo "Zero verb already added\n";
+ }
+ } elseif ($verbose) {
+ echo "verb: Table not found\n";
+ }
+
+ if (self::existsTable('user') && !DBA::exists('user', ['uid' => 0])) {
+ $user = [
+ "verified" => true,
+ "page-flags" => User::PAGE_FLAGS_SOAPBOX,
+ "account-type" => User::ACCOUNT_TYPE_RELAY,
+ ];
+ DBA::insert('user', $user);
+ $lastid = DBA::lastInsertId();
+ if ($lastid != 0) {
+ DBA::update('user', ['uid' => 0], ['uid' => $lastid]);
+ if ($verbose) {
+ echo "Zero user added\n";
+ }
+ }
+ } elseif (self::existsTable('user') && $verbose) {
+ echo "Zero user already added\n";
+ } elseif ($verbose) {
+ echo "user: Table not found\n";
+ }
+
if (self::existsTable('contact') && !DBA::exists('contact', ['id' => 0])) {
DBA::insert('contact', ['nurl' => '']);
$lastid = DBA::lastInsertId();
if ($lastid != 0) {
DBA::update('contact', ['id' => 0], ['id' => $lastid]);
+ if ($verbose) {
+ echo "Zero contact added\n";
+ }
}
+ } elseif (self::existsTable('contact') && $verbose) {
+ echo "Zero contact already added\n";
+ } elseif ($verbose) {
+ echo "contact: Table not found\n";
+ }
+
+ if (self::existsTable('tag') && !DBA::exists('tag', ['id' => 0])) {
+ DBA::insert('tag', ['name' => '']);
+ $lastid = DBA::lastInsertId();
+ if ($lastid != 0) {
+ DBA::update('tag', ['id' => 0], ['id' => $lastid]);
+ if ($verbose) {
+ echo "Zero tag added\n";
+ }
+ }
+ } elseif (self::existsTable('tag') && $verbose) {
+ echo "Zero tag already added\n";
+ } elseif ($verbose) {
+ echo "tag: Table not found\n";
}
if (self::existsTable('permissionset')) {
$lastid = DBA::lastInsertId();
if ($lastid != 0) {
DBA::update('permissionset', ['id' => 0], ['id' => $lastid]);
+ if ($verbose) {
+ echo "Zero permissionset added\n";
+ }
}
+ } elseif ($verbose) {
+ echo "Zero permissionset already added\n";
}
if (!self::existsForeignKeyForField('item', 'psid')) {
$sets = DBA::p("SELECT `psid`, `item`.`uid`, `item`.`private` FROM `item`
}
DBA::close($sets);
}
+ } elseif ($verbose) {
+ echo "permissionset: Table not found\n";
}
- if (self::existsTable('tag') && !DBA::exists('tag', ['id' => 0])) {
- DBA::insert('tag', ['name' => '']);
- $lastid = DBA::lastInsertId();
- if ($lastid != 0) {
- DBA::update('tag', ['id' => 0], ['id' => $lastid]);
- }
- }
-
if (!self::existsForeignKeyForField('tokens', 'client_id')) {
$tokens = DBA::p("SELECT `tokens`.`id` FROM `tokens`
LEFT JOIN `clients` ON `clients`.`client_id` = `tokens`.`client_id`
while ($process = DBA::fetch($processes)) {
$parts = explode(' ', $process['info']);
- if (strtolower(array_shift($parts)) == 'alter') {
+ if (in_array(strtolower(array_shift($parts)), ['alter', 'create', 'drop', 'rename'])) {
$isUpdate = true;
}
}