ddl_parser 0.0.3 → 0.0.4
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.
- 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)
|