Fixed autoincrement in primary keys for SQLite
[dbsrgits/SQL-Translator.git] / t / 56-sqlite-producer.t
CommitLineData
24d9fe69 1#!/usr/bin/perl
2# vim: set ft=perl:
3
4use strict;
27f0e868 5use Test::More;
24d9fe69 6use Test::SQL::Translator qw(maybe_plan);
24d9fe69 7
8use SQL::Translator::Schema::View;
ea4a3ecc 9use SQL::Translator::Schema::Table;
24d9fe69 10use SQL::Translator::Producer::SQLite;
2d23c1e1 11$SQL::Translator::Producer::SQLite::NO_QUOTES = 0;
24d9fe69 12
13{
14 my $view1 = SQL::Translator::Schema::View->new( name => 'view_foo',
15 fields => [qw/id name/],
16 sql => 'SELECT id, name FROM thing',
17 extra => {
18 temporary => 1,
19 if_not_exists => 1,
20 });
21 my $create_opts = { no_comments => 1 };
4c0d31c1 22 my $view1_sql1 = [ SQL::Translator::Producer::SQLite::create_view($view1, $create_opts) ];
24d9fe69 23
f6e49d34 24 my $view_sql_replace = [ 'CREATE TEMPORARY VIEW IF NOT EXISTS "view_foo" AS
25 SELECT id, name FROM thing' ];
4c0d31c1 26 is_deeply($view1_sql1, $view_sql_replace, 'correct "CREATE TEMPORARY VIEW" SQL');
24d9fe69 27
28
29 my $view2 = SQL::Translator::Schema::View->new( name => 'view_foo',
30 fields => [qw/id name/],
31 sql => 'SELECT id, name FROM thing',);
32
4c0d31c1 33 my $view1_sql2 = [ SQL::Translator::Producer::SQLite::create_view($view2, $create_opts) ];
f6e49d34 34 my $view_sql_noreplace = [ 'CREATE VIEW "view_foo" AS
35 SELECT id, name FROM thing' ];
4c0d31c1 36 is_deeply($view1_sql2, $view_sql_noreplace, 'correct "CREATE VIEW" SQL');
24d9fe69 37}
ea4a3ecc 38{
39 my $create_opts;
40
41 my $table = SQL::Translator::Schema::Table->new(
42 name => 'foo_table',
43 );
44 $table->add_field(
45 name => 'foreign_key',
46 data_type => 'integer',
27f0e868 47 default_value => 1,
ea4a3ecc 48 );
49 my $constraint = SQL::Translator::Schema::Constraint->new(
50 table => $table,
51 name => 'fk',
52 type => 'FOREIGN_KEY',
53 fields => ['foreign_key'],
54 reference_fields => ['id'],
55 reference_table => 'foo',
56 on_delete => 'RESTRICT',
57 on_update => 'CASCADE',
58 );
f6e49d34 59 my $expected = [ 'FOREIGN KEY ("foreign_key") REFERENCES "foo"("id") ON DELETE RESTRICT ON UPDATE CASCADE'];
ea4a3ecc 60 my $result = [SQL::Translator::Producer::SQLite::create_foreignkey($constraint,$create_opts)];
61 is_deeply($result, $expected, 'correct "FOREIGN KEY"');
62}
27f0e868 63{
64 my $table = SQL::Translator::Schema::Table->new(
65 name => 'foo_table',
66 );
67 $table->add_field(
68 name => 'id',
69 data_type => 'integer',
70 default_value => 1,
71 );
72 my $expected = [ qq<CREATE TABLE "foo_table" (\n "id" integer DEFAULT 1\n)>];
73 my $result = [SQL::Translator::Producer::SQLite::create_table($table, { no_comments => 1 })];
74 is_deeply($result, $expected, 'correctly unquoted DEFAULT');
75}
76
8224e2cf 77{
78 my $table = SQL::Translator::Schema::Table->new(
79 name => 'foo',
80 );
81 $table->add_field(
82 name => 'data',
83 data_type => 'bytea',
84 );
85 $table->add_field(
86 name => 'data2',
87 data_type => 'set',
88 );
89 $table->add_field(
90 name => 'data2',
91 data_type => 'set',
92 );
93 $table->add_field(
94 name => 'data3',
95 data_type => 'text',
96 size => 30,
97 );
98 $table->add_field(
99 name => 'data4',
100 data_type => 'blob',
101 size => 30,
102 );
103 my $expected = [ qq<CREATE TABLE "foo" (
104 "data" blob,
105 "data2" varchar,
106 "data3" text,
107 "data4" blob
108)>];
109 my $result = [SQL::Translator::Producer::SQLite::create_table($table, { no_comments => 1 })];
110 is_deeply($result, $expected, 'correctly translated bytea to blob');
111}
112
ff6dc6d4 113{
114 my $table = SQL::Translator::Schema::Table->new(
115 name => 'foo_table',
116 );
117 $table->add_field(
118 name => 'id',
119 data_type => 'integer',
120 default_value => \'gunshow',
121 );
122 my $expected = [ qq<CREATE TABLE "foo_table" (\n "id" integer DEFAULT gunshow\n)>];
123 my $result = [SQL::Translator::Producer::SQLite::create_table($table, { no_comments => 1 })];
124 is_deeply($result, $expected, 'correctly unquoted DEFAULT');
125}
126
127{
128 my $table = SQL::Translator::Schema::Table->new(
129 name => 'foo_table',
130 );
131 $table->add_field(
132 name => 'id',
133 data_type => 'integer',
134 default_value => 'frew',
135 );
136 my $expected = [ qq<CREATE TABLE "foo_table" (\n "id" integer DEFAULT 'frew'\n)>];
137 my $result = [SQL::Translator::Producer::SQLite::create_table($table, { no_comments => 1 })];
138 is_deeply($result, $expected, 'correctly quoted DEFAULT');
139}
140
141{
142 my $table = SQL::Translator::Schema::Table->new(
143 name => 'foo',
144 );
145 $table->add_field(
146 name => 'id',
147 data_type => 'integer',
148 default_value => 'NULL',
149 );
150 $table->add_field(
151 name => 'when',
152 default_value => 'now()',
153 );
154 $table->add_field(
155 name => 'at',
156 default_value => 'CURRENT_TIMESTAMP',
157 );
158 my $expected = [ qq<CREATE TABLE "foo" (
159 "id" integer DEFAULT NULL,
160 "when" DEFAULT now(),
161 "at" DEFAULT CURRENT_TIMESTAMP
162)>];
163 my $result = [SQL::Translator::Producer::SQLite::create_table($table, { no_comments => 1 })];
164 is_deeply($result, $expected, 'correctly unquoted excempted DEFAULTs');
165}
166
03b0fa25 167{
168 my $table = SQL::Translator::Schema::Table->new(
169 name => 'foo_auto_increment',
170 );
171 $table->add_field(
172 name => 'id',
173 data_type => 'integer',
174 is_nullable => 0,
175 is_auto_increment => 1,
176 );
177 $table->primary_key('id');
178 my $expected = [ qq<CREATE TABLE "foo_auto_increment" (
179 "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL
180)>];
181 my $result = [SQL::Translator::Producer::SQLite::create_table($table, { no_comments => 1 })];
182 is_deeply($result, $expected, 'correctly built table with autoincrement on primary key');
183}
184
185{
186 my $table = SQL::Translator::Schema::Table->new(
187 name => 'foo_no_auto_increment',
188 );
189 $table->add_field(
190 name => 'id',
191 data_type => 'integer',
192 is_nullable => 0,
193 is_auto_increment => 0,
194 );
195 $table->primary_key('id');
196 my $expected = [ qq<CREATE TABLE "foo_no_auto_increment" (
197 "id" INTEGER PRIMARY KEY NOT NULL
198)>];
199 my $result = [SQL::Translator::Producer::SQLite::create_table($table, { no_comments => 1 })];
200 is_deeply($result, $expected, 'correctly built table without autoincrement on primary key');
201}
202
27f0e868 203done_testing;