#!/usr/bin/perl
+# vim: set ft=perl:
use strict;
-use Test::More tests => 72;
+use Test::More;
use SQL::Translator;
use SQL::Translator::Schema::Constants;
-use SQL::Translator::Parser::Oracle qw(parse);
+use Test::SQL::Translator qw(maybe_plan);
+
+maybe_plan(85, 'SQL::Translator::Parser::Oracle');
+SQL::Translator::Parser::Oracle->import('parse');
my $t = SQL::Translator->new( trace => 0 );
my $sql = q[
trait_category VARCHAR2(100) NOT NULL,
UNIQUE ( trait_category )
);
- comment on table qtl_trait_category is 'hey, hey, hey, hey';
+ COMMENT ON TABLE qtl_trait_category IS
+ 'hey, hey, hey, hey';
comment on column qtl_trait_category.qtl_trait_category_id
is 'the primary key!';
+ -- foo bar comment
CREATE TABLE qtl_trait
(
qtl_trait_id NUMBER(11) NOT NULL
CONSTRAINT pk_qtl_trait PRIMARY KEY,
- trait_symbol VARCHAR2(100) NOT NULL,
- trait_name VARCHAR2(200) NOT NULL,
+ trait_symbol VARCHAR2(100 BYTE) NOT NULL,
+ trait_name VARCHAR2(200 CHAR) NOT NULL,
qtl_trait_category_id NUMBER(11) NOT NULL,
UNIQUE ( trait_symbol ),
UNIQUE ( trait_name ),
FOREIGN KEY ( qtl_trait_category_id ) REFERENCES qtl_trait_category
);
+ /* qtl table comment */
CREATE TABLE qtl
(
+ /* qtl_id comment */
qtl_id NUMBER(11) NOT NULL
CONSTRAINT pk_qtl PRIMARY KEY,
- qtl_accession_id VARCHAR2(20) NOT NULL,
+ qtl_accession_id VARCHAR2(20) NOT NULL /* accession comment */,
published_symbol VARCHAR2(100),
qtl_trait_id NUMBER(11) NOT NULL,
linkage_group VARCHAR2(32) NOT NULL,
start_position NUMBER(11,2) NOT NULL,
stop_position NUMBER(11,2) NOT NULL,
comments long,
- UNIQUE ( qtl_accession_id ),
FOREIGN KEY ( qtl_trait_id ) REFERENCES qtl_trait
);
+ CREATE UNIQUE INDEX qtl_accession ON qtl ( qtl_accession_id );
+ CREATE UNIQUE INDEX qtl_accession_upper ON qtl ( UPPER(qtl_accession_id) );
+
CREATE TABLE qtl_trait_synonym
(
qtl_trait_synonym_id NUMBER(11) NOT NULL
trait_synonym VARCHAR2(200) NOT NULL,
qtl_trait_id NUMBER(11) NOT NULL,
UNIQUE( qtl_trait_id, trait_synonym ),
- FOREIGN KEY ( qtl_trait_id ) REFERENCES qtl_trait
+ FOREIGN KEY ( qtl_trait_id ) REFERENCES qtl_trait ON DELETE SET NULL
);
];
is( $f1->is_nullable, 0, 'Field cannot be null' );
is( $f1->default_value, undef, 'Default value is undefined' );
is( $f1->is_primary_key, 1, 'Field is PK' );
-is( $f1->comments, 'the primary key!', 'Comment = "the primary key!"' );
+is( join(',', $f1->comments), 'the primary key!', 'Comment = "the primary key!"' );
my $f2 = shift @t1_fields;
is( $f2->name, 'trait_category', 'Second field is "trait_category"' );
#
my $t2 = shift @tables;
is( $t2->name, 'qtl_trait', 'Table "qtl_trait" exists' );
+is( $t2->comments, 'foo bar comment', 'Comment "foo bar" exists' );
my @t2_fields = $t2->get_fields;
is( scalar @t2_fields, 4, '4 fields in table' );
is( scalar @t3_fields, 8, '8 fields in table' );
my @t3_constraints = $t3->get_constraints;
-is( scalar @t3_constraints, 3, '3 constraints on table' );
+is( scalar @t3_constraints, 4, '4 constraints on table' );
+my $t3_c4 = $t3_constraints[3];
+is( $t3_c4->type, UNIQUE, 'Fourth constraint is unique' );
+is( $t3_c4->name, 'qtl_accession_upper', 'Name = "qtl_accession_upper"' );
+is( join(',', $t3_c4->fields), 'UPPER(qtl_accession_id)', 'Fields = "UPPER(qtl_accession_id)"' );
+
+is( $t3->comments, 'qtl table comment', 'Comment "qtl table comment" exists' );
+
+my $t3_f1 = shift @t3_fields;
+is( $t3_f1->comments, 'qtl_id comment', 'Comment "qtl_id comment" exists' );
+
+my $t3_f2 = shift @t3_fields;
+is( $t3_f2->comments, 'accession comment',
+ 'Comment "accession comment" exists' );
#
# qtl_trait_synonym
my @t4_constraints = $t4->get_constraints;
is( scalar @t4_constraints, 3, '3 constraints on table' );
+my $t4_c3 = $t4_constraints[2];
+is( $t4_c3->type, FOREIGN_KEY, 'Third constraint is FK' );
+is( $t4_c3->name, '', 'No name' );
+is( join(',', $t4_c3->fields), 'qtl_trait_id',
+ 'Fields = "qtl_trait_id"' );
+is( $t4_c3->reference_table, 'qtl_trait',
+ 'Reference table = "qtl_trait"' );
+is( join(',', $t4_c3->reference_fields), 'qtl_trait_id',
+ 'Reference fields = "qtl_trait_id"' );
+is( $t4_c3->on_delete, 'SET NULL',
+ 'on_delete = "SET NULL"' );