| 
<?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();
 }
 |