Files
Portabase.Agent/scripts/sqlite/seed-big.sql
T
2026-02-22 21:46:16 +01:00

74 lines
2.5 KiB
SQL

PRAGMA foreign_keys = ON;
BEGIN TRANSACTION;
-- Drop tables
DROP TABLE IF EXISTS users;
DROP TABLE IF EXISTS projects;
DROP TABLE IF EXISTS tasks;
-- Users
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
email TEXT NOT NULL UNIQUE,
full_name TEXT NOT NULL,
role TEXT NOT NULL CHECK (role IN ('admin','manager','user')),
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
-- Projects
CREATE TABLE projects (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
description TEXT,
owner_id INTEGER NOT NULL,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE CASCADE
);
-- Tasks
CREATE TABLE tasks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
project_id INTEGER NOT NULL,
title TEXT NOT NULL,
status TEXT NOT NULL CHECK (status IN ('todo','in_progress','done')),
priority INTEGER NOT NULL DEFAULT 3,
due_date TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
);
-- Seed minimal users
INSERT INTO users (email, full_name, role) VALUES
('admin@example.com', 'System Admin', 'admin'),
('manager@example.com', 'Project Manager', 'manager'),
('user@example.com', 'Standard User', 'user');
-- Generate 10_000 projects
WITH RECURSIVE numbers(x) AS (
SELECT 1
UNION ALL
SELECT x+1 FROM numbers WHERE x<10000
)
INSERT INTO projects (name, description, owner_id)
SELECT
'Project #' || x,
'Auto-generated project description for project #' || x,
(1 + (x % 3)) -- cycle users 1..3
FROM numbers;
-- Generate 100_000 tasks
WITH RECURSIVE numbers(x) AS (
SELECT 1
UNION ALL
SELECT x+1 FROM numbers WHERE x<100000
)
INSERT INTO tasks (project_id, title, status, priority, due_date)
SELECT
(1 + (x % 10000)), -- project id cycle
'Task #' || x,
CASE (x % 3) WHEN 0 THEN 'todo' WHEN 1 THEN 'in_progress' ELSE 'done' END,
1 + (x % 5),
date('now', '+' || (x % 30) || ' days')
FROM numbers;
COMMIT;