SQL-Admin

 view release on metacpan or  search on metacpan

t/02-driver-pg-parser.t  view on Meta::CPAN

        [ 'CREATE INDEX aaa ON bbb (ccc)', {
            _ => {
                index_name => { name => 'aaa' },
                table_name => { name => 'bbb' },
                index_column_list => [
                    { column_name => 'ccc' },
                ],
            }}],
        [ 'CREATE UNIQUE INDEX aaa on aaa1.bbb (ccc ASC, ddd, eee DESC)', {
            _ => {
                index_name => { name => 'aaa' },
                table_name => { schema => 'aaa1', name => 'bbb' },
                index_unique     => 1,
                index_column_list => [
                    { column_name => 'ccc', column_order => 'ASC' },
                    { column_name => 'ddd' },
                    { column_name => 'eee', column_order => 'DESC' },
                ],
            }}],
    );
}


######################################################################
######################################################################


sub default_clause_value          : Rule { # ; incomplete; TODO: expression
    (
        [ 'null'              => { null => 1 } ],
        [ '42'                => { numeric_constant => 42 } ],
        [ '\'2042-04-02\''    => { string => '2042-04-02' } ],
        [ 'current_time'      => { current_time => 1 } ],
        [ 'current_timestamp' => { current_timestamp => 1 } ],
        [ 'current_date'      => { current_date => 1 } ],
        [ 'now ()'            => { current_timestamp => 'transaction_start' } ],
        # [ 'nextval(\'voting.episode_episode_id_seq\'::regclass)' => {} ],
    );
}


######################################################################
######################################################################
sub default_clause                : Rule { # ; incomplete; TODO: expression
    (
        [ 'default null'              => { _ => { null => 1 } } ],
        [ 'default current_time'      => { _ => { current_time => 1}} ],
        [ 'default current_date'      => { _ => { current_date => 1}} ],
        [ 'default current_timestamp' => { _ => { current_timestamp => 1}} ],
        [ 'default now()'             => { _ => { current_timestamp => 'transaction_start'}} ],
        [ '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)' => {
            referenced_table => { name => 'aaa' },
            referenced_column_list => [ 'bbb', 'ccc' ],
        } ],
    );
}

######################################################################
######################################################################
sub reference_specification       : Rule { # ;
    (
        [ 'REFERENCES aaa' => {
            referenced_table => { name => 'aaa' },
        }],
        [ 'REFERENCES aaa (bbb,ccc)' => {
            referenced_table => { name => 'aaa' },
            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' } ],
    );
}


######################################################################
######################################################################
sub unique_constraint             : Rule { # ;
    (
        [ 'UNIQUE (aaa)', { _ => { column_list => [ 'aaa' ] } } ],
        [ 'CONSTRAINT bbb UNIQUE (aaa)', { _ => { constraint_name => 'bbb', column_list => [ 'aaa' ] } } ],
        [ 'UNIQUE (aaa, bbb)', { _ => { column_list => [ 'aaa', 'bbb' ] } } ],
    );
}


######################################################################
######################################################################
sub primary_key_constraint        : Rule { # ;
    (
        [ 'PRIMARY KEY (aaa)', { _ => { column_list => [ 'aaa' ] } } ],
        [ 'PRIMARY KEY (aaa, bbb)', { _ => { column_list => [ 'aaa', 'bbb' ] } } ],
    );
}


######################################################################
######################################################################
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 } ],
        [ 'INITIALLY IMMEDIATE' => { constraint_immediate => 1 } ],
        [ 'DEFERRABLE INITIALLY IMMEDIATE' => { constraint_deferrable => 1, constraint_immediate => 1 } ],
        [ 'INITIALLY IMMEDIATE DEFERRABLE' => { constraint_deferrable => 1, constraint_immediate => 1 } ],
    )
}


######################################################################
######################################################################
sub table_constraint              : Rule { # ;
    (
        [ 'UNIQUE (aaa)', {
            'unique_constraint' => {
                column_list     => [ 'aaa' ],
            }
        }],
        [ 'CONSTRAINT xyz UNIQUE (aaa)', {
            'unique_constraint' => {
                constraint_name => 'xyz',
                column_list     => [ 'aaa' ],
            }
        }],
        [ 'CONSTRAINT xyz PRIMARY KEY (aaa)', {
            'primary_key_constraint' => {
                constraint_name => 'xyz',
                column_list     => [ 'aaa' ],
            }
        }],
        [ 'CONSTRAINT xyz FOREIGN KEY (aaa) REFERENCES bbb', {
            'foreign_key_constraint' => {
                constraint_name         => 'xyz',
                referencing_column_list => [ 'aaa' ],
                referenced_table        => { name => 'bbb' }
            }
        }],
        [ 'CONSTRAINT xyz FOREIGN KEY (aaa) REFERENCES bbb INITIALLY DEFERRED', {
            'foreign_key_constraint' => {
                constraint_name         => 'xyz',
                referencing_column_list => [ 'aaa' ],
                referenced_table        => { name => 'bbb' },
                constraint_immediate    => 0,
            }
        }],
    );
}

######################################################################
######################################################################
sub column_unique                 : Rule { # ;
    (
        [ 'UNIQUE' => { _ => 1 } ],
    )
}


######################################################################
######################################################################
sub column_primary_key            : Rule { # ;
    (
        [ 'PRIMARY KEY' => { _ => 1 } ],
    )
}


