#!/usr/bin/perl
BEGIN {
maybe_plan(2,
'SQL::Translator::Parser::XML::SQLFairy'
,
'SQL::Translator::Producer::SQLite'
);
}
my
$xmlfile
=
"$Bin/data/xml/schema.xml"
;
my
$sqlt
;
$sqlt
= SQL::Translator->new(
quote_identifiers
=> 1,
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
=>
'SQLite'
,
filename
=>
$xmlfile
,
) or
die
$sqlt
->error;
eq_or_diff(
$sql
, <<
"SQL"
);
BEGIN TRANSACTION;
DROP TABLE
"Basic"
;
CREATE TABLE
"Basic"
(
"id"
INTEGER PRIMARY KEY NOT NULL,
"title"
varchar(100) NOT NULL DEFAULT
'hello'
,
"description"
text DEFAULT
''
,
"email"
varchar(500),
"explicitnulldef"
varchar,
"explicitemptystring"
varchar DEFAULT
''
,
-- Hello emptytagdef
"emptytagdef"
varchar DEFAULT
''
,
"another_id"
int
(10) DEFAULT 2,
"timest"
timestamp,
FOREIGN KEY (
"another_id"
) REFERENCES
"Another"
(
"id"
)
);
CREATE INDEX
"titleindex"
ON
"Basic"
(
"title"
);
CREATE UNIQUE INDEX
"emailuniqueindex"
ON
"Basic"
(
"email"
);
CREATE UNIQUE INDEX
"very_long_index_name_on_title_field_which_should_be_truncated_for_various_rdbms"
ON
"Basic"
(
"title"
);
DROP TABLE
"Another"
;
CREATE TABLE
"Another"
(
"id"
INTEGER PRIMARY KEY NOT NULL,
"num"
numeric(10,2)
);
DROP VIEW IF EXISTS
"email_list"
;
CREATE VIEW
"email_list"
AS
SELECT email FROM Basic WHERE (email IS NOT NULL);
DROP TRIGGER IF EXISTS
"foo_trigger"
;
CREATE TRIGGER
"foo_trigger"
after
insert on
"Basic"
BEGIN update modified=timestamp(); END;
DROP TRIGGER IF EXISTS
"bar_trigger_insert"
;
CREATE TRIGGER
"bar_trigger_insert"
before
insert on
"Basic"
BEGIN update modified2=timestamp(); END;
DROP TRIGGER IF EXISTS
"bar_trigger_update"
;
CREATE TRIGGER
"bar_trigger_update"
before
update on
"Basic"
BEGIN update modified2=timestamp(); END;
COMMIT;
SQL
my
@sql
=
$sqlt
->translate(
from
=>
'XML-SQLFairy'
,
to
=>
'SQLite'
,
filename
=>
$xmlfile
,
) or
die
$sqlt
->error;
eq_or_diff(
\
@sql
,
[
'BEGIN TRANSACTION'
,
q<DROP TABLE "Basic">
,
q<CREATE TABLE "Basic" (
"id" INTEGER PRIMARY KEY NOT NULL,
"title" varchar(100) NOT NULL DEFAULT 'hello',
"description" text DEFAULT '',
"email" varchar(500),
"explicitnulldef" varchar,
"explicitemptystring" varchar DEFAULT '',
-- Hello emptytagdef
"emptytagdef" varchar DEFAULT '',
"another_id" int(10) DEFAULT 2,
"timest" timestamp,
FOREIGN KEY ("another_id") REFERENCES "Another"("id")
)>
,
q<CREATE INDEX "titleindex" ON "Basic" ("title")>
,
q<CREATE UNIQUE INDEX "emailuniqueindex" ON "Basic" ("email")>
,
q<CREATE UNIQUE INDEX "very_long_index_name_on_title_field_which_should_be_truncated_for_various_rdbms" ON "Basic" ("title")>
,
q<DROP TABLE "Another">
,
q<CREATE TABLE "Another" (
"id" INTEGER PRIMARY KEY NOT NULL,
"num" numeric(10,2)
)>
,
q<DROP VIEW IF EXISTS "email_list">
,
q<CREATE VIEW "email_list" AS
SELECT email FROM Basic WHERE (email IS NOT NULL)>
,
q<DROP TRIGGER IF EXISTS "foo_trigger">
,
q<CREATE TRIGGER "foo_trigger" after insert on "Basic" BEGIN update modified=timestamp(); END>
,
q<DROP TRIGGER IF EXISTS "bar_trigger_insert">
,
q<CREATE TRIGGER "bar_trigger_insert" before insert on "Basic" BEGIN update modified2=timestamp(); END>
,
q<DROP TRIGGER IF EXISTS "bar_trigger_update">
,
q<CREATE TRIGGER "bar_trigger_update" before update on "Basic" BEGIN update modified2=timestamp(); END>
,
'COMMIT'
,
],
'SQLite translate in list context matches'
);