view release on metacpan or search on metacpan
lib/SQL/Admin/Driver/Base/Keywords.pm view on Meta::CPAN
our %SQL_KEYWORDS = map +( $_ => 1 ), (
qw( a abs absolute action ada ),
qw( add admin after aggregate alias ),
qw( all allocate alter always and ),
qw( any are array as asc ),
qw( asensitive assertion assignment assymetric at ),
qw( atomic attribute attributes authorization avg ),
qw( before begin bernoulli between begin ),
qw( binary bit bitvar bit_length blob ),
qw( boolean both breadth by c ),
qw( cache call called cardinality cascade ),
qw( cascaded case cast catalog catalog_name ),
qw( ceil cailing char character characteristics ),
qw( char_length check checked class ),
# qw( characters character_length
);
lib/SQL/Admin/Driver/DB2/DBI.pm view on Meta::CPAN
[ 'syscat.references fk', 'syscat.keycoluse tc', 'syscat.keycoluse rc' ],
[
'fk.constname as constraint_name',
'fk.tabschema as table_schema',
'fk.tabname as table_name',
'tc.colname as column_name',
'fk.reftabschema as reftable_schema',
'fk.reftabname as reftable_name',
'rc.colname as refcolumn_name',
'case when fk.deleterule = \'A\' then \'no_action\'
when fk.deleterule = \'C\' then \'cascade\'
when fk.deleterule = \'N\' then \'set_null\'
when fk.deleterule = \'R\' then \'restrict\'
end as delete_rule',
'case when fk.updaterule = \'A\' then \'no_action\'
when fk.updaterule = \'C\' then \'cascade\'
when fk.updaterule = \'N\' then \'set_null\'
when fk.updaterule = \'R\' then \'restrict\'
end as update_rule',
'tc.colseq as colno',
'fk.colcount',
],
{
'fk.tabschema' => ( @schemas ? \ @schemas : { not_like => 'SYS%' }),
'fk.constname' => \ ' = tc.constname',
lib/SQL/Admin/Driver/DB2/Grammar.pm view on Meta::CPAN
APPEND : /^\b (?: append ) \b/ix { $item[0] }
AS : /^\b (?: as ) \b/ix { $item[0] }
ASC : /^\b (?: asc ) \b/ix { $item[0] }
ALL : /^\b (?: all ) \b/ix { $item[0] }
ALLOW : /^\b (?: allow ) \b/ix { $item[0] }
BIGINT : /^\b (?: bigint ) \b/ix { $item[0] }
BUILD : /^\b (?: build ) \b/ix { $item[0] }
BY : /^\b (?: by ) \b/ix { $item[0] }
CACHE : /^\b (?: cache ) \b/ix { $item[0] }
CAPTURE : /^\b (?: capture ) \b/ix { $item[0] }
CASCADE : /^\b (?: cascade ) \b/ix { $item[0] }
CHANGES : /^\b (?: changes ) \b/ix { $item[0] }
CHAR : /^\b (?: character | char ) \b/ix { $item[0] }
COLUMN : /^\b (?: column ) \b/ix { $item[0] }
COMMENT : /^\b (?: comment ) \b/ix { $item[0] }
COMMIT : /^\b (?: commit ) \b/ix { $item[0] }
CONNECT : /^\b (?: connect ) \b/ix { $item[0] }
CONSTRAINT : /^\b (?: constraint ) \b/ix { $item[0] }
CREATE : /^\b (?: create ) \b/ix { $item[0] }
CURRENT : /^\b (?: current ) \b/ix { $item[0] }
CYCLE : /^\b (?: cycle ) \b/ix { $item[0] }
lib/SQL/Admin/Driver/DB2/Grammar.pm view on Meta::CPAN
| { +{} }
generated_column_spec : # TEST parts
default_clause
| autoincrement
# | generated_expression
######################################################################
referential_delete_action : # TEST OK
CASCADE { 'cascade' }
| SET NULL { 'set_null' }
| RESTRICT { 'restrict' }
| NO ACTION { 'no_action' }
referential_update_action : # TEST OK
RESTRICT { 'restrict' }
| NO ACTION { 'no_action' }
update_rule: # TEST OK
ON UPDATE referential_update_action
lib/SQL/Admin/Driver/DB2/Producer.pm view on Meta::CPAN
######################################################################
our $ESCAPE_ALL_IDENTIFIERS = 0;
our $ESCAPE_NONRESERVED_KEYWORDS = 0;
our $ESCAPE_SQL_KEYWORDS = 0;
######################################################################
our %REFERENTIAL_ACTION = (
cascade => [ 'CASCADE' ],
no_action => [ 'NO', 'ACTION' ],
restrict => [ 'RESTRICT' ],
set_null => [ 'SET', 'NULL' ],
);
######################################################################
######################################################################
sub _escape_identifier { # ;
my ($self, $identifier) = @_;
lib/SQL/Admin/Driver/Pg/DBI.pm view on Meta::CPAN
[ 'syscat.references fk', 'syscat.keycoluse tc', 'syscat.keycoluse rc' ],
[
'fk.constname as constraint_name',
'fk.tabschema as table_schema',
'fk.tabname as table_name',
'tc.colname as column_name',
'fk.reftabschema as reftable_schema',
'fk.reftabname as reftable_name',
'rc.colname as refcolumn_name',
'case when fk.deleterule = \'A\' then \'no_action\'
when fk.deleterule = \'C\' then \'cascade\'
when fk.deleterule = \'N\' then \'set_null\'
when fk.deleterule = \'R\' then \'restrict\'
end as delete_rule',
'case when fk.updaterule = \'A\' then \'no_action\'
when fk.updaterule = \'C\' then \'cascade\'
when fk.updaterule = \'N\' then \'set_null\'
when fk.updaterule = \'R\' then \'restrict\'
end as update_rule',
'tc.colseq as colno',
'fk.colcount',
],
{
'fk.tabschema' => ( @schemas ? \ @schemas : { not_like => 'SYS%' }),
'fk.constname' => \ ' = tc.constname',
lib/SQL/Admin/Driver/Pg/Grammar.pm view on Meta::CPAN
SEQUENCE : /^\b (?: sequence ) \b/ix { $item[0] }
UNIQUE : /^\b (?: unique ) \b/ix { $item[0] }
INDEX : /^\b (?: index ) \b/ix { $item[0] }
CONCURRENTLY : /^\b (?: concurrently ) \b/ix { $item[0] }
GLOBAL : /^\b (?: global ) \b/ix { $item[0] }
LOCAL : /^\b (?: local ) \b/ix { $item[0] }
ON : /^\b (?: on ) \b/ix { $item[0] }
DEFAULT : /^\b (?: default ) \b/ix { $item[0] }
ACTION : /^\b (?: action ) \b/ix { $item[0] }
RESTRICT : /^\b (?: restrict ) \b/ix { $item[0] }
CASCADE : /^\b (?: cascade ) \b/ix { $item[0] }
SET : /^\b (?: set ) \b/ix { $item[0] }
UPDATE : /^\b (?: update ) \b/ix { $item[0] }
DELETE : /^\b (?: delete ) \b/ix { $item[0] }
REFERENCES : /^\b (?: references ) \b/ix { $item[0] }
CONSTRAINT : /^\b (?: constraint ) \b/ix { $item[0] }
DEFERRABLE : /^\b (?: deferrable ) \b/ix { $item[0] }
DEFERRED : /^\b (?: deferred ) \b/ix { $item[0] }
IMMEDIATE : /^\b (?: immediate ) \b/ix { $item[0] }
INITIALLY : /^\b (?: initially ) \b/ix { $item[0] }
PRIMARY : /^\b (?: primary ) \b/ix { $item[0] }
lib/SQL/Admin/Driver/Pg/Grammar.pm view on Meta::CPAN
default_clause : # TEST OK
DEFAULT
default_clause_value(?)
{ href aexp @item[0,-1] }
default_clause_value: # TEST OK
constant
referential_action : # TEST OK
CASCADE { 'cascade' }
| SET NULL { 'set_null' }
| SET DEFAULT { 'set_default' }
| RESTRICT { 'restrict' }
| NO ACTION { 'no_action' }
update_rule: # TEST OK
ON UPDATE referential_action
{ expr @item }
lib/SQL/Admin/Driver/Pg/Grammar.pm view on Meta::CPAN
add_column
| drop_column
| add_constraint
| alter_column
add_column : # TEST OK
ADD COLUMN(?) column_definition { expr_stm @item }
drop_column_restriction :
RESTRICT { expr @item, 'restrict' }
| CASCADE { expr @item, 'cascade' }
drop_column : # TEST OK
DROP COLUMN(?)
if_exists(?)
column_name
drop_column_restriction(?)
{ expr_stm @item }
alter_column : # TEST OK
ALTER COLUMN(?)
lib/SQL/Admin/Driver/Pg/Keywords.pm view on Meta::CPAN
qw( symmetric table then to trailing ),
qw( true union unique user using ),
qw( verbose when where ),
);
our %NONRESERVED_KEYWORDS = map +( $_ => 1 ), (
qw( abort absolute access action add ),
qw( admin after aggreggate also alter ),
qw( assertion assignment at bacward before ),
qw( begin bigint bit boolean by ),
qw( cache called cascade chain char ),
qw( character characteristics checkpoint class close ),
qw( cluster coalesce comment commit committed ),
qw( connection constraints conversion convert copy ),
qw( createdb createrole createuser csv cursor cycle ),
qw( database day deallocate dec decimal ),
qw( declare defaults deferred definer delete ),
qw( delimiter delimiters disable domain double ),
qw( drop each enable encoding encrypted ),
qw( escape excluding exclusive execute exists ),
qw( explain external extract fetch first ),
lib/SQL/Admin/Driver/Pg/Producer.pm view on Meta::CPAN
######################################################################
our $ESCAPE_ALL_IDENTIFIERS = 0;
our $ESCAPE_NONRESERVED_KEYWORDS = 0;
our $ESCAPE_SQL_KEYWORDS = 0;
######################################################################
our %REFERENTIAL_ACTION = (
cascade => [ 'CASCADE' ],
no_action => [ 'NO', 'ACTION' ],
restrict => [ 'RESTRICT' ],
set_null => [ 'SET', 'NULL' ],
);
######################################################################
######################################################################
sub _escape_identifier { # ;
my ($self, $identifier) = @_;
t/02-driver-base-evaluate.t view on Meta::CPAN
sub alter_table_foreign_key { # ;
my $cat = $CAT->new;
$evl->evaluate ($cat, {
alter_table => {
table_name => { name => 'aaa', 'schema' => 'bbb' },
alter_table_actions => [ {
add_constraint => { foreign_key_constraint => {
constraint_name => 'SQL050926155612920',
update_rule => 'no_action',
delete_rule => 'cascade',
referenced_table => { schema => 'bbb', name => 'rrr' },
referenced_column_list => [ 'zzz' ],
referencing_column_list => [ 'xxx' ]
} }
} ],
}
});
{
ok (exists $cat->{table}{'bbb.aaa'}, 'alter table FK-1: table exists');
t/02-driver-base-evaluate.t view on Meta::CPAN
ok ($obj->foreign_key, 'alter table FK-1: foreign_key defined');
my $map = $obj->foreign_key;
is (ref $map, 'HASH', 'alter table FK-1: foreign_key is HASH');
my ($c) = values %$map;
is ($c->fullname, 'bbb.aaa.foreign_key.xxx{bbb.rrr.zzz}', 'alter table FK-1: fullname');
is_deeply ($c->referenced_column_list, ['zzz'], 'alter table FK-1: referenced column list');
is_deeply ($c->referencing_column_list, ['xxx'], 'alter table FK-1: referencing column list');
is ($c->update_rule => 'no_action', 'alter table FK-1: update rule');
is ($c->delete_rule => 'cascade', 'alter table FK-1: delete rule');
}
}
######################################################################
######################################################################
sub alter_table_add_column { # ;
my $cat = $CAT->new;
$evl->evaluate ($cat, {
t/02-driver-db2-parser.t view on Meta::CPAN
[ 'NO ACTION' => 'no_action' ],
);
}
######################################################################
######################################################################
sub referential_delete_action : Rule { # ;
(
[ 'SET DEFAULT' => undef ], # not supported by DB2
[ 'CASCADE' => 'cascade' ],
[ 'SET NULL' => 'set_null' ],
[ 'RESTRICT' => 'restrict' ],
[ 'NO ACTION' => 'no_action' ],
);
}
######################################################################
######################################################################
sub update_rule : Rule { # ;
t/02-driver-db2-parser.t view on Meta::CPAN
[ 'ON UPDATE NO ACTION', { update_rule => 'no_action' } ],
);
}
######################################################################
######################################################################
sub delete_rule : Rule { # ;
(
[ 'ON DELETE RESTRICT', { _ => 'restrict' } ],
[ 'ON DELETE NO ACTION', { _ => 'no_action' } ],
[ 'ON DELETE CASCADE', { _ => 'cascade' } ],
[ 'ON DELETE SET NULL', { _ => 'set_null' } ],
);
}
######################################################################
######################################################################
sub referential_triggered_actions : Rule { # ;
(
[ 'on delete cascade' => { delete_rule => 'cascade' } ],
[ 'on update no action' => { update_rule => 'no_action' } ],
[ 'on delete cascade on update no action' => { delete_rule => 'cascade', update_rule => 'no_action' } ],
[ 'on update no action on delete cascade' => { delete_rule => 'cascade', update_rule => 'no_action' } ],
);
}
######################################################################
######################################################################
sub referencing_column_list : Rule { # ;
(
[ '(aaa)', { _ => [ 'aaa' ] } ],
[ '(aaa, bbb)', { _ => [ 'aaa', 'bbb' ] } ],
t/02-driver-db2-parser.t view on Meta::CPAN
referenced_column_list => [ 'bbb', 'ccc' ],
}],
[ 'REFERENCES aaa (bbb) ENABLE QUERY OPTIMIZATION' => {
referenced_table => { name => 'aaa' },
referenced_column_list => [ 'bbb' ],
}],
[ 'REFERENCES aaa (bbb) ON UPDATE RESTRICT ON DELETE CASCADE' => {
referenced_table => { name => 'aaa' },
referenced_column_list => [ 'bbb' ],
update_rule => 'restrict',
delete_rule => 'cascade',
}],
);
}
######################################################################
######################################################################
sub constraint_name_definition : Rule { # ;
(
t/02-driver-db2-parser.t view on Meta::CPAN
sub foreign_key_constraint : Rule { # ;
(
[ 'FOREIGN KEY (aaa) REFERENCES bbb' => { _ => {
referencing_column_list => [ 'aaa' ],
referenced_table => { name => 'bbb' },
}}],
[ 'FOREIGN KEY (aaa) REFERENCES bbb.ccc (ddd) ON DELETE CASCADE' => { _ => {
referencing_column_list => [ 'aaa' ],
referenced_table => { name => 'ccc', schema => 'bbb' },
referenced_column_list => [ 'ddd' ],
delete_rule => 'cascade',
}}],
);
}
######################################################################
######################################################################
sub table_constraint_definition : Rule { # ;
(
[ 'UNIQUE (aaa)', {
t/02-driver-db2-parser.t view on Meta::CPAN
autoincrement => {
sequence_start_with => 1000,
},
}}],
[ 'aaa INT NOT NULL PRIMARY KEY REFERENCES bbb ON DELETE CASCADE', { _ => {
column_name => 'aaa',
data_type => 'int4',
column_not_null => 1,
column_primary_key => 1,
referenced_table => { name => 'bbb' },
delete_rule => 'cascade',
}}],
[ 'aaa GENERATED AS IDENTITY', { _ => {
column_name => 'aaa',
autoincrement => {},
}}],
[ 'aaa varchar(32) WITH DEFAULT', { _ => {
column_name => 'aaa',
data_type => 'varchar',
size => 32,
default_clause => {},
t/02-driver-db2-parser.t view on Meta::CPAN
'ENFORCED ENABLE QUERY OPTIMIZATION',
)), { _ => {
table_name => { schema => 'bbb', name => 'aaa' },
alter_table_actions => [
{ add_constraint => { foreign_key_constraint => {
constraint_name => 'ccc',
referencing_column_list => [ 'ddd', 'eee' ],
referenced_table => { schema => 'bbb', name => 'fff' },
referenced_column_list => [ 'ggg', 'hhh' ],
update_rule => 'no_action',
delete_rule => 'cascade',
}}},
],
}} ],
);
}
sub comment_on : Rule { # ;
t/02-driver-db2-producer.t view on Meta::CPAN
[ 'add constraint xyz primary key (aaa, bbb)', {
add_constraint => { primary_key_constraint => {
constraint_name => 'xyz',
column_list => [ 'aaa', 'bbb' ],
} } } ],
[ 'add constraint xyz unique (APP_ID, MSISDN)', {
add_constraint => { unique_constraint => {
constraint_name => 'xyz',
column_list => [ 'APP_ID', 'MSISDN' ],
} } } ],
[ 'add constraint xyz foreign key (aaa) references bbb.ccc (ddd) on delete cascade on update no action', {
add_constraint => { foreign_key_constraint => {
constraint_name => 'xyz',
db2_enforced => 1,
db2_optimize => 0,
update_rule => 'no_action',
delete_rule => 'cascade',
referenced_table => { schema => 'bbb', name => 'ccc' },
referenced_column_list => [ 'ddd' ],
referencing_column_list => [ 'aaa' ],
} } } ],
);
test_products alter_table => (
[ '', {
table_name => { schema => 'aaa', name => 'bbb' },
alter_table_actions => [
t/02-driver-pg-parser.t view on Meta::CPAN
[ 'default \'\'' => { _ => { string => '' } } ],
[ 'default \'2042-04-02\'' => { _ => { string => '2042-04-02' } } ],
);
}
######################################################################
######################################################################
sub referential_action : Rule { # ;
(
[ 'CASCADE' => 'cascade' ],
[ 'SET NULL' => 'set_null' ],
[ 'SET DEFAULT' => 'set_default' ],
[ 'RESTRICT' => 'restrict' ],
[ 'NO ACTION' => 'no_action' ],
);
}
######################################################################
######################################################################
sub update_rule : Rule { # ;
(
[ 'ON UPDATE RESTRICT', { _ => 'restrict' } ],
[ 'ON UPDATE NO ACTION', { _ => 'no_action' } ],
[ 'ON UPDATE CASCADE', { _ => 'cascade' } ],
[ 'ON UPDATE SET NULL', { _ => 'set_null' } ],
[ 'ON UPDATE SET DEFAULT', { _ => 'set_default' } ],
);
}
######################################################################
######################################################################
sub delete_rule : Rule { # ;
(
[ 'ON DELETE RESTRICT', { _ => 'restrict' } ],
[ 'ON DELETE NO ACTION', { _ => 'no_action' } ],
[ 'ON DELETE CASCADE', { _ => 'cascade' } ],
[ 'ON DELETE SET NULL', { _ => 'set_null' } ],
[ 'ON DELETE SET DEFAULT', { _ => 'set_default' } ],
);
}
######################################################################
######################################################################
sub referential_triggered_actions : Rule { # ;
(
[ 'on delete cascade' => { delete_rule => 'cascade' } ],
[ 'on update no action' => { update_rule => 'no_action' } ],
[ 'on delete cascade on update no action' => { delete_rule => 'cascade', update_rule => 'no_action' } ],
[ 'on update no action on delete cascade' => { delete_rule => 'cascade', update_rule => 'no_action' } ],
);
}
######################################################################
######################################################################
sub referenced_table_and_columns : Rule { # ;
(
[ 'aaa' => { referenced_table => { name => 'aaa' } }],
[ 'aaa (bbb, ccc)' => {
t/02-driver-pg-parser.t view on Meta::CPAN
referenced_column_list => [ 'bbb', 'ccc' ],
}],
[ 'REFERENCES aaa (bbb)' => {
referenced_table => { name => 'aaa' },
referenced_column_list => [ 'bbb' ],
}],
[ 'REFERENCES aaa (bbb) ON UPDATE RESTRICT ON DELETE CASCADE' => {
referenced_table => { name => 'aaa' },
referenced_column_list => [ 'bbb' ],
update_rule => 'restrict',
delete_rule => 'cascade',
}],
);
}
######################################################################
######################################################################
sub constraint_name_definition : Rule { # ;
(
[ 'CONSTRAINT aaa', { constraint_name => 'aaa' } ],
t/02-driver-pg-parser.t view on Meta::CPAN
sub foreign_key_constraint : Rule { # ;
(
[ 'FOREIGN KEY (refid) REFERENCES aaa' => { _ => {
referencing_column_list => [ 'refid' ],
referenced_table => { name => 'aaa' },
}}],
[ 'FOREIGN KEY (aaa_id) REFERENCES bbb.aaa (ccc, ddd) ON DELETE CASCADE' => { _ => {
referencing_column_list => [ 'aaa_id' ],
referenced_table => { name => 'aaa', schema => 'bbb' },
referenced_column_list => [ 'ccc', 'ddd' ],
delete_rule => 'cascade',
}}],
);
}
######################################################################
######################################################################
sub constraint_characteristics : Rule { # ;
(
[ 'DEFERRABLE' => { constraint_deferrable => 1 } ],
t/02-driver-pg-parser.t view on Meta::CPAN
data_type => 'int4',
column_not_null => 0,
autoincrement => {},
}}],
[ 'aaa INT NOT NULL PRIMARY KEY REFERENCES bbb ON DELETE CASCADE', { _ => {
column_name => 'aaa',
data_type => 'int4',
column_not_null => 1,
column_primary_key => 1,
referenced_table => { name => 'bbb' },
delete_rule => 'cascade',
}}],
[ 'aaa bigserial', { _ => {
column_name => 'aaa',
data_type => 'int8',
autoincrement => {},
}}],
[ 'aaa varchar(32) DEFAULT NULL', { _ => {
column_name => 'aaa',
data_type => 'varchar',
size => 32,
t/02-driver-pg-parser.t view on Meta::CPAN
######################################################################
######################################################################
sub drop_column : Rule { # ; Pg
(
[ 'DROP aaa' => { _ => { column_name => 'aaa' }}],
[ 'DROP COLUMN aaa' => { _ => { column_name => 'aaa' }}],
[ 'DROP IF EXISTS aaa' => { _ => { column_name => 'aaa', if_exists => 1 }}],
[ 'DROP COLUMN IF EXISTS aaa' => { _ => { column_name => 'aaa', if_exists => 1 }}],
[ 'DROP aaa RESTRICT' => { _ => { column_name => 'aaa', drop_column_restriction => 'restrict', }}],
[ 'DROP aaa CASCADE' => { _ => { column_name => 'aaa', drop_column_restriction => 'cascade', }}],
);
}
######################################################################
######################################################################
sub alter_column_set_data_type : Rule { # ; Pg; incomplete; TODO: USING expression
(
[ 'TYPE int' => { _ => { data_type => 'int4' }}],
[ 'SET DATA TYPE int' => { _ => { data_type => 'int4' }}],