######################################################################
######################################################################
sub column_not_null               : Rule { # ;
    (
        [ 'NULL'     => { _ => 0 } ],
        [ 'NOT NULL' => { _ => 1 } ],
    )
}


######################################################################
######################################################################
sub column_option                 : Rule { # ;
    (
        [ 'UNIQUE'      => { column_unique => 1 } ],
        [ 'PRIMARY KEY' => { column_primary_key => 1 } ],
        [ 'REFERENCES bbb.aaa (id)' => {
            referenced_table => { schema => 'bbb', name => 'aaa' },
            referenced_column_list => [ 'id' ],
        } ]
    );
}


######################################################################
######################################################################
sub column_definition             : Rule { # ;
    (
        [ 'aaa serial NOT NULL ', { _ => {
            column_name     => 'aaa',
            data_type       => 'int4',
            column_not_null => 1,
            autoincrement   => {},
        }}],
        [ 'aaa serial NULL ', { _ => {
            column_name     => 'aaa',
            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,
            default_clause => { null => 1 },
        }}],
        [ 'aaa date DEFAULT CURRENT_DATE', { _ => {
            column_name => 'aaa',
            data_type   => 'date',
            default_clause => { current_date => 1 },
        }}],
        [ 'aaa varchar(32) DEFAULT \'\'', { _ => {
            column_name    => 'aaa',
            data_type      => 'varchar',
            size           => 32,
            default_clause => { string => '' },
        }}],
        [ 'aaa INTEGER NOT NULL DEFAULT 0', { _ => {
            column_name     => 'aaa',
            data_type       => 'int4',
            column_not_null => 1,
            default_clause  => { numeric_constant => 0 },
        }}],
    );
}


######################################################################
######################################################################

sub table_temporary               : Rule { # ;
    (
        [ 'TEMPORARY'   => { _ => '1' } ],
        [ 'GLOBAL TEMP' => { _ => 'global' } ],
        [ 'LOCAL TEMP'  => { _ => 'local' } ],
    )
}


######################################################################
######################################################################
sub create_table                  : Rule { # ;
    (
        [ 'CREATE TABLE aaa ()' => { _ => {
            table_name    => { name => 'aaa' },
            table_content => []
        }} ],
        [ 'CREATE TEMP TABLE aaa ()' => { _ => {
            table_name    => { name => 'aaa' },
            table_content => [],
            table_temporary => 1,
        }} ],
        [ join (' ', (
            'CREATE TABLE bbb.aaa (',

t/02-driver-pg-parser.t  view on Meta::CPAN

            column_name => 'ccc',
            new_column_name => 'ddd',
        }}  ],
    );
}


######################################################################
######################################################################
sub alter_table_rename_table      : Rule { # ; Pg
    (
        [ 'bbb.aaa RENAME TO bbb.ccc' => { _ => {
            table_name     => { schema => 'bbb', name => 'aaa' },
            new_table_name => { schema => 'bbb', name => 'ccc' },
        }}  ],
    );
}


######################################################################
######################################################################
sub alter_table_set_schema        : Rule { # ; Pg
    (
        [ 'bbb.aaa SET SCHEMA ccc' => { _ => {
            table_name => { schema => 'bbb', name => 'aaa' },
            new_schema => 'ccc',
        }}  ],
    );
}


######################################################################
######################################################################
sub add_column                    : Rule { # ; Pg
    (
        [ 'ADD aaa int' => { _ => {
            column_definition => { column_name => 'aaa', data_type => 'int4' },
        }}],
        [ 'ADD COLUMN aaa int' => { _ => {
            column_definition => { column_name => 'aaa', data_type => 'int4' },
        }}],
        [ 'ADD COLUMN aaa integer not null' => {_ => {
            column_definition => { column_name => 'aaa', data_type => 'int4', column_not_null => 1 },
        }}],
        [ 'ADD COLUMN aaa integer default 0' => {_ => {
            column_definition => { column_name => 'aaa', data_type => 'int4', default_clause => { numeric_constant => 0 } },
        }}],
    );
}


######################################################################
######################################################################
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' }}],
    );
}


######################################################################
######################################################################
sub alter_column_set_default      : Rule { # ; Pg; incomplete; TODO: expression
    (
        [ 'SET DEFAULT 0' => { _ => { default_clause => { numeric_constant => 0 }}}],
    );
}


######################################################################
######################################################################
sub alter_column_drop_default     : Rule { # ; Pg
    (
        [ 'DROP DEFAULT' => { _ => 1}],
    );
}


######################################################################
######################################################################
sub alter_column_set_not_null     : Rule { # ; Pg;
    (
        [ 'SET NOT NULL' => { _ => 1 } ],
    );
}


######################################################################
######################################################################
sub alter_column_drop_not_null    : Rule { # ; Pg;
    (
        [ 'DROP NOT NULL' => { _ => 1 } ],
    );
}


######################################################################
######################################################################
sub alter_column                  : Rule { # ; Pg;
    (
        [ 'ALTER aaa DROP DEFAULT', { _ => { column_name => 'aaa', alter_column_drop_default => 1 } } ],
        [ 'ALTER COLUMN aaa DROP NOT NULL', { _ => { column_name => 'aaa', alter_column_drop_not_null => 1 } } ],
    );
}




( run in 1.105 second using v1.01-cache-2.11-cpan-39bf76dae61 )