SQL-Engine

 view release on metacpan or  search on metacpan

examples/postgres-tdb  view on Meta::CPAN

$sql->table_drop(
  name => 'people',
);

$sql->table_drop(
  name => 'users',
);

$dbh->begin_work;
while (my $op = $sql->operations->pull) {
  say '[POSTGRES] ', $op->statement;
  $dbh->prepare($op->statement)->execute;
}
$dbh->rollback;

# table-drop operations

# * table
#
# DROP TABLE users

$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 '[POSTGRES] ', $op->statement;
  $dbh->prepare($op->statement)->execute;
}
$dbh->rollback;

# * table, condition
#
# DROP TABLE users CASCADE

$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 '[POSTGRES] ', $op->statement;
  $dbh->prepare($op->statement)->execute;
}
$dbh->rollback;

# table-rename operations

# * table rename
#
# ALTER TABLE peoples RENAME TO people

$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 '[POSTGRES] ', $op->statement;
  $dbh->prepare($op->statement)->execute;
}
$dbh->rollback;

# column-create operations

# * column type
#
# ALTER TABLE users ADD COLUMN accessed datetime

$sql->table_create(
  name => 'users',
  columns => [
    {
      name => 'id',
      type => 'integer',
      primary => 1
    }
  ]
);

examples/postgres-tdb  view on Meta::CPAN


$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 '[POSTGRES] ', $op->statement;
  $dbh->prepare($op->statement)->execute;
}
$dbh->rollback;

# * named constraint, on update, on delete
#
# ALTER TABLE ADD CONSTRAINT user_defined_name (user_id) REFERENCES users (id) ON UPDATE CASCADE ON DELETE CASCADE

$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 '[POSTGRES] ', $op->statement;
  $dbh->prepare($op->statement)->execute;
}
$dbh->rollback;

# constraint-drop operations

# * constraint
#
# ALTER TABLE DROP CONSTRAINT generated

$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(

examples/postgres-tdb  view on Meta::CPAN

);

$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 '[POSTGRES] ', $op->statement;
  $dbh->prepare($op->statement)->execute;
}
$dbh->rollback;

# * named constraint
#
# ALTER TABLE DROP CONSTRAINT user_defined_name

$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 '[POSTGRES] ', $op->statement;
  $dbh->prepare($op->statement)->execute;
}
$dbh->rollback;

# index-create operations

# * index
#
# CREATE INDEX index_users_email ON users (name)

$sql->table_create(
  name => 'users',
  columns => [
    {
      name => 'id',
      type => 'number',
      primary => 1
    },
    {
      name => 'name',
      type => 'string'
    }
  ]
);



( run in 1.273 second using v1.01-cache-2.11-cpan-e1769b4cff6 )