ddl_parser 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/ddl_parser/shared_rules/data_types.rb +1 -1
- data/lib/ddl_parser/translator/column.rb +16 -4
- data/lib/ddl_parser/version.rb +1 -1
- data/spec/ddl_parser/ddl/db2/create_table_spec.rb +50 -0
- data/spec/ddl_parser/shared_rules/data_types_spec.rb +2 -0
- data/spec/ddl_parser/translator/column_spec.rb +18 -2
- metadata +17 -8
- checksums.yaml +0 -7
@@ -9,7 +9,7 @@ module DDLParser
|
|
9
9
|
rule(:type_integer) {(str('integer')| str('int'))}
|
10
10
|
rule(:type_bigint) {str('bigint').as(:bigint)}
|
11
11
|
rule(:type_decimal) {(((str('decimal') | str('dec') | str('numeric') | str('num')) >>
|
12
|
-
(lparen >> integer.as(:total) >> (comma >> integer.as(:scale)).maybe >> rparen).as(:precision))).as(:decimal)}
|
12
|
+
(lparen >> integer.as(:total) >> (comma >> integer.as(:scale)).maybe >> rparen).as(:precision).maybe)).as(:decimal)}
|
13
13
|
rule(:type_float) {(str('float') >> (lparen >> integer >> rparen).as(:precision)).as(:float)}
|
14
14
|
rule(:type_real) {str('real')}
|
15
15
|
rule(:type_double) {str('double')}
|
@@ -13,7 +13,7 @@ class DDLParser::Translator::Column
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def data_type
|
16
|
-
|
16
|
+
raise "DataType not specified #{@column_hash.inspect}" if @column_hash.nil? || @column_hash[:data_type].nil?
|
17
17
|
if @column_hash[:data_type].is_a?(Hash)
|
18
18
|
@column_hash[:data_type].keys.first
|
19
19
|
else
|
@@ -27,7 +27,11 @@ class DDLParser::Translator::Column
|
|
27
27
|
when :decimal
|
28
28
|
"#{precision}.#{scale}".to_f
|
29
29
|
when :char
|
30
|
-
|
30
|
+
begin
|
31
|
+
@column_hash[:data_type][:char][:length][:integer].to_i
|
32
|
+
rescue
|
33
|
+
raise "DataType CHAR length wrong format #{@column_hash[:data_type].inspect}"
|
34
|
+
end
|
31
35
|
else
|
32
36
|
nil
|
33
37
|
end
|
@@ -36,7 +40,11 @@ class DDLParser::Translator::Column
|
|
36
40
|
def precision
|
37
41
|
case data_type
|
38
42
|
when :decimal
|
39
|
-
|
43
|
+
begin
|
44
|
+
@column_hash[:data_type][:decimal][:precision][:total][:integer].to_i
|
45
|
+
rescue
|
46
|
+
5 # decimal default if no precision present
|
47
|
+
end
|
40
48
|
else
|
41
49
|
nil
|
42
50
|
end
|
@@ -45,7 +53,11 @@ class DDLParser::Translator::Column
|
|
45
53
|
def scale
|
46
54
|
case data_type
|
47
55
|
when :decimal
|
48
|
-
|
56
|
+
begin
|
57
|
+
@column_hash[:data_type][:decimal][:precision][:scale][:integer].to_i
|
58
|
+
rescue
|
59
|
+
0 # decimal default if no scale present
|
60
|
+
end
|
49
61
|
else
|
50
62
|
nil
|
51
63
|
end
|
data/lib/ddl_parser/version.rb
CHANGED
@@ -388,7 +388,32 @@ EOF
|
|
388
388
|
:data_type=>{:char=>{:length=>{:integer=> '30'}}},
|
389
389
|
:options=> ''}}]}
|
390
390
|
end
|
391
|
+
end
|
392
|
+
|
393
|
+
context 'real dsv examples 2' do
|
394
|
+
it 'parses Example 16a' do
|
395
|
+
sql = <<EOF
|
396
|
+
CREATE TABLE COSTINVOICE
|
397
|
+
(DOC_NO CHARACTER(8) NOT NULL,
|
398
|
+
STATUS CHARACTER(12))
|
399
|
+
EOF
|
391
400
|
|
401
|
+
begin
|
402
|
+
result = parser.parse(sql.downcase)
|
403
|
+
rescue Parslet::ParseFailed => error
|
404
|
+
puts error.cause.ascii_tree
|
405
|
+
end
|
406
|
+
|
407
|
+
result.should == {:operation=> 'create table',
|
408
|
+
:table_name=> 'costinvoice',
|
409
|
+
:elements => [
|
410
|
+
{:column=>{:field=> 'doc_no',
|
411
|
+
:data_type=>{:char=>{:length=>{:integer=> '8'}}},
|
412
|
+
:options=>[{:column_option=> 'not null'}]}},
|
413
|
+
{:column=>{:field=> 'status',
|
414
|
+
:data_type=>{:char=>{:length=>{:integer=> '12'}}},
|
415
|
+
:options=> ''}}]}
|
416
|
+
end
|
392
417
|
end
|
393
418
|
|
394
419
|
context 'real dsv examples' do
|
@@ -451,6 +476,31 @@ EOF
|
|
451
476
|
result[:operation].should == 'create table'
|
452
477
|
result[:table_name].should == 'cost_invoice'
|
453
478
|
end
|
479
|
+
end
|
480
|
+
context 'real dsv examples 3' do
|
481
|
+
it 'parses Example 18' do
|
482
|
+
sql = <<EOF
|
483
|
+
CREATE TABLE COSTINVOICE
|
484
|
+
(DOC_NO CHARACTER(8) NOT NULL DEFAULT 'TEST DEFAULT',
|
485
|
+
STATUS CHARACTER(12))
|
486
|
+
|
487
|
+
EOF
|
488
|
+
|
489
|
+
begin
|
490
|
+
result = parser.parse(sql.downcase)
|
491
|
+
rescue Parslet::ParseFailed => error
|
492
|
+
puts error.cause.ascii_tree
|
493
|
+
end
|
494
|
+
|
495
|
+
result.should == {:operation=>"create table",
|
496
|
+
:table_name=>"costinvoice",
|
497
|
+
:elements=>[{:column=>{:field=>"doc_no",
|
498
|
+
:data_type=>{:char=>{:length=>{:integer=>"8"}}},
|
499
|
+
:options=>[{:column_option=>"not null"},
|
500
|
+
{:default_clause=>[{:string=>"'test default'"}]}]}},
|
501
|
+
{:column=>{:field=>"status",
|
502
|
+
:data_type=>{:char=>{:length=>{:integer=>"12"}}}, :options=>""}}]}
|
503
|
+
end
|
454
504
|
|
455
505
|
end
|
456
506
|
end
|
@@ -11,6 +11,8 @@ describe DDLParser::SharedRules::DataTypes do
|
|
11
11
|
parser.data_type.parse('smallint').should == {:data_type=> 'smallint'}
|
12
12
|
parser.data_type.parse('int').should == {:data_type=> 'int'}
|
13
13
|
parser.data_type.parse('decimal(1,2)').should == {:data_type=>{:decimal=>{:precision => {:total=>{:integer=> '1'}, :scale=>{:integer=> '2'}}}}}
|
14
|
+
parser.data_type.parse('decimal(1)').should == {:data_type=>{:decimal=>{:precision => {:total=>{:integer=> '1'}}}}}
|
15
|
+
parser.data_type.parse('decimal').should == {:data_type=>{:decimal=>"decimal"}}
|
14
16
|
parser.data_type.parse('float(1)').should == {:data_type=>{:float=>{:precision=>{:integer=> '1'}}}}
|
15
17
|
parser.data_type.parse('real').should == {:data_type=> 'real'}
|
16
18
|
parser.data_type.parse('double').should == {:data_type=> 'double'}
|
@@ -23,9 +23,21 @@ describe 'DDLParser::Translator::Column' do
|
|
23
23
|
})
|
24
24
|
}
|
25
25
|
|
26
|
-
|
26
|
+
let(:decimal_no_scale_column) {
|
27
|
+
DDLParser::Translator::Column.new(
|
28
|
+
{:field=> 'decimal_field',
|
29
|
+
:data_type=>{:decimal=>{:precision=>{:total=>{:integer=> '15'}}}},
|
30
|
+
:options=>[{:column_option=> 'not null'}, {:default_clause=>[{:integer=> '0'}]}]
|
31
|
+
})
|
32
|
+
}
|
27
33
|
|
28
|
-
|
34
|
+
let(:decimal_no_precision_column) {
|
35
|
+
DDLParser::Translator::Column.new(
|
36
|
+
{:field=> 'decimal_field',
|
37
|
+
:data_type=>{:decimal=>"decimal"},
|
38
|
+
:options=>[{:column_option=> 'not null'}, {:default_clause=>[{:integer=> '0'}]}]
|
39
|
+
})
|
40
|
+
}
|
29
41
|
|
30
42
|
it 'must receive hash' do
|
31
43
|
DDLParser::Translator::Column.new('').to_hash.should == {}
|
@@ -54,12 +66,16 @@ describe 'DDLParser::Translator::Column' do
|
|
54
66
|
int_column.precision.should == nil
|
55
67
|
char_column.precision.should == nil
|
56
68
|
decimal_column.precision.should == 15
|
69
|
+
decimal_no_scale_column.precision.should == 15
|
70
|
+
decimal_no_precision_column.precision.should == 5
|
57
71
|
end
|
58
72
|
|
59
73
|
it 'should return scale' do
|
60
74
|
int_column.scale.should == nil
|
61
75
|
char_column.scale.should == nil
|
62
76
|
decimal_column.scale.should == 2
|
77
|
+
decimal_no_scale_column.scale.should == 0
|
78
|
+
decimal_no_precision_column.scale.should == 0
|
63
79
|
end
|
64
80
|
|
65
81
|
it 'should return options' do
|
metadata
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ddl_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Rasmus Bergholdt
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
12
|
+
date: 2014-07-15 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: parslet
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
@@ -20,6 +22,7 @@ dependencies:
|
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
@@ -27,6 +30,7 @@ dependencies:
|
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: bundler
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
35
|
- - ~>
|
32
36
|
- !ruby/object:Gem::Version
|
@@ -34,6 +38,7 @@ dependencies:
|
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
43
|
- - ~>
|
39
44
|
- !ruby/object:Gem::Version
|
@@ -41,6 +46,7 @@ dependencies:
|
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: rake
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
51
|
- - ~>
|
46
52
|
- !ruby/object:Gem::Version
|
@@ -48,6 +54,7 @@ dependencies:
|
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
59
|
- - ~>
|
53
60
|
- !ruby/object:Gem::Version
|
@@ -55,6 +62,7 @@ dependencies:
|
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: rspec
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
67
|
- - '='
|
60
68
|
- !ruby/object:Gem::Version
|
@@ -62,6 +70,7 @@ dependencies:
|
|
62
70
|
type: :development
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
75
|
- - '='
|
67
76
|
- !ruby/object:Gem::Version
|
@@ -111,26 +120,27 @@ files:
|
|
111
120
|
homepage: ''
|
112
121
|
licenses:
|
113
122
|
- MIT
|
114
|
-
metadata: {}
|
115
123
|
post_install_message:
|
116
124
|
rdoc_options: []
|
117
125
|
require_paths:
|
118
126
|
- lib
|
119
127
|
required_ruby_version: !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
120
129
|
requirements:
|
121
|
-
- - '>='
|
130
|
+
- - ! '>='
|
122
131
|
- !ruby/object:Gem::Version
|
123
132
|
version: '0'
|
124
133
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
|
+
none: false
|
125
135
|
requirements:
|
126
|
-
- - '>='
|
136
|
+
- - ! '>='
|
127
137
|
- !ruby/object:Gem::Version
|
128
138
|
version: '0'
|
129
139
|
requirements: []
|
130
140
|
rubyforge_project:
|
131
|
-
rubygems_version:
|
141
|
+
rubygems_version: 1.8.28
|
132
142
|
signing_key:
|
133
|
-
specification_version:
|
143
|
+
specification_version: 3
|
134
144
|
summary: will parse statements and make it possible to extract content
|
135
145
|
test_files:
|
136
146
|
- spec/ddl_parser/ddl/db2/alter_table_spec.rb
|
@@ -142,4 +152,3 @@ test_files:
|
|
142
152
|
- spec/ddl_parser/sql/db2/select_parser_spec.rb
|
143
153
|
- spec/ddl_parser/translator/column_spec.rb
|
144
154
|
- spec/spec_helper.rb
|
145
|
-
has_rdoc:
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 43e8f3aea2bd03ccdd4c2a7b1a0b2c325f7bee84
|
4
|
-
data.tar.gz: 2a21651fe9805d07d7f80f79a160cec065557297
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: c6173cef6daad97465aac30304464b255d06955e88cbde966cdc940619cc2c653d2e872fdca48c534b2ac31678c35ad8697a025604eff2c2e0a2f49f51b75754
|
7
|
-
data.tar.gz: 10aa29aa0671fe7773d6b607c7b31fe1ffcb17dafa70ba49f9370e9f8fa89d6f7508692c4548a9d1ded2e5c6f8665671a28134fdbfa4dee367cdeaea366164e4
|