ddl_parser 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/Rakefile +1 -1
- data/ddl_parser.gemspec +10 -10
- data/lib/ddl_parser/ddl/db2/parser.rb +14 -14
- data/lib/ddl_parser/ddl/db2.rb +1 -1
- data/lib/ddl_parser/ddl.rb +1 -1
- data/lib/ddl_parser/parser.rb +9 -7
- data/lib/ddl_parser/shared_rules/constants.rb +12 -12
- data/lib/ddl_parser/shared_rules/data_types.rb +13 -13
- data/lib/ddl_parser/shared_rules.rb +3 -3
- data/lib/ddl_parser/sql/db2.rb +1 -1
- data/lib/ddl_parser/sql.rb +1 -1
- data/lib/ddl_parser/{translater → translator}/alter_table.rb +1 -1
- data/lib/ddl_parser/{translater → translator}/create_index.rb +1 -1
- data/lib/ddl_parser/{translater → translator}/create_table.rb +1 -1
- data/lib/ddl_parser/translator.rb +6 -0
- data/lib/ddl_parser/version.rb +1 -1
- data/lib/ddl_parser.rb +9 -9
- data/spec/ddl_parser/ddl/db2/alter_table_spec.rb +20 -20
- data/spec/ddl_parser/ddl/db2/create_index_spec.rb +5 -5
- data/spec/ddl_parser/ddl/db2/create_table_spec.rb +170 -171
- data/spec/ddl_parser/parser_spec.rb +39 -39
- data/spec/ddl_parser/shared_rules/constants_spec.rb +65 -65
- data/spec/ddl_parser/shared_rules/data_types_spec.rb +14 -14
- data/spec/ddl_parser/sql/db2/select_parser_spec.rb +58 -58
- data/spec/spec_helper.rb +6 -6
- metadata +14 -14
- data/lib/ddl_parser/translater.rb +0 -6
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
ZDYzYmJkNzc3YjQxNmM2MmFhNDExOWZmOTA2ZmQxOWJmZGZmMGE2Mw==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3ad6d742be71dfa2eeaf49b8ccf6bd97fae6d72a
|
4
|
+
data.tar.gz: ba19049f73204cabe3e133825554dad7d283a765
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
NGI0OWNlN2NhZmUwY2ZkNDJmYzhhMjEwNjcyYjYyZTk0ZWQ3MWVhZWJkMzU3
|
11
|
-
YjUxZTdiZWIxNmM0ZGM3NzdhOTQ3ODhkOWM3ZTgzZjQ3MTgzNDU=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
NWZkYWJiYmNmMjZjYjY5MDY1ZjYzODllOWVlYjA5YzVmMmVjNTA2N2Q1YzE4
|
14
|
-
YTNjZWMzMmRmZTRkNTJjM2QzMmQ3Y2Y3NTc5MWVhYzAwOGEwODE3NTY1NjE0
|
15
|
-
NzE1ZGNhMjY5ZjNhOGQ3ZmE2OTZlYWJjZjI3ZjYxOWU4NTM3ODg=
|
6
|
+
metadata.gz: a615faff1b2ce6b70b50c641ff256101022adb97c3684a2f971f73dbc9ddc72ea0d7e54fcefe752352d32b8db5bdd00890c9dd18b13b34ee30d00b74f31b55d9
|
7
|
+
data.tar.gz: 759ecd5b9dd0c77998918ba25bb015e148e108ecf9dd192cf67bd2d457b0f94b0a4f458ee7c0a24019c7a8e803e795369271b3836dc17c1038ce2729459b296a
|
data/Rakefile
CHANGED
@@ -1 +1 @@
|
|
1
|
-
require
|
1
|
+
require 'bundler/gem_tasks'
|
data/ddl_parser.gemspec
CHANGED
@@ -4,23 +4,23 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'ddl_parser/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'ddl_parser'
|
8
8
|
spec.version = DDLParser::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
9
|
+
spec.authors = ['Rasmus Bergholdt']
|
10
|
+
spec.email = ['rasmus.bergholdt@gmail.com']
|
11
11
|
spec.description = %q{Parse SQL and DDL statements}
|
12
12
|
spec.summary = %q{will parse statements and make it possible to extract content }
|
13
|
-
spec.homepage =
|
14
|
-
spec.license =
|
13
|
+
spec.homepage = ''
|
14
|
+
spec.license = 'MIT'
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = [
|
19
|
+
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_dependency
|
21
|
+
spec.add_dependency 'parslet', '~> 1.5'
|
22
22
|
|
23
|
-
spec.add_development_dependency
|
24
|
-
spec.add_development_dependency
|
25
|
-
spec.add_development_dependency
|
23
|
+
spec.add_development_dependency 'bundler', '~> 1.3'
|
24
|
+
spec.add_development_dependency 'rake', '~> 10.1'
|
25
|
+
spec.add_development_dependency 'rspec', '= 2.14.1'
|
26
26
|
end
|
@@ -8,30 +8,30 @@ module DDLParser
|
|
8
8
|
include DDLParser::SharedRules::DataTypes
|
9
9
|
|
10
10
|
# column options
|
11
|
-
rule(:option_not_null) { str(
|
11
|
+
rule(:option_not_null) { str('not null') }
|
12
12
|
rule(:column_option) { (option_not_null).as(:column_option) }
|
13
13
|
#rule(:lob_options)
|
14
|
-
rule(:primary_key) { (str(
|
15
|
-
rule(:constraint) { (str(
|
14
|
+
rule(:primary_key) { (str('primary key') >> spaces >> references).as(:primary_key) }
|
15
|
+
rule(:constraint) { (str('constraint') >> spaces >> identifier.as(:column_name) >> spaces >> (str('unique') | str('foreign key')).as(:constraint_type) >>
|
16
16
|
spaces >> references.as(:constraint_arglist) >> spaces >> reference_clause.maybe).as(:constraint)}
|
17
17
|
#rule(:unique)
|
18
18
|
rule(:references) { lparen >> space? >> arglist >> space? >> rparen }
|
19
|
-
rule(:reference_clause) { str(
|
19
|
+
rule(:reference_clause) { str('references') >> spaces >> identifier >> spaces >> references.as(:reference_arglist) >> (identifier >> spaces).repeat }
|
20
20
|
#rule(:check)
|
21
21
|
#rule(:check_condition)
|
22
22
|
#rule(:constraint_attr)
|
23
|
-
rule(:gen_col_def) { str(
|
23
|
+
rule(:gen_col_def) { str('generated always') | str('generated by default') }
|
24
24
|
rule(:default_value) { const | current_timestamp | function }
|
25
25
|
rule(:default_values) { (default_value >> space?).repeat }
|
26
|
-
rule(:default_clause) { ((str(
|
27
|
-
rule(:identity_options) { (str(
|
28
|
-
integer.as(:start_value) >> (comma|space) >> spaces.maybe >>str(
|
26
|
+
rule(:default_clause) { ((str('with') >> space?).maybe >> str('default') >> space? >> default_values).as(:default_clause) }
|
27
|
+
rule(:identity_options) { (str('as identity') >> space? >> lparen >> str('start with') >> spaces >>
|
28
|
+
integer.as(:start_value) >> (comma|space) >> spaces.maybe >>str('increment by') >> spaces >> integer.as(:increment_value)>> (spaces >> str('cache')>>spaces>>integer.as(:cache_value)).maybe >> spaces.maybe >>rparen).as(:identity) }
|
29
29
|
|
30
30
|
rule(:column_options) { ((gen_col_def | column_option | default_clause | identity_options) >> spaces).repeat }
|
31
31
|
|
32
32
|
rule(:column_name) { identifier }
|
33
33
|
rule(:constraint_name) { identifier }
|
34
|
-
rule(:column_sort) { str(
|
34
|
+
rule(:column_sort) { str('ascending') | str('descending')}
|
35
35
|
|
36
36
|
rule(:column_definition) { (column_name.as(:field) >> space.repeat >> data_type >> space.repeat >> (column_options.maybe).as(:options)).as(:column)}
|
37
37
|
|
@@ -45,25 +45,25 @@ module DDLParser
|
|
45
45
|
(comma >> space? >> index_column_definition).repeat
|
46
46
|
}
|
47
47
|
|
48
|
-
rule(:add_constraint_clause) { (str(
|
48
|
+
rule(:add_constraint_clause) { (str('add constraint') >> space? >>
|
49
49
|
constraint_name.as(:constraint_name) >> space? >>
|
50
50
|
foreign_key_clause.as(:foreign_key_clause)).as(:add_constraint)
|
51
51
|
}
|
52
|
-
rule(:foreign_key_clause) {str(
|
52
|
+
rule(:foreign_key_clause) {str('foreign key') >> space? >> lparen >>
|
53
53
|
element_list_index.as(:member_fields) >> space? >> rparen >> space? >>
|
54
54
|
reference_clause.as(:reference_clause) >> space? >>
|
55
55
|
(on_delete_clause.as(:on_delete_clause) >> space?).maybe >>
|
56
56
|
(on_update_clause >> space?).maybe
|
57
57
|
}
|
58
|
-
rule(:on_delete_clause) {str(
|
58
|
+
rule(:on_delete_clause) {str('on delete') >> space? >>
|
59
59
|
(str('no action')|str('restrict')|str('cascade')|str('set null')).as(:on_delete_option) >> space?
|
60
60
|
}
|
61
|
-
rule(:on_update_clause) {str(
|
61
|
+
rule(:on_update_clause) {str('on update') >> space? >>
|
62
62
|
(str('no action')|str('restrict')).as(:on_update_option) >> space?
|
63
63
|
}
|
64
64
|
|
65
65
|
rule(:alter_table_add_column) do
|
66
|
-
(str(
|
66
|
+
(str('add') >> space? >> (str('column') >> space? >> column_definition) | primary_key).as(:add)
|
67
67
|
end
|
68
68
|
|
69
69
|
rule(:alter_table_element) { (alter_table_add_column | add_constraint_clause) >> spaces.maybe }
|
data/lib/ddl_parser/ddl/db2.rb
CHANGED
data/lib/ddl_parser/ddl.rb
CHANGED
data/lib/ddl_parser/parser.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
class DDLParser::Parser
|
2
2
|
|
3
|
-
attr_accessor :statement_type, :parse_tree
|
3
|
+
attr_accessor :statement_type, :parse_tree
|
4
4
|
|
5
5
|
def initialize(statement)
|
6
|
-
@statement = statement.
|
6
|
+
@statement = statement.split.join(' ').downcase
|
7
7
|
@parse_tree = nil
|
8
8
|
@parse_error = nil
|
9
9
|
begin
|
10
|
-
case @statement
|
10
|
+
case @statement.strip
|
11
11
|
when /\Acreate\stable.*/i
|
12
12
|
@statement_type = :create_table
|
13
13
|
@parse_tree = DDLParser::DDL::DB2::Parser.new.create_table.parse(@statement)
|
@@ -18,7 +18,7 @@ class DDLParser::Parser
|
|
18
18
|
@statement_type = :create_index
|
19
19
|
@parse_tree = DDLParser::DDL::DB2::Parser.new.create_index.parse(@statement)
|
20
20
|
else
|
21
|
-
raise
|
21
|
+
raise 'Unknown DDL statement'
|
22
22
|
end
|
23
23
|
rescue Parslet::ParseFailed => error
|
24
24
|
@parse_error = error
|
@@ -36,11 +36,13 @@ class DDLParser::Parser
|
|
36
36
|
def translate
|
37
37
|
case statement_type
|
38
38
|
when :create_table
|
39
|
-
DDLParser::
|
39
|
+
DDLParser::Translator::CreateTable.new(parse_tree)
|
40
40
|
when :alter_table
|
41
|
-
DDLParser::
|
41
|
+
DDLParser::Translator::AlterTable.new(parse_tree)
|
42
42
|
when :create_index
|
43
|
-
DDLParser::
|
43
|
+
DDLParser::Translator::Createindex.new(parse_tree)
|
44
|
+
else
|
45
|
+
raise "Unknown statement_type #{statement_type}"
|
44
46
|
end
|
45
47
|
end
|
46
48
|
|
@@ -3,27 +3,27 @@ module DDLParser
|
|
3
3
|
module Constants
|
4
4
|
include Parslet
|
5
5
|
|
6
|
-
rule(:digit) { match[
|
7
|
-
rule(:integer) { (str(
|
8
|
-
rule(:float) { (str(
|
6
|
+
rule(:digit) { match['0-9'] }
|
7
|
+
rule(:integer) { (str('-').maybe >> digit.repeat(1)).as(:integer) }
|
8
|
+
rule(:float) { (str('-').maybe >> digit.repeat(1) >> str('.') >> digit.repeat(1)).as(:float) }
|
9
9
|
|
10
10
|
rule(:space) { match('\s').repeat(1) }
|
11
11
|
rule(:space?) { space.maybe }
|
12
12
|
rule(:newline) { str("\n") }
|
13
13
|
rule(:spaces) { (space | (comment? >> newline)).repeat }
|
14
|
-
rule(:comment?) { (str(
|
14
|
+
rule(:comment?) { (str('--') >> (newline.absent? >> any).repeat).maybe }
|
15
15
|
|
16
16
|
rule(:comma) { str(',') >> space? }
|
17
17
|
rule(:lparen) { str('(') >> space? }
|
18
18
|
rule(:rparen) { str(')') >> space? }
|
19
19
|
|
20
|
-
rule(:boolean) { (str(
|
21
|
-
rule(:datetime) { (digit.repeat(4) >> str(
|
22
|
-
digit.repeat(2) >> str(
|
23
|
-
digit.repeat(2) >> str(
|
24
|
-
digit.repeat(2) >> str(
|
25
|
-
digit.repeat(2) >> str(
|
26
|
-
digit.repeat(2) >> str(
|
20
|
+
rule(:boolean) { (str('true') | str('false')).as(:boolean) }
|
21
|
+
rule(:datetime) { (digit.repeat(4) >> str('-') >>
|
22
|
+
digit.repeat(2) >> str('-') >>
|
23
|
+
digit.repeat(2) >> str('T') >>
|
24
|
+
digit.repeat(2) >> str(':') >>
|
25
|
+
digit.repeat(2) >> str(':') >>
|
26
|
+
digit.repeat(2) >> str('Z')).as(:datetime) }
|
27
27
|
|
28
28
|
|
29
29
|
rule(:string) {
|
@@ -40,7 +40,7 @@ module DDLParser
|
|
40
40
|
}
|
41
41
|
|
42
42
|
rule(:identifier) { match('\\w').repeat(1) }
|
43
|
-
rule(:current_timestamp) { str(
|
43
|
+
rule(:current_timestamp) { str('current timestamp') }
|
44
44
|
|
45
45
|
end
|
46
46
|
end
|
@@ -5,20 +5,20 @@ module DDLParser
|
|
5
5
|
include DDLParser::SharedRules::Constants
|
6
6
|
|
7
7
|
# Build-in data types
|
8
|
-
rule(:type_smallint) {str(
|
9
|
-
rule(:type_integer) {(str(
|
10
|
-
rule(:type_bigint) {str(
|
11
|
-
rule(:type_decimal) {(((str(
|
8
|
+
rule(:type_smallint) {str('smallint')}
|
9
|
+
rule(:type_integer) {(str('integer')| str('int'))}
|
10
|
+
rule(:type_bigint) {str('bigint').as(:bigint)}
|
11
|
+
rule(:type_decimal) {(((str('decimal') | str('dec') | str('numeric') | str('num')) >>
|
12
12
|
(lparen >> integer.as(:total) >> comma >> integer.as(:scale) >> rparen).as(:precision))).as(:decimal)}
|
13
|
-
rule(:type_float) {(str(
|
14
|
-
rule(:type_real) {str(
|
15
|
-
rule(:type_double) {str(
|
16
|
-
rule(:type_char) {((str(
|
17
|
-
rule(:type_varchar) {(str(
|
18
|
-
rule(:type_clob) {(str(
|
19
|
-
rule(:type_date) {str(
|
20
|
-
rule(:type_timestamp) {str(
|
21
|
-
rule(:type_time) {type_timestamp.absent? >> str(
|
13
|
+
rule(:type_float) {(str('float') >> (lparen >> integer >> rparen).as(:precision)).as(:float)}
|
14
|
+
rule(:type_real) {str('real')}
|
15
|
+
rule(:type_double) {str('double')}
|
16
|
+
rule(:type_char) {((str('character') | str('char')) >> (lparen >> integer >> rparen).as(:length)).as(:char)}
|
17
|
+
rule(:type_varchar) {(str('varchar') >> (lparen >> integer >> rparen).as(:length)).as(:varchar)}
|
18
|
+
rule(:type_clob) {(str('clob') >> (lparen >> integer >> rparen).as(:length)).as(:clob)}
|
19
|
+
rule(:type_date) {str('date')}
|
20
|
+
rule(:type_timestamp) {str('timestamp')}
|
21
|
+
rule(:type_time) {type_timestamp.absent? >> str('time')}
|
22
22
|
|
23
23
|
|
24
24
|
rule(:data_type) { (type_smallint | type_integer | type_bigint | type_decimal | type_float | type_real |
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module DDLParser::SharedRules
|
2
2
|
end
|
3
3
|
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
4
|
+
require 'ddl_parser/shared_rules/constants'
|
5
|
+
require 'ddl_parser/shared_rules/data_types'
|
6
|
+
require 'ddl_parser/shared_rules/logical_operators'
|
data/lib/ddl_parser/sql/db2.rb
CHANGED
data/lib/ddl_parser/sql.rb
CHANGED
data/lib/ddl_parser/version.rb
CHANGED
data/lib/ddl_parser.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
1
|
+
require 'parslet'
|
2
|
+
require 'time'
|
3
|
+
require 'parslet_extentions'
|
4
|
+
require 'ddl_parser/version'
|
5
5
|
|
6
6
|
module DDLParser
|
7
7
|
Error = Class.new StandardError
|
8
8
|
ParseError = Class.new Error
|
9
9
|
end
|
10
10
|
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
11
|
+
require 'ddl_parser/shared_rules'
|
12
|
+
require 'ddl_parser/sql'
|
13
|
+
require 'ddl_parser/ddl'
|
14
|
+
require 'ddl_parser/parser'
|
15
|
+
require 'ddl_parser/translator'
|
16
16
|
|
@@ -1,9 +1,9 @@
|
|
1
|
-
|
1
|
+
require_relative '../../../../spec/spec_helper'
|
2
2
|
|
3
3
|
describe 'Alter table parsing' do
|
4
4
|
let(:parser) { DDLParser::DDL::DB2::Parser.new }
|
5
|
-
context
|
6
|
-
it
|
5
|
+
context 'alter table' do
|
6
|
+
it 'parses alter_table add column' do
|
7
7
|
sql = <<EOF
|
8
8
|
ALTER TABLE BUDGET
|
9
9
|
ADD COLUMN BUDGET_AMOUNT_IN_CO DECIMAL(15,2) NOT NULL DEFAULT 0
|
@@ -18,11 +18,11 @@ EOF
|
|
18
18
|
#puts result.inspect
|
19
19
|
result.count.should == 3
|
20
20
|
result.should include(:operation, :table_name)
|
21
|
-
result.should include(:operation =>
|
21
|
+
result.should include(:operation => 'alter table')
|
22
22
|
result[:elements].first[:add][:column].should include(:field, :data_type)
|
23
23
|
end
|
24
24
|
|
25
|
-
it
|
25
|
+
it 'parses alter_table foreign key constraint without on' do
|
26
26
|
sql = <<EOF
|
27
27
|
ALTER TABLE REPLAN_ADDR
|
28
28
|
ADD CONSTRAINT REPLAN_ADDR_FK
|
@@ -40,11 +40,11 @@ EOF
|
|
40
40
|
end
|
41
41
|
|
42
42
|
#puts result.inspect #.count.should == 3
|
43
|
-
result.should include({:operation =>
|
44
|
-
result[:elements].first[:add_constraint].should include({:constraint_name=>
|
43
|
+
result.should include({:operation => 'alter table', :table_name=> 'replan_addr'})
|
44
|
+
result[:elements].first[:add_constraint].should include({:constraint_name=> 'replan_addr_fk'})
|
45
45
|
end
|
46
46
|
|
47
|
-
it
|
47
|
+
it 'parses foreign key clause' do
|
48
48
|
sql = <<EOF
|
49
49
|
FOREIGN KEY
|
50
50
|
(CONSIGNMENT,
|
@@ -64,12 +64,12 @@ EOF
|
|
64
64
|
#puts result.inspect
|
65
65
|
result.count.should == 2
|
66
66
|
result.should include(:reference_clause)
|
67
|
-
result[:member_fields][0][:field].should ==
|
68
|
-
result[:member_fields][1][:field].should ==
|
69
|
-
result[:reference_clause][:reference_arglist][0][:item].should ==
|
70
|
-
result[:reference_clause][:reference_arglist][1][:item].should ==
|
67
|
+
result[:member_fields][0][:field].should == 'consignment'
|
68
|
+
result[:member_fields][1][:field].should == 'event'
|
69
|
+
result[:reference_clause][:reference_arglist][0][:item].should == 'consignment'
|
70
|
+
result[:reference_clause][:reference_arglist][1][:item].should == 'event'
|
71
71
|
end
|
72
|
-
it
|
72
|
+
it 'parses reference_clause' do
|
73
73
|
sql = <<EOF
|
74
74
|
REFERENCES REPLAN_MAIN
|
75
75
|
(CONSIGNMENT,
|
@@ -84,10 +84,10 @@ EOF
|
|
84
84
|
|
85
85
|
#puts result.inspect
|
86
86
|
result.should include(:reference_arglist)
|
87
|
-
result[:reference_arglist][0][:item].should ==
|
88
|
-
result[:reference_arglist][1][:item].should ==
|
87
|
+
result[:reference_arglist][0][:item].should == 'consignment'
|
88
|
+
result[:reference_arglist][1][:item].should == 'event'
|
89
89
|
end
|
90
|
-
it
|
90
|
+
it 'parses on_delete_clause' do
|
91
91
|
sql = <<EOF
|
92
92
|
ON DELETE RESTRICT
|
93
93
|
EOF
|
@@ -101,7 +101,7 @@ EOF
|
|
101
101
|
result.should include(:on_delete_option => 'restrict')
|
102
102
|
end
|
103
103
|
|
104
|
-
it
|
104
|
+
it 'parses on_update_clause' do
|
105
105
|
sql = <<EOF
|
106
106
|
ON UPDATE NO ACTION
|
107
107
|
EOF
|
@@ -116,7 +116,7 @@ EOF
|
|
116
116
|
end
|
117
117
|
|
118
118
|
|
119
|
-
it
|
119
|
+
it 'parses complete alter_table' do
|
120
120
|
sql = <<EOF
|
121
121
|
ALTER TABLE REPLAN_ADDR
|
122
122
|
ADD CONSTRAINT REPLAN_ADDR_FK
|
@@ -137,8 +137,8 @@ EOF
|
|
137
137
|
|
138
138
|
#puts result.inspect
|
139
139
|
result.should include(:operation, :table_name)
|
140
|
-
result.should include(:operation =>
|
141
|
-
result.should include(:table_name =>
|
140
|
+
result.should include(:operation => 'alter table')
|
141
|
+
result.should include(:table_name => 'replan_addr')
|
142
142
|
result[:elements].first.should include(:add_constraint)
|
143
143
|
result[:elements].first[:add_constraint].should include(:constraint_name => 'replan_addr_fk')
|
144
144
|
result[:elements].first[:add_constraint].should include(:foreign_key_clause)
|
@@ -1,8 +1,8 @@
|
|
1
|
-
|
1
|
+
require_relative '../../../../spec/spec_helper'
|
2
2
|
|
3
3
|
describe 'Create index parsing' do
|
4
4
|
let(:parser) { DDLParser::DDL::DB2::Parser.new }
|
5
|
-
it
|
5
|
+
it 'parses create_unique_index' do
|
6
6
|
sql = <<EOF
|
7
7
|
CREATE UNIQUE INDEX REPLAN_ADDR_1 ON REPLAN_ADDR
|
8
8
|
(CONSIGNMENT ASCENDING, COLLI DESCENDING )
|
@@ -15,9 +15,9 @@ EOF
|
|
15
15
|
|
16
16
|
result.count.should == 3
|
17
17
|
result[0].should include(:operation, :object_property, :object_type, :index_name)
|
18
|
-
result[0].should include(:operation =>
|
19
|
-
result[0].should include(:object_property =>
|
20
|
-
result[0].should include(:object_type =>
|
18
|
+
result[0].should include(:operation => 'create')
|
19
|
+
result[0].should include(:object_property => 'unique')
|
20
|
+
result[0].should include(:object_type => 'index')
|
21
21
|
result[1].should include(:field)
|
22
22
|
result[1].should include(:sort_id)
|
23
23
|
result[2].should include(:field)
|