format('Ymd-His-u') . '.sqlite'); $old = glob($dir . '/filaments-*.sqlite'); sort($old); // timestamped names sort chronologically foreach (array_slice($old, 0, max(0, count($old) - 10)) as $f) { unlink($f); } } function db(): PDO { static $pdo = null; if ($pdo === null) { $path = config()['db_path']; $dir = dirname($path); if (!is_dir($dir)) { mkdir($dir, 0775, true); } $pdo = new PDO('sqlite:' . $path, null, null, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ]); $pdo->exec('PRAGMA foreign_keys = ON'); $pdo->exec(<<query('PRAGMA table_info(filaments)')->fetchAll(PDO::FETCH_COLUMN, 1); if (!in_array('color_name', $cols, true)) { $pdo->exec('ALTER TABLE filaments ADD COLUMN color_name TEXT'); } if (!in_array('color_hex2', $cols, true)) { $pdo->exec('ALTER TABLE filaments ADD COLUMN color_hex2 TEXT'); } if (!in_array('original_g', $cols, true)) { $pdo->exec('ALTER TABLE filaments ADD COLUMN original_g REAL DEFAULT 1000'); } foreach (['silk', 'matte', 'rainbow', 'transparent', 'twotone', 'sparkle', 'small_spool'] as $col) { if (!in_array($col, $cols, true)) { $pdo->exec("ALTER TABLE filaments ADD COLUMN $col INTEGER NOT NULL DEFAULT 0"); } } } return $pdo; }