12 releases
0.2.8 | Apr 3, 2024 |
---|---|
0.2.7 | Mar 25, 2024 |
0.2.3 | May 15, 2023 |
0.2.2 | Jul 20, 2021 |
0.1.2 |
|
#633 in Database interfaces
882 downloads per month
Used in spawnflake-cli
57KB
1.5K
SLoC
Spawnflake
Spawnflake is a schema agnostic, random and/or patterns based data generator, for MySQL databases.
what's new
See CHANGELOG for updates and new features.
usage
This library works by providing a configuration file (config.json). The configuration is divided into two sections.
connection properties (mandatory)
"mysql_configuration": {
"address": "localhost",
"port": 3306,
"user": "local",
"password": "password",
"schema": "test"
}
type patterns (optional)
"types": {
"string": [
{
"name": "column_name",
"rules": []
}
],
"integer": [
{
"name": "column_name",
"rules":[]
}
],
"float": [
{
"name": "column_name",
"rules":[]
}
]
}
Rules
- Rules for numeric types and dates just desired ranges (from, to). Important!! the small values need to be first in the lists.
- Rules for strings are combinatinatory, you provide collections that are mixed and matched. i.e.
"rules": [
[
"Jo",
"Ni",
"Ste",
"Da",
"Sco",
"Ma"
],
[
"ve",
"vi",
"pha",
"ro",
"na",
"ri"
],
[
"n",
"ck",
"tt",
"d",
"than",
"na"
]
]
This could create real names like David
but also complete random combinations like Jophack
known limitations
- When handling cyclic dependencies, keys are not currently updated retrospectively. This feature is planned for a future version
- If a foreign key is unique, fewer records will be inserted into that table. Unique foreign key values are not supported yet.
- In certain cases, number validation in the configuration is not performed, records assosiated with problematic tables cloud be
- skipped
- panic
- use default values depending on a case by case basis.
support
Database support
MySQL
- supported data types and generators:
Datastore | Data type | Random | Pattern |
---|---|---|---|
Mysql | varchar | ✔️ | ✔️ |
Mysql | int | ✔️ | ✔️ |
Mysql | unsigned int | ✔️ | ✔️ |
Mysql | smallint | ✔️ | ✔️ |
Mysql | unsigned smallint | ✔️ | ✔️ |
Mysql | tinyint/unsigned tinyint | ✔️ | ✔️ |
Mysql | mediumint | ✔️ | ✔️ |
Mysql | bigint | ✔️ | ✔️ |
Mysql | unsigned bigint | ✔️ | ✔️ |
Mysql | decimal | ✔️ | ✔️ |
Mysql | float | ✔️ | ✔️ |
Mysql | double | ✔️ | ✔️ |
Mysql | bit | ✔️ | ❌ |
Mysql | time | ✔️ | ✔️ |
Mysql | timestamp | ✔️ | ✔️ |
Mysql | date | ✔️ | ✔️ |
Mysql | year | ✔️ | ❌ |
Mysql | char | ✔️ | ❌ |
Mysql | binary | ✔️ | ❌ |
Mysql | text | ✔️ | ❌ |
Mysql | longtext | ✔️ | ❌ |
Mysql | blob/longblob | ✔️ | ❌ |
Mysql | enum | ❌ | ✔️ |
CLI
The main project in this repository is a library, but there is also a CLI version available published in crates.io.
The code for the CLI is available at ./cli
. Check README for usage and more information.
Running the example
Running the example requires running docker-compose
inside the test
folder. Make sure you have
- Docker
- An SQL client/ or a way to access the MySQL cli to view the generated records
To run the example execute
cargo run --example generate_mysql
Contributing
You are more than welcome. All you need to do is a pull request
Dependencies
~17–33MB
~551K SLoC