+* Add support for temporary tables in Pg (nachos)
# ----------------------------------------------------------
# 0.09002 2008-12-05
# ----------------------------------------------------------
#
# Create table.
#
-create : create_table table_name '(' create_definition(s? /,/) ')' table_option(s?) ';'
+create : CREATE temporary_table(?) TABLE table_name '(' create_definition(s? /,/) ')' table_option(s?) ';'
{
my $table_info = $item{'table_name'};
my $schema_name = $table_info->{'schema_name'};
$tables{ $table_name }{'schema_name'} = $schema_name;
$tables{ $table_name }{'table_name'} = $table_name;
+ $tables{ $table_name }{'temporary'} = $item[2][0];
+
if ( @table_comments ) {
$tables{ $table_name }{'comments'} = [ @table_comments ];
@table_comments = ();
}
my @constraints;
- for my $definition ( @{ $item[4] } ) {
+ for my $definition ( @{ $item[6] } ) {
if ( $definition->{'supertype'} eq 'field' ) {
my $field_name = $definition->{'name'};
$tables{ $table_name }{'fields'}{ $field_name } =
}
}
- for my $option ( @{ $item[6] } ) {
+ for my $option ( @{ $item[8] } ) {
$tables{ $table_name }{'table_options(s?)'}{ $option->{'type'} } =
$option;
}
storage_type : /(plain|external|extended|main)/i
+temporary: /temp(orary)?\\b/i
+
+temporary_table: temporary
+ {
+ 1;
+ }
+
alter_default_val : SET default_val
{
$return = { value => $item[2]->{'value'} }
name => $tdata->{'table_name'},
) or die "Couldn't create table '$table_name': " . $schema->error;
+ $table->extra(temporary => 1) if $tdata->{'temporary'};
+
$table->comments( $tdata->{'comments'} );
my @fields = sort {
push @fks, @$fks;
}
+
+ my $temporary = "";
+
+ if(exists $table->{extra}{temporary}) {
+ $temporary = $table->{extra}{temporary} ? "TEMPORARY " : "";
+ }
+
my $create_statement;
$create_statement = join("\n", @comments);
if ($add_drop_table) {
}
$create_statement .= join("\n", @type_defs) . "\n"
if $postgres_version >= 8.3;
- $create_statement .= qq[CREATE TABLE $qt$table_name_ur$qt (\n].
+ $create_statement .= qq[CREATE ${temporary}TABLE $qt$table_name_ur$qt (\n].
join( ",\n", map { " $_" } @field_defs, @constraint_defs ).
"\n)"
;
use Test::SQL::Translator qw(maybe_plan);
BEGIN {
- maybe_plan(117, 'SQL::Translator::Parser::PostgreSQL');
+ maybe_plan(120, 'SQL::Translator::Parser::PostgreSQL');
SQL::Translator::Parser::PostgreSQL->import('parse');
}
check (f_int between 1 and 5)
);
+ CREATE TABLE products_1 (
+ product_no integer,
+ name text,
+ price numeric
+ );
+
+ CREATE TEMP TABLE products_2 (
+ product_no integer,
+ name text,
+ price numeric
+ );
+
+ CREATE TEMPORARY TABLE products_3 (
+ product_no integer,
+ name text,
+ price numeric
+ );
+
alter table t_test1 add f_fk2 integer;
alter table only t_test1 add constraint c_u1 unique (f_varchar);
isa_ok( $schema, 'SQL::Translator::Schema', 'Schema object' );
my @tables = $schema->get_tables;
-is( scalar @tables, 2, 'Two tables' );
+is( scalar @tables, 5, 'Five tables' );
my $t1 = shift @tables;
is( $t1->name, 't_test1', 'Table t_test1 exists' );
my $t2_c3 = shift @t2_constraints;
is( $t2_c3->type, CHECK_C, "Constraint is a 'CHECK'" );
+
+# test temporary tables
+is( exists $schema->get_table('products_1')->extra()->{'temporary'}, "", "Table is NOT temporary");
+is( $schema->get_table('products_2')->extra('temporary'), 1,"Table is TEMP");
+is( $schema->get_table('products_3')->extra('temporary'), 1,"Table is TEMPORARY");