<?php
use eftec\chaosmachineone\ChaosMachineOne;
use eftec\PdoOne;
@set_time_limit(200);
include "../vendor/autoload.php";
include "../lib/en_US/Person.php";
include "../lib/en_US/Products.php";
$sqlCreateCustomers="CREATE TABLE `customers` (
`idcustomer` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NULL,
`datecreation` TIMESTAMP NULL,
PRIMARY KEY (`idcustomer`))";
$sqlCreateProducts="CREATE TABLE `products` (
`idproduct` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NULL,
`price` DECIMAL(9,2) NULL,
PRIMARY KEY (`idproduct`))";
$sqlCreateSales="CREATE TABLE `sales` (
`idsales` INT NOT NULL AUTO_INCREMENT,
`idproduct` INT NULL,
`idcustomer` INT NULL,
`date` TIMESTAMP NULL,
`amount` INT NULL,
PRIMARY KEY (`idsales`))";
$db=new PdoOne("mysql","localhost","root","abc.123","chaosdb");
$db->open();
$db->logLevel=3;
$customers=false;
$products=false;
$sales=true;
try {
$db->runRawQuery($sqlCreateCustomers);
$customers=true;
} catch(Exception $ex) {
echo "Warning: unable to create table customers or table already exists<br>";
}
try {
$db->runRawQuery($sqlCreateProducts);
$products=true;
} catch(Exception $ex) {
echo "Warning: unable to create table products or table already exists<br>";
}
try {
$db->runRawQuery($sqlCreateSales);
$sales=true;
} catch(Exception $ex) {
echo "Warning: unable to create table sales or table already exists<br>";
}
if($customers) {
$chaos = new ChaosMachineOne();
$chaos->debugMode=true;
$chaos->table('customers', 1000)
->setDb($db)
->field('fixedid','int','local',5)
->field('idcustomer', 'int','identity', 0, 0, 1000)
->field('name', 'string', 'database', '', 0, 45)
->retry()
->field('datecreation', 'datetime', 'database', $chaos->now())
//->setArray('namemale', PersonContainer::$firstNameMale)
//->setArray('lastname', PersonContainer::$lastName)
//->setArrayFromDBTable('namemale','sakila.actor','first_name')
->setArrayFromDBQuery('namemale','select first_name from sakila.actor')
->setArrayFromDBQuery('lastname','select last_name from sakila.actor where actor_id={{fixedid}}',[1])
//->setArrayFromDBQuery('lastname','select last_name from sakila.actor where actor_id>?',[1],['i',1])
->setArray('namefemale', PersonContainer::$firstNameFemale)
->setFormat('fullnameformat', ['{{namemale}} {{lastname}}', '{{namefemale}} {{lastname}}'])
->gen('when always set datecreation.speed=random(5000,86400)')
->gen('when always set name.value=randomformat("fullnameformat")')
->run(true)
//->insert(true)
->stat()
->show(['name', 'datecreation']);
die(1);
}
if($products) {
$chaos = new ChaosMachineOne();
$chaos->table('products', count(Products::$softDrink))
->setDb($db)
->field('idproduct', 'int', 'identity', 0, 0, 1000)
->field('name', 'string', 'database', '', 0, 45)
->field('price', 'decimal', 'database', 2, 0, 100)
->setArray('productname', Products::$softDrink)
->gen('when always set price.value=random(0.5,20,0.1)')
->gen('when always set name.value=arrayindex("productname")')
->insert(true)
->stat();
//->show(['name', 'price']);
//->insert();
}
if($sales || 1==1 ) {
$countProducts=count(Products::$softDrink);
$chaos = new ChaosMachineOne();
$chaos->table('sales', 'products')
->setDb($db)
->field('idsales', 'int', 'identity', 0)
->field('idproduct', 'int', 'database', 1)
->field('idcustomer', 'int', 'database', 1)
->field('amount', 'int', 'database', 1, 1, 100)->isNullable(true)
->field('date', 'datetime', 'database', $chaos->now())
->gen('when date.weekday>=1 and date.weekday<=5 then date.speed=random(5000,50000)') // workingdays are slow
->gen('when date.weekday>=6 then date.speed=random(3000,10000)') // the weekend sells more
->gen('when date.hour>18 then date.skip="day" and date.add="8h"') // if night then we jump to the next day (8am), i.e
->gen('when always then idproduct.value=random(1,$countProducts)
and idcustomer.value=random(1,1000) and amount.value=random(1,10)')
->gen('when always set amount.value=randomprop(null,amount,50,50)') // @see \eftec\chaosmachineone\ChaosMachineOne::randomprop
->showTable(['idproduct','idcustomer','amount','date','origin_name'])
->run()
//->insert(true)
->stat();
}
|