create_table 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +82 -0
- data/Rakefile +89 -0
- data/create_table.gemspec +28 -0
- data/features/parsing.feature +736 -0
- data/features/step_definitions/create_table/parsing_steps.rb +60 -0
- data/features/support/env.rb +28 -0
- data/lib/create_table.rb +2545 -0
- data/lib/create_table.rl +185 -0
- data/lib/create_table/column.rb +4920 -0
- data/lib/create_table/column.rl +338 -0
- data/lib/create_table/column_name_based_collection.rb +26 -0
- data/lib/create_table/common.rb +5 -0
- data/lib/create_table/common.rl +13 -0
- data/lib/create_table/index.rb +315 -0
- data/lib/create_table/index.rl +91 -0
- data/lib/create_table/mysql_reserved.txt +226 -0
- data/lib/create_table/parser.rb +36 -0
- data/lib/create_table/pg_reserved.txt +742 -0
- data/lib/create_table/unique.rb +7 -0
- data/lib/create_table/version.rb +3 -0
- data/spec/create_table_spec.rb +88 -0
- data/spec/generating/autoincrement_primary_key.yml +74 -0
- data/spec/generating/backticks.yml +22 -0
- data/spec/generating/charset.yml +21 -0
- data/spec/generating/comments.yml +34 -0
- data/spec/generating/doublequoted.yml +25 -0
- data/spec/generating/index.yml +37 -0
- data/spec/generating/named_unique.yml +37 -0
- data/spec/generating/reservedwords.yml +23 -0
- data/spec/generating/string_primary_key.yml +35 -0
- data/spec/generating/temporary.yml +25 -0
- data/spec/generating/unique.yml +35 -0
- data/spec/generating/unquoted.yml +25 -0
- data/spec/generating_spec.rb +27 -0
- data/spec/spec_helper.rb +66 -0
- metadata +263 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Seamus Abshere
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
# CreateTable
|
2
|
+
|
3
|
+
Analyze and inspect CREATE TABLE SQL statements and translate across databases.
|
4
|
+
|
5
|
+
## BETA
|
6
|
+
|
7
|
+
Tests and documentation are being added constantly.
|
8
|
+
|
9
|
+
TODO: stop making excuses and write a proper README.
|
10
|
+
|
11
|
+
## Quickstart
|
12
|
+
|
13
|
+
### Parsing
|
14
|
+
|
15
|
+
>> require 'create_table'
|
16
|
+
=> true
|
17
|
+
>> c = CreateTable.new(%{
|
18
|
+
CREATE TABLE employees
|
19
|
+
(employeeid INTEGER NOT NULL,
|
20
|
+
lastname VARCHAR(25) NOT NULL,
|
21
|
+
firstname VARCHAR(25) NOT NULL,
|
22
|
+
reportsto INTEGER NULL);
|
23
|
+
})
|
24
|
+
=> #<CreateTable>
|
25
|
+
>> c.columns.map(&:name)
|
26
|
+
=> ["employeeid", "lastname", "firstname", "reportsto"]
|
27
|
+
>> c.columns.map(&:data_type)
|
28
|
+
=> ["INTEGER", "CHARACTER VARYING(25)", "CHARACTER VARYING(25)", "INTEGER"]
|
29
|
+
>> c.columns.map(&:allow_null)
|
30
|
+
=> [false, false, false, true]
|
31
|
+
|
32
|
+
### Generating cross-platform SQL
|
33
|
+
|
34
|
+
>> require 'create_table'
|
35
|
+
=> true
|
36
|
+
>> c = CreateTable.new(%{
|
37
|
+
CREATE TABLE cats (
|
38
|
+
id INTEGER AUTO_INCREMENT, /* AUTO_INCREMENT with an underscore is MySQL-style... */
|
39
|
+
nickname CHARACTER VARYING(255),
|
40
|
+
birthday DATE,
|
41
|
+
license_id INTEGER,
|
42
|
+
price NUMERIC(5,2),
|
43
|
+
PRIMARY KEY ("id")
|
44
|
+
)
|
45
|
+
})
|
46
|
+
=> #<CreateTable>
|
47
|
+
>> c.to_mysql
|
48
|
+
=> ["CREATE TABLE cats ( `id` INTEGER PRIMARY KEY AUTO_INCREMENT, nickname CHARACTER VARYING(255), birthday DATE, license_id INTEGER, price NUMERIC(5,2) )"]
|
49
|
+
>> c.to_postgresql
|
50
|
+
=> ["CREATE TABLE cats ( \"id\" SERIAL PRIMARY KEY, nickname CHARACTER VARYING(255), birthday DATE, license_id INTEGER, price NUMERIC(5,2) )"]
|
51
|
+
>> c.to_sqlite3
|
52
|
+
=> ["CREATE TABLE cats ( \"id\" INTEGER PRIMARY KEY AUTOINCREMENT, nickname CHARACTER VARYING(255), birthday DATE, license_id INTEGER, price NUMERIC(5,2) )"]
|
53
|
+
|
54
|
+
## As a web service
|
55
|
+
|
56
|
+
Check out the [CreateTable demo web service](http://create-table.herokuapp.com)!
|
57
|
+
|
58
|
+
$ curl -i -X POST -H "Accept: application/json" --data "CREATE TABLE cats ( id INTEGER AUTO_INCREMENT, nickname CHARACTER VARYING(255), birthday DATE, license_id INTEGER, price NUMERIC(5,2), PRIMARY KEY (\"id\") )" http://create-table.herokuapp.com/statements
|
59
|
+
HTTP/1.1 201 Created
|
60
|
+
Cache-Control: max-age=0, private, must-revalidate
|
61
|
+
Content-Type: application/json; charset=utf-8
|
62
|
+
Date: Fri, 24 Aug 2012 22:24:52 GMT
|
63
|
+
Etag: "f13513b9126eb1fb909229e828c6a7cd"
|
64
|
+
Location: http://create-table.herokuapp.com/statements/9
|
65
|
+
Server: thin 1.4.1 codename Chromeo
|
66
|
+
X-Rack-Cache: invalidate, pass
|
67
|
+
X-Runtime: 0.051092
|
68
|
+
X-Ua-Compatible: IE=Edge,chrome=1
|
69
|
+
Content-Length: 1490
|
70
|
+
Connection: keep-alive
|
71
|
+
|
72
|
+
{"statement":{"original":"CREATE TABLE cats ( id INTEGER AUTO_INCREMENT, nickname CHARACTER VARYING(255), birthday DATE, license_id INTEGER, price NUMERIC(5,2), PRIMARY KEY (\"id\") )","mysql":"CREATE TABLE cats ( `id` INTEGER PRIMARY KEY AUTO_INCREMENT, nickname CHARACTER VARYING(255), birthday DATE, license_id INTEGER, price NUMERIC(5,2) )","postgresql":"CREATE TABLE cats ( \"id\" SERIAL PRIMARY KEY, nickname CHARACTER VARYING(255), birthday DATE, license_id INTEGER, price NUMERIC(5,2) )","sqlite3":"CREATE TABLE cats ( \"id\" INTEGER PRIMARY KEY AUTOINCREMENT, nickname CHARACTER VARYING(255), birthday DATE, license_id INTEGER, price NUMERIC(5,2) )","columns":[{"name":"id","data_type":"INTEGER","allow_null":false,"default":null,"primary_key":true,"unique":true,"autoincrement":true,"charset":null,"collate":null},{"name":"nickname","data_type":"CHARACTER VARYING(255)","allow_null":true,"default":null,"primary_key":false,"unique":false,"autoincrement":false,"charset":null,"collate":null},{"name":"birthday","data_type":"DATE","allow_null":true,"default":null,"primary_key":false,"unique":false,"autoincrement":false,"charset":null,"collate":null},{"name":"license_id","data_type":"INTEGER","allow_null":true,"default":null,"primary_key":false,"unique":false,"autoincrement":false,"charset":null,"collate":null},{"name":"price","data_type":"NUMERIC(5,2)","allow_null":true,"default":null,"primary_key":false,"unique":false,"autoincrement":false,"charset":null,"collate":null}]}}
|
73
|
+
|
74
|
+
## Real-world usage
|
75
|
+
|
76
|
+
<p><a href="http://brighterplanet.com"><img src="https://s3.amazonaws.com/static.brighterplanet.com/assets/logos/flush-left/inline/green/rasterized/brighter_planet-160-transparent.png" alt="Brighter Planet logo"/></a></p>
|
77
|
+
|
78
|
+
We will soon use `create_table` for the [Brighter Planet reference data web service](http://data.brighterplanet.com).
|
79
|
+
|
80
|
+
## Copyright
|
81
|
+
|
82
|
+
Copyright 2012 Brighter Planet, Inc.
|
data/Rakefile
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require "bundler/gem_tasks"
|
3
|
+
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
RSpec::Core::RakeTask.new(:rspec) do |spec|
|
6
|
+
spec.rspec_opts = ['--format', 'documentation']
|
7
|
+
end
|
8
|
+
|
9
|
+
require 'cucumber/rake/task'
|
10
|
+
Cucumber::Rake::Task.new(:cucumber) do |t|
|
11
|
+
t.cucumber_opts = %w{--format pretty}
|
12
|
+
end
|
13
|
+
|
14
|
+
task :rspec_all_databases do
|
15
|
+
require 'posix-spawn'
|
16
|
+
%w{ postgresql mysql sqlite3 }.each do |db|
|
17
|
+
puts
|
18
|
+
puts '#'*50
|
19
|
+
puts "# Running specs against #{db}"
|
20
|
+
puts '#'*50
|
21
|
+
puts
|
22
|
+
pid = POSIX::Spawn.spawn({'DB' => db}, 'rspec', File.expand_path('../spec', __FILE__))
|
23
|
+
Process.waitpid pid
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
task :default => [:cucumber, :rspec_all_databases]
|
28
|
+
|
29
|
+
task :ragel do
|
30
|
+
require 'posix/spawn'
|
31
|
+
require 'active_support/core_ext'
|
32
|
+
require 'fileutils'
|
33
|
+
Dir[File.expand_path('../lib/**/*.rl', __FILE__)].each do |path|
|
34
|
+
next if File.basename(path).include?('common')
|
35
|
+
$stderr.write "#{File.basename(path)}:"
|
36
|
+
debugged = "#{path}.tmp"
|
37
|
+
if ENV['VERBOSE'] == 'true'
|
38
|
+
$stderr.write " adding debugging to #{File.basename(debugged)}..."
|
39
|
+
lines = IO.readlines(path).map(&:chomp)
|
40
|
+
File.open(debugged, 'w') do |f|
|
41
|
+
lines.each do |line|
|
42
|
+
if line =~ /action ([^{]*) \{([^}]*)\}?/
|
43
|
+
action = $1.strip
|
44
|
+
inline = $2.strip
|
45
|
+
is_inline = inline.length > 0
|
46
|
+
base = action.sub('Quoted', '').sub('Unquoted', '').sub(/^(Mark|Start|End)/, '').underscore
|
47
|
+
vars = [ "mark_#{base}", "start_#{base}", "end_#{base}", 'end_data_type' ].uniq
|
48
|
+
l1 = []
|
49
|
+
l1 << "p=\#{p} \#{data[p..p].pack('c*').inspect}"
|
50
|
+
l2 = vars.map { |name| "#{name}=\#{#{name}.inspect if defined?(#{name})}" }
|
51
|
+
start = "start_#{base}"
|
52
|
+
pre = <<-EOS
|
53
|
+
$stderr.puts "\n#{action}\n #{l1.join(', ')}\n #{l2.join(', ')}"
|
54
|
+
if defined?(#{start}) and #{start}
|
55
|
+
$stderr.puts ' ***' + read(data, #{start}, p).inspect
|
56
|
+
end
|
57
|
+
EOS
|
58
|
+
if is_inline
|
59
|
+
f.puts "action #{action} {"
|
60
|
+
f.puts pre
|
61
|
+
f.puts inline
|
62
|
+
else
|
63
|
+
f.puts line
|
64
|
+
f.puts pre
|
65
|
+
end
|
66
|
+
if is_inline
|
67
|
+
f.puts '}'
|
68
|
+
end
|
69
|
+
else
|
70
|
+
f.puts line
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
else
|
75
|
+
# didn't add
|
76
|
+
FileUtils.cp path, debugged
|
77
|
+
end
|
78
|
+
ragel = "#{path}.rb"
|
79
|
+
$stderr.write " compiling Ragel to #{File.basename(ragel)}..."
|
80
|
+
if (child = POSIX::Spawn::Child.new('ragel', '-R', '-L', debugged)).status.success?
|
81
|
+
# File.unlink debugged
|
82
|
+
else
|
83
|
+
raise "Error: #{child.err}"
|
84
|
+
end
|
85
|
+
final = ragel.sub('.rl.rb', '.rb')
|
86
|
+
$stderr.write " moving to #{File.basename(final)}.\n"
|
87
|
+
FileUtils.mv ragel, final
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/create_table/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Seamus Abshere"]
|
6
|
+
gem.email = ["seamus@abshere.net"]
|
7
|
+
gem.description = %q{Analyze and inspect CREATE TABLE SQL statements and translate across databases.}
|
8
|
+
gem.summary = %q{Analyze and inspect CREATE TABLE SQL statements and translate across databases.}
|
9
|
+
gem.homepage = "https://github.com/seamusabshere/create_table"
|
10
|
+
|
11
|
+
gem.files = `git ls-files`.split($\)
|
12
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
13
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
|
+
gem.name = "create_table"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = CreateTable::VERSION
|
17
|
+
|
18
|
+
gem.add_development_dependency 'rspec-core'
|
19
|
+
gem.add_development_dependency 'rspec-expectations'
|
20
|
+
gem.add_development_dependency 'rspec-mocks'
|
21
|
+
gem.add_development_dependency 'posix-spawn'
|
22
|
+
gem.add_development_dependency 'activerecord'
|
23
|
+
gem.add_development_dependency 'activesupport'
|
24
|
+
gem.add_development_dependency 'mysql2'
|
25
|
+
gem.add_development_dependency 'pg'
|
26
|
+
gem.add_development_dependency 'sqlite3'
|
27
|
+
gem.add_development_dependency 'cucumber'
|
28
|
+
end
|
@@ -0,0 +1,736 @@
|
|
1
|
+
Feature: Parsing
|
2
|
+
|
3
|
+
# yah i know this is long, just add stuff to the bottom
|
4
|
+
|
5
|
+
Scenario Outline: parsing columns
|
6
|
+
Given column definition <column_definition>
|
7
|
+
Then the name should be <name>
|
8
|
+
And the default should be <default>
|
9
|
+
And the charset should be <charset>
|
10
|
+
And the collate should be <collate>
|
11
|
+
And the data_type should be <data_type>
|
12
|
+
And the primary_key should be <primary_key>
|
13
|
+
And the unique should be <unique>
|
14
|
+
And the autoincrement should be <autoincrement>
|
15
|
+
And the allow_null should be <allow_null>
|
16
|
+
Examples:
|
17
|
+
| column_definition | name | data_type | primary_key | unique | autoincrement | allow_null | default | charset | collate |
|
18
|
+
| "foo" INTEGER | foo | INTEGER | false | false | false | true | nil | nil | nil |
|
19
|
+
| "foo" NUMERIC(5,2) UNIQUE | foo | NUMERIC(5,2) | false | true | false | true | nil | nil | nil |
|
20
|
+
| "foo" CHARACTER VARYING(255) UNIQUE | foo | CHARACTER VARYING(255) | false | true | false | true | nil | nil | nil |
|
21
|
+
| "foo" INTEGER PRIMARY KEY AUTO_INCREMENT | foo | INTEGER | true | true | true | false | nil | nil | nil |
|
22
|
+
| "foo" INTEGER PRIMARY KEY AUTOINCREMENT | foo | INTEGER | true | true | true | false | nil | nil | nil |
|
23
|
+
| "foo" CHARACTER VARYING(255) PRIMARY KEY | foo | CHARACTER VARYING(255) | true | true | false | false | | nil | nil |
|
24
|
+
| "foo" AUTO AUTO AUTOINCREMEN | foo | AUTO AUTO AUTOINCREMEN | false | false | false | true | nil | nil | nil |
|
25
|
+
| "foo" UN UNI UNIQ UNIQU UNIQU UNIQUE | foo | UN UNI UNIQ UNIQU UNIQU | false | true | false | true | nil | nil | nil |
|
26
|
+
| "foo" INTEGER NULL | foo | INTEGER | false | false | false | true | nil | nil | nil |
|
27
|
+
| "foo" INTEGER NOT NULL | foo | INTEGER | false | false | false | false | nil | nil | nil |
|
28
|
+
| "foo" INTEGER UNIQUE AUTOINCREMENT | foo | INTEGER | false | true | true | true | nil | nil | nil |
|
29
|
+
| "foo" SERIAL | foo | INTEGER | false | false | true | true | nil | nil | nil |
|
30
|
+
| "foo" SERIAL PRIMARY KEY | foo | INTEGER | true | true | true | false | nil | nil | nil |
|
31
|
+
| "foo" INTEGER UNIQUE GAR | foo | INTEGER | false | true | false | true | nil | nil | nil |
|
32
|
+
| "foo" INTEGER DEFAULT 4 | foo | INTEGER | false | false | false | true | "4" | nil | nil |
|
33
|
+
| "foo" INTEGER DEFAULT 44 | foo | INTEGER | false | false | false | true | "44" | nil | nil |
|
34
|
+
| "foo" INTEGER DEFAULT '4' | foo | INTEGER | false | false | false | true | "4" | nil | nil |
|
35
|
+
| "foo" INTEGER DEFAULT '44' | foo | INTEGER | false | false | false | true | "44" | nil | nil |
|
36
|
+
| "foo" CHARACTER VARYING(255) DEFAULT a | foo | CHARACTER VARYING(255) | false | false | false | true | a | nil | nil |
|
37
|
+
| "foo" CHARACTER VARYING(255) DEFAULT a('b') | foo | CHARACTER VARYING(255) | false | false | false | true | a('b') | nil | nil |
|
38
|
+
| "foo" CHARACTER VARYING(255) DEFAULT a('b c') | foo | CHARACTER VARYING(255) | false | false | false | true | a('b c') | nil | nil |
|
39
|
+
| "foo" CHARACTER VARYING(255) DEFAULT ' z x y ' | foo | CHARACTER VARYING(255) | false | false | false | true | " z x y " | nil | nil |
|
40
|
+
| "foo" CHARACTER VARYING(255) DEFAULT ' z ''x ''y' | foo | CHARACTER VARYING(255) | false | false | false | true | " z 'x 'y" | nil | nil |
|
41
|
+
| "foo" CHARACTER VARYING(255) DEFAULT ' z ''x ''y ' | foo | CHARACTER VARYING(255) | false | false | false | true | " z 'x 'y " | nil | nil |
|
42
|
+
| "foo" CHARACTER VARYING(255) DEFAULT " z x y " | foo | CHARACTER VARYING(255) | false | false | false | true | " z x y " | nil | nil |
|
43
|
+
| "foo" CHARACTER VARYING(255) DEFAULT " z ''x ''y" | foo | CHARACTER VARYING(255) | false | false | false | true | " z 'x 'y" | nil | nil |
|
44
|
+
| "foo" CHARACTER VARYING(255) DEFAULT " z ''x ''y " | foo | CHARACTER VARYING(255) | false | false | false | true | " z 'x 'y " | nil | nil |
|
45
|
+
| "foo" CHARACTER VARYING(255) DEFAULT ' z \\\'x \\\'y' | foo | CHARACTER VARYING(255) | false | false | false | true | " z 'x 'y" | nil | nil |
|
46
|
+
| "foo" CHARACTER VARYING(255) DEFAULT ' z \\\'x \\\'y ' | foo | CHARACTER VARYING(255) | false | false | false | true | " z 'x 'y " | nil | nil |
|
47
|
+
| "foo" CHARACTER VARYING(255) DEFAULT " z x y " | foo | CHARACTER VARYING(255) | false | false | false | true | " z x y " | nil | nil |
|
48
|
+
| "foo" CHARACTER VARYING(255) DEFAULT " z \\\"x \\\'y" | foo | CHARACTER VARYING(255) | false | false | false | true | " z "x 'y" | nil | nil |
|
49
|
+
| "foo" CHARACTER VARYING(255) DEFAULT " z \\\'x \\\"y " | foo | CHARACTER VARYING(255) | false | false | false | true | " z 'x "y " | nil | nil |
|
50
|
+
| "foo" INTEGER DEFAULT NULL | foo | INTEGER | false | false | false | true | NULL | nil | nil |
|
51
|
+
| "foo" INTEGER DEFAULT '4' AUTOINCREMENT | foo | INTEGER | false | false | true | true | "4" | nil | nil |
|
52
|
+
| "foo" INTEGER DEFAULT 4 AUTOINCREMENT | foo | INTEGER | false | false | true | true | "4" | nil | nil |
|
53
|
+
| "foo" INTEGER DEFAULT NULL AUTOINCREMENT | foo | INTEGER | false | false | true | true | NULL | nil | nil |
|
54
|
+
| "foo" INTEGER NULL DEFAULT NULL AUTOINCREMENT | foo | INTEGER | false | false | true | true | NULL | nil | nil |
|
55
|
+
| "foo" INTEGER NOT NULL DEFAULT NULL AUTOINCREMENT | foo | INTEGER | false | false | true | false | NULL | nil | nil |
|
56
|
+
| "foo" INTEGER COLLATE utf8_bin | foo | INTEGER | false | false | false | true | nil | nil | utf8_bin |
|
57
|
+
| "foo" INTEGER CHARACTER SET iso_8859-1 | foo | INTEGER | false | false | false | true | nil | iso_8859-1 | nil |
|
58
|
+
| "foo" INTEGER CHARSET iso_8859-1 | foo | INTEGER | false | false | false | true | nil | iso_8859-1 | nil |
|
59
|
+
| "foo" INTEGER CHARACTER SET iso_8859-1 COLLATE utf8_bin | foo | INTEGER | false | false | false | true | nil | iso_8859-1 | utf8_bin |
|
60
|
+
| "foo" INTEGER CHARSET iso_8859-1 COLLATE utf8_bin | foo | INTEGER | false | false | false | true | nil | iso_8859-1 | utf8_bin |
|
61
|
+
| "foo" INTEGER CHARACTER SET iso_8859-1 | foo | INTEGER | false | false | false | true | nil | iso_8859-1 | nil |
|
62
|
+
| "foo" INTEGER CHARACTER SET iso_8859-1 COLLATE utf8_bin | foo | INTEGER | false | false | false | true | nil | iso_8859-1 | utf8_bin |
|
63
|
+
| "foo" VARCHAR(123) | foo | CHARACTER VARYING(123) | false | false | false | true | nil | nil | nil |
|
64
|
+
| "foo" TINYINT(1) | foo | BOOLEAN | false | false | false | true | nil | nil | nil |
|
65
|
+
| "foo" INT(11) | foo | INTEGER | false | false | false | true | nil | nil | nil |
|
66
|
+
| "foo" SERIAL | foo | INTEGER | false | false | true | true | nil | nil | nil |
|
67
|
+
| "foo" SERIAL UNIQUE | foo | INTEGER | false | true | true | true | nil | nil | nil |
|
68
|
+
| "foo" SERIAL PRIMARY KEY | foo | INTEGER | true | true | true | false | nil | nil | nil |
|
69
|
+
| "foo" integer NOT NULL DEFAULT nextval('foo_seq') | foo | INTEGER | false | false | true | false | nextval('foo_seq') | nil | nil |
|
70
|
+
| "foo" INT IDENTITY(1,1) | foo | INTEGER | true | true | true | false | nil | nil | nil |
|
71
|
+
|
72
|
+
# | column_definition | name | data_type | primary_key | unique | autoincrement | allow_null | default | charset | collate |
|
73
|
+
|
74
|
+
#-------------------------------------------
|
75
|
+
|
76
|
+
Scenario Outline: parsing indexes
|
77
|
+
Given index definition <index_definition>
|
78
|
+
Then the name should be <name>
|
79
|
+
And the column_names should be <column_names>
|
80
|
+
And the unique should be false
|
81
|
+
Examples:
|
82
|
+
| index_definition | name | column_names |
|
83
|
+
| ( `column1` ) | nil | column1 |
|
84
|
+
| ( `column1`, "column2" ) | nil | column1, column2 |
|
85
|
+
| "index_table1_on_column1" ( `column1` ) | index_table1_on_column1 | column1 |
|
86
|
+
| "index_table1_on_column1_and_column2" ( `column1`, "column2" ) | index_table1_on_column1_and_column2 | column1, column2 |
|
87
|
+
|
88
|
+
#-------------------------------------------
|
89
|
+
|
90
|
+
Scenario Outline: parsing uniques
|
91
|
+
Given unique definition <unique_definition>
|
92
|
+
Then the name should be <name>
|
93
|
+
And the column_names should be <column_names>
|
94
|
+
And the unique should be true
|
95
|
+
Examples:
|
96
|
+
| unique_definition | name | column_names |
|
97
|
+
| ( `column1` ) | nil | column1 |
|
98
|
+
| ( `column1`, "column2" ) | nil | column1, column2 |
|
99
|
+
| "uindex_table1_on_column1" ( `column1` ) | uindex_table1_on_column1 | column1 |
|
100
|
+
| "uindex_table1_on_column1_and_column2" ( `column1`, "column2" ) | uindex_table1_on_column1_and_column2 | column1, column2 |
|
101
|
+
|
102
|
+
#-------------------------------------------
|
103
|
+
|
104
|
+
Scenario Outline: Auto-increment in the PostgreSQL style
|
105
|
+
Given CREATE TABLE sql
|
106
|
+
"""
|
107
|
+
CREATE TABLE cats (
|
108
|
+
id SERIAL PRIMARY KEY,
|
109
|
+
nickname CHARACTER VARYING(255),
|
110
|
+
birthday DATE NOT NULL DEFAULT '2010-01-05',
|
111
|
+
license_id INTEGER UNIQUE,
|
112
|
+
price NUMERIC(5,2) DEFAULT '15.05',
|
113
|
+
INDEX idx_p (price)
|
114
|
+
)
|
115
|
+
"""
|
116
|
+
Then column <column_name> name should be <column_name>
|
117
|
+
And column <column_name> data_type should be <data_type>
|
118
|
+
And column <column_name> primary_key should be <primary_key>
|
119
|
+
And column <column_name> indexed should be <indexed>
|
120
|
+
And column <column_name> unique should be <unique>
|
121
|
+
And column <column_name> autoincrement should be <autoincrement>
|
122
|
+
And column <column_name> allow_null should be <allow_null>
|
123
|
+
And column <column_name> default should be <default>
|
124
|
+
Examples:
|
125
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
126
|
+
| id | INTEGER | true | true | true | true | false | nil |
|
127
|
+
| nickname | CHARACTER VARYING(255) | false | false | false | false | true | nil |
|
128
|
+
| birthday | DATE | false | false | false | false | false | 2010-01-05 |
|
129
|
+
| license_id | INTEGER | false | true | true | false | true | nil |
|
130
|
+
| price | NUMERIC(5,2) | false | true | false | false | true | 15.05 |
|
131
|
+
|
132
|
+
Scenario Outline: Auto-incrementing primary key defined inline (0)
|
133
|
+
Given CREATE TABLE sql
|
134
|
+
"""
|
135
|
+
CREATE TABLE cats (
|
136
|
+
id SERIAL PRIMARY KEY,
|
137
|
+
nickname CHARACTER VARYING(255),
|
138
|
+
birthday DATE,
|
139
|
+
license_id INTEGER,
|
140
|
+
price NUMERIC(5,2)
|
141
|
+
)
|
142
|
+
"""
|
143
|
+
Then column <column_name> name should be <column_name>
|
144
|
+
And column <column_name> data_type should be <data_type>
|
145
|
+
And column <column_name> primary_key should be <primary_key>
|
146
|
+
And column <column_name> indexed should be <indexed>
|
147
|
+
And column <column_name> unique should be <unique>
|
148
|
+
And column <column_name> autoincrement should be <autoincrement>
|
149
|
+
And column <column_name> allow_null should be <allow_null>
|
150
|
+
And column <column_name> default should be <default>
|
151
|
+
Examples:
|
152
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
153
|
+
| id | INTEGER | true | true | true | true | false | nil |
|
154
|
+
| nickname | CHARACTER VARYING(255) | false | false | false | false | true | nil |
|
155
|
+
| birthday | DATE | false | false | false | false | true | nil |
|
156
|
+
| license_id | INTEGER | false | false | false | false | true | nil |
|
157
|
+
| price | NUMERIC(5,2) | false | false | false | false | true | nil |
|
158
|
+
|
159
|
+
|
160
|
+
Scenario Outline: Auto-incrementing primary key defined inline (1)
|
161
|
+
Given CREATE TABLE sql
|
162
|
+
"""
|
163
|
+
CREATE TABLE cats (
|
164
|
+
id SERIAL,
|
165
|
+
nickname CHARACTER VARYING(255),
|
166
|
+
birthday DATE,
|
167
|
+
license_id INTEGER,
|
168
|
+
price NUMERIC(5,2),
|
169
|
+
PRIMARY KEY ("id")
|
170
|
+
)
|
171
|
+
"""
|
172
|
+
Then column <column_name> name should be <column_name>
|
173
|
+
And column <column_name> data_type should be <data_type>
|
174
|
+
And column <column_name> primary_key should be <primary_key>
|
175
|
+
And column <column_name> indexed should be <indexed>
|
176
|
+
And column <column_name> unique should be <unique>
|
177
|
+
And column <column_name> autoincrement should be <autoincrement>
|
178
|
+
And column <column_name> allow_null should be <allow_null>
|
179
|
+
And column <column_name> default should be <default>
|
180
|
+
Examples:
|
181
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
182
|
+
| id | INTEGER | true | true | true | true | false | nil |
|
183
|
+
| nickname | CHARACTER VARYING(255) | false | false | false | false | true | nil |
|
184
|
+
| birthday | DATE | false | false | false | false | true | nil |
|
185
|
+
| license_id | INTEGER | false | false | false | false | true | nil |
|
186
|
+
| price | NUMERIC(5,2) | false | false | false | false | true | nil |
|
187
|
+
|
188
|
+
|
189
|
+
Scenario Outline: Auto-incrementing primary key defined inline (2)
|
190
|
+
Given CREATE TABLE sql
|
191
|
+
"""
|
192
|
+
CREATE TABLE cats (
|
193
|
+
id INTEGER PRIMARY KEY AUTO_INCREMENT,
|
194
|
+
nickname CHARACTER VARYING(255),
|
195
|
+
birthday DATE,
|
196
|
+
license_id INTEGER,
|
197
|
+
price NUMERIC(5,2)
|
198
|
+
)
|
199
|
+
"""
|
200
|
+
Then column <column_name> name should be <column_name>
|
201
|
+
And column <column_name> data_type should be <data_type>
|
202
|
+
And column <column_name> primary_key should be <primary_key>
|
203
|
+
And column <column_name> indexed should be <indexed>
|
204
|
+
And column <column_name> unique should be <unique>
|
205
|
+
And column <column_name> autoincrement should be <autoincrement>
|
206
|
+
And column <column_name> allow_null should be <allow_null>
|
207
|
+
And column <column_name> default should be <default>
|
208
|
+
Examples:
|
209
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
210
|
+
| id | INTEGER | true | true | true | true | false | nil |
|
211
|
+
| nickname | CHARACTER VARYING(255) | false | false | false | false | true | nil |
|
212
|
+
| birthday | DATE | false | false | false | false | true | nil |
|
213
|
+
| license_id | INTEGER | false | false | false | false | true | nil |
|
214
|
+
| price | NUMERIC(5,2) | false | false | false | false | true | nil |
|
215
|
+
|
216
|
+
|
217
|
+
Scenario Outline: Auto-incrementing primary key defined inline (3)
|
218
|
+
Given CREATE TABLE sql
|
219
|
+
"""
|
220
|
+
CREATE TABLE cats (
|
221
|
+
id INTEGER AUTO_INCREMENT,
|
222
|
+
nickname CHARACTER VARYING(255),
|
223
|
+
birthday DATE,
|
224
|
+
license_id INTEGER,
|
225
|
+
price NUMERIC(5,2),
|
226
|
+
PRIMARY KEY ("id")
|
227
|
+
)
|
228
|
+
"""
|
229
|
+
Then column <column_name> name should be <column_name>
|
230
|
+
And column <column_name> data_type should be <data_type>
|
231
|
+
And column <column_name> primary_key should be <primary_key>
|
232
|
+
And column <column_name> indexed should be <indexed>
|
233
|
+
And column <column_name> unique should be <unique>
|
234
|
+
And column <column_name> autoincrement should be <autoincrement>
|
235
|
+
And column <column_name> allow_null should be <allow_null>
|
236
|
+
And column <column_name> default should be <default>
|
237
|
+
Examples:
|
238
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
239
|
+
| id | INTEGER | true | true | true | true | false | nil |
|
240
|
+
| nickname | CHARACTER VARYING(255) | false | false | false | false | true | nil |
|
241
|
+
| birthday | DATE | false | false | false | false | true | nil |
|
242
|
+
| license_id | INTEGER | false | false | false | false | true | nil |
|
243
|
+
| price | NUMERIC(5,2) | false | false | false | false | true | nil |
|
244
|
+
|
245
|
+
|
246
|
+
Scenario Outline: Auto-incrementing primary key defined inline (4)
|
247
|
+
Given CREATE TABLE sql
|
248
|
+
"""
|
249
|
+
CREATE TABLE cats (
|
250
|
+
id INTEGER AUTO_INCREMENT,
|
251
|
+
nickname CHARACTER VARYING(255),
|
252
|
+
birthday DATE,
|
253
|
+
license_id INTEGER,
|
254
|
+
price NUMERIC(5,2),
|
255
|
+
CONSTRAINT PRIMARY KEY ("id")
|
256
|
+
)
|
257
|
+
"""
|
258
|
+
Then the column_count should be 5
|
259
|
+
And column <column_name> name should be <column_name>
|
260
|
+
And column <column_name> data_type should be <data_type>
|
261
|
+
And column <column_name> primary_key should be <primary_key>
|
262
|
+
And column <column_name> indexed should be <indexed>
|
263
|
+
And column <column_name> unique should be <unique>
|
264
|
+
And column <column_name> autoincrement should be <autoincrement>
|
265
|
+
And column <column_name> allow_null should be <allow_null>
|
266
|
+
And column <column_name> default should be <default>
|
267
|
+
Examples:
|
268
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
269
|
+
| id | INTEGER | true | true | true | true | false | nil |
|
270
|
+
| nickname | CHARACTER VARYING(255) | false | false | false | false | true | nil |
|
271
|
+
| birthday | DATE | false | false | false | false | true | nil |
|
272
|
+
| license_id | INTEGER | false | false | false | false | true | nil |
|
273
|
+
| price | NUMERIC(5,2) | false | false | false | false | true | nil |
|
274
|
+
|
275
|
+
|
276
|
+
Scenario Outline: Auto-incrementing primary key defined inline (5)
|
277
|
+
Given CREATE TABLE sql
|
278
|
+
"""
|
279
|
+
CREATE TABLE cats (
|
280
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
281
|
+
nickname CHARACTER VARYING(255),
|
282
|
+
birthday DATE,
|
283
|
+
license_id INTEGER,
|
284
|
+
price NUMERIC(5,2)
|
285
|
+
)
|
286
|
+
"""
|
287
|
+
Then column <column_name> name should be <column_name>
|
288
|
+
And column <column_name> data_type should be <data_type>
|
289
|
+
And column <column_name> primary_key should be <primary_key>
|
290
|
+
And column <column_name> indexed should be <indexed>
|
291
|
+
And column <column_name> unique should be <unique>
|
292
|
+
And column <column_name> autoincrement should be <autoincrement>
|
293
|
+
And column <column_name> allow_null should be <allow_null>
|
294
|
+
And column <column_name> default should be <default>
|
295
|
+
Examples:
|
296
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
297
|
+
| id | INTEGER | true | true | true | true | false | nil |
|
298
|
+
| nickname | CHARACTER VARYING(255) | false | false | false | false | true | nil |
|
299
|
+
| birthday | DATE | false | false | false | false | true | nil |
|
300
|
+
| license_id | INTEGER | false | false | false | false | true | nil |
|
301
|
+
| price | NUMERIC(5,2) | false | false | false | false | true | nil |
|
302
|
+
|
303
|
+
|
304
|
+
Scenario Outline: Auto-incrementing primary key defined inline (6)
|
305
|
+
Given CREATE TABLE sql
|
306
|
+
"""
|
307
|
+
CREATE TABLE cats (
|
308
|
+
id INTEGER AUTOINCREMENT,
|
309
|
+
nickname CHARACTER VARYING(255),
|
310
|
+
birthday DATE,
|
311
|
+
license_id INTEGER,
|
312
|
+
price NUMERIC(5,2),
|
313
|
+
PRIMARY KEY ("id")
|
314
|
+
)
|
315
|
+
"""
|
316
|
+
Then column <column_name> name should be <column_name>
|
317
|
+
And column <column_name> data_type should be <data_type>
|
318
|
+
And column <column_name> primary_key should be <primary_key>
|
319
|
+
And column <column_name> indexed should be <indexed>
|
320
|
+
And column <column_name> unique should be <unique>
|
321
|
+
And column <column_name> autoincrement should be <autoincrement>
|
322
|
+
And column <column_name> allow_null should be <allow_null>
|
323
|
+
And column <column_name> default should be <default>
|
324
|
+
Examples:
|
325
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
326
|
+
| id | INTEGER | true | true | true | true | false | nil |
|
327
|
+
| nickname | CHARACTER VARYING(255) | false | false | false | false | true | nil |
|
328
|
+
| birthday | DATE | false | false | false | false | true | nil |
|
329
|
+
| license_id | INTEGER | false | false | false | false | true | nil |
|
330
|
+
| price | NUMERIC(5,2) | false | false | false | false | true | nil |
|
331
|
+
|
332
|
+
|
333
|
+
Scenario Outline: MySQL-style backticks with TEMPORARY (0)
|
334
|
+
Given CREATE TABLE sql
|
335
|
+
"""
|
336
|
+
CREATE TEMPORARY TABLE `cats` (
|
337
|
+
`nickname` CHARACTER VARYING(255),
|
338
|
+
`birthday` DATE,
|
339
|
+
`license_id` INTEGER,
|
340
|
+
`price` NUMERIC(5,2)
|
341
|
+
)
|
342
|
+
"""
|
343
|
+
Then the temporary should be true
|
344
|
+
And column <column_name> name should be <column_name>
|
345
|
+
And column <column_name> data_type should be <data_type>
|
346
|
+
And column <column_name> primary_key should be <primary_key>
|
347
|
+
And column <column_name> indexed should be <indexed>
|
348
|
+
And column <column_name> unique should be <unique>
|
349
|
+
And column <column_name> autoincrement should be <autoincrement>
|
350
|
+
And column <column_name> allow_null should be <allow_null>
|
351
|
+
And column <column_name> default should be <default>
|
352
|
+
Examples:
|
353
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
354
|
+
| nickname | CHARACTER VARYING(255) | false | false | false | false | true | nil |
|
355
|
+
| birthday | DATE | false | false | false | false | true | nil |
|
356
|
+
| license_id | INTEGER | false | false | false | false | true | nil |
|
357
|
+
| price | NUMERIC(5,2) | false | false | false | false | true | nil |
|
358
|
+
|
359
|
+
|
360
|
+
Scenario Outline: MySQL-style backticks (0)
|
361
|
+
Given CREATE TABLE sql
|
362
|
+
"""
|
363
|
+
CREATE TABLE `cats` (
|
364
|
+
`nickname` CHARACTER VARYING(255),
|
365
|
+
`birthday` DATE,
|
366
|
+
`license_id` INTEGER,
|
367
|
+
`price` NUMERIC(5,2)
|
368
|
+
)
|
369
|
+
"""
|
370
|
+
Then column <column_name> name should be <column_name>
|
371
|
+
And column <column_name> data_type should be <data_type>
|
372
|
+
And column <column_name> primary_key should be <primary_key>
|
373
|
+
And column <column_name> indexed should be <indexed>
|
374
|
+
And column <column_name> unique should be <unique>
|
375
|
+
And column <column_name> autoincrement should be <autoincrement>
|
376
|
+
And column <column_name> allow_null should be <allow_null>
|
377
|
+
And column <column_name> default should be <default>
|
378
|
+
Examples:
|
379
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
380
|
+
| nickname | CHARACTER VARYING(255) | false | false | false | false | true | nil |
|
381
|
+
| birthday | DATE | false | false | false | false | true | nil |
|
382
|
+
| license_id | INTEGER | false | false | false | false | true | nil |
|
383
|
+
| price | NUMERIC(5,2) | false | false | false | false | true | nil |
|
384
|
+
|
385
|
+
|
386
|
+
Scenario Outline: Comments with "/* */", including multiline (0)
|
387
|
+
Given CREATE TABLE sql
|
388
|
+
"""
|
389
|
+
/* b o yah */CREATE TABLE cats (/* daom */
|
390
|
+
nickname /*yah
|
391
|
+
see
|
392
|
+
i didn't
|
393
|
+
think
|
394
|
+
so*/ CHARACTER VARYING(255), /*this is a great nickname*/
|
395
|
+
birthday /* did you notice this? */ DATE,
|
396
|
+
license_id INTEGER, /* oh yah that's cool too */
|
397
|
+
/* oh yah that's hilarious */ price NUMERIC(5,2)
|
398
|
+
)/* gosh
|
399
|
+
when
|
400
|
+
will
|
401
|
+
it
|
402
|
+
end
|
403
|
+
*/
|
404
|
+
"""
|
405
|
+
Then column <column_name> name should be <column_name>
|
406
|
+
And column <column_name> data_type should be <data_type>
|
407
|
+
And column <column_name> primary_key should be <primary_key>
|
408
|
+
And column <column_name> indexed should be <indexed>
|
409
|
+
And column <column_name> unique should be <unique>
|
410
|
+
And column <column_name> autoincrement should be <autoincrement>
|
411
|
+
And column <column_name> allow_null should be <allow_null>
|
412
|
+
And column <column_name> default should be <default>
|
413
|
+
Examples:
|
414
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
415
|
+
| nickname | CHARACTER VARYING(255) | false | false | false | false | true | nil |
|
416
|
+
| birthday | DATE | false | false | false | false | true | nil |
|
417
|
+
| license_id | INTEGER | false | false | false | false | true | nil |
|
418
|
+
| price | NUMERIC(5,2) | false | false | false | false | true | nil |
|
419
|
+
|
420
|
+
|
421
|
+
Scenario Outline: Double-quoted (0)
|
422
|
+
Given CREATE TABLE sql
|
423
|
+
"""
|
424
|
+
CREATE TABLE "cats" (
|
425
|
+
"nickname" CHARACTER VARYING(255),
|
426
|
+
"birthday" DATE,
|
427
|
+
"license_id" INTEGER,
|
428
|
+
"price" NUMERIC(5,2)
|
429
|
+
)
|
430
|
+
"""
|
431
|
+
Then column <column_name> name should be <column_name>
|
432
|
+
And column <column_name> data_type should be <data_type>
|
433
|
+
And column <column_name> primary_key should be <primary_key>
|
434
|
+
And column <column_name> indexed should be <indexed>
|
435
|
+
And column <column_name> unique should be <unique>
|
436
|
+
And column <column_name> autoincrement should be <autoincrement>
|
437
|
+
And column <column_name> allow_null should be <allow_null>
|
438
|
+
And column <column_name> default should be <default>
|
439
|
+
Examples:
|
440
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
441
|
+
| nickname | CHARACTER VARYING(255) | false | false | false | false | true | nil |
|
442
|
+
| birthday | DATE | false | false | false | false | true | nil |
|
443
|
+
| license_id | INTEGER | false | false | false | false | true | nil |
|
444
|
+
| price | NUMERIC(5,2) | false | false | false | false | true | nil |
|
445
|
+
|
446
|
+
|
447
|
+
Scenario Outline: Index defined in the "table constraints" section (0)
|
448
|
+
Given CREATE TABLE sql
|
449
|
+
"""
|
450
|
+
CREATE TABLE cats (
|
451
|
+
nickname CHARACTER VARYING(255),
|
452
|
+
birthday DATE,
|
453
|
+
license_id INTEGER,
|
454
|
+
price NUMERIC(5,2),
|
455
|
+
KEY index_cats_on_nickname (nickname)
|
456
|
+
)
|
457
|
+
"""
|
458
|
+
Then column <column_name> name should be <column_name>
|
459
|
+
And column <column_name> data_type should be <data_type>
|
460
|
+
And column <column_name> primary_key should be <primary_key>
|
461
|
+
And column <column_name> indexed should be <indexed>
|
462
|
+
And column <column_name> unique should be <unique>
|
463
|
+
And column <column_name> autoincrement should be <autoincrement>
|
464
|
+
And column <column_name> allow_null should be <allow_null>
|
465
|
+
And column <column_name> default should be <default>
|
466
|
+
Examples:
|
467
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
468
|
+
| nickname | CHARACTER VARYING(255) | false | true | false | false | true | nil |
|
469
|
+
| birthday | DATE | false | false | false | false | true | nil |
|
470
|
+
| license_id | INTEGER | false | false | false | false | true | nil |
|
471
|
+
| price | NUMERIC(5,2) | false | false | false | false | true | nil |
|
472
|
+
|
473
|
+
|
474
|
+
Scenario Outline: Index defined in the "table constraints" section (1)
|
475
|
+
Given CREATE TABLE sql
|
476
|
+
"""
|
477
|
+
CREATE TABLE cats (
|
478
|
+
nickname CHARACTER VARYING(255),
|
479
|
+
birthday DATE,
|
480
|
+
license_id INTEGER,
|
481
|
+
price NUMERIC(5,2),
|
482
|
+
INDEX index_cats_on_nickname (nickname)
|
483
|
+
)
|
484
|
+
"""
|
485
|
+
Then column <column_name> name should be <column_name>
|
486
|
+
And column <column_name> data_type should be <data_type>
|
487
|
+
And column <column_name> primary_key should be <primary_key>
|
488
|
+
And column <column_name> indexed should be <indexed>
|
489
|
+
And column <column_name> unique should be <unique>
|
490
|
+
And column <column_name> autoincrement should be <autoincrement>
|
491
|
+
And column <column_name> allow_null should be <allow_null>
|
492
|
+
And column <column_name> default should be <default>
|
493
|
+
Examples:
|
494
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
495
|
+
| nickname | CHARACTER VARYING(255) | false | true | false | false | true | nil |
|
496
|
+
| birthday | DATE | false | false | false | false | true | nil |
|
497
|
+
| license_id | INTEGER | false | false | false | false | true | nil |
|
498
|
+
| price | NUMERIC(5,2) | false | false | false | false | true | nil |
|
499
|
+
|
500
|
+
|
501
|
+
Scenario Outline: Named unique indexes (0)
|
502
|
+
Given CREATE TABLE sql
|
503
|
+
"""
|
504
|
+
CREATE TABLE cats (
|
505
|
+
nickname CHARACTER VARYING(255),
|
506
|
+
birthday DATE,
|
507
|
+
license_id INTEGER,
|
508
|
+
price NUMERIC(5,2),
|
509
|
+
UNIQUE KEY uindex_cats_on_nickname (nickname)
|
510
|
+
)
|
511
|
+
"""
|
512
|
+
Then column <column_name> name should be <column_name>
|
513
|
+
And column <column_name> data_type should be <data_type>
|
514
|
+
And column <column_name> primary_key should be <primary_key>
|
515
|
+
And column <column_name> indexed should be <indexed>
|
516
|
+
And column <column_name> unique should be <unique>
|
517
|
+
And column <column_name> autoincrement should be <autoincrement>
|
518
|
+
And column <column_name> allow_null should be <allow_null>
|
519
|
+
And column <column_name> default should be <default>
|
520
|
+
Examples:
|
521
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
522
|
+
| nickname | CHARACTER VARYING(255) | false | true | true | false | true | nil |
|
523
|
+
| birthday | DATE | false | false | false | false | true | nil |
|
524
|
+
| license_id | INTEGER | false | false | false | false | true | nil |
|
525
|
+
| price | NUMERIC(5,2) | false | false | false | false | true | nil |
|
526
|
+
|
527
|
+
|
528
|
+
Scenario Outline: Named unique indexes (1)
|
529
|
+
Given CREATE TABLE sql
|
530
|
+
"""
|
531
|
+
CREATE TABLE cats (
|
532
|
+
nickname CHARACTER VARYING(255),
|
533
|
+
birthday DATE,
|
534
|
+
license_id INTEGER,
|
535
|
+
price NUMERIC(5,2),
|
536
|
+
UNIQUE INDEX uindex_cats_on_nickname (nickname)
|
537
|
+
)
|
538
|
+
"""
|
539
|
+
Then column <column_name> name should be <column_name>
|
540
|
+
And column <column_name> data_type should be <data_type>
|
541
|
+
And column <column_name> primary_key should be <primary_key>
|
542
|
+
And column <column_name> indexed should be <indexed>
|
543
|
+
And column <column_name> unique should be <unique>
|
544
|
+
And column <column_name> autoincrement should be <autoincrement>
|
545
|
+
And column <column_name> allow_null should be <allow_null>
|
546
|
+
And column <column_name> default should be <default>
|
547
|
+
Examples:
|
548
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
549
|
+
| nickname | CHARACTER VARYING(255) | false | true | true | false | true | nil |
|
550
|
+
| birthday | DATE | false | false | false | false | true | nil |
|
551
|
+
| license_id | INTEGER | false | false | false | false | true | nil |
|
552
|
+
| price | NUMERIC(5,2) | false | false | false | false | true | nil |
|
553
|
+
|
554
|
+
|
555
|
+
Scenario Outline: Reserved words in table and column names (0)
|
556
|
+
Given CREATE TABLE sql
|
557
|
+
"""
|
558
|
+
CREATE TABLE "where" (
|
559
|
+
nickname CHARACTER VARYING(255),
|
560
|
+
"false" CHARACTER VARYING(255),
|
561
|
+
"else" NUMERIC(5,2)
|
562
|
+
)
|
563
|
+
"""
|
564
|
+
Then column <column_name> name should be <column_name>
|
565
|
+
And column <column_name> data_type should be <data_type>
|
566
|
+
And column <column_name> primary_key should be <primary_key>
|
567
|
+
And column <column_name> indexed should be <indexed>
|
568
|
+
And column <column_name> unique should be <unique>
|
569
|
+
And column <column_name> autoincrement should be <autoincrement>
|
570
|
+
And column <column_name> allow_null should be <allow_null>
|
571
|
+
And column <column_name> default should be <default>
|
572
|
+
Examples:
|
573
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
574
|
+
| nickname | CHARACTER VARYING(255) | false | false | false | false | true | nil |
|
575
|
+
| "false" | CHARACTER VARYING(255) | false | false | false | false | true | nil |
|
576
|
+
| else | NUMERIC(5,2) | false | false | false | false | true | nil |
|
577
|
+
|
578
|
+
|
579
|
+
Scenario Outline: String primary key (0)
|
580
|
+
Given CREATE TABLE sql
|
581
|
+
"""
|
582
|
+
CREATE TABLE cats (
|
583
|
+
nickname CHARACTER VARYING(255) PRIMARY KEY,
|
584
|
+
birthday DATE,
|
585
|
+
license_id INTEGER,
|
586
|
+
price NUMERIC(5,2)
|
587
|
+
)
|
588
|
+
"""
|
589
|
+
Then column <column_name> name should be <column_name>
|
590
|
+
And column <column_name> data_type should be <data_type>
|
591
|
+
And column <column_name> primary_key should be <primary_key>
|
592
|
+
And column <column_name> indexed should be <indexed>
|
593
|
+
And column <column_name> unique should be <unique>
|
594
|
+
And column <column_name> autoincrement should be <autoincrement>
|
595
|
+
And column <column_name> allow_null should be <allow_null>
|
596
|
+
And column <column_name> default should be <default>
|
597
|
+
Examples:
|
598
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
599
|
+
| nickname | CHARACTER VARYING(255) | true | true | true | false | false | "" |
|
600
|
+
| birthday | DATE | false | false | false | false | true | nil |
|
601
|
+
| license_id | INTEGER | false | false | false | false | true | nil |
|
602
|
+
| price | NUMERIC(5,2) | false | false | false | false | true | nil |
|
603
|
+
|
604
|
+
|
605
|
+
Scenario Outline: String primary key (1)
|
606
|
+
Given CREATE TABLE sql
|
607
|
+
"""
|
608
|
+
CREATE TABLE cats (
|
609
|
+
nickname CHARACTER VARYING(255),
|
610
|
+
birthday DATE,
|
611
|
+
license_id INTEGER,
|
612
|
+
price NUMERIC(5,2),
|
613
|
+
PRIMARY KEY (nickname)
|
614
|
+
)
|
615
|
+
"""
|
616
|
+
Then column <column_name> name should be <column_name>
|
617
|
+
And column <column_name> data_type should be <data_type>
|
618
|
+
And column <column_name> primary_key should be <primary_key>
|
619
|
+
And column <column_name> indexed should be <indexed>
|
620
|
+
And column <column_name> unique should be <unique>
|
621
|
+
And column <column_name> autoincrement should be <autoincrement>
|
622
|
+
And column <column_name> allow_null should be <allow_null>
|
623
|
+
And column <column_name> default should be <default>
|
624
|
+
Examples:
|
625
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
626
|
+
| nickname | CHARACTER VARYING(255) | true | true | true | false | false | "" |
|
627
|
+
| birthday | DATE | false | false | false | false | true | nil |
|
628
|
+
| license_id | INTEGER | false | false | false | false | true | nil |
|
629
|
+
| price | NUMERIC(5,2) | false | false | false | false | true | nil |
|
630
|
+
|
631
|
+
|
632
|
+
Scenario Outline: Uniques (0)
|
633
|
+
Given CREATE TABLE sql
|
634
|
+
"""
|
635
|
+
CREATE TABLE cats (
|
636
|
+
nickname CHARACTER VARYING(255) UNIQUE,
|
637
|
+
birthday DATE,
|
638
|
+
license_id INTEGER,
|
639
|
+
price NUMERIC(5,2)
|
640
|
+
)
|
641
|
+
"""
|
642
|
+
Then column <column_name> name should be <column_name>
|
643
|
+
And column <column_name> data_type should be <data_type>
|
644
|
+
And column <column_name> primary_key should be <primary_key>
|
645
|
+
And column <column_name> indexed should be <indexed>
|
646
|
+
And column <column_name> unique should be <unique>
|
647
|
+
And column <column_name> autoincrement should be <autoincrement>
|
648
|
+
And column <column_name> allow_null should be <allow_null>
|
649
|
+
And column <column_name> default should be <default>
|
650
|
+
Examples:
|
651
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
652
|
+
| nickname | CHARACTER VARYING(255) | false | true | true | false | true | nil |
|
653
|
+
| birthday | DATE | false | false | false | false | true | nil |
|
654
|
+
| license_id | INTEGER | false | false | false | false | true | nil |
|
655
|
+
| price | NUMERIC(5,2) | false | false | false | false | true | nil |
|
656
|
+
|
657
|
+
|
658
|
+
Scenario Outline: Uniques (1)
|
659
|
+
Given CREATE TABLE sql
|
660
|
+
"""
|
661
|
+
CREATE TABLE cats (
|
662
|
+
nickname CHARACTER VARYING(255),
|
663
|
+
birthday DATE,
|
664
|
+
license_id INTEGER,
|
665
|
+
price NUMERIC(5,2),
|
666
|
+
UNIQUE (nickname)
|
667
|
+
)
|
668
|
+
"""
|
669
|
+
Then column <column_name> name should be <column_name>
|
670
|
+
And column <column_name> data_type should be <data_type>
|
671
|
+
And column <column_name> primary_key should be <primary_key>
|
672
|
+
And column <column_name> indexed should be <indexed>
|
673
|
+
And column <column_name> unique should be <unique>
|
674
|
+
And column <column_name> autoincrement should be <autoincrement>
|
675
|
+
And column <column_name> allow_null should be <allow_null>
|
676
|
+
And column <column_name> default should be <default>
|
677
|
+
Examples:
|
678
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
679
|
+
| nickname | CHARACTER VARYING(255) | false | true | true | false | true | nil |
|
680
|
+
| birthday | DATE | false | false | false | false | true | nil |
|
681
|
+
| license_id | INTEGER | false | false | false | false | true | nil |
|
682
|
+
| price | NUMERIC(5,2) | false | false | false | false | true | nil |
|
683
|
+
|
684
|
+
|
685
|
+
Scenario Outline: Uniques (2)
|
686
|
+
Given CREATE TABLE sql
|
687
|
+
"""
|
688
|
+
CREATE TABLE cats (
|
689
|
+
nickname CHARACTER VARYING(255),
|
690
|
+
birthday DATE,
|
691
|
+
license_id INTEGER,
|
692
|
+
price NUMERIC(5,2),
|
693
|
+
CONSTRAINT UNIQUE (nickname)
|
694
|
+
)
|
695
|
+
"""
|
696
|
+
Then column <column_name> name should be <column_name>
|
697
|
+
And column <column_name> data_type should be <data_type>
|
698
|
+
And column <column_name> primary_key should be <primary_key>
|
699
|
+
And column <column_name> indexed should be <indexed>
|
700
|
+
And column <column_name> unique should be <unique>
|
701
|
+
And column <column_name> autoincrement should be <autoincrement>
|
702
|
+
And column <column_name> allow_null should be <allow_null>
|
703
|
+
And column <column_name> default should be <default>
|
704
|
+
Examples:
|
705
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
706
|
+
| nickname | CHARACTER VARYING(255) | false | true | true | false | true | nil |
|
707
|
+
| birthday | DATE | false | false | false | false | true | nil |
|
708
|
+
| license_id | INTEGER | false | false | false | false | true | nil |
|
709
|
+
| price | NUMERIC(5,2) | false | false | false | false | true | nil |
|
710
|
+
|
711
|
+
|
712
|
+
Scenario Outline: Unquoted (0)
|
713
|
+
Given CREATE TABLE sql
|
714
|
+
"""
|
715
|
+
CREATE TABLE cats (
|
716
|
+
nickname CHARACTER VARYING(255),
|
717
|
+
birthday DATE,
|
718
|
+
license_id INTEGER,
|
719
|
+
price NUMERIC(5,2)
|
720
|
+
)
|
721
|
+
"""
|
722
|
+
Then column <column_name> name should be <column_name>
|
723
|
+
And column <column_name> data_type should be <data_type>
|
724
|
+
And column <column_name> primary_key should be <primary_key>
|
725
|
+
And column <column_name> indexed should be <indexed>
|
726
|
+
And column <column_name> unique should be <unique>
|
727
|
+
And column <column_name> autoincrement should be <autoincrement>
|
728
|
+
And column <column_name> allow_null should be <allow_null>
|
729
|
+
And column <column_name> default should be <default>
|
730
|
+
Examples:
|
731
|
+
| column_name | data_type | primary_key | indexed | unique | autoincrement | allow_null | default |
|
732
|
+
| nickname | CHARACTER VARYING(255) | false | false | false | false | true | nil |
|
733
|
+
| birthday | DATE | false | false | false | false | true | nil |
|
734
|
+
| license_id | INTEGER | false | false | false | false | true | nil |
|
735
|
+
| price | NUMERIC(5,2) | false | false | false | false | true | nil |
|
736
|
+
|