#!/usr/bin/env perl
my
$sql
= SQL::Engine->new(
grammar
=>
'sqlite'
,
validator
=>
undef
,
);
$sql
->
select
(
from
=> {
table
=>
'users'
},
columns
=> [
{
column
=>
'*'
}
]
);
say
$sql
->operations->pull->statement;
$sql
->
select
(
from
=> {
table
=>
'users'
},
columns
=> [
{
column
=>
'id'
},
{
column
=>
'name'
}
]
);
say
$sql
->operations->pull->statement;
$sql
->
select
(
from
=> {
table
=>
'users'
},
columns
=> [
{
column
=>
'*'
}
],
where
=> [
{
eq
=> [{
column
=>
'id'
}, {
binding
=>
'id'
}]
}
]
);
say
$sql
->operations->pull->statement;
$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'
}
]
}
]
);
say
$sql
->operations->pull->statement;
$sql
->
select
(
from
=> {
table
=>
'tasklists'
},
columns
=> [
{
function
=> [
'count'
, {
column
=>
'user_id'
}]
}
],
group_by
=> [
{
column
=>
'user_id'
}
]
);
say
$sql
->operations->pull->statement;
$sql
->
select
(
from
=> {
table
=>
'tasklists'
},
columns
=> [
{
function
=> [
'count'
, {
column
=>
'user_id'
}]
}
],
group_by
=> [
{
column
=>
'user_id'
}
],
having
=> [
{
gt
=> [
{
function
=> [
'count'
, {
column
=>
'user_id'
}]
},
1
]
}
]
);
say
$sql
->operations->pull->statement;
$sql
->
select
(
from
=> {
table
=>
'tasklists'
},
columns
=> [
{
column
=>
'*'
}
],
order_by
=> [
{
column
=>
'user_id'
}
]
);
say
$sql
->operations->pull->statement;
$sql
->
select
(
from
=> {
table
=>
'tasklists'
},
columns
=> [
{
column
=>
'*'
}
],
order_by
=> [
{
column
=>
'user_id'
},
{
column
=>
'id'
,
sort
=>
'desc'
}
]
);
say
$sql
->operations->pull->statement;
$sql
->
select
(
from
=> {
table
=>
'tasks'
},
columns
=> [
{
column
=>
'*'
}
],
rows
=> {
limit
=> 5
}
);
say
$sql
->operations->pull->statement;
$sql
->
select
(
from
=> {
table
=>
'tasks'
},
columns
=> [
{
column
=>
'*'
}
],
rows
=> {
limit
=> 5,
offset
=> 1
}
);
say
$sql
->operations->pull->statement;
$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'
}
]
}
]
);
say
$sql
->operations->pull->statement;
$sql
->insert(
into
=> {
table
=>
'users'
},
values
=> [
{
value
=>
undef
},
{
value
=>
'Rob Zombie'
},
{
value
=> {
function
=> [
'now'
]
}
},
{
value
=> {
function
=> [
'now'
]
}
},
{
value
=> {
function
=> [
'now'
]
}
}
]
);
say
$sql
->operations->pull->statement;
$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'
]
}
}
]
);
say
$sql
->operations->pull->statement;
$sql
->insert(
into
=> {
table
=>
'users'
},
default
=> 1
);
say
$sql
->operations->pull->statement;
$sql
->insert(
into
=> {
table
=>
'users'
},
columns
=> [
{
column
=>
'name'
},
{
column
=>
'user_id'
}
],
query
=> {
select
=> {
from
=> {
table
=>
'users'
},
columns
=> [
{
column
=>
'name'
},
{
column
=>
'id'
}
]
}
}
);
say
$sql
->operations->pull->statement;
$sql
->insert(
into
=> {
table
=>
'users'
},
columns
=> [
{
column
=>
'name'
},
{
column
=>
'user_id'
}
],
query
=> {
select
=> {
from
=> {
table
=>
'users'
},
columns
=> [
{
column
=>
'name'
},
{
column
=>
'id'
}
],
where
=> [
{
'not-null'
=> {
column
=>
'deleted'
}
}
]
}
}
);
say
$sql
->operations->pull->statement;
$sql
->update(
for
=> {
table
=>
'users'
},
columns
=> [
{
column
=>
'updated'
,
value
=> {
function
=> [
'now'
] }
}
]
);
say
$sql
->operations->pull->statement;
$sql
->update(
for
=> {
table
=>
'users'
},
columns
=> [
{
column
=>
'name'
,
value
=> {
function
=> [
'concat'
,
'[deleted]'
,
' '
, {
column
=>
'name'
}] }
}
],
where
=> [
{
'not-null'
=> {
column
=>
'deleted'
}
}
]
);
say
$sql
->operations->pull->statement;
$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'
}
]
}
]
}
}
}
]
}
]
);
say
$sql
->operations->pull->statement;
$sql
->
delete
(
from
=> {
table
=>
'tasklists'
}
);
say
$sql
->operations->pull->statement;
$sql
->
delete
(
from
=> {
table
=>
'tasklists'
},
where
=> [
{
'not-null'
=> {
column
=>
'deleted'
}
}
]
);
say
$sql
->operations->pull->statement;
$sql
->column_change(
for
=> {
table
=>
'users'
},
column
=> {
name
=>
'accessed'
,
type
=>
'datetime'
,
nullable
=> 1
}
);
while
(
my
$op
=
$sql
->operations->pull) {
say
$op
->statement;
}
$sql
->column_change(
for
=> {
table
=>
'users'
},
column
=> {
name
=>
'accessed'
,
type
=>
'datetime'
,
default
=> {
function
=> [
'now'
] }
}
);
while
(
my
$op
=
$sql
->operations->pull) {
say
$op
->statement;
}
$sql
->column_change(
for
=> {
table
=>
'users'
},
column
=> {
name
=>
'accessed'
,
type
=>
'datetime'
,
default
=> {
function
=> [
'now'
] },
nullable
=> 1,
}
);
while
(
my
$op
=
$sql
->operations->pull) {
say
$op
->statement;
}
$sql
->column_create(
for
=> {
table
=>
'users'
},
column
=> {
name
=>
'accessed'
,
type
=>
'datetime'
}
);
say
$sql
->operations->pull->statement;
$sql
->column_create(
for
=> {
table
=>
'users'
},
column
=> {
name
=>
'accessed'
,
type
=>
'datetime'
,
nullable
=> 1
}
);
say
$sql
->operations->pull->statement;
$sql
->column_create(
for
=> {
table
=>
'users'
},
column
=> {
name
=>
'accessed'
,
type
=>
'datetime'
,
nullable
=> 1,
default
=> {
function
=> [
'now'
]
}
}
);
say
$sql
->operations->pull->statement;
$sql
->column_create(
for
=> {
table
=>
'users'
},
column
=> {
name
=>
'ref'
,
type
=>
'uuid'
,
primary
=> 1
}
);
say
$sql
->operations->pull->statement;
$sql
->column_drop(
table
=>
'users'
,
column
=>
'accessed'
);
say
$sql
->operations->pull->statement;
$sql
->column_rename(
for
=> {
table
=>
'users'
},
name
=> {
old
=>
'accessed'
,
new
=>
'accessed_at'
}
);
say
$sql
->operations->pull->statement;
$sql
->constraint_create(
source
=> {
table
=>
'users'
,
column
=>
'profile_id'
},
target
=> {
table
=>
'profiles'
,
column
=>
'id'
}
);
say
$sql
->operations->pull->statement;
$sql
->constraint_create(
source
=> {
table
=>
'users'
,
column
=>
'profile_id'
},
target
=> {
table
=>
'profiles'
,
column
=>
'id'
},
name
=>
'user_profile_id'
);
say
$sql
->operations->pull->statement;
$sql
->constraint_create(
on
=> {
update
=>
'cascade'
,
delete
=>
'cascade'
},
source
=> {
table
=>
'users'
,
column
=>
'profile_id'
},
target
=> {
table
=>
'profiles'
,
column
=>
'id'
},
name
=>
'user_profile_id'
);
say
$sql
->operations->pull->statement;
$sql
->constraint_drop(
source
=> {
table
=>
'users'
,
column
=>
'profile_id'
},
target
=> {
table
=>
'profiles'
,
column
=>
'id'
}
);
say
$sql
->operations->pull->statement;
$sql
->constraint_drop(
source
=> {
table
=>
'users'
,
column
=>
'profile_id'
},
target
=> {
table
=>
'profiles'
,
column
=>
'id'
},
name
=>
'user_profile_id'
);
say
$sql
->operations->pull->statement;
$sql
->database_create(
name
=>
'todoapp'
);
say
$sql
->operations->pull->statement;
$sql
->database_drop(
name
=>
'todoapp'
);
say
$sql
->operations->pull->statement;
$sql
->index_create(
for
=> {
table
=>
'users'
},
columns
=> [
{
column
=>
'name'
}
]
);
say
$sql
->operations->pull->statement;
$sql
->index_create(
for
=> {
table
=>
'users'
},
columns
=> [
{
column
=>
'email'
}
],
unique
=> 1
);
say
$sql
->operations->pull->statement;
$sql
->index_create(
for
=> {
table
=>
'users'
},
columns
=> [
{
column
=>
'name'
}
],
name
=>
'user_name_index'
);
say
$sql
->operations->pull->statement;
$sql
->index_create(
for
=> {
table
=>
'users'
},
columns
=> [
{
column
=>
'email'
}
],
name
=>
'user_email_unique'
,
unique
=> 1
);
say
$sql
->operations->pull->statement;
$sql
->index_create(
for
=> {
table
=>
'users'
},
columns
=> [
{
column
=>
'login'
},
{
column
=>
'email'
}
]
);
say
$sql
->operations->pull->statement;
$sql
->index_drop(
for
=> {
table
=>
'users'
},
columns
=> [
{
column
=>
'name'
}
]
);
say
$sql
->operations->pull->statement;
$sql
->index_drop(
for
=> {
table
=>
'users'
},
columns
=> [
{
column
=>
'email'
}
],
unique
=> 1
);
say
$sql
->operations->pull->statement;
$sql
->index_drop(
for
=> {
table
=>
'users'
},
columns
=> [
{
column
=>
'name'
}
],
name
=>
'user_email_unique'
);
say
$sql
->operations->pull->statement;
$sql
->schema_create(
name
=>
'private'
,
);
say
$sql
->operations->pull->statement;
$sql
->schema_drop(
name
=>
'private'
,
);
say
$sql
->operations->pull->statement;
$sql
->schema_rename(
name
=> {
old
=>
'private'
,
new
=>
'restricted'
}
);
say
$sql
->operations->pull->statement;
$sql
->table_create(
name
=>
'users'
,
columns
=> [
{
name
=>
'id'
,
type
=>
'integer'
,
primary
=> 1
}
]
);
say
$sql
->operations->pull->statement;
$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'
,
},
]
);
say
$sql
->operations->pull->statement;
$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
);
say
$sql
->operations->pull->statement;
$sql
->table_create(
name
=>
'people'
,
query
=> {
select
=> {
from
=> {
table
=>
'users'
},
columns
=> [
{
column
=>
'*'
}
]
}
}
);
say
$sql
->operations->pull->statement;
$sql
->table_drop(
name
=>
'people'
);
say
$sql
->operations->pull->statement;
$sql
->table_drop(
name
=>
'people'
,
condition
=>
'cascade'
);
say
$sql
->operations->pull->statement;
$sql
->table_rename(
name
=> {
old
=>
'peoples'
,
new
=>
'people'
}
);
say
$sql
->operations->pull->statement;
$sql
->transaction(
queries
=> [
{
'table-create'
=> {
name
=>
'users'
,
columns
=> [
{
name
=>
'id'
,
type
=>
'integer'
,
primary
=> 1
}
]
}
}
]
);
while
(
my
$op
=
$sql
->operations->pull) {
say
$op
->statement;
}
$sql
->transaction(
mode
=> [
'exclusive'
],
queries
=> [
{
'table-create'
=> {
name
=>
'users'
,
columns
=> [
{
name
=>
'id'
,
type
=>
'integer'
,
primary
=> 1
}
]
}
}
]
);
while
(
my
$op
=
$sql
->operations->pull) {
say
$op
->statement;
}
$sql
->view_create(
name
=>
'active_users'
,
query
=> {
select
=> {
from
=> {
table
=>
'users'
},
columns
=> [
{
column
=>
'*'
}
],
where
=> [
{
'not-null'
=> {
column
=>
'deleted'
}
}
]
}
}
);
say
$sql
->operations->pull->statement;
$sql
->view_create(
name
=>
'active_users'
,
query
=> {
select
=> {
from
=> {
table
=>
'users'
},
columns
=> [
{
column
=>
'*'
}
],
where
=> [
{
'not-null'
=> {
column
=>
'deleted'
}
}
]
}
},
temp
=> 1
);
say
$sql
->operations->pull->statement;
$sql
->view_drop(
name
=>
'active_users'
);
say
$sql
->operations->pull->statement;