Dibble is a Clojure library that intelligently, randomly seeds databases by inferencing the underlying table structure. See the docs for more more information.
(defseed people
{:database {:vendor :mysql :db "db-name" :user "user" :password "pass"} :table :people :n 200}
[:randomized :name]
[:randomized :number])
(seed-table people)
Available on Clojars:
[dibble "0.2.0-beta1"]
A few complete examples follow. Starting with the simplest case, suppose we have a MySQL table named people
:
mysql> desc people;
+--------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| name | varchar(32) | YES | | NULL | |
| number | int(11) | YES | | NULL | |
+--------+---------------+------+-----+---------+-------+
Let's seed that table:
(ns my.seeder
(:require [dibble.core :refer [defseed seed-table]]))
;;; A map that specifies the database type via :vendor and Korma connection information.
(def db {:vendor :mysql :db "db-name" :user "user" :password "pass"})
;;; Makes 50 different seeds, deleting all rows in the table before beginning (using :clean-slate).
(defseed people
{:database db :table :people :policy :clean-slate :n 50}
[:randomized :name] ;;; random 32-char string
[:randomized :number]) ;;; random 32-bit integer
(seed-table people)
Values don't have to be totally random. Dibble offers some constraints:
(defseed people
{:database db :table :people :policy :clean-slate :n 50}
[:randomized :name {:length 16}] ;;; random 16-char string
[:randomized :number {:min 5 :max 10}]) ;;; random integer between 5 and 10 inclusive
(seed-table people)
Contributions are most welcome. There's a ton of work to do, and it's fairly easy to contribute. Here's some things I'd like to have that aren't done:
- More string options (subtypes of email address, random US state, etc)
- More numeric options (prime?, symbols?, spaces? etc)
- Possibly rewrite the docs to be a little clearer?
- More database implementations (specifically Mongo)
- Better error messages
Copyright © 2012 Michael Drogalis
Distributed under the Eclipse Public License, the same as Clojure.