tolord

Test Data Generation

Dec 3rd, 2019
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. DELETE FROM provider_ingredient WHERE True;
  2. DELETE FROM provider            WHERE True;
  3. DELETE FROM order_item          WHERE True;
  4. DELETE FROM pizza_ingredient    WHERE True;
  5. DELETE FROM pizza               WHERE True;
  6. DELETE FROM ingredient_stock    WHERE True;
  7. DELETE FROM ingredient          WHERE True;
  8. DELETE FROM "order"             WHERE True;
  9. DELETE FROM customer            WHERE True;
  10. -------------------
  11. INSERT INTO customer
  12. SELECT
  13.     '8' || CAST(FLOOR(random() * 100) + 900 AS TEXT) || CAST(FLOOR(random() * 9000000) + 1000000 AS TEXT)
  14.         AS phone_number,
  15.     MIN(ABS(FLOOR((random() + random() + random() + random() + random() + random() + random() + random() + random() + random()) * 2 - 10))) AS discount
  16. FROM (SELECT generate_series(1, 10000)) AS t1
  17. GROUP BY phone_number;
  18. -------------------
  19. INSERT INTO ingredient("name")
  20. SELECT UNNEST(ARRAY['cheese', 'dough', 'tomato', 'chicken', 'bacon', 'red sauce', 'white sauce', 'mushroom', 'onion', 'ketchup', 'mayonnaise', 'salt', 'pepper', 'chili', 'pineapple', 'sour cream', 'sausage', 'parmesan', 'blue cheese', 'ham', 'pepperoni', 'sugar', 'water', 'egg', 'corn']);
  21. -------------------
  22. INSERT INTO ingredient_stock("ingredient_id", "weight")
  23. SELECT "id", floor((random() + random() * 2 + random() * 2 + random() * 3 + random() * 3 + random() * 4)  * 9000 + 10000)
  24. FROM ingredient;
  25. -------------------
  26. INSERT INTO "order" ("date", "customer", "address", "status")
  27. SELECT
  28.     "date" + make_interval(
  29.         hours:=FLOOR(random() * 12 + 10)::INT,
  30.         mins :=FLOOR(random() * 60)::INT
  31.     ) AS "date",
  32.     "customer",
  33.     (ARRAY['Дерибасовская', '221B, Baker Street', 'Лубянка', 'Литейный, 4', 'Кантемировская, 2', 'Какой-то адрес', 'Ещё один адрес', 'У чёрта на куличках', 'в Караганду', 'тому, кто это прочитал'])[FLOOR(1 + random() * 10)]  AS address,
  34.     CASE
  35.         WHEN CURRENT_DATE > "date" + INTERVAL '2 DAY'
  36.             THEN 'выполнен'
  37.         ELSE (enum_range(NULL::order_status))[1 + FLOOR(random() * 4)]
  38.     END AS status
  39. FROM ( 
  40.     SELECT
  41.         "date",
  42.         UNNEST((SELECT (ARRAY_AGG(phone_number))[1:FLOOR(rand * 100 + 100)] FROM customer ORDER BY random())) AS customer
  43.     FROM (SELECT CURRENT_DATE - generate_series(1, 500) AS "date", random() AS rand) AS t1
  44. ) AS t2;
  45. -------------------
  46. INSERT INTO pizza ("name", "price", "weight")
  47. SELECT
  48.     UNNEST(ARRAY['Margarita', 'Hawaii', 'Pepperoni', '4 cheeses', 'Neapolitana', 'Sea', 'Calzone', 'Mushroom']) AS "name",
  49.     UNNEST(price)  AS price,
  50.     UNNEST(weight) AS weight
  51. FROM (
  52.     SELECT
  53.         ARRAY_AGG(FLOOR(random() * 10) * 20 + 450) AS price,
  54.         ARRAY_AGG(FLOOR(random() * 300) + 500)     AS weight
  55.     FROM generate_series(1, 8)
  56. ) AS t1;
  57. -------------------
  58. WITH ingrs AS (
  59.     SELECT
  60.         pizza,
  61.         weight,
  62.         (SELECT (ARRAY_AGG("id"))[1:num_ingredients] FROM ingredient ORDER BY random()) AS ingredient_ids,
  63.         (SELECT ARRAY_AGG(random()) AS weights FROM generate_series(1, num_ingredients)) AS weights
  64.     FROM (
  65.         SELECT
  66.             "name" AS pizza,
  67.             FLOOR(random() * 5 + 8)::INT AS num_ingredients,
  68.             weight
  69.         FROM pizza 
  70.     ) AS t1
  71. )
  72.  
  73. INSERT INTO pizza_ingredient("pizza", "ingredient_id", "weight")
  74. SELECT
  75.     pizza,
  76.     UNNEST(ingredient_ids) AS ingredient_id,
  77.     1 + (UNNEST(weights) / (SELECT SUM(w) FROM UNNEST(weights) AS w) * weight)::INT AS weight
  78. FROM ingrs;
  79. -------------------
  80. WITH num_pizzas_total AS (
  81.     SELECT
  82.         "id" AS order_id,
  83.         1 + FLOOR(ABS(random() + random() + random() + random() + random() + random() + random() + random() + random() - 4.5)) AS num_pizzas
  84.     FROM "order"
  85. ),
  86.  
  87. num_each_pizzas AS (
  88.     SELECT
  89.         order_id,
  90.         UNNEST((SELECT ARRAY_AGG("name") FROM (SELECT "name" FROM pizza ORDER BY random() LIMIT num_pizzas) AS t2)) AS pizza,
  91.         UNNEST((SELECT ARRAY_AGG(FLOOR(1 / POWER(random(), 0.25))) FROM generate_series(1, num_pizzas::INT))) AS "count"
  92.     FROM num_pizzas_total
  93. )
  94.  
  95. INSERT INTO order_item
  96. SELECT
  97.     order_id,
  98.     pizza,
  99.     CASE
  100.         WHEN random() < 0.001
  101.             THEN -FLOOR(random() * 1000)
  102.         ELSE "count"
  103.     END AS "count"
  104. FROM num_each_pizzas;
  105. -------------------
  106. INSERT INTO provider("org_name", "phone_number")
  107. SELECT
  108.     UNNEST((ARRAY['ООО "Моя оборона"', 'ООО "Зеленоглазое такси"', 'ООО "ИЯИЁ Батарейка"', 'ООО "Нли Ю"', 'ООО "Паньки"', 'ООО "Какие люди"', 'ООО "Восьмиклассница"', 'ООО "Пошла родимая"', 'ООО "Паньки"'])) AS org_name,
  109.     UNNEST((
  110.         SELECT ARRAY_AGG(
  111.             '8'
  112.             ||
  113.             CAST(FLOOR(random() * 100) + 900 AS TEXT)
  114.             ||
  115.             CAST(FLOOR(random() * 9000000) + 1000000 AS TEXT))
  116.         FROM generate_series(1, 9)
  117.     )) AS phone_number;
  118. -------------------
  119. WITH ingredient_quantity AS (
  120.     SELECT
  121.         "id" AS ingredient_id,
  122.         FLOOR(random() * 5 + 2)::INT AS quantity
  123.     FROM ingredient
  124. ),
  125.  
  126. ingredient_with_provider AS (
  127.     SELECT
  128.         ingredient_id,
  129.         UNNEST((
  130.             SELECT ARRAY_AGG("id")
  131.             FROM (
  132.                 SELECT "id"
  133.                 FROM provider
  134.                 ORDER BY random()
  135.                 LIMIT quantity
  136.             ) AS t1
  137.         )) AS provider_id,
  138.         FLOOR(random() * 100 + 50) AS mean_price,
  139.         FLOOR(random() * 25) AS var_price
  140.     FROM ingredient_quantity
  141. ),
  142. ingredient_with_price_and_provider AS (
  143.     SELECT
  144.         provider_id,
  145.         ingredient_id,
  146.         FLOOR(random() * var_price + mean_price) AS price
  147.     FROM ingredient_with_provider
  148. )
  149.  
  150. INSERT INTO provider_ingredient
  151. SELECT *
  152. FROM ingredient_with_price_and_provider
Advertisement
Add Comment
Please, Sign In to add comment