Improve trigger 'scope' attribute support (RT#119997)
[dbsrgits/SQL-Translator.git] / t / sqlite-rename-field.t
1 #!/usr/bin/env perl
2
3 use strict;
4 use warnings;
5
6 use Test::More;
7 use Test::Exception;
8 use DBI;
9 use SQL::Translator;
10 use SQL::Translator::Parser::SQLite;
11 use SQL::Translator::Diff;
12
13 eval "use DBD::SQLite";
14 plan skip_all => "DBD::SQLite required" if $@;
15
16 my ( $dbh , $ddl, $ret );
17
18 lives_ok { $dbh = DBI->connect("dbi:SQLite:dbname=:memory:")} "dbi connect";
19
20 my $source_ddl = <<DDL;
21 CREATE TABLE "Foo" (
22     "foo" INTEGER PRIMARY KEY AUTOINCREMENT,
23     "bar" VARCHAR(10)
24 );
25 DDL
26
27 lives_ok { $ret = $dbh->do($source_ddl) } "create table";
28
29 lives_ok { $ret = $dbh->do(q| INSERT INTO Foo (bar) VALUES ('buzz') |) } "insert data";
30
31 cmp_ok( $ret, '==', 1, "one row inserted" );
32
33 my $target_ddl = <<DDL;
34 CREATE TABLE "Foo" (
35     "foo" INTEGER PRIMARY KEY AUTOINCREMENT,
36     "biff" VARCHAR(10)
37 );
38 DDL
39
40 my $source_sqlt = SQL::Translator->new(
41     no_comments => 1,
42     parser   => 'SQL::Translator::Parser::SQLite',
43 )->translate(\$source_ddl);
44
45 my $target_sqlt = SQL::Translator->new(
46     no_comments => 1,
47     parser   => 'SQL::Translator::Parser::SQLite',
48 )->translate(\$target_ddl);
49
50 my $table = $target_sqlt->get_table('Foo');
51 my $field = $table->get_field('biff');
52 $field->extra( renamed_from => 'bar' );
53
54 my @diff = SQL::Translator::Diff->new({
55     output_db => 'SQLite',
56     source_schema => $source_sqlt,
57     target_schema => $target_sqlt,
58 })->compute_differences->produce_diff_sql;
59
60 foreach my $line (@diff) {
61     $line =~ s/\n//g;
62     lives_ok { $dbh->do($line) || die } "$line";
63 }
64
65 lives_ok { $ret = $dbh->selectall_arrayref(q(SELECT biff FROM Foo), { Slice => {} }) } "query DB for data";
66
67 cmp_ok( scalar(@$ret), '==', 1, "Got 1 row");
68
69 cmp_ok( $ret->[0]->{biff}, 'eq', 'buzz', "col biff has value buzz" );
70
71 done_testing;