|
#!/usr/bin/env perl
my $sql = SQL::Engine->new(
grammar => 'mysql' ,
validator => undef ,
);
my $testdb = Test::DB->new;
my $mysql = $testdb ->create(
database => 'mysql' ,
);
my $dbh = $mysql ->dbh;
say "using @{[$mysql->dsn]}\n" ;
$sql ->database_create(
name => 'todoapp'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->database_drop(
name => 'todoapp'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->schema_create(
name => 'private' ,
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->schema_drop(
name => 'private' ,
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->schema_create(
name => 'private' ,
);
$sql ->schema_rename(
name => {
old => 'private' ,
new => 'restricted'
}
);
$sql ->schema_drop(
name => 'restricted' ,
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[NO SUPPORT] ' , $op ->statement;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
}
]
);
$sql ->table_drop(
name => 'users' ,
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'created' ,
type => 'datetime' ,
},
{
name => 'updated' ,
type => 'datetime' ,
},
{
name => 'deleted' ,
type => 'datetime' ,
},
]
);
$sql ->table_drop(
name => 'users' ,
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'created' ,
type => 'datetime' ,
},
{
name => 'updated' ,
type => 'datetime' ,
},
{
name => 'deleted' ,
type => 'datetime' ,
},
],
temp => 1
);
$sql ->table_drop(
name => 'users' ,
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
}
]
);
$sql ->table_create(
name => 'people' ,
query => {
select => {
from => {
table => 'users'
},
columns => [
{
column => '*'
}
]
}
}
);
$sql ->table_drop(
name => 'people' ,
);
$sql ->table_drop(
name => 'users' ,
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'people' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
}
]
);
$sql ->table_drop(
name => 'people'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'people' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
}
]
);
$sql ->table_drop(
name => 'people' ,
condition => 'cascade'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'peoples' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
}
]
);
$sql ->table_rename(
name => {
old => 'peoples' ,
new => 'people'
}
);
$sql ->table_drop(
name => 'people' ,
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
}
]
);
$sql ->column_create(
for => {
table => 'users'
},
column => {
name => 'accessed' ,
type => 'datetime'
}
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
}
]
);
$sql ->column_create(
for => {
table => 'users'
},
column => {
name => 'accessed' ,
type => 'datetime' ,
nullable => 1
}
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
}
]
);
$sql ->column_create(
for => {
table => 'users'
},
column => {
name => 'accessed' ,
type => 'datetime' ,
nullable => 1,
default => {
function => [ 'now' ]
}
}
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'name' ,
type => 'string'
}
]
);
$sql ->column_create(
for => {
table => 'users'
},
column => {
name => 'ref' ,
type => 'uuid' ,
primary => 1
}
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
}
]
);
$sql ->column_create(
for => {
table => 'users'
},
column => {
name => 'accessed' ,
type => 'datetime' ,
nullable => 1,
default => {
function => [ 'now' ]
}
}
);
$sql ->column_drop(
table => 'users' ,
column => 'accessed'
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
}
]
);
$sql ->column_create(
for => {
table => 'users'
},
column => {
name => 'accessed' ,
type => 'datetime' ,
nullable => 1,
default => {
function => [ 'now' ]
}
}
);
$sql ->column_rename(
for => {
table => 'users'
},
name => {
old => 'accessed' ,
new => 'accessed_at'
}
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'created' ,
type => 'datetime' ,
},
{
name => 'updated' ,
type => 'datetime' ,
},
{
name => 'deleted' ,
type => 'datetime' ,
},
]
);
$sql ->column_change(
for => {
table => 'users'
},
column => {
name => 'deleted' ,
type => 'datetime' ,
nullable => 1
}
);
$sql ->table_drop(
name => 'users'
);
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'created' ,
type => 'datetime' ,
},
{
name => 'updated' ,
type => 'datetime' ,
},
{
name => 'deleted' ,
type => 'datetime' ,
},
]
);
$sql ->column_change(
for => {
table => 'users'
},
column => {
name => 'deleted' ,
type => 'datetime' ,
default => { function => [ 'now' ] }
}
);
$sql ->table_drop(
name => 'users'
);
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'created' ,
type => 'datetime' ,
},
{
name => 'updated' ,
type => 'datetime' ,
},
{
name => 'deleted' ,
type => 'datetime' ,
},
]
);
$sql ->column_change(
for => {
table => 'users'
},
column => {
name => 'deleted' ,
type => 'datetime' ,
default => { function => [ 'now' ] },
nullable => 1,
}
);
$sql ->table_drop(
name => 'users'
);
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'profile_id' ,
type => 'integer'
}
]
);
$sql ->table_create(
name => 'profiles' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
}
]
);
$sql ->constraint_create(
source => {
table => 'users' ,
column => 'profile_id'
},
target => {
table => 'profiles' ,
column => 'id'
}
);
$sql ->table_drop(
name => 'users'
);
$sql ->table_drop(
name => 'profiles'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'profile_id' ,
type => 'integer'
}
]
);
$sql ->table_create(
name => 'profiles' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
}
]
);
$sql ->constraint_create(
source => {
table => 'users' ,
column => 'profile_id'
},
target => {
table => 'profiles' ,
column => 'id'
},
name => 'user_profile_id'
);
$sql ->table_drop(
name => 'users'
);
$sql ->table_drop(
name => 'profiles'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'profile_id' ,
type => 'integer'
}
]
);
$sql ->table_create(
name => 'profiles' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
}
]
);
$sql ->constraint_create(
on => {
update => 'cascade' ,
delete => 'cascade'
},
source => {
table => 'users' ,
column => 'profile_id'
},
target => {
table => 'profiles' ,
column => 'id'
},
name => 'user_profile_id'
);
$sql ->table_drop(
name => 'users'
);
$sql ->table_drop(
name => 'profiles'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'profile_id' ,
type => 'integer'
}
]
);
$sql ->table_create(
name => 'profiles' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
}
]
);
$sql ->constraint_create(
source => {
table => 'users' ,
column => 'profile_id'
},
target => {
table => 'profiles' ,
column => 'id'
},
);
$sql ->constraint_drop(
source => {
table => 'users' ,
column => 'profile_id'
},
target => {
table => 'profiles' ,
column => 'id'
}
);
$sql ->table_drop(
name => 'users'
);
$sql ->table_drop(
name => 'profiles'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'profile_id' ,
type => 'integer'
}
]
);
$sql ->table_create(
name => 'profiles' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
}
]
);
$sql ->constraint_create(
on => {
update => 'cascade' ,
delete => 'cascade'
},
source => {
table => 'users' ,
column => 'profile_id'
},
target => {
table => 'profiles' ,
column => 'id'
},
name => 'user_profile_id'
);
$sql ->constraint_drop(
source => {
table => 'users' ,
column => 'profile_id'
},
target => {
table => 'profiles' ,
column => 'id'
},
name => 'user_profile_id'
);
$sql ->table_drop(
name => 'users'
);
$sql ->table_drop(
name => 'profiles'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'number' ,
primary => 1
},
{
name => 'name' ,
type => 'string'
}
]
);
$sql ->index_create(
for => {
table => 'users'
},
columns => [
{
column => 'name'
}
]
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'number' ,
primary => 1
},
{
name => 'email' ,
type => 'string'
}
]
);
$sql ->index_create(
for => {
table => 'users'
},
columns => [
{
column => 'email'
}
],
unique => 1
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'number' ,
primary => 1
},
{
name => 'name' ,
type => 'string'
}
]
);
$sql ->index_create(
for => {
table => 'users'
},
columns => [
{
column => 'name'
}
],
name => 'user_name_index'
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'number' ,
primary => 1
},
{
name => 'email' ,
type => 'string'
}
]
);
$sql ->index_create(
for => {
table => 'users'
},
columns => [
{
column => 'email'
}
],
name => 'user_email_unique' ,
unique => 1
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'number' ,
primary => 1
},
{
name => 'email' ,
type => 'string'
},
{
name => 'login' ,
type => 'string'
}
]
);
$sql ->index_create(
for => {
table => 'users'
},
columns => [
{
column => 'login'
},
{
column => 'email'
}
]
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'number' ,
primary => 1
},
{
name => 'name' ,
type => 'string'
},
]
);
$sql ->index_create(
for => {
table => 'users'
},
columns => [
{
column => 'name'
},
]
);
$sql ->index_drop(
for => {
table => 'users'
},
columns => [
{
column => 'name'
}
]
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'number' ,
primary => 1
},
{
name => 'email' ,
type => 'string'
},
]
);
$sql ->index_create(
for => {
table => 'users'
},
columns => [
{
column => 'email'
},
],
unique => 1
);
$sql ->index_drop(
for => {
table => 'users'
},
columns => [
{
column => 'email'
}
],
unique => 1
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'number' ,
primary => 1
},
{
name => 'name' ,
type => 'string'
},
]
);
$sql ->index_create(
for => {
table => 'users'
},
columns => [
{
column => 'name'
},
],
name => 'user_name_index'
);
$sql ->index_drop(
for => {
table => 'users'
},
columns => [
{
column => 'name'
}
],
name => 'user_name_index'
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->transaction(
queries => [
{
'table-create' => {
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
}
]
}
},
{
'table-drop' => {
name => 'users' ,
safe => 1
}
}
]
);
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$sql ->transaction(
mode => [
'with' ,
'consistent' ,
'snapshot'
],
queries => [
{
'table-create' => {
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'created' ,
type => 'datetime' ,
},
{
name => 'updated' ,
type => 'datetime' ,
},
{
name => 'deleted' ,
type => 'datetime' ,
},
]
}
},
{
'table-drop' => {
name => 'users' ,
safe => 1
}
}
]
);
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'created' ,
type => 'datetime' ,
},
{
name => 'updated' ,
type => 'datetime' ,
},
{
name => 'deleted' ,
type => 'datetime' ,
},
]
);
$sql ->view_create(
name => 'active_users' ,
query => {
select => {
from => {
table => 'users'
},
columns => [
{
column => '*'
}
],
where => [
{
'not-null' => {
column => 'deleted'
}
}
]
}
}
);
$sql ->view_drop(
name => 'active_users'
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'created' ,
type => 'datetime' ,
},
{
name => 'updated' ,
type => 'datetime' ,
},
{
name => 'deleted' ,
type => 'datetime' ,
},
]
);
$sql ->view_create(
name => 'active_users' ,
query => {
select => {
from => {
table => 'users'
},
columns => [
{
column => '*'
}
],
where => [
{
'not-null' => {
column => 'deleted'
}
}
]
}
},
temp => 1
);
$sql ->view_drop(
name => 'active_users'
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'created' ,
type => 'datetime' ,
},
{
name => 'updated' ,
type => 'datetime' ,
},
{
name => 'deleted' ,
type => 'datetime' ,
},
]
);
$sql ->view_create(
name => 'active_users' ,
query => {
select => {
from => {
table => 'users'
},
columns => [
{
column => '*'
}
],
where => [
{
'not-null' => {
column => 'deleted'
}
}
]
}
}
);
$sql ->view_drop(
name => 'active_users'
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
increment => 1,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'created' ,
type => 'timestamp' ,
},
{
name => 'updated' ,
type => 'timestamp' ,
},
{
name => 'deleted' ,
type => 'timestamp' ,
},
]
);
$sql ->insert(
into => {
table => 'users'
},
values => [
{
value => undef
},
{
value => 'Rob Zombie'
},
{
value => {
function => [ 'now' ]
}
},
{
value => {
function => [ 'now' ]
}
},
{
value => {
function => [ 'now' ]
}
}
]
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
increment => 1,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'created' ,
type => 'datetime' ,
},
{
name => 'updated' ,
type => 'datetime' ,
},
{
name => 'deleted' ,
type => 'datetime' ,
},
]
);
$sql ->insert(
into => {
table => 'users'
},
columns => [
{
column => 'id'
},
{
column => 'name'
},
{
column => 'created'
},
{
column => 'updated'
},
{
column => 'deleted'
}
],
values => [
{
value => undef
},
{
value => 'Rob Zombie'
},
{
value => {
function => [ 'now' ]
}
},
{
value => {
function => [ 'now' ]
}
},
{
value => {
function => [ 'now' ]
}
}
]
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'created' ,
type => 'datetime' ,
},
{
name => 'updated' ,
type => 'datetime' ,
},
{
name => 'deleted' ,
type => 'datetime' ,
},
]
);
$sql ->insert(
into => {
table => 'users'
},
default => 1
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[NO SUPPORT] ' , $op ->statement;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'created' ,
type => 'datetime' ,
},
{
name => 'updated' ,
type => 'datetime' ,
},
{
name => 'deleted' ,
type => 'datetime' ,
},
]
);
$sql ->table_create(
name => 'people' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'user_id' ,
type => 'integer' ,
},
]
);
$sql ->insert(
into => {
table => 'people'
},
columns => [
{
column => 'name'
},
{
column => 'user_id'
}
],
query => {
select => {
from => {
table => 'users'
},
columns => [
{
column => 'name'
},
{
column => 'id'
}
]
}
}
);
$sql ->table_drop(
name => 'users'
);
$sql ->table_drop(
name => 'people'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'created' ,
type => 'datetime' ,
},
{
name => 'updated' ,
type => 'datetime' ,
},
{
name => 'deleted' ,
type => 'datetime' ,
},
]
);
$sql ->table_create(
name => 'people' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'user_id' ,
type => 'integer' ,
},
]
);
$sql ->insert(
into => {
table => 'people'
},
columns => [
{
column => 'name'
},
{
column => 'user_id'
}
],
query => {
select => {
from => {
table => 'users'
},
columns => [
{
column => 'name'
},
{
column => 'id'
}
],
where => [
{
'not-null' => {
column => 'deleted'
}
}
]
}
}
);
$sql ->table_drop(
name => 'users'
);
$sql ->table_drop(
name => 'people'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'created' ,
type => 'datetime' ,
},
{
name => 'updated' ,
type => 'datetime' ,
},
{
name => 'deleted' ,
type => 'datetime' ,
},
]
);
$sql ->update(
for => {
table => 'users'
},
columns => [
{
column => 'updated' ,
value => { function => [ 'now' ] }
}
]
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'created' ,
type => 'datetime' ,
},
{
name => 'updated' ,
type => 'datetime' ,
},
{
name => 'deleted' ,
type => 'datetime' ,
},
]
);
$sql ->update(
for => {
table => 'users'
},
columns => [
{
column => 'name' ,
value => {
function => [ 'concat' , '[deleted]' , ' ' , { column => 'name' }]
}
}
],
where => [
{
'not-null' => {
column => 'deleted'
}
}
]
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'created' ,
type => 'datetime' ,
},
{
name => 'updated' ,
type => 'datetime' ,
},
{
name => 'deleted' ,
type => 'datetime' ,
},
]
);
$sql ->table_create(
name => 'tasklists' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'user_id' ,
type => 'integer'
},
{
name => 'name' ,
type => 'text' ,
},
]
);
$sql ->update(
for => {
table => 'users' ,
alias => 'u1'
},
columns => [
{
column => 'updated' ,
alias => 'u1' ,
value => { function => [ 'now' ] }
}
],
where => [
{
in => [
{
column => 'id' ,
alias => 'u1'
},
{
subquery => {
select => {
from => {
table => 'users' ,
alias => 'u2'
},
columns => [
{
column => 'id' ,
alias => 'u2'
}
],
joins => [
{
with => {
table => 'tasklists' ,
alias => 't1'
},
having => [
{
eq => [
{
column => 'id' ,
alias => 'u2'
},
{
column => 'user_id' ,
alias => 't1'
}
]
}
]
}
],
where => [
{
eq => [
{
column => 'id' ,
alias => 'u2'
},
{
binding => 'user_id'
}
]
}
]
}
}
}
]
}
]
);
$sql ->table_drop(
name => 'users'
);
$sql ->table_drop(
name => 'tasklists'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[NO SUPPORT] ' , $op ->statement;
}
$dbh ->rollback;
$sql ->table_create(
name => 'tasklists' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'user_id' ,
type => 'integer'
},
{
name => 'name' ,
type => 'text' ,
},
]
);
$sql -> delete (
from => {
table => 'tasklists'
}
);
$sql ->table_drop(
name => 'tasklists'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'tasklists' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'user_id' ,
type => 'integer'
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'deleted' ,
type => 'datetime' ,
},
]
);
$sql -> delete (
from => {
table => 'tasklists'
},
where => [
{
'not-null' => {
column => 'deleted'
}
}
]
);
$sql ->table_drop(
name => 'tasklists'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'created' ,
type => 'datetime' ,
},
{
name => 'updated' ,
type => 'datetime' ,
},
{
name => 'deleted' ,
type => 'datetime' ,
},
]
);
$sql -> select (
from => {
table => 'users'
},
columns => [
{
column => '*'
}
]
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'created' ,
type => 'datetime' ,
},
{
name => 'updated' ,
type => 'datetime' ,
},
{
name => 'deleted' ,
type => 'datetime' ,
},
]
);
$sql -> select (
from => {
table => 'users'
},
columns => [
{
column => 'id'
},
{
column => 'name'
}
]
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'created' ,
type => 'datetime' ,
},
{
name => 'updated' ,
type => 'datetime' ,
},
{
name => 'deleted' ,
type => 'datetime' ,
},
]
);
$sql -> select (
from => {
table => 'users'
},
columns => [
{
column => '*'
}
],
where => [
{
eq => [{ column => 'id' }, { binding => 'id' }]
}
]
);
$sql ->table_drop(
name => 'users'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'users' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'name' ,
type => 'text' ,
},
{
name => 'created' ,
type => 'datetime' ,
},
{
name => 'updated' ,
type => 'datetime' ,
},
{
name => 'deleted' ,
type => 'datetime' ,
},
]
);
$sql ->table_create(
name => 'tasklists' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'user_id' ,
type => 'integer'
},
{
name => 'name' ,
type => 'text' ,
},
]
);
$sql -> select (
from => {
table => 'users' ,
alias => 'u'
},
columns => [
{
column => '*' ,
alias => 'u'
}
],
joins => [
{
with => {
table => 'tasklists' ,
alias => 't'
},
having => [
{
eq => [
{
column => 'id' ,
alias => 'u'
},
{
column => 'user_id' ,
alias => 't'
}
]
}
]
}
],
where => [
{
eq => [
{
column => 'id' ,
alias => 'u'
},
{
binding => 'id'
}
]
}
]
);
$sql ->table_drop(
name => 'users'
);
$sql ->table_drop(
name => 'tasklists'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'tasklists' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'user_id' ,
type => 'integer'
},
{
name => 'name' ,
type => 'text' ,
},
]
);
$sql -> select (
from => {
table => 'tasklists'
},
columns => [
{
function => [ 'count' , { column => 'user_id' }]
}
],
group_by => [
{
column => 'user_id'
}
]
);
$sql ->table_drop(
name => 'tasklists'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'tasklists' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'user_id' ,
type => 'integer'
},
{
name => 'name' ,
type => 'text' ,
},
]
);
$sql -> select (
from => {
table => 'tasklists'
},
columns => [
{
function => [ 'count' , { column => 'user_id' }]
}
],
group_by => [
{
column => 'user_id'
}
],
having => [
{
gt => [
{
function => [ 'count' , { column => 'user_id' }]
},
1
]
}
]
);
$sql ->table_drop(
name => 'tasklists'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'tasklists' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'user_id' ,
type => 'integer'
},
{
name => 'name' ,
type => 'text' ,
},
]
);
$sql -> select (
from => {
table => 'tasklists'
},
columns => [
{
column => '*'
}
],
order_by => [
{
column => 'user_id'
}
]
);
$sql ->table_drop(
name => 'tasklists'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'tasklists' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'user_id' ,
type => 'integer'
},
{
name => 'name' ,
type => 'text' ,
},
]
);
$sql -> select (
from => {
table => 'tasklists'
},
columns => [
{
column => '*'
}
],
order_by => [
{
column => 'user_id'
},
{
column => 'id' ,
sort => 'desc'
}
]
);
$sql ->table_drop(
name => 'tasklists'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'tasks' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'user_id' ,
type => 'integer'
},
{
name => 'tasklist_id' ,
type => 'integer'
},
{
name => 'name' ,
type => 'text' ,
},
]
);
$sql -> select (
from => {
table => 'tasks'
},
columns => [
{
column => '*'
}
],
rows => {
limit => 5
}
);
$sql ->table_drop(
name => 'tasks'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'tasks' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'user_id' ,
type => 'integer'
},
{
name => 'tasklist_id' ,
type => 'integer'
},
{
name => 'name' ,
type => 'text' ,
},
]
);
$sql -> select (
from => {
table => 'tasks'
},
columns => [
{
column => '*'
}
],
rows => {
limit => 5,
offset => 1
}
);
$sql ->table_drop(
name => 'tasks'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
$sql ->table_create(
name => 'tasklists' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'user_id' ,
type => 'integer'
},
{
name => 'name' ,
type => 'text' ,
},
]
);
$sql ->table_create(
name => 'tasks' ,
columns => [
{
name => 'id' ,
type => 'integer' ,
primary => 1
},
{
name => 'user_id' ,
type => 'integer'
},
{
name => 'tasklist_id' ,
type => 'integer'
},
{
name => 'name' ,
type => 'text' ,
},
]
);
$sql -> select (
from => [
{
table => 'tasklists' ,
alias => 't1'
},
{
table => 'tasks' ,
alias => 't2'
}
],
columns => [
{
column => '*' ,
alias => 't1'
},
{
column => '*' ,
alias => 't1'
}
],
where => [
{
eq => [
{
column => 'tasklist_id' ,
alias => 't2'
},
{
column => 'id' ,
alias => 't1'
}
]
}
]
);
$sql ->table_drop(
name => 'tasklists'
);
$sql ->table_drop(
name => 'tasks'
);
$dbh ->begin_work;
while ( my $op = $sql ->operations->pull) {
say '[MYSQL] ' , $op ->statement;
$dbh ->prepare( $op ->statement)->execute;
}
$dbh ->rollback;
|