#!/usr/bin/perl use strict; use FindBin qw/$Bin/; use Test::More; use Test::SQL::Translator; use Test::Exception; use Test::Differences; use Data::Dumper; use SQL::Translator; use SQL::Translator::Schema::Constants; BEGIN { maybe_plan(1, 'SQL::Translator::Parser::XML::SQLFairy', 'SQL::Translator::Producer::PostgreSQL'); } my $xmlfile = "$Bin/data/xml/schema.xml"; my $sqlt; $sqlt = SQL::Translator->new( no_comments => 1, show_warnings => 0, add_drop_table => 1, ); die "Can't find test schema $xmlfile" unless -e $xmlfile; my $sql = $sqlt->translate( from => 'XML-SQLFairy', to => 'PostgreSQL', filename => $xmlfile, ) or die $sqlt->error; eq_or_diff($sql, << "SQL"); DROP TABLE "Basic" CASCADE; CREATE TABLE "Basic" ( "id" serial NOT NULL, "title" character varying(100) DEFAULT 'hello' NOT NULL, "description" text DEFAULT '', "email" character varying(500), "explicitnulldef" character varying, "explicitemptystring" character varying DEFAULT '', -- Hello emptytagdef "emptytagdef" character varying DEFAULT '', "another_id" integer DEFAULT 2, "timest" timestamp, PRIMARY KEY ("id"), CONSTRAINT "emailuniqueindex" UNIQUE ("email"), CONSTRAINT "very_long_index_name_on_title_field_which_should_be_truncated_for_various_rdbms" UNIQUE ("title") ); CREATE INDEX "titleindex" on "Basic" ("title"); DROP TABLE "Another" CASCADE; CREATE TABLE "Another" ( "id" serial NOT NULL, "num" numeric(10,2), PRIMARY KEY ("id") ); DROP VIEW "email_list"; CREATE VIEW "email_list" ( "email" ) AS SELECT email FROM Basic WHERE (email IS NOT NULL) ; DROP TRIGGER IF EXISTS foo_trigger; CREATE TRIGGER foo_trigger after insert ON Basic update modified=timestamp();; DROP TRIGGER IF EXISTS bar_trigger; CREATE TRIGGER bar_trigger before insert OR update ON Basic update modified2=timestamp();; ALTER TABLE "Basic" ADD FOREIGN KEY ("another_id") REFERENCES "Another" ("id") DEFERRABLE; SQL